Ethernet/IP学习

Posted 城子特讯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ethernet/IP学习相关的知识,希望对你有一定的参考价值。

一:EtherNet/IP

EtherNet/IP 是基于标准以太网协议(IEEE 802.3)的技术,支持 TCP 与 UDP 传输协议,支持数种网络拓扑连接方式。

1. EtherNet/IP 通信类型

EtherNet/IP 定义了两种类型的通讯方式,显性(explicit)与隐形(implicit)。

CIP 消息类型CIP 通讯关系传输协议通讯类型适用情形举例
显性已连接或未连接TCP/IP请求/响应 交换低时间相关性数据信息读/写,配置字段
隐形已连接UDP/IPI/O 数据交换实时 I/O 数据实时控制数据

显性通信: 通过TCP传输数据,适合用于传递高准确性,低及时性的数据,例如配置设备信息,上传或下载程序。表格中CIP通讯关系中的 已连接与未连接 是CIP 协议的一个服务,完成该服务后,连接的双方各持一串号码,用该号码来完成后续的信息交流。
隐形通信: 通过UDP传输数据,适合用来传输高实时性的数据,例如马达控制,传感器数据。该通信方式需要提前建立CIP连接(详见后续)。

CIP 连接需要通过 Connection Manager(CM) 对象的ForwardOpen 服务来完成。客户端作为请求的发起方,请求中包含传输类,时间信息,电子密钥以及连接ID。当接收到ForwardClose请求或响应超时,清空连接信息。
对于隐形通信,其数据可以广播或发送给某特定地址。数据的发送必须包含对象的IP(单一IP或广播地址)以及 CIP 连接 ID。

二:CIP

ODVA 提供了七卷关于CIP网络库的指南,需要成为会员才能获取。
卷一:描述了CIP的通用对象库,设备信息库。
卷二:描述CIP与EtherNet/IP如何适配。
卷三:描述CIP与DeviceNet如何适配。
卷四:描述CIP与ControlNet如何适配。
卷五:描述CIP安全协议, CIP Safety Protocol。
卷六:描述CIP与CompoNet如何适配。
卷七:描述如何将 Modbus 设备接入 CIP 网络。

其总体格式如下:

CIP包含命令,具体执行对象信息
EtherNet/IP包含通信对象,连接信息
TCP or UDP通信端口信息
IP双方IP地址信息
Ethernet双方物理地址信息

1. CIP 对象模型

每个CIP节点(node)都是一组对象(object)的集合。每个对象都代表了设备的某个特定组件,所有未被描述的对象,都无法通过CIP访问(没有定义当然没法访问)。CIP对象由 类(class),实例(instance),属性(attribute)构成。每个类可以有多个实例,每个实例可以有多个属性。(举例:一个类叫做 男人。这个 男人 类可以有实例 王二狗,李铁柱。王二狗 可以包含属性年龄,身高,体重。在读取或写入的数据的时候,协议中就要申明要操作的是哪个类的哪个实例的哪个属性。)
类(class)是一组代表相同系统组件的对象。实例(instance)是该类中的某个特定对象。每个实例可以有自己特有的属性。

CIP 网络中的每个节点都有节点地址,在EtherNet/IP 网络中,该地址即为设备的IP地址。
CIP中每个类,实例,属性都有其对应的ID (Class ID, Instance ID, Attribute ID)。
CIP中使用服务代码来明确操作指令。

类ID分为两个部分,公共对象(范围:0x0000–0x0063, 0x00F0–0x02FF),厂家自定义对象(范围:0x0064–0x00C7, 0X0300-0X04FF)。其它范围为预留部分。
实例ID也分为两个部分,公共实例(范围:0x0001–0x0063,0x00C8-0x02FF),厂家自定义实例(范围:0x0064-0xxC7,0x0300-0x04FF)。其它范围为预留部分。
属性ID,公共属性(范围:0x0000–0x0063,0x0100–0x02FF,0x0500–0x08FF),厂家自定义属性(范围:0x0064–0x00C7,0x0300–0x04FF,0x000–0x0CFF)。

2. CIP 服务

CIP 服务代码用来明确请求的操作指令,上述提到的 Forward Open就是一个服务,其它包括常规的读/写服务,创建实例服务。CIP服务代码同样分为公共服务以及厂家自定义服务。

3. CIP 对象库

CIP协议簇包含了许多常用对象,大致可分为三类:一般用途,特定应用,特定网络。
对于一般用途如下表:

名称代码名称代码
Assembly0x04Message Router0x02
Acknowledge Handler0x2BOriginator Connection List0x45
Connection0x05)Parameter0x0F
Connection Configuration0xF3Parameter Group0x10
Connection Manager0x06Port0xF4
File0x37Register0x07
Identity0x01Selection0x2E

对于特定应用:

