S7通信协议解析

发布时间:2024年01月01日

我们以S7的1500系列来查看握手和读取、写入【字Word或者位Bit】命令报文

以下报文不做说明时都是十六进制字节。

西门子PLC需要连接成功后发送两次握手命令方可进行读写通信。

西门子PLC的S7协议的头由四个字节组成.。
第一个字节数固定为03,第二个字节数固定为00

第三个字节和第四个字节代表【报文字节总长度】,比如00 16就代表报文总长度为22

报文字节总长度=256*buffer[2]+buffer[3]

【高字节在前,低字节在后】,而在C#程序中是低字节在前,高字节在后的。

因此,对报文的解析是 通过 03 00 开头,然后查找第三个和第四个字节,来获取【报文字节总长度】,然后依次查找【报文字节总长度-4】个字节即终止。

S7协议的地址(偏移量)是按照位来运算的,因此需要地址值乘以8。

地址的三个字节范围为0x000000~0x08FFFF

比如M30000,实际地址就是30000*8=240000,然后转化为3个字节。

240000=0x03A980,对应三个字节【03 A9 80】

比如DB21234.40000 其中DB号21234为0x52F2,DB编号对应两个字节【52 F2】

偏移量(地址)40000乘以8就是320000,也就是0x04E200,对应三个字节【04 E2 00】

第一次握手First Handshake
发送命令【22个字节】:

03 00 00 16 11 E0 00 00 00 01 00 C0 01 0A C1 02 01 02 C2 02 01 00

反馈命令【22个字节】:

03 00 00 16 02 D0

文章来源:https://blog.csdn.net/zxm8513/article/details/135320929
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。