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