名称代码名称代码
AC/DC Drive0x2AAnalog Group0x22
Analog Input Group0x20Analog Input Point0x0A
Analog Output Group0x21Analog Output Point0x0B
Base Energy0x4EBlock Sequencer0x26
Command Block0x27Control Supervisor0x29
Discrete Group0x1FDiscrete Input Group0x1D
Discrete Output Group0x1EDiscrete Input Point0x08
Discrete Output Point0x09Electrical Energy0x4F
Event Log0x41Group0x12
Motion Device Axis0x42Motor Data0x28
Non-Electrical Energy0x50Overload0x2C
Position Controller0x25Position Controller Supervisor0x24
Position Sensor0x23Power Curtailment Object0x5C
Power Management Object0x53Presence Sensing0x0E
S-Analog Actuator0x32S-Analog Sensor0x31
S-Device Supervisor0x30S-Gas Calibration0x34
S-Partial Pressure0x38S-Sensor Calibration0x40
S-Single Stage Controller0x33Safety Analog Input Group0x4A
Safety Analog Input Point0x49Safety Dual Channel Feedback Object0x59
Safety Feedback Object0x5ASafety Discrete Input Group0x3E
Safety Discrete Input Point0x3DSafety Discrete Output Group0x3C
Safety Discrete Output Point0x3BSafety Dual Channel Analog Input0x4B
Safety Dual Channel Output0x3FSafety Limit Functions Object0x5B
Safety Stop Functions Object0x5ASafety Supervisor0x39
Safety Validator0x3ASoftstart0x2D
Target Connection List0x4DTime Sync0x43
Trip Point0x35

对于特定网络:

名称代码名称代码
Base Switch0x51CompoNet Link0xF7
CompoNet Repeater0xF8ControlNet0xF0
ControlNet Keeper0xF1ControlNet Scheduling0xF2
Device Level RingDLR0x47DeviceNet
Ethernet Link0xF6Modbus0x44
Modbus Serial Link0x46Parallel Redundancy Protocol0x56
Power Management0x53PRP Nodes Table0x57
SERCOS III Link0x4CSNMP0x52
QoS0x48RSTP Bridge0x54
RSTP Port0x55TCP/IP Interface0xF5

3.1 身份对象 (Class ID: 0X01)

该对象包含了设备的基础身份信息,其主要属性包括: 产商ID, 设备类型,产品码,修订版本,当前状态,序列码,产品名。可选或条件属性包括:状态,配置一致性,活动间隔,当前语言,支持语言列表,国际产品名,信号量,指定名称,指定描述,地理位置,Modbus身份信息,保护模式。

3.2 参数对象 (Class ID: 0x0F)

该对象包含两类:完整对象以及缩写版本。缩写版本主要用于仅有有限内存的DeviceNet以及CompoNet设备。
该对象的设计目的是提供一种不需要工具即可允许访问其它诸多对象的方法。
该对象的属性包含当前设备存在的实例总数,类描述。

3.3 集成对象 (Class ID: 0X04)

该对象提供了将来自不同类的不同实列的属性映射进集成对象的单一属性的选项。这样可以优化I/O消息交换的效率。(减少请求以及信息传递)

三、CIP 与 EtherNet/IP

1. EtherNet/IP 格式

下图为EtherNet/IP的一般结构,EtherNet/IP 为 传输层中的内容。EtherNet/IP 可分为两个部分:封装头部,以及封装数据。CIP指令包含于封装数据中。

下图为EtherNet/IP的头部格式,其中包括指令,长度信息,会话句柄,状态,等

2. EtherNet/IP 主要指令

设备发现 (ListIdentity Command),该指令通过UDP 广播发送给所有网络中的设备,接收到消息并且支持EtherNet/IP的设备会返回自身的身份信息。

注册会话 (RegisterSession/UnRegisterSession Commands),该指令用于注册或注销会话。会话注册之后,设备才能够进行数据交换,两台设备之间同时存在一组会话。发起请求后,服务器会返回一个Session Handle,后续交流需要使用该Session Handle 的值方可交流。

SendRRData/SendUnitData Commands,SendRRData 用于发送未建立CIP连接的显性数据,SendUnitData用于发送连接了的显性数据。发送RRdata时需要使用Sender Context,发送UnitData时则不需要。

3. EtherNet/IP 封装数据一般格式

一般都是两个Item,一个地址项,一个数据项,随后是具体CIP命令。每个项的前2bytes用于申明该项的类型,后2bytes用于申明该项值的长度。

4. 封装数据的使用

4.1 显性信息传输 (explicit Messaging)

显性传输分为 已连接与未连接传输。其区别在于,建立了连接之后,设备会保留管理连接所需要的资源,可以提高设备响应效率。隐藏未连接的显性传输通常仅在应用程序要求不规则且不频繁的情况下使用。

下图为WireShark 实例

在下图中,CIP 协议由服务请求,请求对象类型,对象实例构成,最后是请求的数据,这里Wireshark自动识别出了数据格式符合CIP connection manager的格式。在其它环境下,数据值可能是厂家自行设定的,Wireshark不一定能识别出来,就会显示一串十六进制值。

4.2 隐性信息传输 (implicit / I/O Messaging)

I/O 信息基于UDP/IP 发送,强调高实时性,该传输方式不需要封装头部,其格式如下所示。

下图时WireShark 实例,请对照上图。

其中CIP Sequence Count,在一般情况不影响设备的交流,该项是用于CIP Safety 使用的。

以上是关于Ethernet/IP学习的主要内容,如果未能解决你的问题,请参考以下文章

EtherNet/IP 协议应用层使用CIP协议&CIP协议中使用的TLS和DTLS(Network Infrastructure for EtherNet/IPTM: Introductio

工业现场总线协议-EtherNet/IP协议与实现

如何实现用Ethernet/IP在PC,PLC和robot之间传输数据

Django学习路19_is_delete属性,重写类方法,显性隐性属性

Django学习路19_is_delete属性,重写类方法,显性隐性属性

艾斯纳提出的课程类型