工業網絡防護之工控協議深度解析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


分享到:


相關文章: