Просмотр полной версии : ПМ01 определить входящий вызов
Подскажите, пожалуйста, возможно ли понять из ПЛК звонит ли кто в данный момент и определить номер звонящего.
Я так понимаю после поступления 'RING' послать 'AT+CLCC' и разобрать номер из принятой после этого строки из буфера? Я прав?
Модемы пока не пришли и опыто работы с gsm 0, поэтому пока хочу накидать программу примерную.
AT+CLCC$R$N вроде так, а вообще послушайте постоянно порт и сделайте вызов и увидите какой вывод будет в терминале
Спасибо. Там и будет видно. Подскажите еще вот что:
Если я буду ждать ответа от модема после команды, не перезагрузится ли ПЛК из за превышения времени цикла. Сейчас стоит 10. Сей час он опрашивает модули и передаёт параметры и аварии в самописную скаду, что уже вызывает некоторые задержки.
Вот и вопрос: Вызывать целиком проверку входящих и отправку смс в отдельных функциях или выполнять параллельно с основной программой.
На сколько быстро, по вашему опыту, модем отвечает на команды?
http://www.owen.ru/forum/showthread.php?t=13029
прочтите про эту библиотеку: в первых трех постах - сама, описание и примеры. Кроме сообщений она проверяет наличие входящих звонков
читал. факт поступления вызова есть, но номера нет.По этому syslibcom и хочу использовать.
я команду назвал. А на какой библиотеке Вы сделаете, это лично Ваше дело. Суть проста, открыли порт, сделали запрос и начинаете каждый цикл ждать ответ, как что то приходит, преобразуете в строку и анализируете что получилось
С отправкой смс syslibcom разобрался.Спасибо. Но
Почему то на запрос CLLC сначала приходи в буффер
'$R$N+CLCC: '
потом
',"+7953950'
т.е. кусками.
Так и должно быть? По справочнику команд вроде строкой должно быть.
Как считаете?
Считываю как в примере:
sz:=SysComRead(com_num,ADR(rcvBUF),1024,0);
IF sz<>0 THEN (*÷òåíèå ïîðòà*)
rcvStr:='';
(*Åñëè ÷òî òî ïðèøëî îò ìîäåìà*)
FOR iter:=0 TO sz-1 DO
a_char:=ADR(rcvBuf[iter]);
rcvStr:=CONCAT(rcvStr,LEFT(a_char^,1));
IF LEN(rcvStr)>250 THEN
rcvStr:=DELETE(rcvStr,1,1);
END_IF
END_FOR
obmen:=CONCAT(obmen,rcvStr);
С отправкой смс syslibcom разобрался.Спасибо. Но
Почему то на запрос CLLC сначала приходи в буффер
'$R$N+CLCC: '
потом
',"+7953950'
т.е. кусками.
Так и должно быть? По справочнику команд вроде строкой должно быть.
Как считаете?
Все правильно у вас приходит, у меня также работает. Приходит не кусками,а так задумано в ответе, как бы второй строкой. Не заморачивайтесь, просто обрабатывайте в своей программе.
Остальные ответы он тоже присылает кусками:
Например:K$R$N
В строке ОК уже нет и предыдущий пример уже неверно работает.
Может длина буфера где задаётся? Либо алгоритм усложнять придется.
Дело всё было в не знании особенностей работы с портами. Модем не успевает передать в порт, а я его уже считываю.
Реализовал всё что надо. Осталось проверять баланс. Но модем ничего кроме ок на команды не отвечает.
Пробовал 'AT+CUSD=1,"*105#",15$R$N',
'ATD*105#$R$N',
'ATD#105#$R$N'
Оператор Теле2.
Знает кто дельную команду?
'AT+CUSD=1,"*105#",15$R$N'
должно быть достаточно, у меня работало. Может попробовать изменить номер на #105#
Пробовал и так.
Достаточно ли я инициализирую его?:
отключаю эхо и включаю текстовый режим СМС.
Может еще чего нужно добавить?
да все там как обычно, может Ваша прога не готова принять кроме баланса кучу текстовой информации которая приходит от опсоса, поэтому результат нулевой
Прога принимает всё что летит на порт. И если что то пришло всё накапливаю в буфере строковом.
Придётся ехать подключаться терминалом и смотреть что там.
'AT+CUSD=1,"*105#",15$R$N' главное мне было узнать что эта команда работает на пм01.
http://www.owen.ru/forum/showpost.php?p=86678&postcount=1
ну так ради интереса попробуйте этой библиотекой проверить баланс, если всё получиться тогда проблемы в Вашем проекте, если тоже нет, значит вероятнее всего с опсосом
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot