Цитата Сообщение от maks-tver Посмотреть сообщение
В программе видно что модем принимает **** а вот на выходе блока текста нет.


Столкнулся с похожей проблемой.
Переделал функциональный блок расшифровывающий 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) ;

где
_DPDUecodePDU;

Вот код DecodePDU:

FUNCTION_BLOCK DecodePDU
VAR_INPUT
msg:STRING(256);
END_VAR
VAR_OUTPUT
txt:STRING(256);
num:STRING(256);
END_VAR
VAR
dw0WORD;
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