(上海工業自動化儀表研究院1,上海 200233;上海儀器儀表自控檢驗測試所功能安全中心2,上海 200233)
在安全相關產品的實現過程中,為達到控制危險失效的目的,需在軟硬件的設計和開發中針對相應的安全完整性等級選擇合適的措施,以保證安全相關產品在運行中控制失效。控制失效是安全相關產品的內在特性,這也是用于功能安全的安全相關產品有別于普通產品的典型特性。
安全相關產品的安全完整性包括硬件安全完整性和系統性安全完整性,所以控制失效就是控制隨機硬件失效和控制系統性失效。在運行中,不同的元器件有不同的退化機理且以不同的速率退化,雖然硬件失效是不可控的,但硬件失效可以通過采用一定的方法診斷出來,所以可采用一些技術和措施檢測出硬件的故障和失效,從而控制隨機硬件失效。從功能安全的理念來說,控制隨機硬件失效本質上就是降低不可診斷的危險失效。同樣控制系統性失效有利于在線控制失效。
為了控制隨機硬件失效,在標準IEC 61508.2附錄A中,表A.2~表A.14對構成安全相關系統和產品的所有可能的各功能模塊給出了推薦的診斷技術和措施,并推薦了在使用這些技術和措施時可實現的最高診斷覆蓋率。當然對硬件模塊的故障和失效的診斷方法不只限于標準所給出的,還可使用其他技術和措施。這些技術和措施只要能提供相應的證據,保證支持所聲明的診斷覆蓋率。表A.15~A.17為每一安全完整性等級推薦了控制系統性失效的技術和措施。
下面就控制隨機硬件失效和系統性失效所采用的一些技術和措施進行解析。
存儲器的存儲單元在邏輯上可用D觸發器描述,對其操作是寫入一位“1”或者“0”,寫入的信息在下一次覆蓋操作到來前一直保留。
可變內存的功能模型如圖1所示。

圖1 RAM功能模型
存儲器由于自身的缺陷及受周圍環境的影響而產生故障,預期主要有五類故障,這五類故障分別介紹如下。
① 固定型故障(stuck-at fault):一個存儲器的存儲單元總是保持在“0”狀態或“1”狀態,不能寫入其他值。
② 變遷故障(transition fault):一個存儲單元不能從“0”狀態變遷到“1”狀態,或者不能從“1”狀態變遷到“0”狀態。
③ 固定開故障(stack-open fault):一個存儲單元無法進入,即對這個單元既不能進行寫操作,也不能進行讀操作。
④ 耦合故障(coupling fault):對一個存儲單元進行寫操作時,會影響到其相鄰的單元,反之亦然。
⑤ 數據保留故障(data retention fault):一個存儲單元在一定的時間后會丟失它所保存的內容。
這五類故障在存儲器的故障概率中約占90%~99%,現有的嵌入式存儲器測試算法都是直接對存儲器內部單元測試,不對存儲器外圍互連線進行測試。
可變內存的診斷測試方法常用的有跳步模式(Galpat)測試法和跨步(March)測試法兩種。
(1) 跳步模式(Galpat)測試法
Galpat算法目前是RAM測試法之一,它的具體步驟如下。
① 先將被測試的RAM存儲單位的數據備份;
② 初始化該存儲單位為0;
③ 將存儲單位的值與1左移n位的值進行按位或運算(n為從0開始的存儲器位數);
④ 讀取該存儲單位的值與運算后的值是否一致;
⑤ 如果不一致,報故障錯誤,程序停止執行;
⑥ 否則,重復執行步驟②~⑤,直到該存儲單位的每一位都測試完;
⑦ 重新按位初始化存儲單位的值為1;
⑧ 將存儲單位的值與1左移n位的值進行按位異或運算;
⑨ 讀取該存儲單位的值與運算后的值是否一致;
⑩ 如果不一致,報故障錯誤,程序停止執行;
Galpat測試法簡化圖如圖2所示。

