未来索引
开启左侧

从神九用到CAN总线讲起(10)错难补救

[复制链接]
邢远 发表于 2013-7-28 23:25:12 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
国家兴亡匹夫有责,从神九用到CAN总线讲起(10)错难补救
由于掌握了错帧重构的规律,所以可以说,你想怎样错就可以构造出怎样错的帧。

图1是一个数值被放大的例子,其中U= x8+x7+x6+x5+x4+1, Ec=U*G= (1000, 0010, 0001, 1100, 1110, 1001)。Tx1可以是以前连续5个0之后的填充位。也可以解释为DLC0,例如原来是有3字节的数据,送一个0000010000…的值,结果错帧变为1000010000…的值,错帧将值放大了32倍。

153211vrg9m99agt8kmnsu.jpg
图1 错帧将数值放大32倍

观察图1的重构过程可见,如果将Ec7取为1,那么Tx7=0,错值倍数更大(为64倍),如果继续将Ec8取为0,那么Tx8=0,错值倍数更大(为128倍)…。我们可以由修改后的Ec重新求Uh,例如为了达到128倍,由Ec=1000010,将Ec除以CAN的生成多项式G=(1100,0101,1001,1001),便可以得到Uh=(xk xk-1 xk-2 xk-3 xk-4 xk-5)。此时对照5种可能的Ut,我们可以选k-4=5,即第3种Ut。得到U=x9+x8+x7+x6+x5+x4+1,Ec=U*G= (1000, 0100, 1001, 0111, 0111, 0100,1)来重构出可疑数据流,如图2。因为算出的Ec9正好是0,且Rx7由于有填充位设为1,所以实际的放大倍数达到264倍。当然选其它Ut也是可以的,不过可疑数据流的位数稍多1位。

1532118vvgk38pngk8g3g8.jpg
图2 错帧将数值放大264倍

同样的多项式U= x8+x7+x6+x5+x4+1, Ec=U*G= (1000, 0010, 0001, 1100, 1110, 1001)。也可使值缩小32倍,如图3。

1532128uf06b3q9s8f63f6.jpg
图3 错帧将数值缩小32倍

在应用中数值的变化可能引起应用功能的错误,例如在变速器换档或刹车时,希望油门暂时减少,但是结果是加大,甚至可能全开。在丰田突然加速事件中,我是怀疑VSC经CAN传送到节气门的信号可能出错。美国的NASA调查报告并未排除使节气门开大的可能性。见文(2)。当然,并非一次传送错就会错到底,但是CAN存在短暂一段时间失效的可能性,这在我以后的博文中会交待。

这种错帧漏检之后跟着失效一段时间的危害是很大的,例如你在超车,你的转向角是5度,但是电动助力转向单元经CAN传到ESP的角度是30度,那么ESP认为这是驾驶员的命令,协助你实现30度转向,CAN接着的几十毫秒失效,以及人不可能在几十毫秒内及时反应,你的车就可能冲到逆向车道了。

如果希望证实特定的数据变化,例如Tx=10100101是否可能变为Rx=01011010,我们只要由这二项比较得到Ec=11111111,将这个片断加上头部Ech,然后求出满足的多项式U,和以前的例子一样重构出Tx。不过,由于存在Ec的头部、尾部为特定形式的限制,这个可疑数据流不一定在你希望的位置,只有帧比较长时,帧的部分片断可以如愿重构。

错帧漏检的另一种危险是数据的相移,例如,你的帧内有许多表示状态和控制命令的开关量,一旦移相,状态和命令就乱了,有些保障措施也会失效,例如原来规定55表示开,AA表示关,可以抵御有干扰时形成的非法码,现在由于移相,55/AA就会互相转换。混乱的状态和命令会产生设计时未预计到的系统状态,导致系统失控。

那么应用上有没有办法化解这一问题?对于这样的值域错唯一的办法是某种型式的冗余:软件上的冗余、物理上的冗余或时间上的冗余。

