我没有使用过NModbus,但是我用C ++和C#编写了自己的Modbus“堆栈”,所以这个答案更多地基于我对Modbus的体验,而不是基于NModbus的工作方式。
在广播时(从站地址0),应该有来自Modbus命令EXCEPT的响应。 Modbus代码发送请求并等待响应应该是正常操作。如果在一段指定的时间内没有收到响应,我会发现超时错误。
看看modbus规范;写单寄存器功能应具有相同的请求和响应ADU(如果成功)。听起来你正在尝试用值1写入从地址1寄存器1.在这种情况下,请求响应ADU都应该是“01 06 00 01 00 01 19 CA”(“19 CA”是这个的正确CRC PDU)。我确实看到了来自请求或响应的数据,但似乎有些干扰:
RX: 0D 0A (NOT SURE WHAT THIS DATA IS FROM) RX: 0A 06 00 01 00 01 19 CA (LOOKS CLOSE, BUT ADDRESS IS WRONG) RX: 01 06 00 01 00 01 19 CA (LOOKS CORRECT) RX: 01 06 00 01 00 01 (LOOKS CORRECT, BUT INCOMPLETE)
只是为了测试,尝试更慢的波特率(9600)并使用偶校验。一些USB转串口转换器具有可以调整的驱动程序参数。您是否在两个转换器上启用了终端(第一个和最后一个设备已终止)?有没有办法配置NModbus响应超时?