1、引言

工业以太网协议 (Ethernet/IP) 是由ODVA所开发并得到了罗克韦尔自动化的强大支持。它使用已用于ControlNet和DeviceNet的控制和信息协议 (CIP) 为应用层协议。

CIP提供了一系列标准的服务,提供“隐式”和“显示”方式对网络设备中的数据进行访问和控制。CIP数据包必须在通过以太网发送前经过封装,并根据请求服务类型而赋予一个报文头。这个报文头指示了发送数据到响应服务的重要性。通过以太网传输的CIP数据包具有特殊的以太网报文头,一个IP头、一个TCP头和封装头。封装头包括了控制命令、格式和状态信息、同步信息等。这允许CIP数据包通过TCP或UDP传输并能够由接收方解包。相对于DeviceNet或ControlNet,这种封装的缺点是协议的效率比较低。以太网的报文头可能比数据本身还要长,从而造成网络负担过重。因此,EtherNet/IP更适用于发送大块的数据 ( 如程序 ) ,而不是DeviceNet和ControlNet更擅长的模拟或数字的I/O数据。

EtherNet/IP指的是"以太网工业协议"(Ethernet Industrial Protocol)。它定义了一个开放的工业标准,将传统的以太网与工业协议相结合。该标准是由国际控制网络(CI, ControlNet International)和开放设备网络供应商协会 (ODVA)在工业以太网协会 (IEA, Industrial Ethernet Association)的协助下联合开发的,并于2000年3月推出。EtherNet/IP是基于TCP/IP系列协议,因此采用以原有的形式OSI层模型中较低的4层。所有标准的以太网通信模块,如PC接口卡、电缆、连接器、集线器和开关都能与 EtherNet/IP 一起使用。

2、 EtherNet/IP_报文格式

  • 注册请求帧:EtherNet/IP与Fins类似,在正式通信前需要进行注册请求,获取到会话句柄。

注册请求帧报文格式如下:dotNet工控上位机:thinger_swj

因此,一个完整的注册请求帧发送实例:

65 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00

  • 注册应答帧:顾名思义,注册应答帧就是注册请求帧的应答报文,包含了我们需要的会话句柄。

注册应答帧报文格式如下:

注册请求帧接收实例:

65 00 04 00 71 01 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00

根据应答报文,提取会话句柄为:0x71 0x01 0x0E 0x00

其中状态相当于错误代码,如下所示:

  • 读取信息报文帧 EtherNet/IP

PLC标签:TAG1

读取报文:

封装头:6F 00 28 00 70 01 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

命令数据:00 00 00 00 01 00 02 00 00 00 00 00 B2 00 18 00 52 02 20 06 24 01 0A F0 0A 00 4C 03 91 04 54 41

47 31 01 00 01 00 01 00

报文解析:

6F 00 命令码

28 00 后面数据报文长度

70 01 27 00 会话句柄

00 00 00 00 状态,默认值0

00 00 00 00 00 00 00 00 发送方描述

00 00 00 00 选项默认

00 00 00 00 接口句柄 00 00 00 00 代表CIP

01 00 超时

02 00 项数

00 00 空地址项

00 00 空地址项长度

B2 00 未连接项 默认

18 00 CIP报文包的长度

52 命令

02 请求路径长度

20 06 24 01 默认请求路径

0A F0 0A 00 默认超时

4C 服务标识

03 CIP长度多少字

91 固定

04 PLC标签长度 多少个字节

01 00 读取长度

01 00 01 00 槽号

  • 返回信息报文帧 EtherNet/IP

返回报文:

封装头:6F 00 18 00 71 01 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

命令数据:00 00 00 00 01 00 02 00 00 00 00 00 B2 00 08 00 CC 00 00 00 C1 00 00 00

报文解析:

6F 00 命令

18 00 长度 (总长度 -封装头长度 )

71 01 14 00 会话句柄(会话ID)

00 00 00 00 会话状态

00 00 00 00 00 00 00 00 发送方描述 固定

00 00 00 00 选项 默认

00 00 00 00 接口句柄 ,00000000 指CIP

01 00 超时

02 00 项数 默认2

00 00 连接的地址项

00 00 连接地址项长度

B2 00 未连接数据项

08 00 连接长度

CC 服务标识

00 填充字节

00 00 状态

C1 00 数据类型 BOOL (0x00C3(195) 为整型,0x00CA(202)为实型, 0x00C1(193)为布尔型,long 型为0x00C4,BYTE为0x00C2 )

00 00 数据值

  • 写入信息报文帧 EtherNet/IP

PLC标签:TAG1

写入报文:

封装头:6F 00 2C 00 71 01 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

命令数据:00 00 00 00 01 00 02 00 00 00 00 00 B2 00 1C 00 52 02 20 06 24 01 0A F0 0E 00 4D 03 91 04 54

41 47 31 C1 00 01 00 00 00 01 00 01 00

解析报文:

6F 00 命令码

2C 00 长度(去除header后报文长度 字节为单位)

71 01 14 00 会话句柄

00 00 00 00 会话状态

