通过Wireshark抓包分析PROFINET网络通讯报文之二

本文接上一篇,详细分析PROFINET通讯中的具体报文。PROFINET通讯过程大致包含分配设备名称,启动前寻址,建立连接,周期性通讯四个方面【我们依然用骥远的PN网关作为从站设备,因为骥远PN网关通过了PN一致性认证,并且内部采用软协议栈实现,能更好的看到协议内部过程】。

分配设备名称报文

PROFINET通讯协议下的系统被组态后经过工程工具将数据交换所需的所有信息下载到控制器,包括所连接设备的IP地址,控制器可根据设备名称识别出被组态的现场设备,并为其分配所定义好的IP地址。
为了清晰的做出对比演示,我们首先使用博图软件搜索当前连接从站的设备信息,可以看到从站模块的设备名称为“entalk-3”,IP地址为“192.168.0.36”,如图所示:

图 - 1

创建完成新工程并组态配置之后,我们需要对从站设备进行设备名称分配,在分配设备名称时抓取PN报文,名称分配总是使用“DCP”报文,该协议默认集成在每个PROFINET设备中,如图所示:

图 - 2

图 - 3

如图-3所示,所标记出的两条“PN - DCP”报文,第一条为从博图软件所在设备向PN从站发出分配设备名称的DCPSet请求,“Set Req”报文写入设备名称“entalk -- et300”,并执行永久性分配,设备重启也会保持设备名称不变,如图所示:

图 - 4

如图-3所示,所标记出的两条“PN - DCP”报文,第二条为从从站设备向分配设备名称端回复的DCPSet响应报文“Set OK”,表示分配设备名称动作成功完成,名称分配成功,如图所示:

图 - 5

系统启动前寻址

在系统启动之前,控制器会对网络中的所有PROFINET设备进行寻址,在寻址完成之后进行主从站的配置写入,当我们使用工程工具将工程配置下载到控制器与网络内所连接的从站设备时,主从站设备开始尝试通讯连接,在建立连接之前一般存在三个步骤:“检查名称”、“检查IP”与“设置IP”,三个步骤依次进行。

  1. 检查名称

在建立连接时,基于从工程工具下载的组态数据,控制器会先发出“DCPIdentify.req”报文检查所组态的名称是否存在,如果具有所请求名称的相应IO现场设备做出回应,则进行下一步骤,如图-6所示为控制器发送到现场网络中寻找设备名称为“entalk--et300”的设备Identify的请求报文“Ident Req”:

图 - 6

如图-7所示为从站设备回复给控制器的Identify的回应报文“Ident OK”,在底部详细说明里可以看到当前设备回复给控制器的相关信息:“当前设备名称”、“设备类型”、以及“当前设备IP地址”等信息描述:

图 - 7

  1. 检查IP

如上述所示,在完成“检查名称”操作之后,开始进行“检查IP”步骤,此步骤目的在于在分配IP地址前使用标准IP服务的ARP进行地址解析,以此确保同一个IP地址不会在网络中被分配两次。

由于我们本次测试采用分配系统特定的IP地址方式进行,所以此步骤在报文中不做体现,“检查名称”步骤完成之后直接进行“设置IP”操作。

  1. 设置IP

如图-8所示,在开始“设置IP”步骤时,由主站向从站发出“DCPSet请求”报文“Set Req...IP”,报文中包含需要为从站设备设置的IP地址相关信息。

图 - 8

当从站收到主站所发出的“DCPSet请求”报文“Set Req...IP”之后,会对主站做出回应并回复“DCPSet响应”报文“Set OK”,并设置从站设备IP地址为待设定的配置参数,如图所示:

图 - 9

在从站回应主站请求并设定IP地址之后主站会在现场网络中发送一包ARP请求报文来确认网络中的设备IP地址是否修改成功,从站接收到ARP请求之后回复一包ARP报文告诉控制器IP地址已经修改成功,如图所示:

图 - 10

图 - 11

PROFINET通讯建立连接报文

在系统启动前的寻址操作三个步骤完成之后,开始PROFINET系统启动,由控制器发起建立与从站设备之间的通讯连接,我们在Wireshark的过滤栏中输入“_ws.col.protocol == "PNIO-CM"”就能过滤出PROFINET系统启动时的网络报文,如下图所示:

图 - 12

首先控制器会发出“Connect帧”报文“Connect.req”用来建立连接,并传输建立AR和必要的CR所需的所有数据,如下图所示:

图 - 13

当“Connect.req”成功后,从站向控制器回复“Connect帧”报文“Connect.res OK”表示连接已经成功建立,如下图所示:

图 - 14

紧接着控制器使用随后的“Write帧”报文“Write.req”来参数化已组态的子模块,即将组态的配置参数写入到从站设备中,如下图所示:

图 - 15

当“Write.req”成功后,从站向控制器回复“Write帧”报文“Write.res OK”表示子模块参数配置已经下载成功,如下图所示:

图 - 16

当所有参数都已经被下载到设备中,则控制器使用“DControl帧”报文“DControl.req”来标记参数化配置结束,如下图所示:

图 - 17

当从站设备收到从控制器发出的“DControl帧”报文请求后,从站确认控制器参数化配置已下载完成,回复“DControl帧”报文响应“DControl.res OK”,此时用户软件创建最终的数据结构并更新子模块的状态,如下图所示:

图 - 18

当设备中所有的数据结构都已经创建完成并已完成必要检查,则从站设备向控制器发送“CControl帧”报文“CControl.req”来通知控制器已准备好进行数据通信,如下图所示:

图 - 19

当控制器收到从从站设备发出的“CControl帧”报文请求后,控制器回复“CControl帧”报文响应“CControl.res OK”,此时PROFINET系统启动过程结束、通讯配置建立完成,如下图所示:

图 - 20

周期性通讯数据

当控制器与现场从站设备通讯成功之后,通过Wireshark软件抓取到的报文将变为PN通讯中主从站之间所交互的周期性数据报文,如下图所示:

图 - 21

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值