Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 17 из 17

Тема: ПМ01 и СМС

  1. #11

    По умолчанию

    Цитата Сообщение от 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

  2. #12
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,225

    По умолчанию

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

  3. #13

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    какой то странный у Вас цикл WHILE. Он точно не завешивает ПЛК?

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

  4. #14
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,225

    По умолчанию

    раз тестируете попробуйте тогда вместо
    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;

  5. #15

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    заменить на b1:=b0;

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

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

  6. #16

    По умолчанию

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

  7. #17
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,225

    По умолчанию

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

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Связка МВА8-ПЛК100-ПМ01-GPRS-ПМ01-LectusOPC-SCADA
    от vapik в разделе Сетевые технологии
    Ответов: 14
    Последнее сообщение: 20.05.2014, 23:48
  2. Связка: Реле-ПМ01 ПМ01- Мастер Скада
    от Polluks в разделе Программируемые реле
    Ответов: 6
    Последнее сообщение: 06.06.2012, 18:57
  3. связь модем ПМ01-ПМ01 по GPRS
    от kycua в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 22.12.2011, 17:16
  4. МВА8-ПЛК100-ПМ01-ПМ01-CodeSyS
    от Александр Ч. в разделе Эксплуатация
    Ответов: 55
    Последнее сообщение: 03.03.2011, 07:07

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •