我想通过Modbus TCP发送数据包。我想用:
但我不能这样发送怎么发送这个数据包? (我不知道会有什么)
req = struct.pack( ‘某事’,交易,……
struct.pack()
0001 0000 0006 11 03 006B 0003
0001: Transaction Identifier 0000: Protocol Identifier 0006: Message Length (6 bytes to follow) 11: The Unit Identifier (17 = 11 hex) 03: The Function Code (read Analog Output Holding Registers) 006B: The Data Address of the first register requested. (40108-40001 = 107 =6B hex) 0003: The total number of registers requested. (read 3 registers 40108 to 40110) <子> 参考 子>
0001: Transaction Identifier
0000: Protocol Identifier
0006: Message Length (6 bytes to follow)
11: The Unit Identifier (17 = 11 hex)
03: The Function Code (read Analog Output Holding Registers)
006B: The Data Address of the first register requested. (40108-40001 = 107 =6B hex)
0003: The total number of registers requested. (read 3 registers 40108 to 40110)
<子> 参考 子>
因此,您可以创建一个 MODBUS-TCP 包含以上示例的数据包:
import struct transaction = 0x0001 identifier = 0x0000 length = 0x0006 unitid = 0x11 fcode = 0x03 # Holding register fcode. reg_addr = 0x006B # Register address. count = 0x0003 # Read three register. total_pack_string = '0x{:04x}{:04x}{:04x}{:02x}{:02x}{:04x}{:04x}'.format( transaction, identifier, length, unitid, fcode, reg_addr, count ) total_pack_hex = hex(int(total_pack_string, 16)) '''Or with using pack method.''' pack_ = struct.pack( '>HHHBBHH', transaction, identifier, length, unitid, fcode, reg_addr, count ) # Then send the pack_ or total_pack_hex using a TCP-Socket.
[ 的 注意 强> ]:
transaction
H
identifier
length
unitid
B
fcode
reg_addr
count
unsigned byte
unsigned short
因此,格式将是这样的 >HHHBBHH
>HHHBBHH
from pymodbus.client.sync import ModbusTcpClient unitid = 0x11 fcode = 0x03 # Holding register fcode. reg_addr = 0x006B # Register address. count = 0x0003 # Read three register. cli = ModbusTcpClient('127.0.0.1', port=502) if cli.connect(): res = cli.read_holding_registers(reg_addr, count=count, unit=unitid) if not res.isError(): print(res.registers) else: print('There is an error.') cli.close() else: print('Error in connection.')