具体参考这篇文章:[ffffffff0x] 工控协议:S7COMM协议分析(上) - 腾讯云开发者社区-腾讯云
S7协议是西门子特有的一种协议,用于PLC编程,在PLC之间传输数据
它分三个部分,分别是header、parameter、data
header标记该s7包的类型、参数长度、数据长度等
他的构成部分:( ROSCTR,它决定了后续参数的结构 )
-
协议ID,一般是0x32
-
ROSCTR,PDU type,PDU 的类型,一般有以下值:
-
JOB 作业请求。由主设备发送的请求
-
ACK 确认响应,没有数据的简单确认
-
ACK_DATA 确认数据响应,这个一般都是响应JOB的请求;
-
USERDATA:原始协议的扩展,参数字段包含请求/响应 ID(用于编程/调试,读取 SZL,安全功能,时间设置,循环读取…)。
-
-
Reserved 冗余数据,通常为 0×0000;
-
...
-
Parameter length 参数总长度
-
Data length,数据长度。如果读取 PLC 内部数据,此处为 0×0000;对于其他功能,则为 Data 部分的数据长度;
在响应数据包中,还有可能存在错误信息,其错误信息结构为:
-
Error class,错误类型:
-
Error code,错误代码;流量包分析
S7Comm 中 Job(作业请求) 和 Ack_Data(确认数据响应) 中的 Parameter 项的第一个字段是 function(功能码),其类型为 Unsigned integer,大小为 1 byte,决定了其余字段的结构、消息的目的。
-
建立通信(Setup communication 0xF0)
建立通信在每个会话开始时被发送,然后可以交换任何其他消息。它用于协商 ACK 队列的大小和最大 PDU 长度,双方声明它们的支持值。
-
读取值(Read Var 0x04)
-
写入值(Write Var 0x05)
Write Var 中 Parameter 的结构跟读取值(Read Var0x04)一样,但是 Write Var 还需写入值,所以 Write Var 比 Read Var 多了一个 Data 项。
Data 的结构为:
-
Return code,返回代码
-
Transport size,确定变量的类型和长度:
-
Length,写入值的数据长度;
-
Data,写入的值;
-