软件上的冗余就是另加数据的补充CRC,例如加一个8位CRC,这个CRC和原来的CAN的CRC没有共同的质多项式,此时可把漏检率缩小256倍,这样的结果还是达不到Bosch原定的指标。由于要占去一字节,在原来已用掉8字节数据的场合就比较麻烦:一帧要分为二帧。这都会增加带宽要求。其次是为取得不同接收节点的一致性,它们都要知道别人是否发现有附加CRC错,就要等有没有NACK,这要添加新的规定:例如必需在什么时限内发出NACK;NACK的形式(否定哪个帧)。时限的引入也产生了延迟。

为了对付一个漏检的错帧,应用上的冗余要付出代价的,例如:

1。原来用二个物理通道,只要有一个通道“正确”收到了就可以了。现在由于所谓“正确”可能是错的,当二个通道结果不一致时,你无法断定谁是真正正确的。就必须要有二个通道的第二次传送结果,在假定连续二次都发生错帧漏检概率小到可忽略不计的情况下,就可以以二次结果相同的通道作最终决定的输出。这样,通信需要的带宽要加倍,CAN本来已为了减少竞争,把总线利用率定得较低,如30%~40%,这样做,有效负载降到只有15~20%。你为了满足余下的需求,要增加一套新的CAN系统,或者忍痛割爱,把控制闭环的采样周期加大,降低带宽需求,但也导致性能下降。

2。原来一个物理通道时,你需要至少送3次才能作出表决。此时带宽的需求增到3倍,比上一条一样面临必须付出的代价。

3。用对象输出变化的已知极限,拦截漏检的错帧,有时不可行。例如Audi方向盘角度传感器G85到ESP的信号本来应该识别0-2000°/S,这相当于40°/20ms,那么用拦截方案,变化超出40°就限值,但是由于传送值不是增量,方向盘角减少后的值(比上次采样小40°)在CAN传送中变大且被限值(比上次采样大40°),误差被限在80°,仍然是严重错误。

4。接连多个采样值后作各种滤波,就像一般的抑制信号中干扰所取的办法,越是想抑制输入的干扰,就越要减少当前输入的权重。但这种办法完全不适用,因为原来的噪音只是信号范围的1%或更小,现在的错误值可能是信号范围的80%。要想抑制错帧,就会减少当前输入的权重到非常小,此时产生多个周期的延迟,就连累正常输入也有这样的延迟。若不想延迟,就要加快采样,把占用的带宽增加,而且不能完全消除错帧的影响。

这些方法显然会增加成本,增加重量、能耗,使设计、生产和维修变得困难,同时应用的性能仍然有可能下降。

这样的措施只能是克服困难的暂时性的不得已而为之的措施。就好比肚子饿的时候,先填饱肚子再说,饥不择食。我们总不能一直这样吧,因为这样总在付出别的代价。每一个人在作决择的时候总会有得有失,只是有的人看得远点,未雨绸缪,在长时间的刻度上损失小,有的人看得近点,只能委曲求全。不能说谁更高明,因为这只是目标函数的不同,约束条件的不同。而高明不高明往往是对约束条件的认识上的差别,有人认为做得到的事有人认为做不到。有人认为自己做不到,别人也做不到。有人认为自己做不到,也想不到去请别人来做,如此等等,诸葛亮的运筹帷幄,全在于他的审时度势,否则难有赤壁之胜,三国鼎立的局面。

有人会认为这是危言耸听,最好有实验数据来证实。这是非常朴素的实证观念,在简单的物理系统中常常是这样做的。但是在可靠性分析上,往往无法作这样的实验,把小概率的事件来作实验会非常费时间,就像文(6)讲的用软件注入求错帧漏检率会需要天文数字的时间。而像现在要求的功能安全要求的更小的概率,基本上只能用分析的方法。所以只能用分析的方法判断以前的分析有无错漏,而不可能以有限的实验的方法来判断以前的分析有无错漏。
该会员没有填写今日想说内容.
高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注2973

粉丝3237

帖子9937

发布主题
推荐阅读 更多
阅读排行 更多
广告位
!jz_fbzt! !jz_sgzt! !jz_xgzt! 快速回复 !jz_sctz! !jz_fhlb! 搜索

智能技术共享平台 - 未来论

关注服务号

进入小程序

全国服务中心:

运维中心:天津

未来之家:天津 青岛 济南 郑州 石家庄

                商务邮箱:xy@mywll.com

Copyright © 2012-2021 未来派 未来论 (津ICP备16000236号-5)