Ethernet/IP学习

一:EtherNet/IP

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

1. EtherNet/IP 通信类型

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

CIP 消息类型 CIP 通讯关系 传输协议 通讯类型 适用情形 举例
显性 已连接或未连接 TCP/IP 请求/响应 交换 低时间相关性数据信息 读/写,配置字段
隐形 已连接 UDP/IP I/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协议簇包含了许多常用对象,大致可分为三类:一般用途,特定应用,特定网络。
对于一般用途如下表:

名称 代码 名称 代码
Assembly 0x04 Message Router 0x02
Acknowledge Handler 0x2B Originator Connection List 0x45
Connection 0x05) Parameter 0x0F
Connection Configuration 0xF3 Parameter Group 0x10
Connection Manager 0x06 Port 0xF4
File 0x37 Register 0x07
Identity 0x01 Selection 0x2E

对于特定应用:

名称 代码 名称 代码
AC/DC Drive 0x2A Analog Group 0x22
Analog Input Group 0x20 Analog Input Point 0x0A
Analog Output Group 0x21 Analog Output Point 0x0B
Base Energy 0x4E Block Sequencer 0x26
Command Block 0x27 Control Supervisor 0x29
Discrete Group 0x1F Discrete Input Group 0x1D
Discrete Output Group 0x1E Discrete Input Point 0x08
Discrete Output Point 0x09 Electrical Energy 0x4F
Event Log 0x41 Group 0x12
Motion Device Axis 0x42 Motor Data 0x28
Non-Electrical Energy 0x50 Overload 0x2C
Position Controller 0x25 Position Controller Supervisor 0x24
Position Sensor 0x23 Power Curtailment Object 0x5C
Power Management Object 0x53 Presence Sensing 0x0E
S-Analog Actuator 0x32 S-Analog Sensor 0x31
S-Device Supervisor 0x30 S-Gas Calibration 0x34
S-Partial Pressure 0x38 S-Sensor Calibration 0x40
S-Single Stage Controller 0x33 Safety Analog Input Group 0x4A
Safety Analog Input Point 0x49 Safety Dual Channel Feedback Object 0x59
Safety Feedback Object 0x5A Safety Discrete Input Group 0x3E
Safety Discrete Input Point 0x3D Safety Discrete Output Group 0x3C
Safety Discrete Output Point 0x3B Safety Dual Channel Analog Input 0x4B
Safety Dual Channel Output 0x3F Safety Limit Functions Object 0x5B
Safety Stop Functions Object 0x5A Safety Supervisor 0x39
Safety Validator 0x3A Softstart 0x2D
Target Connection List 0x4D Time Sync 0x43
Trip Point 0x35

对于特定网络:

名称 代码 名称 代码
Base Switch 0x51 CompoNet Link 0xF7
CompoNet Repeater 0xF8 ControlNet 0xF0
ControlNet Keeper 0xF1 ControlNet Scheduling 0xF2
Device Level Ring DLR 0x47 DeviceNet
Ethernet Link 0xF6 Modbus 0x44
Modbus Serial Link 0x46 Parallel Redundancy Protocol 0x56
Power Management 0x53 PRP Nodes Table 0x57
SERCOS III Link 0x4C SNMP 0x52
QoS 0x48 RSTP Bridge 0x54
RSTP Port 0x55 TCP/IP Interface 0xF5

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学习_第1张图片

下图为EtherNet/IP的头部格式,其中包括指令,长度信息,会话句柄,状态,等
Ethernet/IP学习_第2张图片

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用于申明该项值的长度。
Ethernet/IP学习_第3张图片

4. 封装数据的使用

4.1 显性信息传输 (explicit Messaging)

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

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

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

I/O 信息基于UDP/IP 发送,强调高实时性,该传输方式不需要封装头部,其格式如下所示。
Ethernet/IP学习_第6张图片
下图时WireShark 实例,请对照上图。
Ethernet/IP学习_第7张图片
其中CIP Sequence Count,在一般情况不影响设备的交流,该项是用于CIP Safety 使用的。

你可能感兴趣的:(通讯协议,tcp/ip,学习,网络)