一: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指令包含于封装数据中。

android ethernet外设通信 ethernet/ip通讯_IP

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

android ethernet外设通信 ethernet/ip通讯_tcp/ip_02

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用于申明该项值的长度。

android ethernet外设通信 ethernet/ip通讯_tcp/ip_03

4. 封装数据的使用

4.1 显性信息传输 (explicit Messaging)

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

下图为WireShark 实例

android ethernet外设通信 ethernet/ip通讯_网络_04


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

android ethernet外设通信 ethernet/ip通讯_网络_05

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

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

android ethernet外设通信 ethernet/ip通讯_IP_06


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

android ethernet外设通信 ethernet/ip通讯_网络_07


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