先说一个很多人没意识到的点:拿参数表比这两个总线,比速率、比距离,其实比偏了。
CAN和RS485根本不在一个层面上。
RS485是个电气标准,它只规定两根线上用什么电平表示0和1。至于谁先说话、两个人同时说怎么办、数据传错了怎么处理——它一概不管,全得你自己在应用层解决,最常见的做法就是Modbus RTU主从轮询:主设备挨个问,从设备挨个答。
CAN是把“交通规则”做进了硬件里。每个节点都能主动发言,两个节点同时抢总线时,按报文ID逐位仲裁,ID小的赢、输了的一方自动退让,一帧数据都不浪费。检错也一样:CRC校验、应答确认、故障节点自动隔离,全是硬件自带的。
一句话:RS485你得自己当交警,CAN的交警是焊在芯片里的。
这个差别直接决定了两者的适用场景——尤其是当总线上节点一多、轮询周期一拉长,RS485系统里排在队尾的节点要等主设备把前面十几个都问完才轮到自己。如果这个节点上报的是过温告警、急停信号这类“晚一秒就出事”的信息,排队等待就是隐患。CAN没有这个问题,高优先级的告警帧触发即抢占总线,几十毫秒内送达。
参数对比
| 维度 | RS485 | CAN |
|---|---|---|
| 通信模式 | 主从轮询为主(半双工) | 多主对等,任意节点可主动发送 |
| 实时性 | 取决于轮询周期,节点越多越慢 | 毫秒级,高优先级帧优先传输 |
| 速率与距离 | 100kbps下约1200米;短距离可到10Mbps | 1Mbps对应约40米,降到5kbps可拉到10公里 |
| 节点数 | 标准32个,用高阻抗收发器可扩到256 | 单段工程上30~110个 |
| 检错机制 | 靠上层协议自行处理 | 硬件内置CRC、ACK、错误隔离 |
| 芯片成本 | 收发芯片便宜 | CAN控制器芯片贵约5倍 |
| 典型协议 | Modbus RTU | CANopen、J1939、CiA402 |
对号入座
三个常见的坑
坑一:拿CAN干RS485的活。 就几个传感器轮询读数,非要上CAN——芯片贵、协议栈开发复杂,收益为零。杀鸡用牛刀,牛刀还难磨。
坑二:拿RS485干CAN的活。 节点一多、轮询周期一拉长,实时性直接崩;而且485没有硬件级检错,现场干扰一上来,误码了你都不知道错在哪。
坑三:忘了终端电阻。 不管CAN还是485,主干线两端各要一个120Ω终端电阻。现场通信“时好时坏、波形发毛”,查半天程序,最后发现是电阻没接——这种事工程师碰过不止一次。
拿不准的时候,其实可以都要
工业项目里最常见的做法不是二选一,而是分层:控制层走CAN,采集层走RS485,中间用一块主控板做网关转接。很多AGV和储能柜就是这么干的——电机控制、急停这些关键链路走CAN,温度、电量这些慢变量走485,各取所长。
我们奥鲲做核心板和定制板卡,CAN和485都是标配,多路CAN、隔离485、CANFD这些都能按项目加。选型上拿不准的,把项目情况发过来:接什么设备、多少个节点、最远距离多长、哪些信号对实时性敏感。 工程师帮你把两条总线怎么分、接口怎么配捋清楚,方案直接落到板子上。
