PDA

Просмотр полной версии : плк63-пм01 потеря байт



Elka
11.08.2010, 21:23
В общем эпопея продолжается. На любом из двух портов RS-232 или на RS-485 наблюдается один и тот же эффект: ПЛК63 получает не все отправленные модемом байты. Одно время грешил на железо ПЛК, но учитывая то, что через этот же порт ПЛК замечательно перепрошивается (используется COM4 (с установленной колодкой, dip switch установлен на '1')), причина, очевидно, программная. На разных скоростях теряется разное количество байт. Не всегда одни и те же.

Свернул голову, пытаясь найти причину, причины не вижу.
Кабель соединения модема и ПЛК самопальный, трёхпроводной, RJ11-RJ45.
Витая пара. Без экрана. Длиной примерно 20 см. У модема на винтовой колодке замкнут CTS-RTS.

Настройка модема:
AT&F
ATE0
AT+IPR=2400
AT&W

Проект прилагаю. Проект минималистический: отправляем модему AT&V, потом до посинения читаем результат. Получаем далеко не всё.

Пожалуйста, помогите! Где же я всё-таки не прав? А то проект автоматизации полностью готов, даже градус на экране теперь добавили, осталось дело зацепить всё это к модему.

Elka
13.08.2010, 13:42
Люди из поддержки, ну помогите, please... Попробуйте у себя прогнать проект. Могу всё оборудование привезти, если, например, ПЛК63 в дефиците...

Чую, что близок локоток, да не укусишь...

С уважением,
К. Лебедев

Илья Кареткин
16.08.2010, 10:47
поясните, как в эксплуатации используется данная команда At&v, которая выдаёт огромный список текущих настроек? - я допускаю, что буфер не справляется.
между отправкой команды и получением ответа желательно ставить задержку.
плк63 мы найдём, попробуем прогнать.

Elka
16.08.2010, 12:19
в эксплуатации - никак. в эксплуатации из модема читаются смски которые могут быть достаточно длинны. поэтому At&v был взят за примитивную показательную замену. в моём случае байты начинают теряться с первых символов, а не, по достижении, скажем, 16 символов, или сколько там буфер у плк...

спасибо за поддержку.

Филоненко Владислав
16.08.2010, 18:46
cr:=SysComRead(com_num,ADR(rcvBUFstr),1,0);
IF cr>0 THEN
rcvBUFfull:=CONCAT(rcvBUFfull,LEFT(rcvBUFstr,DWORD _TO_INT(cr)));
END_IF

1. Вы принимает 1, только 1 байт, какие Left и CONCAT вообще нужны?
2. Вы уверены, что принимаете только символы? Может прийти и символ с кодом 0x00 - он будет гарантированно потерян.
Попробуйте следующий код:

(* rcvBUFstr:='';*)
i:=0;
STRCOPY(rcvBUFfull,"",1);
END_IF
ELSE
cr:=SysComRead(com_num,ADR(rcvBUFfull+i),1,0);
IF cr>0 THEN
i:=i+1;
END_IF
END_IF

Elka
17.08.2010, 16:30
1. писав этот кусок я и предполагал, что я принимаю 1 байт, но в цикле - т.е. до посинения (или столько, сколько придёт). я же заранее не знаю длину ответа. в принципе, работает похоже. а Concat - чтобы собрать всё полученное сообщение в одну строку (в один буфер), который потом анализировать, что именно это было.
т.е. идея следующая:
а) даём команду прочесть сообщение (пока затычка в виде At&v)
б) получаем сообщение (ответ на At&v)
в) анализируем, что пришло: команда или опрос состояния (до сюда пока не дошли)
г) выполняем и направляем смс с ответом (до сюда тоже)
при этом понимаем, что смс может не дойти, задержаться на сутки в пути и т.д. т.е. применение исключительно бытовое и ни в коем случае не промышленное.
2. по второму замечанию совершенно согласен, завтра вечером опробую. только строковый Concat появился недавно (в каком-то примере подсмотрел), раньше было сделано как раз через побайтное копирование буфера. всё было также. но для чистоты эксперимента завтра обязательно перепроверю.

