文章目录

  • 一、设置 IP 地址
  • 二、软件程序
  • 三、使用 Wireshark 抓包
  • 四、协议分析
  • 五、抓包分析
  • 六、附录:功能码
  • 七、附录:IDS 地址规范码
  • 八、附录:数值传输码
  • 九、附录:数据区域码
  • 十、附录:返回码


一、设置 IP 地址

  1. 物理连接
  分别将 HMI 和 S7-1200 连接到交换机的通信网口,电脑端连接到交换机的监控口。



Nagios配置监控网络交换机 监控交换机需要设置ip_Word

图1.1.1 连接交换机

  2. IP设置
  (1)设置 S7-1200 的 IP 地址为 192.168.0.1
   选择目标 PLC ,右击选择“属性”,打开 PLC 属性配置。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据区_02

图1.2.1 设备属性配置

  选择“ PROFINET 接口”栏,修改“ IP 协议”中“ IP 地址”。



Nagios配置监控网络交换机 监控交换机需要设置ip_Nagios配置监控网络交换机_03

图1.2.2 配置 IP 地址

  编译后下载到设备,搜索当前节点中目标设备,确认设备后下载。



Nagios配置监控网络交换机 监控交换机需要设置ip_Nagios配置监控网络交换机_04

图1.2.3 搜索设备

Nagios配置监控网络交换机 监控交换机需要设置ip_Nagios配置监控网络交换机_05

图1.2.4 确认下载

  (2)设置 HMI 的 IP 地址为 192.168.0.2
   选择目标工程 ,右击选择“属性”,打开属性配置。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据区_06

图1.2.5 系统属性配置

  选择“设备”栏 ,选择“以太网设备”,配置本机使用 IP 地址。



Nagios配置监控网络交换机 监控交换机需要设置ip_Nagios配置监控网络交换机_07

图1.2.6 配置本机 IP 地址

  选择“以太网设备”,右击新建目标设备,配置目标设备协议。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据_08

图1.2.7 新建目标设备

Nagios配置监控网络交换机 监控交换机需要设置ip_Word_09

图1.2.8 配置目标设备协议

  (3)设置电脑以太网接口的 IP 地址为 192.168.0.5



Nagios配置监控网络交换机 监控交换机需要设置ip_数据区_10

图1.2.9 设置电脑以太网地址

二、软件程序

  1. 西门子 S7-1200
  注:西门子 S7-1200 中元件 I 、 Q 和 M 可以直接正常读写, DB 数据块必须添加和配置后才能正常读写, DB 数据块范围为1到99。
  (1)新增 DB1 到 DB4 四个数据块。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据区_11

图2.1.1 新增 DB 数据块

  (2)四个数据块中数据配置相同,只使用了前16个 Byte ,以 DB1 为例进行配置。



Nagios配置监控网络交换机 监控交换机需要设置ip_Word_12

图2.1.2 配置 DB 块中使用数据

  (3)配置完成后,下载到 S7-1200 后,重新启动后生效。
  2. 信捷 HMI
  (1)按 Byte 读取 I0 ,按 Word 读取 I1 ,按 DWord 读取 I2 。
  (2)按 Byte 读取 Q0 ,按 Word 读取 Q2 ,按 DWord 读取 Q4 。
  (3)按 Byte 读取 M0 ,按 Word 读取 M4 ,按 DWord 读取 M8 。
  (4)按 Byte 读取 DB1-0 ,按 Word 读取 DB1-1 ,按 DWord 读取 DB1-2 。
  (5)按 Byte 读取 DB2-0 ,按 Word 读取 DB2-2 ,按 DWord 读取 DB2-4 。
  (6)按 Byte 读取 DB3-0 ,按 Word 读取 DB3-4 ,按 DWord 读取 DB3-8。
  (7)按 DWord 读取 DB4-0 、 DB4-2 、 DB4-4 、 DB4-6 、 DB4-8 、 DB4-10 和 DB4-12 ,按 Word 读取 DB4-14 。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据区_13

