c#基于TCPIP、CIP协议的欧姆龙PLC通信

c#基于TCPIP、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
phcy
  0x01,0x00,//超时默认0x0001 4byte
  0x02,0x00,//项数默认0x0002 4byte
  0x00,0x00,//空地址项默认0x0000 2byte
  0x00,0x00,//长度默认0x0000 2byte
  0xb2,0x00,//未连接数据项默认为 0x00b2
  0x18,0x00,//后⾯数据包的长度 24个字节(总长度-Header的长度-CommandSpecificData的长度)
};
private byte[] CipMessage = new byte[24]
{
  0x52,0x02  //服务默认0x52  请求路径⼤⼩默认2
  0x22,06,0x24,0x01,//请求路径默认0x01240622 4byte
  0x0A,0xF0,//超时默认0xF00A 4bytecip数据
  0x0A,0x00,//Cip指令长度服务标识到服务命令指定数据的长度
  0x4C,//服务标识固定为0x4C 1byte
  0x03,// 节点长度 2byte  规律为 (标签名的长度+1/2)+1
  0x91,//扩展符号默认为 0x91
  0x04,//标签名的长度
  0x54,0x41,0x47,0x31,//标签名:TAG1转换成ASCII字节当标签名的长度为奇数时,需要在末尾补0  ⽐如TAG转换成ASCII为0x54,0x41,0x47,
对苯乙烯磺酸钠需要在末尾补0 变成 0x54,0x41,0x47,0
  0x01,0x00,//服务命令指定数据 默认为0x0001 
 0x01,0x00,0x01,0x00//最后⼀位是PLC的槽号
};
PLC回复报⽂:
6F0018006B01010000000000000000000000000000000000000000000100020000000000B200 0800 CC 00 0000C1000000 
CC-服务标识00-填充字节0000-状态 0为正常 0800:CC-0000的长度C100-数据类型:Bool0000为数据false
实例,读取多个标签名为 TAG、TAG1的报⽂总长度为86个字节
6F003E006B01010000000000000000000000000000000000000000000100020000000000B2002E005202200624010AF020000A02200224010200060010004C0391035441470001004C039104544 Header:6F003E006B01010000000000000000000000000000000000      24byte
吊耳CommandSpecificData: 00 00 00 00 0100020000000000B2002E00    16byte
CipMessage:5202 20062401 0AF0 2000 0A02 20022401 02000600 1000  4C0391 03 54414700 0100  4C03910454414731010001000100
52-服务代码02 -请求路径⼤⼩20062401-请求路径0AF0超时  20 00 CIP指令长度(0A-00之间的长度为32个字节)
0A-服务代码(多个标签)02-请求路径⼤⼩20022401请求路径0200 标签的数量0600 偏移量(初始值为:2+标签数量*2)
1000 偏移量 =标签服务长度+初始偏移量(有⼏个标签就有⼏个偏移量)
4C 03 91 03 54414700 0100  标签TAG  4C039104544147310100  标签TAG1
PLC回复报⽂:
6F0034006B01010000000000000000000000000000000000000000000100020000000000B20024008A000000020006001300CC000000D00005003232323232CC000000D00005003232323232  76byte
Header:6F0034006B01010000000000000000000000000000000000  24byte
CommandSpecificData:000000000100020000000000B2002400  16byte
CipMessage:8A00 00000200 06001300 CC 00 0000 D000 0500 3232323232  CC000000D00005003232323232
8A-多个标签0000 -状态0200-项数0600-标签TAG偏移量1300-标签TAG1偏移量 0000-状态0正常D000-数据类型:string
0500:字符串长度(字符串类型特有的)
3232323232-数据 "22222":
⽬前常⽤的数据类型: C1-BOOL C2-SINT C3-Short C4-Int  C7-UShort C8-UInt  CA-Float CB -Double  D0-String
4.写⼊数据服务报⽂
实例,往标签名为:TAG1 写⼊true  数据类型为 bool
写⼊报⽂:68byte
6F002C006B01010000000000000000000000000000000000 000000000100020000000000B2001C00 5202200624010AF00E004D03910454414731C1000100010001000100
header:6F002C006B01010000000000000000000000000000000000  24byte
CommandSpecificData:000000000100020000000000B2001C00    16byte
CIPmessage:52 02 20062401 0AF0 0E00 4D 03 91 04 54414731 C100 0100 0100 01000100  28byte
52-服务标识02-请求路径⼤⼩  20062401-请求路径,默认0AF0-超时0E00-CIP指令长度(绿⾊部分的长度)
4D-写⼊标识03-(标签名的长度+1)/2+1  91-扩展符号04-标签TAG1的长度54414731 -标签名的ASCII表⽰
C100-数据类型    0100-默认项 0100-数据 TRUE(2byte)          01000100 - 默认最后⼀位为PLC槽号
PLC回复报⽂:
6F0014006B0101 00000 00000000000000000000000000000 000000000100020000000000B2000400CD000000  44byte
header:6F0014006B01010000000000000000000000000000000000 24byte
CommandSpecificData:000000000100020000000000B2000400  16byte
CIPMessage:CD 00 0000    CD-服务标识  00-填充字节  0000-状态好
注意:当写⼊字符串类型时,写⼊的数据长度为奇数时,需要在数据后填充⼀个字节0
5.扩展知识
⾸先建⽴起TCP连接,CIP通信端⼝默认为44818。TCP连接成功后,发送会话消息,获取四个字节的会话ID,就可以正常读写了。
header:6F0014006B0101 0000 000000000000000000000000000000 24byte
 0x0000:状态正常(在报⽂⾥低位在前⾼位在后)
  0x0001:发出了⽆效或不受⽀持的封装命令;
  0x0002:接收器中的内存资源不⾜,⽆法处理命令;
  0x0003:封装消息的数据部分中的数据形成不良或不正确;
  0x0004:Reserved for legacy(RA);
  0x0064:向⽬标发送封装消息时,始发者使⽤了⽆效的会话句柄;
0x0065:⽬标收到⼀个⽆效长度的信息
0x0069:不⽀持的封装协议修订
CIPMessage:CD00 0000
  0x0000-成功
  0x0004-它没有正确⽣成或匹配标记不存在
  0x0005-引⽤的特定项(通常是实例)⽆法到
  0x0006-请求的数据量不适合响应缓冲区。发⽣了部分数据传输  0x000A-尝试处理其中⼀个属性时发⽣错误
  0x0013-命令中没有提供⾜够的命令数据/参数来执⾏所请求的服务  0x001C-与属性计数相⽐,提供的属性数量不⾜
  0x001E-此服务中的服务请求出错
  0x0020-命令中参数的数据类型与实际参数的数据类型不⼀致
  0x0026-IOI字长与处理的IOI数量不匹配

本文发布于:2024-09-22 12:49:14,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/694571.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:长度   标签   默认   服务   请求   数据   命令   协议
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议