PDA

Просмотр полной версии : Modbus.lib



K3114
18.01.2023, 18:52
Есть ПЛК110 и панель Weintek, связаны между собой через RS232.
Задача считать по адресу 10 регистров панели по Modbus.
Прием передача настроена, но проблема в том, что считать можно только один регистр, т.е. когда установка Quantity:=1, при установке Quantity большего значения выскакиевает ошибка 255.
Чтение функцией MB_RD_HOLD_REGS 03. При тех же настройках Modbus Poll спокойно считывает 10 регистров с панели.

Сам пример программы из описания библиотеки Modbus.lib с нужными настройками порта.

Подскажите, как можно считать 10 регистров группой?

ASo
18.01.2023, 18:57
Вы пробовали считать эти 10 регистров группой сторонней программой?

K3114
19.01.2023, 11:57
Да, Modbus Poll считывает нормально.
Функция та же, как и все настройки.
Впринципе и ПЛК при параметре quantity = 1 считывает.

1exan
19.01.2023, 12:23
Есть ПЛК110 и панель Weintek, связаны между собой через RS232.
Задача считать по адресу 10 регистров панели по Modbus.
Прием передача настроена, но проблема в том, что считать можно только один регистр, т.е. когда установка Quantity:=1, при установке Quantity большего значения выскакиевает ошибка 255.
Чтение функцией MB_RD_HOLD_REGS 03. При тех же настройках Modbus Poll спокойно считывает 10 регистров с панели.

Сам пример программы из описания библиотеки Modbus.lib с нужными настройками порта.

Подскажите, как можно считать 10 регистров группой?

Если у вас в проекте только пример из описания, то выложите его здесь, может кто найдет проблему

K3114
19.01.2023, 12:52
ПЛК110.30M v2 , обращаюсь к устройству через RS232, в моем случае начиная с 80го регистра

1exan
19.01.2023, 14:41
Вообще, если планируете использовать Modbus.lib, посмотрите эту тему (https://owen.ru/forum/showthread.php?t=25112). Я пробовал, очень удобно

Спорягин Кирилл
19.01.2023, 14:59
Вообще, если планируете использовать Modbus.lib, посмотрите эту тему (https://owen.ru/forum/showthread.php?t=25112). Я пробовал, очень удобно

Внесу комментарий, как автор универсального диспетчера...

Библиотека для случаев, когда ПЛК - мастер!!!
ТС спрашивает, конечно, как с помощью ПЛК считать из панели 10 регистров, т.е. видимо, подразумевает, что ПЛК - мастер в связке с панелью.
Но в подавляющем большинстве случаев в связке ПЛК-панель, мастером должна быть панель!!!

Быть может ТС не правильно создает архитектуру системы?

kondor3000
19.01.2023, 15:21
Есть ПЛК110 и панель Weintek, связаны между собой через RS232.
Задача считать по адресу 10 регистров панели по Modbus.
Прием передача настроена, но проблема в том, что считать можно только один регистр, т.е. когда установка Quantity:=1, при установке Quantity большего значения выскакиевает ошибка 255.
Чтение функцией MB_RD_HOLD_REGS 03. При тех же настройках Modbus Poll спокойно считывает 10 регистров с панели.

Сам пример программы из описания библиотеки Modbus.lib с нужными настройками порта.

Подскажите, как можно считать 10 регистров группой?

Так у вас и в коде только 1 регистр считывается, с байтами 0 и 1, надо добавить х1, х2, х3, х4 .....х10 с разными последующими байтами из буфера естественно 65248
Тогда и Quantity:=10, заработает. Панель надеюсь Слейв у вас.

А вообще считывать регистры группой, можно и через конфигурацию, с помощью String, до 40 штук за раз. https://owen.ru/forum/showthread.php?t=22915&page=39&p=244022&viewfull=1#post244022

K3114
19.01.2023, 17:26
Все оказалось непредсказуемо просто, дело было в минимальной длине цикла работы контроллера, увеличил до 10мс и стало все ок.



Вообще, если планируете использовать Modbus.lib, посмотрите эту тему (https://owen.ru/forum/showthread.php?t=25112). Я пробовал, очень удобно
Да, думаю, что скоро буду переходить на данный способ связи с модулями.



Внесу комментарий, как автор универсального диспетчера...

Библиотека для случаев, когда ПЛК - мастер!!!
ТС спрашивает, конечно, как с помощью ПЛК считать из панели 10 регистров, т.е. видимо, подразумевает, что ПЛК - мастер в связке с панелью.
Но в подавляющем большинстве случаев в связке ПЛК-панель, мастером должна быть панель!!!

Быть может ТС не правильно создает архитектуру системы?
Да, про мастера и слейва иногда забываю, но тут панель просто использовалась как устройство с регистрами, дальше контроллер пойдет в поле.



Так у вас и в коде только 1 регистр считывается, с байтами 0 и 1, надо добавить х1, х2, х3, х4 .....х10 с разными последующими байтами из буфера естественно 65248
Тогда и Quantity:=10, заработает. Панель надеюсь Слейв у вас.

А вообще считывать регистры группой, можно и через конфигурацию, с помощью String, до 40 штук за раз. https://owen.ru/forum/showthread.php?t=22915&page=39&p=244022&viewfull=1#post244022
Тут вопрос был не колличестве преобразованных переменных, а в самой способности считать весь пакет в регистр. Со string я бы не додумался, тоже решает мою проблему, попробовал, все читается как надо в string, спасибо.