CODESYS форум

Добро пожаловать на официальный форум CODESYS
Deutsche Version English version russian version 
Текущее время: Чт апр 27, 2017 3:41 pm

Часовой пояс: UTC+01:00




Начать новую тему  Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Codesys 2.3 и tcp клиент на gprs модеме
СообщениеДобавлено: Сб янв 23, 2016 3:27 pm 
Не в сети

Зарегистрирован: Чт сен 17, 2015 11:37 am
Сообщения: 2
Добрый день. Поделитесь, если у кого был опыта организации подобного. Написал клиент, используя библиотеку 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


Вложения:
n7x14cc.png
n7x14cc.png [ 32.46 КБ | 2925 просмотров ]
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC+01:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB