PDA

Просмотр полной версии : библиотека ModBus.lib



LagutinStas
24.07.2017, 17:06
Добрый день, коллеги!
Используется ПЛК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"? В программе необходимо детектировать наличие связи с данным устройством.

capzap
24.07.2017, 17:08
с реализацией, можете открыть бибку как проект и покопаться во внутренностях

LagutinStas
25.07.2017, 18:41
Что-то непонятное. Вроде все нормально, но почему то при чтении регистров (функция 04) CRC считает корректно, а при записи регистра (функция 16) происходит некорректный расчет CRC.
В обоих случаях вычисление производиться одной и той же функцией MB_CRC.
32222 32223

32224 32225

capzap
25.07.2017, 19:05
мне к примеру непонятно что на этих картинках, какой то обратный отсчет массива зачем то, контрольная сумма считается с какого индекса массива, чему равен размер обрабатываемых байт и т.д.

LagutinStas
26.07.2017, 16:15
РЕШЕНО.
Этот вопрос поднимался ранее http://www.owen.ru/forum/showthread.php?t=20052
Нельзя изменять буфер пока идет обмен, т.е. промежуток времени между MB_WR_REGS.Enable = TRUE и возвратом флага завершения цикла обмена MB_WR_REGS.Complete = TRUE.