分布式嵌入系統(tǒng)中的交互一致性
參考文獻[3]建議了一個簽名的方法例子,即用密鑰ki對數(shù)據(jù)d求出簽名a: a=(ki·d)mod p,其中p是2的冪,ki是小于p的一個奇數(shù),接收節(jié)點用另一個密鑰ki-1驗證:d=(ki-1·a)mod p。ki和ki-1有如下關(guān)系:(ki·ki-1)mod p=1。這樣,有錯節(jié)點能作偽的概率為1/p。這種方案作偽者要不知道加密的辦法才行。參考文獻[3]認(rèn)為要求更嚴(yán)的場合要采用密碼學(xué)的方法。
從工業(yè)應(yīng)用來看,有錯節(jié)點的作偽的可能性來源乃是電磁干擾,對人為的黑客攻擊應(yīng)另外采用對抗措施,所以可以采用較為簡單常用的CRC校驗和作為簽名。注意,這個CRC校驗和是應(yīng)用數(shù)據(jù)的校驗和,不要混同于通信幀的校驗和。在冗余系統(tǒng)里關(guān)心的是應(yīng)用數(shù)據(jù)的一致性,而應(yīng)用數(shù)據(jù)在MCU與通信控制器的傳遞過程中可能出錯,通信幀的CRC校驗不能覆蓋這一錯。例如,應(yīng)用通過FlexRay的二個通道傳送同一數(shù)據(jù)時,由于寫入輸出緩沖器的過程是分時的,如果其中一次受到干擾,應(yīng)用數(shù)據(jù)與應(yīng)用CRC(簽名)不再匹配,那么接收方將能發(fā)現(xiàn)應(yīng)用數(shù)據(jù)的傳送錯而加以丟棄。
在總線廣播通信中,由于各節(jié)點受干擾請況的不同,它們可能接收到不同的幀,一旦又發(fā)生了錯幀漏檢,那么就會發(fā)生一個節(jié)點給其他節(jié)點送不同值的情況,這與點到點通信的情況一樣,是一種拜占庭錯。同時,轉(zhuǎn)發(fā)過程又涉及MCU與通信控制器的傳遞過程,其中也會發(fā)生錯,所以轉(zhuǎn)發(fā)過程也用數(shù)據(jù)加簽名的方式。例如節(jié)點p在第3輪收到幀(((d:a0):aj):ai)時,檢驗ai的簽名是否正確,如果錯,那么在節(jié)點j到i的轉(zhuǎn)發(fā)通信中有錯。如無錯,繼續(xù)對((d:a0):aj)作aj簽名的檢驗,如果錯,那么在節(jié)點0到j(luò)的轉(zhuǎn)發(fā)通信中有錯。如無錯,再對(d:a0)作a0簽名的檢驗,如果錯,那么在節(jié)點0的MCU與節(jié)點0的通信控制器通信中發(fā)生了錯,或者它在計算簽名時發(fā)生了錯。
未通過簽名檢驗的數(shù)據(jù)將不提交到choice,如果主節(jié)點無錯,從節(jié)點有m+1個,那么在第一輪中至少有一個從節(jié)點正確收到,在以后各輪中其他有錯節(jié)點的轉(zhuǎn)發(fā)將不會影響這個節(jié)點的choice?,F(xiàn)在可以發(fā)現(xiàn)SM算法的一個有趣的特性:如果某些從節(jié)點只是發(fā)生了瞬時故障,由于無錯節(jié)點的轉(zhuǎn)發(fā),它仍然有機會得到相同的choice。
由于采用總線廣播,主節(jié)點可以收到被轉(zhuǎn)發(fā)的自己的幀,因此可以進行自檢。若全部轉(zhuǎn)發(fā)結(jié)束后自檢不通過,就可以采取進一步的措施,例如本節(jié)點重算簽名并寫通信控制器,或者立即進入故障-靜默模式。
SM算法假設(shè)幀的丟失可以檢測出來,這要靠另加的超時報警單元。一旦時間窗口關(guān)閉,各節(jié)點就根據(jù)已收到的各幀進行choice的更新工作。
一次SM算法結(jié)束后就可認(rèn)為將開始新的一次SM算法,也就可以初始化choice。如果將每一個節(jié)點開始發(fā)本節(jié)點數(shù)據(jù)的次序固定下來,并將以前節(jié)點開始發(fā)轉(zhuǎn)發(fā)的時刻來預(yù)置本地定時器,那么在預(yù)定的時間窗口內(nèi)上一節(jié)點因故障而未轉(zhuǎn)發(fā)的錯誤可以被發(fā)現(xiàn)。上一節(jié)點轉(zhuǎn)發(fā)結(jié)束的信號或時限到可用來觸發(fā)本節(jié)點開始轉(zhuǎn)發(fā)。
2 互為冗余
經(jīng)過執(zhí)行SM算法,所有無錯節(jié)點和有瞬時故障的節(jié)點都可得到其他節(jié)點發(fā)送的一致的輸入值。有錯節(jié)點發(fā)出的輸入值被所有節(jié)點(包括有錯節(jié)點本身)識別,不被用來進一步作計算,此時有錯節(jié)點進入故障-靜默模式,其余正確節(jié)點直接開始重新分配剎車力矩的算法。輸入值交換無錯時每一個節(jié)點用相近的控制算法計算每個輪子的控制輸出(剎車力矩)。然后再用SM算法交換各自計算結(jié)果,每個節(jié)點將有一致的各節(jié)點的輸出值。
在每個節(jié)點計算時,會因干擾(如EMI或熱沖擊等)而出現(xiàn)錯誤輸出值?;蛞蚱渌郊訔l件(例如剎車力矩傳感器的失效,MCU自檢錯)等因素,人為使該節(jié)點計算得的輸出值為非正常值。由于SM算法,這個錯誤的輸出值一致地傳送到每個節(jié)點。
這樣各輪子的剎車力矩就有4個來自各節(jié)點的冗余計算結(jié)果,這是一個二維的矩陣。在矩陣中找出有錯的剎車力矩是哪一個,以及有可能發(fā)生永久故障的節(jié)點是誰。由于計算結(jié)果是模擬量,冗余系統(tǒng)又為了避免共同錯(common mode faults)強調(diào)各備份間的多樣性。同樣算法也可能會使結(jié)果有微小差別,所以與其他計算結(jié)果偏離大于預(yù)定限值時視為有錯。
有嚴(yán)重故障的節(jié)點的輸出值可能全是錯的,有瞬時故障的節(jié)點可能只有一個計算結(jié)果是錯的。由于所有正確的節(jié)點均采用同樣的判別原則,一致的輸入數(shù)據(jù),它們作出同樣的判別結(jié)論。
如果有一個節(jié)點的一個剎車力矩計算是錯的,那么可認(rèn)為這個節(jié)點遇到了瞬時干擾。此時仍可按多數(shù)或平均方法確定各輪子的剎車力矩,各節(jié)點按該輪子對應(yīng)的剎車力矩加以執(zhí)行。
如果有一個節(jié)點的剎車力矩計算都是錯的,那么確定這個節(jié)點發(fā)生了一個嚴(yán)重的也許是永久性的故障,此時所有正確的節(jié)點將按補償算法重新計算剎車力矩輸出,以使車子減少偏航,減少顛簸。
嚴(yán)重的錯誤是發(fā)生通信鏈路斷開,正確節(jié)點按SM算法用超時可以發(fā)現(xiàn)有錯節(jié)點。斷開鏈路的節(jié)點按SM算法發(fā)現(xiàn)所有其他節(jié)點都錯了,這時它應(yīng)該判為自己錯了,對本輪子的剎車力矩應(yīng)取一個缺省值,這個缺省值也是在其他正確節(jié)點補償算法中采用的對該輪子的缺省值。
由上可見,由于出故障后節(jié)點只須保證故障-靜默模式,剎車力矩的再分配保證了整車的故障-安全特性??刂破饔布⒋鬄楹喕?,雖然初期軟件成本增加,其后可以分?jǐn)?,總體成本是下降的。
評論