我使用pymodbus创建Modbus RTU服务器。Pymodbus 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)
我的客户端连接correclty。服务器打印出请求的十六进制值。
我现在想要做的是处理不同的请求。
例如:如果客户想要从保持寄存器中读取寄存器4128,我想发回一个值作为响应。
我无法找到的文档的任何有用的例子(或者也许我只是不明白吗?)
我已经尝试过的子类ModbusSequentialDataBlock
和覆盖get/setValue
方法没有成功。
这是我的数据存储的代码。这非常简单,我期望在我的get/setValues
方法中看到打印件。但我什么也没看到。
class MyData(ModbusSequentialDataBlock):
def __init__(self, address, values):
self.address = address
self.values = values
def validate(self, address, count=1):
print "validate"
def getValues(self, address, count=1):
print "getValues"
print address
def setValues(self, address, count=1):
print "setValues"
print address
如二,CO等我用MyData(...)
代替ModbusSequentialDataBlock在ModbusSlaveContext
。
编辑
原来,这是在pymodbus的错误。使用异步服务器时,不能使用RTU成帧器。 我开了一个bug,它似乎是固定的: https://github.com/bashwork/pymodbus/issues/70#event-213935076
感谢您的窍门。看我的编辑。这是使用RTU和异步服务器时的一个错误。 – 0xAffe 2015-02-04 07:32:02