PROFINET RT通信技术研究
2018-09-20刘柯耿春明夏继强
刘柯, 耿春明, 夏继强
(北京航空航天大学 机械工程及自动化学院, 北京 100191)
0 引 言
PROFINET基于工业以太网实现,从数据传输的快速性、实时性以及通信的安全性、可靠性出发,为自动化领域的网络通信提供了一套完整的解决方案[1]。为了满足用户不同的实时性需求,PROFINET提供了三种通信方式:UDP/IP、PROFINET RT、PROFINET IRT。本文主要研究使用广泛的PROFINET RT通信。
目前国外对PROFINET RT通信的性能和响应时间等方面作了较多的研究与分析[2-5],而国内对于PROFINET RT研究的文献并不是很多,多篇文献虽然对PROFINET RT通信作了简单的介绍,概括性地描述了PROFINET通信帧的组成及结构,但没有对PROFINET RT通信保证实时性的技术手段、通信规律等方面作出说明[6-9],而这些方面的研究将对深入理解PROFINET RT技术、利用这门技术更好地为相关产业服务产生重要影响。本文从PROFINET RT实现实时性的方法出发,介绍并分析了PROFINET RT通信的规律以及PROFINET RT通信帧结构与组态的关系。
1 PROFINET RT实时性的实现
PROFINET RT通信主要通过以下四个方面保障通信的实时性:
(1)传统的以太网利用CSMA/CD技术解决可能出现的网络竞争访问问题,从而导致数据发送和接收时间的不确定性。PROFINET技术充分利用交换机技术,通常在PROFINET设备上集成多个带交换功能的端口,减小了可能的数据通信冲突域。另外,PROFINET设备还支持IEEE 802.1Q标准,RT通信帧中携带标识优先级的VLAN标签,使得交换机中各种报文的发送有了先后顺序,降低了数据冲突的可能性[10]。
(2)如图1所示,传统以太网的四层模型包括应用层、传输层、网络层和链路层,而PROFINET的实时数据包括RT和IRT,旁路了TCP/UDP和IP层,精简了协议栈,减少了实时报文通过协议栈的时间,为快速生成报文和解析提供了有利条件[11-12]。
(3)PROFINET RT通信使用100 Mbps快速以太网,每个设备按照组态时设置的通信间隔周期性地与控制器通信。网络中各个设备的通信间隔可以不同,这样既能合理利用网络资源,也能降低网络堵塞的可能性。
(4)PROFINET RT使用了一系列的通信超时监视时间,如下文中的看门狗时间,如果在该时间段内设备或控制器没有接收到通信对象的数据,设备或控制器就将报警并启动相应的处理程序。
图1 PROFINET使用的精简协议栈模型
2 PROFINET RT通信的发送周期
在PROFINET RT通信中,控制器与设备间的通信遵循生产者-消费者模型,两者按照约定的通信间隔周期性地交换数据。PROFINET RT的总线发送周期是指在该时间段内控制器能获得网络中所有设备的实时数据,也就是对网络中的所有设备而言,在该时间段内每个设备至少向控制器发送了一次实时数据。而设备的发送周期是指设备每隔多长时间向控制器发送一次实时数据,每个设备的发送周期可以不同且网络中每个设备的发送周期都不能超过该网络的总线发送周期。
总线发送周期被分为多个时长相同的时段(Phase),时段的长度取决于网络中设备的实时性能和组态时的设定。在控制器参数化网络中的每个设备时,与时段长度相关的参数将在设备参数化阶段发送给设备。时段时长的计算公式如下:
Phase=SendClockFactor×31.25 μs
(1)
式中:SendClockFactor为发送时钟因子,其取值范围在设备的GSD(General Station Description)文件中说明。由于网络中每个设备可以有不同的发送周期,所以PROFINET RT定义了一个减速比(ReductionRatio)。减速比表示时段的倍数,代表每隔多少个时段设备发送一次实时数据,所以设备发送周期的计算公式如下:
SendCycle=ReductionRatio×Phase
(2)
对于PROFINET RT通信而言,设备支持的减速比范围与该设备的一致性类别有关。设备具体支持的减速比范围在设备的GSD文件中说明。SendClockFactor和ReductionRatio在参数化设备阶段通过连接请求帧发送给设备。
图2 关于发送数据时间间隔的参数
图2为利用Wireshark软件捕捉到的连接请求帧中关于设备发送数据的时间间隔参数,其中FrameID用于标识设备将来向控制器发送实时数据的RT帧,SendClockFactor和ReductionRatio用于确定设备的发送时间间隔,根据图中的信息可知该设备每隔2×32×31.25 μs即每隔2 ms向控制器发送一次实时数据。Phase告诉设备在哪个时段开始发送数据,FrameSendOffset告诉设备该设备发送时刻相对于总线发送周期开始时刻的时间差。由于PROFINET RT是子网内的非同步通信,网络中的每个设备并不知道总线发送周期的开始时刻。所以Phase和FrameSendOffset对于PROFINET RT通信无关紧要,每个设备仅遵守为它们定义的通信时间间隔。
图2中的WatchdogFactor表示看门狗时间因子,默认值为3,用户可以根据实际需要在组态软件中更改,由看门狗时间因子可计算出看门狗时间。如果在看门狗时间间隔内,控制器没有向设备发送实时数据,则设备应切换到安全状态。看门狗时间的计算公式如下:
WatchdogTime=WatchdogFactor×SendCycle
(3)
3 PROFINET RT帧结构
PROFINET RT通信帧的结构如表1所示。
表1 PROFINET RT帧结构
表1中相关数据解释如下:
7字节的前导码、1字节的帧起始定界符、目的MAC地址、源MAC地址与以太网帧的含义相同。
VLAN:PROFINET RT支持IEEE 802.1Q标准,RT帧中携带一个4字节的VLAN标签,用于区分实时帧与普通UDP帧的优先级。在VLAN标签中,一共有3个二进制位用于设置帧的优先级,也就是说共有8种优先级:0~7,其中0的优先级最低,7的优先级最高。PROFINET RT帧使用优先级6或7[13]。
Type:PROFINET RT的以太网帧类型为0x8 892。
FrameID:用于标识PROFINET RT帧,如图2中的FrameID所示,其具体的值由控制器在参数化设备阶段传递给设备,PROFINET RT帧的FrameID范围是:0x8 000~0xBFFF[14]。设备根据FrameID就可辨别使用的实时性类别。
RT Data:实时帧的数据部分。其组成结构与组态时在设备上使用到的模块/子模块有关,具体组成如表2所示。下文中的输入都是指设备到控制器,输出都是指控制器到设备。
表2 RT Data结构
表2中,Data表示子模块的IO数据,具体的字节数由使用的子模块定义。IOPS全称IO Provider Status,由数据生产者提供,代表数据状态,IOPS等于0x80代表子模块数据有效。IOCS全称IO Consumer Status,由数据消费者提供,代表子模块数据能否被相应的消费者正确处理,IOCS等于0x80代表消费者正确处理了该子模块的数据。
每个输入子模块或输出子模块的数据由Data、IOPS或IOCS组成,当子模块并不需要提供输入Data或接收输出Data部分时,子模块的数据组成将只有IOPS或IOCS。如果子模块既能提供输入数据又能接收输出数据,那么子模块的数据组成中除了Data和IOPS,还将出现IOCS。
由于IO数据是根据槽/子槽的组合寻址,不管是输入数据还是输出数据,RT Data部分都将按照组态时设备上使用的槽/子槽,从槽0开始依次排列使用到的模块/子模块的数据,并在每个子模块数据的相应位置附上子模块的IOPS或IOCS,所以实际RT Data部分的结构可能与表2不同,因为IOCS与IOPS出现的位置与次数将由组态时使用的模块/子模块的类别、数量和位置决定。
APDU:应用协议数据单元,具体结构如表3所示。
表3 APDU结构
CycleCounter为周期计数器,每增加1代表31.25 μs。网络中的设备根据参数化阶段控制器规定的通信间隔周期性的向控制器发送数据,设备根据自身的时钟每过31.25 μs就将CycleCounter加1并将CycleCounter放入APDU中一起发送给控制器[15]。控制器根据设备连续两次的数据帧中的CycleCounter之差检验设备的通信间隔是否满足要求。控制器发送给设备的输出数据中的CycleCounter也遵循相同的规律。
以图2的数据为例,设备每隔2 ms向控制器发送一次数据,那么连续两次实时帧中的CycleCounter之差应为:2X1000/31.25即64。如图3所示,SiemensA_8a:30:a2代表控制器,SiemensA_b3:24:24代表设备,控制器、设备相邻两次通信间的CycleCounter值为64。
由于CycleCounter只有两个字节,最大可表示的无符号数为65 535,随着通信的进行,CycleCounter不断增加,那么其值肯定会溢出。为了避免这种情况的发生,可以先用较大的数表示CycleCounter,如用4个字节表示CycleCounter,在CycleCounter增加后,直接取CyclCounter的低十六位。如果设备的硬件在数值溢出时的行为与上述相同,也可以直接使用两字节表示CycleCounter。
如图3所示,选中的SiemensA_b3:24:24的CycleCounter值为65 472,下一次应该发送的CycleCounter值为65 472加上64为65 536,超出了2个字节无符号数的表示范围。而65 536的十六进制为0x10 000,直接取其低十六位得到0x0000,与图3中下一次SiemensA_b3:24:24发出的实时帧中的CycleCounter一致。所以在实际应用中,控制器或设备相邻两次CycleCounter之差还应考虑溢出的特殊情况。
图3 CycleCounter在实际系统中捕捉到的值
DataStatus为数据状态,用于指示设备上是否存在较大问题以及设备的当前状态等。
TransferStatus为传输状态,在PROFINET RT通信中该字节为0x00。
FCS:四字节冗余校验。
4 结束语
本文论述和分析了PROFINET RT通信的规律及计算通信周期的相关参数,对PROFINET RT通信帧的结构组成作了较详细的介绍。PROFINET RT通信基于工业以太网实现,具有实时性高、通信帧携带数据量大和使用灵活等特点,可满足工厂自动化领域的使用要求。本文可为PROFINET设备的使用和开发提供一定的借鉴和帮助。