首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于TCP的Python Modbus RTU

基于TCP的Python Modbus RTU
EN

Stack Overflow用户
提问于 2022-08-12 06:58:12
回答 2查看 373关注 0票数 0

我试图用python在Modbus TCP上读写数据。当我在下面的设置中使用ModbusPoll时,一切都可以工作。

我现在尝试用python读取数据,并为此使用了[医]绿脓杆菌库。我的代码如下所示:

代码语言:javascript
复制
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.transaction import ModbusRtuFramer as ModbusFramer

client = ModbusTcpClient("192.168.0.7", port=502, framer=ModbusFramer)
success = client.connect()

read = client.read_holding_registers(address=4000)
read.registers

但我总是会犯以下错误:

接收到ModbusIOException(InvalidMessageReceivedException('No响应,预期至少有2个字节(0接收到),1)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-12 10:06:32

读取保存寄存器需要一个单元来正确地读取消息。

代码语言:javascript
复制
read = client.read_holding_registers(address=4000, unit=1)
票数 2
EN

Stack Overflow用户

发布于 2022-08-16 15:45:17

这就是帮我的忙。

检查设备的slave_ID (unit=slave_ID)。它不是议会1或0。例如,在我的例子中- 240。

代码语言:javascript
复制
result = client.read_holding_registers(address=0x0010, count = 2, **unit=240**)

文件上说:

代码语言:javascript
复制
    def write_register(self, address, value, **kwargs):
    '''

    :param address: The starting address to write to
    :param value: The value to write to the specified address
    **:param unit: The slave unit this request is targeting**
    :returns: A deferred response handle
    '''

和:

代码语言:javascript
复制
    def read_holding_registers(self, address, count=1, **kwargs):
    '''

    :param address: The starting address to read from
    :param count: The number of registers to read
    **:param unit: The slave unit this request is targeting**
    :returns: A deferred response handle
    '''

查看文件"common.py“或在光标处于函数状态时按Ctrl+B。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73330328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档