Elka
18.08.2010, 22:50
Попробовал код:
i:=0;
(* функцию STRCOPY не нашёл в библиотеках и компилятор её тоже сам не опознал
STRCOPY(rcvBUFfull,"",1);
пока оставил старый вариант
*)
rcvBUFstr:='';
END_IF
ELSE
(* здесь чуть не так
cr:=SysComRead(com_num,ADR(rcvBUFfull+i),1,0);
если я правильно понял идею...*)
cr:=SysComRead(com_num,ADR(rcvBUFfull)+i,1,0);
IF cr>0 THEN
i:=i+1;
END_IF
END_IF

К сожалению - не изменилось ровным счётом ничего!
Исправленный проект цепляю.

Филоненко Владислав
19.08.2010, 14:30
давайте сделаем следующее. переведите в программе порт только на приём, а тх к модему подключите на другой порт (dbgu), другой плк или компьютерный.
будут пропадать байты?

Elka
19.08.2010, 16:35
Владислав, а нельзя ли случайно передавать байты модему по RS-485, а ответ получать по RS-232. Или наоборот? А то COM есть только у одного из компьютеров, и он на нём один. И через него CodeSys цепляется к ПЛК. Переключить порт на модем можно, но тогда сильно усложняется наблюдение за потерей байт?

Или можно CodeSys к ПЛК зацепить по RS-485 вместо RS-232?

Филоненко Владислав
19.08.2010, 21:57
вот этого я никогда не пробовал. можно ли одновременно использовать 485 и 232 на модеме. препятствий не вижу, принципиальных.
CoDeSys нельзя по 485

Elka
20.08.2010, 11:14
А dip-свитч, отвечающий за протокол на модеме в какое положение ставить? RS-232 или RS-485? Он на что-нибудь влияет?

А если подключать COM к двум разным портам, достаточно ли к одному только ТХ, или ещё какой-нибудь GND надо? А если надо, то он будет идти на обе машины? А COM-порты на писюках не погорят?

Филоненко Владислав
20.08.2010, 11:17
Для начала попробуйте в 232. Естественно к каждому надо GND и RX или Tx.

Elka
22.08.2010, 23:07
Попробовал. От компьютера взял TX и GND, от ПЛК63 - RX и GND, всё завёл на модем. Из проекта убрал отправку команды - теперь ПЛК только читает порт. Байты всё также теряются стабильно. Даже OK в ответ на AT редко приходит целым. По лампочкам на модеме видны и приём, и передача (например в ответ на AT&V передача горит долго). А на ПЛК всё также мусор. Тот же модем, подцепленный напрямую к компу работает отлично.

Что ещё попробовать?

:confused:

Elka
25.08.2010, 09:34
а на стенде в компании не получилось пока попробовать? проявляется ли аналогичная проблема с проектом?

Elka
26.08.2010, 17:24
товарищи, ну помогите же!!!

Elka
27.08.2010, 14:03
при подключении плк63-пм01 через Rs-485 (хотя и не хотелось бы этого делать в итоговом решении) имеем следующее: ответ на At&v приходит в сильно более хорошем состоянии, но на 255 байт принятых данных имеем где-то в районе 4 потерянных.

собственно при покупке плк63 честно предупреждали, что с модемом его особо не тестировали, ладно, я не в претензии, но хотелось бы узнать, а у других контроллеров Owen всё так же плохо? есть смысл смотреть другие плк, или надо смотреть на что-то типа сименса?

