ModbusTCP数据帧
ModbusTCP的数据帧可分为两部分:MBAP+PDU。
报文头MBAP
MBAP为报文头,长度为7字节
事务处理标识 | 协议标识 | 长度 | 单元标识符 |
---|---|---|---|
2字节 | 2字节 | 2字节 | 1字节 |
内容 | 解释 |
---|---|
事务处理标识 | 可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。 |
协议标识符 | 00 00表示ModbusTCP协议。 |
长度 | 表示接下来的数据长度,单位为字节。 |
单元标识符 | 可以理解为设备地址。 |
帧结构PDU
PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。
ModbusTCP 通信方式
Modbus设备可分为主站(poll)和从站(slave)。主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。
import socket
def mod_tx():
host = '127.0.0.1'
port = 502
addr = (host,port)
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(addr)
slave =1
start = 0
count = 2
massage =bytearray([0x00,0x01,0x00,0x00,0x00,0x06,slave,0x03,0x00,start,0x00,count])
#massage = b'\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x02'
client.send(massage)
msg = client.recv(1024)
return msg
if __name__ == '__main__':
mod_tx()
标签:__,字节,0x00,TCP,Modbus,client,x00,socket
From: https://www.cnblogs.com/conpi/p/17054065.html