PDA

Просмотр полной версии : ПМ01 и СМС



maks-tver
18.06.2012, 13:17
Подскажите пожалуйста рабочий пример для отправки и приема СМС!!!

capzap
18.06.2012, 17:20
http://www.owen.ru/forum/showthread.php?t=11277
а почему здесь не рабочие примеры, можете объяснить, что не устраивает?

PS задайте вопрос создателю темы http://www.owen.ru/forum/showthread.php?goto=newpost&t=12853 где он взял библиотеку, у него там несущественные трудности, но как я понял бибка должна быть вполне рабочая

maks-tver
18.06.2012, 18:46
В программе видно что модем принимает **** а вот на выходе блока текста нет.

capzap
18.06.2012, 19:38
В программе видно что модем принимает **** а вот на выходе блока текста нет.

:) мне лично это не о чем не говорит, работу связки плк+пм01 с смс я писал самостоятельно, поэтому что там у Вас за блок, который не выдает текст, со всеми своими телепатическими возможностями не могу увидеть

maks-tver
20.06.2012, 14:25
а для примера не могли бы поделиться? :)

capzap
20.06.2012, 14:38
не-а, не поделюсь. Во первых за основу я брал те же примеры которые есть на сайте и на дисках поэтому ни чего гениального у меня нет, во вторых тема для меня была новая, я сам еще не все ньюансы разобрал, что же касается отправки и чтения, так это точно такая же работа как с модбасом, чуть по сложнее только упаковка/распаковка массива байт

maks-tver
20.06.2012, 14:42
А запись и чтение из порта обязательно производить в разных циклах, а то при чтениии из порта у меня какая то абра кадабра (набор непонятных символов) вылазит

capzap
20.06.2012, 14:53
соединение по какому порту, у меня мусор бывает, если я опрашиваю модем с помощью плк по 485 и невыключил работу другой программы типа гипертерминала.
И кстати не доходя до программирования плк, как читаются и пишутся смс с ПК?

maks-tver
20.06.2012, 14:59
Порт СОМ1, с ПК не пробовал.

capzap
20.06.2012, 15:12
:) так попробуйте. Чтоб не мучиться что как отправить а так же как расшифровать полученную смску воспользуйтесь ссылкой http://twit88.com/home/utility/sms-pdu-encode-decode

kandiral
21.06.2012, 16:20
В программе видно что модем принимает **** а вот на выходе блока текста нет.



Столкнулся с похожей проблемой.
Переделал функциональный блок расшифровывающий PDU смс.
Работает только с латиницей и не возвращает дату.

В FB GSM_Modem_SMS вместо

DB(pBuf:=ADR(rcvStr),str_sender=>rcvedPhonNum,str_time=>rcvedTm,str_message=>rcvedSMS);

вставил
_DPDU(msg:=rcvStr,txt=>rcved****num=>rcvedPhonNum);

где
_DPDU:DecodePDU;

Вот код DecodePDU:

FUNCTION_BLOCK DecodePDU
VAR_INPUT
msg:STRING(256);
END_VAR
VAR_OUTPUT
txt:STRING(256);
num:STRING(256);
END_VAR
VAR
dw0:DWORD;
bt0:BYTE;
s0:STRING(256);
s1:STRING(256);
s2:STRING(16);
bt1:BYTE;
b0:ARRAY[0..7] OF BOOL;
b1:ARRAY[0..7] OF BOOL;
_UP:UNPACK;
END_VAR


s0:=LEFT(msg,2);
bt0:=HEX_TO_BYTE(s0);
s0:=DELETE(msg,bt0*2+4,1);
s1:=LEFT(s0,2);
bt0:=HEX_TO_BYTE(s1);
s0:=DELETE(s0,4,1);
IF (bt0 MOD 2)=1 THEN bt0:=bt0+1; END_IF
s1:='';
s1:=MID(s0,bt0,1);
num:='';
FOR dw0:=1 TO TRUNC(bt0/2) DO
s2:=LEFT(s1,1);
IF s2='F' THEN s2:=''; END_IF
s1:=DELETE(s1,1,1);
s2:=CONCAT(LEFT(s1,1),s2);
s1:=DELETE(s1,1,1);
num:=CONCAT(num,s2);
END_FOR
s1:=LEFT(num,1);
IF s1<>'7' AND s1<>'8' THEN
num:='';
END_IF
s0:=DELETE(s0,bt0+18,1);
s1:=LEFT(s0,2);
bt0:=HEX_TO_BYTE(s1);
s0:=DELETE(s0,2,1);
txt:='';
bt1:=1;
WHILE LEN(txt)<bt0 DO
IF bt1=8 THEN
bt0:=PACK(b1[1],b1[2],b1[3],b1[4],b1[5],b1[6],b1[7],0);
bt1:=1;
ELSE
s2:=LEFT(s0,2);
s0:=DELETE(s0,2,1);
bt0:=HEX_TO_BYTE(s2);
_UP(B:=bt0,B0=>b0[0],B1=>b0[1],B2=>b0[2],B3=>b0[3],B4=>b0[4],B5=>b0[5],B6=>b0[6],B7=>b0[7]);
bt0:=SHL(bt0,bt1);
bt0:=SHR(bt0,bt1);
IF bt1>1 THEN
bt0:=SHL(bt0,bt1-1);
FOR dw0:=0 TO bt1-2 DO
IF b1[7-dw0] THEN bt0:=SET_BIT_BT(VAL:=bt0,BIT:=DWORD_TO_BYTE(bt1-2-dw0)); END_IF
END_FOR
END_IF
b1[0]:=b0[0];b1[1]:=b0[1];b1[2]:=b0[2];b1[3]:=b0[3];
b1[4]:=b0[4];b1[5]:=b0[5];b1[6]:=b0[6];b1[7]:=b0[7];
bt1:=bt1+1;
END_IF
txt:=CONCAT(txt,CHR_TO_STRING(bt0));
END_WHILE

capzap
21.06.2012, 17:03
какой то странный у Вас цикл WHILE. Он точно не завешивает ПЛК?

kandiral
21.06.2012, 17:08
какой то странный у Вас цикл WHILE. Он точно не завешивает ПЛК?


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

capzap
21.06.2012, 17:15
раз тестируете попробуйте тогда вместо
b1[0]:=b0[0];b1[1]:=b0[1];b1[2]:=b0[2];b1[3]:=b0[3];
b1[4]:=b0[4];b1[5]:=b0[5];b1[6]:=b0[6];b1[7]:=b0[7];
заменить на b1:=b0;

kandiral
21.06.2012, 17:24
заменить на b1:=b0;


Работает.
Спасибо.

С контроллерами работаю недавно, поэтому всех тонкостей не знаю.

kandiral
21.06.2012, 17:28
Забыл добавить, что использую функции из библиотеки oscat_basic_333.lib, которую можно скачать тут http://www.oscat.de/

capzap
21.06.2012, 17:52
вот Вам еще одна тонкость, когда Вы передаете аргументом что то наподобие ADR(rcvStr), Вы в том ФБ или функции используете DWORD как указатель, а когда Вы передали rcvStr Вы загрузили память дополнительным массивом, для нормального приема смс требуется 363 байта, а это аж целых 90 DWORD-ов. Почуствуйте разницу как говорится