какова вообще обстановка? кто-то активно использует модем в связке с плк для _приёма_ смс? именно смс интересны, т.к. такие байтотерятельные проблемы (в крайне ограниченном Rs-485'ом количестве), подозреваю, на Csd не сильно страшны - там при кривой контрольной сумме просто происходят перепосылки данных до достижения успешного результата.

Elka
01.09.2010, 16:14
Собственно вопрос, а нельзя ли махнуть ПЛК63 на что-то типа ПЛК100/150+панель, только умеющее работать с модемом хорошо?

Желательно по гарантии (с доплатой разницы в стоимости). Наверное, я уже наигрался (с марта-то месяца!) - нужен работающий контроллер.

Во вложении очередные попытки работы по RS-485 - результат, который видно в дебаггере CodeSys.
Попробовал вместо AT&V использовать команду, читающую сообщения AT+CMGL=4 (а вдруг?). Всё также ПЛК63 не способен принять ответ от модема.

Elka
01.09.2010, 23:56
потери есть в обоих случаях.

Elka
03.09.2010, 10:19
коллеги, ну если в плк63 эта проблема неразрешима в принципе, признайте это - я хотя бы не буду ждать дальнейше помощи от группы поддержки.
ну особенность железа такая - бывает. в документацию внесите, как внесено, что с файлами не работает. раньше сильно не тестировали - не знали, узнали - зафиксировали.

и посоветуйте замену из вашего оборудования (если есть). чем был хорош плк63 в моём случае - это панель+аналоговые (надо 3-4) и дискретные (надо 2) входы и 5 твердотельных выходов. у меня заказной плк63-м-рттттт. за ~9000 т.р. с возможностью наращивания кол-ва входов выходов с использованием Rs-485 и мх110. также всё это должно быть повязано с модемом.

вчера посмотрел на аналогичные решения других производителей - есть решения где-то от 4000 р., но все - не масштабируемые. а этого хочется. либо в разы дороже.

Малышев Олег
03.09.2010, 11:46
Тему посмотрел... уточняю
Вопрос - если это последняя версия программы - если да то там проблемное место...
я делал не так...
rcvBUFfull: array [1...1024] of byte;

cr:=SysComRead(com_num,ADR(rcvBUFfull[1])+i,250,0);
IF cr>0 THEN
i:=i+cr;
END_IF
Поясняю почему - буфер приема на ПЛК не бесконечный - и брать от туда нужно побольше. Вызывать программу - цикл плк попробуйте пореже - не 1 мс а скажем 5 мс.

Elka
04.09.2010, 08:05
Коллеги!

Огромное спасибо. ПЛК63 УМЕЕТ РАБОТАТЬ БЕЗ ПОТЕРЬ БАЙТ. Все проблемы, как обычно - в руках.

Сходу за 20 попыток чтения не потерялось ни байта. НО! Только через 485 интерфейс. Всё то же самое через COM4 (debug) в моём случае читает только 40-70 байт в зависимости от расположения звёзд (с большой потерей байт). Проект прилагаю.

Дипы в случае подключения через COM: 1-OFF, 2-ON. Перемычка CTS-RTS стоит, соединение RJ-45 (модем X2) - RJ-12 (дебуг через колодку, dip - OFF):
3-6
4-2
5-1

Это уже не критично - надолго работой обеспечен, но решить хотелось бы, ибо в промышленной жизни RS-485 будет задействован под Mx100.

Elka
10.09.2010, 10:38
А получалось ли у кого-нибудь работать по схеме ПЛК63-RS23debug-ПМ01?
Подозреваю, что проблема опять где-нибудь в руках, но всё же... Есть опыт? Была ли проверка правильности переданных данных (CRC,Checksum)?

Малышев Олег
10.09.2010, 10:44
cr:=SysComRead(com_num,ADR(rcvBUFfull)+i,1,0);
IF cr>0 THEN
i:=i+1;
END_IF
уточняю
должно быть
i:=i+cr;

Филоненко Владислав
10.09.2010, 10:46
232 Debug имеет много аппаратных особенностей, в т.ч. нет четности, не работает с RTU протоколами.

Elka
10.09.2010, 11:27
Прошу прощения, прицепил не тот проект. Вечером прицеплю правильный. При чтении по 1 байту данные иногда теряются и на RS-485. За основу брал рекомендацию Олега Малышева:
================================================== =====
rcvBUFfull: array [1...1024] of byte;

cr:=SysComRead(com_num,ADR(rcvBUFfull[1])+i,250,0);
IF cr>0 THEN
i:=i+cr;
END_IF
Поясняю почему - буфер приема на ПЛК не бесконечный - и брать от туда нужно побольше. Вызывать программу - цикл плк попробуйте пореже - не 1 мс а скажем 5 мс.
================================================== =====

Elka
10.09.2010, 11:30
Владислав, а для неспециалиста перевести можно:
===========
в т.ч. нет четности, не работает с Rtu протоколами
===========

это значит:
а) с модемом работать нельзя.
б) надо по-другому открывать порт.
в) надо хитро отправлять и принимать команды при общении с модемом.

