今天我们开始故事6,继续故事5来讨论一下PROFINET中带宽。在故事5(我与PROFINET不得不说的事-05-带宽-技术论坛-工业支持中心-西门子中国 (siemens.com.cn))中,提到了带宽的两个单位,一个是Mbits/S,例如100MBits/S,就是我们常说的快速以太网的百兆带宽;另外一个是us,例如7.04us,就是最小PROFINET RT报文在快速以太网上的传输时间。而在Step7中显示0.704%,表示的是循环数据的计算带宽,即在1ms中PROFINET RT报文所传输的时间为0.00704ms,那么就占用了1ms的0.704%。
这里有三个问题我们需要考虑清楚,第一个问题,1ms表示的什么?是否是用户定义的IO的刷新时间?第二个问题,PROFINET RT报文的传输时间计算为什么要考虑MinNRTGap;第三个问题PROFINET计算的带宽(Calculated bandwidth)为什么以时间为单位。
我们先看第二个问题,这个答案我简单的描述一下,与传统的TCP/IP,或者用户常常使用的S7通信不同,PROFINET的循环数据,例如RT数据,IO控制器在一个Send Clock中发送多个RT报文时,这些RT报文是肩并肩、连续发送出去的,那么大家可能会回想做TCP/IP通信,TCP的报文不也是连续的吗,但是这些报文不是肩并肩,也就是报文和报文之间的时间间隔时间都比较长,所以这个NRTGAP可以忽略不计,而PROFINET由于其实时性的要求,RT报文都是肩并肩排队发送出去的,这时RT报文之间的间隔就变为MinNRTGap,也就是12个字节,是报文之间最小的时间间隔。所以PROFINET循环数据的计算传输时间7.04us就需要考虑这12个字节。
然后再回答第一个问题,因为在问题2的解答中,我提到了Send Clock这个概念,而我们在Step7组态PN IO通信时,大家可能会经常看到,那么它和Update time之间的区别或者有什么关联呢?
IO控制器中的Send Clock的设置:
IO Device中的Update Time的设置:
先描述一下Send Clock,这个词中文翻译就是发送时钟,用来表示在一个发送时钟的时间间隔内提供RT/IRT数据的能力,或者说是发送RT/IRT数据的最小时间间隔,再者说是RT/IRT数据的出现本质上是在Send Clock时间内。说来说去,大家可能还是不理解,那么我们再结合Update Time,例子中为2ms,就是用户希望IO控制器与IO设备相互交换数据的循环周期时间。而2ms的Update Time实际上有2个Send Clock组成,这样Update Time=Send Clock x Reduction Ration (2ms=1msx2),2就是这个例子中的减速比。也许大家看过详细的PROFINET标准中关于这方面的计算,还有Sendclockfactor,Phase等其它概念,这些放在一起计算比较复杂且难以理解,这里我所描述的公式更便于大家理解。PROFINET的Send Clock就是发送RT数据的时间单位,为了优化带宽,RT数据会自动分布在多个Send Clock中,下图例子中使用了2个IO设备,Send Clock为1ms,Update Time都是2ms。图中是优化的结果,两个IO设备的刷新时间都是2ms,而不是Frame1和Frame2都出现在Send Clock1中。
大家可能还是不能有感性的认知。结合上图给大家展示一个实验的结果,使用S7-1500作为IO控制器,(其它PLC也可以),使用两台ET200SP,在IO控制器侧设置Send Clock为1ms,IO设备侧设置的刷新时间为2ms,那么可见下图左侧的实时数据的带宽。如果在IO控制器侧设置Send Clock为2ms,IO设备侧的刷新时间仍为2ms,那么可见下图右侧的实时数据的带宽。由此一目了然!
我再具体解释一下,大家可以仔细观察Wireshark中的IO Graphs中的记录带宽结果,因为只有2个站,且数据较少,带宽不高,左侧图中带宽约为512bits/ms,右侧图中带宽是震荡的,最高为1025bits/ms,如果大家抓包请注意我图片中设置的单位和缩放后的刻度。右侧图中的带宽震荡的根本原因是2ms的Send Clock中发送2个IO RT的数据是肩并肩的出现的,如下图。
然后我们再谈论第三个问题,结合第二个问题的回答,PROFINET的带宽计算以时间为单位是由于在Step7中计算RT或者IRT数据占用的带宽的大小的基数是Send Clock,且Send Clock的单位是时间,所以计算的RT/IRT预留带宽的大小就以时间为单位。而这个预留带宽的计算是基于IO控制器的接口输出RT/IRT数据的带宽计算结果。还是以上述的例子,在Send Clock的时间为2ms,那么2个RT数据在一个Send Clock中的发送是肩并肩的,下图Wireshark中MAC地址:F1是IO控制器,:8A和:41分别是两台IO设备。根据记录时间77112-70072,结果恰恰是7.04us,那么两个RT实时数据的带宽预留时间为7.04x2=14.08us。
此时Step7中的计算结果就如上述的计算结果一样,RT的计算带宽为0.014ms,而0.08us做了省略,因为0.704%的计算结果源于在2ms中PROFINET报文所传输的时间为0.01408ms,那么还是占用了0.704%(0.01408/2)。需要注意的是这个2ms是Send Clock,而不是Update Time,切记!
以上就是我对这3个问题的解答,这里我想和大家讨论一下,根据故事中的知识,如果有4个IO设备,其中的1号设备的刷新时间是8ms,2号设备的刷新时间是4ms,3号设备的刷新时间是2ms,4号设备的刷新时间是1ms,而IO控制器中设置的Send Clock为1ms,那么大家是否可以做出RT数据的时钟分布图,大家可以尝试一下来理解Send Clock和Update Time之间的区别。
还有我想倾听一下大家的想法和需求,需要我给大家阐述哪些相关的PROFINET知识和概念,大家可以点击下面的留言区,留下您的需求,我可以把你们的问题和我的答案编辑到我的故事中。如果您有相关的技术问题和疑问,我们也可以在这里相互交流。