摘要:
從實(shí)現(xiàn)過(guò)程功能安全要求的基本規(guī)范iec61511所給出過(guò)程工業(yè)中工廠安全保護(hù)防災(zāi)結(jié)構(gòu)體系(見(jiàn)圖l),可以清晰地看出安全儀表控制系統(tǒng)sis是過(guò)程工業(yè)預(yù)防災(zāi)害和減災(zāi)的兩個(gè)重要環(huán)節(jié),確保安全儀表系統(tǒng)的功能安全則是預(yù)防和減災(zāi)的一種基礎(chǔ)保證。本文希望從功能安全的基本概念出發(fā)討論怎么才能切實(shí)實(shí)現(xiàn)控制系統(tǒng)的概念安全。
一、控制系統(tǒng)功能安全的標(biāo)準(zhǔn)
iec61508/gb20438《電子/電氣/可編程電子安全相關(guān)系統(tǒng)的功能安全》是一個(gè)宏標(biāo)準(zhǔn),規(guī)范了滿(mǎn)足安全相關(guān)系統(tǒng)功能安全的基本要求和規(guī)則。通過(guò)應(yīng)用嚴(yán)格的系統(tǒng)性的過(guò)程,以可追溯性、關(guān)鍵性分析、驗(yàn)證(verification)和確認(rèn)(validation)的程序?yàn)橹攸c(diǎn),來(lái)評(píng)估是否滿(mǎn)足功能安全的標(biāo)準(zhǔn)要求。iec61508標(biāo)準(zhǔn)的一個(gè)重要突破就是制訂了一整套完整的開(kāi)發(fā)程序和一系列的技術(shù)措施,通過(guò)嚴(yán)格的質(zhì)量管理與全生命周期的程序控制,達(dá)到實(shí)現(xiàn)避免故障、排除故障及一定程度上容許故障的目的。
·iec61508共有8個(gè)部分,即:
·iec61508-o:功能安全和iec61508;
·iec61508-l:一般要求;
·iec61508-2:電氣/電子/可編程電子安全相關(guān)系統(tǒng)的要求;
·iec61508-3:軟件要求;
·iec61508-4:定義和縮略語(yǔ);
·iec61508-5:確定安全完整性等級(jí)的方法示例;
·iec61508-6:iec61508-2和iec61508-3的應(yīng)用指南;
·iec61508-7:技術(shù)和措施概述。
在不同應(yīng)用領(lǐng)域更細(xì)化和具體實(shí)現(xiàn)功能安全,又開(kāi)發(fā)了進(jìn)一步的規(guī)范,如:
·實(shí)現(xiàn)機(jī)械功能安全要求的基本規(guī)范iec62061;
·實(shí)現(xiàn)過(guò)程功能安全要求的基本規(guī)范iec61511;
·實(shí)現(xiàn)核電功能安全要求的基本規(guī)范iec61513;
·實(shí)現(xiàn)醫(yī)療設(shè)備的功能安全要求的基本規(guī)范iec60601;
·實(shí)現(xiàn)鐵道運(yùn)輸安全的規(guī)范en50128;
二、控制系統(tǒng)功能安全的基本概念
安全系統(tǒng)的關(guān)鍵性分多個(gè)層次:
·安全關(guān)鍵(safety-eritical)系統(tǒng):單個(gè)缺陷或失效會(huì)造成危險(xiǎn)的故障,如核電站原子反應(yīng)堆的停堆系統(tǒng)。
·安全相關(guān)(safety-relevant)系統(tǒng):單個(gè)缺陷或失效與第二個(gè)缺陷或失效會(huì)造成危險(xiǎn)的故障,如石化行業(yè)的安全儀表系統(tǒng)。
·非安全相關(guān)(interference-free)系統(tǒng):即使多個(gè)缺陷或失效也不致造成危險(xiǎn)的故障。
對(duì)安全要求zui高的安全關(guān)鍵系統(tǒng),必然為實(shí)現(xiàn)其安全要求而zui耗費(fèi)時(shí)間、成本zui高,認(rèn)證的過(guò)程和程序zui復(fù)雜。對(duì)安全的要求相對(duì)較低的安全相關(guān)系統(tǒng),以及對(duì)安全要求更低的非安全相關(guān)系統(tǒng),相應(yīng)在時(shí)間、成本和認(rèn)證所耗費(fèi)的努力逐級(jí)遞減。
在iec61508的標(biāo)準(zhǔn)中,對(duì)石化和化工行業(yè)廣泛應(yīng)用的安全相關(guān)系統(tǒng)有著嚴(yán)格的定義和要求:
·必須在受控裝置euci高近風(fēng)險(xiǎn)或危險(xiǎn)狀態(tài)情況下,能執(zhí)行所要求的安全功能,使euc達(dá)到或保持安全狀態(tài);
·依靠安全相關(guān)系統(tǒng)本身,或與其它e/e/pe安全相關(guān)系統(tǒng)、其它技術(shù)的安全相關(guān)系統(tǒng)或外部風(fēng)險(xiǎn)降低設(shè)施共同作用,達(dá)到所要求的安全功能必需的安全完整性。例如圖2所示的一個(gè)化工廠常見(jiàn)的加熱攪拌系統(tǒng),除了用圓圈標(biāo)出的是一個(gè)安全儀表系統(tǒng)(sis)而外,安全閥就是使用機(jī)械保護(hù)的安全系統(tǒng),它們配合使用達(dá)到必需的安全完整性。
這將安全相關(guān)系統(tǒng)在工廠預(yù)防和減災(zāi)中的作用明確規(guī)定如下:首先,由安全相關(guān)系統(tǒng)與外部風(fēng)險(xiǎn)降低設(shè)施共同作用,使受控設(shè)備達(dá)到必要的風(fēng)險(xiǎn)降低量,以滿(mǎn)足所要求的允許風(fēng)險(xiǎn)。其次,安全相關(guān)系統(tǒng)是在接受命令時(shí),采取適當(dāng)?shù)捻樞騽?dòng)作防止euc進(jìn)入危險(xiǎn)狀態(tài)。一旦安全相關(guān)系統(tǒng)失效,也屬于導(dǎo)致危險(xiǎn)或危害的事件。第三,即使還有其他的具備安全功能的系統(tǒng),但所的安全相關(guān)系統(tǒng)僅靠其本身的能力(而非其西系統(tǒng))就能達(dá)到所要求的允許風(fēng)險(xiǎn)。第四,安全相關(guān)系統(tǒng)一般分為安全控制系統(tǒng)和安全防護(hù)系統(tǒng),并且具有兩種操作模式。
從安全相關(guān)系統(tǒng)的構(gòu)成來(lái)看,它可以是euc控制系統(tǒng)的一個(gè)組成部分,也可用傳感器和/或執(zhí)行器與euc接口,即可通過(guò)實(shí)現(xiàn)euc控制系統(tǒng)中的安全功能(也可能通過(guò)分開(kāi)的和獨(dú)立的附加系統(tǒng))達(dá)到要求的安全完整性等級(jí),或者利用分離的、獨(dú)立、專(zhuān)門(mén)的安全相關(guān)系統(tǒng)實(shí)現(xiàn)安全功能。
這就明確告訴我們,安全相關(guān)系統(tǒng)的功能可能包括:用于防止危險(xiǎn)事件發(fā)生,即安全相關(guān)系統(tǒng)一旦執(zhí)行其安全功能,則不致發(fā)生有危險(xiǎn)事件;用來(lái)減輕危險(xiǎn)事件的影響,即通過(guò)減輕后果降低風(fēng)險(xiǎn)?;蛘咄瑫r(shí)具有上述的組合功能。人也可作為安全相關(guān)系統(tǒng)的一部分,例如,人可以接收來(lái)自可編程電子裝置的信息,并通過(guò)該裝置按接收信息要求執(zhí)行安全動(dòng)作。
安全相關(guān)系統(tǒng)包括執(zhí)行安全功能所需的全部硬件、軟件以及支持服務(wù)(如電源、傳感器和其它輸入裝置、執(zhí)行器和其它輸出裝置也包括在安全相關(guān)系統(tǒng)中)。
安全相關(guān)系統(tǒng)的技術(shù)基礎(chǔ)范圍可以十分廣泛,包括電氣、電子、可編程電子、液壓和氣動(dòng)等。
由于在工廠安全保護(hù)防災(zāi)的體系結(jié)構(gòu)中對(duì)不同的裝置、系統(tǒng),甚至系統(tǒng)內(nèi)的各個(gè)子系統(tǒng)或部件的安全要求常常有很大差異,因此,iec61508標(biāo)準(zhǔn)允許對(duì)一個(gè)系統(tǒng)的子系統(tǒng)和部件進(jìn)行獨(dú)立的評(píng)估。所以,我們?cè)谡務(wù)摴δ馨踩珪r(shí)要嚴(yán)格區(qū)分所指的對(duì)象是系統(tǒng),還是構(gòu)成系統(tǒng)的部件或子系統(tǒng)。
三、控制系統(tǒng)的安全完整性及其等級(jí)
安全完整性是指在規(guī)定的條件下、規(guī)定的時(shí)間內(nèi),安全相關(guān)系統(tǒng)成功地實(shí)現(xiàn)所要求的安全功能的概率。*,控制系統(tǒng)由構(gòu)成其系統(tǒng)的各種硬件(控制系統(tǒng)裝置、現(xiàn)場(chǎng)儀表、通信網(wǎng)絡(luò)等等)以及執(zhí)行控制要求和功能的軟件綜合而成,因此控制系統(tǒng)的安全完整性由硬件的安全完整性和系統(tǒng)的安全完整性組成。硬件安全完整性是在危險(xiǎn)失效模式中對(duì)應(yīng)于安全相關(guān)系統(tǒng)安全完整性的硬件隨機(jī)失效的那一部分,一般可以通過(guò)所要求的硬件安全功能失效率予以量化;而系統(tǒng)安全完整性則是指在危險(xiǎn)失效模式中對(duì)應(yīng)于安全相關(guān)系統(tǒng)安全完整性的系統(tǒng)失效的部分(包括軟件失效)。控制失效與避免失效涉及設(shè)計(jì)、操作模式等諸多環(huán)節(jié)。顯然,硬件隨機(jī)失效和系統(tǒng)失效的機(jī)制不同,控制失效的方法也不同(見(jiàn)圖3)。
在安全相關(guān)系統(tǒng)中,安全完整性的要求用4個(gè)離散的等級(jí)予以劃分,即sil4,sil3,silz和sili。安全完整性的等級(jí)越高的安全相關(guān)系統(tǒng),其執(zhí)行所要求的安全功能的概率也越高。根據(jù)安全相關(guān)系統(tǒng)的使用方式、所要求發(fā)生的頻率,可分為低要求操作模式和高要求(或連續(xù))操作模式。低要求操作模式對(duì)應(yīng)于每年發(fā)生風(fēng)險(xiǎn)的次數(shù)多于等于1次的安全相關(guān)系統(tǒng);高要求(或連續(xù))操作模式對(duì)應(yīng)于每年發(fā)生風(fēng)險(xiǎn)的次數(shù)少于1次的安全相關(guān)系統(tǒng)。表l是iec615081/gb/t20438規(guī)定的低要求操作模式下的安全完整性的目標(biāo)失效概率和目標(biāo)風(fēng)險(xiǎn)降低因子,表2是高要求(或連續(xù))操作模式的安全完整性的目標(biāo)失效概率。sil3被認(rèn)為是單個(gè)可編程系統(tǒng)中可達(dá)到的風(fēng)險(xiǎn)降低的zui高等級(jí)。
四、安全系統(tǒng)的多樣性(diversity)原則
安全系統(tǒng)可以采取多樣性原則克服可能發(fā)生的故障,或設(shè)計(jì)分析中存在的不確定性。多樣性是指用不同方法執(zhí)行所要求同一功能。例如:可用不同的物理方法或不同的設(shè)計(jì)途徑來(lái)達(dá)到多樣性。
多樣性分為:①信號(hào)多樣性;②功能多樣性;③設(shè)備多樣性;④軟件多樣性(如指令運(yùn)算的多樣性);⑤人員多樣性等等。其中較為常用和有效的是信號(hào)多樣性和功能多樣性。
對(duì)所采用的多樣性措施是否適當(dāng)應(yīng)加以論證。為了保證能切實(shí)執(zhí)行多樣性,對(duì)設(shè)備的多樣性或儀表控制系統(tǒng)的軟件多樣性所進(jìn)行的論證,必須擴(kuò)展到這些設(shè)備的硬件、軟件部件,如實(shí)時(shí)操作系統(tǒng)rt0s。圖4是57-400f運(yùn)用指令運(yùn)算的多樣性和時(shí)間冗余來(lái)提高安全功能的可靠性。操作數(shù)a、b在cpui進(jìn)行“與”運(yùn)算,結(jié)果為c;a、b經(jīng)過(guò)編碼變成字a、b,在cpu2中做“或”運(yùn)算,結(jié)果為d=/c。在比較器中進(jìn)行比較運(yùn)算,僅當(dāng)d特/c時(shí)輸出停機(jī)信號(hào)。
再如某核電站的緊急停堆系統(tǒng)由兩個(gè)*獨(dú)立的系統(tǒng)構(gòu)成。其安全控制系統(tǒng)由不同的供應(yīng)商提供。一個(gè)停堆控制系統(tǒng)采用安全plc系統(tǒng),由3個(gè)獨(dú)立的3機(jī)冗余表決的分系統(tǒng)(d、e、f)組成(見(jiàn)圖5)。每個(gè)分系統(tǒng)都具備停堆功能,但其停堆輸出還要送給3取2的繼電器硬邏輯進(jìn)行表決,zui終給出停堆信號(hào)口該安全plc系統(tǒng)硬件平臺(tái)配有操作系統(tǒng),運(yùn)用符合工業(yè)控制編程語(yǔ)言的標(biāo)準(zhǔn)iec61131-3所規(guī)范的功能塊圖語(yǔ)言(fbd)編制應(yīng)用軟件。這套停堆控制系統(tǒng)采用t綜合法(integratedapproach)設(shè)計(jì)。
值得注意的是,為了實(shí)現(xiàn)安全系統(tǒng)的機(jī)理多樣性,還設(shè)置了另一套*不同機(jī)理的停堆系統(tǒng),通過(guò)將有害的中子吸收劑(poison)注入反應(yīng)堆中的慢化劑(moderator)的方法進(jìn)行停堆控制。這一停堆控制系統(tǒng)采用沒(méi)有操作系統(tǒng)的工控機(jī)硬件平臺(tái),安全控制軟件運(yùn)用高安全的具有子集的modula-2語(yǔ)言編寫(xiě)。這一套系統(tǒng)使用的是另一種設(shè)計(jì)方法一合理設(shè)計(jì)流程法(rationaldesignprocess),用確定離子室記錄的功率信號(hào)的合理性來(lái)檢查異常差錯(cuò)信息。由此可見(jiàn),在要求*的安全關(guān)鍵系統(tǒng)中充分運(yùn)用了多樣性的原則,有:機(jī)理的多樣性、設(shè)計(jì)方法的多樣性、設(shè)備的多樣性、編程語(yǔ)言的多樣性,這樣就從系統(tǒng)的層面上把同時(shí)發(fā)生差錯(cuò)的概率降至盡可能的小。
五、重視處理假事件
各種安全系統(tǒng)(包括緊急停車(chē)系統(tǒng)esd)如果對(duì)假事件作出響應(yīng),造成非計(jì)劃停車(chē),不但要付出高昂代價(jià),而且在大多數(shù)情況下具有危險(xiǎn)性。大量的假報(bào)警還會(huì)導(dǎo)致操作人員產(chǎn)生矛盾心理,以至于對(duì)危險(xiǎn)的真報(bào)警都不予理會(huì),或者反映很慢。
產(chǎn)生假事件的原因:①現(xiàn)場(chǎng)設(shè)備的硬件故障,如壓力開(kāi)關(guān)、電磁閥的線圈或常閉觸點(diǎn)存在高電阻,plc的i/o模塊有故障,現(xiàn)場(chǎng)設(shè)備中電子器件有故障,熱電偶斷偶,熱電阻斷線等,這些明顯的設(shè)備故障都會(huì)引發(fā)假事件。②一些公用故障如電源、氣源故障也會(huì)引發(fā)假事件。③缺乏維護(hù),不及時(shí)對(duì)工作有缺陷的儀表、傳感器進(jìn)行測(cè)試、校驗(yàn),是引發(fā)假事件的重要原因。
下面討論信號(hào)多樣性問(wèn)題??匆粋€(gè)用3個(gè)浮球液位開(kāi)關(guān)測(cè)量液位的簡(jiǎn)單例子(圖6)。我們可以有4種配置。采用單信號(hào)、雙信號(hào)還是三信號(hào)更有利于安全和可靠的平衡呢?概括地說(shuō):采用單機(jī)(單信號(hào))系統(tǒng)不安全且不可靠,在故障安全(假事件)或危險(xiǎn)方面存在50/50的概率;采用雙機(jī)(雙信號(hào))系統(tǒng)配置為二取一(1002),可能較安全,但存在高的假故障率;雙機(jī)(雙信號(hào))系統(tǒng)配置為二取二(2002),由假事件引起的故障率較低,但安全性差;三機(jī)(三信號(hào))冗余系統(tǒng)為三取二(2003),提供可以接受的安全與可靠的平衡。
顯然,sls/esd不能選擇單機(jī)(單信號(hào))系統(tǒng)。選用雙機(jī)(雙信號(hào))系統(tǒng),在一定程度上可達(dá)到安全和可用性。二取一(1002)安全性較好,但可靠性及假事件的影響大;二取二(2002)可靠性較好,安全性卻較差。即使雙機(jī)(雙信號(hào))系統(tǒng)具有很好的自診斷性能,可以確定采用哪個(gè)通道或處理器故障,將壞的通道或處理器剔除,但這時(shí)雙機(jī)系統(tǒng)降格為單機(jī)系統(tǒng)。三取二(2003)*的優(yōu)點(diǎn)是不考慮哪個(gè)通道發(fā)生故障,是怎么發(fā)生故障的;也不*依靠自診斷來(lái)確定哪個(gè)通道投用。其亮點(diǎn)在于它僅要求所接收到的信息。三取二表明,若有一個(gè)信號(hào)不同于另外兩個(gè)信號(hào),立即報(bào)警,而這兩個(gè)信號(hào)相同的通道處于安全工作狀態(tài)。
從圖6所示的例子可知,如果流程要求用于液位測(cè)量的儀表每年只能發(fā)生1次故障,而且每半年對(duì)浮球開(kāi)關(guān)進(jìn)行一次維護(hù)測(cè)試,那么對(duì)于不同的浮球液位開(kāi)關(guān)配置,因故障造成危險(xiǎn)的年概率如表3所示。
六、軟件的可靠性難以量化
軟件可靠性的基本問(wèn)題是:①軟件不受物理故障的影響。隨著硬件元器件的可靠性越來(lái)越高,并可以采用冗余技術(shù),因而安全問(wèn)題的矛盾集中到了軟件,以至于今天我們看到大多數(shù)的系統(tǒng)失效源自軟件。失效常常由于一些非明顯的事件組合造成,而不是由于機(jī)械應(yīng)力超過(guò)一定程度造成。而這些非明顯因素往往事先沒(méi)有估計(jì)到,所以在軟件的編制中考慮不到。②軟件是由人來(lái)設(shè)計(jì)的,軟件的設(shè)計(jì)不可能面面俱到,總有些因素在設(shè)計(jì)時(shí)沒(méi)有考慮到,因此,設(shè)計(jì)的缺陷導(dǎo)致軟件的故障。③數(shù)字系統(tǒng)本質(zhì)上是非連續(xù)的,所以輸入對(duì)輸出的映射一定是不連續(xù)的。④軟件建立在模型化和測(cè)試的基礎(chǔ)上,這些工作都是人在做的。人難免犯錯(cuò)誤,所以影響軟件的可信度。
因?yàn)橐陨线@些不可避免的問(wèn)題,可以得出軟件的可靠性難以量化的結(jié)論。另外,從趨勢(shì)上講,軟件和人為因素導(dǎo)致失效、事故和停機(jī)的比例越來(lái)越高。因?yàn)楝F(xiàn)在對(duì)軟件的依賴(lài)越來(lái)越高,軟件變得越來(lái)越復(fù)雜,因而難以控制。人犯錯(cuò)誤不可避免。硬件失效可能是系統(tǒng)失效的原因,系統(tǒng)的失效會(huì)引起軟件的失效。有鑒于此,要保證工業(yè)控制軟件的功能安全就不得不依賴(lài)于對(duì)軟件進(jìn)行嚴(yán)格的驗(yàn)證和確認(rèn)。
七、工業(yè)控制軟件的功能安全概念和方法
iec6508-1規(guī)定了整體安全生命周期的16個(gè)階段,包括:概念,整體范圍定義,危險(xiǎn)和風(fēng)險(xiǎn)分析,整體安全要求,安全要求分配,整體操作和維護(hù)計(jì)劃編制,整體安全確認(rèn)計(jì)劃編制,整體安裝和試運(yùn)行計(jì)劃編制,e肥尸e安全相關(guān)系統(tǒng):實(shí)現(xiàn),其他技術(shù)安全相關(guān)系統(tǒng):實(shí)現(xiàn),外部鳳險(xiǎn)降低設(shè)施:實(shí)現(xiàn),整體安裝和試運(yùn)行,整體安全確認(rèn),整體操作維護(hù)和修理,整體修改和改型,停用及處理。與軟件相關(guān)的是第9階段“e/e/pe安全相關(guān)系統(tǒng):實(shí)現(xiàn)”
在iec615o8-3中詳細(xì)地規(guī)定了執(zhí)行安全功能的軟件如何滿(mǎn)足功能安全的要求。它規(guī)范的工控軟件的功能安全問(wèn)題包括以下方面:軟件質(zhì)量管理系統(tǒng),軟件安全生命周期要求,軟件功能安全評(píng)估。它給出的是在軟件的安全生命周期的各個(gè)階段應(yīng)該滿(mǎn)足什么要求,以及如何來(lái)驗(yàn)證工控軟件達(dá)到了功能安全的標(biāo)準(zhǔn)。iec61508-3的突出貢獻(xiàn)在于制訂了一整套完整的開(kāi)發(fā)程序和一系列技術(shù)措施,通過(guò)嚴(yán)格的質(zhì)量管理與全生命周期的控制程序,實(shí)現(xiàn)避免故障、檢測(cè)故障和排除故障,以及容許存在故障,從而保證軟件的安全完整性能??傊琲ec61508-3給出了在安全相關(guān)系統(tǒng)的軟件編制時(shí)應(yīng)遵循哪些規(guī)范就能夠達(dá)到功能安全的要求。這好比它編織了安全軟件開(kāi)發(fā)的“鳥(niǎo)籠”,以及在“鳥(niǎo)籠”里飛必須遵守的規(guī)則和約束;一旦飛出“鳥(niǎo)籠”就不能保證軟件的安全。但它并沒(méi)有具體規(guī)定工控軟件在選用編制系統(tǒng)軟件和編制應(yīng)用軟件時(shí),應(yīng)該如何選擇適當(dāng)?shù)木幊陶Z(yǔ)言、指令集和數(shù)據(jù)類(lèi)型,就可以從基礎(chǔ)上保證軟件的功能安全性。這些問(wèn)題有些可以通過(guò)iec61508-6(iec61508-2和iec61508-3的應(yīng)用指南)和iec61508-7(技術(shù)和措施概述)找到相應(yīng)的具有實(shí)用性的參考規(guī)定和資料,有些就必須再進(jìn)一步查找其它圍繞不同應(yīng)用領(lǐng)域的工業(yè)控制軟件的功能安全的規(guī)范,如美國(guó)核管制委員會(huì)nrc發(fā)布的《核電站軟件語(yǔ)言導(dǎo)則》、plcopen組織發(fā)布的在iec61131-3的開(kāi)發(fā)環(huán)境下有關(guān)機(jī)械功能安全的規(guī)范《safetysoftwaretechnioalspecification》等等。
*,安全相關(guān)系統(tǒng)包括硬件、軟件,軟件必須運(yùn)行于硬件系統(tǒng)環(huán)境中才能實(shí)現(xiàn)其價(jià)值和功能,在完成系統(tǒng)的功能安全時(shí),一定要認(rèn)識(shí)這二者之間的關(guān)系。通過(guò)圖7所揭示的iec61508-3與iec61508-2的關(guān)系就能一目了然:iec61508-2是總體,iec61508-3只是局部。盡管它們可能是由不同的團(tuán)隊(duì)獨(dú)立開(kāi)發(fā),但zui終還是要集成起來(lái)經(jīng)過(guò)總體檢驗(yàn),才能夠判斷是否滿(mǎn)足安全要求。軟件的安全完整性等級(jí)采用表1低要求操作模式下的安全完整性的目標(biāo)失效概率劃分。達(dá)到sil4等級(jí)的軟件相當(dāng)于每1.14年至11.4年之間發(fā)生1次失效。
八、安全系統(tǒng)的軟件構(gòu)成
與控制系統(tǒng)的軟件構(gòu)成一樣,安全系統(tǒng)的軟件也包括系統(tǒng)軟件和應(yīng)用軟件兩部分(見(jiàn)圖8)。它們分別用全可變語(yǔ)言(funvariabilitylanguage,fvl)和有限可變語(yǔ)言(limitedvariability1anguage,lvl)編寫(xiě)(見(jiàn)圖7)。這些概念都是將軟件引入功能安全時(shí)建立起來(lái)的。
什么是全可變語(yǔ)言呢?其實(shí)此類(lèi)語(yǔ)言就是計(jì)算機(jī)編程人員廣泛使用的語(yǔ)言,它提供實(shí)現(xiàn)各種功能和應(yīng)用的能力。典型的利用全可變語(yǔ)言的系統(tǒng)就是通用計(jì)算機(jī)。在過(guò)程工業(yè)中,只有在嵌入式軟件(一般指固件或系統(tǒng)軟件)中才使用全可變語(yǔ)言,極少在應(yīng)用程序中使用。ada、c、c++、指令表il、pasoal、java、sql均屬于全可變語(yǔ)言。
有限可變語(yǔ)言在iec61508-4中定義為:在工業(yè)和商業(yè)可編程電子控制器中使用且范圍局限于應(yīng)用程序的文本的或圖形的軟件編程語(yǔ)言。例如:引自iec61131-3和其它標(biāo)準(zhǔn)或規(guī)范的有限可變語(yǔ)言,用來(lái)編寫(xiě)plc系統(tǒng)的應(yīng)用程序。它們分別是梯形圖語(yǔ)言ld;布爾代數(shù)語(yǔ)言:帶有增加某些記憶指令能力的,基于布爾運(yùn)算符(如and、or和not)的低級(jí)語(yǔ)言;功能塊圖語(yǔ)言fbd:除布爾運(yùn)算符外,可使用更復(fù)雜的功能,如數(shù)據(jù)傳輸文件、塊傳輸讀/寫(xiě),移位寄存器和序列發(fā)生器指令等;順序功能圖語(yǔ)言sfc:有順序之程序的圖形表示,由相互的步驟、動(dòng)作和帶轉(zhuǎn)換條件的定向連接線構(gòu)成。
九、軟件功能安全對(duì)編程語(yǔ)言的要求
編程語(yǔ)言并不是專(zhuān)為安全系統(tǒng)開(kāi)發(fā)的,它們?cè)诔霈F(xiàn)安全軟件的概念之前就發(fā)展了很長(zhǎng)的時(shí)間。所以要用fvl和lvl完成安全系統(tǒng)的軟件編寫(xiě),首先必須對(duì)這些語(yǔ)言和用它們編寫(xiě)的程序提出要求和進(jìn)行評(píng)估,以確定在什么條件下使用這些語(yǔ)言就能確保安全軟件完成其保證功能安全的任務(wù)。
從另一方面來(lái)看,由于嵌入式系統(tǒng)已滲透到各行各業(yè),這些年來(lái),凡是對(duì)安全有重要要求的行業(yè)都很關(guān)注這個(gè)問(wèn)題,制定了各自的規(guī)范。例如汽車(chē)行業(yè)建立了汽車(chē)工業(yè)軟件可靠性協(xié)會(huì)misra,發(fā)布了專(zhuān)門(mén)用在汽車(chē)行業(yè)的c++語(yǔ)言的子集misrac++。美國(guó)核管制委員會(huì)nrc早在1996年就發(fā)布了《核電站軟件語(yǔ)言導(dǎo)則》,之后97年又公布了其修正版nureg/cr6463rev.1。因?yàn)槠湫裕敝连F(xiàn)在它已成為安全軟件的經(jīng)典規(guī)范。不僅僅是核電,其它行業(yè)的軟件安全問(wèn)題也經(jīng)常以此作為引經(jīng)據(jù)典的文獻(xiàn)。
在美國(guó)的核管制委員會(huì)發(fā)布了《核電站軟件語(yǔ)言導(dǎo)則》nureg/cr6463revl中,對(duì)用語(yǔ)言編寫(xiě)的用于安全系統(tǒng)的軟件進(jìn)行了安全評(píng)述,著重指出以往發(fā)現(xiàn)的軟件安全性問(wèn)題和缺陷,從對(duì)應(yīng)用重要性的理解、設(shè)計(jì)的方法論、學(xué)科發(fā)展和測(cè)試等方面加以闡述。
nureg/cr6463revl將軟件安全的屬性按三級(jí)架構(gòu)加以分類(lèi)和編排:*屬性、中間屬性和基本屬性,如圖9所示。
軟件的可靠性屬性是在所規(guī)定的條件下軟件的可預(yù)測(cè)、且恒定一致的性能。由于軟件的可靠性屬性旨在減少在軟件開(kāi)發(fā)實(shí)現(xiàn)期間可能被導(dǎo)入源代碼而造成誤操作的故障,所以此*屬性對(duì)安全來(lái)說(shuō)是很重要的。
軟件的魯棒性是在異常條件或事件下,安全系統(tǒng)的軟件以一種可接受的方式進(jìn)行操作的能力。由于它加強(qiáng)了軟件處理例外情況、從內(nèi)部故障中恢復(fù),以及阻止因異常環(huán)境而致使故障傳播的能力,因此此*屬性也很重要。
軟件的可追溯性表現(xiàn)為:①對(duì)源代碼和所引用的程序庫(kù)部件的源頭進(jìn)行檢查和識(shí)別;②通過(guò)對(duì)開(kāi)發(fā)過(guò)程的可行性進(jìn)行檢查,來(lái)驗(yàn)證已執(zhí)行的代碼在其開(kāi)發(fā)過(guò)程中是否按規(guī)范的方法完成其實(shí)現(xiàn);③審視代碼與高一級(jí)的設(shè)計(jì)文檔相關(guān)聯(lián)的能力。此屬性之所以重要是因?yàn)檫@將便于對(duì)軟件進(jìn)行驗(yàn)證和認(rèn)證(v&v),這是軟件質(zhì)量保證的另一方面。
軟件的可維護(hù)性是在軟件交付使用后若需對(duì)源代碼做改動(dòng)時(shí),導(dǎo)致將故障引入的可能性減少的必要手段。此屬性之所以對(duì)安全來(lái)說(shuō)很重要,是因?yàn)樵趯?duì)軟件進(jìn)是因?yàn)樵趯?duì)軟件進(jìn)行適應(yīng)、校正或完善期間可以盡量減少可能發(fā)生的誤操作的故障。根據(jù)ieee所給出的規(guī)定,軟件可靠性是在軟件編制、調(diào)試和執(zhí)行運(yùn)行全過(guò)程的環(huán)境下,既可以是在所定義的時(shí)間間隔內(nèi)和所定義的條件下成功執(zhí)行的幾率,也可以是按照命令成功操作的幾率。軟件執(zhí)行完成是其對(duì)于系統(tǒng)存貯器和程序邏輯恰當(dāng)行為的結(jié)果。這意味著軟件所產(chǎn)生的適時(shí)輸出是編程人員對(duì)所使用的語(yǔ)言結(jié)構(gòu)和運(yùn)行期間環(huán)境特性理解的函數(shù)。因此可靠性的中間屬性包括:存貯空間利用可預(yù)測(cè)性(軟件不致造成處理器會(huì)向非預(yù)期的或不允許存貯空間進(jìn)行存取的高概率);控制流可預(yù)測(cè)性(處理器按編程員預(yù)期的順序執(zhí)行指令的高概率);時(shí)序可預(yù)測(cè)性(軟件在所定義的運(yùn)行環(huán)境下滿(mǎn)足響應(yīng)時(shí)間和處理能力約束的高概率);數(shù)學(xué)結(jié)果或邏輯結(jié)果可預(yù)測(cè)性(軟件在所定義的運(yùn)行環(huán)境下產(chǎn)生編程員所預(yù)期結(jié)果的高概率)。詳見(jiàn)圖10。
所謂軟件魯棒性是指在異?;蚱渌丛A(yù)計(jì)的情況下軟件繼續(xù)執(zhí)行的能力。魯棒性的同義詞是耐久性(survivability)。對(duì)安全系統(tǒng)而言魯棒性之所以重要是因?yàn)樵谝粋€(gè)意外或偏離額定工況時(shí)會(huì)發(fā)生未曾預(yù)料的事件,在這樣的情況下軟件持續(xù)的對(duì)系統(tǒng)監(jiān)控和控制的能力仍能有效作用。軟件魯棒性的中間屬性和基礎(chǔ)屬性見(jiàn)圖11。
軟件的可追溯性是指與軟件設(shè)計(jì)相比較,安全軟件的那些支持其正確性和完整性驗(yàn)證的屬性??勺匪菪缘幕A(chǔ)屬性有:可讀性(這也是可維護(hù)性的屬性),內(nèi)嵌函數(shù)的可控的使用,編譯庫(kù)的可控使用。
軟件的可維護(hù)性是為了有效減少在對(duì)軟件進(jìn)行修改時(shí)可能引入的差錯(cuò)。會(huì)影響安全的與可維護(hù)性有關(guān)的中間屬性(見(jiàn)圖12)包括:可讀性一便干項(xiàng)目人員對(duì)軟件的理解的軟件屬性;數(shù)據(jù)的抽象一對(duì)于那些代碼被劃分和模塊化的區(qū)域,這樣做可以使在修改軟件時(shí)意想不到的副作用和次生的影響減至zui??;函數(shù)的內(nèi)聚性一對(duì)代碼中的軟件元素給予設(shè)計(jì)水平的函數(shù)適當(dāng)?shù)拇尜A地址;可移植性一避免一種語(yǔ)言的非標(biāo)準(zhǔn)函數(shù)對(duì)安全的重大威脅;可塑性一將可能修改的代碼區(qū)與軟件代碼的其余部分隔離開(kāi)。
十、編程語(yǔ)言實(shí)現(xiàn)軟件功能安全的方法
在nrc的nureg/cr6463rev.1完整版本中給出了將9種編程語(yǔ)言(ada,ada95,c/c++,pascal,pl/m,iec61131-3規(guī)定的梯形圖、順序功能圖、結(jié)構(gòu)化文本和功能塊圖)用于安全系統(tǒng)時(shí),應(yīng)該關(guān)注它們特定的存在問(wèn)題和如何加以克服注意點(diǎn)。譬如,對(duì)于c語(yǔ)言來(lái)說(shuō),是其指針的初始化問(wèn)題;對(duì)于iec61131-3所規(guī)范的編程語(yǔ)言,則應(yīng)關(guān)注其時(shí)序、正常運(yùn)行的監(jiān)控,以及故障處理等問(wèn)題。
從*屬性中的可靠性、中級(jí)屬性中的可預(yù)測(cè)性的控制流和基礎(chǔ)屬性中的在使用前變量的初始化這三方面導(dǎo)出對(duì)指針初始化的指導(dǎo)原則。所有的變量和指針在使用前都應(yīng)該初始化。c語(yǔ)言支持通過(guò)說(shuō)明來(lái)初始值的方式進(jìn)行初始化,但并不要求所有的對(duì)象(指變量、數(shù)據(jù)結(jié)構(gòu)或數(shù)組)進(jìn)行初始化。在若干情況下,一個(gè)對(duì)象的初始化不僅要為對(duì)象的存貯地址一個(gè)特定的位的組合值,而且還要采取特殊的動(dòng)作來(lái)為對(duì)象的生命(例如為對(duì)象賦予對(duì)應(yīng)的源)進(jìn)行平滑初始化。在c++中,可能要考慮任意相關(guān)數(shù)據(jù)作為對(duì)象,并提供構(gòu)造數(shù)據(jù)組一個(gè)實(shí)例的工具。這樣便會(huì)以系統(tǒng)的方式破壞數(shù)據(jù)組當(dāng)前的實(shí)例。
考慮到上述情況,必須對(duì)初始化提出以下導(dǎo)則:①不要對(duì)超出其說(shuō)明范圍的變量自動(dòng)使用指針。存貯在指針的值對(duì)一個(gè)自動(dòng)變量會(huì)包含超出其函數(shù)范圍的無(wú)用輸入。②指針的初始化,初始化問(wèn)題也會(huì)在指針中發(fā)生。在安全系統(tǒng)中所有c語(yǔ)言中的指針變量,其初值都應(yīng)該為nu11;所有c++中的指針變量,其初值都應(yīng)該為0。在被使用之前,指針應(yīng)對(duì)一個(gè)有效值予以測(cè)試。當(dāng)一個(gè)指針被定義時(shí),它沒(méi)有一個(gè)地址與其相關(guān)聯(lián)。使用一個(gè)未初始化的指針,會(huì)造成重寫(xiě)未曾預(yù)想到的指針的存貯地址。錯(cuò)誤地重寫(xiě)存貯內(nèi)容會(huì)引起嚴(yán)重的問(wèn)題,包括對(duì)系統(tǒng)的崩潰。③要確保每一個(gè)指針的說(shuō)明間接的運(yùn)算符都是存在的。每個(gè)指針都應(yīng)該有一個(gè)間接運(yùn)算符(*)。
iec61131-3所定義的5種語(yǔ)言除指令表語(yǔ)言(il)與匯編語(yǔ)言相似外,其它語(yǔ)言都納入了nrc關(guān)于編程語(yǔ)言的導(dǎo)則中。對(duì)這些語(yǔ)言特定的指導(dǎo)原則源于魯棒性*屬性和異常處理的中間屬性。應(yīng)該專(zhuān)注于在機(jī)組緊急停車(chē)時(shí)plc的行為。通常此時(shí)所有的輸出均應(yīng)切斷,但往往并非總是如此。一般plc系統(tǒng)總是設(shè)計(jì)成在緊急停車(chē)時(shí)系統(tǒng)處于故障安全狀態(tài)。某些plc在遇到這樣的情況時(shí)具有處理器能自動(dòng)停止主梯形圖程序的執(zhí)行,轉(zhuǎn)而執(zhí)行“故障程序”的子程序。這使系統(tǒng)的設(shè)計(jì)者可以決定采取適當(dāng)?shù)膭?dòng)作,包括以一種安全的方式讓系統(tǒng)停下來(lái)。問(wèn)題在于:iec61131-3規(guī)范中未涉及到允許plc系統(tǒng)本身包含有某種預(yù)先設(shè)計(jì)好的硬件故障程序,當(dāng)檢側(cè)到一定范圍的故障條件時(shí)便會(huì)自動(dòng)執(zhí)行。不過(guò),iec61131-3允許建立非周期的任務(wù),通過(guò)觸發(fā)適當(dāng)?shù)膬?nèi)部診斷信息來(lái)執(zhí)行處理特定類(lèi)型的出錯(cuò)(i/*時(shí)降級(jí)運(yùn)行模式、向操作員見(jiàn)面報(bào)警等)。
對(duì)于plc系統(tǒng),在編程的設(shè)計(jì)階段就應(yīng)在程序結(jié)構(gòu)中考慮故障程序問(wèn)題。這時(shí)必須遵從如下原則:①完整性故障程序不能依賴(lài)于檢測(cè)到程序崩潰的所有特例,因此遇到plc的主要故障時(shí)要有針對(duì)附加措施的安全保證。②可觀察性故障程序要有狀態(tài)記錄和報(bào)警的能力。故障程序應(yīng)顯性執(zhí)行,不被掩蓋。③真實(shí)性檢查在啟動(dòng)故障程序的情況下有可能將可以反映原來(lái)?xiàng)l件的程序存貯內(nèi)容、數(shù)據(jù)文件或i/o狀態(tài)破壞,因此故障程序應(yīng)保證在執(zhí)行故障處理前將這些環(huán)境加以保存,以便事后分析。④在故障程序不起作用時(shí)的靛障安全特性萬(wàn)一plc系統(tǒng)的故障處理程序不起作用,系統(tǒng)設(shè)計(jì)仍要保證安全狀態(tài)的后備措施。
plc系統(tǒng)一般以的位和字的形式提供對(duì)應(yīng)用程序的正常運(yùn)行狀況的監(jiān)控,這些信息包括特定任務(wù)的執(zhí)行時(shí)間、i/o刷新信息、i/o操作狀態(tài)信息、電池狀態(tài)信息和其它用來(lái)確定plc正常運(yùn)行狀態(tài)的信息。遺憾的是iec61131-3規(guī)范中對(duì)這些信息的典型值、范圍和類(lèi)型并未做出規(guī)定。而安全系統(tǒng)恰恰應(yīng)該具備這些信息,作為判斷其是否運(yùn)行正常的檢查和是否需要異常處理的*的部分。
在iec61131-3的規(guī)范關(guān)于“任務(wù)”這節(jié)中,闡述了制造廠應(yīng)向用戶(hù)提供所有任務(wù)執(zhí)行的信息的zui低要求。關(guān)鍵在于由干這一問(wèn)題的分類(lèi)落在出錯(cuò)檢查,而未能在規(guī)范中描述,于是我們也得不到這些任務(wù)執(zhí)行時(shí)在運(yùn)行時(shí)應(yīng)以何種形式接受檢查的規(guī)定。另外,許多plc和類(lèi)似的符合iec6113卜3的系統(tǒng)一般只給出每次執(zhí)行所有任務(wù)的周期(即所謂的掃描周期),卻忽略了單個(gè)任務(wù)執(zhí)行周期信息和標(biāo)志的提供。如果因?yàn)榘踩蛐枰趫?zhí)行某個(gè)任務(wù)超時(shí)n次時(shí)必須緊急停車(chē),在plc現(xiàn)有的能力下是無(wú)能為力的。為了解決這個(gè)問(wèn)題,必須讓?xiě)?yīng)用程序能夠?qū)蝹€(gè)任務(wù)執(zhí)行其超時(shí)的檢測(cè),并給出單任務(wù)超時(shí)的標(biāo)志,這樣才能做出適當(dāng)?shù)姆磻?yīng)。對(duì)于安全關(guān)鍵系統(tǒng),監(jiān)控任務(wù)超時(shí)的問(wèn)題尤其要緊。必須在程序開(kāi)發(fā)的檢查階段關(guān)注。
十一、在安全系統(tǒng)中推薦采用的編程語(yǔ)言
在iec61508-7的附錄c.4.5中給出了適合用于安全系統(tǒng)的軟件編制推薦的語(yǔ)言(見(jiàn)表4),表中列舉了24種編程語(yǔ)言,其中適用于安全系統(tǒng)的軟件編制的語(yǔ)言共9種,它們是:屬于全可變語(yǔ)言fvl有5種(具有子集的ada,具有子集的modula-2,具有子集的pascal,具有子集的fortran77,具有子集和編程標(biāo)準(zhǔn)并使用靜態(tài)分析工具的c);屬于有限可變語(yǔ)言lvl有4種(具有定義的語(yǔ)言子集的梯形圖,具有定義的語(yǔ)言子集的功能塊圖,具有定義的語(yǔ)言子集的結(jié)構(gòu)化文本,具有定義的語(yǔ)言子集的順序功能圖)。
plcopen組織與專(zhuān)業(yè)從事安全認(rèn)證的機(jī)構(gòu)tuv一起定義了在iec61131-3的環(huán)境下涉及機(jī)械安全的規(guī)范《safetysoftwaretechnicalspecification》。其中僅規(guī)定了兩種具有定義子集的語(yǔ)言(功能塊圖語(yǔ)言fbd和梯形圖語(yǔ)言ld)可用于機(jī)械安全系統(tǒng)。