1、引言
工業以太網協議 (Ethernet/IP) 是由ODVA所開發並得到了羅克韋爾自動化的強大支持。它使用已用於ControlNet和DeviceNet的控制和信息協議 (CIP) 為應用層協議。
CIP提供了一系列標准的服務,提供“隱式”和“顯示”方式對網絡設備中的數據進行訪問和控制。CIP數據包必須在通過以太網發送前經過封裝,並根據請求服務類型而賦予一個報文頭。這個報文頭指示了發送數據到響應服務的重要性。通過以太網傳輸的CIP數據包具有特殊的以太網報文頭,一個IP頭、一個TCP頭和封裝頭。封裝頭包括了控制命令、格式和狀態信息、同步信息等。這允許CIP數據包通過TCP或UDP傳輸並能夠由接收方解包。相對於DeviceNet或ControlNet,這種封裝的缺點是協議的效率比較低。以太網的報文頭可能比數據本身還要長,從而造成網絡負擔過重。因此,EtherNet/IP更適用於發送大塊的數據 ( 如程序 ) ,而不是DeviceNet和ControlNet更擅長的模擬或數字的I/O數據。
EtherNet/IP指的是"以太網工業協議"(Ethernet Industrial Protocol)。它定義了一個開放的工業標准,將傳統的以太網與工業協議相結合。該標准是由國際控制網絡(CI, ControlNet International)和開放設備網絡供應商協會 (ODVA)在工業以太網協會 (IEA, Industrial Ethernet Association)的協助下聯合開發的,並於2000年3月推出。EtherNet/IP是基於TCP/IP系列協議,因此采用以原有的形式OSI層模型中較低的4層。所有標准的以太網通信模塊,如PC接口卡、電纜、連接器、集線器和開關都能與 EtherNet/IP 一起使用。
2、 EtherNet/IP_報文格式
- 注冊請求幀:EtherNet/IP與Fins類似,在正式通信前需要進行注冊請求,獲取到會話句柄。
注冊請求幀報文格式如下:dotNet工控上位機:thinger_swj
因此,一個完整的注冊請求幀發送實例:
65 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
- 注冊應答幀:顧名思義,注冊應答幀就是注冊請求幀的應答報文,包含了我們需要的會話句柄。
注冊應答幀報文格式如下:
注冊請求幀接收實例:
65 00 04 00 71 01 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
根據應答報文,提取會話句柄為:0x71 0x01 0x0E 0x00
其中狀態相當於錯誤代碼,如下所示:
- 讀取信息報文幀 EtherNet/IP
PLC標簽:TAG1
讀取報文:
封裝頭:6F 00 28 00 70 01 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
命令數據:00 00 00 00 01 00 02 00 00 00 00 00 B2 00 18 00 52 02 20 06 24 01 0A F0 0A 00 4C 03 91 04 54 41
47 31 01 00 01 00 01 00
報文解析:
6F 00 命令碼
28 00 后面數據報文長度
70 01 27 00 會話句柄
00 00 00 00 狀態,默認值0
00 00 00 00 00 00 00 00 發送方描述
00 00 00 00 選項默認
00 00 00 00 接口句柄 00 00 00 00 代表CIP
01 00 超時
02 00 項數
00 00 空地址項
00 00 空地址項長度
B2 00 未連接項 默認
18 00 CIP報文包的長度
52 命令
02 請求路徑長度
20 06 24 01 默認請求路徑
0A F0 0A 00 默認超時
4C 服務標識
03 CIP長度多少字
91 固定
04 PLC標簽長度 多少個字節
01 00 讀取長度
01 00 01 00 槽號
- 返回信息報文幀 EtherNet/IP
返回報文:
封裝頭:6F 00 18 00 71 01 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
命令數據:00 00 00 00 01 00 02 00 00 00 00 00 B2 00 08 00 CC 00 00 00 C1 00 00 00
報文解析:
6F 00 命令
18 00 長度 (總長度 -封裝頭長度 )
71 01 14 00 會話句柄(會話ID)
00 00 00 00 會話狀態
00 00 00 00 00 00 00 00 發送方描述 固定
00 00 00 00 選項 默認
00 00 00 00 接口句柄 ,00000000 指CIP
01 00 超時
02 00 項數 默認2
00 00 連接的地址項
00 00 連接地址項長度
B2 00 未連接數據項
08 00 連接長度
CC 服務標識
00 填充字節
00 00 狀態
C1 00 數據類型 BOOL (0x00C3(195) 為整型,0x00CA(202)為實型, 0x00C1(193)為布爾型,long 型為0x00C4,BYTE為0x00C2 )
00 00 數據值
- 寫入信息報文幀 EtherNet/IP
PLC標簽:TAG1
寫入報文:
封裝頭:6F 00 2C 00 71 01 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
命令數據:00 00 00 00 01 00 02 00 00 00 00 00 B2 00 1C 00 52 02 20 06 24 01 0A F0 0E 00 4D 03 91 04 54
41 47 31 C1 00 01 00 00 00 01 00 01 00
解析報文:
6F 00 命令碼
2C 00 長度(去除header后報文長度 字節為單位)
71 01 14 00 會話句柄
00 00 00 00 會話狀態
00 00 00 00 00 00 00 00 發送方描述 固定
00 00 00 00 選項 默認
00 00 00 00 接口句柄 ( 00 00 00 00 指CIP)
01 00 超時
02 00 項數 默認2
00 00 空地址項 默認
00 00 空地址項長度 默認
B2 00 未連接數據項 默認
1C 00 數據長度 指后面數據長度 (字節)
52 請求服務代碼
02 請求路徑長度
20 06 24 01 請求路徑 默認
0A F0 超時默認 245760ms
OE 00 長度(從服務標識開始 到 寫入的值 結束 )
4D 服務標識
03 長度(91 04 54 41 47 31 )
91 固定
04 標簽長度
54 41 47 31 TAG1(標簽名)
C1 00 數據類型 bool0x00C3(195) 為整型,0x00CA(202)為實型,0x00C1(193)為布爾型,long 型為0x00C4,BYTE為0x00C2
01 00 寫入數量
00 00 寫入的值 false:0 TRUE:任意非0數
01 00 01 00 PLC槽號
返回報文:
封裝頭:6F 00 14 00 71 01 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
命令數據:00 00 00 00 01 00 02 00 00 00 00 00 B2 00 04 00 cd 00 00 00
解析報文:
71 01 14 00 會話句柄
B2 00 未連接數據項 默認
CD 服務標識(寫)固定
00 填充字節
0000 狀態:成功
- 多標簽讀取
參考單標簽的報文幀,讀取TAG1 和TAG2
54 41 47 31 TAG1
54 41 47 32 TAG2
發送報文:
6F 00 3E 00 70 01 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 02 00 00 00 00 00 B2 00 2E 00 52 02 20 06 24 01 0A F0 20 00 0A 02 20 02 24 01 02 00 06 00 10 00 4C 03 91 04 54 41 47 31 01 00 4C 03 91 04 54 41 47 32 01 00 01 00 01 00
返回報文:
6F 00 2A 00 70 01 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 02 00 00 00 00 00 B2 00 1A 00 8A 00 00 00 02 00 06 00 0E 00 CC 00 00 00 C1 00 01 00 CC 00 00 00 C1 00 01 00
- 注銷會話:注銷會話顧名思義就是通信結束時發送,注銷會話是沒有返回值的。
注銷會話報文:
66 00 00 00 71 01 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
報文解析:
66 00 :命令
00 00 :長度
71 01 04 00:要注銷的會話句柄
00 00 00 00 狀態 默認0
00 00 00 00 00 00 00 00:發送內容 默認0
00 00 00 00:選項 默認0
3、 EtherNet/IP通信應用
歐姆龍NX系列PLC不支持Fins通信,也不支持OPCUA,綜合考慮,只能通過Ethernet/IP與其進行通信。這里使用CMSPro進行通信應用,CMSPro集成了EtherNet/IP通信庫,並支持項目應用。
- 新增設備:打開CMSPro軟件,PLC設備>新增PLC設備>歐姆龍CIP,新增一個PLC設備,如下所示:
- 新增通信組:在PLC設備上右擊新增通信組,添加一個通信組,這里的通信組沒有實際具體的意義,只是為了便於管理通信變量。
- 添加變量前,首先注意一下上位機變量類型與PLC變量類型的對應關系,如下所示:
標簽變量添加:標簽變量是指無結構體和數組參與的變量,在通信組中,右擊新增變量,添加一個通信變量,對於標簽變量,直接按照實際PLC中的變量名稱輸入即可,我們添加一個PLC中名為grHWCs_PV變量:
結構體變量添加:對於結構體中的變量添加,可以按照標簽變量的方式,變量地址填寫結構體名稱.變量名,也可以通過先添加一個結構體變量,然后在這個結構體變量下,添加一個變量,一般建議用后者,這樣比較直觀,后續也便於管理。
數組變量添加:對於數組變量添加,可以按照標簽變量的方式,變量地址填寫數組名[索引],也可以通過先添加一個數組變量,然后在這個數組變量下,添加一個變量,一般建議用后者,這樣比較直觀,后續也便於管理。dotNet工控上位機:thinger_swj
按照這種方式添加好變量后,保存並運行,然后測試結果是否正確。
測試完成讀取后,通過修改查看,是否可以修改變量。
引用:https://zhuanlan.zhihu.com/p/269469939