【新閣教育】基於EtherNet/IP實現歐姆龍NX系列PLC通訊
1、引言
工業乙太網協議 (Ethernet/IP) 是由ODVA所開發並得到了羅克韋爾自動化的強大支援。它使用已用於ControlNet和DeviceNet的控制和資訊協議 (CIP) 為應用層協議。+vx:xiketang777領取資料
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 一起使用。【公眾號dotNet工控上位機:thinger_swj】
2、 EtherNet/IP_報文格式
- 註冊請求幀:EtherNet/IP與Fins類似,在正式通訊前需要進行註冊請求,獲取到會話句柄。
註冊請求幀報文格式如下:
因此,一個完整的註冊請求幀發送實例:
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】
- 按照這種方式添加好變數後,保存並運行,然後測試結果是否正確。
- 測試完成讀取後,通過修改查看,是否可以修改變數。