摘要:
從實現(xiàn)過程功能安全要求的基本規(guī)范IEC61511所給出過程工業(yè)中工廠安全保護防災結(jié)構(gòu)體系(見圖l),可以清晰地看出安全儀表控制系統(tǒng)SIS是過程工業(yè)預防災害和減災的兩個重要環(huán)節(jié),確保安全儀表系統(tǒng)的功能安全則是預防和減災的一種基礎(chǔ)保證。本文希望從功能安全的基本概念出發(fā)討論怎么才能切實實現(xiàn)控制系統(tǒng)的概念安全。
一、控制系統(tǒng)功能安全的標準
IEC61508/GB20438《電子/電氣/可編程電子安全相關(guān)系統(tǒng)的功能安全》是一個宏標準,規(guī)范了滿足安全相關(guān)系統(tǒng)功能安全的基本要求和規(guī)則。通過應用嚴格的系統(tǒng)性的過程,以可追溯性、關(guān)鍵性分析、驗證(verifiCation)和確認(validation)的程序為重點,來評估是否滿足功能安全的標準要求。IEC61508標準的一個重要突破就是制訂了一整套完整的開發(fā)程序和一系列的技術(shù)措施,通過嚴格的質(zhì)量管理與全生命周期的程序控制,達到實現(xiàn)避免故障、排除故障及一定程度上容許故障的目的。
·IEC61508共有8個部分,即:
·IEC61508-O:功能安全和IEC61508;
·IEC61508-l:一般要求;
·IEC61508-2:電氣/電子/可編程電子安全相關(guān)系統(tǒng)的要求;
·IEC61508-3:軟件要求;
·IEC61508-4:定義和縮略語;
·IEC61508-5:確定安全完整性等級的方法示例;
·IEC61508-6:IEC61508-2和IEC61508-3的應用指南;
·IEC61508-7:技術(shù)和措施概述。
在不同應用領(lǐng)域更細化和具體實現(xiàn)功能安全,又開發(fā)了進一步的規(guī)范,如:
·實現(xiàn)機械功能安全要求的基本規(guī)范IEC62061;
·實現(xiàn)過程功能安全要求的基本規(guī)范IEC61511;
·實現(xiàn)核電功能安全要求的基本規(guī)范IEC61513;
·實現(xiàn)醫(yī)療設備的功能安全要求的基本規(guī)范IEC60601;
·實現(xiàn)鐵道運輸安全的規(guī)范EN50128;
二、控制系統(tǒng)功能安全的基本概念
安全系統(tǒng)的關(guān)鍵性分多個層次:
·安全關(guān)鍵(Safety-eritiCal)系統(tǒng):單個缺陷或失效會造成危險的故障,如核電站原子反應堆的停堆系統(tǒng)。
·安全相關(guān)(Safety-relevant)系統(tǒng):單個缺陷或失效與第二個缺陷或失效會造成危險的故障,如石化行業(yè)的安全儀表系統(tǒng)。
·非安全相關(guān)(interferenCe-free)系統(tǒng):即使多個缺陷或失效也不致造成危險的故障。
對安全要求zui高的安全關(guān)鍵系統(tǒng),必然為實現(xiàn)其安全要求而zui耗費時間、成本zui高,認證的過程和程序zui復雜。對安全的要求相對較低的安全相關(guān)系統(tǒng),以及對安全要求更低的非安全相關(guān)系統(tǒng),相應在時間、成本和認證所耗費的努力逐級遞減。
在IEC61508的標準中,對石化和化工行業(yè)廣泛應用的安全相關(guān)系統(tǒng)有著嚴格的定義和要求:
·必須在受控裝置EUCI高近風險或危險狀態(tài)情況下,能執(zhí)行所要求的安全功能,使EUC達到或保持安全狀態(tài);
·依靠安全相關(guān)系統(tǒng)本身,或與其它E/E/PE安全相關(guān)系統(tǒng)、其它技術(shù)的安全相關(guān)系統(tǒng)或外部風險降低設施共同作用,達到所要求的安全功能必需的安全完整性。例如圖2所示的一個化工廠常見的加熱攪拌系統(tǒng),除了用圓圈標出的是一個安全儀表系統(tǒng)(SIS)而外,安全閥就是使用機械保護的安全系統(tǒng),它們配合使用達到必需的安全完整性。
這將安全相關(guān)系統(tǒng)在工廠預防和減災中的作用明確規(guī)定如下:首先,由安全相關(guān)系統(tǒng)與外部風險降低設施共同作用,使受控設備達到必要的風險降低量,以滿足所要求的允許風險。其次,安全相關(guān)系統(tǒng)是在接受命令時,采取適當?shù)捻樞騽幼鞣乐笶UC進入危險狀態(tài)。一旦安全相關(guān)系統(tǒng)失效,也屬于導致危險或危害的事件。第三,即使還有其他的具備安全功能的系統(tǒng),但所的安全相關(guān)系統(tǒng)僅靠其本身的能力(而非其西系統(tǒng))就能達到所要求的允許風險。第四,安全相關(guān)系統(tǒng)一般分為安全控制系統(tǒng)和安全防護系統(tǒng),并且具有兩種操作模式。
從安全相關(guān)系統(tǒng)的構(gòu)成來看,它可以是EUC控制系統(tǒng)的一個組成部分,也可用
傳感器和/或執(zhí)行器與EUC接口,即可通過實現(xiàn)EUC控制系統(tǒng)中的安全功能(也可能通過分開的和獨立的附加系統(tǒng))達到要求的安全完整性等級,或者利用分離的、獨立、專門的安全相關(guān)系統(tǒng)實現(xiàn)安全功能。
這就明確告訴我們,安全相關(guān)系統(tǒng)的功能可能包括:用于防止危險事件發(fā)生,即安全相關(guān)系統(tǒng)一旦執(zhí)行其安全功能,則不致發(fā)生有危險事件;用來減輕危險事件的影響,即通過減輕后果降低風險?;蛘咄瑫r具有上述的組合功能。人也可作為安全相關(guān)系統(tǒng)的一部分,例如,人可以接收來自可編程電子裝置的信息,并通過該裝置按接收信息要求執(zhí)行安全動作。
安全相關(guān)系統(tǒng)包括執(zhí)行安全功能所需的全部硬件、軟件以及支持服務(如電源、傳感器和其它輸入裝置、執(zhí)行器和其它輸出裝置也包括在安全相關(guān)系統(tǒng)中)。
安全相關(guān)系統(tǒng)的技術(shù)基礎(chǔ)范圍可以十分廣泛,包括電氣、電子、可編程電子、液壓和氣動等。
由于在工廠安全保護防災的體系結(jié)構(gòu)中對不同的裝置、系統(tǒng),甚至系統(tǒng)內(nèi)的各個子系統(tǒng)或部件的安全要求常常有很大差異,因此,IEC61508標準允許對一個系統(tǒng)的子系統(tǒng)和部件進行獨立的評估。所以,我們在談論功能安全時要嚴格區(qū)分所指的對象是系統(tǒng),還是構(gòu)成系統(tǒng)的部件或子系統(tǒng)。
三、控制系統(tǒng)的安全完整性及其等級
安全完整性是指在規(guī)定的條件下、規(guī)定的時間內(nèi),安全相關(guān)系統(tǒng)成功地實現(xiàn)所要求的安全功能的概率。*,控制系統(tǒng)由構(gòu)成其系統(tǒng)的各種硬件(控制系統(tǒng)裝置、現(xiàn)場儀表、通信網(wǎng)絡等等)以及執(zhí)行控制要求和功能的軟件綜合而成,因此控制系統(tǒng)的安全完整性由硬件的安全完整性和系統(tǒng)的安全完整性組成。硬件安全完整性是在危險失效模式中對應于安全相關(guān)系統(tǒng)安全完整性的硬件隨機失效的那一部分,一般可以通過所要求的硬件安全功能失效率予以量化;而系統(tǒng)安全完整性則是指在危險失效模式中對應于安全相關(guān)系統(tǒng)安全完整性的系統(tǒng)失效的部分(包括軟件失效)。控制失效與避免失效涉及設計、操作模式等諸多環(huán)節(jié)。顯然,硬件隨機失效和系統(tǒng)失效的機制不同,控制失效的方法也不同(見圖3)。
在安全相關(guān)系統(tǒng)中,安全完整性的要求用4個離散的等級予以劃分,即SIL4,SIL3,SILZ和SILI。安全完整性的等級越高的安全相關(guān)系統(tǒng),其執(zhí)行所要求的安全功能的概率也越高。根據(jù)安全相關(guān)系統(tǒng)的使用方式、所要求發(fā)生的頻率,可分為低要求操作模式和高要求(或連續(xù))操作模式。低要求操作模式對應于每年發(fā)生風險的次數(shù)多于等于1次的安全相關(guān)系統(tǒng);高要求(或連續(xù))操作模式對應于每年發(fā)生風險的次數(shù)少于1次的安全相關(guān)系統(tǒng)。表l是IEC615081/GB/T20438規(guī)定的低要求操作模式下的安全完整性的目標失效概率和目標風險降低因子,表2是高要求(或連續(xù))操作模式的安全完整性的目標失效概率。SIL3被認為是單個可編程系統(tǒng)中可達到的風險降低的zui高等級。
四、安全系統(tǒng)的多樣性(diverSity)原則
安全系統(tǒng)可以采取多樣性原則克服可能發(fā)生的故障,或設計分析中存在的不確定性。多樣性是指用不同方法執(zhí)行所要求同一功能。例如:可用不同的物理方法或不同的設計途徑來達到多樣性。
多樣性分為:①信號多樣性;②功能多樣性;③設備多樣性;④軟件多樣性(如指令運算的多樣性);⑤人員多樣性等等。其中較為常用和有效的是信號多樣性和功能多樣性。
對所采用的多樣性措施是否適當應加以論證。為了保證能切實執(zhí)行多樣性,對設備的多樣性或儀表控制系統(tǒng)的軟件多樣性所進行的論證,必須擴展到這些設備的硬件、軟件部件,如實時操作系統(tǒng)RT0S。圖4是57-400F運用指令運算的多樣性和時間冗余來提高安全功能的可靠性。操作數(shù)A、B在CPUI進行“與”運算,結(jié)果為C;A、B經(jīng)過編碼變成字A、B,在CPU2中做“或”運算,結(jié)果為D=/C。在比較器中進行比較運算,僅當D特/C時輸出停機信號。
再如某核電站的緊急停堆系統(tǒng)由兩個*獨立的系統(tǒng)構(gòu)成。其安全控制系統(tǒng)由不同的供應商提供。一個停堆控制系統(tǒng)采用安全PLC系統(tǒng),由3個獨立的3機冗余表決的分系統(tǒng)(D、E、F)組成(見圖5)。每個分系統(tǒng)都具備停堆功能,但其停堆輸出還要送給3取2的繼電器硬邏輯進行表決,zui終給出停堆信號口該安全PLC系統(tǒng)硬件平臺配有操作系統(tǒng),運用符合工業(yè)控制編程語言的標準IEC61131-3所規(guī)范的功能塊圖語言(FBD)編制應用軟件。這套停堆控制系統(tǒng)采用T綜合法(IntegratedApproach)設計。
值得注意的是,為了實現(xiàn)安全系統(tǒng)的機理多樣性,還設置了另一套*不同機理的停堆系統(tǒng),通過將有害的中子吸收劑(poison)注入反應堆中的慢化劑(moderator)的方法進行停堆控制。這一停堆控制系統(tǒng)采用沒有操作系統(tǒng)的工控機硬件平臺,安全控制軟件運用高安全的具有子集的MODULA-2語言編寫。這一套系統(tǒng)使用的是另一種設計方法一合理設計流程法(rationaldeSignProCeSS),用確定離子室記錄的功率信號的合理性來檢查異常差錯信息。由此可見,在要求*的安全關(guān)鍵系統(tǒng)中充分運用了多樣性的原則,有:機理的多樣性、設計方法的多樣性、設備的多樣性、編程語言的多樣性,這樣就從系統(tǒng)的層面上把同時發(fā)生差錯的概率降至盡可能的小。
五、重視處理假事件
各種安全系統(tǒng)(包括緊急停車系統(tǒng)ESD)如果對假事件作出響應,造成非計劃停車,不但要付出高昂代價,而且在大多數(shù)情況下具有危險性。大量的假報警還會導致操作人員產(chǎn)生矛盾心理,以至于對危險的真報警都不予理會,或者反映很慢。
產(chǎn)生假事件的原因:①現(xiàn)場設備的硬件故障,如壓力開關(guān)、
電磁閥的線圈或常閉觸點存在高電阻,PLC的I/O模塊有故障,現(xiàn)場設備中電子器件有故障,熱電偶斷偶,熱電阻斷線等,這些明顯的設備故障都會引發(fā)假事件。②一些公用故障如電源、氣源故障也會引發(fā)假事件。③缺乏維護,不及時對工作有缺陷的儀表、傳感器進行測試、校驗,是引發(fā)假事件的重要原因。
下面討論信號多樣性問題。看一個用3個
浮球液位開關(guān)測量液位的簡單例子(圖6)。我們可以有4種配置。采用單信號、雙信號還是三信號更有利于安全和可靠的平衡呢?概括地說:采用單機(單信號)系統(tǒng)不安全且不可靠,在故障安全(假事件)或危險方面存在50/50的概率;采用雙機(雙信號)系統(tǒng)配置為二取一(1002),可能較安全,但存在高的假故障率;雙機(雙信號)系統(tǒng)配置為二取二(2002),由假事件引起的故障率較低,但安全性差;三機(三信號)冗余系統(tǒng)為三取二(2003),提供可以接受的安全與可靠的平衡。
顯然,SlS/ESD不能選擇單機(單信號)系統(tǒng)。選用雙機(雙信號)系統(tǒng),在一定程度上可達到安全和可用性。二取一(1002)安全性較好,但可靠性及假事件的影響大;二取二(2002)可靠性較好,安全性卻較差。即使雙機(雙信號)系統(tǒng)具有很好的自診斷性能,可以確定采用哪個通道或處理器故障,將壞的通道或處理器剔除,但這時雙機系統(tǒng)降格為單機系統(tǒng)。三取二(2003)*的優(yōu)點是不考慮哪個通道發(fā)生故障,是怎么發(fā)生故障的;也不*依靠自診斷來確定哪個通道投用。其亮點在于它僅要求所接收到的信息。三取二表明,若有一個信號不同于另外兩個信號,立即報警,而這兩個信號相同的通道處于安全工作狀態(tài)。
從圖6所示的例子可知,如果流程要求用于液位測量的儀表每年只能發(fā)生1次故障,而且每半年對浮球開關(guān)進行一次維護測試,那么對于不同的浮球液位開關(guān)配置,因故障造成危險的年概率如表3所示。
六、軟件的可靠性難以量化
軟件可靠性的基本問題是:①軟件不受物理故障的影響。隨著硬件元器件的可靠性越來越高,并可以采用冗余技術(shù),因而安全問題的矛盾集中到了軟件,以至于今天我們看到大多數(shù)的系統(tǒng)失效源自軟件。失效常常由于一些非明顯的事件組合造成,而不是由于機械應力超過一定程度造成。而這些非明顯因素往往事先沒有估計到,所以在軟件的編制中考慮不到。②軟件是由人來設計的,軟件的設計不可能面面俱到,總有些因素在設計時沒有考慮到,因此,設計的缺陷導致軟件的故障。③數(shù)字系統(tǒng)本質(zhì)上是非連續(xù)的,所以輸入對輸出的映射一定是不連續(xù)的。④軟件建立在模型化和測試的基礎(chǔ)上,這些工作都是人在做的。人難免犯錯誤,所以影響軟件的可信度。
因為以上這些不可避免的問題,可以得出軟件的可靠性難以量化的結(jié)論。另外,從趨勢上講,軟件和人為因素導致失效、事故和停機的比例越來越高。因為現(xiàn)在對軟件的依賴越來越高,軟件變得越來越復雜,因而難以控制。人犯錯誤不可避免。硬件失效可能是系統(tǒng)失效的原因,系統(tǒng)的失效會引起軟件的失效。有鑒于此,要保證工業(yè)控制軟件的功能安全就不得不依賴于對軟件進行嚴格的驗證和確認。
七、工業(yè)控制軟件的功能安全概念和方法
IEC6508-1規(guī)定了整體安全生命周期的16個階段,包括:概念,整體范圍定義,危險和風險分析,整體安全要求,安全要求分配,整體操作和維護計劃編制,整體安全確認計劃編制,整體安裝和試運行計劃編制,E肥尸E安全相關(guān)系統(tǒng):實現(xiàn),其他技術(shù)安全相關(guān)系統(tǒng):實現(xiàn),外部鳳險降低設施:實現(xiàn),整體安裝和試運行,整體安全確認,整體操作維護和修理,整體修改和改型,停用及處理。與軟件相關(guān)的是第9階段“E/E/PE安全相關(guān)系統(tǒng):實現(xiàn)”
在IEC615O8-3中詳細地規(guī)定了執(zhí)行安全功能的軟件如何滿足功能安全的要求。它規(guī)范的工控軟件的功能安全問題包括以下方面:軟件質(zhì)量管理系統(tǒng),軟件安全生命周期要求,軟件功能安全評估。它給出的是在軟件的安全生命周期的各個階段應該滿足什么要求,以及如何來驗證工控軟件達到了功能安全的標準。IEC61508-3的突出貢獻在于制訂了一整套完整的開發(fā)程序和一系列技術(shù)措施,通過嚴格的質(zhì)量管理與全生命周期的控制程序,實現(xiàn)避免故障、檢測故障和排除故障,以及容許存在故障,從而保證軟件的安全完整性能??傊?,IEC61508-3給出了在安全相關(guān)系統(tǒng)的軟件編制時應遵循哪些規(guī)范就能夠達到功能安全的要求。這好比它編織了安全軟件開發(fā)的“鳥籠”,以及在“鳥籠”里飛必須遵守的規(guī)則和約束;一旦飛出“鳥籠”就不能保證軟件的安全。但它并沒有具體規(guī)定工控軟件在選用編制系統(tǒng)軟件和編制應用軟件時,應該如何選擇適當?shù)木幊陶Z言、指令集和數(shù)據(jù)類型,就可以從基礎(chǔ)上保證軟件的功能安全性。這些問題有些可以通過IEC61508-6(IEC61508-2和IEC61508-3的應用指南)和IEC61508-7(技術(shù)和措施概述)找到相應的具有實用性的參考規(guī)定和資料,有些就必須再進一步查找其它圍繞不同應用領(lǐng)域的工業(yè)控制軟件的功能安全的規(guī)范,如美國核管制委員會NRC發(fā)布的《核電站軟件語言導則》、PLCopen組織發(fā)布的在IEC61131-3的開發(fā)環(huán)境下有關(guān)機械功能安全的規(guī)范《SafetySoftwareTechnioalSpecification》等等。
*,安全相關(guān)系統(tǒng)包括硬件、軟件,軟件必須運行于硬件系統(tǒng)環(huán)境中才能實現(xiàn)其價值和功能,在完成系統(tǒng)的功能安全時,一定要認識這二者之間的關(guān)系。通過圖7所揭示的IEC61508-3與IEC61508-2的關(guān)系就能一目了然:IEC61508-2是總體,IEC61508-3只是局部。盡管它們可能是由不同的團隊獨立開發(fā),但zui終還是要集成起來經(jīng)過總體檢驗,才能夠判斷是否滿足安全要求。軟件的安全完整性等級采用表1低要求操作模式下的安全完整性的目標失效概率劃分。達到SIL4等級的軟件相當于每1.14年至11.4年之間發(fā)生1次失效。
八、安全系統(tǒng)的軟件構(gòu)成
與控制系統(tǒng)的軟件構(gòu)成一樣,安全系統(tǒng)的軟件也包括系統(tǒng)軟件和應用軟件兩部分(見圖8)。它們分別用全可變語言(fUnvariabilitylangUage,FVL)和有限可變語言(limitedvariability1angUage,LVL)編寫(見圖7)。這些概念都是將軟件引入功能安全時建立起來的。
什么是全可變語言呢?其實此類語言就是計算機編程人員廣泛使用的語言,它提供實現(xiàn)各種功能和應用的能力。典型的利用全可變語言的系統(tǒng)就是通用計算機。在過程工業(yè)中,只有在嵌入式軟件(一般指固件或系統(tǒng)軟件)中才使用全可變語言,極少在應用程序中使用。ADA、C、C++、指令表IL、Pasoal、Java、SQL均屬于全可變語言。
有限可變語言在IEC61508-4中定義為:在工業(yè)和商業(yè)可編程電子控制器中使用且范圍局限于應用程序的文本的或圖形的軟件編程語言。例如:引自IEC61131-3和其它標準或規(guī)范的有限可變語言,用來編寫PLC系統(tǒng)的應用程序。它們分別是梯形圖語言LD;布爾代數(shù)語言:帶有增加某些記憶指令能力的,基于布爾運算符(如AND、OR和NOT)的低級語言;功能塊圖語言FBD:除布爾運算符外,可使用更復雜的功能,如數(shù)據(jù)傳輸文件、塊傳輸讀/寫,移位寄存器和序列發(fā)生器指令等;順序功能圖語言SFC:有順序之程序的圖形表示,由相互的步驟、動作和帶轉(zhuǎn)換條件的定向連接線構(gòu)成。
九、軟件功能安全對編程語言的要求
編程語言并不是專為安全系統(tǒng)開發(fā)的,它們在出現(xiàn)安全軟件的概念之前就發(fā)展了很長的時間。所以要用FVL和LVL完成安全系統(tǒng)的軟件編寫,首先必須對這些語言和用它們編寫的程序提出要求和進行評估,以確定在什么條件下使用這些語言就能確保安全軟件完成其保證功能安全的任務。
從另一方面來看,由于嵌入式系統(tǒng)已滲透到各行各業(yè),這些年來,凡是對安全有重要要求的行業(yè)都很關(guān)注這個問題,制定了各自的規(guī)范。例如汽車行業(yè)建立了汽車工業(yè)軟件可靠性協(xié)會MISRA,發(fā)布了專門用在汽車行業(yè)的C++語言的子集MISRAC++。美國核管制委員會NRC早在1996年就發(fā)布了《核電站軟件語言導則》,之后97年又公布了其修正版NUREG/CR6463Rev.1。因為其性,直至現(xiàn)在它已成為安全軟件的經(jīng)典規(guī)范。不僅僅是核電,其它行業(yè)的軟件安全問題也經(jīng)常以此作為引經(jīng)據(jù)典的文獻。
在美國的核管制委員會發(fā)布了《核電站軟件語言導則》NUREG/CR6463Revl中,對用語言編寫的用于安全系統(tǒng)的軟件進行了安全評述,著重指出以往發(fā)現(xiàn)的軟件安全性問題和缺陷,從對應用重要性的理解、設計的方法論、學科發(fā)展和測試等方面加以闡述。
NUREG/CR6463Revl將軟件安全的屬性按三級架構(gòu)加以分類和編排:*屬性、中間屬性和基本屬性,如圖9所示。
軟件的可靠性屬性是在所規(guī)定的條件下軟件的可預測、且恒定一致的性能。由于軟件的可靠性屬性旨在減少在軟件開發(fā)實現(xiàn)期間可能被導入源代碼而造成誤操作的故障,所以此*屬性對安全來說是很重要的。
軟件的魯棒性是在異常條件或事件下,安全系統(tǒng)的軟件以一種可接受的方式進行操作的能力。由于它加強了軟件處理例外情況、從內(nèi)部故障中恢復,以及阻止因異常環(huán)境而致使故障傳播的能力,因此此*屬性也很重要。
軟件的可追溯性表現(xiàn)為:①對源代碼和所引用的程序庫部件的源頭進行檢查和識別;②通過對開發(fā)過程的可行性進行檢查,來驗證已執(zhí)行的代碼在其開發(fā)過程中是否按規(guī)范的方法完成其實現(xiàn);③審視代碼與高一級的設計文檔相關(guān)聯(lián)的能力。此屬性之所以重要是因為這將便于對軟件進行驗證和認證(V&V),這是軟件質(zhì)量保證的另一方面。
軟件的可維護性是在軟件交付使用后若需對源代碼做改動時,導致將故障引入的可能性減少的必要手段。此屬性之所以對安全來說很重要,是因為在對軟件進是因為在對軟件進行適應、校正或完善期間可以盡量減少可能發(fā)生的誤操作的故障。根據(jù)IEEE所給出的規(guī)定,軟件可靠性是在軟件編制、調(diào)試和執(zhí)行運行全過程的環(huán)境下,既可以是在所定義的時間間隔內(nèi)和所定義的條件下成功執(zhí)行的幾率,也可以是按照命令成功操作的幾率。軟件執(zhí)行完成是其對于系統(tǒng)存貯器和程序邏輯恰當行為的結(jié)果。這意味著軟件所產(chǎn)生的適時輸出是編程人員對所使用的語言結(jié)構(gòu)和運行期間環(huán)境特性理解的函數(shù)。因此可靠性的中間屬性包括:存貯空間利用可預測性(軟件不致造成處理器會向非預期的或不允許存貯空間進行存取的高概率);控制流可預測性(處理器按編程員預期的順序執(zhí)行指令的高概率);時序可預測性(軟件在所定義的運行環(huán)境下滿足響應時間和處理能力約束的高概率);數(shù)學結(jié)果或邏輯結(jié)果可預測性(軟件在所定義的運行環(huán)境下產(chǎn)生編程員所預期結(jié)果的高概率)。詳見圖10。
所謂軟件魯棒性是指在異常或其他未曾預計的情況下軟件繼續(xù)執(zhí)行的能力。魯棒性的同義詞是耐久性(SUrviVability)。對安全系統(tǒng)而言魯棒性之所以重要是因為在一個意外或偏離額定工況時會發(fā)生未曾預料的事件,在這樣的情況下軟件持續(xù)的對系統(tǒng)監(jiān)控和控制的能力仍能有效作用。軟件魯棒性的中間屬性和基礎(chǔ)屬性見圖11。
軟件的可追溯性是指與軟件設計相比較,安全軟件的那些支持其正確性和完整性驗證的屬性。可追溯性的基礎(chǔ)屬性有:可讀性(這也是可維護性的屬性),內(nèi)嵌函數(shù)的可控的使用,編譯庫的可控使用。
軟件的可維護性是為了有效減少在對軟件進行修改時可能引入的差錯。會影響安全的與可維護性有關(guān)的中間屬性(見圖12)包括:可讀性一便干項目人員對軟件的理解的軟件屬性;數(shù)據(jù)的抽象一對于那些代碼被劃分和模塊化的區(qū)域,這樣做可以使在修改軟件時意想不到的副作用和次生的影響減至zui?。缓瘮?shù)的內(nèi)聚性一對代碼中的軟件元素給予設計水平的函數(shù)適當?shù)拇尜A地址;可移植性一避免一種語言的非標準函數(shù)對安全的重大威脅;可塑性一將可能修改的代碼區(qū)與軟件代碼的其余部分隔離開。
十、編程語言實現(xiàn)軟件功能安全的方法
在NRC的NUREG/CR6463Rev.1完整版本中給出了將9種編程語言(Ada,Ada95,C/C++,PaSCal,PL/M,IEC61131-3規(guī)定的梯形圖、順序功能圖、結(jié)構(gòu)化文本和功能塊圖)用于安全系統(tǒng)時,應該關(guān)注它們特定的存在問題和如何加以克服注意點。譬如,對于C語言來說,是其指針的初始化問題;對于IEC61131-3所規(guī)范的編程語言,則應關(guān)注其時序、正常運行的監(jiān)控,以及故障處理等問題。
從*屬性中的可靠性、中級屬性中的可預測性的控制流和基礎(chǔ)屬性中的在使用前變量的初始化這三方面導出對指針初始化的指導原則。所有的變量和指針在使用前都應該初始化。C語言支持通過說明來初始值的方式進行初始化,但并不要求所有的對象(指變量、數(shù)據(jù)結(jié)構(gòu)或數(shù)組)進行初始化。在若干情況下,一個對象的初始化不僅要為對象的存貯地址一個特定的位的組合值,而且還要采取特殊的動作來為對象的生命(例如為對象賦予對應的源)進行平滑初始化。在C++中,可能要考慮任意相關(guān)數(shù)據(jù)作為對象,并提供構(gòu)造數(shù)據(jù)組一個實例的工具。這樣便會以系統(tǒng)的方式破壞數(shù)據(jù)組當前的實例。
考慮到上述情況,必須對初始化提出以下導則:①不要對超出其說明范圍的變量自動使用指針。存貯在指針的值對一個自動變量會包含超出其函數(shù)范圍的無用輸入。②指針的初始化,初始化問題也會在指針中發(fā)生。在安全系統(tǒng)中所有C語言中的指針變量,其初值都應該為NU11;所有C++中的指針變量,其初值都應該為0。在被使用之前,指針應對一個有效值予以測試。當一個指針被定義時,它沒有一個地址與其相關(guān)聯(lián)。使用一個未初始化的指針,會造成重寫未曾預想到的指針的存貯地址。錯誤地重寫存貯內(nèi)容會引起嚴重的問題,包括對系統(tǒng)的崩潰。③要確保每一個指針的說明間接的運算符都是存在的。每個指針都應該有一個間接運算符(*)。
IEC61131-3所定義的5種語言除指令表語言(IL)與匯編語言相似外,其它語言都納入了NRC關(guān)于編程語言的導則中。對這些語言特定的指導原則源于魯棒性*屬性和異常處理的中間屬性。應該專注于在機組緊急停車時PLC的行為。通常此時所有的輸出均應切斷,但往往并非總是如此。一般PLC系統(tǒng)總是設計成在緊急停車時系統(tǒng)處于故障安全狀態(tài)。某些PLC在遇到這樣的情況時具有處理器能自動停止主梯形圖程序的執(zhí)行,轉(zhuǎn)而執(zhí)行“故障程序”的子程序。這使系統(tǒng)的設計者可以決定采取適當?shù)膭幼?,包括以一種安全的方式讓系統(tǒng)停下來。問題在于:IEC61131-3規(guī)范中未涉及到允許PLC系統(tǒng)本身包含有某種預先設計好的硬件故障程序,當檢側(cè)到一定范圍的故障條件時便會自動執(zhí)行。不過,IEC61131-3允許建立非周期的任務,通過觸發(fā)適當?shù)膬?nèi)部診斷信息來執(zhí)行處理特定類型的出錯(I/*時降級運行模式、向操作員見面報警等)。
對于PLC系統(tǒng),在編程的設計階段就應在程序結(jié)構(gòu)中考慮故障程序問題。這時必須遵從如下原則:①完整性故障程序不能依賴于檢測到程序崩潰的所有特例,因此遇到PLC的主要故障時要有針對附加措施的安全保證。②可觀察性故障程序要有狀態(tài)記錄和報警的能力。故障程序應顯性執(zhí)行,不被掩蓋。③真實性檢查在啟動故障程序的情況下有可能將可以反映原來條件的程序存貯內(nèi)容、數(shù)據(jù)文件或I/O狀態(tài)破壞,因此故障程序應保證在執(zhí)行故障處理前將這些環(huán)境加以保存,以便事后分析。④在故障程序不起作用時的靛障安全特性萬一PLC系統(tǒng)的故障處理程序不起作用,系統(tǒng)設計仍要保證安全狀態(tài)的后備措施。
PLC系統(tǒng)一般以的位和字的形式提供對應用程序的正常運行狀況的監(jiān)控,這些信息包括特定任務的執(zhí)行時間、I/O刷新信息、I/O操作狀態(tài)信息、電池狀態(tài)信息和其它用來確定PLC正常運行狀態(tài)的信息。遺憾的是IEC61131-3規(guī)范中對這些信息的典型值、范圍和類型并未做出規(guī)定。而安全系統(tǒng)恰恰應該具備這些信息,作為判斷其是否運行正常的檢查和是否需要異常處理的*的部分。
在IEC61131-3的規(guī)范關(guān)于“任務”這節(jié)中,闡述了制造廠應向用戶提供所有任務執(zhí)行的信息的zui低要求。關(guān)鍵在于由干這一問題的分類落在出錯檢查,而未能在規(guī)范中描述,于是我們也得不到這些任務執(zhí)行時在運行時應以何種形式接受檢查的規(guī)定。另外,許多PLC和類似的符合IEC6113卜3的系統(tǒng)一般只給出每次執(zhí)行所有任務的周期(即所謂的掃描周期),卻忽略了單個任務執(zhí)行周期信息和標志的提供。如果因為安全原因需要在執(zhí)行某個任務超時N次時必須緊急停車,在PLC現(xiàn)有的能力下是無能為力的。為了解決這個問題,必須讓應用程序能夠?qū)蝹€任務執(zhí)行其超時的檢測,并給出單任務超時的標志,這樣才能做出適當?shù)姆磻τ诎踩P(guān)鍵系統(tǒng),監(jiān)控任務超時的問題尤其要緊。必須在程序開發(fā)的檢查階段關(guān)注。
十一、在安全系統(tǒng)中推薦采用的編程語言
在IEC61508-7的附錄C.4.5中給出了適合用于安全系統(tǒng)的軟件編制推薦的語言(見表4),表中列舉了24種編程語言,其中適用于安全系統(tǒng)的軟件編制的語言共9種,它們是:屬于全可變語言FVL有5種(具有子集的ADA,具有子集的MODULA-2,具有子集的Pascal,具有子集的FORTRAN77,具有子集和編程標準并使用靜態(tài)分析工具的C);屬于有限可變語言LVL有4種(具有定義的語言子集的梯形圖,具有定義的語言子集的功能塊圖,具有定義的語言子集的結(jié)構(gòu)化文本,具有定義的語言子集的順序功能圖)。
PLCopen組織與專業(yè)從事安全認證的機構(gòu)TUV一起定義了在IEC61131-3的環(huán)境下涉及機械安全的規(guī)范《SafetySoftwareTechnicalSpecification》。其中僅規(guī)定了兩種具有定義子集的語言(功能塊圖語言FBD和梯形圖語言LD)可用于機械安全系統(tǒng)。