楊福宇
(重慶工業(yè)自動化儀表研究所,重慶401123)
線控系統(tǒng)(x-by-wire)是指用電信號直接指揮電驅(qū)動器,實現(xiàn)控制的目的,由于信息共享容易實現(xiàn)、復(fù)雜的各種計算和邏輯功能可添加,可達到精確的直接或間接地控制目標(biāo)。另外,由于省去液壓或及氣動能源制備系統(tǒng),管線也被電纜代替,成本和重量有可能下降,減少了漏油等環(huán)境污染風(fēng)險。但是由于難以實現(xiàn)機械后備,在可能發(fā)生安全事故時少了人為干預(yù)的手段,可信賴性全要靠系統(tǒng)保證,這就對系統(tǒng)和各組成部分提出了嚴(yán)格的要求。這種要求現(xiàn)在已用功能安全來表達。
飛機上采用線控系統(tǒng)已有較長歷史,當(dāng)汽車應(yīng)用線控系統(tǒng)時,人們往往以為它的要求低于飛機,從成本考慮,希望用較為簡單的方案來實現(xiàn),現(xiàn)在看來很難達到目標(biāo)。要從兩方面來分析。
ISO61508標(biāo)準(zhǔn)的出發(fā)點是根據(jù)事故發(fā)生的后果造成的人身、財產(chǎn)損失大小,以及可能發(fā)生事故的平均概率來確定功能完整性等級,即功能安全設(shè)計的目標(biāo)。雖然設(shè)計目標(biāo)是針對單個被控設(shè)備與相應(yīng)控制裝置設(shè)定的,沒有考慮保護的系統(tǒng)的絕對數(shù)量,但是從人類的整體而言,筆者認為系統(tǒng)的絕對數(shù)量是一個需要考慮的因素,否則積累的傷害與損失會很大。從這個角度看,汽車的保有量可能是飛機的一萬倍,雖然一次飛機事故的損失可能是汽車的一千倍,但是同樣的線控系統(tǒng)失效概率下,汽車對社會造成的損失將是飛機的10倍。
關(guān)于汽車線控系統(tǒng)的功能安全要求是否比飛機低,以前筆者認為汽車在地上,大不了停下來,對功能安全的要求自然比飛機低,這是片面的理解。汽車的工作環(huán)境有其區(qū)別于飛機的地方。例如在高速公路上以100 km/h開動時,它與鄰車或路沿的距離只有1 m,一旦發(fā)生故障,偏航這1 m可能只是幾十ms的事。也就是說,可能的安全措施必須在這幾十ms內(nèi)產(chǎn)生作用。相比之下,飛機在空中相距甚遠,即使發(fā)動機停轉(zhuǎn),重啟在數(shù)秒內(nèi)完成也沒太大問題。當(dāng)然,飛機在著落時也有類似的要求。但是汽車可能連續(xù)幾小時都在這種狀態(tài)下工作,而飛機只是在起降的10 min內(nèi)有這種要求,假定線控系統(tǒng)的平均失效概率相同,那么時長的不同使汽車就更容易出事。另外,飛機每次起飛前的檢查使出事的概率會下降很多。
從這兩點來講,可能需要投入更多的精力去研究汽車的線控技術(shù),取得的成果也可以在飛機上使用,這為一般民用企業(yè)進入高科技行業(yè)提出一種新的可能。
線控系統(tǒng)加上安全措施才能實現(xiàn)功能安全要求,一般來說,一個系統(tǒng)由信號輸入,經(jīng)計算處理、輸出到執(zhí)行器,再經(jīng)過被控對象形成閉環(huán)。如果某一環(huán)節(jié)出錯,則無法閉環(huán),所以要加冗余,讓正常的部分繼續(xù)工作?,F(xiàn)在計算處理部分是由微處理器完成的,由于微處理器復(fù)雜性很高,它的失效物理位置往往難以百分之百地確定,除了盡量具體追溯外,還要根據(jù)行為結(jié)果的合理性判斷錯誤是否已經(jīng)發(fā)生。
為了滿足汽車線控系統(tǒng)的功能安全要求,一些汽車電子半導(dǎo)體廠家推出了專門的CPU芯片,例如Freescale的MPC5643L、TI的TMS570。它們的共同特點是采用雙核結(jié)構(gòu),鎖步運行,然后對雙核的計算結(jié)果進行比較,如果不同,就表示有一個核的中間步驟出錯了,立即通知錯誤處理單元,用戶可以在軟件中設(shè)計出錯的處理方案。
為了避免共因失效,TI的TMS570在芯片的布圖上使兩個核相互垂直,指令執(zhí)行上差2個時鐘節(jié)拍。
兩種芯片對存放數(shù)據(jù)和程序的RAM、FLASH采用了錯誤校正編碼(ECC),如果有1位錯就直接校正,如果超過1個,則通知錯誤處理單元。
兩種芯片都設(shè)計了內(nèi)置的自診斷單元(BIST),電源、ADC定時診斷,出錯時通知錯誤處理單元,例如MPC5643L可以每10 ms進行一次自診斷。
對于系統(tǒng)設(shè)計者而言,這樣的CPU雖然有兩個核,但是其工作方式表現(xiàn)在它的輸出上,要么是正確地輸出結(jié)果,要么是報錯而停止輸出。例如 MPC5643L[1]告訴用戶,芯片只提供失效-靜默(fail-silent)或失效-指示(fail-indication)功能。圖1把常規(guī)的單CPU結(jié)構(gòu)與MPC5643L進行了比較。
圖1 兩種1oo1D結(jié)構(gòu)
圖1(a)中是通常在一個CPU時為了計算可靠,常常采用指令復(fù)執(zhí)的方法,幾次對同一輸入進行重復(fù)計算,選擇合理的結(jié)果作為輸出。計算的方法可以是同一程序執(zhí)行幾次,直到結(jié)果相同,或者3中取2的方法,也可以采用不同的程序甚至算法,計算結(jié)果的異常則按重復(fù)出錯、出錯超時甚至應(yīng)用的相關(guān)知識判斷。異常時可以阻斷輸出并報告管理部分,即實現(xiàn)了失效-靜默和失效-指示的功能。
圖1(b)是MPC5643L兩個核鎖步運行的情況,它把以前單核的串行復(fù)執(zhí)變成了并行的復(fù)執(zhí)。兩個核鎖步運行實際上只是一種擴大診斷覆蓋面的措施。當(dāng)然,它加快了執(zhí)行速度,減少了原來串行執(zhí)行時中間結(jié)果存取可能帶來的新的出錯源。但從本質(zhì)上講,它是一個1oo1D子系統(tǒng)。m-out-of-n代表一種冗余的硬件架構(gòu),可以實現(xiàn)n選m,1oo1是從一個工作通道里選出一個正確結(jié)果。
1oo1D是一個帶診斷的單通道子系統(tǒng),它是沒有硬件冗余的,因為失效時靜默,所以不能提供原定的服務(wù)。對于簡單的功能,安全狀態(tài)也簡單。有了失效-指示,系統(tǒng)設(shè)計者就可以安排一個替代的導(dǎo)致安全狀態(tài)的輸出。例如,失效時關(guān)電源,或者重啟系統(tǒng)。汽車比較復(fù)雜,僅有失效-指示是不夠的。為了達到容許一個硬件錯,我們需要1oo2D系統(tǒng),現(xiàn)在的可靠性和功能安全研究已經(jīng)確定1oo2D系統(tǒng)可以達到ASID的汽車功能安全完整性最高等級,不一定需要更貴的2oo3系統(tǒng)。所謂1oo2D系統(tǒng)是指有兩個計算處理的通道,帶有診斷,有一個通道被診斷出失效時,該通道的輸出被禁止,另一個通道的輸出維持正常的功能,所以它可以容許有一個硬件錯。而用兩個MPC5643L的1oo1D系統(tǒng)并聯(lián)就可以構(gòu)成1oo2D系統(tǒng),此時,實際上的核(signal processing engine)及其RAM、FLASH已經(jīng)達到4組,從經(jīng)濟上講比2oo3系統(tǒng)已無優(yōu)勢。
用1oo1D來構(gòu)成1oo2D時也需要同步機制,當(dāng)有一個通道出錯后,需要有一個恢復(fù)工作的機制,這里涉及功能安全應(yīng)用的分類。一種應(yīng)用屬于偶爾使用(on demand),例如化工對象的過壓保護,它的保護系統(tǒng)必須在過壓時正常工作,此時保護系統(tǒng)內(nèi)即使遇到錯誤,也要正常工作。保護系統(tǒng)啟動后,對象進入安全狀態(tài)。對象要恢復(fù)正常工作,往往伴隨整個設(shè)備與保護系統(tǒng)的大修,或安全完整性的測試,保護系統(tǒng)內(nèi)的錯誤被積累下來的概率很小。另一類是應(yīng)用要連續(xù)工作,保護系統(tǒng)也要連續(xù)工作,它內(nèi)部的錯誤如果不能及時消除,就有可能積累下來,從而突破1oo2D只能對付一個錯誤的極限,造成失效。
對于空間粒子轟擊或電源干擾引起的RAM和FLASH內(nèi)位翻轉(zhuǎn)現(xiàn)象(single event upset),MPC5643L和TMS570采用了ECC編碼,可以糾正1位錯和多位錯的報錯,但是內(nèi)核的保護是不足的,對于同為觸發(fā)器的內(nèi)核中的寄存器可能的翻轉(zhuǎn)未有保護,這樣造成的計算出錯也許可以在1oo1D診斷中發(fā)現(xiàn),但是錯誤的糾正比較困難。例如MPC5643L有兩個CPU內(nèi)核e200z4,CPU中的通用寄存器GPR0~GPR31大量用于指令中的變址[2],如果出錯,則取數(shù)存數(shù)的目的地址就會出錯,這種錯誤會潛伏下來,不一定在當(dāng)前輸出中反映出來,即1oo1D未必能發(fā)現(xiàn)這個錯誤,用現(xiàn)在功能安全的術(shù)語講就是殘留故障(residual fault)。當(dāng)別的應(yīng)用從這個地址取數(shù)時,就會南轅北轍。假如在本任務(wù)中用到這個數(shù),即使在當(dāng)前輸出中反映出來,1oo1D可以報錯,但是只有兩個內(nèi)核的通用寄存器GPR的值仍無法判斷誰對誰錯,只能等待該通用寄存器的下一次刷新。然而在刷新的周期之前,很難說不會有新的錯誤發(fā)生。此時用1oo1D構(gòu)成的1oo2D的兩個通道就可能同時失效了。
MCU經(jīng)歷了無代碼和數(shù)據(jù)保護階段,到MC9S12P128對代碼加ECC保護的階段,再到MPC5643L對代碼和數(shù)據(jù)加ECC保護的階段,還將進入對代碼、數(shù)據(jù)和寄存器加保護的階段。實際上有人早已做了這些工作,只是現(xiàn)在對民用應(yīng)用的安全要求不斷提高,才使這些研究顯得重要了。內(nèi)核的保護可以有各種方案,例如歐洲航天局(European Space Agency)2001年完成的32位基于SPARC V8的容錯的芯片LEON[4],它對觸發(fā)器只用了3次冗余的表決方案,在不斷的時鐘刷新中,依靠表決結(jié)果,使錯誤立即被刷掉。
如果要在兩片MPC5643L構(gòu)成的1oo2D系統(tǒng)中實現(xiàn)通用寄存器糾錯,理論上是有可能的,因為第一個錯誤發(fā)生時存在正確運行的一片MPC5643L,需要做的是把發(fā)生錯誤時涉及的通用寄存器內(nèi)容復(fù)制過去。不過,這要求設(shè)計完整的同步機制,并考慮時間開銷是否影響性能,難度較大。
嵌入式儀表/裝置要達到的功能安全是要與應(yīng)用一起考慮的,即所謂的safety instrumented system。一個儀表的安全失效概率足夠小,并不代表用它的系統(tǒng)就一定安全,這與用法有密切關(guān)系。不能說一個儀表是達到某安全完整性等級的儀表,甚至不能說和以前的儀表有什么不同故而叫它安全儀表,這是個基本概念,所以不宜譯為安全儀表系統(tǒng)。一個系統(tǒng)有它原來要完成的功能,現(xiàn)在要添加一些措施,使完成基本功能中出錯時(操作人員的錯誤、硬件失效或環(huán)境變化)仍然是安全的,要保證安全性?!癷nstrumented”是杜撰的詞,字典里都沒有,筆者理解為借助于工具或措施,所以可以譯為保障了安全性的系統(tǒng)。
所有功能安全的方法目的都是在有故障時把系統(tǒng)導(dǎo)向安全狀態(tài),硬軟件的安全完整性等級往往只考慮失效概率,而失效屬于何種性質(zhì)與應(yīng)用有著密切的關(guān)系,有的被劃為安全失效的部分可能實際上并不安全,所以安全狀態(tài)的確定是根本。通過從上而下的分解過程才能獲得下面子系統(tǒng)或部件必需的安全狀態(tài)。這里故障恢復(fù)時間也是一個重要的因素,也許非常短時間的故障沉默可以忽略不計,但這是要仔細分析以后才能判斷的,最令人擔(dān)心的是在故障沉默期間又發(fā)生新的故障,而破壞時間短可忽略不計的假設(shè)。
例如,汽車主要運送人或貨物,它的工作環(huán)境是高速公路和一般道路。在高速公路上發(fā)動機、變速箱、剎車系如發(fā)生故障,則突然停車就會有追尾的危險,在一般道路上突然加速會有追尾的危險。2010年豐田車突然加速致使人員傷亡,2013年大眾車行駛中突然失去動力,變速箱擋位顯示的“死亡閃爍”引起恐慌,這表明不安全狀態(tài)與工作環(huán)境的密切關(guān)系。這兩件事的事故原因現(xiàn)在尚無定論,也不在這里討論。如果突然加速,則此時的安全狀態(tài)就不是立即停車,因為有突然減速的追尾風(fēng)險,在原有車速初始條件下逐漸減速可能才是安全狀態(tài)。如果發(fā)生機械故障可能傷及變速器,也不應(yīng)立即進入空檔,在人與物的傷害中要兩害相權(quán)取其輕。
歷史上作為軟件工程典型案例的Therac 25放射治療儀事件[5],由于設(shè)備或操作上的意外故障,造成病人受到超劑量的照射,最終死亡。其中總結(jié)了很多系統(tǒng)性的軟件功能安全的必要做法,這與現(xiàn)在ISO61508的功能安全概念是一致的。安全狀態(tài)是每一個局部出錯時都要顧到的“綱”,綱舉才能目張。例如我們常常在程序的空閑部分添加空指令和跳轉(zhuǎn)到重啟入口的命令,以防止受干擾后程序意外跳轉(zhuǎn),落入原有指令的半截之中,錯誤解釋構(gòu)成非法循環(huán)。簡單地這樣處理是不夠的,缺少了對安全狀態(tài)的考慮,因為重啟未必是安全狀態(tài),還必須有全部設(shè)備狀態(tài)的還原,醫(yī)療設(shè)備重啟可能要走消毒過程,可能要把消毒劑送到未退出病人的設(shè)備中甚至體內(nèi)。另一方面,設(shè)備狀態(tài)還原也不一定是對病人安全的。在Therac 25案中就有4個例子重啟造成過量的例子,在那里設(shè)備與人沒有直接約束,但是主要的工作流程中積分函數(shù)-照射劑量是積分,重啟必須顧及已有的積分量,這就涉及關(guān)鍵數(shù)據(jù)的保護,斷點再入地址的保護等內(nèi)容。
回到第2節(jié)討論的安全用CPU,MPC5643L對故障的響應(yīng)是這樣的[3]:所有由硬件手段檢測到的錯誤(例如冗余檢查器、自檢、ECC、電壓和時鐘監(jiān)視)將報告到中央故障收集和處理單元,后者將器件引導(dǎo)到相應(yīng)的組態(tài)好的fail save狀態(tài),防止故障擴展到系統(tǒng)級。它的fail-safe狀態(tài)是下述的二者之一:器件處在關(guān)斷或reset時I/O為三態(tài);對關(guān)鍵性錯誤,輸出一個報錯信號。在正常運行和reset之間不斷切換,且不帶關(guān)斷是不算作fail-safe的。
CPU關(guān)斷時,I/O為三態(tài)可能不是系統(tǒng)出錯時的安全狀態(tài),這與應(yīng)用有密切的關(guān)系。子系統(tǒng)只是大系統(tǒng)的一部分,子系統(tǒng)故障沉默的特性只適合部分系統(tǒng),而安全狀態(tài)是要子系統(tǒng)故障繼續(xù)工作的應(yīng)用,需要更周密的設(shè)計。
[1]Freescale.Safety Manual for Qorivva MPC5643L[EB].(2013-06-24)[2014-03].http://cache.freescale.com/files/32bit/doc/user_guide/MPC5643LSM.pdf.
[2]Freescale.MPC56xx Power Architecture MCU for Automotive[EB].(2013-06-03)[2014-03],http://www.freescale.com.cn/dwf/download/MPC56xx-Power-Architeture-MCU-for-Automotive.pdf.
[3]Freescale.Qorivva MPC5643L Microcontroller Reference Manual [EB].(2013-06-03)[2014-03].http://cache.freescale.com/files/32bit/doc/ref_manual/MPC5643LRM.pdf?fpsp=1.
[4]J Gaisler.A portable and fault-tolerant microprocessor based on the SPARC v8 architecture[EB/OL].[2014-03].http://www.gaisler.com/doc/dsn2002-3.pdf.
[5]百度百科.Therac-25案例,2014.