-
Вложений: 3
библиотека ModBus.lib
Добрый день, коллеги!
Используется ПЛК110-220.30Р-М. В проекте CoDeSyS используется библиотека "ModBus.lib" с сайта Овен.
Вложение 32215
В данной библиотеке используется функция "MB_WR_REGS" (запись регистров). Почему то функция "MB_WR_REGS" всегда возвращает код "Exception" равный 0xFF (255), что соответствует по описанию данного выхода таймаут. Причем неважно успешный обмен по протоколу Modbus или неуспешный.
В качестве устройства использовался как модуль дискретного выхода МВ110-8ДФ, так и программа симуляции "ModSim32".
Вложение 32216 Вложение 32217
Другие функции чтения, например "MB_RD_INP_REGS" возвращают корректные значения на выход "Exception".
С чем это связано, с реализацией библиотеки "ModBus.lib"? В программе необходимо детектировать наличие связи с данным устройством.
-
с реализацией, можете открыть бибку как проект и покопаться во внутренностях
-
Вложений: 4
Что-то непонятное. Вроде все нормально, но почему то при чтении регистров (функция 04) CRC считает корректно, а при записи регистра (функция 16) происходит некорректный расчет CRC.
В обоих случаях вычисление производиться одной и той же функцией MB_CRC.
Вложение 32222 Вложение 32223
Вложение 32224 Вложение 32225
-
мне к примеру непонятно что на этих картинках, какой то обратный отсчет массива зачем то, контрольная сумма считается с какого индекса массива, чему равен размер обрабатываемых байт и т.д.
-
РЕШЕНО.
Этот вопрос поднимался ранее http://www.owen.ru/forum/showthread.php?t=20052
Нельзя изменять буфер пока идет обмен, т.е. промежуток времени между MB_WR_REGS.Enable = TRUE и возвратом флага завершения цикла обмена MB_WR_REGS.Complete = TRUE.