图2.2.1 信捷 HMI 程序

三、使用 Wireshark 抓包

  1. 启动抓包工程
  在“ Interface List ”中选择“以太网”,点击“ Start ”。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据区_14

图3.1.1 启动抓包工程

  2. 设置过滤规则
  在“ Filter ”中输入“ ip.addr == 192.168.0.1 ”,只显示与 192.168.0.1 有关的通信包。



Nagios配置监控网络交换机 监控交换机需要设置ip_Word_15

图3.2.1 启动抓包工程

四、协议分析

  1、TPKT层
  4个 Byte :Version( 0x03 ) + Reserved( 0x00 ) + Length(2个 Byte ,高字节在前)。
  2、COTP层
  3个 Byte :Length( 0x02 ) + PDU Type( DT Data ,0x0f ) + TPDU number(.000 0000,0x80 )。
  3、COMMUNICATION层
  发包包含头部( Header )和参数( Parameter )两个部分,发包包含头部( Header )、参数( Parameter )和数据( Data )三个部分。
  (1)头部( Header )
  Byte[ 0 ]:协议 ID ,一般指定为 0x32 。
  Byte[ 1 ]:PDU 类型 ,一般有 0x01( Job ,主设备发起请求)、 0x02( Ack ,确认请求)、0x03( Ack_data ,确认数据响应,一般作为确认 0x01 请求)和0x07( USERDATA ,协议的扩展,参数字段包含请求/响应 ID )。
  Byte[ 2 ] - Byte[ 3 ]:冗余数据,一般指定为 0x0000 。
  Byte[ 4 ] - Byte[ 5 ]:协议数据单元的参考 ,通过请求事件增加。
  Byte[ 6 ] - Byte[ 7 ]:参数 Parameter 总长度。
  Byte[ 8 ] - Byte[ 9 ]:数据 Data 的长度,无data部分即为 0x0000 。
  注:以上部分,发包和回包相同,各功能码相同,以下部分只在回包中出现:
  Byte[ 10 ]:错误类型( Error class),一般为 0x00 。
  Byte[ 11 ]:错误代码( Error code),一般为 0x00 。
  (2)参数( Parameter )
  以读取数据( 0x04 )为例,发包:
  Byte[ 10 ]:功能码,读取数据为 0x04,详情见功能码附录。
  Byte[ 11 ]:单元个数( Item count )。
  Byte[ 12 ]:结构标识,代表变量规范,一般为 0x12 。
  Byte[ 13 ]:长度规范,自此往后的长度,一般为 0x0a 。
  Byte[ 14 ]:IDS的地址规范的格式类型,一般为 0x10 ,详情见 IDS 地址规范附录。
  Byte[ 15 ]:数据传输大小,一般为 0x02, 详情见数值传输码附录。
  Byte[ 16 ] - Byte[ 17 ]:数据长度。
  Byte[ 18 ] - Byte[ 19 ]:DB 编号,如果访问的不是 DB 区域为 0x0000 。
  Byte[ 20 ]:数据的区域,详情见数据区域码附录。
  Byte[ 21 ] - Byte[ 23 ]:要读取数据的地址。
  以读取数据( 0x04 )为例,回包:
  Byte[ 12 ]:功能码,读取数据为 0x04,详情见功能码附录。
  Byte[ 13 ]:单元个数( Item count )。
  (3)数据( Data )
  以读取数据( 0x04 )为例,回包:
  Byte[ 14 ]:返回码,一般为 0xff ,详情见返回码附录。
  Byte[ 15 ]:数据传输大小,一般为 0x02, 详情见数值传输码附录。
  Byte[ 16 ] - Byte[ 17 ]:数据长度。
  Byte[ 18 ]:自此开始即为数据,如果数据长度不满足会填充 0x00 。

五、抓包分析

  1. 握手一
  此处不做详细解释,有兴趣的可以自行了解。



