首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pymodbus -简单程序

Pymodbus -简单程序
EN

Stack Overflow用户
提问于 2015-07-24 08:06:07
回答 1查看 2.5K关注 0票数 0

我一直在使用python中的pymodbus库编写一个简单的程序。这是我在库文档中找到的示例程序。代码如下

代码语言:javascript
运行
复制
from pymodbus.client.sync import ModbusTcpClient

client = ModbusTcpClient('192.168.10.3')
client.write_coil(410001, False)
result = client.read_coils(410001,1,unit=1)
print result.bits[0]
client.close()

我收到错误了

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "start_2407.py", line 4, in <module>
    client.write_coil(410001, False)
  File "build\bdist.win-amd64\egg\pymodbus\client\common.py", line 61, in write_coil
  File "build\bdist.win-amd64\egg\pymodbus\client\sync.py", line 131, in execute
  File "build\bdist.win-amd64\egg\pymodbus\client\sync.py", line 46, in execute
  File "build\bdist.win-amd64\egg\pymodbus\transaction.py", line 243, in buildPacket
  File "build\bdist.win-amd64\egg\pymodbus\bit_write_message.py", line 58, in encode
struct.error: 'H' format requires 0 <= number <= 65535

是否需要以十六进制提供地址位置?我也尝试过,但是输出与我从Modscan2获得的输出不匹配。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-24 13:58:17

Modbus变量在0-65535范围内寻址.你可以有多达65536线圈,离散输入,输入寄存器和保持寄存器。您不允许使用410001作为PyModbus的输入。410001是一种非常传统(非标准)的方式来代表第10000持有登记册。是的,很奇怪。Modbus厂商在拿出他们的内存地图时很有创意。

您可以使用read_holding_registers方法和address=10000来读取该寄存器。

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

https://stackoverflow.com/questions/31605272

复制
相关文章

相似问题

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