西门子S7以太网通讯协议
S7以太網(wǎng)協(xié)議屬于TCP/IP協(xié)議族的一種,下圖為S7以太網(wǎng)協(xié)議在ISO-OSI參考模型中的位置。
?
通過WireShark抓包,可以看出S7以太網(wǎng)協(xié)議的模型:
?
?
ISO-OSI參考模型、TCP/IP模型及S7以太網(wǎng)協(xié)議模型對(duì)比
| ISO-OSI參考模型 | TCP/IP模型 | S7以太網(wǎng)協(xié)議模型 | |
| 7-應(yīng)用層 | 4-應(yīng)用層 | 6-S7 ?Communication | |
| 6-表示層 | 5- ?COTP(TSAP) | RFC1006 | |
| 5-會(huì)話層 | 4-TPKT | ||
| 4-傳輸層 | 3-傳輸層 | 3-TCP(102端口) | |
| 3-網(wǎng)絡(luò)層 | 2-網(wǎng)絡(luò)互連層 | 2-IP | |
| 2-數(shù)據(jù)鏈路層 | 1-網(wǎng)絡(luò)接口層 | 1-工業(yè)以太網(wǎng) | |
| 1-物理層 | |||
第5層(相對(duì)于ISO-OSI參考模型):TPKT(ISO Transport Service ontop of the TCP/ ISO傳輸服務(wù)通過TCP),介于TCP和COTP協(xié)議之間。這是一個(gè)傳輸服務(wù)協(xié)議,主要用來在COTP和TCP之間建立橋梁,包含了上層協(xié)議數(shù)據(jù)包的長(zhǎng)度。
?
第6層(相對(duì)于ISO-OSI參考模型):COTP(Connection OrientedTransport Protocol/面向連接的傳輸協(xié)議),比較TCP與COTP兩種協(xié)議,因?yàn)樗鼈兌际怯糜谕ㄟ^網(wǎng)絡(luò)可靠地傳輸用戶數(shù)據(jù),基于數(shù)據(jù)流的與基于數(shù)據(jù)包的:COTP將數(shù)據(jù)包從一個(gè)用戶傳輸?shù)搅硪粋€(gè)用戶,所以接收者將獲得與發(fā)送者傳輸完全相同的數(shù)據(jù)邊界。TCP將連續(xù)的數(shù)據(jù)流傳輸?shù)浇邮掌?#xff0c;因此TCP上的協(xié)議通常必須自己添加這樣的邊界(如TPKT協(xié)議)。
為了復(fù)用客戶端和服務(wù)端之間的幾個(gè)會(huì)話,COTP使用了TSAP(傳輸服務(wù)訪問點(diǎn)),TSAP為2個(gè)字節(jié),通常使用一個(gè)有意義的字符串。TSAP的第2個(gè)字節(jié)由機(jī)架號(hào)+插槽號(hào)組成,插槽號(hào)在0-4Bit機(jī)架號(hào)在5-7Bit。這些TSAP在連接建立階段被匹配,并且在數(shù)據(jù)傳輸時(shí)由2字節(jié)(目標(biāo)/源)參考代替。
下圖示例為SIMATIC NET OPC與S7-200 SMART PLC 通過S7以太網(wǎng)協(xié)議通訊的COTP TSAP設(shè)置值
通過WireShark抓包,COTP的連接報(bào)文如下:
?
為什么要使用RFC 1006 協(xié)議擴(kuò)展
RFCs(Request?for?Comments) 是一些技術(shù)類文檔,?內(nèi)容包括針對(duì)-例如以太網(wǎng)結(jié)構(gòu),協(xié)議的設(shè)計(jì),email?報(bào)文頭設(shè)計(jì)等等進(jìn)行了詳細(xì)的描述。?RFC 1006?中的“ISO Transport Service on top of theTCP(TPKT)”(ISO傳輸服務(wù)通過TCP)是TCP協(xié)議的一種擴(kuò)展。這意味著除了TCP數(shù)據(jù),在通訊雙方之間還可以提供特殊的傳輸服務(wù)(ISO服務(wù))。
當(dāng)數(shù)據(jù)使用TCP協(xié)議進(jìn)行傳輸時(shí),傳輸工作聚焦在數(shù)據(jù)流上。因此沒有關(guān)于數(shù)據(jù)長(zhǎng)度或者數(shù)據(jù)起始以及終止的信息。這對(duì)于發(fā)送方?jīng)]有問題,因?yàn)樗浪l(fā)送的字節(jié)數(shù)。但對(duì)于接收方來講,它無法知道該信息什么時(shí)候開始,什么時(shí)候結(jié)束,以及下一條信息什么時(shí)候被發(fā)送。
在許多自動(dòng)化應(yīng)用中,必須要關(guān)注工作信息。信息塊通過一個(gè)連接由發(fā)送方發(fā)出,其完整性由接收方進(jìn)行確認(rèn)。為了進(jìn)行這樣的確認(rèn),RFC1006規(guī)定了在數(shù)據(jù)前面必須要加上報(bào)文頭。RFC1006因此提供了這樣一種應(yīng)用,及根據(jù)TCP協(xié)議建立數(shù)據(jù)流,但面向消息進(jìn)行傳輸。
第7層(相對(duì)于ISO-OSI參考模型)S7 Communication應(yīng)用協(xié)議(協(xié)議ID=0x32),包含三部分:1-Header;2-Parameter;3-Data。根據(jù)功能(S7Comm.Parameter.Function?)不同,S7 Communication協(xié)議的結(jié)構(gòu)會(huì)有所不同。例如,請(qǐng)求數(shù)據(jù)報(bào)文只包含前兩部分。
應(yīng)答數(shù)據(jù)報(bào)文為3部分包括數(shù)據(jù)Data 段
S7Communication應(yīng)用協(xié)議中Parameter.Function的取值對(duì)應(yīng)的功能如下表:
下圖為S7以太網(wǎng)通訊客戶端從建立TCP連接到讀取到服務(wù)端數(shù)據(jù)的整個(gè)過程
1.握手
當(dāng)客戶端192.168.1.101與服務(wù)端192.168.1.200通過Socket建立連接時(shí),會(huì)進(jìn)行“三次握手”,這是標(biāo)準(zhǔn)的TCP連接方式,這個(gè)過程會(huì)由Socket自動(dòng)完成;
2.通訊請(qǐng)求
在“握手”之后,并不能馬上進(jìn)行數(shù)據(jù)交換,還需要“通訊請(qǐng)求”過程。
這個(gè)過程包含兩次報(bào)文交換:
-
客戶端發(fā)送COTP報(bào)文給服務(wù)端,在COTP報(bào)文中包含“連接請(qǐng)求”和“Destination TSAP”,以明確CPU的機(jī)架號(hào)和槽號(hào);服務(wù)端應(yīng)答COTP報(bào)文,包含“連接確認(rèn)”;這樣服務(wù)端就清楚了客戶端需要和哪個(gè)CPU來進(jìn)行數(shù)據(jù)通訊;
-
客戶端發(fā)送S7 Communicaton報(bào)文給服務(wù)端,在S7Communicaton報(bào)文中包含“通訊請(qǐng)求”; 服務(wù)端反饋S7 Communicaton報(bào)文。
-
交換數(shù)據(jù)
通訊應(yīng)用就在這個(gè)過程內(nèi)完成,可以組織報(bào)文來實(shí)現(xiàn)需要的功能。這個(gè)過程內(nèi)的報(bào)文是S7 communicaton,具體實(shí)現(xiàn)時(shí),需要對(duì)S7協(xié)議中的第5、6、7層進(jìn)行編程。
注意,如果不進(jìn)行“第2步-通訊請(qǐng)求”而直接發(fā)送交換數(shù)據(jù)報(bào)文,則服務(wù)端會(huì)將連接斷開。
轉(zhuǎn)載于:https://www.cnblogs.com/wllgo/p/11512150.html
總結(jié)
以上是生活随笔為你收集整理的西门子S7以太网通讯协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DK云网关与普通DTU之间的区别
- 下一篇: Bootstrap4默认样式不对胃口?教