Здравствуйте.
Подключил к WirenBoard периферийное устройство OWEN МУ110-6У.
В руководстве для OWEN МУ110-6У указано, что (цитата) “запись в регистры осуществляется командой 16 (0x10)” (конец цитаты).
Через утилиту modbus_client запись в регистры работает:
root@wirenboard:~# modbus_client --debug -mrtu -pnone /dev/ttyAPP1 -a16 -t03 -r16
Opening /dev/ttyAPP1 at 9600 bauds (N, 8, 1)
[10][03][00][10][00][01][86][8E]
Waiting for a confirmation…
<10><03><02><00><1E><4F>
SUCCESS: read 1 of elements:
Data: 0x001e
root@wirenboard:~#
root@wirenboard:~#
root@wirenboard:~# modbus_client --debug -mrtu -pnone /dev/ttyAPP1 -a16 -t0x10 -r16 40
Data to write: 0x0028
Opening /dev/ttyAPP1 at 9600 bauds (N, 8, 1)
[10][10][00][10][00][01][02][00][28][64][8E]
Waiting for a confirmation…
<10><10><00><10><00><01><03><4D>
SUCCESS: written 1 elements!
root@wirenboard:~# modbus_client --debug -mrtu -pnone /dev/ttyAPP1 -a16 -t03 -r16
Opening /dev/ttyAPP1 at 9600 bauds (N, 8, 1)
[10][03][00][10][00][01][86][8E]
Waiting for a confirmation…
<10><03><02><00><28><44><59>
SUCCESS: read 1 of elements:
Data: 0x0028
root@wirenboard:~#
А через MQTT не работает:
кусок файла-шаблона для устройства:
{
“device_type” : “MU110-6U”,
“device” : {
“name”: “MU110-6U”,
“id”: “mu110-6u”,
“setup”: [
{
“title” : “Output Alarm AO1”,
“address” : 16,
“value” : 10
}
],
“channels”: [
{
“name”: “AO1”,
“reg_type”: “holding”,
“address”: “0”,
“format”: “u16”,
“type”: “range”,
“max”: 1000
},
{ “name”: “Output Alarm AO1”,
“reg_type”: “holding”,
“address”: 16,
“format”: “u16”,
“type”: “range”,
“max”: 1000
…
]
service wb-mqtt-serial stop
service wb-mqtt-serial start
tail -n 20 /var/log/messages
Nov 14 09:16:54 wirenboard user.notice serial: Init: Output Alarm AO1: setup register <modbus:16:: 16> <-- 10
Nov 14 09:16:54 wirenboard user.notice serial: WARNING: device ‘modbus:16’ register ‘<modbus:16:: 16>’ setup failed: Serial protocol error: failed to write @ 16
Nov 14 09:16:54 wirenboard user.notice serial: Init: Output Alarm AO2: setup register <modbus:16:: 17> <-- 20
Nov 14 09:16:54 wirenboard user.notice serial: WARNING: device ‘modbus:16’ register ‘<modbus:16:: 17>’ setup failed: Serial protocol error: failed to write @ 17
Nov 14 09:16:54 wirenboard user.notice serial: Init: Output Alarm AO3: setup register <modbus:16:: 18> <-- 30
Nov 14 09:16:54 wirenboard user.notice serial: WARNING: device ‘modbus:16’ register ‘<modbus:16:: 18>’ setup failed: Serial protocol error: failed to write @ 18
Nov 14 09:16:54 wirenboard user.notice serial: Init: Output Alarm AO4: setup register <modbus:16:: 19> <-- 40
Nov 14 09:16:54 wirenboard user.notice serial: WARNING: device ‘modbus:16’ register ‘<modbus:16:: 19>’ setup failed: Serial protocol error: failed to write @ 19
Nov 14 09:16:54 wirenboard user.notice serial: Init: Output Alarm AO5: setup register <modbus:16:: 20> <-- 50
Nov 14 09:16:54 wirenboard user.notice serial: WARNING: device ‘modbus:16’ register ‘<modbus:16:: 20>’ setup failed: Serial protocol error: failed to write @ 20
Nov 14 09:16:54 wirenboard user.notice serial: Init: Output Alarm AO6: setup register <modbus:16:: 21> <-- 60
Nov 14 09:16:55 wirenboard user.notice serial: WARNING: device ‘modbus:16’ register ‘<modbus:16:: 21>’ setup failed: Serial protocol error: failed to write @ 21
Nov 14 09:17:53 wirenboard user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 0 for device modbus:16
root@wirenboard:~#
Подозреваю, что MQTT для записи использует отличную от “16” команду.
Вопросы:
- как принудительно указать для MQTT, что запись в конкретное устройство исполнять командой “16”?
- или как иным образом использовать запись в устройство с принудительным указанием команды?
Благодарю.
Андрей