简介
PROFINET通信数据从应用角度分类,主要可以分为3种数据,分别是IO数据,记录数据,报警数据。本文分析的非周期数据是记录数据。非周期数据可以用来一次读或写多个行规参数(如驱动器的PROFIdrive行规)或驱动器内部功能码参数。在西门子PLC中使用的“WRREC”,”RDREC”,”SINA_PARA”,”SINA_PARA_S”功能块,对驱动器进行参数读写,就是非周期数据通信,在这里特别说明报文中的PKW并非是非周期数据通信,属于IO数据通信。
简单说一下PROFINET中周期数据和非周期数据的区别。IO数据(报文中的PZD数据)属于周期数据也叫过程数据,这类数据每个通信周期都会在PLC(主站)和驱动器(从站)之间进行交互,所以它的实时性较高,属于主从站都要优先处理的数据。记录参数是非周期数据通信,由PLC(主站)通过触发方式(调用功能块,触发读写位)发送请求,驱动器(从站)应答请求,类似Modbus的请求应答方式,主从站对非周期数据的处理相对IO数据的优先级低,所以会看到PLC发送出的非周期数据,驱动器并不是在下一条数据帧就立即回复PLC,而是中间间隔IO数据帧。
实验器材
PLC: 西门子S7-1511PN
驱动器:博能传动AX驱动器
网络分析仪: 赫优讯 netANALYZER
软件:TIAv15.1 , Wireshark
组态的报文是西门子105报文,其他报文也都可以。
PROFINET的非周期数据读参数的原理
1. PLC发送写请求,将需要读取参数的PNU(参数号)发给驱动器。
2. 驱动器收到后,回复写请求,告知PLC,请求已经收到。
3. PLC发送读取数据请求
4. 驱动器收到后,回复读取数据请求,将数据值发送给PLC
读取参数报文抓取分析
PLC读取PNU979[0..10]参数,从抓包的数据可以看到主从站在收到非周期数据后并非马上处理回复的,而是中间夹杂着IO数据帧。
PLC IP:192.168.0.1 Siemens_4a:19:7e
驱动器 IP:192.168.0.2 SiemensN_02:01:10
1. PLC发送写参数请求,请求的类型是Value“参数值“,数量是11个,起始参数是PNU979[0]
2. 驱动器应答写参数请求,Status:OK,写请求成功
3. PLC发送读参数请求
4.驱动器应答,并返回读取到的参数,读取到的数据存放在Long frame中。
PNU979参数是PROFIdrive规定的参数,包含编码器的类型以及格式等信息,值的含义这里就不做解释了,这里只分析数据帧的结构。
数据 | 说明 |
---|---|
0x07 | PNU979所有参数的数据类型均为无符号32位 |
0x0b | 参数数量是11个 |
0x0000_5112 | PNU979[0]的值 |
0x8000_0002 | PNU979[1]的值 |
0x0080_0000 | PNU979[2]的值 |
0x0000_0000 | PNU979[3]-PNU979[10]的值 |
写参数的过程类似,就不举例了。
此链接是本次实验用Wireshark抓取的数据包,感兴趣可以下载后自己分析