PDA

Просмотр полной версии : ПМ01 определить входящий вызов



PavelGO
05.03.2013, 16:27
Подскажите, пожалуйста, возможно ли понять из ПЛК звонит ли кто в данный момент и определить номер звонящего.
Я так понимаю после поступления 'RING' послать 'AT+CLCC' и разобрать номер из принятой после этого строки из буфера? Я прав?
Модемы пока не пришли и опыто работы с gsm 0, поэтому пока хочу накидать программу примерную.

capzap
05.03.2013, 17:22
AT+CLCC$R$N вроде так, а вообще послушайте постоянно порт и сделайте вызов и увидите какой вывод будет в терминале

PavelGO
05.03.2013, 17:47
Спасибо. Там и будет видно. Подскажите еще вот что:
Если я буду ждать ответа от модема после команды, не перезагрузится ли ПЛК из за превышения времени цикла. Сейчас стоит 10. Сей час он опрашивает модули и передаёт параметры и аварии в самописную скаду, что уже вызывает некоторые задержки.
Вот и вопрос: Вызывать целиком проверку входящих и отправку смс в отдельных функциях или выполнять параллельно с основной программой.
На сколько быстро, по вашему опыту, модем отвечает на команды?

capzap
05.03.2013, 17:52
http://www.owen.ru/forum/showthread.php?t=13029
прочтите про эту библиотеку: в первых трех постах - сама, описание и примеры. Кроме сообщений она проверяет наличие входящих звонков

PavelGO
05.03.2013, 19:58
читал. факт поступления вызова есть, но номера нет.По этому syslibcom и хочу использовать.

capzap
05.03.2013, 20:08
я команду назвал. А на какой библиотеке Вы сделаете, это лично Ваше дело. Суть проста, открыли порт, сделали запрос и начинаете каждый цикл ждать ответ, как что то приходит, преобразуете в строку и анализируете что получилось

PavelGO
12.03.2013, 21:34
С отправкой смс syslibcom разобрался.Спасибо. Но
Почему то на запрос CLLC сначала приходи в буффер
'$R$N+CLCC: '
потом
',"+7953950'
т.е. кусками.
Так и должно быть? По справочнику команд вроде строкой должно быть.
Как считаете?
Считываю как в примере:
sz:=SysComRead(com_num,ADR(rcvBUF),1024,0);

IF sz<>0 THEN (*&#247;&#242;&#229;&#237;&#232;&#229; &#239;&#238;&#240;&#242;&#224;*)
rcvStr:='';
(*&#197;&#241;&#235;&#232; &#247;&#242;&#238; &#242;&#238; &#239;&#240;&#232;&#248;&#235;&#238; &#238;&#242; &#236;&#238;&#228;&#229;&#236;&#224;*)
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);

Olegis
12.03.2013, 23:55
С отправкой смс syslibcom разобрался.Спасибо. Но
Почему то на запрос CLLC сначала приходи в буффер
'$R$N+CLCC: '
потом
',"+7953950'
т.е. кусками.
Так и должно быть? По справочнику команд вроде строкой должно быть.
Как считаете?


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

PavelGO
13.03.2013, 17:50
Остальные ответы он тоже присылает кусками:
Например:K$R$N
В строке ОК уже нет и предыдущий пример уже неверно работает.
Может длина буфера где задаётся? Либо алгоритм усложнять придется.

Дело всё было в не знании особенностей работы с портами. Модем не успевает передать в порт, а я его уже считываю.

PavelGO
22.05.2013, 11:49
Реализовал всё что надо. Осталось проверять баланс. Но модем ничего кроме ок на команды не отвечает.
Пробовал 'AT+CUSD=1,"*105#",15$R$N',
'ATD*105#$R$N',
'ATD#105#$R$N'
Оператор Теле2.
Знает кто дельную команду?

capzap
22.05.2013, 12:15
'AT+CUSD=1,"*105#",15$R$N'

должно быть достаточно, у меня работало. Может попробовать изменить номер на #105#

PavelGO
22.05.2013, 12:23
Пробовал и так.
Достаточно ли я инициализирую его?:
отключаю эхо и включаю текстовый режим СМС.
Может еще чего нужно добавить?

capzap
22.05.2013, 12:32
да все там как обычно, может Ваша прога не готова принять кроме баланса кучу текстовой информации которая приходит от опсоса, поэтому результат нулевой

PavelGO
22.05.2013, 12:46
Прога принимает всё что летит на порт. И если что то пришло всё накапливаю в буфере строковом.
Придётся ехать подключаться терминалом и смотреть что там.
'AT+CUSD=1,"*105#",15$R$N' главное мне было узнать что эта команда работает на пм01.

capzap
22.05.2013, 12:52
http://www.owen.ru/forum/showpost.php?p=86678&postcount=1
ну так ради интереса попробуйте этой библиотекой проверить баланс, если всё получиться тогда проблемы в Вашем проекте, если тоже нет, значит вероятнее всего с опсосом