EtherNet/IP CIP协议
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
EtherNet/IP CIP协议的更多相关文章
- 工业以太网EtherNet/IP协议安全分析整理
1. EtherNet/IP : 设备可以用户数据报协议(UDP)的隐式报文传送基于IO的资料 ,用户传输控制协议(TCP)显示报文上传和下参数,设定值,程式 ,用户主站的轮询 从站周期性的更 ...
- 工控安全入门之Ethernet/IP
这一篇依然是协议层面的,协议层面会翻译三篇,下一篇是电力系统中用的比较多的DNP3.这一篇中大部分引用的资料都可以访问到,只有一篇reversemode.com上的writeup(http://rev ...
- 工控安全入门之 Ethernet/IP
工控安全入门之 Ethernet/IP Ethernet/IP 与 Modbus 相比,EtherNet/IP 是一个更现代化的标准协议.由工作组 ControlNet International 与 ...
- EtherNet/IP 协议结构
一.Ethernet/IP 协议 将标准的TCP/IP以太网延伸 到工业实时控制并和通用工业协议(CIP)结合,将很好地帮助用户获得更加开放集成的工业自动化和信息化的整体解决方案.EtherNet/I ...
- c#基于TCP/IP、CIP协议的欧姆龙PLC通信
一.关于CIP协议 CIP通信是Common Industrial Protocl(CIP)的简称,它是一个点到点的面向对象协议,能够实现工业器件(传感器,执行器)之间的连接,和高等级的控制器之间的连 ...
- 标准的TCP/IP工业以太网-EtherNet/IP
标准的TCP/IP工业以太网-EtherNet/IP 徐智穹以太网具有传输速度高.兼容性好.应用广泛等方面的优势,支持几乎所有流行的网络协议,其中 ...
- 各种工业以太网比较(EtherCAT,EtherNet/IP,ProfiNet,Modbus-TCP,Powerlink)
EtherCAT(以太网控制自动化技术)是一个以以太网为基础的开放架构的现场总线系统,EterCAT名称中的CAT为ControlAutomation Technology(控制自动化技术)首字母的缩 ...
- EtherNet/IP 基本信息
/********************************************************************************* * EtherNet/IP 基本信 ...
- 【新阁教育】基于EtherNet/IP实现欧姆龙NX系列PLC通信
1.引言 工业以太网协议 (Ethernet/IP) 是由ODVA所开发并得到了罗克韦尔自动化的强大支持.它使用已用于ControlNet和DeviceNet的控制和信息协议 (CIP) 为应用层协议 ...
随机推荐
- win10经常无法复制粘贴
两种方法尝试一下: 1. 在c:\windows\system32 目录下新建文件夹,命名为clip 2. 因为有道词典会监控并占用你的剪贴板,请尝试关闭有道词典的[取词]和[划词]功能,如果还不行就 ...
- 【转】Java 泛型
转载:https://www.cnblogs.com/lwbqqyumidi/p/3837629.html. 一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public ...
- win7 64位平台编译的程序在XP 32位平台无法运行的解决方法
win7 64位平台编译的程序在XP 32位平台无法运行的解决方法 vs2010的开发环境,制作了一个DLL库.但DLL在XP 32位平台一直无法使用.解决方法如下: 右键项目,属性->配置属性 ...
- windows下sed回车换行符处理
windows下sed回车换行符处理如果用sed for windows对整个文件进行了编辑,编辑之后一般需要处理回车换行符:rem windows的回车换行符是\r\n,linux的是\n,所以要替 ...
- [LeetCode] 545. Boundary of Binary Tree 二叉树的边界
Given a binary tree, return the values of its boundary in anti-clockwise direction starting from roo ...
- WC 2008 观光计划(斯坦纳树)
题意 https://www.lydsy.com/JudgeOnline/problem.php?id=2595 思路 是一道比较裸的斯坦纳树呢- 题意等价于选出包含一些点的最小生成树,这就是斯坦纳树 ...
- Spring 源码分析之AbstractApplicationContext源码分析
首先我觉得分析ApplicationContext必须从它的实现类开始进行分析,AbstractApplicationContext我觉得是一个不错的选择,那我们就从这里开始逐一分析吧,首先我自己手画 ...
- logstash之mongodb-log
1.logstash6.5.3 配置收集mongodb的日志: 首先在mongodb服务器上部署filebeat收集日志并上传到logstash进行处理,然后上传到ES. filebeat-conf: ...
- 源码分析-----ThreadPoolExecutor
创建一个线程池: import time from concurrent.futures import ProcessPoolExecutor, as_completed def get_html(n ...
- C# 递增操作符 ++ --
记混了好几次,记录一下 递增操作符出现在操作数之前:先递增后赋值 ; int result; result =++count; Console.WriteLine($"count:{coun ...