目录
1、下面是EtherNet/IP首部中封装的CIP帧字段:
- Command
两字节整数,对应一个CIP命令。CPI标准要求,设备必须能接收无法识别的命令字段,并处理这种异常。
- Length
两字节整数,代表数据包中数据部分的长度。对于没有数据部分的请求报文,该字段为0。
- Session Handle
会话句柄(session handle)由目标设备生成,并返回给会话的发起者。该句柄将用于后续与目标设备的通信。
- Status
Status字段存储了目标设备执行命令返回的状态码。状态码“0”代表命令执行成功。所有的请求报文中,状态码被置为“0”。其它的状态码还包括:
- 0x0001无效或不受支持的命令
- 0x0002目标设备资源不足,无法处理命令
- 0x0003数据格式不正确或数据不正确
- 0x0065接收到无效的数据长度
- Sender Context
命令的发送者生成这六字节值,接收方将原封不动的返回该值。
- Options
该值必须始终为0,如果不为零,数据包将被丢弃。
- Command-specific data
该字段根据接收/发送的命令进行修改。
如果请求发送方是工程师站,大多数会话中执行的第一条命令是“List Identity”命令。如下所示的数据包,命令字段是0x63,代表“List Identity”命令,上下文是“0x00006a0ebe64”。这个命令与Modbus功能码43非常相似,可以查询设备信息,如供应商、产品、序列号、产品代码、设备类型和版本号等。
2、示例
EtherNet/IP通常通过TCP/UDP端口44818运行。此外,EtherNet/IP还有另一个端口 TCP/UDP端口2222。使用这个端口的原因是 EtherNet/IP实现了隐式和显示两种消息传递方式。显式消息被称为客户端/服务器消息,而隐式消息通常被称为I/O消息。
TCP建立连接:
报文为四层
建立EIP会话:
多了一层封装层,注册EIP
CIP未连接信息的收发:
多了一层CIP协议层和CIP连接管理层 ,send RR data即Request/Response类型数据
使用连接管理器对象的ForwardOpen Request服务建立连接。ForwardOpen Request包含所有连接参数,包括传输类、生产触发器、定时信息、电子密钥和连接ID。当发出ForwardClose Request服务请求或任一连接端点超时时,将进行连接清理。
上面使用的都是TCP协议的44818端口
下面使用UDP协议的2222端口进行IO数据的收发
CIP IO数据的收发:
O->T:实例号为0x97=151,0x96=150,0x64=100(LED)
T->O:LED
O->T:实例号为0x97=151,0xee=238,0x65=101(SW)