工业以太网的三种实时路线
首先分分类,以下几个同学在不同的OSI层级上实现实时性,所以性能及通用性都各有千秋。
总的来说,第一梯队的Ethercat/SERCOSIII/PROFINETIRT使用了修改的以太网包,直接改动了链路层,所以性能最高但是通用型最差;
第二梯队的PowerLink和Profinet RT修改了以太网传输层而保留了完整的链路层,故而实时性能和通用型均处于中间层次;
Ethernet/IP和Profinet直接使用了以太网的传输层,由于冲突检测和故障重传的机制必然会带来不确定性和延时,这两种协议只能实现软实时。但同时也具有最好的以太网兼容性能。
类型一:软实时
以Ethernet/IP、Profinet为代表,仅仅在应用层利用软件方式实现实时性,可以理解成基于“时间控制”的实时(相对“周期控制”而言),即只需保证每个从站在deadline之前收到包,然后通过时间同步来提高实时性。能够实现这些,以下三大法宝缺一不可:
- UDP:基于UDP而不是TCP,UDP更快更简单而且不需建立连接;
- QOS(Quality of Service):保证每个从站在周期结束之前必须收到包;
- IEEE1588 :通过IEEE1588协议来让从站拥有精确的同步时钟,保证从站动作能够同步;
类型二:基于以太网帧
以PowerLink和Profinet RT为代表。核心思想是,既然导致以太网不能实时的主要因素是避免介质访问冲突的CSMA/CD机制带来的不确定性延时,那么我们修改下介质访问的方式不就得啦:大家也不要通过监听和竞争的方式来获取总线占有权,排排队分时间片来使用总线就好了。在这种方式下,所有从站不再主动竞争总线使用权,而让主站作为管理者来调度从站对总线的占用。
最容易想到的方式就是想下图,一个周期开始,每个从站依次按各自的时间片收发实时数据包,每个实时数据包也是一个以太网包。最后会留一段空余时间来收发非实时的普通以太网数据。
SERCOS III也使用了以下这种时间片的介质访问方式,但区别是只有非实时阶段才使用以太网包,实时阶段使用了定制优化了的组帧方式,所以总的来说并没有兼容以太网的链路层。
类型三:基于集束帧
这一类主要是Ethercat和SERCOS-III。
Ehtercat的实现方式可以比喻成一列依次经过所有从站的火车:所有从站的数据集成在一个以太网包中,依次经过每个从站,经过的时候从站从中取出发给自己的下行数据,同时把上行数据塞进包中。所有从站加在一起可以理解成一个以太网节点,而每个从站的数据则是以太网包文中的一个子包。相较于轮询所有从站的方式,这种方式显然具有更高的数据吞吐率和更短的通信周期。
SERCOS-III的实现方式稍有区别:一个周期开始先采用时间片划分的方式传输完每个从站的实时数据,实时数据结束到周期结束前的一段时间片用来传输非实时包,仅非实时包是标准的以太网包。