00 00 00 00 00 00 00 00 发送方描述 固定

00 00 00 00 选项 默认

00 00 00 00 接口句柄 ( 00 00 00 00 指CIP)

01 00 超时

02 00 项数 默认2

00 00 空地址项 默认

00 00 空地址项长度 默认

B2 00 未连接数据项 默认

1C 00 数据长度 指后面数据长度 (字节)

52 请求服务代码

02 请求路径长度

20 06 24 01 请求路径 默认

0A F0 超时默认 245760ms

OE 00 长度(从服务标识开始 到 写入的值 结束 )

4D 服务标识

03 长度(91 04 54 41 47 31 )

91 固定

04 标签长度

54 41 47 31 TAG1(标签名)

C1 00 数据类型 bool0x00C3(195) 为整型,0x00CA(202)为实型,0x00C1(193)为布尔型,long 型为0x00C4,BYTE为0x00C2

01 00 写入数量

00 00 写入的值 false:0 TRUE:任意非0数

01 00 01 00 PLC槽号

返回报文:

封装头:6F 00 14 00 71 01 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

命令数据:00 00 00 00 01 00 02 00 00 00 00 00 B2 00 04 00 cd 00 00 00

解析报文:

71 01 14 00 会话句柄

B2 00 未连接数据项 默认

CD 服务标识(写)固定

00 填充字节

0000 状态:成功

  • 多标签读取

参考单标签的报文帧,读取TAG1 和TAG2

54 41 47 31 TAG1

54 41 47 32 TAG2

发送报文:

6F 00 3E 00 70 01 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 02 00 00 00 00 00 B2 00 2E 00 52 02 20 06 24 01 0A F0 20 00 0A 02 20 02 24 01 02 00 06 00 10 00 4C 03 91 04 54 41 47 31 01 00 4C 03 91 04 54 41 47 32 01 00 01 00 01 00

返回报文:

6F 00 2A 00 70 01 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 02 00 00 00 00 00 B2 00 1A 00 8A 00 00 00 02 00 06 00 0E 00 CC 00 00 00 C1 00 01 00 CC 00 00 00 C1 00 01 00

  • 注销会话:注销会话顾名思义就是通信结束时发送,注销会话是没有返回值的。

注销会话报文:

66 00 00 00 71 01 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

报文解析:

66 00 :命令

00 00 :长度

71 01 04 00:要注销的会话句柄

00 00 00 00 状态 默认0

00 00 00 00 00 00 00 00:发送内容 默认0

00 00 00 00:选项 默认0

3、 EtherNet/IP通信应用

欧姆龙NX系列PLC不支持Fins通信,也不支持OPCUA,综合考虑,只能通过Ethernet/IP与其进行通信。这里使用CMSPro进行通信应用,CMSPro集成了EtherNet/IP通信库,并支持项目应用。

  • 新增设备:打开CMSPro软件,PLC设备>新增PLC设备>欧姆龙CIP,新增一个PLC设备,如下所示:

  • 新增通信组:在PLC设备上右击新增通信组,添加一个通信组,这里的通信组没有实际具体的意义,只是为了便于管理通信变量。
  • 添加变量前,首先注意一下上位机变量类型与PLC变量类型的对应关系,如下所示:

标签变量添加:标签变量是指无结构体和数组参与的变量,在通信组中,右击新增变量,添加一个通信变量,对于标签变量,直接按照实际PLC中的变量名称输入即可,我们添加一个PLC中名为grHWCs_PV变量:

结构体变量添加:对于结构体中的变量添加,可以按照标签变量的方式,变量地址填写结构体名称.变量名,也可以通过先添加一个结构体变量,然后在这个结构体变量下,添加一个变量,一般建议用后者,这样比较直观,后续也便于管理。

数组变量添加:对于数组变量添加,可以按照标签变量的方式,变量地址填写数组名[索引],也可以通过先添加一个数组变量,然后在这个数组变量下,添加一个变量,一般建议用后者,这样比较直观,后续也便于管理。dotNet工控上位机:thinger_swj

按照这种方式添加好变量后,保存并运行,然后测试结果是否正确。

测试完成读取后,通过修改查看,是否可以修改变量。

引用:https://zhuanlan.zhihu.com/p/269469939

