zoukankan      html  css  js  c++  java
  • 工业以太网的三种实时路线

    首先分分类,以下几个同学在不同的OSI层级上实现实时性,所以性能及通用性都各有千秋。

    总的来说,第一梯队的Ethercat/SERCOSIII/PROFINETIRT使用了修改的以太网包,直接改动了链路层,所以性能最高但是通用型最差;

    第二梯队的PowerLink和Profinet RT修改了以太网传输层而保留了完整的链路层,故而实时性能和通用型均处于中间层次;

    Ethernet/IP和Profinet直接使用了以太网的传输层,由于冲突检测和故障重传的机制必然会带来不确定性和延时,这两种协议只能实现软实时。但同时也具有最好的以太网兼容性能。

    clip_image001

    类型一:软实时

    以Ethernet/IP、Profinet为代表,仅仅在应用层利用软件方式实现实时性,可以理解成基于“时间控制”的实时(相对“周期控制”而言),即只需保证每个从站在deadline之前收到包,然后通过时间同步来提高实时性。能够实现这些,以下三大法宝缺一不可:

    1. UDP:基于UDP而不是TCP,UDP更快更简单而且不需建立连接;
    2. QOS(Quality of Service):保证每个从站在周期结束之前必须收到包;
    3. IEEE1588 :通过IEEE1588协议来让从站拥有精确的同步时钟,保证从站动作能够同步;

    类型二:基于以太网帧

    以PowerLink和Profinet RT为代表。核心思想是,既然导致以太网不能实时的主要因素是避免介质访问冲突的CSMA/CD机制带来的不确定性延时,那么我们修改下介质访问的方式不就得啦:大家也不要通过监听和竞争的方式来获取总线占有权,排排队分时间片来使用总线就好了。在这种方式下,所有从站不再主动竞争总线使用权,而让主站作为管理者来调度从站对总线的占用。

    最容易想到的方式就是想下图,一个周期开始,每个从站依次按各自的时间片收发实时数据包,每个实时数据包也是一个以太网包。最后会留一段空余时间来收发非实时的普通以太网数据。

    SERCOS III也使用了以下这种时间片的介质访问方式,但区别是只有非实时阶段才使用以太网包,实时阶段使用了定制优化了的组帧方式,所以总的来说并没有兼容以太网的链路层。

    clip_image002

    类型三:基于集束帧

    这一类主要是Ethercat和SERCOS-III。

    Ehtercat的实现方式可以比喻成一列依次经过所有从站的火车:所有从站的数据集成在一个以太网包中,依次经过每个从站,经过的时候从站从中取出发给自己的下行数据,同时把上行数据塞进包中。所有从站加在一起可以理解成一个以太网节点,而每个从站的数据则是以太网包文中的一个子包。相较于轮询所有从站的方式,这种方式显然具有更高的数据吞吐率和更短的通信周期。

    clip_image003

    SERCOS-III的实现方式稍有区别:一个周期开始先采用时间片划分的方式传输完每个从站的实时数据,实时数据结束到周期结束前的一段时间片用来传输非实时包,仅非实时包是标准的以太网包。

    clip_image004

  • 相关阅读:
    纯js实现10分钟倒计时
    js中的constructor
    双指放大缩小问题(不需要第三方插件)
    js异步加载的3种方式(转载)
    5种处理js跨域问题方法汇总(转载)
    oncopy="document.selection.empty()"跟oncopy="return false"什么区别?
    十进制 转换为 二进制
    99%的人都理解错了HTTP中GET与POST的区别(转载
    简单封装:检测邮箱是否合法
    Xshell记录日志的方法
  • 原文地址:https://www.cnblogs.com/lobster89/p/8409763.html
Copyright © 2011-2022 走看看