西门子PLC协议-S7COMM-扩展
之前详细写S7中PDU,但S7 Communication被封装在TPKT和SO-COTP协议中,那么S7 Communication 至少还需要以下构成:
- COTP:ISO 8073 COTP面向连接的传输协议。
- TPKT:应用层数据传输协议,介于TCP和COTP协议之间。传输层协议,主要用来在COTP和TCP之间建立桥梁。
- TCP:协议数据单元,tcp的payload发送内容。
S7 Communication结构
TPKT 协议
结构
- Version:1byte,版本号
- Reserved:1byte,保留字
- Length:2byte,长度,TPKT、COTP、S7的PDU的总长度,也可以说是TCP的payload的长度
举例
版本位3,长度位25(0x0019)的TPKT协议
COTP 协议
简介
COTP(ISO 8073/X.224 COTP Connection-Oriented Transport Protocol)是OSI 7层协议定义的位于TCP之上的协议。COTP以“Packet”为基本单位来传输数据,这样接收方会得到与发送方具有相同边界的数据。(摘取网上定义)
结构
COTP协议有两种形态
- COTP Connection Packet:COTP连接包
- COTP Function Packet:COTP功能包
COTP连接包
-
Length:(1byte)长度,COTP协议长度,不包括COTP后续数据长度,也不包括Length长度,一般来说是17 bytes。
-
Type:(1byte)类型
code description 描述 0x01 ED Expedited Data 加急数据 0x02 EA Expedited Data Acknowledgement 加急数据确认 0x04 UD 用户数据 0x05 RJ Reject 拒绝 0x06 AK Data Acknowledgement 数据确认 0x07 ER TPDU Error TPDU错误 0x08 DR Disconnect Request 断开请求 0xC0 DC Disconnect Confirm 断开确认 0xD0 CC Connect Confirm 连接确认 0xE0 CR Connect Request 连接请求 0xF0 DT Data 数据传输 -
DST Ref:(2bytes)目标关联值
-
SRC Ref:(2bytes)源关联值
-
Opt:(1byte)
-
Parameters:参数值
- code:编号
- length:长度
- Data:数据内容
举例
11
E0
00 00
00 01
00
C1 02 01 00
C2 02 01 02
C0 01 09
opt 和parameters具体是什么这里就不继续深究
COTP功能包
功能包就比较简单,就只有长度类型和
举例
02
F0
80
最后
不管是TPKT除了数据长度改变外,其他的内容都是不变的,COTP协议基本上都是不变的,在写代码的时候大可写死就行。
所以解决了之前为什么使用Netty不能直接直接发起S7协议的问题,只需要封装上TPKT协议和COTP协议即可。