一、关于CIP协议
CIP通信是Common Industrial Protocl(CIP)的简称,它是一个点到点的面向对象协议,能够实现工业器件(传感器,执行器)之间的连接,和高等级的控制器之间的连接。目前,有3种网络DeviceNet,ControlNet,EtherNet/IP使用CIP通信协议作为其上层网络协议,由ODVA组织统一管理,以确保其一致性和精确性。
二、EtherNet/IP通信
EtherNet/IP(Ethernet/Industrial Protocol),是一个工业级的通信网络,用于工业器件间高速的信息交换,这些器件包括简单的IO器件(传感器),还有复杂的控制器(机器人,PLC,焊机,过程控制器)。EtherNet/IP使用CIP(Common Industrial Protocl),其使用EtherNet和TCP/IP技术传送CIP通信包,CIP作为开放的应用层,位于EtherNet和TCP/IP协议之上。
三、CIP通信报文
1.注册会话ID
private byte[] Registercmd = new byte[28]
{
//--------------------------------------------------------Header 24byte-------------------------------------
0x6F,0x00,//命令 2byte
0x04,0x00,//Header后面数据的长度 2byte
0x00,0x00,0x00,0x00,//会话句柄 4byte
0x00,0x00,0x00,0x00,//状态默认0 4byte
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//发送方描述默认0 8byte
0x00,0x00,0x00,0x00,//选项默认0 4byte
//-------------------------------------------------------CommandSpecificData 指令指定数据 4byte
0x01,0x00,//协议版本 2byte
0x00,0x00,//选项标记 2byte
};
2.提取会话ID-注册请求的应答报文
private byte[] RefRegistercmd = new byte[28]
{
//--------------------------------------------------------Header 24byte-------------------------------------
0x6F,0x00,//命令 2byte
0x04,0x00,//CommandSpecificData的长度 2byte
0x6B,0x01,0x01,0x00,//会话句柄 4byte 由PLC生成
0x00,0x00,0x00,0x00,//状态默认0 4byte
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//发送方描述默认0 8byte
0x00,0x00,0x00,0x00,//选项默认0 4byte
//-------------------------------------------------------CommandSpecificData 指令指定数据 4byte
0x01,0x00,//协议版本 2byte
0x00,0x00,//选项标记 2byte
};
public byte[] SessionHandle=new byte[4]{0x6B,0x01,0x01,0x00};//从应答报文提取的会话ID
后续读写PLC的报文中,需要包含PLC返回的会话ID
3.读数据服务请求报文
报文由三部分组成 Header 24个字节 、CommandSpecificData 16个字节、以及CIP消息(由读取的标签生成)
实例,读取单个标签名为 TAG1的报文总长度为64个字节
private byte[] Header = new byte[24]
{
0x6F,0x00,//命令 2byte
0x28,0x00,//长度 2byte(总长度-Header的长度)=40
0x6B,0x01,0x01,0x00,//会话句柄 4byte
0x00,0x00,0x00,0x00,//状态默认0 4byte
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//发送方描述默认0 8byte
0x00,0x00,0x00,0x00,//选项默认0 4byte
};
private byte[] CommandSpecificData = new byte[16]
{
0x00,0x00,0x00,0x00,//接口句柄 CIP默认为0x00000000 4byte
0x01,0x00,//超时默认0x0001 4byte
0x02,0x00,//项数默认0x0002 4byte
0x00,0x00,//空地址项默认0x000