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

参考:

1. Ethernet/IP协议简介

2. 通用工业协议(CIP)  百度文库

3. 工控安全入门之Ethernet/IP

4. 通用工业协议(CIP)形式化的安全分析(前期概念的梳理)

5. 工业以太网EtherNet/IP协议安全分析

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

15.         How to communicate to an Allen Bradley Plc with C# and LibPlcTag Ethernet/IP library – Mesta Automation

16.         cip及cip - 图文 - 百度文库

17.         AB 多个PLC的TAG互通设定 - 百度文库

18.         AB - PLC通讯 - 图文 - 百度文库

EtherNet/IP CIP协议的更多相关文章

  1. 工业以太网EtherNet/IP协议安全分析整理

    1.     EtherNet/IP : 设备可以用户数据报协议(UDP)的隐式报文传送基于IO的资料 ,用户传输控制协议(TCP)显示报文上传和下参数,设定值,程式 ,用户主站的轮询 从站周期性的更 ...

  2. 工控安全入门之Ethernet/IP

    这一篇依然是协议层面的,协议层面会翻译三篇,下一篇是电力系统中用的比较多的DNP3.这一篇中大部分引用的资料都可以访问到,只有一篇reversemode.com上的writeup(http://rev ...

  3. 工控安全入门之 Ethernet/IP

    工控安全入门之 Ethernet/IP Ethernet/IP 与 Modbus 相比,EtherNet/IP 是一个更现代化的标准协议.由工作组 ControlNet International 与 ...

  4. EtherNet/IP 协议结构

    一.Ethernet/IP 协议 将标准的TCP/IP以太网延伸 到工业实时控制并和通用工业协议(CIP)结合,将很好地帮助用户获得更加开放集成的工业自动化和信息化的整体解决方案.EtherNet/I ...

  5. c#基于TCP/IP、CIP协议的欧姆龙PLC通信

    一.关于CIP协议 CIP通信是Common Industrial Protocl(CIP)的简称,它是一个点到点的面向对象协议,能够实现工业器件(传感器,执行器)之间的连接,和高等级的控制器之间的连 ...

  6. 标准的TCP/IP工业以太网-EtherNet/IP

    标准的TCP/IP工业以太网-EtherNet/IP                            徐智穹以太网具有传输速度高.兼容性好.应用广泛等方面的优势,支持几乎所有流行的网络协议,其中 ...

  7. 各种工业以太网比较(EtherCAT,EtherNet/IP,ProfiNet,Modbus-TCP,Powerlink)

    EtherCAT(以太网控制自动化技术)是一个以以太网为基础的开放架构的现场总线系统,EterCAT名称中的CAT为ControlAutomation Technology(控制自动化技术)首字母的缩 ...

  8. EtherNet/IP 基本信息

    /********************************************************************************* * EtherNet/IP 基本信 ...

  9. 【新阁教育】基于EtherNet/IP实现欧姆龙NX系列PLC通信

    1.引言 工业以太网协议 (Ethernet/IP) 是由ODVA所开发并得到了罗克韦尔自动化的强大支持.它使用已用于ControlNet和DeviceNet的控制和信息协议 (CIP) 为应用层协议 ...

随机推荐

  1. 使用element-ui的table组件时,渲染为html格式

    背景 今天在做vue的项目时,使用到 element-ui 的 table 组件,使用富文本编辑器进行新增操作后,发现 html格式 并没有被识别 原因 在 element-ui 中,table组件默 ...

  2. [LeetCode] 527. Word Abbreviation 单词缩写

    Given an array of n distinct non-empty strings, you need to generate minimal possible abbreviations ...

  3. Kubernetes 学习(十)Kubernetes 容器持久化存储

    0. 前言 最近在学习张磊老师的 深入剖析Kubernetes 系列课程,最近学到了 Kubernetes 容器持久化存储部分 现对这一部分的相关学习和体会做一下整理,内容参考 深入剖析Kuberne ...

  4. Python连载28-logging设置&logger解析

    一.logging模块讲解 1.函数:logging.basicConfig() 参数讲解: (1)level代表高于或者等于这个值时,那么我们才会记录这条日志 (2)filename代表日志会写在这 ...

  5. PHP stdclass转array的方法

    PHP stdclass转array的方法 <pre><?php$a = new stdClass();$a->id = '11 ';$a->username = 'me ...

  6. Deep Learning专栏--强化学习之从 Policy Gradient 到 A3C(3)

    在之前的强化学习文章里,我们讲到了经典的MDP模型来描述强化学习,其解法包括value iteration和policy iteration,这类经典解法基于已知的转移概率矩阵P,而在实际应用中,我们 ...

  7. 一个简单 System.Threading.Tasks.Dataflow.BufferBlock 示例

    直接贴代码了: using System; using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; namespace ...

  8. 浅析libuv源码-node事件轮询解析(1)

    好久没写东西了,过了一段咸鱼生活,无意中想起了脉脉上面一句话: 始终保持自己的竞争力.所以,继续开写! 一般的JavaScript源码看的已经没啥意思了,我也不会写什么xx入门新手教程,最终决定还是啃 ...

  9. 【翻译】Dockerfile参考

    Dockerfile参考 来自docker官方网址:https://docs.docker.com/engine/reference/builder/ docker能够从Dockerfile中读取指令 ...

  10. 跟随腾讯WeTest一起来2019Unreal Open Day!

      WeTest 导读 Unreal Open Day 是由 Epic Games 中国一年一度倾力打造的面向虚幻引擎开发者的技术分享活动,是引擎行业规格最高.规模最大.阵容最强的年度盛会之一. 自从 ...