powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
25 сообщений из 40, страница 1 из 2
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227775
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Снова я со своим терминалом.
Вроде бы все настроил, но осталась одна загвоздка.
При работе с терминалом - посылаю код, жду ответа.
Двигаюсь дальше. Но возникла нестыковочка.
Сразу скажу - я её просто проигнорировал, но это до поры до времени.

Суть в следующем. Когда отправляю СМС, происходит два шага.
Первый - ввод кода AT+CMGS="+7910ХХХХХХ" .
При работе с СОМ портом это как
Код: plaintext
1.
 Set www="AT+CMGS="_""""_"+7910ХХХХХХ"_""""
 w www,$Char(13)
Затем терминал думает (около 1,2 секунды) и выдает мне ответ в виде
Код: plaintext
> 
Так вот, я это приглашение никак не могу считать.
Com port выдает "> " и когда он это выдал, можно вводить вторую часть кода для отправки СМС
Код: plaintext
 write "Zdes Tekst",$Char(26)
Я пробовал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  Hang 1
  For Nr=0:1:9
  {
    w Nr
    if (str=" ")||(str=">")||(str="> ")||(str=" > ")||(str'="")||(str=$Char(0))||(str=$Char(62))||(str=$Char(62,32))||(str=$Char(32,62,32))||(str=i)||(($Find(str,"1"))>0)
    {
      Set Zayavkawww=" Получен ответ: '"_str_"'"
      do Zayavka.WriteLine(Zayavkawww)
      do Zayavka.SaveStream()
      Set Nr=10 
      Hang 0.2
    }

    Set Zayavkawww=Nr_" str='"_str_"'"
    do Zayavka.WriteLine(Zayavkawww) // запись во внешний текстовой файл - истории операция
    do Zayavka.SaveStream()
    Hang 0.2
  }
И сочетание "> " никак не могу считать.
Разумеется, пока выполняется этот цикл - проходит 1+0,2*10=3 секунды и терминал(COM port) уже сам по себе готов принимать вторую часть кода.

Вопрос:
как мне считать это пресловутое сочетание "> "
ниже пример как оно в жизни.
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227776
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Картинку то забыл.
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227778
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В теле цикла
Код: plaintext
 For Nr=0:1:9
присутствует read str

Но в результате код, при опросе COM porta подвисает (если есть read str )

Вот так он подвисает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  For Nr=0:1:9
  {
     read  str
    w Nr
    if (str=" ")||(str=">")||(str="> ")||(str=" > ")||(str'="")||(str=$Char(0))||(str=$Char(62))||(str=$Char(62,32))||(str=$Char(32,62,32))||(str=i)||(($Find(str,"1"))>0)
    {
       ..........
    }
  }
В результате, в файле с Логами появляется
Код: plaintext
1.
2.
3.
Отправлена Команда AT+CMGS=+79107978034
0 str=''
1 str=''
2 str=''
То есть цикл полностью не проходит, COM port стопорит, замораживает цикл опроса.
Итого имеем.
Если с такой строкой read str то всё виснет
Если без неё, то однажды код не сработает, так как не будет приглашения для ввода второй части.
А ставить задержку Hang 2 от фонаря, также не хочется.

Какие есть варианты и идеи?
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227789
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-О-О,

А почему решено что read str виснет, может он терминатор ждет? Может лучше читать символ с таймаутом?
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227809
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно:
Код: plaintext
1.
 read str
 w Nr
судя по всему на разные устройства (по задумке), но ни одного USE-а между ними...
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227814
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Maslov,
Полный код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
  Set Zayavka=##class(%FileCharacterStream).%New()
  Set Zayavka.Filename="C:\HSPAUSBМодем\Я__ОтветыМодема.txt"
  Set Zayavkawww=""
  do Zayavka.WriteLine(Zayavkawww)
  do Zayavka.SaveStream()
  
  set str=""
  set port="COM6"
  open port:(:::" 0801n0":/BAUD=115200) // Открываем устройство
  set old=$IO // Записываем текущее устройство ввода-вывода (Терминал)
  use port  // Переключаемся на com порт
  Hang 2

  Set str="" //OK  
  w "ATE0",$Char(13)  //10=Перевод строки 13=возврат каретки Ctr+Z=$Char(26)  ESC=$Char(27)
  Set Zayavkawww="Отправлена Команда ATE0"
  do Zayavka.WriteLine(Zayavkawww)
  do Zayavka.SaveStream()
  Hang 1
  For Nr=1:1:10
  {
    Set str=""
    Hang 0.5
    read str
    Set Zayavkawww=Nr_" ATE0 Str= "_str
    do Zayavka.WriteLine(Zayavkawww)
    do Zayavka.SaveStream()
    if str="OK" {Set Nr=10 Hang 0.5}
    if (str="ERROR")||(str="NO CARRIER")
    {
      w "AT",$Char(13)
      Hang 2
      w "AT",$Char(13)
      Hang 2
    }
  }

  set str=""
  Set www="AT+CMGS="_""""_"+7910ХХХХХ"_"""" 
  w www,$Char(13) //10=Перевод строки 13=возврат каретки Ctr+Z=$Char(26)  ESC=$Char(27)  ">"=$Char(62)
  Set Zayavkawww="Отправлена Команда AT+CMGS=+7910ХХХХХ"
  do Zayavka.WriteLine(Zayavkawww)
  do Zayavka.SaveStream()
  
  Hang 1
  For Nr=0:1:9
  {
    read str 
               
    // вот здесь подвох - или виснет или игнорирует запросы от COM port

    w Nr
    if (str=" ")||(str=">")||(str="> ")||(str=" > ")||(str'="")||(str=$Char(0))||(str=$Char(62))||(str=$Char(62,32))
                ||(str=$Char(32,62,32))||(str=i)||(($Find(str,"1"))>0)
    {
      Set Zayavkawww=" Получен ответ: '"_str_"'"
      do Zayavka.WriteLine(Zayavkawww)
      do Zayavka.SaveStream()
      Set Nr=10 
      Hang 0.2
    }
    // w $Char(8) // $Char(8)=стирал все символы, но "> " оставил, то есть при отправке СМС ушло только АТ 
    Set Zayavkawww=Nr_" str='"_str_"'"
    do Zayavka.WriteLine(Zayavkawww)
    do Zayavka.SaveStream()
    Hang 0.2
  }
  
  write "10=Perevod Stroki",$Char(26) // 10=Перевод строки 13=возврат каретки Ctr+Z=$Char(26)  ESC=$Char(27) ">"=$Char(62)
  
  quit
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227817
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну яО-О-О,

А почему решено что read str виснет, может он терминатор ждет? Может лучше читать символ с таймаутом?Не совсем понял, что имеете ввиду.
Я Делаю опрос последней строки, чтобы продолжить выполнение кода.
Опрашиваю COM port,

Если в коде указать read str , то код останавливается и все подвисает, и если принудительно прервать выполнение программы и открыть терминал COM porta через PYTTY, то первое что выводится будет "> ", то есть COM port Ждёт ввода команды, даже если мы закрыли исполняемый файл (прервали выполнение кода).

А определить, что терминал отправил мне команду "> ", я не могу!!! ответы от терминала/COM porta в данной ситуации не считываются (ну или я что то делаю не так).
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227822
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При этом, остальные части кода, где идет ответ - он опрашивает нормально
Вот пример успешного выполнения команд

В основном коде есть дополнительные блоки, которые устанавливают значения под конкретного оператора сотовой связи

Итоги выполнения команд (возврат успешности выполнения команды)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Отправлена Команда AT
1 AT Str= 
2 AT Str= 
3 AT Str= OK
Отправлена Команда AT&F
1 AT&F Str= 
2 AT&F Str= 
3 AT&F Str= 
4 AT&F Str= OK
Отправлена Команда ATE0
1 ATE0 Str= 
2 ATE0 Str= ATE0
3 ATE0 Str= 
4 ATE0 Str= 
5 ATE0 Str= OK
Отправлена Команда AT+CMGF=1
1 AT+CMGF=1 Str= 
2 AT+CMGF=1 Str= 
3 AT+CMGF=1 Str= 
4 AT+CMGF=1 Str= NO CARRIER
 ПОВТОРНО AT+CMGF=1
2 AT+CMGF=1 Str= 
3 AT+CMGF=1 Str= 
4 AT+CMGF=1 Str= 
5 AT+CMGF=1 Str= OK
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227824
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как можете заметить, ответ на отправленную команду возвращается не сразу. В данном примере шаг в строках 0,5 секунд, то есть с момента отправки команды и до получения ответа об успешном выполнении проходит от 1,5 до 2,5 секунд, а иногда команды вообще не выполняться, так как происходит сбой/ошибка ...
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227848
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-О-О// вот здесь подвохТак и я о том же. Команда "W Nr" тоже должна в модем писать?
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227852
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey MaslovТак и я о том же. Команда "W Nr" тоже должна в модем писать?Эта строк - проверочный код. Я её написал - на случай "вдруг сработает"
В стандартной ситуации
Код: plaintext
1.
2.
3.
4.
Set str="" //OK
w "AT",$Char(13)  // w "",$Char(13)  
Set Zayavkawww="Отправлена Команда AT"
do Zayavka.WriteLine(Zayavkawww)
do Zayavka.SaveStream()
и
Код: plaintext
1.
2.
3.
4.
5.
For Nr=0:1:9
{
  read str
  w Nr
  .........
}
По сути одно и то же.
Просто последний кусок кода - добавляет в строку в COM port по 1 символу и в результате у нас должно было бы получится в отправленном СМС сообщении 0123456789
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227855
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-О-Ону яО-О-О,

А почему решено что read str виснет, может он терминатор ждет? Может лучше читать символ с таймаутом?Не совсем понял, что имеете ввиду.
Я Делаю опрос последней строки, чтобы продолжить выполнение кода.
Опрашиваю COM port,

Если в коде указать read str , то код останавливается и все подвисает, и если принудительно прервать выполнение программы и открыть терминал COM porta через PYTTY, то первое что выводится будет "> ", то есть COM port Ждёт ввода команды, даже если мы закрыли исполняемый файл (прервали выполнение кода).

А определить, что терминал отправил мне команду "> ", я не могу!!! ответы от терминала/COM porta в данной ситуации не считываются (ну или я что то делаю не так). read var это чтение строки. последовательности байт. пока не встретится терминатор.
read *var это чтение одного символа. терминатор не ждется.
Ну или читать строку с указанием длины чтения.
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227858
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код
Код: plaintext
1.
2.
3.
4.
5.
  Set str="" //OK
  w "AT+CSQ",$Char(13)  //10=Перевод строки 13=возврат каретки
  Set Zayavkawww="Отправлена Команда AT+CSQ"
  do Zayavka.WriteLine(Zayavkawww)
  do Zayavka.SaveStream()
  Hang 1
Делится на две части

Первая часть - непосредственно отправка команды COM port-у
Код: plaintext
1.
  Set str="" //OK
  w "AT+CSQ",$Char(13)  //10=Перевод строки 13=возврат каретки
Вторая часть кода - запись во внешний файл (*.txt) о том, что мы отправили команду модему, через COM port о получении уровня 3G сигнала
Код: plaintext
1.
2.
3.
  Set Zayavkawww="Отправлена Команда AT+CSQ"
  do Zayavka.WriteLine(Zayavkawww)
  do Zayavka.SaveStream()
  Hang 1
Затем мы слушаем ответы от модема
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  Hang 1
  For Nr=1:1:10
  {
    Set str=""
    Hang 0.5
    read str
    Set Zayavkawww=Nr_" AT+CSQ Str= "_str
    do Zayavka.WriteLine(Zayavkawww)
    do Zayavka.SaveStream()
    if (str="OK") {Set Nr=10 Hang 0.5} // ответ равен "+CSQ: 24,65" ||(($Find(str,"+CSQ"))>0) через 2-3 секунды все равно возвращает ОК!
    if (str="ERROR")||(str="NO CARRIER")
    {
      w "AT+CSQ",$Char(13)
      Set Zayavkawww=" ПОВТОРНО AT+CSQ"
      do Zayavka.WriteLine(Zayavkawww)
      do Zayavka.SaveStream()
      Hang 2
      Set Nr=1
    }
  }
И записываем результаты полученные от модема во внешний файл.
В результате, во внешнем текстовом файле у нас будут записи
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Отправлена Команда AT+CSQ
1 AT+CSQ Str= 
2 AT+CSQ Str= 
3 AT+CSQ Str= 
4 AT+CSQ Str= +CSQ: 21,72
5 AT+CSQ Str= 
6 AT+CSQ Str= 
7 AT+CSQ Str= 
8 AT+CSQ Str= OK
С этим все просто и понятно, а вот получить ответ от команды AT+CMGS= , а точнее узнать, когда появились символы "> " я не могу, мой код просто не может их считать, хотя я на 150% знаю, что они уже появились и висят в терминале/COM port.
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227859
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну я read var это чтение строки. последовательности байт. пока не встретится терминатор.
read *var это чтение одного символа. терминатор не ждется.
Ну или читать строку с указанием длины чтения.Сейчас попробую.
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227873
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фокус не удался
На код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
  set str=""
  Set www="AT+CMGS="_""""_"+79107ХХХХХ"_"""" 
  w www,$Char(13) 
  Set Zayavkawww="Отправлена Команда AT+CMGS=+79107ХХХХХХ___"_($ZT($Piece($horolog,",",2)))
  do Zayavka.WriteLine(Zayavkawww)
  do Zayavka.SaveStream()
  Hang 1
  For Nr=0:1:9
  {
    write Nr
    Hang 1
    read *str
    if (str=Nr)||(str=" ")||(str=">")||(str="> ")||(str=" > ")||(str'="")
    {
      Set Zayavkawww=" Получен ответ: '"_str_"'___"_($ZT($Piece($horolog,",",2)))
      do Zayavka.WriteLine(Zayavkawww)
      do Zayavka.SaveStream()
      Hang 0.2
    }
    w $Char(8) // $Char(8)=стирал все символы, но "> " оставил, то есть при отправке СМС ушло только АТ 
    Set Zayavkawww=Nr_" str='"_str_"'___"_($ZT($Piece($horolog,",",2)))
    do Zayavka.WriteLine(Zayavkawww)
    do Zayavka.SaveStream()
  }
  write " ***Perevod Stroki",$Char(26) //10=Перевод строки 13=возврат каретки Ctr+Z=$Char(26)  ESC=$Char(27)  ">"=$Char(62)  
  quit
Получен очень странный ответ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Отправлена Команда AT+CMGS=+79107ХХХХХХ___23:32:54
 Получен ответ: '10'___23:32:56
0 str='10'___23:32:56
 Получен ответ: '13'___23:32:57
1 str='13'___23:32:57
 Получен ответ: '10'___23:32:58
2 str='10'___23:32:58
 Получен ответ: '62'___23:32:59
3 str='62'___23:32:59
 Получен ответ: '32'___23:33:00
4 str='32'___23:33:01
При этом дальше 4 строки не идет даже через 5 минут. При открытии PyTTY - опять вылазит "> ", что говорит, что о том, что ввод в терминале не завершен.
При этом в ответах, записанных во внешний текстовой файл фигурируют цифры 62 и 32 и 10
А в пришедшей СМС был следующий текст "345at at", что больше похоже на правду, т.к при запуске PyTTY я ввожу at, а цифры 345 наверное ввелись из кода.
Но проблема так и осталась
символы " > " я так и не увидел.
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227877
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-О-О,

Команда read *var читает символ, но помещает в var не сам прочитанный байт, а его код.

Соотношение примерно такое
Код: plaintext
1.
2.
3.
USER>w $a(">")
62
USER>w $c(62)
>
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227928
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В коде есть условие

||(str'="")

Которое, должно было сработать, так как мы получаем любое число, то есть str'="" (получили в ответ хоть что то).
Кроме этого, мы сами вводим числа.
Сейчас опробую, но шансов мало.
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227935
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-О-ОВ коде есть условие

||(str'="")

Которое, должно было сработать, так как мы получаем любое число, то есть str'="" (получили в ответ хоть что то).
Кроме этого, мы сами вводим числа.
Сейчас опробую, но шансов мало.Приглядитесь к выводу в отчет этих строк
Код: plaintext
1.
 Получен ответ: '62'___23:32:59
3 str='62'___23:32:59
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227945
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну я,

Все работает, сейчас отчитаюсь.
С вашей помощью, ускорил опрос других команд. Теперь вместо 2-2,5 сек, запрос длится 1-1,5 секунды.
Но никогда не подумал, что условие наличие ответа str'="" не сработает!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Отправлена Команда AT+CMGS=+7910ХХХХХХ___09:46:06.861083
1 Смена Nr. str='75' = 09:46:07.49174
2	Получен ответ: '13' _ 09:46:07.624805

                                      !!!!!!!  Отправили СМС и ждем ответа об успешной отправке
1 AT+CMGS=+7910 Str= 
2 AT+CMGS=+7910 Str= 
3 AT+CMGS=+7910 Str= 
4 AT+CMGS=+7910 Str= > а вот и символ вылез(шаг опроса 0,250 сек)
5 AT+CMGS=+7910 Str= 
6 AT+CMGS=+7910 Str= 
7 AT+CMGS=+7910 Str= 
8 AT+CMGS=+7910 Str= +CMGS: 199
 СМС отправлена! Получен ответ: +CMGS: 199
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227946
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
код был
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
For Nr=1:1:20 // Если всё ОК, то цикл должен прерваться примерно на Nr=5-7
{
  Kill str
  Hang 0.125
  read *str // аналогично Set str=$Ascii(str,1)   32='пробел' 62='>'  13=возврат каретки
  if (str=62)||(str=32)||(str=13) 
  {

    ..............
  }
По ходу дела, от ||(str=13) нужно избавляться - он срабатывает раньше, чем нужно!
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227953
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вроде бы все.
Вот код успешной отправки СМС (двухшаговая его часть)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
  set str=""
  Set www="AT+CMGS="_""""_"+79107ХХХ"_""""
  w www,$Char(13)
  Set Zayavkawww="Отправлена Команда AT+CMGS=+7910ХХХ___"_($ZT($Piece($horolog,",",2)))_(($PIECE($NOW(),",",2))#1)
  do Zayavka.WriteLine(Zayavkawww)
  do Zayavka.SaveStream()

  Hang 0.5
  For Nr=1:1:20 // Если всё ОК, то цикл должен прерваться примерно на Nr=5-7
  {
    Kill str
    Hang 0.125
    read *str // аналогично Set str=$Ascii(str,1)   32='пробел' 62='>'  13=возврат каретки
    if (str=62)||(str=32) // 79=O 75=K 
    {
      Set Zayavkawww=Nr_"  Получен ответ: '"_str_"' _ "_($ZT($Piece($horolog,",",2)))_(($PIECE($NOW(),",",2))#1)
      do Zayavka.WriteLine(Zayavkawww)
      do Zayavka.SaveStream()
      Set Nr=20
      Hang 0.250
      Goto EndATCMGS
    }
    Set Zayavkawww=Nr_" Смена Nr. str='"_str_"' = "_($ZT($Piece($horolog,",",2)))_(($PIECE($NOW(),",",2))#1)
    do Zayavka.WriteLine(Zayavkawww)
    do Zayavka.SaveStream()
  }

EndATCMGS

  w $Char(8) // !!!!!!!!!!!!!! иначе в СМС приходит символ ">" и получается ">Test Uspeshno Proiden!"
  Hang 0.150
  write "Test Uspeshno Proiden!",$Char(26) 
  //10=Перевод строки 13=возврат каретки Ctr+Z=$Char(26)  ESC=$Char(27)  ">"=$Char(62)

  For Nr=1:1:20
  {
    Set str=""
    Hang 0.250
    read str
    Set Zayavkawww=Nr_" AT+CMGS=+79107ХХХ Str= "_str
    do Zayavka.WriteLine(Zayavkawww)
    do Zayavka.SaveStream()
    if (($Find(str,"+CMGS"))>0) // приходит ответ   +CMGS: 170
    {
      Set Zayavkawww=" СМС отправлена! Получен ответ: "_str
      do Zayavka.WriteLine(Zayavkawww)
      do Zayavka.SaveStream()
      Set Nr=20
      Hang 0.250
    }
    if (($Find(str,"ERROR"))>0)||(str="ERROR")||(str="NO CARRIER") // +CMS ERROR: 305
    {
      Set Zayavkawww=" ОШИБКА"_str
      do Zayavka.WriteLine(Zayavkawww)
      do Zayavka.SaveStream()
      use old 
      w "Ошибка=",str,!
      Quit
    }
  }

  quit
Вот ответы на данную часть кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Отправлена Команда AT+CMGS=+7910ХХХ___10:00:59.0877
1 Смена Nr. str='10' = 10:00:59.75849
2 Смена Nr. str='13' = 10:00:59.914526
3 Смена Nr. str='10' = 10:01:00.070517
4	Получен ответ: '62' _ 10:01:00.226716

1 AT+CMGS=+7910ХХХ Str=  
2 AT+CMGS=+7910ХХХ Str= 
3 AT+CMGS=+7910ХХХ Str= 
4 AT+CMGS=+7910ХХХ Str= 
5 AT+CMGS=+7910ХХХ Str= +CMGS: 202
 СМС отправлена! Получен ответ: +CMGS: 202

БОЛЬШОЕ СПАСИБО активному помошнику ну я.
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39227958
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
P.S.

Кстати, если стандартным способом (через костыли, через бесплатные приложения) одна СМС-ка приходила через 17-25 секунд с момента отправки, то сейчас она приходит уже ТОЛЬКО через 4-5 секунд.
Практически моментально.

С чем это связано - не знаю, но отличия по скорости доставки на телефон колоссальные.

Одно но - для запуска модема нужна подготовительная часть - а она длится около 1 минуты, а потом нужно поддерживать его в активном состоянии (через запросы), иначе модем "засыпает" и все начинает сыпаться (идут коды ошибок).

Поэтому, если вам важна быстрота отправки - то один вариант (постоянно опрашивать можем, отсылать команды пустышки), но реакция практически мгновенная (сигнализация, безопасность, ...)
Если же отправляете СМС редко, и скорость реакции модема не важна, то можно пользоваться стандартными методами, там хоть и дольше все происходит, зато в интернете масса бесплатных приложений.
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39228872
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-О-О ,

Дабы не писать в коде комментарии вида

Код: plaintext
 //10=Перевод строки 13=возврат каретки Ctr+Z=$Char(26)  ESC=$Char(27)  ">"=$Char(62)

и не засорять его непонятными кодами, но при этом не потерять читаемость, воспользуйтесь макросами, например:asciicodes.inc
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
#define  CRLF  $C(13,10)
#define  BEEP  $C(7)
#define  BS    $C(8)
#define  TAB   $C(9)
#define  SUB   $C($ZH("1A"))
#define  ESC   $C($ZH("1B"))
...
Полный список кодов: ASCII
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39229547
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

по мне так лучше таскать с собой комментарии, чем тратить мозг на запоминание того, что же такое BS и как мне закодировать перевод строки. На мой взгляд, запомнить CRLF сложнее, чем $C(13,10)
...
Рейтинг: 0 / 0
COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
    #39229562
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.На мой взгляд, запомнить CRLF сложнее, чем $C(13,10)

по мне так лучше таскать с собой комментарии Одно с другим не вяжется: или запомнить или комментарии.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / COM port приглашает ввести данные, но поймпть эту ситуацию не могу.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]