EtherNet/IP CIP協議
1.EtherNet/IP簡述
EtherNet/IP(Ethernet/Indstrial Protocol,以太網/工業協議)是一種基於以太網和TCP/IP技術的工業以太網,其物理層和數據鏈路層使用以太網協議,網絡層和傳輸層使用TCP/IP協議族中的協議,應用層使用CIP協議。EtherNet/IP允許工業設備在對時間要求比較苛刻的環境中交換應用程序信息。這些設備包括簡單的I/O設備,如傳感器/執行器,以及復雜的控制設備,如機器人、可編程邏輯控制器、焊工和過程控制器等。CIP(Common Industry Protocol)是一種端對端的面向對象協議,它規范了工業設備(傳感器、執行器)和高級設備(控制器)之間的連接。CIP作為開放性應用層協議,獨立於物理媒體和數據鏈路層的,目前被EtherNet/IP、CompoNet、ControlNet和DeviceNet四種網絡共用。對於用戶而言,所有CIP工業網絡是無縫集成的“一種”網絡。EtherNet/IP利用標准以太網和TCP/IP技術傳輸CIP通信數據包。應該注意的是EtherNet/IP不是以太網(IEEE 802.3)協議,它只是通過常規TCP/IP連接傳輸。
EtherNet/IP協議網絡遵循開放的OSI模型,協議結構圖如下:
由於以太網數據傳輸速度的大幅度提升和工業網絡交換機技術的快速發展,在網絡高負載通信時EtherNet/IP協議也能夠滿足工業網絡對實時性和確定性的要求。EtherNet/IP協議使用高效的數據傳輸模式——生產者/消費者模式(Producer/Consummer)。端點之間的聯系不是通過具體的源和目的地址關聯起來,而是一個生產者可以對應多個消費者,使數據的傳輸達到了最優化。網絡源節點按照內容將數據進行標識,采用組播的方式同時發送到多個節點,網絡上其它節點按照自己的需要通過標識符來確定要接受的數據。這樣避免了帶寬浪費,節省了網絡資源,同時提高了系統的通信效率。能夠很好的支持系統的控制,組態和數據采集,並且非實時性通信和實時性通信可以在同一子網中實現。
EtherNet/IP數據手冊中給出的詳細網絡模型視圖如下:
EtherNet/IP是為了在以太網中使用CIP協議而進行的封裝。EtherNet/IP的CIP幀封裝了命令、數據點和消息等信息。CIP幀包括CIP設備配置文件層、應用層、表示層和會話層四層。數據包的其余部分是EtherNet/IP幀,CIP幀通過它們在以太網上傳輸。
2. CIP協議報文
CIP協議最重要的特點是可以傳輸多種類型的數據,由於不同數據類型對傳輸的性能要求不一樣,CIP協議報文可分為兩類:顯式報文和隱式報文。當CIP協議嵌入UDP協議用於發送隱式報文(Implicit(I/O)Message)。而CIP協議嵌入TCP協議用於發送顯式報文(Explicit Message)。兩種報文使用的封裝協議不同,傳輸的消息類型也不同。CIP將應用對象之間的通訊關系抽象為連接,並與之相應制定了對象邏輯規范,使CIP協議可以不依賴與某一具體的網路硬件技術,用邏輯來定義連接的關系,在通信之前先建立連接獲取唯一的標識符(Connection ID,CID),如果連接設計到雙向的數據傳輸,就要分配兩個CID。
顯式報文針對組態信息、設備配置、故障診斷等非實時性信息,其優先級較低(包含解讀該報文所需要的信息),通過點對點的報文在兩個對象之間,以交互的方式進行傳輸。報文本身攜帶有關地址、數據類型和功能描述等相關內容,接受設備根據內容做出相應的處理,采用源/目的地址傳送方式。在通信之前通過TCP協議獲得標識符CID,之后進行數據報文傳輸。使用通信端口0XAF12f 。CIP顯示報文連接如下圖:
隱式報文用於節點之間傳輸實時I/O數據、實時互鎖,優先級較高(隱式報文中不包含傳送地址、數據類型標識和功能描述內容),全部作為有效數據,傳輸效率高,在報文頭部有數據標識符,消費者根據標識符選擇自己需要的內容,通過UDP協議將實時I/O消息傳送到總線上。CIP隱式報文連接如下圖:
CIP數據幀格式如下:
3. EtherNet/IP協議實現
基於開源軟件OpENer實現了EtherNet/IP協議。OpENer是一個為I/O設備開發的EtherNet/IP協議棧,支持多路I/O和顯示連接,包含objects和services,以兼容ODVA規范中的EtherNet/IP設備。
OpENer地址:https://github.com/EIPStackGroup/OpENer.git。
訪問AB PLC的CIP實現可參考:libplctag。
參考:
2. 通用工業協議(CIP) 百度文庫
4. 通用工業協議(CIP)形式化的安全分析(前期概念的梳理)
6. Ethernet/IP Industrial Protocol (C# code)
7. libplctag github
8. node-ethernet-ip 訪問AB PLC文檔
9. cpppo github
10. OpENer github
11. Volume 1: CIP Common Specification
12. Volume 2: EtherNet/IP Adaptation of CIP
13. EtherNet/IP: Industrial Protocol White Paper
14. The Common Industrial Protocol and the Family of CIP Networks