3. 数据链路层与介质访问控制:谁先说话?

大家好,我是老张。今天咱们聊聊数据链路层里一个特别核心的问题——介质访问控制。说白了,就是总线上那么多设备,到底谁先说话?谁后说话?

这个问题,我在现场调试时遇到过太多次了。有一次在钢铁厂,一条Profibus DP总线挂了几十个变频器,结果时不时就丢一包数据。查了半天,发现是某个从站的响应时间超了,把整个总线的时序给打乱了。嗯,这就是介质访问控制没设计好带来的麻烦。

3.1 主从模式:简单粗暴,但有效

主从模式,我个人觉得是最容易理解的一种方式。总线上只有一个主站,其他全是小弟。主站问谁,谁才能回答。

举个例子,Modbus RTU就是典型的主从模式。主站发一个请求帧,从站收到后回复响应帧。其他从站?老老实实听着,别插嘴。

核心特点:

  • 只有一个主站,多个从站
  • 从站不能主动发数据
  • 主站轮询所有从站
  • 实现简单,成本低

我在一个水处理项目中用过Modbus RTU,挂了几十个仪表。主站是一个PLC,轮询一圈大概200毫秒。说实话,对于过程控制来说,这个速度完全够用。但你要是用在运动控制上,那就等着哭吧。

避坑指南:我曾经在一个项目中,从站数量太多,轮询周期拉到了1秒以上。结果操作员按了按钮,阀门要等1秒才动。这谁受得了?所以,主从模式适合从站数量不多、实时性要求不高的场景。

3.2 令牌传递:轮流坐庄

令牌传递,说白了就是大家轮流当老大。总线上有一个特殊的帧叫「令牌」,谁拿到令牌,谁就有发言权。

Profibus FMS和早期的工业以太网都用过这种方式。我记得有一次调试Profibus,发现某个站老是拿不到令牌,后来发现是它的令牌超时时间设得太短了。

个人经验:令牌传递的好处是每个站都有机会发数据,不会出现某个站被饿死的情况。但坏处是,如果某个站挂了,令牌就传不下去了。所以一般都有个「令牌超时」机制,超时了就重新选举。

3.3 CSMA/CD:先听后说,撞了重来

CSMA/CD,全称是载波监听多路访问/冲突检测。你想想看,就像一群人开会,谁想说话就先听听有没有人在说。没人说,你就说。如果两个人同时说了,那就都停下来,等一会儿再试。

这就是经典的以太网用的方式。早期的10BASE5、10BASE2同轴电缆网络,用的就是CSMA/CD。

但这里有个问题——冲突。我在一个工厂里见过,网络流量一大,冲突就多,重传就多,效率直线下降。说白了,CSMA/CD适合轻负载的网络,重负载下性能会急剧恶化。

关键点:

  • 先监听,再发送
  • 检测到冲突就停止
  • 随机等待后重试
  • 负载越高,效率越低

3.4 CSMA/CA:先打招呼,再说正事

CSMA/CA,载波监听多路访问/冲突避免。和CSMA/CD的区别在于,它不等到冲突发生,而是提前避免冲突。

怎么避免?发送前先发一个短帧,告诉所有人「我要说话了,你们别抢」。这就是RTS/CTS机制。

无线网络(比如WiFi)用的就是CSMA/CA。为什么?因为无线环境下,检测冲突太难了。你发送的信号和你接收的信号混在一起,根本分不清谁是谁。

我建议:如果你在做无线现场总线项目,一定要考虑CSMA/CA的隐藏节点问题。两个设备都能和AP通信,但互相听不见对方,这就容易出问题。

3.5 确定性调度机制:EtherCAT的集总帧

前面说的几种方式,说白了都是「随机」的。谁抢到谁说话,或者轮到谁谁说话。但对于运动控制、机器人这些场景,需要的是「确定性」——我知道下一毫秒谁会发数据,发什么数据。

EtherCAT就是这方面的代表。它用了一种叫「集总帧」的技术。

什么意思?主站发一个帧,这个帧里包含了所有从站的数据。帧从第一个从站开始传,每个从站读取自己的数据,同时把自己的数据写进去。帧走到最后一个从站,再原路返回。

你想想看,这就像一列火车,每个站上货卸货,火车不停,效率极高。

EtherCAT集总帧的特点:

  • 一个帧包含所有从站数据
  • 从站处理数据时帧不停
  • 极低的延迟(微秒级)
  • 完美的确定性

我记得第一次用EtherCAT调试伺服驱动器时,看到100微秒的周期时间,真的被震撼到了。相比之下,传统的现场总线动不动就是几毫秒甚至几十毫秒。

注意:EtherCAT虽然快,但对从站芯片有要求。必须用专用的ESC(EtherCAT从站控制器)芯片,或者用FPGA实现。普通的MCU跑不起来。

3.6 知识体系总览

下面这张图,是我自己总结的介质访问控制知识体系。你可以看到,不同的方式适用于不同的场景。

介质访问控制方式对比 主从模式 典型协议:Modbus 特点:一主多从 适用:过程控制 实时性:低 令牌传递 典型协议:Profibus 特点:轮流发言 适用:中等规模 实时性:中 CSMA/CD 典型协议:以太网 特点:冲突检测 适用:办公网络 实时性:低 CSMA/CA 典型协议:WiFi 特点:冲突避免 适用:无线网络 实时性:中 确定性调度机制 典型协议:EtherCAT 核心技术:集总帧 特点:微秒级确定性 适用:运动控制、机器人 实时性:极高 实时性从低到高:主从模式 → CSMA/CD → 令牌传递 → CSMA/CA → 确定性调度

从这张图可以看出来,不同的介质访问控制方式,其实是在「简单性」和「实时性」之间做权衡。主从模式最简单,但实时性最差。EtherCAT的集总帧最复杂,但实时性最好。

我个人建议,选型时先问自己三个问题:

  1. 我的系统需要多快的响应?毫秒级?微秒级?
  2. 总线上有多少个设备?
  3. 成本敏感吗?

想清楚这三点,你就能选出合适的介质访问控制方式了。

最后说一句:没有最好的协议,只有最合适的协议。我在现场见过用Modbus跑运动控制的,也见过用EtherCAT做温度采集的。嗯,前者基本跑不动,后者纯属浪费。选对工具,事半功倍。


公众号:蓝海资料掘金营,微信deep3321