c#基于TCP/IP、CIP协议的欧姆龙PLC通信

一、关于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

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值