【问题标题】:How to get pymodbus to correctly communicate with PLC?如何让 pymodbus 与 PLC 正确通信?
【发布时间】:2021-03-06 09:27:58
【问题描述】:

在我问之前,我只想提一下,我已经花了几天时间研究这个问题,似乎无法找到解决这个基本问题的方法。我已经阅读了文档并花时间在这里。否则我不会问。

我继承了一个庞大的单体 python 程序,它成功地使用 pymodbus + read_holding_registers 读取保持寄存器。我以前花时间编辑 python,但从未真正学会它。为了尝试在 python 方面理解这一点,我尝试从头开始编写自己的基本程序。我从大处着手,最终将代码分解为尽可能简单。

from pymodbus.client.sync import ModbusTcpClient as ModbusClient

client = ModbusClient('192.168.1.98', port=502)
client.connect()

rr = client.read_holding_registers(10904, 2)

print rr

client.close()

我知道这是我想要的寄存器。它是霍纳 PLC 上的一个保持寄存器。它在 python 程序和 Horner CSCAPE 中都有详细记录。但是每当我运行程序时,它只会打印我在元组的第二项中输入的任何值。所以在这里,它只会打印2。如果我提供(10905, 1) 的元组,它只会打印1。寄存器位的真实值应该是0

我会发布大型程序,但不幸的是它是私人的。这是python2.7。我知道这很糟糕,但我只是想在担心将其移植到 3.9 之前了解该程序。

【问题讨论】:

  • 你试过rr = client.read_holding_registers(10904, 2).registers 吗?
  • 成功了!太感谢了!我发誓我无法从我能在任何地方找到的文档中拼凑出这个!我该如何感谢你的天赋?
  • 不客气!然后,为了完整起见,我会将评论转为答案

标签: python pymodbus pymodbustcp


【解决方案1】:

你必须像这样用.registers 调用它

rr = client.read_holding_registers(10904, 2).registers

另外,如果您检查the documentation,作者声称该代码与 Python 2.7 和 Python 3.x 兼容,因此您可以对其进行移植。

【讨论】:

    猜你喜欢
    • 2020-05-16
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多