基于EtherNet/IP实现欧姆龙NX系列PLC通信的更多相关文章

  1. 【新阁教育】基于EtherNet/IP实现欧姆龙NX系列PLC通信

    1.引言 工业以太网协议 (Ethernet/IP) 是由ODVA所开发并得到了罗克韦尔自动化的强大支持.它使用已用于ControlNet和DeviceNet的控制和信息协议 (CIP) 为应用层协议 ...

  2. 上位机开发之三菱Q系列PLC通信实践

    经常关注我们公众号或者公开课的学员(如果还没有关注的话,左上角点击一波关注)应该知道,我们会经常使用西门子PLC,其实对于其他品牌的PLC,我们都会讲到,包括三菱.欧姆龙.基恩士.松下及国产台达.信捷 ...

  3. 【精讲版】上位机C#/.NET与西门子PLC通信

    618来啦 亲们,腾讯课堂101机构打榜了,快来助力<新阁教育>,<免费赠送课程>! 1.手机QQ(微信请也来一遍)扫下方二维码↓,找到<新阁教育> 2.点击“支持 ...

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

    一.关于CIP协议 CIP通信是Common Industrial Protocl(CIP)的简称,它是一个点到点的面向对象协议,能够实现工业器件(传感器,执行器)之间的连接,和高等级的控制器之间的连 ...

  5. 各种工业以太网比较(EtherCAT,EtherNet/IP,ProfiNet,Modbus-TCP,Powerlink)

    EtherCAT(以太网控制自动化技术)是一个以以太网为基础的开放架构的现场总线系统,EterCAT名称中的CAT为ControlAutomation Technology(控制自动化技术)首字母的缩 ...

  6. 工控安全入门之Ethernet/IP

    这一篇依然是协议层面的,协议层面会翻译三篇,下一篇是电力系统中用的比较多的DNP3.这一篇中大部分引用的资料都可以访问到,只有一篇reversemode.com上的writeup(http://rev ...

  7. EtherNet/IP CIP协议

    EtherNet/IP CIP协议 1.EtherNet/IP简述 EtherNet/IP(Ethernet/Indstrial Protocol,以太网/工业协议)是一种基于以太网和TCP/IP技术 ...

  8. 工控安全入门之 Ethernet/IP

    工控安全入门之 Ethernet/IP Ethernet/IP 与 Modbus 相比,EtherNet/IP 是一个更现代化的标准协议.由工作组 ControlNet International 与 ...

  9. S7-200系列PLC与WINCC以太网通信CP243i的实例

    S7-200系列PLC与WINCC以太网通信CP243i的实例 ----选用大连德嘉国际电子www.dl-winbest.cn的CP243i作为连接S7-200的PPI口转以太网RJ45的接口转换器. ...

  10. 标准的TCP/IP工业以太网-EtherNet/IP

    标准的TCP/IP工业以太网-EtherNet/IP                            徐智穹以太网具有传输速度高.兼容性好.应用广泛等方面的优势,支持几乎所有流行的网络协议,其中 ...

随机推荐

  1. 【补档_C51单片机】基于C51的蜂鸣器音乐盒工程源码解析(可播放《打上花火》)

    项目地址:https://gitee.com/daycen/c51-music-box 通过Keil uVision3打开即可使用 以前做的一些小硬件,现补档至博客 1 功能及总体方案 1.1 功能描 ...

  2. 【Filament】绘制圆形

    1 前言 ​ Filament环境搭建中介绍了 Filament 的 Windows 和 Android 环境搭,绘制三角形中介绍了绘制纯色和彩色三角形,绘制矩形中介绍了绘制纯色和彩色矩形,本文将使用 ...

  3. PRINCE2系列一基于项目情境自定义解决方案

    PRINCE2(PRojects IN Controlled Environments,受控环境下的项目管理) 对项目进行了如下定义:项目是按照一个被批准的商业论证,为了交付一个或多个商业产品而创建的 ...

  4. 三分钟数据持久化:Spring Boot, JPA 与 SQLite 的完美融合

    三分钟,迎接一个更加高效和简便的开发体验. 在快节奏的软件开发领域,每一个简化工作流程的机会都不容错过.想要一个无需繁琐配置.能够迅速启动的数据持久化方案吗?这篇文章将是你的首选攻略.在这里,我们将向 ...

  5. [C/C++] PCWSTR LPCTSTR等等

    目录 为什么会有这个 L"" 宏 LPCWSTR字符串比较 wchar_t 和 char 之间转换 关于 ANSI编码 乌拉~~~ 这是我第一百篇博文咯~ 为什么会有这个 真的开发 ...

  6. linux的简单使用

    了解Linux的简单使用 Linux的安装 下载Linux Ubuntu版本和虚拟机VMware软件. 我已经提前下载好了,下载好的文件分享出来bd 这个是文件夹内的VMWare软件的注册码,安装完成 ...

  7. RocketMQ(3) 根据消息key查询功能的实现: indexFile

    三: indexFile 除了通过通常的指定Topic进行消息消费外,RocketMQ还提供了根据key进行消息查询的功能. 该查询是通过store目录中的index子目录中的indexFile进行索 ...

  8. Java 内部类 注意点

    1 package com.bytezreo.innerclass2; 2 3 /** 4 * 5 * @Description 内部类 注意点 6 * @author Bytezero·zhengl ...

  9. picgo+gitee+typora实现博客图床

    背景 在微信公众号编写了推文后,从推文里面复制内容出来在其他平台发布,会出现图片展示不出来的情况,原因是因为该图片是微信的链接,被限制在其他平台显示. 诉求 编写的推文在多个平台都能进行发布,图片在多 ...

  10. OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像

    前言   通过相机图片可以识别出棋盘角点了,这时候我们需要通过角点去计算相机内参矩阵,通过上篇得知畸变的原理,所以我们尽可能要全方位都能获取标定图片,全方位意思是提供的多张图综合起来基本覆盖了相机所有 ...