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