Modbus TCP

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()
posted @ 2023-01-15 20:16  华小电  阅读(594)  评论(0)    收藏  举报