工业网络防护之工控协议深度解析01-西门子S7协议02

首先,这里所说的S7Comm 协议只是西门子S7通讯协议簇里的一种,以0x32开始的报文结构。

S7Comm协议结构:

借助WireShark抓包,可以看到,S7Comm 以太网协议基于OSI模型:


工业网络防护之工控协议深度解析01-西门子S7协议02

其中,第1~4层会由计算机自己完成(底层驱动程序);关于这些神马的定义,大家可以上网查一下;

第5层TPKT,应用程数据传输协议,介于TCP和COTP协议之间;这是一个传输服务协议,主要用来在COTP和TCP之间建立桥梁;

"TPKT is an"encapsulation" protocol. It carries the OSI packet in its ownpacket's data payload and then passes the resulting structure to TCP, from thenon, the packet is processed as a TCP/IP packet. The OSI programs passing datato TPKT are unaware that their data will be carried over TCP/IP because TPKTemulates the OSI

protocol Transport Service Access Point (TSAP)."

第6层COTP,按照维基百科的解释,COTP 是 OSI 7层协议定义的位于TCP之上的协议。COTP 以“Packet”为基本单位来传输数据,这样接收方会得到与发送方具有相同边界的数据;

第7层,S7 communication,这一层和用户数据相关,对PLC数据的读取报文在这里完成;

刚看到TPKT和COPT也许会很迷惑,其实在具体的报文中,TPKT的作用是包含用户协议(5~7层)的数据长度(字节数);COTP的作用是定义了数据传输的基本单位(在S7Comm中 PDU

TYPE:DT data);

S7Comm与标准TCP/IP比较:S7Comm是一个7层协议;TCP/IP是四层协议,用户数据在第四层TCP层完成;

计算机与PLC进行通讯,可以连接102端口,这是西门子开放的一个通讯端口;

第七层 S7 communication协议

S7 communication包含三部分:1-Header;2-Parameter;3- Data。


工业网络防护之工控协议深度解析01-西门子S7协议02


S7Comm以太网通讯过程(以1500PLC为例)

计算机与1500PLC进行S7Comm以太网通讯,需经过三个过程:

“握手”:当PC与PLC通过Socket建立链接时,会进行“三次握手”,这是标准的TCP连接方式;这个过程会有Socket自动完成;

通讯请求:在“握手”之后,并不能马上进行数据交换,还需要"通讯请求"过程。这个过程包含两次报文交换。PC 发送COTP报文给PLC;在COTP报文中包含“连接请求”和“destinationTSAP” - 明确CPU的机架号和槽号;PLC反馈COTP报文,包含“连接确认”;这样PLC就清楚了需要和那个CPU来进行数据通讯;

发送数据:PC 发送S7Comm报文给PLC;在S7 communicaton报文中包含“通讯请求”;PLC反馈S7Comm报文。

交换数据:数据读写就在这个过程内完成。我们可以组织报文来实现我们需要的功能。这个过程内的报文是S7Comm格式;具体实现时,需要对S7Comm中的第5、6、7层进行编程。

*需要注意的是,如果不进行“第2步-通讯请求”而直接发送交换数据报文,则PLC会将连接断开。


原文链接:https://blog.csdn.net/powersun1981/article/details/54289776


分享到:


相關文章: