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

Откуда: Нижний Новгород
Сообщений: 211
Сразу объясню для чего мне это нужно.
Было задача отправлять СМС сообщения. Задача решена через Каше (не через COM port). Используется три внешних программ плюс куча специфического настройки оборудования. Всё работает, полет нормальный (скорость отправки СМС сообщений от 3 до 5 секунд). Есть отчеты о доставленных сообщениях.
Но нужна обратная связь (получение СМС-ок и их анализ). Тут уже или огород городить или покупка стороннего софта или работа с СОМ портом напрямую.

Подключиться к СОМ порту даже с наличием статьи по метеоданным оказалось не так просто.
Подключился, а дальше вообще пошла полная ерунда, на команды, посланные 3G модему приходили невразумительные ответы (невпапад), при этом звонки совершались.
Я так понял, что на мою команду идут ответы от предыдущих команд, а иногда ответы вообще идут по нарастанию (все команды и ответы в одной строке).
Чтобы понять что же происходит на самом деле я хочу запусить терминал "HyperTerminal" или "putty.exe" в Каше давать команды и смотреть в окно терминала,
что же происходит на самом деле.

Загвоздка в том, что доступ к COM порту возможен только из ОДНОЙ любой программы, то есть возможно только одно соединение одновременно.

ВОПРОС:
Вот я и думаю, возможно ли запустить ТЕРМИНАЛ ("HyperTerminal" или "putty.exe") вручную или через Cache
и в окне открывшегося терминала смотреть, какой код в него подается/поступает
и какие действия в нём происходят.
Так гораздо легче понять что делается не так.

К сообщению приложен файл. Размер - 69Kb
19 апр 16, 08:39    [19074880]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
О-О-О
Member

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

К сообщению приложен файл. Размер - 72Kb
19 апр 16, 08:40    [19074884]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Если делать
 "ATE0",$Char(10,13) //10=Перевод строки 13=возврат каретки
то также полная неразбериха с ответами
19 апр 16, 08:42    [19074887]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
О-О-О
Member

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

К сообщению приложен файл. Размер - 34Kb
19 апр 16, 08:46    [19074899]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
servit
Member

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

А логировать ввод/вывод в файл/глобал и смотреть уже там не подходит?
19 апр 16, 08:51    [19074921]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
О-О-О
Member

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

А логировать ввод/вывод в файл/глобал и смотреть уже там не подходит?


Каше ошибку не даёт, команды проходят успешно.
Вся загвоздка именно в нестыковке отправленных команд 3G модему и полученных ответов от него.
К примеру, отправляю команду на звонок после команды пустышки - получают в ответ - ошибка команды, при этом, звнок на мой сотовый идет, значит команда выполнена успешно, а терминал выдает - что команда не может быть выполнена.
Ответ даёт 3G модем.
Я более чем уверен, что этот ERRER был от предыдущей команды, а значит во время выполнения кода в дальнейшем нет никакой уверенности что опять не перепутаются команды и ответу, а значит доверять ОТВЕТАМ - нельзя.

Вот я и хочу понять зависимость - команды и ответа.
Те же самые команды, введённые напрямую в "HyperTerminal" работают без проблем и ответы приходят адекватные, а при работе через COM port Cache - начинаются свистопляски.
19 апр 16, 09:01    [19074959]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
О-О-О
Member

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

А логировать ввод/вывод в файл/глобал и смотреть уже там не подходит?


Поподробнее!

Предлагаете:
Отослать команду,
Подождать 1 секунду.
Считать ответ (только непонятно, он все ответы считает или только один (см картинку ниже))
Скопировать во внешний файл
Анализировать внешний файл (текстовой к примеру).


Делал и такое - так там (см картинку ниже).

К сообщению приложен файл. Размер - 90Kb
19 апр 16, 09:06    [19074994]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Проблема еще в том, как я понял, что при переключении с COM port на текущее устройство и при повторном переключении на COM port, он начинает считывать ответы и посланные команды с самого начала сессии, то есть с первой строки.
Хотя, если не переключаться с КОМ порта, а сразу выводить в текстовой файл, может такого и не будет.

Но задача все же запустить отладчик, чтобы я мог видеть, что отсылается в терминал связи с COM port-ом и какие ответы получены в ответ в режиме реального времени.
19 апр 16, 09:10    [19075007]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 783
О-О-О,
Из личного опыта:
Самое первое, это разобраться с терминаторами, которые КАШЕ может устанавливать по умолчанию при открытии порта.
Второе, это логгировать все прочитанное.
Третье, это разобраться с настройками СОМ порта при его открытии, тут возможно придется экспериментировать.
Четвертое, есть специальные программно-аппаратные подглядывалки потока байтов, идущих по проводам СОМ-соединения, но тут есть тонкости. Зато этот способ позволяет видеть все те байты, что идут в прямом и обратном направлении, далее их можно выгружать в файлы, файлы засасывать в КАШЕ и скриптами уже разбирать, опираясь на свои собственные логи. Мне это в свою очередь позволяло раскалывать закрытые протоколы приборов и устройств.
И еще, у КАШЕ есть интересное буферирование, если отправляется количество байт более (кажется 65, но могу и ошибаться, надо пробовать), то реально байты в линию пойдут не сплошным потоком, а с паузами, примерно через 20-30 мсек.

