Китайский modbus девайс 508N

Приветствую, уважаемые

Приобрел похожий девайс 508N, отличается наличием 8 реле и отсутствием 8 аналоговых инпутов. Темплейт изменил по аналогии с тем, что выложен выше в теме.

Итого, устройство в интерфейсе красное, сыпятся ошибки типа:

Jul 31 20:05:33 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 1 discrete(s) @ 7 of device modbus:1
Jul 31 20:05:33 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 1 holding(s) @ 0 of device modbus:1
Jul 31 20:05:33 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 1 holding(s) @ 1 of device modbus:1
Jul 31 20:05:33 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 1 holding(s) @ 2 of device modbus:1
Jul 31 20:05:33 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 1 holding(s) @ 3 of device modbus:1
Jul 31 20:05:33 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 1 input(s) @ 0 of device modbus:1
Jul 31 20:05:33 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 1 input(s) @ 1 of device modbus:1
Jul 31 20:05:33 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 1 input(s) @ 2 of device modbus:1
Jul 31 20:05:34 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 1 input(s) @ 3 of device modbus:1
Jul 31 20:05:34 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 1 input(s) @ 4 of device modbus:1

Но при этом реле управляются с того же “красного” web-интерфейса.

Картина выглядит следующим образом:

Для исправления ошибок на форуме подсмотрел решение: увеличить Max read registers, но не помогло.

Подскажите, в какую сторону копать?
to_adav, Вы не сталкивались с подобной проблемой при подключении своего девайса?

Вы ставили max_read_registers = 0 например?
Если да и оно не работает, то покажите пожалуйста лог ошибок с такой настройкой.

Ранее менял Max read registers на 30, сейчас пробовал изменить на 0, изменений нет.
Логи:

Jul 31 21:39:15 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 8 discrete(s) @ 0 of device modbus:1
Jul 31 21:39:15 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 4 holding(s) @ 0 of device modbus:1
Jul 31 21:39:16 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 8 input(s) @ 0 of device modbus:1
Jul 31 21:39:16 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 8 coil(s) @ 0 of device modbus:1
Jul 31 21:39:16 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 8 discrete(s) @ 0 of device modbus:1
Jul 31 21:39:16 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 4 holding(s) @ 0 of device modbus:1
Jul 31 21:39:16 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 8 input(s) @ 0 of device modbus:1
Jul 31 21:39:17 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 8 coil(s) @ 0 of device modbus:1
Jul 31 21:39:17 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 8 discrete(s) @ 0 of device modbus:1
Jul 31 21:39:17 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 4 holding(s) @ 0 of device modbus:1

Правильно ли я понимаю, что Max read registers должно устанавливаться здесь:

Ну да, по изменению в логах понятно, что поведение изменилось, но это не помогло.

Попробуйте ещё поставить guard_interval_us в что-нибудь типа начиная от 100000

Нет, не сталкивался, но все же у меня несколько другой девайс. Max read registers не менял, все было по умолчанию. Работало с WB вообще без проблем, проверил все 4 типа регистров. Но в итоге этот девайс остался работать через TCP напрямую с ioBroker. Там, кстати, тоже есть настройка максимального числа регистров (по умолчанию 100)… конкретно для моего девайса она не влияла на работу (пробовал и 1). А вот с другим специфическим девайсом там пришлось ставить 1, иначе были проблемы со считыванием input регистров. Менял Delay before accessing the device на 0 для улучшения отзывчивости (по умолчанию вроде 100). Нормально работало, хотя некоторые другие девайсы (например счетчик) требуют устанавливать задержку не менее 50-100мс.

Замечу, что я это делал давно и возможно старый wb-mqtt-serial и с modbus имел меньше проблем (когда я недавно обновился у меня начались проблемы с Uniel, но у других modbus девайсов, что до сих пор подключены к WB, при этом никаких проблем не возникло). К сожалению, подключить к WB и проверить нет никакого желания - все настроено и работает, ломать неохота.

В Вашем случае я бы сначала упростил темплейт до минимума и попробовал отдельно считывать только регистры одного типа. Ну и неплохо было бы посмотреть что Вы там написали в темплейте.

  1. Не смог найти параметр guard_interval_us, или его нужно вручную добавлять через add?

  2. Упрощал темплейт только до работающих DO, но ошибка та же:

Aug 1 08:45:12 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 8 coil(s) @ 0 of device modbus:1
Aug 1 08:45:12 wirenboard user.notice serial: TModbusDevice::ReadRegisterRange(): failed to read 8 coil(s) @ 0 of device modbus:1

  1. Мой темплейт выглядит следующим образом:
