IT教程 ·

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1)

Spring Boot从入门到精通(五)多数据源配置实现及源码分析

又一次成为懒蛋了,标题就这么改了改又是一篇新文章。

网上也有许多S7comm协定的剖析,但照样犹如我上一篇一样我只是做报文的剖析关于S7comm的道理并举行论述。

有些处所有毛病的处所尽请人人指出,共同进步。

好了,言归正题。我们入手下手吧。

我照样依据功用码的次序举行引见吧。

s7抓包剖析

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第1张

TPKT层和COTP层我也不多做引见了,有兴致的能够本身去相识。本日我们主假如剖析S7comm这一层。

功用码附录:

0x00       CPU services CPU效劳

0xf0        Setup communication  竖立通讯

0x04       Read Var      读取值

0x05       Write Var     写入值

0x1a       Request download 要求下载

0x1b       Download block   下载块

0x1c       Download ended   下载完毕

0x1d       Start upload  入手下手上传

0x1e       Upload   上传

0x1f        End upload   上传完毕

0x28       PI-Service     程序挪用效劳

0x29       PLC Stop      封闭PLC

1、0xF0竖立通讯

发包

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第2张

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第3张

我们来先看Header头部份。

Byte[0] 32 为协定ID   平常指定为0x32

Byte[1] 01 为 PDU范例  平常有0x01 Job 主设备提议要求 0x02 Ack 确认相应 0x03 Ack_data 确认数据相应平常作为确认0x01的要求 0x07 USERDATA     协定的扩大,参数字段包括要求/相应ID

Byte[2]Byte[3] 00 00冗余数据,一般为0×0000

Byte[4]Byte[5] 3e 02协定数据单位的参考、经由过程要求事宜增添

Byte[6]Byte[7] 00 08参数的总长度也就是parameter的长度

Byte[8]Byte[9] 00 00数据的长度、也就是data部份数据的长度假如无即为0

继承看Parmeter部份。

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第4张

依据上面的length得知,我们的Parameter部份应该是8个位,数一数看看是否是8位

Byte[0] f0 为PDU的范例也就是功用码

Byte[1] 00 冗余数据,一般为0×0000

Byte[2] Byte[3]  发送衔接要求

Byte[4] Byte[5]  发送通讯要求

Byte[6] Byte[7]  协商的PDU长度

回包

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第5张

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第6张

红框内跟发包是一样的,就不再形貌了。

从Error Class入手下手。

Byte[10] 00 为毛病范例 、毛病范例也有许多种、以下是毛病范例附录。

0x00       No error 没有毛病

0x81       Application relationship     运用关联

0x82       Object definition  对象定义

0x83       No resources available 没有可用资本

0x84       Error on service processing 效劳处置惩罚中毛病

0x85       Error on supplies 要求毛病

0x87       Access error  接见毛病

Byte[11] 00 为毛病码   文章末了会附录一下悉数毛病码(很长不贴在这里了,搜刮 附录一)

这里能够明白为 毛病范例划定毛病的大抵方向而毛病码划定毛病的详细事宜。

接下来我们看Parameter这一部份

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第7张

能够看出跟发包是完整一样的,照样那句话百变不离其宗,协定嘛逃脱不了一发一收对吧。

Byte[0] f0 为PDU的范例也就是功用码

Byte[1] 00 冗余数据,一般为0×0000

Byte[2] Byte[3]  确认衔接要求

Byte[4] Byte[5]  确认通讯要求

Byte[6] Byte[7]  协商的PDU长度

2、0x04 读取数据

发包

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第8张

Header头部与之前都一样的不再形貌了

我们直接看Parameter部份吧。

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第9张

Byte[0]  04 功用码

Byte[1]  01 代表了Item的个数  为1 即为 一个

再继承往下扒。

Item部份

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第10张

Byte[0] 12 构造标识一般都为0x12,代表变量范例

Byte[1] 0a 长度范例、自此今后的长度

Byte[2] 10  IDS的地点范例的花样范例罕见值如下表

0x10        S7ANY  Address data S7-Any pointer-like DB1.DBX10.2

0x13        PBC-R_ID    R_ID for PBC

0x15        ALARM_LOCKFREE Alarm lock/free dataset

0x16        ALARM_IND      Alarm indication dataset

0x19        ALARM_ACK     Alarm acknowledge message dataset

0x1a        ALARM_QUERYREQ      Alarm query request dataset

0x1c        NOTIFY_IND      Notify indication dataset

