許多應(yīng)用與人身安全或設(shè)備安全有密切聯(lián)系,隨著安全性要求的提高,希望設(shè)備或系統(tǒng)在其構(gòu)成的部件與控制裝置發(fā)生故障時仍能保證安全,即故障-安全(failsafe)的特性。系統(tǒng)是由子系統(tǒng)組成的,子系統(tǒng)有故障時有控制地停止工作(failsilent,故障-靜默模式),對系統(tǒng)而言仍是故障,因?yàn)樗辉偬峁┰ǖ姆?wù)了,這有可能引起全系統(tǒng)功能的失效。所以,安全是要從最高層的全局來分析的。例如對一輛汽車,剎車系統(tǒng)整體不能用故障-靜默來達(dá)到安全,而應(yīng)該是故障后仍能工作(failoperatiONal,故障-仍工作模式),或至少是性能下降一點(diǎn)仍能工作(faildegraded,故障-降格工作模式)。
單一部件的架構(gòu)(包括硬件與軟件)有故障而失效時就無法繼續(xù)提供服務(wù)了,它不能滿足故障-仍工作模式或故障-降格工作模式的要求。這就必須采用有備份的冗余架構(gòu),每一個備份都能完成出故障的原來部件的大部分或全部服務(wù)工作,維持系統(tǒng)正常運(yùn)行。備份工作的交替就要求它們對工作狀態(tài)(系統(tǒng)的輸入、應(yīng)該的輸出和誰不該輸出)有相同的看法。這種相同的看法要通過信息交換并通過協(xié)議才能建立,并稱為交互一致性(interactive consiSTency)。
有一部分控制對象存在功能上互為冗余的可能性,例如汽車的4個輪子的剎車,當(dāng)一個輪子的子剎車系統(tǒng)(設(shè)備或控制裝置)有故障時,修正其他輪子的剎車力便可以實(shí)現(xiàn)總體剎車系統(tǒng)的故障-仍工作模式或故障-降格工作模式。此時對單個輪子而言,它只要能實(shí)現(xiàn)故障-靜默即可。顯然,單個輪子的可信賴性要求被降低,會造成成本的大大降低。在這種情況下,輪子的控制器之間就存在交互一致性問題。
來自汽車電子大佬Infineon和Delphi的研究報告[1]比較了基于這種互為冗余的分布式冗余剎車系統(tǒng)與集中式僅控制器冗余的硬件成本,指出成本可大為下降,并稱集中式有控制器冗余的剎車系統(tǒng)將會廢止,這對我國汽車電子業(yè)者有警示意義。不過,該文并未提到用硬件集中方案也可實(shí)現(xiàn)對象互為冗余的剎車系統(tǒng)(這二種方案成本差別將不會太大)。此時由于通信有較大不同,交互一致性問題會不一樣,加上其他因素,它們的優(yōu)劣有待研究。但至少分布式互為冗余剎車系統(tǒng)是一個備選方案。參考文獻(xiàn)[1]非常概述地提及了控制方案,并未談及技術(shù)細(xì)節(jié)以及采用的協(xié)議。本文將根據(jù)交互一致性的理論,對實(shí)施這類應(yīng)用中可能遇到的問題進(jìn)行分析。
1 SM算法
對交互一致性的研究已經(jīng)有30年了,它被稱為拜占庭將軍問題算法(Byzentine Generals Problem)。原始文獻(xiàn)有2個版本[23],1980年的文章引用很多,但是公認(rèn)很難讀懂[4]。原來的討論是針對點(diǎn)對點(diǎn)通信進(jìn)行的,本文根據(jù)對參考文獻(xiàn)[3]的理解,針對總線方式通信加以展開,這會引入作者的看法。參考文獻(xiàn)[3]提出:一個冗余系統(tǒng)的“所有無錯節(jié)點(diǎn)應(yīng)該采用同樣的輸入(這樣才能產(chǎn)生同樣的輸出);如果輸入系統(tǒng)沒錯,就應(yīng)該采用輸入的值(這樣才能產(chǎn)生正確的輸出)”。參考文獻(xiàn)[3]提供了二種解決算法:一是口傳消息算法OM(Oral Message Algorithm),二是簽名消息算法SM(Signed Message Algorithm)。對容許m個錯而言,OM算法需要3m+1個節(jié)點(diǎn)以及m+1輪消息傳送,SM需要m+2個節(jié)點(diǎn)和m+1輪消息傳送。這是2種原理與性能有很大差別的算法。OM算法依靠消息轉(zhuǎn)述與表決來確定從節(jié)點(diǎn)的輸入,當(dāng)無法進(jìn)行表決時要采取預(yù)定義的缺省輸入。當(dāng)主節(jié)點(diǎn)有拜占庭錯且錯值占多數(shù)時,無錯的從節(jié)點(diǎn)間看法雖是一致的,但是是不正確的。SM算法依靠逐級檢驗(yàn)與重復(fù)轉(zhuǎn)發(fā),可以發(fā)現(xiàn)各節(jié)點(diǎn)(包括主節(jié)點(diǎn))的錯,而且只要有一次正確收到就可以了。由于性能好且需要的從節(jié)點(diǎn)數(shù)較少,SM值得進(jìn)一步探究。下面以總線通信時的情況來介紹SM的做法。
① 對需要交換數(shù)據(jù)并保證一致的n=m+2個節(jié)點(diǎn)而言,可將問題作分解,每個節(jié)點(diǎn)可輪流作為主節(jié)點(diǎn)對其他節(jié)點(diǎn)傳送消息,實(shí)施SM算法。
② 每個通信幀含有兩部分內(nèi)容:數(shù)據(jù)d和與d有關(guān)的簽名a。根據(jù)參考文獻(xiàn)[3],簽名要不被有錯節(jié)點(diǎn)作偽,應(yīng)該各節(jié)點(diǎn)各不相同且每次都不同。筆者認(rèn)為根據(jù)工業(yè)應(yīng)用可以不這樣要求,詳見后文。
③ 通信各輪的幀內(nèi)容如下:
第1輪,主節(jié)點(diǎn)發(fā)自己的數(shù)據(jù)與簽名(d:a0);
第2輪,各從節(jié)點(diǎn)轉(zhuǎn)發(fā)由第1輪收到的幀再加自己的簽名((d:a0):aj),其中 (j=1,…,n-1);
以后各輪,各從節(jié)點(diǎn)轉(zhuǎn)發(fā)由上一輪收到的幀再加自己的簽名((…((d:a0):aj)…):ar),其中 (j,…,r∈{1,…,n-1}; j≠…≠r),也就是說已經(jīng)經(jīng)過本從節(jié)點(diǎn)轉(zhuǎn)發(fā)的內(nèi)容不再轉(zhuǎn)發(fā)。
由于是通過總線廣播而不是點(diǎn)到點(diǎn)通信,通信量只要計算不同的幀的個數(shù)就可以:N=1+(n-1)+(n-1)2+…??偟耐ㄐ泡啍?shù)為m+1。
?、?每個從節(jié)點(diǎn)保存一個供選擇的集choice,初始化時為空:choice{Φ}。choice的更新可在m+1輪通信結(jié)束之后進(jìn)行。更新時先檢驗(yàn)簽名的有效性,只有全為有效的才可把該幀的d添加到choice中,如果choice中已有,就不重復(fù)添加。點(diǎn)對點(diǎn)通信按參考文獻(xiàn)[3]的做法,出現(xiàn)主節(jié)點(diǎn)錯時choice會有多個元素,總線通信時主節(jié)點(diǎn)的簽名計算只有一次,按本文做法(見下文)choice只會有一個元素(真值或空)。
?、?參考文獻(xiàn)[3]證明了在下列假設(shè)得到保證的條件下所有無故障從節(jié)點(diǎn)會得到相同的choice:
A1發(fā)送的消息總能正確送達(dá);
A2每個節(jié)點(diǎn)知道誰在發(fā)送;
A3消息的缺失可以檢測出來;
A4簽名不能被作偽,作偽時可檢測出來;
任何從節(jié)點(diǎn)能檢測出簽名是否有錯。
SM算法的有效性與此有關(guān),通信時發(fā)生錯幀漏檢的情況相當(dāng)于發(fā)生一次錯,要在容錯的次數(shù)設(shè)計上加以考慮。
建議了一個簽名的方法例子,即用密鑰ki對數(shù)據(jù)d求出簽名a: a=(ki·d)mod p,其中p是2的冪,ki是小于p的一個奇數(shù),接收節(jié)點(diǎn)用另一個密鑰ki-1驗(yàn)證:d=(ki-1·a)mod p。ki和ki-1有如下關(guān)系:(ki·ki-1)mod p="1"。這樣,有錯節(jié)點(diǎn)能作偽的概率為1/p。這種方案作偽者要不知道加密的辦法才行。參考文獻(xiàn)[3]認(rèn)為要求更嚴(yán)的場合要采用密碼學(xué)的方法。
從工業(yè)應(yīng)用來看,有錯節(jié)點(diǎn)的作偽的可能性來源乃是電磁干擾,對人為的黑客攻擊應(yīng)另外采用對抗措施,所以可以采用較為簡單常用的CRC校驗(yàn)和作為簽名。注意,這個CRC校驗(yàn)和是應(yīng)用數(shù)據(jù)的校驗(yàn)和,不要混同于通信幀的校驗(yàn)和。在冗余系統(tǒng)里關(guān)心的是應(yīng)用數(shù)據(jù)的一致性,而應(yīng)用數(shù)據(jù)在MCU與通信控制器的傳遞過程中可能出錯,通信幀的CRC校驗(yàn)不能覆蓋這一錯。例如,應(yīng)用通過FlexRay的二個通道傳送同一數(shù)據(jù)時,由于寫入輸出緩沖器的過程是分時的,如果其中一次受到干擾,應(yīng)用數(shù)據(jù)與應(yīng)用CRC(簽名)不再匹配,那么接收方將能發(fā)現(xiàn)應(yīng)用數(shù)據(jù)的傳送錯而加以丟棄。
在總線廣播通信中,由于各節(jié)點(diǎn)受干擾請況的不同,它們可能接收到不同的幀,一旦又發(fā)生了錯幀漏檢,那么就會發(fā)生一個節(jié)點(diǎn)給其他節(jié)點(diǎn)送不同值的情況,這與點(diǎn)到點(diǎn)通信的情況一樣,是一種拜占庭錯。同時,轉(zhuǎn)發(fā)過程又涉及MCU與通信控制器的傳遞過程,其中也會發(fā)生錯,所以轉(zhuǎn)發(fā)過程也用數(shù)據(jù)加簽名的方式。例如節(jié)點(diǎn)p在第3輪收到幀(((d:a0):aj):ai)時,檢驗(yàn)ai的簽名是否正確,如果錯,那么在節(jié)點(diǎn)j到i的轉(zhuǎn)發(fā)通信中有錯。如無錯,繼續(xù)對((d:a0):aj)作aj簽名的檢驗(yàn),如果錯,那么在節(jié)點(diǎn)0到j(luò)的轉(zhuǎn)發(fā)通信中有錯。如無錯,再對(d:a0)作a0簽名的檢驗(yàn),如果錯,那么在節(jié)點(diǎn)0的MCU與節(jié)點(diǎn)0的通信控制器通信中發(fā)生了錯,或者它在計算簽名時發(fā)生了錯。
未通過簽名檢驗(yàn)的數(shù)據(jù)將不提交到choice,如果主節(jié)點(diǎn)無錯,從節(jié)點(diǎn)有m+1個,那么在第一輪中至少有一個從節(jié)點(diǎn)正確收到,在以后各輪中其他有錯節(jié)點(diǎn)的轉(zhuǎn)發(fā)將不會影響這個節(jié)點(diǎn)的choice?,F(xiàn)在可以發(fā)現(xiàn)SM算法的一個有趣的特性:如果某些從節(jié)點(diǎn)只是發(fā)生了瞬時故障,由于無錯節(jié)點(diǎn)的轉(zhuǎn)發(fā),它仍然有機(jī)會得到相同的choice。
由于采用總線廣播,主節(jié)點(diǎn)可以收到被轉(zhuǎn)發(fā)的自己的幀,因此可以進(jìn)行自檢。若全部轉(zhuǎn)發(fā)結(jié)束后自檢不通過,就可以采取進(jìn)一步的措施,例如本節(jié)點(diǎn)重算簽名并寫通信控制器,或者立即進(jìn)入故障-靜默模式。
SM算法假設(shè)幀的丟失可以檢測出來,這要靠另加的超時報警單元。一旦時間窗口關(guān)閉,各節(jié)點(diǎn)就根據(jù)已收到的各幀進(jìn)行choice的更新工作。
一次SM算法結(jié)束后就可認(rèn)為將開始新的一次SM算法,也就可以初始化choice。如果將每一個節(jié)點(diǎn)開始發(fā)本節(jié)點(diǎn)數(shù)據(jù)的次序固定下來,并將以前節(jié)點(diǎn)開始發(fā)轉(zhuǎn)發(fā)的時刻來預(yù)置本地定時器,那么在預(yù)定的時間窗口內(nèi)上一節(jié)點(diǎn)因故障而未轉(zhuǎn)發(fā)的錯誤可以被發(fā)現(xiàn)。上一節(jié)點(diǎn)轉(zhuǎn)發(fā)結(jié)束的信號或時限到可用來觸發(fā)本節(jié)點(diǎn)開始轉(zhuǎn)發(fā)。
2 互為冗余
經(jīng)過執(zhí)行SM算法,所有無錯節(jié)點(diǎn)和有瞬時故障的節(jié)點(diǎn)都可得到其他節(jié)點(diǎn)發(fā)送的一致的輸入值。有錯節(jié)點(diǎn)發(fā)出的輸入值被所有節(jié)點(diǎn)(包括有錯節(jié)點(diǎn)本身)識別,不被用來進(jìn)一步作計算,此時有錯節(jié)點(diǎn)進(jìn)入故障-靜默模式,其余正確節(jié)點(diǎn)直接開始重新分配剎車力矩的算法。輸入值交換無錯時每一個節(jié)點(diǎn)用相近的控制算法計算每個輪子的控制輸出(剎車力矩)。然后再用SM算法交換各自計算結(jié)果,每個節(jié)點(diǎn)將有一致的各節(jié)點(diǎn)的輸出值。
在每個節(jié)點(diǎn)計算時,會因干擾(如EMI或熱沖擊等)而出現(xiàn)錯誤輸出值?;蛞蚱渌郊訔l件(例如剎車力矩傳感器的失效,MCU自檢錯)等因素,人為使該節(jié)點(diǎn)計算得的輸出值為非正常值。由于SM算法,這個錯誤的輸出值一致地傳送到每個節(jié)點(diǎn)。
這樣各輪子的剎車力矩就有4個來自各節(jié)點(diǎn)的冗余計算結(jié)果,這是一個二維的矩陣。在矩陣中找出有錯的剎車力矩是哪一個,以及有可能發(fā)生永久故障的節(jié)點(diǎn)是誰。由于計算結(jié)果是模擬量,冗余系統(tǒng)又為了避免共同錯(common mode faults)強(qiáng)調(diào)各備份間的多樣性。同樣算法也可能會使結(jié)果有微小差別,所以與其他計算結(jié)果偏離大于預(yù)定限值時視為有錯。
有嚴(yán)重故障的節(jié)點(diǎn)的輸出值可能全是錯的,有瞬時故障的節(jié)點(diǎn)可能只有一個計算結(jié)果是錯的。由于所有正確的節(jié)點(diǎn)均采用同樣的判別原則,一致的輸入數(shù)據(jù),它們作出同樣的判別結(jié)論。
如果有一個節(jié)點(diǎn)的一個剎車力矩計算是錯的,那么可認(rèn)為這個節(jié)點(diǎn)遇到了瞬時干擾。此時仍可按多數(shù)或平均方法確定各輪子的剎車力矩,各節(jié)點(diǎn)按該輪子對應(yīng)的剎車力矩加以執(zhí)行。
如果有一個節(jié)點(diǎn)的剎車力矩計算都是錯的,那么確定這個節(jié)點(diǎn)發(fā)生了一個嚴(yán)重的也許是永久性的故障,此時所有正確的節(jié)點(diǎn)將按補(bǔ)償算法重新計算剎車力矩輸出,以使車子減少偏航,減少顛簸。
嚴(yán)重的錯誤是發(fā)生通信鏈路斷開,正確節(jié)點(diǎn)按SM算法用超時可以發(fā)現(xiàn)有錯節(jié)點(diǎn)。斷開鏈路的節(jié)點(diǎn)按SM算法發(fā)現(xiàn)所有其他節(jié)點(diǎn)都錯了,這時它應(yīng)該判為自己錯了,對本輪子的剎車力矩應(yīng)取一個缺省值,這個缺省值也是在其他正確節(jié)點(diǎn)補(bǔ)償算法中采用的對該輪子的缺省值。
由上可見,由于出故障后節(jié)點(diǎn)只須保證故障-靜默模式,剎車力矩的再分配保證了整車的故障-安全特性。控制器硬件將大為簡化,雖然初期軟件成本增加,其后可以分?jǐn)?,總體成本是下降的。
3 CAN在這類應(yīng)用中的可能性
3.1 帶寬
對4個輪子節(jié)點(diǎn)和1個指令節(jié)點(diǎn)(由踏板或其他系統(tǒng)轉(zhuǎn)發(fā)剎車命令,轉(zhuǎn)發(fā)由輪子來的輪速信號)構(gòu)成的互為冗余系統(tǒng),要容許1個錯時,采用SM算法需要2輪通信,對5個節(jié)點(diǎn)需要交換輸入數(shù)據(jù)1次,共25種幀,4個節(jié)點(diǎn)交換輸出數(shù)據(jù)1次,共16種幀。如果要求每5 ms進(jìn)行一次協(xié)調(diào),傳送41幀,對CAN而言將非常吃緊,這就是經(jīng)常提到的CAN的帶寬局限。這里假設(shè)了冗余后的系統(tǒng)只容許5 ms內(nèi)有1個錯。如果從互為冗余剎車系統(tǒng)的性價比考慮,為了此帶寬問題,設(shè)立專用的CAN總線也是值得的。
SM算法實(shí)際上對數(shù)據(jù)的傳送有很大的重復(fù),在本例中對一個從節(jié)點(diǎn)而言它收到了5次。如果從節(jié)點(diǎn)只是瞬時有故障,它一定會收到正確值。按照SM算法,為了對付m個錯,需要m+1個從節(jié)點(diǎn),因此雖然互為冗余系統(tǒng)有5個節(jié)點(diǎn),并不需要每個從節(jié)點(diǎn)都進(jìn)行轉(zhuǎn)發(fā)。例如取3個從節(jié)點(diǎn)轉(zhuǎn)發(fā)輸入,那么每5 ms就傳送36幀,可以緩解帶寬瓶頸。如取2個從節(jié)點(diǎn)轉(zhuǎn)發(fā),帶寬變?yōu)槊? ms傳送27幀。
3.2 確定性
有一種觀點(diǎn)認(rèn)為只有時間觸發(fā)的通信協(xié)議才能滿足高可信賴性要求。但這是片面的。在本例中,如果把所有互為冗余系統(tǒng)需要傳送的消息都設(shè)為較高優(yōu)先級,那么在總線上它們將像一個長幀不受阻擋延遲,只要帶寬容許,就能送達(dá)。至于這些消息內(nèi)部的到達(dá)先后,在SM算法中并無影響。更廣義地講,只要把CAN的觸發(fā)事件與時間一一對應(yīng),它也可實(shí)現(xiàn)時間觸發(fā)的功能。利用CAN的竟?fàn)幇l(fā)送,有錯未發(fā)節(jié)點(diǎn)的帶寬可被其他節(jié)點(diǎn)盡早利用,SM算法所需的時限計時器只要一個就夠了。
3.3 錯幀漏檢
由于CAN中位填充規(guī)則對CRC的影響,根據(jù)筆者的研究,它的錯幀漏檢率較大,遠(yuǎn)大于Bosch CAN2.0規(guī)范的數(shù)據(jù)。但是由于SM算法中簽名的存在,這一問題已免除或緩解。當(dāng)簽名也用本文建議的CRC方法,那么簽名錯而漏檢的情況可以用CAN錯幀漏檢率同樣的方法分析與改進(jìn)。
3.4 容錯
SM算法假設(shè)發(fā)送的消息總能正確送達(dá),通信中可檢出錯要排除在外。這就需要某種糾錯或冗余。CAN的出錯自動重發(fā)是很好的糾錯措施,但它只能應(yīng)對瞬時干擾,對物理通道上的故障如斷線、短路等,需要用容錯CAN協(xié)議ISO118983的收發(fā)器。此種收發(fā)器的帶寬更小,標(biāo)準(zhǔn)為125 kbps,較好的MAX3054可達(dá)250 kbps。如果互為冗余剎車系統(tǒng)的控制周期定為20 ms(即容許20 ms內(nèi)有一個錯)(參考文獻(xiàn)[5]中引述的線控轉(zhuǎn)向的容許失控時間為50 ms),那么CAN在滿足容許物理故障時還能滿足SM算法的帶寬要求的。從概率上講,由于重發(fā)而占用的帶寬增量并不大。
4 小結(jié)
分布式互為冗余系統(tǒng)的特點(diǎn)是用重新分配的原理實(shí)現(xiàn)故障-安全。并不是所有系統(tǒng)都能采用這種方法。但是在分布式系統(tǒng)中保證數(shù)據(jù)的一致性是很重要的,例如同一數(shù)據(jù)可能應(yīng)用于不同目的的控制系統(tǒng)中,這些系統(tǒng)在分開設(shè)計時就默認(rèn)了數(shù)據(jù)一定是一致的。如果發(fā)生了不一致,這些系統(tǒng)的交互影響就難以預(yù)測。因此SM算法有其現(xiàn)實(shí)意義。
SM算法可以發(fā)現(xiàn)節(jié)點(diǎn)MCU與通信控制器的傳遞過程中的錯,以及通信中的拜占庭錯,這是一個非常重要的特性。由于本文發(fā)現(xiàn)了SM算法的簽名轉(zhuǎn)述同時具備的二個功能─重復(fù)發(fā)送和接收認(rèn)可,使主節(jié)點(diǎn)也能與其他節(jié)點(diǎn)達(dá)到一致,這大大提高了容錯實(shí)現(xiàn)的簡易性。一般地說,拜占庭錯難以發(fā)現(xiàn),當(dāng)雙互備份架構(gòu)輸入有拜占庭錯時,無法確定誰錯而無法實(shí)現(xiàn)故障-靜默,甚至可能出現(xiàn)互相沖突的輸出。采用SM算法,可實(shí)現(xiàn)雙互備份架構(gòu)輸入的一致性,再借用其他系統(tǒng)的節(jié)點(diǎn)的部分計算能力,可用使雙互備份架構(gòu)實(shí)現(xiàn)等效的三重備份輸出的一致性。這在經(jīng)濟(jì)上有巨大意義。
本文根據(jù)總線通信分析了SM算法的實(shí)施方法以及CAN在用于SM算法時的一些問題。CAN是成熟的技術(shù),成本較低,盡量擴(kuò)展其應(yīng)用是理所當(dāng)然的事。就互為冗余剎車系統(tǒng)而言,CAN仍然是可以應(yīng)用的。參考文獻(xiàn)[3]提到了一種在2002年還是研制中的時間觸發(fā)協(xié)議,現(xiàn)在看來,可能是FlexRay協(xié)議。毫無疑問,F(xiàn)lexRay的帶寬優(yōu)勢很大,但是對其的研究還有待深入,例如它的時鐘同步依賴于傳送電纜上的模擬電平跳變,毛刺可能改變跳變位置,從而破壞整個協(xié)議的基礎(chǔ)時鐘。
SM算法需要的消息簽名轉(zhuǎn)發(fā),均需要MCU的參與,對FlexRay或CAN而言,要高層協(xié)議或軟件中間件實(shí)現(xiàn),耗費(fèi)時間,增加中間環(huán)節(jié),增加了時間抖動與受干擾可能性,總之效率不高,并不理想,最好是用專門的硬件實(shí)現(xiàn),這是值得探討的事。
評論
查看更多