Замедление при работе с неправильным modbus tcp slave (решено)
При распределении переменных mbtcp slave по запросам SMLogix назначил в один запрос на запись (код функции 0x16) 124 переменных за раз. libmodbus с такой постановкой вопроса не согласен, ссылаясь на спецификацию протокола - там 123. На запрос записи 124 регистров тестовый сервер из состава libmodus пишет в лог ошибку и разрывает tcp соединение. Соответственно, эта процедура повторяется очень часто, что вызывает загрузку ПЛК процессом mbs до 65% и торможение визуализации.
Пока вылечил увеличением максимального количества регистров в пакете при записи до 125 и modbus_max_adu_length
выдержка из modbus.h в libmodbus
/* Modbus_Application_Protocol_V1_1b.pdf (chapter 6 section 3 page 15)
* Quantity of Registers to read (2 bytes): 1 to 125 (0x7D)
* (chapter 6 section 12 page 31)
* Quantity of Registers to write (2 bytes) 1 to 123 (0x7B)
* (chapter 6 section 17 page 38)
* Quantity of Registers to write in R/W registers (2 bytes) 1 to 121 (0x79)
*/
|