Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Снова я со своим терминалом.
Вроде бы все настроил, но осталась одна загвоздка.
При работе с терминалом - посылаю код, жду ответа.
Двигаюсь дальше. Но возникла нестыковочка.
Сразу скажу - я её просто проигнорировал, но это до поры до времени.

Суть в следующем. Когда отправляю СМС, происходит два шага.
Первый - ввод кода AT+CMGS="+7910ХХХХХХ" .
При работе с СОМ портом это как
 Set www="AT+CMGS="_""""_"+7910ХХХХХХ"_""""
 
www,$Char(13)
Затем терминал думает (около 1,2 секунды) и выдает мне ответ в виде
> 
Так вот, я это приглашение никак не могу считать.
Com port выдает "> " и когда он это выдал, можно вводить вторую часть кода для отправки СМС
 write "Zdes Tekst",$Char(26)
Я пробовал
  Hang 1
  
For Nr=0:1:9
  
{
    
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) уже сам по себе готов принимать вторую часть кода.

Вопрос:
как мне считать это пресловутое сочетание "> "
ниже пример как оно в жизни.
29 апр 16, 19:19    [19123451]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Картинку то забыл.

К сообщению приложен файл. Размер - 27Kb
29 апр 16, 19:20    [19123454]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
В теле цикла
 For Nr=0:1:9
присутствует read str

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

Вот так он подвисает
  For Nr=0:1:9
  
{
    
read str
    
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)
    
{
       
..........
    
}
  }
В результате, в файле с Логами появляется
Отправлена Команда AT+CMGS=+79107978034
0 str=''
1 str=''
2 str=''
То есть цикл полностью не проходит, COM port стопорит, замораживает цикл опроса.
Итого имеем.
Если с такой строкой read str то всё виснет
Если без неё, то однажды код не сработает, так как не будет приглашения для ввода второй части.
А ставить задержку Hang 2 от фонаря, также не хочется.

Какие есть варианты и идеи?
29 апр 16, 19:30    [19123478]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
ну я
Member

Откуда: Stalingrad
Сообщений: 1181
О-О-О,

А почему решено что read str виснет, может он терминатор ждет? Может лучше читать символ с таймаутом?
29 апр 16, 19:50    [19123525]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1554
Странно:
 read str
 
Nr
судя по всему на разные устройства (по задумке), но ни одного USE-а между ними...
29 апр 16, 21:17    [19123771]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Alexey Maslov,
+ Полный код
  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  
  
"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")
    
{
      
"AT",$Char(13)
      
Hang 2
      
"AT",$Char(13)
      
Hang 2
    
}
  }

  
set str=""
  
Set www="AT+CMGS="_""""_"+7910ХХХХХ"_"""" 
  
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

    
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
29 апр 16, 21:28    [19123801]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
ну я
О-О-О,

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

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

А определить, что терминал отправил мне команду "> ", я не могу!!! ответы от терминала/COM porta в данной ситуации не считываются (ну или я что то делаю не так).
29 апр 16, 21:33    [19123831]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
При этом, остальные части кода, где идет ответ - он опрашивает нормально
Вот пример успешного выполнения команд

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

Итоги выполнения команд (возврат успешности выполнения команды)
Отправлена Команда 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
29 апр 16, 21:42    [19123859]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Как можете заметить, ответ на отправленную команду возвращается не сразу. В данном примере шаг в строках 0,5 секунд, то есть с момента отправки команды и до получения ответа об успешном выполнении проходит от 1,5 до 2,5 секунд, а иногда команды вообще не выполняться, так как происходит сбой/ошибка ...
29 апр 16, 21:44    [19123867]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1554
О-О-О
// вот здесь подвох
Так и я о том же. Команда "Nr" тоже должна в модем писать?
29 апр 16, 22:29    [19124041]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Alexey Maslov
Так и я о том же. Команда "Nr" тоже должна в модем писать?
Эта строк - проверочный код. Я её написал - на случай "вдруг сработает"
В стандартной ситуации
Set str="" //OK
"AT",$Char(13)  // w "",$Char(13)  
Set Zayavkawww="Отправлена Команда AT"
do Zayavka.WriteLine(Zayavkawww)
do Zayavka.SaveStream()
и
For Nr=0:1:9
{
  
read str
  
Nr
  
.........
}
По сути одно и то же.
Просто последний кусок кода - добавляет в строку в COM port по 1 символу и в результате у нас должно было бы получится в отправленном СМС сообщении 0123456789
29 апр 16, 22:51    [19124110]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
ну я
Member

Откуда: Stalingrad
Сообщений: 1181
О-О-О
ну я
О-О-О,

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

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

А определить, что терминал отправил мне команду "> ", я не могу!!! ответы от терминала/COM porta в данной ситуации не считываются (ну или я что то делаю не так).
read var это чтение строки. последовательности байт. пока не встретится терминатор.
read *var это чтение одного символа. терминатор не ждется.
Ну или читать строку с указанием длины чтения.
29 апр 16, 22:56    [19124132]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Код
  Set str="" //OK
  
"AT+CSQ",$Char(13)  //10=Перевод строки 13=возврат каретки
  
Set Zayavkawww="Отправлена Команда AT+CSQ"
  
do Zayavka.WriteLine(Zayavkawww)
  
do Zayavka.SaveStream()
  
Hang 1
Делится на две части

Первая часть - непосредственно отправка команды COM port-у
  Set str="" //OK
  
"AT+CSQ",$Char(13)  //10=Перевод строки 13=возврат каретки
Вторая часть кода - запись во внешний файл (*.txt) о том, что мы отправили команду модему, через COM port о получении уровня 3G сигнала
  Set Zayavkawww="Отправлена Команда AT+CSQ"
  
do Zayavka.WriteLine(Zayavkawww)
  
do Zayavka.SaveStream()
  
Hang 1
Затем мы слушаем ответы от модема
  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")
    
{
      
"AT+CSQ",$Char(13)
      
Set Zayavkawww=" ПОВТОРНО AT+CSQ"
      
do Zayavka.WriteLine(Zayavkawww)
      
do Zayavka.SaveStream()
      
Hang 2
      
Set Nr=1
    
}
  }
И записываем результаты полученные от модема во внешний файл.
В результате, во внешнем текстовом файле у нас будут записи
Отправлена Команда 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.
29 апр 16, 22:59    [19124141]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
ну я
read var это чтение строки. последовательности байт. пока не встретится терминатор.
read *var это чтение одного символа. терминатор не ждется.
Ну или читать строку с указанием длины чтения.
Сейчас попробую.
29 апр 16, 23:01    [19124146]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Фокус не удался
На код
  set str=""
  
Set www="AT+CMGS="_""""_"+79107ХХХХХ"_"""" 
  
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
Получен очень странный ответ
Отправлена Команда 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 наверное ввелись из кода.
Но проблема так и осталась
символы "> " я так и не увидел.
29 апр 16, 23:41    [19124245]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
ну я
Member

Откуда: Stalingrad
Сообщений: 1181
О-О-О,

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

Соотношение примерно такое
USER>w $a(">")
62
USER>w $c(62)
>
29 апр 16, 23:57    [19124295]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
В коде есть условие

||(str'="")

Которое, должно было сработать, так как мы получаем любое число, то есть str'="" (получили в ответ хоть что то).
Кроме этого, мы сами вводим числа.
Сейчас опробую, но шансов мало.
30 апр 16, 08:19    [19124557]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
ну я
Member

Откуда: Stalingrad
Сообщений: 1181
О-О-О
В коде есть условие

||(str'="")

Которое, должно было сработать, так как мы получаем любое число, то есть str'="" (получили в ответ хоть что то).
Кроме этого, мы сами вводим числа.
Сейчас опробую, но шансов мало.
Приглядитесь к выводу в отчет этих строк
 Получен ответ: '62'___23:32:59
3 str='62'___23:32:59
30 апр 16, 08:59    [19124584]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
ну я,

Все работает, сейчас отчитаюсь.
С вашей помощью, ускорил опрос других команд. Теперь вместо 2-2,5 сек, запрос длится 1-1,5 секунды.
Но никогда не подумал, что условие наличие ответа str'="" не сработает!
Отправлена Команда 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
30 апр 16, 09:51    [19124630]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
код был
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) нужно избавляться - он срабатывает раньше, чем нужно!
30 апр 16, 09:52    [19124632]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Ну вроде бы все.
+ Вот код успешной отправки СМС (двухшаговая его часть)
  set str=""
  
Set www="AT+CMGS="_""""_"+79107ХХХ"_""""
  
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 
      
"Ошибка=",str,!
      
Quit
    
}
  }

  
quit
Вот ответы на данную часть кода
Отправлена Команда 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

БОЛЬШОЕ СПАСИБО активному помошнику ну я.
30 апр 16, 10:07    [19124648]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
P.S.

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

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

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

Поэтому, если вам важна быстрота отправки - то один вариант (постоянно опрашивать можем, отсылать команды пустышки), но реакция практически мгновенная (сигнализация, безопасность, ...)
Если же отправляете СМС редко, и скорость реакции модема не важна, то можно пользоваться стандартными методами, там хоть и дольше все происходит, зато в интернете масса бесплатных приложений.
30 апр 16, 10:17    [19124656]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
О-О-О,

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

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

и не засорять его непонятными кодами, но при этом не потерять читаемость, воспользуйтесь макросами, например:
asciicodes.inc
...
#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
4 май 16, 10:12    [19132254]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
servit,

по мне так лучше таскать с собой комментарии, чем тратить мозг на запоминание того, что же такое BS и как мне закодировать перевод строки. На мой взгляд, запомнить CRLF сложнее, чем $C(13,10)
5 май 16, 05:48    [19136406]     Ответить | Цитировать Сообщить модератору
 Re: COM port приглашает ввести данные, но поймпть эту ситуацию не могу.  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Блок А.Н.
На мой взгляд, запомнить CRLF сложнее, чем $C(13,10)

по мне так лучше таскать с собой комментарии
Одно с другим не вяжется: или запомнить или комментарии.
5 май 16, 08:10    [19136480]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить