首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyModbus无法读取保持寄存器

PyModbus无法读取保持寄存器
EN

Stack Overflow用户
提问于 2020-06-22 10:33:53
回答 1查看 568关注 0票数 0

我正在尝试使用PyModbus 2.3.0从西门子S7-1200PLC上的一些保持寄存器中读取数值。我已经设置了一些梯形逻辑来在PLC上测试这一点,一些寄存器保存随机浮点测试值。我试图在Raspberry Pi 3上通过标准的Raspbian安装来完成这一切。连接是通过以太网的,并且我已经确认PyModbus可以连接到可编程逻辑控制器(我已经pinged了可编程控制器,并且PyModbus状态请求返回true,你很快就会看到)。与此相关的代码片段如下:

代码语言:javascript
复制
import pymodbus
import logging
import logging.handlers as Handlers
from pymodbus.client.sync import ModbusTcpClient

logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)

client = ModbusTcpClient('192.168.15.16', port = '443', timeout = 10, baudrate = 38400)
connection = client.connect()
print('PLC connection status: ', connection)
response = client.read_holding_registers(address = 50, length = 64, unit = 1)
print(response)
client.close()

结果是这样的:

代码语言:javascript
复制
PLC connection status:  True
DEBUG:pymodbus.transaction:Current transaction state - IDLE
DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.transaction:SEND: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x3 0x0 0x32 0x0 0x1
DEBUG:pymodbus.client.sync:New Transaction state 'SENDING'
DEBUG:pymodbus.transaction:Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
DEBUG:pymodbus.transaction:Transaction failed. (Modbus Error: [Invalid Message] Incomplete message received, expected at least 8 bytes (0 received)) 
DEBUG:pymodbus.framer.socket_framer:Processing: 
DEBUG:pymodbus.transaction:Getting transaction 1
DEBUG:pymodbus.transaction:Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
Modbus Error: [Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 8 bytes (0 received)

我不能准确地展示我现在使用的梯形逻辑,但是TIA给出的带有测试值的寄存器的地址是"%MD50",我相信这意味着我需要像上面那样做,并查找具有64位数据的寄存器50 (保持寄存器)。但是,PLC似乎没有发送任何响应;我是不是做错了什么?我很困惑为什么这个现在不能工作。

EN

回答 1

Stack Overflow用户

发布于 2021-03-31 12:29:42

您可以使用Wireshark监控客户端和服务器之间的通信。这将帮助您更好地诊断错误。Modbus的保持寄存器的每个位置保存16位数据。指令: client.read_holding_registers(address = 50,length = 64,unit = 1)将值从地址位置50返回到保持寄存器的50+64。

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

https://stackoverflow.com/questions/62506644

复制
相关文章

相似问题

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