Python Pymodbus:对无效单元id的读取操作将使用有效单元id';他失败了

Python Pymodbus:对无效单元id的读取操作将使用有效单元id';他失败了,python,python-2.7,modbus,modbus-tcp,Python,Python 2.7,Modbus,Modbus Tcp,我有一个modbus模拟器,其中定义了4个从机[1,2,3,4](使用modbus_tk),我还有一个pymodbus客户机通过TCP与该modbus从机进行对话。只要我们使用正确的从设备id(单元id),一切都正常,但一旦使用了无效id,所有事务开始返回无,即使对于有效的设备地址也是如此 下面提供了一个客户机代码和调试日志的示例片段供参考,可以看出“5”是一个无效的从属id,它会按预期失败(调试日志显示0x83 0x4),在第二次迭代中,即使对于有效设备(“1”),结果也返回为无,从调试日志中

我有一个modbus模拟器,其中定义了4个从机[1,2,3,4](使用modbus_tk),我还有一个pymodbus客户机通过TCP与该modbus从机进行对话。只要我们使用正确的从设备id(单元id),一切都正常,但一旦使用了无效id,所有事务开始返回无,即使对于有效的设备地址也是如此

下面提供了一个客户机代码和调试日志的示例片段供参考,可以看出“5”是一个无效的从属id,它会按预期失败(调试日志显示0x83 0x4),在第二次迭代中,即使对于有效设备(“1”),结果也返回为无,从调试日志中可以看出数据可用。任何关于可能出错的提示都将受到高度赞赏

代码 日志
嗯,我发现了问题,问题是缓冲区在出错时没有被清除,在一个新的事务中,缓冲区也会包含以前的错误消息,因此会再次导致异常。我已经在Well发布了示例解决方法,我发现了问题,问题是缓冲区在出错时未清除,在新事务中,缓冲区还将包含以前的错误消息,因此将再次导致异常。我已将示例解决方法发布在
from pymodbus.client.sync import ModbusTcpClient
import logging
logging.basicConfig()
log = logging.getLogger('pymodbus')
log.setLevel(logging.DEBUG)

client = ModbusTcpClient('127.0.0.1', 5440)
for x in range(2):
log.debug( "iteration %s " % x)

for slave in [1, 5]:
    try:
        log.debug(  "Slave ID %s" % slave)
        result = client.read_holding_registers(0,1, unit=slave)
        print result.registers[0]
    except Exception as e :
        # Attribute error due to result as None
        log.debug( "In Exception for slave ID %s" % slave)
client.close()
DEBUG:pymodbus:iteration 0 
DEBUG:pymodbus:Slave ID 1
DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.transaction:0x0 0x1 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x52
82 comment-----> This is the actual Value for holding registers from print statement(0x52)
DEBUG:pymodbus.factory:Factory Response[3]
DEBUG:pymodbus.transaction:adding transaction 1
DEBUG:pymodbus.transaction:getting transaction 1
DEBUG:pymodbus:Slave ID 5
DEBUG:pymodbus.transaction:Running transaction 2
DEBUG:pymodbus.transaction:0x83 0x4
DEBUG:pymodbus.transaction:getting transaction 2
DEBUG:pymodbus:In Exception for slave ID 5
DEBUG:pymodbus:iteration 1 
DEBUG:pymodbus:Slave ID 1
DEBUG:pymodbus.transaction:Running transaction 3
DEBUG:pymodbus.transaction:0x0 0x3 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x52
comment ---> Value (0x52) appears to be recieved but somehow not reached
DEBUG:pymodbus.transaction:getting transaction 3
DEBUG:pymodbus:In Exception for slave ID 1
DEBUG:pymodbus:Slave ID 5
DEBUG:pymodbus.transaction:Running transaction 4
DEBUG:pymodbus.transaction:0x83 0x4
DEBUG:pymodbus.transaction:getting transaction 4
DEBUG:pymodbus:In Exception for slave ID 5