Carter - 2016-01-23

Добрый день. Поделитесь, если у кого был опыта организации подобного. Написал клиент, используя библиотеку SysLibCom.lib, поднимаю соединение AT-командами для модуля sim900. Планирую отправлять посылки бинарных пакетов, одна посылка не превышает 700 байт. Скажите, какие могут быть "подводные камни"? Протестировал на нескольких ПЛК(Овен), на нескольких модемах. Единственный баг, это битая посылка, которая через некоторое время проскакивает при том режется в одном и том же месте практически всегда. Ниже кусок кода отправки, во вложении скрин как обрезается посылка. ЗЫ не учтено, конечно, что сим-карта в роуминге и возможно это проделки именно провайдера.

Wait(IN:=NOT Wait.Q,PT:=T#1s);
8:
      IF queue_size>0 THEN
         SysComWrite(com_num,ADR(Set_AT_CIPSEND),LEN(Set_AT_CIPSEND),0);
         master:=90;
      ELSE master:=102; END_IF
90:
      IF Wait.Q THEN
         ComRead(rcvStr=>rcvStr); result:=1;
         IF FIND(rcvStr,'>')>0 THEN
            master:=9;
         ELSE  master:=8; END_IF
         IF FIND(rcvStr,'ERROR')>0 THEN
            master:=3; END_IF
      END_IF
9:
      
      IF queue_size>0 THEN
      
            toSend:=QUEUE_POLL(); //выбираем из очереди накопившиеся пакеты
            SysComWrite(com_num,ADR(toSend),BYTE_TO_INT(toSend[2]),0);
         
      ELSE
         master:=100;
      END_IF
100:
         SysComWrite(com_num,ADR(Set_26),SIZEOF(Set_26),0);
         master:=101;
101:
      IF Wait.Q THEN
         ComRead(rcvStr=>rcvStr); result:=1;
         IF FIND(rcvStr,'SEND OK')>0 THEN
               master:=102;
         ELSE  master:=102; END_IF
         IF FIND(rcvStr,'CLOSED')>0 OR FIND(rcvStr,'ERROR')>0  THEN
            Set_AT:='AT+CIPCLOSE$R';
            SysComWrite(com_num,ADR(Set_AT),LEN(Set_AT),0);
            master:=3; END_IF
      END_IF
102:
         ComRead(rcvStr=>rcvStr); result:=1;
         IF queue_size>0 THEN
               master:=8;
         END_IF

IMG: n7x14cc.png

 

Related

Talk.ru: 2