SWEST15 S2b実践！機能安全～Safety Conceptを作ろう！（ソフトウェア編）～
2012年8月23日（金） 9:00～10:20
武井 千春（名古屋大学 NCES）
松原 豊（名古屋大学 NCES）
水口 大知（アトリエ）
森川 聡久（ヴィッツ）-1-

本セッションの目的・概要• 機能安全において、すべての前提となる最も重要な活動は「Safety Concept作り」。その内「安全分析」が最も重要な作業です。
• 目的： Safety Concept構築のためのエッセンスを習得する。（今回はソフトウェアにフォーカス）• 概要：– 例題システムのソフトウェアについて、故障モードを分析、安全対策の検討– 数人のグループでブレーンストーミング＆発表

2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」-2-

本セッションの狙い• ソフトウェアエンジニアへの期待– ソフトウェアの安全分析手法を体験する– ソフトウェアによる安全対策の実例を学ぶ• 防御プログラミング• 実行シーケンス監視• 変数2重化• etc2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」-3-タイムテーブル
時間

9:00～9:10

実施内容
イントロダクション、グループ分け※同じ会社の方はなるべくバラバラに座ってください

9:10～9:20「例題システムの説明」

9:20～10:00

グループワーク：「ソフトウェアの安全分析」

10:00～10:20

成果発表、まとめ2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」-4-

Safety Conceptの構築方法について

作成：森川 聡久（ヴィッツ）-5-機能安全の大枠
IEC 61508
SIL

低頻度作動モード

高頻度作動モード、連続モード

作動失敗確率（１／回）

故障率（１／時間）

4

10-5以上10-4未満 数万回に1度

10-9以上10-8未満 数万年に1度

310-4以上10-3未満 数千回に1度

10-8以上10-7未満 数千年に1度

210-3以上10-2未満 数百回に1度10-7以上10-6未満 数百年に1度

110-2以上10-1未満 数十回に1度

10-6以上10-5未満 数十年に1度※SIL：Safety Integrity Level※ASIL：Automotive SIL

安全度水準
（SIL）

安全設計
安全プロセス （低故障部品、（開発、管理）

決定論的原因故障

故障検出機能）ランダム
ハードウェア故障

2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」-6-従来開発と機能安全開発
従来開発

機能安全開発・信頼性（壊れないこと）重視
・自己努力によってバグゼロが目標
・担当者間のすり合わせ開発
・開発文書の出来栄えは不十分
・効率的だが説明力が乏しい

・故障を前提とした安全担保
・高品質の証拠を積み重ねた開発によってバグゼロが目標
・構成部品が故障しても危険にならない仕組みが必要
・安全を客観的に説明できる
開発文書の作成が必要

緊急停止スイッチ

マイコン

アクチュエータ・もし緊急停止スイッチが（マイコンが・・・）壊れたら → ”危険”
→ アクチュエータを停止し、故障したことがわかるようにする＜対策＞
・バグが潜在していないことを客観的に説明可 → 安全プロセスの強化
・故障を発見する → 故障検出機能・故障しにくくする → システムの多重化、低故障率の部品を使用 安全設計
2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」-7-

IEC61508の派生規格
ISO26262
自動車

DO-178B
航空機

IEC61513
原子力BS EN 50128
BS EN 50129
鉄道

IEC 61508
一般安全装置IEC61511
化学プラントIEC62304
医療機器
ISO13482
サービスロボット

IEC62061
産業機械

2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」-8-

安全コンセプトの構築の流れ
いかなる故障が発生しても、必要なレベルの安全を達成できることを証明すること。
一番の肝は「安全分析」。
＜安全コンセプト４文書＞
・安全分析結果
故障を網羅的に洗い出すことと、安全対策が重要
・SRS：Safety Requirement Specification：安全要求仕様書
安全関連機能について記載した仕様書
・SC：Safety Concept：安全コンセプト
コンセプトレベルで安全を証明（説明）できる資料
・SM：Safety Manual：安全マニュアル
ユーザやハードへの制約条件
目標とするSILの達成を証明できるまで繰り返し実施

ｼｽﾃﾑ
概要

想定状況

ハザード＆リスク分析
（H&R）
ｼｽﾃﾑ
要件

SIL

安全/
危険安全分析
安全分
析結果
安全コンセプト文書の作成
SC

2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」

SRS

SM-9-