Давно было, всего и не вспомнишь...

Да, еще момент, Каше хорош по СОМ-портам для ASCII-протоколов, а для RTU-протоколов приходилось изголяться...
19 апр 16, 09:34    [19075086]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1509
Был опыт работы с модемами через com, лет 20 назад :) Это были не GSM-модемы, конечно, но AT команды уже существовали. Из того что помню:
- ограничитель - однозначно $c(13) (даже не сомневайтесь)
- проблема вашего кода, скорее всего, в том что вычитываются не все ответы.
Любой терминал (например putty) позволяет логгировать ввод-вывод. У вас же получается общаться с модемом с терминала? залоггируйте и подсмотрите, что происходит при обмене.

Лет 7 назад мне пришлось-таки отправлять смски из Cache. Но времена были уже другие, и я предпочёл не заниматься мазохизмом, а интегрироваться с smstools3.kekekasvi.com/index.php?p=
Пакет очень мощный, я не использовал и половины его возможностей. Важно, что в его составе есть демон, контролирующий полностью модемы, а задача прикладной программы - только складывать sms в папку для отправки и забирать отчёты/принятые sms из других папок.
19 апр 16, 09:37    [19075097]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
О-О-О
Member

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

А логировать ввод/вывод в файл/глобал и смотреть уже там не подходит?
Вот что выдал при записи в текстовой файл

Ответ AT= ERROR
Ответ на ATE0= ERROR
Ответ на ATD(звонок)= ERROR
Ответ на AT+CSQ= ERROR

При этом сигнал есть, звонок есть
а он мне возвращает одни ошибки.
19 апр 16, 09:43    [19075132]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3094
Блог
О-О-О
Каше ошибку не даёт, команды проходят успешно.
Вся загвоздка именно в нестыковке отправленных команд 3G модему и полученных ответов от него.
Вы COM-порты предварительно настроили? Например через:
%SYS>^LEGACYNETWORK

О-О-О
Поподробнее!
ZBREAK
Operating System Notes:
  • Windows — Trace messages to another device are supported on Windows platforms for terminal devices connected to a COM port, such as COM1:. You cannot use the console or a terminal window. You can specify a sequential file for the trace device

ZBREAK (Trace execution and output a trace record)
19 апр 16, 09:43    [19075139]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 783
Да, еще не забывать предварительную очистку буфера, уже не помню как это делалось, где-то это описывается, также необходимо анализировать статусы завершения работы команд с устройством, об этом тоже читать - под рукой ничего нету, чтобы показать примеры, к сожалению...
19 апр 16, 09:44    [19075141]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
imdb
Member

Откуда: Москва
Сообщений: 139
О-О-О
ВОПРОС:
Вот я и думаю, возможно ли запустить ТЕРМИНАЛ ("HyperTerminal" или "putty.exe") вручную или через Cache
и в окне открывшегося терминала смотреть, какой код в него подается/поступает
и какие действия в нём происходят.
Так гораздо легче понять что делается не так.

Я так понимаю, что вам нужен отладчик com-порта. И в нем уже смотреть, что именно туда приходит.
Что касается символа окончания строки, то попробуйте использовать "!", т.е. w "<текст_команды>",!. Чтобы Каше само определило перевод строки. Или же вообще не давайте такого перевода. Не факт, что это здесь потребуется.

Вообще в данном случае лучше найти альтернативный вариант записи в com-порт и сравнивать его работу с работой через Каше. Сравнивать HyperTerminal с программой на Каше - не самый правильный путь.
Также можно почитать, как работает запись в com-порт на других языках. Тема старая. Помню еще в 90-х в модем отправляли команды. Посмотреть, может есть какие-то особенности в процессе записи в com-порт, которые вы не учли. Маловероятно, что в Каше это работает совсем по другому. Но если все же выяснятся особенности, то уже можно будет WRC потрясти.

Вот все, чем могу помочь. Удачи!
19 апр 16, 09:45    [19075147]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 783
А еще свяжитесь с Сергеем Кудиновым, у него была замечательная dll-ка с классовым обрамлением.
19 апр 16, 09:46    [19075149]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
О-О-О
Member

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

Сейчас все проще - два дня работы и СМС уходят без проблем.
Программы для отправки СМС - (что использую я в своей работе) все бесплатные (даже не триал и не демо, а полностью бесплатные).
Стоимость отправки одной СМС - 20 коп (200 руб за 1000 штук). Есть тарифы у Теле2, где за 3,5 в день можно отправлять по 350 SMS в день бесплатно.
У меня задача проще - информирование о сбоях и произошедших событиях, плюс каждый час - одно контрольное SMS - чтобы знать, что Сбоя в приложении СМС отправки нет. В сумме за день получается 20-30 СМС.

