现在大家都认识到引入消极报错状态是一个积极的措施,对此并无异议。而bosch只看到故障约束机制设计的有利方面,未注意到它在帧同步上造成通信服务缺失的后果。在声明中对此只字未提。那么通信服务缺失的后果是否是一个故障或bug?这应该由用户根据其对应用是否有害来确定,并不能因把它称为“特色”而改变。进一步研究表明存在后果严重的可能性。基本的线索是:车内存在严重的电源传导干扰(ISO7637干扰类型D→CAN收发器在电源跌落时CANH— CANL差减少,会有写“0”读回“1”的bit错→CAN协议发现错后发报错帧的规定(即能重复发报错帧)→CAN协议在报错标志中发现bit错时出错计数器+8的规定。一个较长时问跌落就可以将节点推入消极报错状态(消极报错状态并非罕见)。然后一次本地故障把它推入失去服务能力的状态。CAN总线失去服务后对应用的危害的仿真已有文章报道,如在弯道上的外冲或急转。而故障约束机制设计上的这个bug是造成这一危险的因素中的关键一环。
失去服务能力的后果破坏了实时控制应用的基础——正时性(timeliness)。现在许多应用只容许少量数据的丢失,而且能容许数据丢失的应用已经考虑了消息的冗余,若要考虑这样长时间的失去服务能力,数据的冗余就要多得更多,这将显著增加总线上的流量。要考虑这个bug,又要符合Bosch的50%的限制,使应用进入更加为难的境地。
安全标准IEC61508、EN50159将在汽车行业推行,在执行这类标准时要从可靠性角度作故障的危害与风险分析。由于一个小故障会引起一个元件出错或失效,元件的错或失效造成部件出错或失效,然后造成子系统出错或失效,从而造成更上一层系统出错或失效。必须分析清楚这个链并研究其出错或失效的概率,才能判断这个最原始的错是否会对安全构成威胁。CAN的这个故障是引起系统失效的一个非常典型的故障。在一般通信系统中,一个本地错引起1帧的丢失,如该应用上可容忍,失效的后果到此为止。然而CAN的这个故障有可能引起100个左右不同接收帧的丢失。不仅如此,它使该节点的所有帧都暂时不能发送,也就是说会影响到其他的控制系统的功能。例如,对CAN总线挂上
ECU节点的不同方案,不能发送发动机转速信号就会影响变速器、
ABS、
ASR、空调,轮速信号不能发送就可能影响电喷、变速器、
ASR,变速比信号不能发送就会影响到电喷、
ASR、废气再循环,含有网关的仪表板单元不能正常发送可能引起发动机不能点火。也就是说,由一个本地故障转为一个节点失效,然后又转为若干个功能失效。有些功能的失效会影响能耗或排放,或使设备运行不平稳,但有的功能会影响制动和转向。
CAN总线失去服务能力会导致控制系统的失效。车辆是一个运动的物体,控制系统的失效会变为运动的失控,从而引起安全问题。这对所有人都是沉重的压力,采取审慎与观望的态度是符合情理的,但如果CAN失去服务能力的过程存在,这个后果是回避不了的。
Bosch对恶性后果并未提及,这表示他们并未意识到这一点。参考文献[1]提到,这一等效离线或真正离线的开始源于消极报错状态节点的消极报错帧没有足够的时间结束。但可能的情景远超过Bosch在CAN2.O规范中的描述,如果他们原来就已知有如此多的情景,就会把这些情景都包括在CAN2.O中。他们也没有提醒过作调度分析工具软件的人们,由于任何优先级的消息在此隐患发作时都失去服务能力,且进入消极报错状态不是罕见的事,那么调度的效果就很小了 ——木桶的底是漏的,其余板长短的影响已退居次要地位甚至失去意义。bug影响了工具理论基础的完整性,调度的结果不能保证,就不能最终保障控制功能的实现。网上尚未见到Bosch有任何关于节点因故障约束机制设计而推迟收发的类似这次声明的报道。因此,由于未充分预计到故障会引起如此坏的后果,只能说这是一个bug。
实际上,消极报错状态下出现坏后果及失去服务能力的毛病是可以克服的。参考文献[1]提出了2种方法,也是Bosch声明提到的2种方法。其实还存在其他可能的解决方案,例如将消极报错帧分界符内的显位不视为错而视为超载帧的请求。此时经超载帧与其他节点的报错帧重合,可以使消极报错状态节点迅速和其他节点取得同步,但这样做牺牲了超载帧占用的带宽,并使其他节点蒙受一次出错的不白之冤。所以参考文献[1]提出的是较好的方案。在保持引入消极报错状态的优点时不必死抱
它的缺点。失去服务能力的问题得以避免,由于这个因素造成的对CAN消息负载率的限制也可减少,这样对大多数人都有好处。
已有的大量CAN应用,特别是那些现场条件较好,本身并非安全攸关的应用(即使在汽车内,也有许多节点与安全关系不大),对CAN隐患的讨论不要恐慌,只需对自己的环境和应用作评估,必要时补充作些测试即可。
对CAN隐患的讨论并不是要全面否定CAN。尽管CAN尚有其他问题与不足,甚至较为严重的问题,但它仍然是当前最好的协议。CAN最突出的优点是出错自动重发功能。很久以来,关于事件触发协议与时间触发协议孰优孰劣的讨论中人们倾向于认为时间触发协议更为可靠,后者更适用于线控系统。但是研究表明,由于出错自动重发功能的存在,CAN的消息不正确概率比重复送2次消息的TTCAN小几个数量级。有理由相信时间触发的其他协议也会在类似的比较中显得逊色,除非它们采用更为复杂的上层纠错措施。上述bug使CAN的这一巨大性价比优势变得无用,所以对CAN进行改进是非常有价值的。现在谁作改进,谁就能解决当前的急需,也就有机会在未来胜出,这是一个重新洗牌的机会。这一争辩由于Bosch的声明而使事情变得明朗,国际国内对此作出自己的结论的时间已经同步。
综合上述分析,笔者依然认为它是一个隐患。对我国IC、
ECU、整车厂来说,必须加以重视并及时采取行动。决策是一个博弈的过程,落后将动摇消费者的信任,导致十分被动的境地。