Здравствуйте.
Задача опроса чего-нибудь по modbus всплывает и практике большинства инженеров постоянно. Рецепты написания максимально защищенного от проблем кода, находились самостоятельно и выкладывались на форуме.( Отдельное спасибо ув.Александру за вдохновение.).
Не пора ли сделать отдельный топ с рецептами лечения ситуаций когда уже "что-то пошло не так"??? (поискал по форуму - не нашел.)
Для затравки моя недавняя ситуация.
Нужно подружить M340 и 8-9 ПЧ Danfoss по ,по 20 слов с каждого. Диагностика связи, битов состояния, учтены хелпы,советы, выложенная в открытом доступе информация. Cancel делал периодически, уже после появления проблем изменил на вызов Cancel только при диагностике ошибки связи.
В конце концов все работает довольно долго, тесты "отсоединим кабель от ПЛК", "отсоединим от ПЧ", " выключим все ПЧ кроме одного " , "отключим-включим ПЛК" проходит успешно. и работает месяцами.
Но в какой-то момент все ложится. и 8 функций read_var начинают запускаться одновременно (причины распишу отдельным топом), диагностические биты каждой функции отдельно ведут себя словно все в порядке,но обмена естественно не происходит.
Так вот самое неприятное,что лечится это только перезаливкой ПЛК, что не очень страшно во время наладки, но слишком кардинально во время работы оборудования.
Даже устранение одновременного запуска read_var,и заведомо корректная работа обмена (например, оставлялся только тестовый порос одного ПЧ) не спасают.
для CANOpen есть "волшебный" бит, сбрасывающий связь. для mobus и вообще сериального порта, я такого не нашел.
Может кто-то знает способы "сброса" обмена без перезаливки ПЛК?......