Бьюсь с КОМ портом - чтобы получать и анализировать СМС-ски.
19 апр 16, 09:50    [19075170]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3094
Блог
AlexKB
А еще свяжитесь с Сергеем Кудиновым, у него была замечательная dll-ка с классовым обрамлением.
Надеюсь, KSergio всё ещё читает этот форум.
19 апр 16, 09:51    [19075176]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3094
Блог
О-О-О
У меня задача проще - информирование о сбоях и произошедших событиях, плюс каждый час - одно контрольное SMS - чтобы знать, что Сбоя в приложении СМС отправки нет. В сумме за день получается 20-30 СМС.
Может стоит воспользоваться уже встроенным в Caché механизмом отправки SMS, который используется для Two-Factor Authentication?
19 апр 16, 09:57    [19075223]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1509
В общем случае AlexKB , конечно, прав. Но у вас в принципе всё получается, поэтому изощренные методы перехвата потока, которые есть и для usb-портов, скорее всего не понадобятся; достаточно будет терминального лога.
Насчёт $c(13) - имел в виду ограничитель на выводе, конечно.
19 апр 16, 10:04    [19075272]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
О-О-О
Member

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

А логировать ввод/вывод в файл/глобал и смотреть уже там не подходит?


Попробовал с кодом "AT",$Char(13)

В ответ на код
 // Создаём новый файл для вывода заявок для QUIK
 
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 5
 
 
Set str=""
 
"AT",$Char(13) // w "",$Char(13)  
 
Hang 0.5
 
while str="" {read str}
 
Set Zayavkawww="Ответ AT= "_str
 
do Zayavka.WriteLine(Zayavkawww)
 
do Zayavka.SaveStream()
 
 
Set str=""
 
"ATE0",$Char(13) //10=Перевод строки 13=возврат каретки
 
Hang 0.5
 
while str="" {read str}
 
Set Zayavkawww="Ответ на ATE0= "_str
 
do Zayavka.WriteLine(Zayavkawww)
 
do Zayavka.SaveStream()
 
 
set str=""
 
write "ATD+791079хххххххххх;",$Char(13)
 
Hang 0.5
 
while str="" {read str}
 
Set Zayavkawww="Ответ на ATD(звонок)= "_str
 
do Zayavka.WriteLine(Zayavkawww)
 
do Zayavka.SaveStream()
 
 
 
set str=""
 
write "AT+CSQ",$Char(13) // уровень сигнала
 
Hang 0.5
 
while str="" {read str}
 
Set Zayavkawww="Ответ на AT+CSQ= "_str
 
do Zayavka.WriteLine(Zayavkawww)
 
do Zayavka.SaveStream()
 
 
 
Hang 10
 
close port // Закрываем устройство 
 
use old 
 
" Тестирование завершено",!
 
 
QUIT
получил нормальные ответы

Ответ AT= OK
Ответ на ATE0= OK
Ответ на ATD(звонок)= OK
Ответ на AT+CSQ= +CSQ: 20,73

Теперь нужно будет подумать о сложно-составных ответах:
при звонке (ATD+79107ххххх;)
мы получаем 3 ответа ОК/Связь Установлена/Связь завершена
но это уже решаемо.
19 апр 16, 10:06    [19075281]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Я все задача запускаю через терминал, поэтому, у меня
в коде есть строка

set old=$IO // Записываем текущее устройство ввода-вывода (Терминал)

то есть вывод сообщений в терминале Cache.
Если вы будете запускать данный код как фоновую задачу, то эта часть кода бесполезна.
19 апр 16, 10:10    [19075298]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1509
Сейчас все проще - два дня работы и СМС уходят без проблем.

Так я и не многим больше потратил, и sms3tools абсолютно бесплатен, и с com-портом тр*ся не пришлось... но это конечно сугубое имхо.
19 апр 16, 10:14    [19075324]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 783
О-О-О,
После записи в СОМ-порт читать необходимо сразу же, читать необходимо по-байтно, таким образом можно будет локализовать правильные ответы от устройства. Иначе высока вероятность, что будут сливаться ответы хорошие+хорошие, хорошие+плохие, плохие+плохие. А после слияния ответов вообще будет трудно разобрать ответ от устройства.
А вдруг оно Вам периодически отвечает, что занято, что переполнен буфер отправки, что еще чего-то там.
СОМ-порт - это такая штука, что работает по принципу "Угу - Ага"!
19 апр 16, 10:27    [19075414]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13037
О-О-О,

Зачем использовать
w $c(10)
или
w $c(13,10)
если есть стандартный
!
19 апр 16, 10:30    [19075424]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли работать с запущенным терминалом HyperTerminal через Cache код  [new]
servit
Member

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

Хорошо бы ещё трассировать/анализировать статус последнего READ, используя $ZA. Ну, и до кучи $ZB/$KEY: Special Variables Show I/O Conditions

PS: 2246924
19 апр 16, 11:05    [19075652]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить