關於「跳機」這件事,淺談失效安全(fail-safe)

核能電廠機組緊急停止,也就是一般大眾俗稱的「跳機」,經常成為媒體報導或大家討論的話題。也常常聽到不少人會說「…又跳了,好危險…」或是質疑各種fail-safe的手段是否就真的能確保安全,因此,這篇就來聊聊關於失效安全(fail-safe)。

先聊一點點自動機理論

自動機(automata)是一種數學模型,在資訊科技相關領域的程式設計、計算機架構、數位系統/邏輯電路設計…等用途常用到。但它其實是一個很簡單的概念,最基本的想法就是將系統的各種變化以若干個「狀態」(state)來表示,同時也定義了在不同狀態間轉換的條件,因此也被叫作狀態機(state machine)。

通常在入門教材裡面,最常舉的例子就是販賣機,最好是那種構造簡單、均一價、有固定投幣方式的販賣機或扭蛋機,這樣的一台機器可能會有下面兩種狀態。

  • 等待投幣的狀態:等待顧客上門,如果投入可被接受的硬幣,就會進到「等待選擇商品」的狀態。
  • 等待選擇商品的狀態:投入可被接受的硬幣後會來到這個狀態,如果旋轉旋鈕(扭蛋機)或是按下商品選擇按鈕,就會掉出商品並回到「等待投幣」的狀態;如果按下退幣鈕,就會讓投入的硬幣從退幣口退出,並回到「等待投幣」的狀態。

上面的例子就是一個很簡單的有限狀態機(finite state machine或finite automata),當然現在的各種販賣機/kiosk機功能五花八門,而且還要處理更複雜的商品組合、支付優惠活動、付款找零…等等,需要有更多的狀態來表示整個系統的運作過程,但基礎的理論是沒有變的。

「安全」也是種狀態

在自動機/狀態機中,有些狀態會被歸類為最終狀態(final state),表示的是可作為結束點、功能就緒(ready)、完成…等穩定的狀態。也許比較多人會接觸到的例子是試算表軟體(如Excel),在試算表軟體中處理儲存格內算式使用的正是自動機理論(同樣的,計算機也是);在處理算式的狀態機中,final state代表著可以算出答案的狀態,好比「A1+B2」就會停在一個final state,並且產生出答案顯示在畫面上,或是讓其他算是使用;而如果寫了「A1+B2+」,顯然是一個未完成的算式,對於處理算是的自動機來說這個輸入會停在非final state的狀態,如果使用者這時候想跳出儲存格,就會出現算是錯誤的提示訊息了。

在設計系統時,不論是物理、機械結構(計算機/電腦的始祖也是機械運算器)、邏輯控制電路、軟體程式等等,都可以使用狀態機的概念進行設計。首先這個系統的狀態數量必須是有限的(這需要經過分析、規劃),找出安全、穩定的狀態(且也屬於final state),並讓所有其他的狀態,在遇到異常的條件時,都有辦法回到那些安全的final state,而不是卡在中間,這就是fail-safe機制規劃的根本。

(註:對於一般的電子產品、電腦軟體來說也是,好的設計對於無法處理的錯誤操作程序或是其他異常等,會進入同樣屬於final state的「trap state」,這時裝置或程式也會呈現停在那邊沒有反應的狀態,但不至於進行其他未定義的動作。當然,更好的設計就是進行例外處理,比如進入一個備援模式讓相關人員可以排除狀況,或是執行自動修正、排除問題的程序等。)

「正向表列」

這也許也是個不少人知道的概念,舉凡正向(面)表列/負面表列、白名單過濾機制/黑名單過濾機制、無罪推定原則…等等,這樣子的概念在失效安全上也同樣重要。前面提到了「狀態」的概念,然而狀態與狀態間的轉換條件也是相當重要的;對於所有轉換狀態的條件,要能夠確定是正常的,才能夠視為「正常」並進行對應的狀態轉換,否則都應該假定或預設為「異常」的條件,並且能夠回到安全的狀態。

之前在網路上回應留言,常常舉一個有點搞笑的生活例子……假設為了確保洗澡時的安全、避免因為空氣不流通而發生危險,所以只有在浴室通風扇正常運轉時才能洗澡。在這個前提下,我可以把浴室的燈光和通風扇接在同一個電路上,這樣要洗澡時打開浴室燈的開關,同時也會讓通風扇開始運轉。但是如果通風扇壞掉了怎麼辦呢?那弄個故障蜂鳴器好了,如果風扇馬達的電壓/電流異常就會響,就不能洗澡。可是如果通風扇壞了,而故障警示蜂鳴器也很剛好地壞了呢?所以應該弄個轉速感應機制,只有感應到正常轉速時會有個正常運轉的指示燈亮起,指示燈有亮才能洗澡,如果指示燈沒亮,有可能是風扇有正常運轉,但是感應器或指示燈壞掉了,這樣就安全了許多。當然,如果要再更安全…防止使用者不按規定,那就把轉速正常的訊號與熱水器或是制水閥連動,只有偵測到正常時才有水洗澡…。

還是來另外個正常一點的例子好了,台灣高鐵剛通車時,最常發生的異常就是轉轍器訊號異常,造成列車暫停或是先過站後再倒退避開有問題的轉轍器。在軌道系統中,轉轍器負責移動軌道分支處的道岔,決定車輛行進的路線,如果道岔的位置不正確,列車通過時可能會發生擠軌、出軌等危險。因此,轉轍器需要有感測器感應道差與各項機件的位置,如果沒有辦法確定在正常的位置,就視為異常,不讓列車通過。而也的確有很多的訊號異常,是確認道岔與相關機構在正常位置的微動開關有問題造成的,也就是其實道岔已經鎖定在正常的位置,只是少了確保正常的訊號。

(註:很多車輛、飛機、機械等等還是依靠異常指示燈,但是汽車、大型重機等在打開電門準備發動時會點亮儀表板上所有的指示燈,就是給駕駛確認儀表是否正常的;而飛機在啟動引擎前的檢查程序中,也包含了點亮所有指示燈並測試各項警報的程序)

還有風險的話就增加備援吧

「沒有一個XX不能解決的…,如果有,那就兩個…」,這句話相信應該不少人都看過,對於有些不能隨便停下來的東西,一個有風險,就兩個、三個、…。以上面的浴室例子…如果就是非要洗澡不可,絕對不容許通風扇壞掉,那就可以考慮裝個兩台通風扇,甚至可以考慮兩台選擇不同廠牌型號,並且加上備用電源…。

飛機就是一個典型無法說停就停的系統,或者是說,維持有動力、有一定的空速能夠滯空與夠操控,對飛機來說是一個相對安全的狀態(在離可用的機場有一段距離的時候),必須要能夠維持在這樣的狀態。所以飛機用了很多備援或重複的設計,比如說結構的承受能力要大於正常操作下所可能產生的量,而且有重複的結構體、現在的民航機也大都有三套獨立且配置方式不盡相同的液壓系統、重要的線傳飛控或儀表有三到四組重複或能互相備援的線路…等等。

核電機組當然不是例外,而且整套核電機組是相當複雜的系統,也有很多失效安全相關的設計在裡面。歷來許多次的緊急停止事件中,也有許多僅是訊號問題(相關的報告在原子能委員會網站可以找到)。會發生緊急停止,當然是存在了某些問題需要改進;但如同一開始所講的,有問題…就讓系統停留在安全的狀態,這是失效安全設計的根本。而現代的核電機組也有許多備援設計,包含維持散熱能力的管線、電源、水源…等,而新的機組甚至開始將利用物理定律自行散熱的能力納入備援的一環。

或許大家的「安全」有一點點不一樣

這其實是個有一點點自嘲的結語,因為媒體記者與(各種名嘴與評論員?)們應該不會去想這些……當一個系統因為一些不穩定因素造成失效安全概念下設計的防護機制動作,往往會引起很多人關切他的「安全」問題。然而這之中,其實還存在了「可用率」(avalibility,可正常運作、提供應有功能的時間比率)與是否「危險」兩個層次的問題。

大部分的東西,停下來是個安全的狀態,比如前面講的軌道運輸系統,在一般正常使用的情況下,因為某樣感測器的訊號異常而停下來,大概就是會擔誤到乘客上班、約會、轉乘其他交通工具…等的時間。這種情況下並不會有立即的人身危險,比如說車子不會自己無緣無故暴走,線上的其他車子會因為系統偵測到佔線或是佔線的狀況不確定而停下來,所以不會有其他車撞上來,只要這個系統是有正確的失效安全設計。這樣的情況下,可以質疑這個系統的「可用率」不夠高,但不至於有人身安全方面的「危險」。

當然有些某些東西在特定的狀況是不能停下來的,比如前面說到還在空中的飛機、醫院病人的維生系統、正在使用中的核電機組散熱系統…等等。這類的情況下,維持系統在一個穩定運轉的狀態,必要時使用多重備援去維持,就成了安全的狀態。因此回到一開始講的,失效安全應該是以「狀態」的角度去考量系統運作,訂出安全的狀態,並且確保這台狀態機在各種異常的條件都可以停在安全的狀態。

說到底,或許有時候爭論不休的原因就是把「可用率」給放大解讀成是否會造成人身安全或其他傷害的「安全性」了,所以真的希望…媒體記者們能搞清楚這一層。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *