ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CAN总线远距离传输难?四种光纤组网方案对比与实战选型

CAN总线远距离传输难?四种光纤组网方案对比与实战选型 前阵子有个做隧道消防报警的兄弟来找我两个防火分区之间隔着一公里多CAN总线设备死活联不上现场还全是电缆沟和强电干扰。他的第一反应是多买几台中继器怼上去我说你先停一下这个距离靠中继器只是把问题往后挪不如直接上光纤。后来帮他重做了方案设备不但通了整个网络拓扑也清爽了很多。这篇文章就把我当时给他梳理的CAN总线远距离方案笔记整理出来核心是四种光纤组网选型点对点CAN转光纤转换器、总线型光纤中继器级联、光纤自愈环网、CAN over Ethernet。不搞理论堆砌直接讲每种方案怎么搭、能跑多远、有什么坑、适合什么场景。如果你正在做厂区跨车间通信、隧道沿线控制、光伏电站监控、轨道交通站间信号传输或者只是在纠结“CAN总线距离不够了到底怎么拉远”这篇文章应该能帮你省不少试错时间。1. 为什么联不上CAN总线的距离瓶颈不在线缆而在时序1.1 CAN协议的距离天花板是怎么算出来的很多人以为CAN总线距离短是因为双绞线损耗大实际不是。铜缆在低频下的衰减远没有到“传不了1公里”的程度真正的瓶颈是CAN协议本身的仲裁机制。CAN是半双工共享总线所有节点通过“显性位”和“隐性位”的竞争来决定谁先发报文。这意味着发送方必须在某个时间窗口内收到其他节点的应答ACK才能确认一帧发完了。问题就出在这个时间窗口上。总线越长信号在线上跑一个来回的传播延时越大。如果最远端的节点还没收到发送方的报文发送方就已经进入下一个位时序仲裁和应答判断就会混乱。所以CAN标准的做法是距离越远波特率就得越低。ISO 11898-2推荐的典型值1Mbps约40米500kbps约100米250kbps约250米125kbps约500米。这组数字是工程经验值实际使用还要看线缆质量、节点数量、支线长度经常打八折甚至对半砍。打个比方一群人围一圈喊口号大家必须按同一个节拍喊离得越远的人听到口令的延迟越大喊得越快就越乱。CAN总线的“距离”本质上是给信号传播预留的节拍余量。1.2 什么场景必须要上光纤我接触的远距离CAN项目里真正需要拉远的往往不是几栋楼之间几十米而是这种场景厂区两个车间相距1.5公里PLC在A车间现场IO站和仪表在B车间隧道里每隔几百米一个消防报警控制器整条隧道几公里光伏电站里逆变器、箱变分散在山坡上汇聚点在中控室高速公路门架或桥隧监控设备在野外机房在现场之外矿山皮带机沿线操作箱、水泵房分布在井下不同水平这些场景共同特点不只是远还包括强电磁干扰、雷击风险、地电位差。走铜缆即使勉强能通一次雷击或电机启动造成的干扰也足以让总线反复错误帧甚至Bus-Off。光纤的优势不是“远”这一个点而是损耗低、不受电磁干扰、天然电气隔离、能切断地环路。单模光纤1310nm波长的衰减只有约0.35dB/km几十公里都不用放大这在铜缆时代不敢想。1.3 光纤不是直接替换双绞线那么简单有一点必须先说清楚CAN是半双工多主总线一根双绞线上既能发也能收靠位仲裁决定优先级而光纤本质是单工点对点介质一根纤只能一个方向传。所以你不能像换网线一样把CAN的CANH/CANL直接接到光模块上必须有一个设备在中间做“转发”或“隧道”。转发和隧道听起来像一回事实际有本质区别转发是把CAN信号完整接收下来再重新发出两端的设备仍然感觉自己在一个总线上通信隧道则是把CAN报文封装成其他协议送出去到达对端再解包。这直接决定了实时性、仲裁行为、节点拓扑都不一样。市面上四种主流方案本质就是对“如何把CAN搬上光纤”这个问题的四种回答。2. 四种光纤组网方案逐个拆解拓扑、器件与适用边界2.1 方案一CAN转光纤转换器点对点/星型最短平快这是最直白的方案每个CAN设备前挂一个CAN转光纤转换器把原来两个CAN节点之间的双绞线换成光缆。[A设备] --CAN-- [转换器A] 光纤 [转换器B] --CAN-- [B设备]如果现场是多个分支点汇聚到中心机房可以选多光口版本的转换器做成星型[转换器B] --CAN-- [分支1] [中心设备]--CAN-- [中心转换器A] --光纤-- [转换器C] --CAN-- [分支2] [转换器D] --CAN-- [分支3]这类转换器市面上很常见工业导轨式一侧是CAN端子或DB9接口另一侧是ST/SC/FC光口正面配上电、CAN收发、光链路的指示灯。选型时注意一个关键概念它不是物理层的“光电转换”而是把CAN报文完整接收下来再通过光口按私有帧格式发给对端属于报文级存储转发。这意味着它对两端的CAN设备和上位机是透明的应用层不用改任何代码。优点很突出结构简单、成本最低、部署最快。两个点位之间拉一对转换器接上光缆就能通。缺点也很明显星型中心是单点故障中心转换器一断电或者光口坏了所有分支全断如果分支多中心多光口设备价格不便宜。另外转换器的转发性能参差不齐有些便宜模块在总线负载率超过30%时就开始丢帧这个后面专门讲。适合场景两个点位之间互拉、改造项目快速恢复通信、分支数量不多且中心点供电有保障的场合。2.2 方案二总线型光纤中继器级联保留总线拓扑的“手拉手”很多远距离场景不是两点互拉而是沿着一条路线串了十几个设备比如隧道里的消防报警控制器、皮带机沿线的操作箱。这时候用点对点星型反而不合适总线型光纤中继器级联更贴合现场。[设备1]--CAN--[中继器1]光缆[中继器2]--CAN--[设备2]--CAN--[中继器3]光缆[中继器4]--CAN--[设备3]...中继器本质上是一个两端口转发设备一侧CAN收发进来另一侧光口发出去下一段再从光口收进来转成CAN发出去。整条链路逻辑上仍然是一个CAN网络两边终端电阻放在链路的两端中间设备的中继器不能乱加终端电阻否则会破坏差分阻抗匹配导致反射。这种方案最大的价值是保留了CAN原本的总线型拓扑上层协议、节点地址、报文ID全部不用改。就像原来一根线穿到底现在中间几段被光缆替代设备端感觉不到太大区别。每级都有电气隔离能解决长距离地电位差问题也能在强电磁干扰段用光缆跨越。缺点也很现实非冗余光缆断一处整条链路就断了中继器每一级都有转发延时和相位误差级联级数不能无限加实际超过4-5级就要非常谨慎最好把波特率降到125kbps并检查采样点沿线中继器需要就近供电现场取电不方便的话麻烦。适合场景沿线设备密集、距离长但没有冗余要求的场合。预算比点对点高一点但比环网低很多。2.3 方案三光纤自愈环网断缆不断网的可靠之选电力变电站、轨道交通、矿井提升机房这类场合断一次通信就可能跳闸或者引发连锁停机线缆中断是完全不可接受的。这时候第三种方案出场把各站点用光缆串成环每个站点用带环网功能的CAN光纤设备接入。原理说起来不复杂环上每个设备都有两个光口一进一出正常工作时主节点会逻辑上封闭其中一个方向整个环在逻辑上仍然是一条总线一旦某处光缆断了主节点检测到链路丢失立刻在断点两侧回环让信号从另一个方向绕过去通信自动恢复。这个动作叫自愈倒换时间一般在20ms到50ms级别好一点的私有协议能做到10ms以内。这方案的可靠性来自两个层面。第一是链路的冗余任何一点断纤都不会导致全网中断第二是设备的冗余能力环上的站点设备如果支持断电检测和直通某个站点掉电时信号也能绕过它继续传。需要注意这里的“自愈”是对链路层而言CAN报文在倒换瞬间仍然会丢几帧。如果你上位机的逻辑是“一秒钟没收到数据就报警”倒换期间触发一次报警是很正常的合理的做法是上位机容忍1-2秒的通信中断或者把告警阈值放宽到自愈时间之上。适合场景可靠性要求极高、断缆不可接受、预算充足的场合。也是四种方案里唯一具备真正链路冗余能力的。2.4 方案四CAN over Ethernet把CAN搬上IP网络的光纤融合组网前三种方案本质都还在维护“一个CAN网络”的概念第四种方案完全换了个思路现场CAN设备接CAN转以太网网关光纤交换机组网网关把CAN报文封装进TCP/UDP包发送到远端对端网关再解包还原成CAN。[现场CAN设备]--CAN--[CAN-Ethernet网关]--ETH--[光纤交换机]光缆[光纤交换机]--ETH--[CAN-Ethernet网关]--CAN--[远端设备]这种方案的优势是彻底摆脱了CAN总线协议对距离、节点数和拓扑的限制。只要IP能通CAN就能通甚至可以跨城市。一条光纤骨干网里可以同时传输视频、PLC以太网协议、CAN报文、其它业务非常适合智慧园区、风电场集中监控这类多系统融合项目。但代价也很明显实时性和确定性变差了。CAN本身的仲裁和ACK机制是微秒级确定的封装进以太网后变成“尽力而为”的IP转发延时和抖动都不可控。局域网内一般1ms到3ms如果跨越互联网或者交换机级联多了可能到几十毫秒而且会波动。另一个麻烦是协议转换带来的问题CANopen、J1939这类上层协议有SDO对象字典、心跳时间等机制网关转换后这些逻辑可能需要单独处理不是简单把帧透传就完了。选这种方案时还要注意隧道模式和协议网关模式的区别。隧道模式是把CAN帧原样封装对端还原成CAN总线上层协议不需要改协议网关模式是网关直接解析成IP协议比如CANopen over TCP两端都是以太网设备没有真正的CAN总线段了。前者适合“远程延展”后者适合“远程监控”别搞混。3. 选型不是拍脑袋距离、节点数、实时性、可靠性的权衡3.1 先算负载率再看设备转发能力很多人选光纤转换器只看“支不支持我这个波特率”忽略了负载率。CAN总线上单位时间传的位数占总带宽的百分比就叫负载率算法很简单负载率 单位时间内发送的帧数 × 每帧实际位时间 ÷ 波特率 × 100%一帧标准CAN报文含帧头、ID、数据、CRC、位填充粗略按一个字节数据约110个位时间估算。举个例子250kbps线上有4个节点每个节点每秒钟发100帧标准帧负载率就是4 × 100 × 110 ÷ 250000 ≈ 17.6%这算比较健康的水平。留够裕量如果负载率超过50%转发式光纤转换器就开始出现排队和缓存溢出风险。我实测过几款便宜模块负载率到30%以上就能偶尔看到丢帧表现是CAN分析仪上出现CRC错误或接收超时。所以选型前把负载率算清楚别等现场联调才发现转发瓶颈。3.2 距离、节点、实时性、成本四维对比维度点对点转换器总线型中继器级联光纤自愈环网CAN over Ethernet最大距离单模可达20km以上受级联级数限制实际2-5km单环几十km可多环扩展不限取决于IP网络节点规模2-8个星型受光口数限制10-50个节点越多波特率越低10-100个以上理论上无上限实时性微秒到毫秒级转发延迟每级增加一跳延迟正常时优倒换瞬间丢几帧毫秒级且抖动明显冗余能力无无链路自愈秒级内恢复依靠以太网冗余协议成本级别低中高中高网关和设备多可以看到每一种方案在“距离-节点-实时性-可靠性”四个维度上各有取舍。点对点方案便宜但不可靠中继器灵活但有限制环网可靠但贵IP化距离无敌但确定性差。没有完美的方案只有最贴合现场约束的方案。3.3 实时性要求有多高决定你能不能走IP化判断实时性需求有个简单标准如果系统丢几帧报文只是影响数据显示刷新稍微延迟没问题那方案四完全可用如果丢了报文会影响控制逻辑、导致设备误动作或者触发联锁停机那方案一、二、三更安全如果不同设备之间还依赖CAN仲裁来保证优先级抢占那只有方案一、二、三能做到方案四的网关转发会破坏原有仲裁行为。这些年经常有人问我“能不能直接用工业以太网替代CAN总线”我的看法是如果爬到设备层看CAN的位置和以太网不同。CAN擅长设备级控制、状态采集和短帧快速交互Ethernet擅长大数据量和跨系统融合。远距离场景里把CAN“拉远”和“替代”是两回事别为了减少一种总线类型而制造更复杂的网络问题。3.4 选型决策流程照着走就行我在实际选型时通常按这个顺序问自己几个问题也建议你这么走一遍距离是两点之间还是沿线分布两点选方案一沿线选方案二或三断缆后果严重吗严重就上方案三不严重看预算除了CAN还有没有视频/PLC等业务要共用光纤有的话直接考虑方案四现有上层协议要不要保留要保留就不能随便走IP化现场能方便取电吗中继器和转换器都要供电取电难的点位可能需要带光纤取电或复用方案这一套下来基本能锁定方向。剩下就是设备选型细节和现场部署了。4. 部署中的工程细节与常见坑从光功率预算到错误帧排查4.1 单模还是多模别只看价格光纤选型里最常被问的问题就是单模和多模怎么选。简单说多模光模块便宜、跳线费用低但在850nm波长下衰减一般在2.5-3.5dB/km适合几百米到一两公里内的短距离组网单模传输损耗低1310nm约0.35dB/km几十公里没问题适合中远距离和不确定距离的场合。我个人的建议是工业现场但凡距离超过500米直接上单模。多模的几十米优势在设备间、机柜内更有意义野外的现场光纤长度常常是估算的选多模万一距离超了要换光模块麻烦程度比多花的成本高得多。光纤级别选G.652D这是目前主流单模光纤兼容性好后续设备升级不用换纤。光纤接口也有讲究。SC接口比ST接口更常见于工业交换机用卡扣锁定不容易松脱。震动比较大的场合比如矿山设备旁接口要检查固定方式建议用带锁紧装置的光纤跳线。还有一个隐藏坑光口脏了。现场施工时粉尘大光纤端面沾灰后损耗剧增表现为通信时通时断、错误帧增多。包里备一支光纤清洁笔排查时先擦再测能省一半时间。4.2 光功率预算用眼睛看灯不如用数据说话任何光纤链路在开通前都应该算一遍光功率预算。公式不复杂接收光功率 发射光功率 - 连接器损耗 - 熔接损耗 - 光纤衰减 - 工程余量一个例子设备光模块发射功率-8dBm接收灵敏度-32dBm现场是2km单模光纤中间4个连接器、2个熔接点。按连接器每个0.5dB、熔接点每个0.1dB、单模光纤每公里0.35dB算接收光功率 -8 - 0.5×4 - 0.1×2 - 0.35×2 -11.2dBm离接收灵敏度还有约20dB余量链路很充裕。但如果光缆接头盒进水、弯曲半径太小、端面脏污实际损耗可能翻好几倍。工程余量建议至少留3dB宁可前期多测试也不要等到系统投运后半夜掉线。到现场用光功率计实测一下接收光功率是最稳妥的做法。如果没有光功率计也可以看设备光口接收指示灯但光模块的灵敏度裕量不同指示灯亮不代表余量足够。我遇到过一次指示灯正常但偶尔报错一测光功率正好卡在灵敏度临界点上重新熔接一个接头就好了。4.3 波特率、拨码和CAN FD兼容性CAN转光纤设备大部分支持多种波特率但“支持”的方式不一样。有的是自适应上电后自动学习总线波特率有的是拨码或软件配置。自适应用起来方便但也容易在混速率场景下出问题比如一条链路上有设备在500kbps有的只发了125kbps的报文自适应设备可能一直识别错误。我的习惯是无论设备支不支持自适应都按固定波特率配置用拨码的就把拨码状态拍照存档。一个项目里出现过换备件后忘记核对拨码、导致整条链路瘫痪的事故排查了很久才发现是备件默认波特率和现场不一致。固定速率配置虽然在施工时多一步操作但可维护性好了不止一个量级。另外如果你的设备已经升级到CAN FD传统CAN转光纤转换器很可能不支持。CAN FD的数据段可以跑到2Mbps以上转换器的存储转发机制、内部缓冲都要跟上很多早期光模块只用标准CAN设计接上CAN FD设备会大量报错。选型时如果系统可能升级CAN FD直接问供应商支不支持别等现场升级了再换设备。4.4 中断接收还是DMA接收这个问题在光纤组网中的真正含义热词里经常有人问“CAN总线一般中断接收还是DMA接收”放在远距离光纤组网场景里答案又会清晰一些。常规MCU上的CAN控制器中断接收是最常见的做法进中断后把帧拷到软件环形队列交给任务处理只要中断处理够快、不丢帧就行。DMA接收更多是用在SPI接口外挂CAN控制器比如MCP2515系列的场景用SPIDMA批量搬运数据降低CPU占用。但说句实在话光纤组网的关键瓶颈不在接收侧是中断还是DMA而在转换器的缓存和转发策略。长距离链路光传输本身很快真正可能丢帧的环节是转换器内部报文到了但处理不过来缓存溢出直接丢。所以不管你是中断还是DMA最终要看转换器单路处理能力、缓存大小和负载率。中断方式只要软件写好响应够快完全没问题DMA方式能减轻CPU压力但对最终通信质量的影响远没有负载率大。4.5 错误帧和Bus-Off光纤链路不是永远干净很多人觉得光纤抗干扰网络就一定稳定这是一个误区。光纤链路本身不大会受电磁干扰但光模块劣化、光纤接头污染、设备复位瞬间、环网倒换瞬间都可能让接收端瞬间失步CAN控制器检测到异常就会产生错误帧。错误帧多了发送错误计数TEC和接收错误计数REC持续增加一旦TEC超过255控制器进入Bus-Off状态乖乖离线等待。排查错误帧的思路我建议这样走先用CAN分析仪抓一段总线数据看错误帧类型和发生频率。如果错误帧集中在某个转换器下端口的光链路切换瞬间重点检查光模块和光纤接头如果是偶发且伴随接收超时先用光功率计测链路余量如果错误帧持续不断就要检查波特率配置和两端设备是不是存在时钟偏差尤其是转换器级联超过3级的场景逐级检查中继器的采样点设置。Bus-Off恢复可以靠CAN控制器的自动恢复机制但别指望它解决根因。我见过一个现场反复Bus-Off再自动恢复上位机监控曲线一直在跳最后发现是光缆中间有个接头盒进水熔接点氧化导致链路质量劣化处理完接头问题后再也没报过。链路质量不好时依赖自动恢复只是给故障打补丁。5. 实测对比与我的选型建议5.1 实测场景与测试方法为了把这四种方案放到同一把尺子下比较我搭了一个接近真实场景的测试环境两栋楼之间约1.5公里的空余光缆8个CAN节点250kbps波特率每个节点周期发送100帧/s用CAN分析仪同时监测源端和目的端报文统计端到端延时、丢帧数和通信稳定性。环网方案额外做了一次拔纤测试观察自愈时间和断流帧数。测试数据跟设备品牌和档位有关系但趋势有参考价值。结果大概如下指标点对点转换器总线型中继器级联3级光纤自愈环网CAN over Ethernet局域网单帧端到端延时约0.3-0.6ms约0.8-1.2ms正常时约0.4-0.8ms约1-3ms有抖动丢帧率正常链路0%0%0%0%高负载时偶发单点断纤影响全断全断自愈恢复约20ms视以太网冗余而定实施复杂度低中中高高相对成本低中高中高5.2 按场景直接说结论如果让我给一个简单粗暴的选型结论大致是这样两点互拉预算紧现场条件简单直接方案一一对CAN转光纤转换器搞定沿线设备一串距离长但允许短时中断方案二总线型中继器级联注意级联深度电力、隧道、轨道交通这类断缆不可接受的场景方案三光纤自愈环网该花的钱别省跨区域远程监控或者需要和视频、PLC等共用一张光纤骨干网方案四CAN over Ethernet另外提醒一句不管选哪种找供应商时问清楚三个问题支不支持CAN FD、断电时光链路是直通还是断开、光模块是固定还是可插拔。这三个问题能过滤掉一大批不合格产品。5.3 现场勘察比选型更重要做了这么多项目我越来越觉得方案选型只是第一步现场勘察才是决定成败的关键。光缆路由怎么走、中间有没有接头盒、接头盒位置会不会泡水、沿线设备取电点在哪、光纤预留多少余量这些细节直接决定后期维护体验。多花半天时间把现场摸一遍比跟供应商多聊两个小时的参数表有用得多。最后说一点个人体会很多时候项目出问题不是方案不够先进而是拨码没核对、端子没压紧、光口被灰尘堵了。我包里常年放一支光功率计和一根清洁笔排查光链路永远比争论用哪种方案更先做。光纤组网不是给别人看的拓扑图最终要看链路余量、故障恢复时间、现场可维护性。把这三点落地了选型自然就不会错。
返回列表