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) 为应用层协议 ...
随机推荐
- 树莓派跑yolo
https://blog.csdn.net/u011304078/article/details/85772764 https://blog.csdn.net/weixin_41665225/arti ...
- 记一次排错经历,requests和fake_useragent
在部署tornado项目上线时, 首次重启服务后第一次请求必然会报错, 后续的就能正常访问, 长报错urllib.error.URLError,如图排查多次依然发现不了问题 报的最多的依然是上图中的错 ...
- CF1175E Minimal Segment Cover
题目链接 题意 给出n条线段.m次询问,每次询问给出一个区间\([l,r]\)问最少需要多少条线段才能覆盖区间\([l,r]\). 所有坐标\(\le 5\times 10^5\).\(n,m\le ...
- 洛谷 P4053 [JSOI2007]建筑抢修
传送门 思路 首先题意比较容易明白: n个建筑需要修复,只能同时修一个建筑,每个建筑修复需要t1时间,且必须在t2时间前修完,否则此建筑报废 问最多能修好多少个建筑 如果一个建筑在规定时间内没有修好的 ...
- [LeetCode] 623. Add One Row to Tree 二叉树中增加一行
Given the root of a binary tree, then value v and depth d, you need to add a row of nodes with value ...
- [LeetCode] 115. Distinct Subsequences 不同的子序列
Given a string S and a string T, count the number of distinct subsequences of S which equals T. A su ...
- monkey-api-encrypt 1.1.2版本发布啦
时隔10多天,monkey-api-encrypt发布了第二个版本,还是要感谢一些正在使用的朋友们,提出了一些问题. GitHub主页:https://github.com/yinjihuan/mon ...
- Django 数据库同步命令
版本1.8.2 检查数据库配置是否有错 Python manage.py validate/check 创建对应书看的映射语句 Python manage.py makemigrations 同步或者 ...
- 为什么我的resharper控件安装之后没有显示
Resharper和Resharper C++有时候会出现,安装之后不显示,VisualStudio菜单栏内找不到的情况,大多数是因为启动VisualStudio的时候没有激活Resharper. 安 ...
- Go gRPC 调试工具
概述 最近这段时间工作挺忙的,发现已经 3 周没更文了... 感谢你们还在,今天给大家分享一款 gRPC 的调试工具. 进入正题. 当我们在写 HTTP 接口的时候,使用的是 Postman 进行接口 ...