使用Ruby的ModBus TCP通信:未能实现HelloWorld

使用Ruby的ModBus TCP通信:未能实现HelloWorld,ruby,modbus-tcp,Ruby,Modbus Tcp,我能够使用实用程序v3.4与通风设备(仅支持保存寄存器,英文描述从文件的50%开始)通信。但是我没有将第一次通信传输到Ruby和v1.3.3 使用modpoll,我可以通过命令请求一些温度值 ./modpoll -m tcp -a 180 <ipaddr> 0x7630 0x3031 0x3034 0x0000 并抛出异常 /var/lib/gems/2.3.0/gems/rmodbus-1.3.3/lib/rmodbus/slave.rb:241:in `rescue in qu

我能够使用实用程序v3.4与通风设备(仅支持保存寄存器,英文描述从文件的50%开始)通信。但是我没有将第一次通信传输到Ruby和v1.3.3

使用modpoll,我可以通过命令请求一些温度值

./modpoll -m tcp -a 180 <ipaddr> 0x7630 0x3031 0x3034 0x0000
并抛出异常

/var/lib/gems/2.3.0/gems/rmodbus-1.3.3/lib/rmodbus/slave.rb:241:in `rescue in query': 
Timed out during read attempt (ModBus::Errors::ModBusTimeout)
from /var/lib/gems/2.3.0/gems/rmodbus-1.3.3/lib/rmodbus/slave.rb:232:in `query'
from /var/lib/gems/2.3.0/gems/rmodbus-1.3.3/lib/rmodbus/slave.rb:164:in `read_holding_registers'
怎么了


我不确定是否/如何使用modpoll“address=180”和“start reference=1”输出的参数。“地址”是否等同于“持有寄存器”?

好的,这个相当愚蠢。对于记录(以及其他可能想使用rmodbus与他们的太阳神对话的人):

打开调试,该调试输出发送至modbus从机的字节流。第一个字节序列应该是:事务号(2字节)、协议说明符(2字节,始终为零)、以下消息的大小(2字节)、单元标识符(1字节,对于Helios KWL,始终为180)

从机需要用其单元标识符180初始化,而不是1:

client.with_slave(180) do |slave|
/var/lib/gems/2.3.0/gems/rmodbus-1.3.3/lib/rmodbus/slave.rb:241:in `rescue in query': 
Timed out during read attempt (ModBus::Errors::ModBusTimeout)
from /var/lib/gems/2.3.0/gems/rmodbus-1.3.3/lib/rmodbus/slave.rb:232:in `query'
from /var/lib/gems/2.3.0/gems/rmodbus-1.3.3/lib/rmodbus/slave.rb:164:in `read_holding_registers'
slave.debug = 1 
client.with_slave(180) do |slave|