SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

安全ソフトウェアの設計

【第2回】エレベータの安全ソフトウェア設計


エレベータの安全ソフトウェア設計

 図1をご覧ください。エレベータの基本的な機構と、安全設計を実現するためのセンサやアクチュエータが示されています。

図1:エレベータの安全装置の例
図1:エレベータの安全装置の例

 エレベータの乗降に対する安全設計の根本は、以下のように非常に単純です。

エレベータ乗降の安全設計
  • かご側の扉と乗り場側の扉が両方とも閉まっているとき以外は電磁ブレーキを解除しない、そしてモータを動かさない。
注1

 センサやアクチュエータの一次故障を考慮すると状態が複雑になるため、これ以降はセンサやアクチュエータの故障はないという前提において、組込みソフトウェアで実現する安全設計の危うい面を見ていきます。

注2

 この記事で取り上げる安全ソフトウェアのモデルは思考実験のために筆者が想定したもので、実際の機器で安全に動作することは証明されていません。

 図2をご覧ください。組込みソフトウェアエンジニアがエレベータ乗降の安全ソフトウェアについて検討しているところです。

 モータを駆動するdriveMotor()が呼ばれたとき、命令がSTOPならば無条件にモータを止めて、電磁ブレーキをONにしますが、命令がUPやDOWNであれば、かごの状況を調べてかごの扉が閉じているときのみ、電磁ブレーキを解除して、モータを回転させています(実際には乗り場扉のステータスもチェックしますが、ここでは説明簡略化のために省略しています)。

 プログラム構造としては問題なさそうですが、安全処理が分散してしまっているため、UPのときは安全確認を入れていてDOWNの方は入れ忘れてしまったなどというケースが発生しやすい状況です。

図2:ミスを誘発しやすい安全処理
図2:ミスを誘発しやすい安全処理

安全処理の一元化

 そこで、図3のように安全処理を一元化しました。driveMotor()関数が呼ばれたら、かごの扉ステータスをチェックし、扉が開いていれば無条件にモータを止め、電磁ブレーキをONにし、呼び出した関数にはERRORを返すようにしました。

図3:安全処理の一元化
図3:安全処理の一元化

 扉がしまっていることが分かったら、モータの制御を行うようにしています。チェック後のモータ制御関数では安全確認をしていません。また、driveMotor()が呼ばれるときだけでなく、戸開走行を常に監視する関数も用意しました。

次のページ
例外処理の追加

この記事は参考になりましたか?

安全ソフトウェアの設計連載記事一覧

もっと読む

この記事の著者

酒井 由夫(サカイ ヨシオ)

1987年よりクリティカルデバイスのソフトウェア開発に20年間従事する。おもに16bitのワンチップマイコンを使った信号処理、リアルタイム組込みシステムの開発を行い、製品の仕様立案からソフトウェア開発のプロセス管理、プロジェクトマネージメント、安全性・信頼性の検証、保守、ソフトウェア技術者教育など組...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3697 2009/03/16 18:36

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー