检索pyModbus数据

时间:2018-08-29 19:36:50

标签: python serial-port pymodbus

我正在尝试使用Modbus通过USB到串行转换器从PLC获取数据到我的PC。

从设备管理器中,我验证了USB转换器是COM3,并将其设置为 波特19200 数据位8 停止位1 无奇偶校验

使用Simply Modbus Slave可以在PC上看到寄存器40001-40004的正确值,从而证明我输出正确并且硬件正确。

我应该看到的数据如下(十月)

1234
16
32764
12345

和十六进制

0x04D2
0x0010
0x7FFC
0x3039

目前,我一直在引用此帖子47817634

import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)
from pymodbus.constants import Endian
from pymodbus.constants import Defaults
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
from pymodbus.transaction import ModbusRtuFramer

client = ModbusClient(method='rtu', port='COM3', stopbits=1, bytesize=8, timeout=3, baudrate=19200, parity='N')
connection = client.connect()
result = client.read_holding_registers(0x00,4,unit = 0x00)

这是终端中的输出

DEBUG:pymodbus.transaction:Current transaction state - IDLE
DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.transaction:SEND: 0x0 0x3 0x0 0x0 0x0 0x4 0x45 0xd8
DEBUG:pymodbus.client.sync:New Transaction state 'SENDING'
WARNING:pymodbus.client.sync:Cleanup recv buffer before send: 0x1 0x10 0x0
0x0 0x0 0x4 0x8 0x4 0xd2 0x0 0x10 0x7f 0xfc 0x30 0x39 0x89 0xb1 0x1 0x10 0x0
0x0 0x0 0x4 0x8 0x4 0xd2 0x0 0x10 0x7f 0xfc 0x30 0x39 0x89 0xb1 0x1 0x10 0x0
0x0 0x0 0x4 0x8 0x4 0xd2 0x0 0x10 0x7f 0xfc 0x30 0x39 0x89 0xb1
DEBUG:pymodbus.transaction:Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
DEBUG:pymodbus.transaction:Changing transaction state from 'WAITING FOR REPLY' to 'PROCESSING REPLY'
DEBUG:pymodbus.transaction:RECV: 0x1 0x10 0x0 0x0 0x0 0x4 0x8 0x4 0xd2 0x0 0x10 0x7f 0xfc
DEBUG:pymodbus.transaction:Getting transaction 1
DEBUG:pymodbus.transaction:Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'

在“警告:pymodbus.client.sync:发送前清理接收缓冲区”中,我可以看到我的数据!

0x4 0xd2 0x0 0x10 0x7f 0xfc 0x30 0x39

但是我不明白如何将那些持有寄存器值的内容放入标签中。这可能是简单的问题,但请帮忙。

0 个答案:

没有答案