今天我们开始故事6,继续故事5来讨论一下PROFINET中带宽。在故事5中,提到了带宽的两个单位,一个是Mbits/S,例如100MBits/S,就是我们常说的快速以太网的百兆带宽;一个是us,例如7.04us,就是Zui小PROFINETRT报文在快速以太网上的传输时间。而在Step7中显示0.704%,表示的是循环数据的计算带宽,即在1ms中PROFINETRT报文所传输的时间为0.00704ms,那么就占用了1ms的0.704%。
这里有三个问题我们需要考虑清楚,第一个问题,1ms表示的什么?是否是用户定义的IO的刷新时间?第二个问题,PROFINETRT报文的传输时间计算为什么要考虑MinNRTGap;第三个问题PROFINET计算的带宽(Calculatedbandwidth)为什么以时间为单位。
我们先看第二个问题,这个答案我简单的描述一下,与传统的TCP/IP,或者用户常常使用的S7通信不同,PROFINET的循环数据,例如RT数据,IO控制器在一个SendClock中发送多个RT报文时,这些RT报文是肩并肩、连续发送出去的,那么大家可能会回想做TCP/IP通信,TCP的报文不也是连续的吗,这些报文不是肩并肩,也就是报文和报文之间的时间间隔时间都比较长,这个NRTGAP可以忽略不计,而PROFINET由于其实时性的要求,RT报文都是肩并肩排队发送出去的,这时RT报文之间的间隔就变为MinNRTGap,也就是12个字节,是报文之间Zui小的时间间隔。PROFINET循环数据的计算传输时间7.04us就需要考虑这12个字节。
再回答第一个问题,因为在问题2的解答中,我提到了Send Clock这个概念,而我们在Step7组态PNIO通信时,大家可能会经常看到,那么它和Update time之间的区别或者有什么关联呢?
IO控制器中的Send Clock的设置:
IO Device中的Update Time的设置:
先描述一下SendClock,这个词中文翻译就是发送时钟,用来表示在一个发送时钟的时间间隔内提供RT/IRT数据的能力,或者说是发送RT/IRT数据的Zui小时间间隔,说是RT/IRT数据的出现本质上是在SendClock时间内。说来说去,大家可能还是不理解,那么我们再结合UpdateTime,例子中为2ms,就是用户希望IO控制器与IO设备相互交换数据的循环周期时间。而2ms的UpdateTime实际上有2个Send Clock组成,这样Update Time=Send Clock x Reduction Ration(2ms=1msx2),2就是这个例子中的减速比。也许大家看过详细的PROFINET标准中关于这方面的计算,还有Sendclockfactor,Phase等其它概念,这些放在一起计算比较复杂且难以理解,这里我所描述的公式更便于大家理解。PROFINET的SendClock就是发送RT数据的时间单位,为了优化带宽,RT数据会自动分布在多个SendClock中,下图例子中使用了2个IO设备,Send Clock为1ms,UpdateTime都是2ms。图中是优化的结果,两个IO设备的刷新时间都是2ms,而不是Frame1和Frame2都出现在SendClock1中。