Enthip/IP_ CIP报文格式

测试Demo在文章末尾

注册请求帧:

0x65 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

0x01,0x00  协议版本

0x00,0x00  选项标记

注册请求帧发送实例:

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

注册应答帧:

  0x65,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

  0x01,0x00,协议版本 2byte

  0x00,0x00,选项标记 2byte

注册请求帧接收实例:

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

(提取会话句柄或者会话ID  71 01 0E 00

状态字段

 

 

 

 

************读取信息报文帧  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  后面报文长度 指:( 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

70
01 27 00  会话句柄

00
00 00 00   状态,初始值
0  状态好

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

00 00
00 00   选项默认

以上是封装头Header(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:接口句柄 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 91 04 54 41 47 31 01 00 01 00 01 00)

52命令

02请求路径长度

20
06 24 01默认请求路径

0A F0
0A 00默认超时

4C服务标识

03 CIP长度多少字(91 04 54 41 47 31)

91固定

04PLC标签长度 多少个字节

01 00读取长度

01
00 01 00 槽号

 

返回报文帧解析 

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 数据值

 

网络调试助手发送数据历史记录

 

[2019-12-03
15:33:31.560]# SEND HEX>   注册会话   PC=>PLC

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

 

[2019-12-03
15:33:31.564]# RECV HEX> 返回会话句柄 PLC=>PC

65
00 04 00 70 01 0D 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 01 00 00 00

 

[2019-12-03
15:34:08.745]# SEND HEX> PC=>PLC读取

6F
00 28 00 70 01 0D 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

 

[2019-12-03
15:34:08.751]# RECV HEX> plc=>PC返回

6F
00 18 00 70 01 0D 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

注释:C1 00 _BOOL   00
00_数据,true的情况下=01 00

写单个标签

在写单个标签之前 ,需要注册会话,获取会话句柄 ,之后进行写入命令

下面是写入单标签完整报文帧 :

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

解析:

=>Header封装头: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:状态、 成功

单标签写入,调试软件调试记录:

[2019-12-03 17:08:09.346]# SEND HEX> 注册会话

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

[2019-12-03 17:08:09.353]# RECV HEX> 返回会话句柄

65 00 04 00 70 01 21 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 01 00 00 00

[2019-12-03 17:08:42.352]# SEND HEX> 标签TAG1 写入0

6F 00 2C 00 70 01 21 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

[2019-12-03 17:08:42.357]# RECV HEX> 写0结果返回

6F 00 14 00 70 01 21 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

[2019-12-03 17:08:55.840]# SEND HEX> 写1

6F 00 2C 00 70 01 21 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 FF FF 01 00
01 00

[2019-12-03 17:08:55.845]# RECV HEX> 写1结果

6F 00 14 00 70 01 21 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

[2019-12-03 17:09:11.630]# SEND HEX>写1

6F 00 2C 00 70 01 21 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 01 00 01 00
01 00

[2019-12-03 17:09:11.639]# RECV HEX> 写1结果

6F 00 14 00 70 01 21 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

 

多标签读取

参考单标签的 报文帧

读取TAG1 
和TAG2

54 41 47 31  TAG1

54 41 47 32   TAG2

[2019-12-03 17:55:55.741]# SEND HEX>

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

[2019-12-03 17:55:55.847]# RECV HEX>

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

注销会话

注销会话报文是没有返回值的

[2019-12-05 12:27:18.253]# SEND HEX> 注册会话

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

 

[2019-12-05 12:27:18.256]# RECV HEX> 返回会话句柄

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

 

[2019-12-05 12:27:42.889]# SEND HEX>  注销会话

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

 

 水平有限 ,有错误之处 ,多多包涵,意见或建议,请留言!

测试Demo 

链接:https://pan.baidu.com/s/1_niradiIAOPXUNV-k-PS9w
提取码:9mc6

欧姆龙 EntherNet/IP(CIP报文格式)的更多相关文章

  1. 【转】IP报文格式详解

    下图为常见的IP报文格式表: 上面是IP的报文格式,接下来我们先说明各个字段的意义.然后,用Etheral软件转包分析IP的报文格式. 1.版本:ip报文中,版本占了4位,用来表示该协议采用的是那一个 ...

  2. TCP/UDP报文格式

    TCP报文格式 源端口:数据发送方的端口号 目的端口:数据接收方的端口号 序号:本数据报文中的第一个字节的序号(在数据流中每个字节都对应一个序号) 确认号:希望收到的下一个数据报文中的第一个字节的序号 ...

  3. 【转】TCP/IP报文格式

    1.IP报文格式 IP协议是TCP/IP协议族中最为核心的协议.它提供不可靠.无连接的服务,也即依赖其他层的协议进行差错控制.在局域网环境,IP协议往往被封装在以太网帧(见本章1.3节)中传送.而所有 ...

  4. tcp、udp、ip、icmp报文格式分析

    TCP .UDP .IP. ICMP协议报文格式分析 Tcp报文格式: Wireshark抓包如图: 源端口/目的端口(16bit): 在TCP报文中包涵了源端口/目的端口,源端口标识了发送进程,目的 ...

  5. 【转】以太网帧、IP报文格式

    原文:https://www.cnblogs.com/yongren1zu/p/6274460.html https://blog.csdn.net/gufachongyang02/article/d ...

  6. 以太网帧、IP报文格式

    这几天完成一个对比以太网帧的程序(c语言),老师给了以太网帧头部和IP报文头部的结构体,跟实际抓取到的数据包的格式是相同的. 以太网帧头部的数据结构: typedef struct { unsigne ...

  7. 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)

    摘要:     本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述     TCP是面向连接的可靠 ...

  8. TCP/IP报文格式

    1.TCP首部格式 1.1 格式各字段含义 源端口号( 16 位):它(连同源主机 IP 地址)标识源主机的一个应用进程. 目的端口号( 16 位):它(连同目的主机 IP 地址)标识目的主机的一个应 ...

  9. DNS报文格式(RFC1035)

    一.域名和资源记录的定义 1.Name space definitions 2.资源记录定义(RR definitions)      2.1 格式          后面分析报文的时候详细解释.   ...

随机推荐

  1. white-space

    white-space 语法: white-space:normal | pre | nowrap | pre-wrap | pre-line 默认值:normal 适用于:所有元素 继承性:有 动画 ...

  2. eclipse/myeclipse SVN资源库URL中文乱码问题解决办法

    右击选择资源库地址 可以自定义名称

  3. AS400 printer setting

    (1) CRTOUTQ OUTQ(TESTLIB/PRINTER2) (2) CRTDEVPRT ===> CRTDEVPRT DEVD(PRINTER2) DEVCLS(*LAN) TYPE( ...

  4. mysql 的编写顺序和执行顺序

    编写顺序 S..F..W..G..H..O 执行顺序 F..W..G..H..S..O from →join →on →where →group by→having→select→order by→l ...

  5. loj #136

    最小瓶颈路 做最小生成树是进行特判即可 时间复杂度 n * k #include <bits/stdc++.h> const int N = 1010, M = 1e5 + 10; str ...

  6. Educational Codeforces Round 55 题解

    题解 CF1082A [Vasya and Book] 史上最难A题,没有之一 从题意可以看出,翻到目标页只有三种办法 先从\(x\)到\(1\),再从\(1\)到\(y\) 先从\(x\)到\(n\ ...

  7. mac 启动mysql

    sudo /usr/local/mysql/support-files/mysql.server stop sudo /usr/local/mysql/support-files/mysql.serv ...

  8. Ubuntu 14.04 查看指定端口的服务

    查看已经连接的服务端口(ESTABLISHED) netstat -a 查看所有的服务端口(LISTEN,ESTABLISHED) netstat -ap 查看指定端口,可以结合grep命令: net ...

  9. Scrapy 教程(11)-API启动爬虫

    scarpy 不仅提供了 scrapy crawl spider 命令来启动爬虫,还提供了一种利用 API 编写脚本 来启动爬虫的方法. scrapy 基于 twisted 异步网络库构建的,因此需要 ...

  10. Tomcat的默认端口问题

    0x00 起因 今天看到一个226团队,进群的时候有一个问题问的就是:Tomcat的默认端口是多少? 当时我只想到了8080,等过了不久,有位管理员回复了我是三个默认端口....,马上去翻了下资料,才 ...