Nagios配置监控网络交换机 监控交换机需要设置ip_Word_16

图4.1.1 握手一包一

Nagios配置监控网络交换机 监控交换机需要设置ip_Word_17

图4.1.2 握手一包二

Nagios配置监控网络交换机 监控交换机需要设置ip_Nagios配置监控网络交换机_18

图4.1.3 握手一包三

  2. 握手二
  此处不做详细解释,有兴趣的可以自行了解。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据_19

图4.2.1 握手二包一

Nagios配置监控网络交换机 监控交换机需要设置ip_Nagios配置监控网络交换机_20

图4.2.2 握手二包二

  3. 握手三
  此处不做详细解释,有兴趣的可以自行了解。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据_21

图4.3.1 握手三包一

Nagios配置监控网络交换机 监控交换机需要设置ip_Nagios配置监控网络交换机_22

图4.3.2 握手三包二

  4. 数据交互
  (1) 读取请求1
  头部部分: PDU 类型为 0x01 (主设备发起请求),参数部分总长度为98( 0x0062 )个 Byte ,无数据部分。
  参数部分:功能码为 0x04(读取数值),8个单元,每个单元12个 Byte ,前4个 Byte 相同( 0x12 + 0x0A + 0x10 + 0x02 ),其余8个 Byte 含义分别如下:
  1)单元1:00 06 00 00 81 00 00 00
  数据长度为6个 Byte, I 数据区域,起始地址为 0x000000 。
  2)单元2:00 08 00 00 82 00 00 00
  数据长度为8个 Byte, Q 数据区域,起始地址为 0x000000 。
  3)单元3:00 01 00 00 83 00 00 00
  数据长度为1个 Byte, M 数据区域,起始地址为 0x000000 。
  4)单元4:00 08 00 00 83 00 00 20
  数据长度为8个 Byte, M 数据区域,起始地址为 0x000020 。
  5)单元5:00 06 00 01 84 00 00 00
  数据长度为6个 Byte,DB1 数据区域,起始地址为 0x000000 。
  6)单元6:00 08 00 02 84 00 00 00
  数据长度为8个 Byte,DB2 数据区域,起始地址为 0x000000 。
  7)单元7:00 01 00 03 84 00 00 00
  数据长度为1个 Byte,DB3 数据区域,起始地址为 0x000000 。
  8)单元8:00 08 00 03 84 00 00 20
  数据长度为8个 Byte,DB3 数据区域,起始地址为 0x000020 。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据_23

图4.4.1 读取请求1

  (2) 读取返回1
  头部部分: PDU 类型为 0x03 (确认数据响应),参数部分总长度为2( 0x0062 )个 Byte ,数据部分总长度80( 0x0050 )。
  参数部分:功能码为 0x04(读取数值),8个单元,一般情况每个单元前2个 Byte 相同(0xff + 0x04,读取成功,按 Byte / Word / DWord 读取,长度按 Bit 计算),其余 Byte 含义分别如下:
  1)单元1:00 30 00 00 00 00 00 00
  数据长度为48( 0x30 )个 Bit ,I0( Byte ) = 0x00 , I1( Word ) = 0x0000, I2( DWord ) = 0x00000000 。
  2)单元2:00 40 00 00 00 00 00 00 00 00
  数据长度为64( 0x40 )个 Bit ,Q0( Byte ) = 0x00 ,Q2( Word ) = 0x0000, Q4( DWord ) = 0x00000000 。
  3)单元3:00 08 00 00
  数据长度为8( 0x8 )个 Bit ,M0( Byte ) = 0x00 。
  4)单元4:00 40 00 00 00 00 00 00 00 00
  数据长度为64( 0x40 )个 Bit ,M4( Word ) = 0x0000, M8( DWord ) = 0x00000000 。
  5)单元5:00 30 00 01 02 03 04 05
  数据长度为48( 0x30 )个 Bit ,DB1.0( Byte ) = 0x00, DB1.1( Word ) = 0x0102, DB1.2( DWord ) = 0x02030405。
  6)单元6:00 40 00 01 02 03 04 05 06 07
  数据长度为64( 0x40 )个 Bit ,DB2.0( Byte ) = 0x00, DB1.2( Word ) = 0x0203, DB2.4( DWord ) = 0x04050607。
  7)单元7:00 08 00 00
  数据长度为8( 0x08 )个 Bit ,DB3.0( Byte ) = 0x00 。
  8)单元8:00 40 04 05 06 07 08 09 0a 0b
  数据长度为64( 0x40 )个 Bit ,DB3.4( Word ) = 0x0405, DB3.8( DWord ) = 0x08090a0b。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据_24