// Configuration options
{
	"device_type" : "517N",
	"device" : {
	    "name" : "517N",
	    "id" : "517N",
	    "channels" : [
		{
                "name" : "AO_1",
                "reg_type" : "holding",
                "address" : 0,
                "type" : "value",
				"format" : "s16",
				"scale": 1
            },
            {
                "name" : "AO_2",
                "reg_type" : "holding",
                "address" : 1,
                "type" : "value",
				"format" : "s16",
				"scale": 1
            },
            {
                "name" : "AO_3",
                "reg_type" : "holding",
                "address" : 2,
                "type" : "value",
				"format" : "s16",
				"scale": 1
            },
            {
                "name" : "AO_4",
                "reg_type" : "holding",
                "address" : 3,
                "type" : "value",
				"format" : "s16",
				"scale": 1
            },
            {
                "name" : "AI_01",
                "reg_type" : "input",
                "address" : 0,
                "type" : "value",
				"format" : "u16",
				"scale": 1
            },
            {
                "name" : "AI_02",
                "reg_type" : "input",
                "address" : 1,
                "type" : "value",
				"format" : "u16",
				"scale": 1
            },
            {
                "name" : "AI_03",
                "reg_type" : "input",
                "address" : 2,
                "type" : "value",
				"format" : "u16",
				"scale": 1
            },
            {
                "name" : "AI_04",
                "reg_type" : "input",
                "address" : 3,
                "type" : "value",
				"format" : "u16",
				"scale": 1
            },
            {
                "name" : "AI_05",
                "reg_type" : "input",
                "address" : 4,
                "type" : "value",
				"format" : "u16",
				"scale": 1
            },
            {
                "name" : "AI_06",
                "reg_type" : "input",
                "address" : 5,
                "type" : "value",
				"format" : "u16",
				"scale": 1
            },
            {
                "name" : "AI_07",
                "reg_type" : "input",
                "address" : 6,
                "type" : "value",
				"format" : "u16",
				"scale": 1
            },
            {
                "name" : "AI_08",
                "reg_type" : "input",
                "address" : 7,
                "type" : "value",
				"format" : "u16",
				"scale": 1
            },
			{
                "name" : "DI_01",
                "reg_type" : "discrete",
                "address" : 0,
                "type" : "switch"
            },
            {
                "name" : "DI_02",
                "reg_type" : "discrete",
                "address" : 1,
                "type" : "switch"
            },
            {
                "name" : "DI_03",
                "reg_type" : "discrete",
                "address" : 2,
                "type" : "switch"
            },
            {
                "name" : "DI_04",
                "reg_type" : "discrete",
                "address" : 3,
                "type" : "switch"
            },
            {
                "name" : "DI_05",
                "reg_type" : "discrete",
                "address" : 4,
                "type" : "switch"
            },
            {
                "name" : "DI_06",
                "reg_type" : "discrete",
                "address" : 5,
                "type" : "switch"
            },
            {
                "name" : "DI_07",
                "reg_type" : "discrete",
                "address" : 6,
                "type" : "switch"
            },
            {
                "name" : "DI_08",
                "reg_type" : "discrete",
                "address" : 7,
                "type" : "switch"
            },
			{
                "name" : "DO_01",
                "reg_type" : "coil",
                "address" : 0,
                "type": "switch"
            },
            {
                "name" : "DO_02",
                "reg_type" : "coil",
                "address" : 1,
                "type": "switch"
            },
			{
                "name" : "DO_03",
                "reg_type" : "coil",
                "address" : 2,
                "type": "switch"
            },
			{
                "name" : "DO_04",
                "reg_type" : "coil",
                "address" : 3,
                "type": "switch"
            },
			{
                "name" : "DO_05",
                "reg_type" : "coil",
                "address" : 4,
                "type": "switch"
            },
			{
                "name" : "DO_06",
                "reg_type" : "coil",
                "address" : 5,
                "type": "switch"
            },
			{
                "name" : "DO_07",
                "reg_type" : "coil",
                "address" : 6,
                "type": "switch"
            },
			{
                "name" : "DO_08",
                "reg_type" : "coil",
                "address" : 7,
                "type": "switch"
            }
	    ]
	}
}

Два варианта - через настройки в WEB - добавить в свойствах устройства Interval between register reads, либо в заголовок темплейта “guard_interval_us”: “…”

Вижу Вы темплейт скопировали полностью мой, убрав лишние регистры. По идее должно работать.

Добрался до оборудования, прописал в темплейте guard_interval_us. Результат отрицательный, изменений нет.
Играюсь с точно работающими реле, то есть они щелкают, но в интерфейсе устройство “красное”.

С чем еще можно поиграться чтобы заставить работать устройство?

Попробуйте в настройках устройства в WEB: Interval between register reads = 0

Установил Interval between register reads = 0, результат отрицательный, изменений нет.

Так может девайс вообще не умеет в чтение регистров (или делает это нестандартной командой)? С китайцев станется.

Руками не пробовали команду на чтение в консоли посылать?