а можете еще раз подробнее описать проблему, у меня фиксация происходит нормально и в том и в другом случае, не могу понять где у вас возникла сложность
P.S. версия IoDrvModbus 3.5.3.50
xreset.PNG
а можете еще раз подробнее описать проблему, у меня фиксация происходит нормально и в том и в другом случае, не могу понять где у вас возникла сложность
P.S. версия IoDrvModbus 3.5.3.50
xreset.PNG
Последний раз редактировалось Владиславыч; 24.04.2014 в 10:38.
P.P.S может поможет...
Исследования ситуации привели к следующему.
1. Я заменил версии ModBus компонентов в своем проекте как в Вашем случае. Компиляция показала 501+ ошибок.
2. Заменил таргет СПК на такой же как и у Вас. Всё заработало. [причем нужно отметить, что мы совсем игнорируем тут правило о том, что версия таргета должна быть строго не старше версий библиотек!] Ошибки фиксируются в нужные переменные в заданных для этого местах. Действие xReset и xAcknowledge стало задекларировано в библиотеке, естественно, такое же как в Вашем случае.
3. xReset сбрасывает xError и byModbusError в соответствии с сигналом от Blink (то есть срезу же, хотя физическое соединение ещё не восстановилось).
4. xAcknowledge не сбрасывает xError по сигналу от Blink (пока линия связи нарушена), но, тем не менее, после восстановления линии связи xError и byModbusError сбрасываются! Уж не знаю кто это делает, может и не xAcknowledge... Но всё работает!
Причём с xAcknowledge работать вроде получается удобнее. Пока связи нет - флаг и код ошибки висят в переменных, по которым я могу обрабатывать ситуацию (например не учитывать в расчётах пропущенные значения с датчиков, или через какое то время совсем остановить систему), как связь появилась, так и мои буферные переменные обнулились.
А если использовать xReset, то получается что связи нет, но система с периодичностью от Blink начинает ошибочно думать что связь есть, пока опять не приедет xError от следующей попытки установить очередной цикл связи со слейвом.
ЗЫ: Владиславыч спасибо, у меня сейчас всё заработало.
Последний раз редактировалось RadistDog; 24.04.2014 в 11:38.
Осталось понять почему у меня все перестает работать когда я пытаюсь вынести переподключение в функцию...
P.S. попробовал xAcknowlege у меня с ним восстановление нормально не проходит, ошибку фиксирует, все отрабатывает, но восстановление связи не происходит, а с xReset все вроде нормально....[причем нужно отметить, что мы совсем игнорируем тут правило о том, что версия таргета должна быть строго не старше версий библиотек!]
Последний раз редактировалось Владиславыч; 24.04.2014 в 12:22.
как посчитать с IoDrvModbus количество правильно переданных посылок , и неудачных
пока просто приходится взводить таймер на 500мсек (таймаут в мастере 1 сек) и в зависимости от состояния xAllSlavesOk и xError прибавлять единичку либо к счетчику ошибок либо к счетчику ОК
пример счетчика ошибок:
как сделать что бы после каждой посылки в зависимости от того что вернул модуль MODBUS - DONE или Error (DONE вообще модуль не выдает) , прибавить к соответствующему счетчику единичку
codesys 3.5.5.0