tag 标签: 离线

相关博文
  • 热度 23
    2013-6-3 13:07
    1751 次阅读|
    9 个评论
    国家兴亡匹夫有责,从神九用到CAN总线讲起(12) 公道自在人心 前不久看到癌症病人买到了假药的报道,使人对假药贩子从心底里产生仇恨,恐怕没人会让假药贩子逃过法网。因为人同此心,心同此理,人人都有父母亲友,人人都有得癌的概率,自然人人都有受假药贩子伤害的概率,即便得癌的概率是比较小的。安全乃是第一位的,就像电影《东京审判》中代表中国的法官梅汝璈用盛水的杯子比作人的生命而水是生命承载的人类文明,他用力一甩,杯子碎了,水也没了,没有了生命何处再能承载文明、期望、承诺、理想、……?我们考虑安全就要从这里出发。   本博文(11)讨论的这类CAN停止服务失效的概率有多大?它的决定因素有三个:是不是容易进入error passive状态;在error passive状态而在特定区出错的概率;总线上有16个待发帧而发生持续错的概率。   1.是不是容易进入error passive状态: 图1。ISO7637-3波形3a   无论是传导干扰还是辐射干扰,那种高频的干扰都被车企典型化归纳为100us为周期的干扰,幅度达到60v以上,持续约10ms,然后无干扰90ms。例如传导干扰ISO7637-2的波形3(图1)、辐射干扰ISO7637-3的快速脉冲。虽然出厂时要求各ECU通过测试的要求,但是在现场仍会发生错误,其原因是车经过的环境是不受限制的,使CAN可能面临更大更持续的干扰;另外由于老化,振动造成保护措施的失效也是不被随时测试的,例如设备上的干扰吸收回路老化、屏蔽磨破。如果进入了恶化的临界状态,那么节点就可能频发错误。任何一个接收节点有错,都可以否定发送节点的发送过程,假定正好碰到1个节点在10ms内有5条消息发送(2条10ms,1条20ms,1条50ms,1条100ms),每次都重发1次后成功,那么10ms后就可以使发送节点的TEC达到35,在无干扰的90ms里成功发送10ms消息18条,20ms消息4条,50ms消息1条,TEC将减到12,接着又进入坏状态,节点将很快进入error passive状态。   2.在error passive状态而在特定区出错的概率:由文(11)可知,产生发送节点等效离线错误的位置数为Ack~EOF共9位,其概率为9*BER。   3.总线上有16个待发帧而发生持续错的概率: 持续时间问题涉及挂起待发的消息队列有多长,以举例计算之。底盘CAN总线系统内一般有6个节点,约有60个左右的消息要传送,则每个节点平均有10条消息,假定周期为10、20、50、100、1000ms等各有2条,每条帧长为97bit,在500kbps下6个节点的总线负载率总计43.4%。当一个节点等效离线后,还有约50条消息要发。在时钟差的影响下,可以构成一个峰值。例如二个节点的晶振有200ppm的差,假设它们的初始相位差为5ms,那么在25s之后消失,该二个节点的消息就可能同时要求发送,在某个最小公倍数的时刻,所有节点的消息会同时要求发送,形成周期性的峰值。同一节点内的消息相互之间会有相位差,但是该相位差可能很小,以致小于一个帧的传送时间,从而可认为它们同时就绪,例如为了表达系统在同一时刻的状态,会同时采样几个电压和电流,并尽快地送出,以保证同步性。节点在相对频差-0.2、0.4、0.6、0.8*100ppm下的仿真结果见图2。 图2仿真得到的挂起队长度与出现概率关系   这是仿真的程序: Simulation: 1. Initialization: relative clock difference, message ID, offset, period and job state. 2. Calculate local time. 3. Check if new job is ready? 4. Calculate the number of jobs that were ready. 5. Clear one job with highest priority from queue. 6. Repeat 2 to 6 till the preset times.   其中队的长度每0.2ms统计一次,累计出该队长度在整个仿真时间内的出现次数。为了便于ECU编程,采样与写CAN控制器在一个任务中完成,所以假定10条消息在4ms内就绪。仿真开始时是最坏情况:所有节点同时开始写CAN控制器任务。在上述频差下,节点1、2经500s差10ms,也就是说二个节点的10ms周期的消息就绪时间又重合了,其它节点与节点1的组合各为为250s、166s、125s。由于较长周期消息对挂起队长的影响较小,所以仿真的时段取得较短。以600s的结果计算,挂起长度为16以上的情况(为图中曲线的积分)有3590次,占600秒内传送的1.2*10-3。需要特别注意的是,挂起队长的分布不是均匀的,因此处于等效离线而转为真正离线的机会也不是均匀分布的。由上述仿真60s、600s的结果看,挂起长度为16以上的情况都是3590次,如果在最坏情况60s内遇上了的机会便是1.2*10-2。如果在最坏情况6s内遇上挂起长度为16以上的情况有1005次,机会便是3.3*10-2。 图中队长度18的出现数比队长度17次的多,可以由下解释:虽然每个18队都要经过17队而下降,但是处于18队时仍可能增长到19队或更长,它们退下时又要经过18队状态。而在某时,由于同时就绪的消息多于2个,所以使队长度直接由小于17而跳到18,从而使18队的出现次数多于17队。   以600秒考察的有16个帧挂起的概率是1.2*10-3,于是这种失效的概率是P=BER*9* 1.2*10-3,其中BER为误码率。考虑到上述6秒、60秒时考察的概率,这是一个偏宽的估计。 如果在通道的坏状态下,总线上的BER=1*10-2,那么这种失效的概率将是P=1.0*10-4。   关于这种失效的成因我曾写成英文稿给美国交通部,他们把它转给CiA,一番周转后由Bosch给了回复,对他们的答复我也有回应给他们,我的分析也在国内发表了:杨福宇,“关于CAN隐患的争辨“,《单片机与嵌入式系统应用》,2009,  No.6,p.5-7。关键点是我认为总线上的流量峰值是各节点时钟差形成的,周期性可重复的,而Bosch认为峰值是出了错才积累起来的,因此是瞬时的。他没有回答在此状态下算不算失效,但承认有消极报错帧分界符结束晚于服务间隔的情况。总之,他们并没有承认失效,并且在新的CAN FD中没有处理。   对我们的用户,这算不算失效是很关键的。现在以2010年丰田召回风波中的事为例,当时有PRIUS混合动力车,在刹车能量回收的软件设计中有一个疏忽,造成了0.06秒的延迟,结果用户感到刹车不给力,追究后形成召回,这是当时网上查到的解读:由于延迟0.06S时速20公里的车的刹车距离会增加0.7m。对于在高速运动(如100km/h)而紧急刹车的情况,对于以CAN传送刹车的分散控制器的车,可能因40ms失效而增加刹车距离1.1m;对于踏板直接控制刹车的情况,也要经CAN通知油门减油,40ms失效使油量不减也会减弱刹车的效果。   图3被召回的prius延迟   ESP是新的车的卖点,国外已把它作为新车的必备功能,因为它对车的安全太重要了,它已经避免了许多可能发生的车祸。下面是Bosch的ESP8的要求:     你可以看到许多信号要通过CAN来传送,而且要求每20ms刷新一次,如果40ms的通信失效发生,如何确定ESP的响应?如何保证ESP的功能是安全的?这40ms的通信失效该不该重视?   现在进一步设想发生了错帧漏检,你超车时转向5度,而CAN告诉ESP是30度,接着EPS又通信失效40ms,没有正确数据可告诉ESP,ESP就一直帮你转向40ms,你可能发现有冲到逆向车道之可能,但是你已来不及反应了。刘翔的起跑速度是0.12秒,我想你的脚不可能快于他的脚吧。   有人曾声称他们的软件设计“已经考虑了各种安全机制,不会有问题“。每一个系统都有时间上的要求,越是安全攸关的系统越是时间上要求严。此时,除非有另一二条备份的重复CAN通道,对于通信离线这样的失效这样说恐怕只是假话。如果用时间触发协议,就会禁止出错自动重发,只能以大量丢帧来换取不会长时间停止服务,即以大量短时停止服务来换长时间停止服务,此时的风险也是未经评估的。比如说,Bosch的ESP要求20ms刷新,长了不能保证,若你的软件设计可以对抗40ms停止服务,你不是已超越Bosch了吗?   如果一个缺陷已经有可能影响到当前产品的安全,而仍然放之任之,这就要受到消费者的惩罚了。在中国我们看到三聚腈氨事件,那些堆砌起来的所谓品牌价值一夜之间蒸发了,因为说到底,品牌是以品质作后盾的,不踏踏实实地去做品质,取巧是长不了的。特别现在是互联网的时代,信息的流动很快,已经没人能一手遮天了。只要不是虚构,大家说理,相信公道自在人心。中国的乳业由于毒牛奶而如此艰难,小白领千方百计找洋奶粉,弄得香港限制大陆客购奶粉的量,转而网购,把洋奶粉的价钱步步推高,大奶牛新西兰高兴不止。谁知新西兰也出了有双氰胺事件,又出现了冒牌的山寨新西兰奶粉,中国的妈妈们真是没办法了,我想唯一的办法是把中国的奶粉质量提高,让我们的下一代吃得放心。如果我们的车用CAN有问题,别人也不解决,我们是不是也得靠自己吗?  
  • 热度 28
    2013-5-20 09:53
    1951 次阅读|
    11 个评论
    国家兴亡匹夫有责,从神九用到 CAN 总线讲起( 11 ) 细节决定成败   CAN 总线的另一个重要隐患是由于协议的缺陷而不必要的停止服务。通信要保证随时提供服务,用可信赖性的属性来说,这是属于可用性( availability )的指标。 CAN 在什么时候不能提供服务呢?从宽一点的角度来讲,不能及时提供服务也属于此类问题。例如低优先级的消息长时间被高优先级消息所阻断,不能发送。这就引起人们在调度策略上的研究,提出各种解决方案。另一类原因是物理上有损伤,硬件已无法工作,此类问题往往用物理拓扑来解决。第三类原因是受到电磁干扰,频繁出错,通信没有了质量,所以不能服务。这往往用提高防干扰措施解决。第四类原因是协议有缺陷,在特定情况下偶尔的电磁干扰也会停止服务,扩大了电磁干扰影响的后果,我要说的问题就属于第四类。   CAN 是远比 RS485 等先进的总线,它不仅有物理层、数据链路层,还有建筑在它上面的容错管理机制,它把节点的健康状态分为三种,第一种是正常工作的状态,在 CAN 规范中称为主动报错的状态( error active ) , 节点在这种状态时发现收发有错,就会发主动报错帧( active error frame ),通知别的节点,以便保证所有节点的一致性(要么大家都收下“正确“的帧,要么大家都不收这个帧,这里“正确”打引号就是因为前面所讨论的有错帧漏检)。第二种是带病工作的状态,在 CAN 规范中称为消极报错的状态( error passive ) , 节点在这种状态时发现收发有错,就会发报错帧 (passive error frame) ,只有消极报错的状态的发送节点才能通知别的节点,保证所有节点的一致性。第三种状态称为离线( bus off ) , 离线时节点还在听总线上的通信,但是没有一般意义上的收发过程。报错是纠错的前提,有些协议需要更高层次的报错纠错机制,他们会大大增加实现的难度,大大延迟了实现所需的时间,所以无法与 CAN 相比。 这三种状态可以根据通信中出错的次数而转换,每个节点有二个出错计数器,用于保存通信收发过程中出错 / 成功的情况,当计数值小于 128 时为主动报错状态,任一计数器等于或超过 128 时变为消极报错状态,接收错计数器超 128 后被限值,不再增加上去,而发送错计数器超 255 后节点进入离线状态。离线后,节点听到总线上有 128 次连续的 11 个 1 ,就可恢复到主动报错状态。是不是自动恢复由芯片设计者决定,一种是自动恢复,一种是必须有 host 的干预。出错计数器增减详细数值与规则在讨论用到时候再提及。 以前我对此进行过讨论,中文见: 杨福宇 , “ CAN 总线中的一种安全隐患“,《单片机与嵌入式系统应用》, 2009,   No.1 , p.20-22 , 杨福宇 , “ CAN 消极报错发送节点变为离线状态的故障“,《单片机与嵌入式系统应用》, 2009,   No.5 , p18-20 。 在这里我把要重点再提一下: 1 。处于消极报错状态的节点发送的消极报错帧不能保证与其它节点的收发同步结束,由于新帧出现在消极报错帧分界符内, SOF 破坏了分界符的格式,引起新的错; 2 。只要不断有挂起待发的新帧存在,这个节点就在不断地出错,当然无法收发,这是一种表面上在工作而实际上不工作的等效离线状态。 3 。等效离线的时间长度取决于挂起待发消息的多少,而挂起待发消息取决于总线的调度算法,在普通事件触发方式时由于没有时间同步,而且节点间时钟的制造误差,会周期性地出现挂起队列的高峰,即周期性地形成长的挂起队列,使等效离线的时间很长。 4 。更有甚者,发送节点在这种连续的出错情况下会进入真离线状态,它的恢复期也是真离线时间。二者相加使节点停止服务的时间可达到数十毫秒。   因为一般介绍 CAN 的书籍是为设计服务的,没有提到标准中有消极报错帧分界符内的格式检查;因为这是多种规定冲突的结果;因为它是调度有关的结果,所以为了让大家了解来龙去脉,我将详细列举各证据 。   图 1 是消极报错帧的格式,它的消极报错标志( passive error flag )由 6 个连续的 1 开始,在 CAN 总线上 1 总可以被 0 改写,所以它读回时并不一定是 1 ,要等到读回 6 个连续的相同位才算报错标志发送结束。这是它在等有没有别的节点发报错帧,如果别的节点也发,那么或者是主动报错帧(报错标志为 6 个 0 ),或者也是消极报错帧,如果这样,它们的报错帧分界符( error delimiter )是一样长的,它们在帧开始时间上是同步的。如果是局部错,那么它会等到正常帧的 Ack 分界符和 EOF 部分,它的消极报错帧分界符就会超出帧间间隔( inter frame space )中的服务间隔部分( inter mission , I.M , 3 位),正是这里,埋下了不断错的可能性。   图 1 消极报错帧   图 2 是消极报错发送节点在 ACK 位有局部错而发消极报错帧,它被其他接收节点理解为 EOF 和 I.M 。其它节点在 I.M 后开始的新帧开始符 SOF=0 将落在该消极报错帧的分界符内。图 3 是消极报错发送节点在 EOF 内有局部错而发消极报错帧,它的报错标志无法在这里被确认,要等到新帧的 Ack 分界符后才能被确认,如图 2 那样,它的分界符内会有更新的帧的 SOF ,从而不断错下去。 图 2. 消极报错发送节点在 ACK 位有局部错而发消极报错帧 图 3 消极报错发送节点在 EOF 内有局部错而发消极报错帧   消极报错帧分界符内的错是一种格式错,国际标准 ISO 16845:2004(E) 第 8.5.13 项有规定(这是对发送节点的规定,也有对接收节点的规定见 7.5.6 项):“(本试验)的目的是验证作为发送节点的消极报错状态的被测试单元在分界符内观察到损坏而检测出格式错。“   国际标准 ISO 11898:2003(E) 第 10.8.3 规定了总线空闲的定义,即 3 位 I.M 没发现显位。 10.8.4 项规定了只要总线一空,主动报错节点有发送就可发送,所以不会等待任何发消极报错帧的节点结束其发送,因为它们根本不知道有发消极报错帧的节点存在。 国际标准 ISO 11898-1:2003(E) 第 4.18 项对发送节点有定义,这个定义很重要,它决定了连续错时它就见不到总线空闲,就一直归类于发送节点,它每次错都要增加发送错计数器,而把这个节点一直推到离线状态。   根据 ISO 16845:2004(E) 第 8.6.9 项,发送节点不断错时就一直加 8 ,所以从 128 到 255 只要有连续 16 个待发的帧就会使发送节点进入真正离线。 : ISO 11898-1:2003(E) 第 13.1.4.4 项规定了由离线恢复的时间,在此规定下,如果 128 次的发送平均每帧为 100 位,帧间的空闲为 10 位,那么恢复的时间约 128* ( 100+3+10 ) =14464 位。 而 16 次等效离线占用的时间是 16* ( 100+3 ) =1648 位。这样,处于消极报错状态的发送节点由于一次本地的局部错,可能产生 16112 位的不能服务的时间(即失效时间)。对 500kbps 的 CAN 系统,每位 2us ,所以有 32.2ms 的失效时间。如果采用 29 位的标识符,例如常见的用 J1939 协议时,同样的数据域,由于 id 增加 18 位,填充位增加 4 位,每帧增加 22 位,总的失效时间将是 16112+ ( 128+16 ) *22=19280 位 =38.4ms 。像 PSA 厂的车用 250kbps 的 CAN ,这个失效时间将达到 76.8ms 。   你能容许这样长的 失效时间 吗?特别是在发生错帧漏检之后还不能及时用正确帧去纠正吗? …
  • 热度 34
    2013-4-2 17:09
    4450 次阅读|
    18 个评论
    国家兴亡匹夫有责,从神九用到 CAN 总线讲起( 3 )前事不忘,后事之师   这是二个真实的故事,一个是技术层面的,知道了对你可能有用,一个是管理层面的,可能会触动你的良心,使你更为坚强。   有冗余就不会再出问题吗?这里举出例子,说明冗余只有在关键性部位才有用,如果还存在失效单点,就不能保证不出问题了。这涉及常说的短板理论,短板理论是指水桶的容量由最短的那块板决定,别的板再长也不起作用。有的控制系统用了多重冗余,那么能否避免通信造成的故障呢?这要看 冗余措施是否对症下药,不然也是空有其表。 下面是有 4 重冗余的系统,它依然失效了:   https://wiki.sei.cmu.edu/aadl/images/9/97/Honeywell-NetworkModeling-AADL-4-17-12.pdf     2008 年 5 月 13 日 12 : 12 分 NASA 的航天飞机加氢燃料时发生了 4 台控制计算机的不一致,情况是 3 比 1 , 3 台是一致的, 3 秒之后,不一致变为 2 比 1 比 1 ,诊断时剩下的 2 台还不一致, 4 台计算机变为 1 比 1 比 1 比 1 ,整个系统全不一致。但是没有一台计算机有错,它们间的通信也没有错。有错的是 MDM FA2 仪表盒,它通过多挂接口的总线(类似于 MIL STD1553 )对 4 台计算机发消息。查出的结果是数据接口的二极管内有一裂纹,将二极管变为电容的特性了。   据称,在其它实践中还有别的变化例子,如电容变为电阻,晶体管变为可控硅,放大器变为振荡器。   就通信而言,硬件损坏能造成这样的后果,软件故障也能造成这样的后果,例如在电磁干扰下通信接口会有局部的暂时的错, CAN 就会有错帧漏检,多重冗余的计算机就收到不同的值,造成不一致。 CAN 通信接口会局部的暂时的中断服务,也就使冗余的计算机得不到消息,而造成不一致。   又如有的应用采用二条 CAN 总线来传送同一条消息,或者在同一 CAN 总线上送二次。这样的措施对错帧漏检是无效的,因为收到二条“合法”的然而值不相同的消息,你是没法判断那条是对的。对这种拜占庭错要用到专门的表决方法(参见:杨福宇 , “分布式嵌入系统中的交互一致性“,《单片机与嵌入式系统应用》, 2011,   No.3 , p.4-7 )。当采用附加的软件 CRC 检验时,对检验结果要有一个反馈消息( ACK 或 NACK ),节点间对同一消息要取得一致,更要对这个反馈消息实行表决,通信系统的瑕疵用主机上的软件来纠正,需要大量带宽与充分的响应时间,严格论证多种错误交互影响时的失效概率的复杂性大为增加。   对于广大年轻工程师来说,对自己不了解的东西不妨多问几个为什么,不要觉得是对权威的不尊重,不要别人说已经有了冗余就认为万事大吉了。当你心中有了短板的概念,你就会找到你的系统可靠性上的短板。你的问题也许正切中了要害,也许帮助澄清了问题,甚至挽救了事业,避免了危机。     我在 1986 年观看美国挑战者 11 号发射失败实况转播时的印象是永远不会忘却的。我在这里提这件事是因为它已经久远,现在当权的人已经没有印象,许多 80 后的工程师还没有出生或难以记忆那时发生过的事。当时现场的人们就在渡假,无比轻松愉快,孩子们欢呼地送他们的老师进入舱门,但是 73 秒后爆炸夺取了 7 名宇航员的生命,人们惊恐万状,难以面对这一悲剧。那时我在英国,与同事谈起此事时,大家的表情都十分沉痛,因为那不只是美国的挫折,也是全人类的挫折。现在,真相已披露出来,请看:   挑战者号航天飞机 _ 百度百科 http://baike.baidu.com/view/317208.htm     “ 其实本来这场事故本来可以避免。在发射前 13 小时,一位重要工程师向公司上级召开了电话会议,指出了上次 “ 挑战者 ” 号的发射由于助推器 O 型环失效差点毁灭,但上级由于急着完成快捷而便宜的太空旅行,保持了自己的观点。“   “博伊斯乔利在总统委员会的听证会上对瑟奥科尔公司的经理们连连发炮。他的做法受到公司的指责,公司认为他不该把相关的文件披露给总统委员会,同事们更是对他怀恨在心,因为他打碎了他们的 “ 金饭碗 ” 。“   “ 挑战者 ” 的悲剧在于,博伊斯乔利在发射前 6 个月就对 “O 圈 ” 提出质疑,因为一年前他曾亲自跑到佛罗里达,对上一次发射时使用的火箭进行了检查,让他吃惊的是,第一层 “O 圈 ” 失灵,热气跑了出来,幸运的是,第二层 “O 圈 ” 拦住了热气。博伊斯乔利现在仍保存着当时拍摄的 “O 圈 ” 照片,本应是蜜色的润滑油被熏成了黑色。第一层 “O 圈 ” 的很多部分不见了,很显然,它们被烤焦了。他说: “ 我看到这一切时,心口像堵上了一团棉花。那次发射,航天飞机竟然没有爆炸,简直是奇迹! ”     “博伊斯乔利的分析引起了宇航局的注意,把 “O 圈 ” 列入需要认真检查名单。瑟奥科尔公司也成立了一支 “ 特遣部队 ” ,专门解决这一问题。然而,由于器材和人手短缺,课题进展缓慢。作为 “ 特遣部队 ” 一员的博伊斯乔利给瑟奥科尔公司副 总裁 发去一件备忘录,请求对 “O 圈 ” 进行全面的更严格的试验。他在备忘录中写道: “ 我诚实地说,我真的非常担心,如果我们不迅速采取措施,不仅发射会失败,连发射平台也会付之一炬,而最严重的后果将是灾难性的人机俱毁! ”   “ 讨论进行了近 5 个小时,宇航局终于表示,它不会不听火箭设计者的建议而强行发射。就在这个时候,瑟奥科尔公司副总裁请求暂停会议 5 分钟。接着,瑟奥科尔总裁杰里 · 马森就开口说: “ 我们必须作出一个可操作的决定。 ” 博伊斯乔利马上意识到,公司主管为了取悦最主要的客户 —— 宇航局,态度已从 “ 不要发射 ” 变成了 “ 可以发射 ” 。  公司内部的讨论持续了不是 5 分钟而是 30 分钟。包括博伊斯乔利在内的工程师被排除在外, 4 名高级经理投票赞成发射。博伊斯乔利站起来,抓起那张被烧毁的 “O 圈 ” 的照片,放到 4 名高级经理面前的桌子上。 但他们连看都不看。 老板随即接通了电视会议,通知宇航局,瑟奥科尔的态度有了变化, “ 挑战者 ” 可以发射。在随后的一段时间里,宇航局一直在询问瑟奥科尔公司关于发射的问题,但就是没有问一问瑟奥科尔高层为什么突然改变了主意,他们只是请瑟奥科尔公司把他们改变主意的原因写成文字。当载着新建议的传真在午夜时分传到卡纳维拉尔角时,宇航局已经下定了在第二天上午发射 “ 挑战者 ” 的决心。悲剧于是发生了 …… “   我之所以大段引用,是因为在我们周围仍然存在着这样的土壤:有人可以为了一己私利不顾大局;有人可以为了取悦客户不惜冒险;有人为了自己的金饭碗打击那些正直的讲科学的同事; …. 。   所以当你们在这种环境中奋斗时不仅要增长自己的知识,更要有负责任的决心与勇气,你的肩上有我们的寄托。    
相关资源