?

Elka
10.09.2010, 11:57
Спасибо!
Жалко в мае (http://www.owen.ru/forum/showthread.php?t=7857) и июне (http://www.owen.ru/forum/showthread.php?t=7962&page=2) не ответили. Буду экспериментировать только с COM1.

SergeyNG
10.09.2010, 12:09
уточню. Rs-232 Debug -- это порт Dbgu контроллера. тот, через который осуществляется обновление прошивки. тот, на котором написано "dbgu". тот, который подключается через маленькую плату-переходник. исльзование этого порта допускается только для обновления прошивки. использование этого порта для других целей запрещено.

Ого какие заявления?! Откуда источник информации?


На лицевой панели расположен порт Debug RS&232, предназначенный для связи со
средой программирования, загрузки программы и отладки. Подключение к этому порту
осуществляется кабелем, входящим в комплект поставки. Также порт Debug RS&232 может
быть использован для подключения Hayes – совместимых модемов (в том числе GSM), а
также устройств, работающих по протоколам Modbus, ОВЕН и DCON (более подробно о
подключении таких устройств см. п. 10.2.5).

SergeyNG
11.09.2010, 19:41
извиняюсь, не посмотрел на каком плк решают проблему.

Sergey1024
06.11.2012, 11:37
Представители техподдержки, просьба ответить - вопрос с потерей байт разрешился или нет? Два года чай прошло, можно сказать что-то определенное?
Хоть скажите, куда копать - на ПЛК73 теряю данные на приеме (тема (http://www.owen.ru/forum/showthread.php?p=95146&posted=1#post95146))

capzap
06.11.2012, 11:50
Представители техподдержки, просьба ответить - вопрос с потерей байт разрешился или нет? Два года чай прошло, можно сказать что-то определенное?
Хоть скажите, куда копать - на ПЛК73 теряю данные на приеме (тема (http://www.owen.ru/forum/showthread.php?p=95146&posted=1#post95146))

Для работы с модемом есть библиотека, с этого месяца адаптирована и для 63/73 плк. Почему бы ей не воспользоваться чтоб не парится самому по поводу потери байт

Sergey1024
06.11.2012, 13:21
Для работы с модемом есть библиотека, с этого месяца адаптирована и для 63/73 плк. Почему бы ей не воспользоваться чтоб не парится самому по поводу потери байт
У меня не модем, а прибор со своим протоколом - библиотека допускает собств анализ вх данных? Где можно скачать библиотеку?

capzap
06.11.2012, 13:34
вряд ли, она под паролем, так что структуру принимаемого блока нужно у модераторов просить, а сама бибка на ходится в первой теме раздела плк, на первой странице

Sergey1024
06.11.2012, 13:39
вряд ли, она под паролем, так что структуру принимаемого блока нужно у модераторов проситьНа кой тогда она мне, у меня бинарный протокол со своей контр суммой.

Николаев Андрей
06.11.2012, 14:52
А при чем тут протокол? Мы же про смс говорим?
Вы подаете на вход блока переменную типа string. А уж что в ней - Вы определяете сами.

Sergey1024
06.11.2012, 15:26
А при чем тут протокол? Мы же про смс говорим?У меня проблемы с потерей данных при приеме - как и у топикстартера. Поскольку на мои вопросы в отдельной теме ответов нет, то я решил уточнить - может проблема решена теми, кто сталкивался с ней раньше.
Ну или если не решена - то хотя бы локализована, например "это фича ПЛК73, примите как данность" - чтобы зря не тратить время на поиск косяков в ПО.