【问题标题】:pymodbus: exception in modbus TCPpymodbus:modbus TCP 中的异常
【发布时间】:2018-05-31 19:39:45
【问题描述】:

当客户端向我的服务器写入超出范围的数字时,如何生成异常?另外,我希望我的服务器上的一些变量是只读的和其他读/写的。有什么推荐吗?

【问题讨论】:

    标签: python-3.x pymodbus


    【解决方案1】:

    Pymodbus 通常在内部处理超出范围的寄存器访问,读取/写入超出范围的数据块的请求将引发 ExceptionResponse('Invalid Address') 。在客户端,您可以通过检查响应上的isError() 方法(pymodbus v1.5.0 及更高版本)来检查接收到的响应是否为异常响应。

    参考synchronous_serversynchronous_client

    此外,默认情况下,离散输入和输入寄存器是只读的,保持寄存器和线圈是读/写的。任何写入只读数据块的尝试都会引发ExceptionResponse。 如果您有特定要求将一系列保持寄存器/线圈设为只读,您可以查看各种 datablocks,创建自定义数据块参考 custom datablock example

    【讨论】:

    • 感谢您的回答,我已经阅读了有关pymodbus服务器的异常,但我一直无法实现它。我以更新服务器为例: values = context[slave_id].getValues(register, address, count=10)
    • 是否可以在服务器上限制只读的modbus地址???
    • 更新服务器的块大小为 100,任何从偏移量 100 开始读取值的尝试都会引发豁免响应。这是供参考的客户端代码。 >>> from pymodbus.client.sync import ModbusTcpClient >>> c = ModbusTcpClient(port=5020) >>> c.read_holding_registers(100, 1, unit=1) <pymodbus.pdu.ExceptionResponse object at 0x10e2dfc50>
    猜你喜欢
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多