图4.4.2 读取返回1

  (3) 读取请求2
  头部部分: PDU 类型为 0x01 (主设备发起请求),参数部分总长度为26
( 0x001a )个 Byte ,无数据部分。
  参数部分:功能码为 0x04(读取数值),2个单元,每个单元12个 Byte ,前4个 Byte 相同( 0x12 + 0x0A + 0x10 + 0x02 ),其余8个 Byte 含义分别如下:
  1)单元1:00 08 00 04 84 00 00 00
  数据长度为8个 Byte, DB4 数据区域,起始地址为 0x000000 。
  2)单元2:00 08 00 04 84 00 00 40
  数据长度为8个 Byte, DB4 数据区域,起始地址为 0x000040 。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据_25

图4.4.3 读取请求2

  (4) 读取返回2
  头部部分: PDU 类型为 0x03 (确认数据响应),参数部分总长度为2( 0x0062 )个 Byte ,数据部分总长度24( 0x0018 )。
  参数部分:功能码为 0x04(读取数值),2个单元,一般情况每个单元前2个 Byte 相同(0xff + 0x04,读取成功,按 Byte / Word / DWord 读取,长度按 Bit 计算),其余 Byte 含义分别如下:
  1)单元1:00 40 00 01 02 03 04 05 06 07
  数据长度为64( 0x40 )个 Bit ,DB4.0( DWord ) = 0x00010203, DB4.2( DWord ) = 0x02030405,DB4.4( DWord ) = 0x04050607 。
  2)单元2:00 40 08 09 0a 0b 0c 0d 0e 0f
  数据长度为64( 0x40 )个 Bit ,DB4.6( DWord ) = 0x06070809, DB4.8( DWord ) = 0x08090a0b,DB4.10( DWord ) = 0x0a0b0c0d,DB4.12( DWord ) = 0x0c0d0e0f,DB4.14( Word ) = 0x0e0f 。



Nagios配置监控网络交换机 监控交换机需要设置ip_数据区_26

图4.4.4 读取返回2

六、附录:功能码

功能码

含义

0x00

CPU serivces ,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

七、附录: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

八、附录:数值传输码

功能码

含义

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

九、附录:数据区域码

Hex

Value

描述

0x03

System info of 200 family

200系列系统信息

0x05

System info of 200 family

200系列系统信息

0x06

Analog inputs of 200 family

200系列模拟量输入

0x07

Analog outputs of 200 family

200系列模拟量输出

0x80

Direct peripheral access( P )

直接访问外设

0x81

Inputs( I )

输入( I )

0x82

Outputs( Q )

输出( Q )

0x83

Flags( M )

输出( M )

0x84

Data blocks ( DB )

数据块( DB )

0x85

Instance data blocks( DI )

背景数据块( DI )

0x86

Local data( L )

局部变量( L )

0x87

Unknown yet( V )

全局变量( V )

0x1c

S7 counters( C )

S7 计数器( C )

0x1d

S7 timers( T )

S7 定时器( T )

0x1e

IEC counters( 200 family )

S7 计数器(200系列)

0x1f

IEC timers( 200 family )

S7 定时器(200系列)

十、附录:返回码

功能码

含义

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 ,成功