我用pymodbus来创建Modbus RTU服务器。在
我根据文档中的示例以非常基本的方式创建了服务器。在
store = ModbusSlaveContext(
di = ModbusSequentialDataBlock(0, [0x0]*10000),
co = ModbusSequentialDataBlock(0, [0x0]*10000),
hr = ModbusSequentialDataBlock(0, [0x0]*10000),
ir = ModbusSequentialDataBlock(0, [0x0]*10000))
context = ModbusServerContext(slaves=store, single=True)
StartSerialServer(context, port='/dev/ttyUSB0', framer=ModbusRtuFramer)
我的客户连接正确。服务器打印出请求的十六进制值。在
我现在要做的是处理不同的请求。
例如:如果一个客户机想从保持寄存器中读取寄存器4128,我想将一个值作为响应发送回来。在
我在文档中找不到任何有用的例子(或者我只是不明白?)
我已经尝试将ModbusSequentialDataBlock
子类化并重写get/setValue
方法,但没有成功。在
这是我的数据存储的代码。它非常简单,我希望在我的get/setValues
方法中看到打印。但我什么也没看到。在
作为di、co等,我在ModbusSlaveContext
中使用了MyData(...)
而不是modbusequentialdatablock。在
编辑
原来是Modbus。使用异步服务器时,不能使用RTU框架。 我打开了一个bug,它似乎被修复了: https://github.com/bashwork/pymodbus/issues/70#event-213935076
我做的事情有点不同…ModbusTCP而不是ModbusRTU…但是我已经找到了如何让它返回不同的值,我想这正是你想要的(getValues/setValues)。干得好。。。在
所有的保持寄存器(从3001开始,有10000个)被设置为9999的初始值。从机ID为1,前十个寄存器每隔2秒递增1。在
希望对你有帮助。在
不幸的是,当我试图将值设置为负整数时,pymodbus抛出了一个错误。这就是我被难住了。。。在
https://stackoverflow.com/questions/28244730/pymodbus-setvalues-how-to-resolve-error-integer-out-of-range-for-h-format-co
相关问题 更多 >
编程相关推荐