圖2 Galpat 測試法簡化圖
Galpat測試算法的測試故障覆蓋率較高,能夠測試固定型故障、變遷故障、固定開故障以及大部分耦合故障。由Galpat的時間復雜度為o(n2)(n為被測試存儲器的位數)可知,該測試算法需要花費的測試時間較長,對于大容量存儲器來說并不適合。
(2) 跨步(March)測試法
常見的March算法包含MATS+、March C-、March C+、March B、March LR、March SR等。這些算法的不同之處就是包含的March元素各不相同,每種March算法包含多個March元素,每個March元素都由地址變化順序、讀寫的操作和操作的數據三部分組成。目前最常用的是March C+,因為其故障覆蓋率最高。
March C+算法簡化圖如圖3所示。

圖3 March C+算法簡化圖
圖3中:符號“↑”表示地址升序;符號“↓”表示地址降序;“R0”表示讀0操作;“R1”表示讀1操作;“W0”表示寫0操作;“W1”表示寫1操作;M2~M7表示6個March單元或6個狀態機狀態。
March C+算法的步驟如下。
① 先將被測試的RAM存儲單位的數據備份;
② 初始化該存儲單元為0;
③ 按照升序從地址0到最大地址依次進行讀出0,再寫入1,再讀出1;
④ 按照升序從地址0到最大地址依次進行讀出1,再寫入0,再讀出0;
⑤ 按照降序從最大地址到0地址依次進行讀出0,再寫入1,再讀出1;
⑥ 按照降序從最大地址到0地址依次進行讀出1,再寫入0,再讀出0;
⑦ 按照降序從最大地址到0地址依次進行讀出0。
March C+算法同樣能夠測試固定型故障、變遷故障、固定開故障和耦合故障。由該算法的時間復雜度為o(n)可知,該測試算法可以運用到大容量的SRAM測試、SDRAM測試等存儲器測試領域。
采用軟件測試內存的完好性,需兼顧到測試所需時間與診斷覆蓋率,原則上對處理器及內存的故障診斷測試不應影響到產品(系統)的主功能,所耗時間不應大于1 h。所以在實際產品開發中,采用軟件診斷處理器及可變內存的故障時,在低要求模式下需考慮以下三個時間量的兼容性:①診斷測試時間間隔;②診斷程序完成一次對可變內存檢查的時間;③平均修復時間(mean time to restoration,MTTR)。在高要求連續模式下,當故障裕度(hardware fault tolerance,HFT)=0時需考慮以下四個時間量的兼容性:①診斷測試時間間隔;②診斷程序完成一次對可變內存檢查的時間;③過程安全時間(process safety time,PST);④要求率。因此,在選擇故障診斷測試方法時需兼顧診斷覆蓋率及以上所提到的幾個時間量。
當使用復雜硬件和軟件時,失效的重點將從隨機失效轉變為系統性失效。控制系統性失效包括:①控制軟硬件設計引起的失效;②控制由環境應力或影響引起的失效;③控制操作過程的失效。控制系統性失效的部分技術和措施解析如表1所示。

表1 控制系統性失效的部分技術和措施解析
由表1可以看出,控制系統性失效歸根結底還是由產品的設計尤其是軟件和硬件的設計來實現的。譬如,在自動扶梯安全相關系統上實現“修改保護”。為了防止對安全相關系統的硬件進行更改,安全相關系統的邏輯處理單元通過對傳感器信號特征的辨識確定傳感器單元的完好性和正確性。更進一步講,為了防止自動扶梯用戶私自拆除安全相關系統,在自動扶梯控制系統上設置了“門鎖”,只有在安全相關系統正常啟動給出解鎖信號后,自動扶梯控制系統的“門鎖”才會打開。這里“門鎖”和“鑰匙”通過軟硬件設計來實現,以防止拆除安全相關系統這一重大硬件更改。
控制失效是安全相關產品設計的關鍵點,是安全相關產品的內在特性。在安全相關產品的軟件設計和硬件設計中融入控制失效的要求,就能設計出滿足硬件安全完整性和系統性安全完整性要求的用于功能安全的合格的產品。