0xa2        DRIVEESANY    seen on Drive ES Starter with routing over S7

0xb2        1200SYM      Symbolic address mode of S7-1200

0xb0        DBREAD      Kind of DB block read, seen only at an S7-400

0x82        NCK      Sinumerik NCK HMI access

Byte[3] 02 为数据传输的大小、罕见值如下表

0 NULL

3  BIT  bit access, len is in bits

4  BYTE/WORD/DWORD  byte/word/dword access, len is in bits

5  INTEGER  integer access, len is in bits

6  DINTEGER  integer access, len is in bytes

7  REAL  real access, len is in bytes

9  OCTET STRING  octet string, len is in bytes

Byte[4]Byte[5] 00 01 即数据的长度

Byte[6]byte[7] 00 01  即 DB 编号,假如接见的不是DB地区,此处为0x0000

Byte[8] 84 即数据的地区经常使用的如下表

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第11张

Byte[9] Byte[10]Byte[11]    要读取数据的地点

图示团体标注一下

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第12张

 回包

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第13张

 Header部份

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第14张

除了红框内的其他都与发包一致

Error class 即毛病范例

Error code 即详细毛病码这两个在上面已引见了都有哪些毛病范例,没有毛病即0x00

Parameter部份

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第15张

Byte[0] 04 功用码 Byte[1] 01 代表一个Item

Data部份

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第16张

Byte[0] FF 为返回码  返回码经常使用值如下表

0x00       Reserved 未定义,预留

0x01       Hardware error   硬件毛病

0x03       Accessing the object not allowed 对象不允许接见

0x05       Invalid address     无效地点,所需的地点超出此PLC的极限

0x06       Data type not supported     数据范例不支持

0x07       Data type inconsistent 日期范例不一致

0x0a       Object does not exist    对象不存在

0xff         Success  胜利

Byte[1] 04  为数据传输大小 data数据传输大小值如下表

0     NULL

3     BIT bit access, len is in bits

4     BYTE/WORD/DWORD     byte/word/dword access, len is in bits

5     INTEGER    integer access, len is in bits

6     DINTEGER  integer access, len is in bytes

7     REAL    real access, len is in bytes

9     OCTET STRING octet string, len is in bytes

Byte[2]Byte[3]  为data数据的长度

Byte[4] 即数据

有时刻会有添补数据即在byte[4]以后、假如数据长度不满足length的话会添补0x00

列如 byte[2]byte[3] 的长度值为3 就会在byte[4]后添补两个0x00

照样团体在图示一遍吧

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第17张

好了,这个功用算是啃完了,其他的功用也大抵都一样,所以呢剩下的时刻我大概会比较懒了哈哈。

3、0x05 写入数据

这就很好明白了吧,有读必有写。那写我们去揣摸一下,是否是在发包的时刻比读数据会多一个Data段作为写入的值呢。答案是一定的!

发包

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第18张

Header  都与读取值一样的就不在说了

Parameter也一样图示一次吧

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第19张

 

 

 叮叮叮,Data段来了

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第20张

Byte[0]  00 返回码未定义就为00

Byte[1]  04 数据传输的大小

Byte[2]Byte[3] 数据的长度

Byte[4] 数据

是否是觉得这些都差不多一样,

计算机跟人类也是一样的。

我对你说“你好帅啊” 你是否是也会回我一句“你也好帅”,假设说你回了一句“我很帅,你很丑”

这是否是不符合常理了,有大概你还要挨骂对吧。

那计算机也是啊,效劳端发送数值,客户端不只不接受还骂效劳端一句,那是否是效劳端这边要报错呢。

大概例子不太适当,意义到了就阔仪了。

言归正传,别爱我,没效果。

回包

西门子S7comm协定剖析 —— 应用Wireshark对报文逐字节举行剖析细致剖析S7comm所含功用码以及UserData功用(path1) IT教程 第5张

援用上面我举的例子,那完整能够揣摸出往返包会会什么对吧。

发包写入了数据,那我回包是否是要回复写入胜利或许失利呢。

Header部份和parameter部份都一样照样懒了些就不在形貌了。

来看Data部份吧

 

Byte[0] FF 即为返回码

 

上面引见有返回码的范例 整段的意义就是向0x000000地点写入胜利

另有好多个功用码没有写,我会放到下一篇文章里。

缘由:懒了懒了懒了

未完待续....

 

用 Python 读写 Excel 表格

参与评论