SILと安全策の関係
・IEC61508ではSFFの達成が必要！
・SILとN重化によって、要求SFFが決まる。
IEC61508:2010-2より抜粋

SFF＝安全側故障率／全故障率⇒ 故障検出率（DC）を上げることで、安全側故障率を上げる必要あり。
⇒ 最悪ケースを想定すると、SFF相当のDCを目指すことを推奨する。

DCの決定方法
IEC61508:2010-2 Table.A に記載あり。
検出可能な故障によって、DC=High（99%）／Medium（90%）／Low（60%）を判定。
それを達成するための具体的な方策についても、記載あり。
⇒ 本セッションでは、後ほど方策一覧をお配りします。

2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」- 10 -

安全分析にて考慮すべき故障のパターン• 系統的原因故障（バグ） と ランダムHW故障• 単一故障 と 多重故障
– IEC61508では、単一故障のみ考慮– ISO26262（自動車）では、２重故障まで考慮必要– BS EN 50129（鉄道）では、３重故障まで考慮必要• 恒久故障 と 一時故障
– 一時故障の例）ノイズによるメモリ化け• 従属故障– ある故障が原因で、その影響を受け、別の箇所が故障する• 共通原因故障– １つの原因により、複数箇所への同時故障が生じること– 例１）電源異常により、２マイコン共誤動作– 例２）ノイズの影響（環境）により、 ２マイコン共誤動作– 例３）安全系のある変数が化け、各出力系全てが誤動作– 例４）同一設計のソフトのため、同じ箇所にバグが存在
2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」- 11 -

潜在故障• 安全策（Safety Mechanism；SM）の潜在故障
a) 安全なケース
安全機能

対策例
①故障

（これが故障すると危険に直結）

安全策１（安全機能が故障していないことを監視）（これが故障すると危険に直結）②異常を検出⇒ フェールセーフ処理b) 危険なケース
安全機能（これが故障すると危険に直結）

安全策１

安全機能②後に故障
⇒ 危険

安全策１
（安全機能と安全策２が故障していないことを監視）

安全策２（安全策１が故障していないことを監視）①先に故障（安全機能が故障していないことを監視）
2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」- 12 -

例題システムの説明- 13 -

例題システム：ＩＨクッキングヒーター
1. システムレベル (機能記述)

直流電流を供給する設定周波数で電流方向を入れ替える

電磁誘導(IH)で電流を発生させる

鍋のジュール熱で具が温まる

2. HW と SW による実現
具1S1ｽｲｯﾁ

S2ｽｲｯﾁ

鍋: N1

Regulator1

押し釦

S3

押し釦

S4

MCU1 (HW)

ｺﾝﾃﾞﾝｻ: C1

コイル: L1※周波数と電流と熱/温度の関係は、当日お伝えします。

SW1 (制御ソフト)

2. トップハザード
1) システム内部の火災
2) 具(油等含む) の異常加熱による火災
ご協力：高野 裕之（東芝セミコンダクター＆ストレージ社）
2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」- 14 -

ソフトウェアの制御
今回の安全分析対象範囲
S31（下げる）/0(押し釦)S4(押し釦)ヒータ強度管理（6段階）

ヒータ
出力強度（0～5）

S1,S2出力時間（ｔ）の計算

S1,S2
出力時間（ｔ）

S1

1/0(スイッチ)

1/0

S2

S1,S2
制御値出力

1（上げる）/0(スイッチ)＜ユーザインタフェース＞

低高tに応じて、（S1,S2）＝（1,0）,（0,1）,（0,0）
を出力t
1S1用ポート出力

dd0＜備考＞
今回、簡略化のため「設定値通り、時間t,dが保たれていれば、温度は一定となる」こととします。

1
S2用ポート出力02013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」- 15 -

ソフトウェアの詳細設計
main

S3押下割込み

v_req_heatの上下限補正（0～5の範囲にする）

v_req_heat --v_req_heatに対応したS1,S2出力時間(t)を変換テーブルから取得し、v_t に格納する

S4押下割込み

v_req_heat ++S1のポートに‘1’を出力Wait(v_t)

S2のポートに‘1’を出力

S1のポートに‘0’を出力

Wait(v_t)

Wait(d)S2のポートに‘0’を出力

Wait(d)2013/8/23 SWEST15 S2b 「実践！機能安全 ～Safety Conceptを作ろう！（ソフトウェア編）～」- 16 -