(57)【特許請求の範囲】
【請求項１】
安全コントローラで実行される安全プログラムの開発を支援するプログラム開発支援装置であって、
ユーザ操作に応じて安全プログラムを開発する開発手段と、
特定の規則に従った演算を行う関数に従って、開発された安全プログラムのデータに応じた識別値を計算する計算手段と、
前記安全プログラムに係るドキュメントを出力する出力手段とを備え、
前記出力手段は、前記ドキュメントの前記安全プログラムに係るページのすべてに、前記計算手段により計算された識別値を付与する、プログラム開発支援装置。
【請求項２】
前記出力手段は、出力されるドキュメントを構成するページのうち、機能安全に係るページについて、当該ページのすべてに前記計算手段により計算された識別値を付与する、請求項１に記載のプログラム開発支援装置。
【請求項３】
前記計算手段は、前記開発手段により生成される複数のデータからそれぞれ第１の識別値を計算するとともに、複数の第１の識別値から前記ドキュメントに付与する第２の識別値を計算する、請求項１または２に記載のプログラム開発支援装置。
【請求項４】
前記計算手段は、予め定められた生成多項式に従って計算される巡回冗長検査コードを前記識別値として出力する、請求項１〜３のいずれか１項に記載のプログラム開発支援装置。
【請求項５】
前記出力手段は、前記プログラム開発支援装置にて保持される安全プログラムから計算される識別値と、前記安全コントローラで実行される安全プログラムから計算される識別値とが同一であることを条件として、前記ドキュメントを出力する、請求項１〜４のいずれか１項に記載のプログラム開発支援装置。
【請求項６】
安全コントローラで実行される安全プログラムの開発を支援するプログラム開発支援プログラムであって、前記プログラム開発支援プログラムはコンピュータに
ユーザ操作に応じて安全プログラムを開発するステップと、
特定の規則に従った演算を行う関数に従って、開発された安全プログラムのデータに応じた識別値を計算するステップと、
前記安全プログラムに係るドキュメントを出力するステップとを実行させ、
前記出力するステップは、前記ドキュメントの前記安全プログラムに係るページのすべてに、前記計算された識別値を付与するステップを含む、プログラム開発支援プログラム。
【請求項７】
安全コントローラで実行される安全プログラムの開発を支援する装置で実行されるプログラム開発支援方法であって、
ユーザ操作に応じて安全プログラムを開発するステップと、
特定の規則に従った演算を行う関数に従って、開発された安全プログラムのデータに応じた識別値を計算するステップと、
前記安全プログラムに係るドキュメントを出力するステップとを備え、
前記出力するステップは、前記ドキュメントの前記安全プログラムに係るページのすべてに、前記計算された識別値を付与するステップを含む、プログラム開発支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、安全コントローラで実行される安全プログラムの開発を支援するプログラム開発支援装置、プログラム開発支援プログラムおよびプログラム開発支援方法に関する。
【背景技術】
【０００２】
多くの製造現場で使用される機械を安全に使用するためには、国際規格に従う安全機器（安全コンポーネント）を使用しなければならばない。この安全機器は、ロボットなどの自動的に動く装置によって人の安全が脅かされるのを防止することを目的としている。このような安全機器は、安全プログラムを実行する安全コントローラをはじめとして、人の存在や侵入を検知する検知機器、非常時の操作を受付ける入力機器、実際に機器を停止させる出力機器などを含む。
【０００３】
このような安全プログラムの開発に関連して、特開２０１５−０１８５５３号公報（特許文献１）は、プロセスプラントにおける制御システムおよび安全システムに関して、環境をプログラミングする機能ブロック図に容易に統合され得る１つ以上の状態マシン機能ブロックを使用する構成が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−０１８５５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
安全コントローラを含むシステム全体の機能安全を評価するにあたって、安全プログラムの内容を示すドキュメントが重要である。特に、パーソナルコンピュータ上などで作成された安全プログラムを安全コントローラへ転送した後、当該安全コントローラ上で実行される安全プログラムおよび各種設定を直接変更する操作（典型的には、「オンラインエディット」などと称される。）が行われることもあり、パーソナルコンピュータ上にある安全プログラムとの整合性が取れなくなる場合も生じ得る。また、出力されたドキュメント自体が改ざんされる可能性もある。そのため、特に、機能安全の評価においては、ドキュメントの取り扱いを慎重にする必要がある。
【０００６】
上述の特許文献１は、状態マシン機能ブロック（ＳＭＦＢ）の構成された機能を、マトリクスの表現を印刷することによって容易にドキュメント化されることを開示するのみであり、上述したような課題について、何ら考慮するものではない。
【０００７】
このように、安全コントローラで実行される安全プログラムに係るドキュメントの取り扱いを厳密化するための構成が要望されている。
【課題を解決するための手段】
【０００８】
本発明のある局面に従う安全コントローラで実行される安全プログラムの開発を支援するプログラム開発支援装置は、ユーザ操作に応じて安全プログラムを開発する開発手段と、入力に対して不規則的な値を計算する関数に従って、開発された安全プログラムのデータに応じた識別値を計算する計算手段と、安全プログラムに係るドキュメントを出力する出力手段とを含む。出力手段は、ドキュメントの安全プログラムに係るページのすべてに、計算手段により計算された識別値を付与する。
【０００９】
好ましくは、出力手段は、出力されるドキュメントを構成するページのうち、機能安全に係るページについて、当該ページのすべてに計算手段により計算された識別値を付与する。
【００１０】
好ましくは、計算手段は、開発手段により生成される複数のデータからそれぞれ第１の識別値を計算するとともに、複数の第１の識別値からドキュメントに付与する第２の識別値を計算する。
【００１１】
好ましくは、計算手段は、予め定められた生成多項式に従って計算される巡回冗長検査コードを識別値として出力する。
【００１２】
好ましくは、出力手段は、プログラム開発支援装置にて保持される安全プログラムから計算される識別値と、安全コントローラで実行される安全プログラムから計算される識別値とが同一であることを条件として、ドキュメントを出力する。
【００１３】
本発明の別の局面に従えば、安全コントローラで実行される安全プログラムの開発を支援するプログラム開発支援プログラムが提供される。プログラム開発支援プログラムはコンピュータに、ユーザ操作に応じて安全プログラムを開発するステップと、入力に対して不規則的な値を計算する関数に従って、開発された安全プログラムのデータに応じた識別値を計算するステップと、安全プログラムに係るドキュメントを出力するステップとを実行させる。出力するステップは、ドキュメントの安全プログラムに係るページのすべてに、計算された識別値を付与するステップを含む。
【００１４】
本発明のさらに別の局面に従えば、安全コントローラで実行される安全プログラムの開発を支援する装置で実行されるプログラム開発支援方法が提供される。プログラム開発支援方法は、ユーザ操作に応じて安全プログラムを開発するステップと、入力に対して不規則的な値を計算する関数に従って、開発された安全プログラムのデータに応じた識別値を計算するステップと、安全プログラムに係るドキュメントを出力するステップとを含む。出力するステップは、ドキュメントの安全プログラムに係るページのすべてに、計算された識別値を付与するステップを含む。
【発明の効果】
【００１５】
本発明によれば、安全コントローラで実行される安全プログラムに係るドキュメントの取り扱いを厳密化できる。
【図面の簡単な説明】
【００１６】
【図１】本実施の形態に従う安全システムで実行される安全プログラムに関するドキュメント管理の概要について説明する模式図である。
【図２】本実施の形態に従う支援装置から出力されるドキュメントの一例を示す模式図である。
【図３】本実施の形態に従う支援装置から出力されるドキュメントの一例を示す模式図である。
【図４】本実施の形態に従う支援装置の構成例を示す模式図である。
【図５】本実施の形態に従うドキュメント出力機能に用いる署名コードの生成処理を説明する模式図である。
【図６】本実施の形態に従う支援装置から出力されるドキュメントの別の一例を示す模式図である。
【図７】本実施の形態に従う支援装置における検証機能の処理手順を示すシーケンス図である。
【発明を実施するための形態】
【００１７】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００１８】
＜Ａ．ドキュメント管理の概要＞
まず、本実施の形態に従う安全コントローラで実行される安全プログラムに関するドキュメント管理の概要について説明する。図１は、本実施の形態に従う安全システムで実行される安全プログラムに関するドキュメント管理の概要について説明する模式図である。
【００１９】
図１を参照して、一例として、プログラム開発支援装置（以下、「支援装置」とも略称する。）１００と、安全コントローラ２００とを含む安全システム１を想定する。支援装置１００は、安全コントローラ２００で実行される安全プログラムの開発を支援する装置である。
【００２０】
このような安全システム１において、ユーザは、支援装置１００を用いて安全プログラム３００Ａを開発（作成やデバッグなど）する（（１）開発）。一旦開発が完了すると、ユーザは、支援装置１００で作成した安全プログラム３００Ａを安全コントローラへ転送する（（２）転送）。安全コントローラ２００では、転送された安全プログラムを実行する（（３）安全プログラム実行）。なお、支援装置１００から安全コントローラ２００への転送時には、支援装置１００で作成された安全プログラムのソースコードが実行形式（例えば、オブジェクト形式）などに変換されることもある。
【００２１】
この安全コントローラ２００へ転送されて実行中の安全プログラム３００Ａについて、支援装置１００を介してドキュメント３１０Ａが生成される。ドキュメントの生成としては、例えば、プリンタで印刷物として出力される形態や、ＰＤＦ（Portable Data Format）などの電子的なドキュメントとして出力される形態が想定される。
【００２２】
その後、支援装置１００上で安全プログラム３００Ａに対して変更が加えられて（（４）変更）、別の安全プログラム３００Ｂが作成されたとする。この安全プログラム３００Ｂについて、支援装置１００を介してドキュメント３１０Ｂを生成することもできる。
【００２３】
本来的には、安全コントローラ２００で実行される安全プログラムについて、機能安全を評価する必要がある。但し、評価の利便性・客観性などの観点から、支援装置１００上にある安全プログラムについて、安全コントローラ２００で実行される安全プログラムと同一であることを確認した上で、当該支援装置１００から出力されるドキュメントに基づいて、機能安全が評価される。
【００２４】
一方で、支援装置１００で作成された安全プログラム３００Ａから出力されたドキュメント３１０Ａの一部のページを、変更された安全プログラム３００Ｂから出力されたドキュメント３１０Ｂの対応するページと差し替えるような、意図的なページ改ざんを行うこともできる。あるいは、誤って、２種類のドキュメントが混ざった状態になり得る。
【００２５】
このように、ドキュメント中の一部ページの改ざん（（Ａ）ページ改ざん）、あるいは、ドキュメントの内容と安全コントローラ２００で実行される安全プログラムの内容との不一致（（Ｂ）内容不一致）などの問題を防止する必要がある。
【００２６】
そこで、本実施の形態に従う支援装置１００は、機能安全の評価の確実性を担保するような機能を提供する。より具体的には、安全プログラム３００から生成されるドキュメント３１０には、当該安全プログラム３００のデータに基づいて計算される識別値が付与される。
【００２７】
図２および図３は、本実施の形態に従う支援装置１００から出力されるドキュメントの一例を示す模式図である。図２（Ａ）を参照して、安全プログラム３００Ａから出力されたドキュメント３１０Ａには、安全プログラム３００Ａに含まれるロジックがファンクションブロックを用いて定義されている。ドキュメント３１０Ａには、さらに、署名コードとして「＃ＡＡＣ７」が付与されている。
【００２８】
一方、図２（Ｂ）に示されるドキュメント３１０Ｂには、安全プログラム３００Ｂに含まれるロジックがファンクションブロックを用いて定義されている。一例として、安全プログラム３００Ａのファンクションブロック３１２Ａの「Ｓ＿ＡｕｔｏＲｅｓｅｔ」（符号３１３Ａ）には、「ＦＡＬＳＥ」が設定されている一方で、安全プログラム３００Ｂのファンクションブロック３１２Ｂの「Ｓ＿ＡｕｔｏＲｅｓｅｔ」（符号３１３Ａ）には、「ＴＲＵＥ」が設定されている。このとき、ドキュメント３１０Ｂには、署名コードとして「＃ＤＡＸ１」が付与されている。このように、安全プログラムのごく一部の変更であっても、付与される署名コードの値は、大きく変化する。
【００２９】
本実施の形態に従う支援装置１００が出力するドキュメントには、対応する安全プログラムのデータ（コード）に応じて不規則に計算される識別値である、署名コードが付与される。この署名コードは、対応する安全プログラムに関連するドキュメント全体に亘って一律に付与される。
【００３０】
そのため、例えば、図３に示すように、ある安全プログラムから生成されたドキュメントと、別の安全プログラムから生成されたドキュメントとが、万が一混ざったとしても、いずれのページのドキュメントが異なる安全プログラムから生成されたドキュメントであるかを確実に特定することができる。
【００３１】
支援装置１００は、入力に対して不規則的な値を計算する関数に従って、開発された安全プログラムのデータに応じた識別値を計算する機能とともに、安全プログラムに係るドキュメントを出力する機能を有している。そして、この出力する機能において、ドキュメントの安全プログラムに係るページのすべてに、計算された識別値を署名コードとして付与する。
【００３２】
本実施の形態において使用される識別値としては、上述したように、安全プログラムに対する軽微な変更によって、その値が不規則かつ関連のない値に変化するようなものが好ましい。例えば、所定の生成多項式に従って計算されるＣＲＣ（Cyclic Redundancy Check：巡回冗長検査）コードや、多次元のパリティを順次並べたデータ列などを用いることができる。あるいは、一方向性ハッシュ関数などを用いて計算されるハッシュ値を用いることができる。
【００３３】
＜Ｂ．プログラム開発支援装置の構成＞
次に、本実施の形態に従うドキュメント出力機能を有する支援装置１００の構成について概略する。図４は、本実施の形態に従う支援装置１００の構成例を示す模式図である。
【００３４】
図４に示す本実施の形態に従う支援装置１００は、典型的には、必要なソフトウェアを汎用コンピュータにインストールして実行することで実現できる。
【００３５】
具体的には、支援装置１００は、主たるコンポーネントとして、後述するプログラムを実行するプロセッサ１０２と、プロセッサ１０２でのプログラム実行に必要なデータを格納するための作業領域を提供する主メモリ１０４と、キーボードやマウスなどのユーザ操作を受付ける入力部１０６と、ディスプレイ、各種インジケータ、プリンタなどの処理結果を出力する出力部１０８と、外部ネットワークと通信するためのネットワークインターフェイス（Ｉ／Ｆ：interface）１１０と、光学ドライブ１１２と、安全コントローラなどと通信するためのローカル通信インターフェイス（Ｉ／Ｆ）１１６と、補助記憶装置１２０とを含む。これらのコンポーネントは、内部バス１１８などを介して互いにデータ通信可能に接続される。
【００３６】
支援装置１００は、光学ドライブ１１２を有しており、コンピュータ読取可能なプログラムを非一過的に格納する光学記録媒体（例えば、ＤＶＤ（Digital Versatile Disc）など）のコンピュータ読取可能な記録媒体１１４から、各種プログラムを読取って補助記憶装置１２０などにインストールする。本実施の形態に従うドキュメント出力機能は、安全コントローラに対する設定、プログラミング、デバッグなどの機能を提供する開発環境プログラムの一部として提供されてもよい。
【００３７】
支援装置１００で実行される各種プログラムは、コンピュータ読取可能な記録媒体１１４を介してインストールされてもよいが、ネットワーク上のサーバ装置などからダウンロードする形でインストールするようにしてもよい。また、本実施の形態に従うドキュメント出力機能に係るプログラムは、ＯＳが提供するモジュールの一部を利用する形で実現される場合もある。このような場合には、本実施の形態に従うドキュメント出力機能の実現に必要なすべてのソフトウェアモジュールが配布されるのではなく、その一部のみが配布されることになる。このような場合であっても、本発明の技術的範囲に包含されることは自明である。また、本実施の形態に従うドキュメント出力機能に係る処理が、他のプログラムまたはソフトウェアの一部として実装されてもよい。
【００３８】
補助記憶装置１２０は、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Flash Solid State Drive）などで構成され、プロセッサ１０２で実行されるプログラムや各種データを不揮発的に格納する。具体的には、補助記憶装置１２０は、安全プログラム（ソースプログラム）から安全コントローラにて実行可能なコード（実行モジュール）を生成するための実行モジュール生成プログラム１２２と、安全プログラムの作成・編集するためのエディタプログラム１２４と、本実施の形態に従うドキュメント出力に係る処理を実行する検証・出力プログラム１２６とを含む。また、補助記憶装置１２０は、安全プログラム３００のソースコードおよび構成データ３０８を保持する。
【００３９】
図４には、汎用コンピュータがプログラムを実行することで、本実施の形態に従うドキュメント出力機能を実現するが、このような構成に代えて、その全部または一部をハードワイヤード回路で実装してもよい。例えば、プロセッサ１０２が上述の各種プログラムを実行することで提供される機能をＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field-Programmable Gate Array）を用いて実装してもよい。
【００４０】
＜Ｃ．署名コードの生成処理＞
次に、本実施の形態に従うドキュメント出力機能に用いる署名コードの生成処理について説明する。
【００４１】
本実施の形態に従うドキュメント出力機能に用いる署名コードの生成方法としては、入力に対して不規則的な値を計算する関数であれば、任意のアルゴリズムを採用することができる。上述したように、例えば、予め定められた生成多項式を用いて計算されるＣＲＣコードや、一方向性ハッシュ関数を用いて計算されるハッシュ値などが挙げられる。
【００４２】
本実施の形態においては、予め定められた生成多項式に従って計算されるＣＲＣコードが識別値として出力されるものとする。ＣＲＣコードは、データ転送などの別の用途にも用いられるため、既にロジックが組み込まれている場合も多く、本実施の形態に従う署名コードを実装する際に、追加するロジックのコード量が少なくて済むという利点がある。
【００４３】
なお、本明細書において「関数」とは、入力値に対して対応する出力値を都度計算する計算式に限らず、入力値と出力値との対応関係を予め規定したテーブルを用いる構成を含み得る。
【００４４】
安全コントローラで実行される安全プログラムは、複数のソースコードおよび構成データ（設定値群）の組み合わせで構成される場合もある。一方で、ドキュメントに付与される署名コードは少なくとも１つあればよい。そのため、データの集合に対してそれぞれ署名コードを生成し、複数の署名コードから最終的な署名コードを生成するという、２段階の署名コードの生成手順を踏んでもよい。なお、複数のソースコードおよび必要な構成データ（設定値群）の組み合わせ全体を「プロジェクト」と称することもある。
【００４５】
図５は、本実施の形態に従うドキュメント出力機能に用いる署名コードの生成処理を説明する模式図である。図５に示す署名コード生成ロジック１５０は、典型的には、支援装置１００のプロセッサ１０２が検証・出力プログラム１２６（図４）を実行することで実現される。
【００４６】
図５を参照して、安全プログラム３００は、安全コントローラ２００で実行されるユーザプログラムであり、機能安全を実現するためのロジックと、それ以外の機能を実現するためのロジックとを含み得る。以下では、前者のロジックを「機能安全部」と称し、後者のロジックを「非機能安全部」と総称する。
【００４７】
機能安全部は、ユーザプログラム中の安全コンポーネントからの入力信号に応答して、予め定められたロジックを実行するとともに、そのロジックの実行結果に基づいて対象となる安全コンポーネントを活性化し、装置を緊急停止させたりする。非機能安全部は、例えば、何らかの入力信号に応答して、装置のスイッチを入れたり、目的に応じて装置を駆動したりする。
【００４８】
構成データ３０８は、安全コントローラで安全プログラムを実行するために必要な設定情報を含み、例えば、Ｉ／Ｏユニットの配置構成、ネットワーク設定、Ｉ／Ｏユニットに対するデバイス割り当て、Ｉ／Ｏユニットに割り当てられた信号に対するプログラム内で使用する変数の割り当てなどを含む。
【００４９】
第１の段階において、署名コード生成ロジック１５０により、４つのデータ集合（機能安全部３０２、機能安全部３０４、非機能安全部３０６、構成データ３０８）のそれぞれから４つの署名コード（機能安全部１署名コード３２２、機能安全部２署名コード３２４、非機能安全部署名コード３２６、構成データ署名コード３２８）が生成される。図５に示す例では、ＣＲＣコードが署名コードとして用いられるので、署名コード生成ロジック１５０は、予め用意されたＣＲＣテーブル１５２を参照しつつ、それぞれの署名コードを生成する。
【００５０】
さらに、４つの署名コードが生成されるので、署名コード生成ロジック１５０は、これらの４の署名コードから単一のドキュメント用署名コード３１４を生成する。そして、この生成されたドキュメント用署名コード３１４が生成されるドキュメントに付与される。
【００５１】
このように、支援装置１００は、開発プロセスによって生成される複数のデータからそれぞれ署名コード３２２，３２４，３２６，３２８（第１の識別値）を計算するとともに、複数の署名コード３２２，３２４，３２６，３２８からドキュメントに付与する署名コード３１４（第２の識別値）を計算する。
【００５２】
上述のような手順に従って、複数段階を経て単一の署名コードを生成することで、安全プログラム３００（ソースコード）および安全プログラム３００の実行に必要な構成データ３０８のすべてのデータを反映した署名コードを生成することができる。これによって、例えば、機能安全部ではなく、構成データの一部が変更された場合であっても、生成されるドキュメント用署名コードの値は大きく変化するので、実行される安全プログラムに係るドキュメントが先のものとは異なっていることを一見して認識できる。
【００５３】
＜Ｄ．必要部分のみに署名コード付与＞
上述したような安全コントローラは、一種のＰＬＣ（Programmable Logic Controller）であり、上述したような安全プログラムの他、一般的な制御プログラムも実行可能である。また、安全プログラムには、図５に示すような非機能安全部も含まれ得る。一方で、上述したような署名コードは、少なくとも、機能安全の評価に関連する部分についてのみ存在すれば機能を果たす。そのため、出力されるドキュメントの全体（すなわち、全ページ）に対して署名コードを付与するのではなく、機能安全に係る部分（すなわち、一部のページ）のみに対して、署名コードを付与するようにしてもよい。
【００５４】
図６は、本実施の形態に従う支援装置１００から出力されるドキュメントの別の一例を示す模式図である。図６を参照して、ドキュメント３３０は、非機能安全部に相当するドキュメント部分３３２と、機能安全部に相当するドキュメント部分３３４との組み合わせからなる。機能安全部に相当するドキュメント部分３３４については、ドキュメント用署名コード３１４が付与されている一方で、非機能安全部に相当するドキュメント部分３３２については、対応する位置にドキュメント用署名コード３１４が存在していない。
【００５５】
このように、支援装置１００は、出力されるドキュメントを構成するページのうち、機能安全に係るページについて、当該ページのすべてに計算された署名コード（識別値）を付与する。
【００５６】
ある安全コントローラで実行される安全プログラムに関するドキュメントのページ数が大量である場合などには、プログラムの一部が変更または改変されるたびに、ドキュメントを全ページ分印刷することは非効率である場合も想定される。そのため、少なくとも、機能安全に係るページについては署名コードを付与して、ページ改ざんなどを防止する一方で、それ以外のページについては、事後的なページ差し替えなどを許容して、機能安全と経済性・合理性との確保を実現する。
【００５７】
機能安全部に相当するドキュメント部分３３４のみに署名コードを付与する構成を採用する場合には、署名コードの計算の対象から非機能安全部のデータを除外することが好ましい。すなわち、機能安全部に相当するドキュメント部分３３４に付与する署名コードは、機能安全部のデータのみから計算することが好ましい。より具体的には、図５に示す、機能安全部１署名コード３２２および機能安全部２署名コード３２４のみから、単一のドキュメント用署名コード３１４を生成するようにしてもよい。このような構成を採用することで、非機能安全部に対する編集操作などがなされたとしても、機能安全部に対する変更がなければ、同一の署名コードが維持されるので、取り扱いが容易化する。
【００５８】
なお、出力されるドキュメントのいずれの部分を機能安全部とみなし、それ以外の部分の非機能安全部とみなすのかといった判断基準については、予め設定しておくことができる。一般的には、機能安全に係る安全コンポーネントからの入力信号を取得する処理、当該取得された入力信号に対して実行されるロジック、当該ロジックの結果を反映して安全コンポーネントへ指令を出力する処理、などについては、機能安全部とすることが好ましい。
【００５９】
一方で、付加的な処理、例えば、エラーログを収集するための処理などについては、非機能安全部とみなすことが好ましい。
【００６０】
＜Ｅ．安全コントローラとの間の検証機能＞
次に、支援装置１００がドキュメントを出力するソースとなる安全プログラムの検証機能について説明する。図１を参照して説明したように、支援装置１００から出力されるドキュメントの内容が、安全コントローラ２００で実行される安全プログラムの内容と一致していなければ、ドキュメントに基づいて機能安全を評価することができない。そのため、本実施の形態に従う支援装置１００では、以下に示すような、安全コントローラ２００との間で安全プログラムの同一性を検証する機能を有している。
【００６１】
図７は、本実施の形態に従う支援装置１００における検証機能の処理手順を示すシーケンス図である。図７を参照して、まず、ユーザは、支援装置１００上で安全プログラムを開発する（ステップＳ１０）。開発された安全プログラムが安全コントローラ２００へ転送される（ステップＳ１２）。このとき、ソースプログラムが実行可能な形式に変換された上で、安全コントローラ２００へ転送されてもよい。
【００６２】
ユーザは、支援装置１００を用いて、安全コントローラ２００上で実行される安全プログラムに対してデバッグを行う（ステップＳ１４）。安全コントローラ２００へ転送される前に、支援装置１００上で安全プログラムに対するデバッグは行われるが、安全プログラムを現実に実行させて初めて判明する不具合もあるため、安全コントローラ２００への安全プログラムの転送後に、デバッグが行われる。このデバッグの内容を自動的に支援装置１００に保持されている安全プログラムおよび構成データ（設定値群）に反映するようにしてもよい。
【００６３】
デバッグ完了後、ユーザは、支援装置１００に保持されている安全プログラムおよび安全コントローラ２００で実行されている安全プログラムの同一性を確認した上で、ドキュメント出力を指示する（ステップＳ１６）。この同一性を確認する項目としては、安全プログラムのプロパティ、ユニット構成、ネットワーク構成、通信項目、タスク設定、変数設定などである。
【００６４】
すると、支援装置１００は、現在の安全プログラムおよび関連する構成データなどに基づいて署名コードを生成する（ステップＳ１８）。並行して、安全コントローラ２００においても、署名コードを生成する（ステップＳ２０）。これらの署名コードの生成には、共通のロジックが用いられる。そして、安全コントローラ２００は、生成した署名コード（安全コントローラ）を支援装置１００へ送信する（ステップＳ２２）。
【００６５】
支援装置１００は、支援装置１００が生成した署名コード（支援装置）と安全コントローラ２００から受信した署名コード（安全コントローラ）とを比較し、その同一性を評価する（ステップＳ２４）。両署名コードが同一である場合に限って、その署名コードを付与したドキュメントを出力する（ステップＳ２６）。
【００６６】
このように、支援装置１００は、支援装置１００にて保持される安全プログラムから計算される署名コード（識別値）と、安全コントローラ２００で実行される安全プログラムから計算される署名コード（識別値）とが同一であることを条件として、ドキュメントを出力するようにしてもよい。
【００６７】
図７には、支援装置１００および安全コントローラ２００の各々で署名コードを生成する構成について例示したが、これに限らず、各種の方法を採用してもよい。例えば、安全コントローラ２００から支援装置１００に対して、実行中の安全プログラムを転送し、支援装置１００にて、当該安全コントローラ２００からの安全プログラムについての署名コードを生成するようにしてもよい。あるいは、安全プログラムのコード自体を比較し、両者が一致した場合に限って、署名コードを生成するようにしてもよい。
【００６８】
このように、ドキュメントを出力する支援装置１００が保持する安全プログラムと、安全コントローラ２００で実行される安全プログラムとの同一性が維持されていることを条件とした上で、署名コードを付与したドキュメントを出力するようにしてもよい。
【００６９】
なお、安全プログラムの同一性が検証されるまでは、ドキュメントは出力するものの、署名コードを付与しないようにしてもよい。この場合、署名コードが付与されていないドキュメントについては、機能安全の検証には用いることができない。このような一連の処理によって、支援装置１００から出力されるドキュメントと、安全コントローラ２００で実行される安全プログラムとの同一性を確保できる。
【００７０】
＜Ｆ．利点＞
本実施の形態に従う支援装置１００は、出力されるドキュメントの安全プログラムに係るページのすべてに、当該安全プログラムの同一性を担保するための識別値である署名コードが付与されるので、一部ページの差し替えといった改ざんなどを容易に発見することができ、安全コントローラで実行される安全プログラムに係るドキュメントの取り扱いを厳密化できる。
【００７１】
また、本実施の形態に従う支援装置１００は、少なくとも、ドキュメントの機能安全に係るページのみに署名コードを付与し、それ以外のページには署名コードを付与しないようにすることもできる。このような必要なページにのみ署名コードを付与する構成を採用することで、安全プログラムに対する軽微な修正や変更などの際に、ドキュメント全体を再出力するといった非効率的な作業を回避できる。
【００７２】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００７３】
１  安全システム、１００  支援装置、１０２  プロセッサ、１０４  主メモリ、１０６  入力部、１０８  出力部、１１０  ネットワークインターフェイス（Ｉ／Ｆ）、１１２  光学ドライブ、１１４  記録媒体、１１６  ローカル通信インターフェイス（Ｉ／Ｆ）、１１８  内部バス、１２０  補助記憶装置、１２２  実行モジュール生成プログラム、１２４  エディタプログラム、１２６  出力プログラム、１５０  署名コード生成ロジック、１５２  ＣＲＣテーブル、２００  安全コントローラ、３００，３００Ａ，３００Ｂ  安全プログラム、３０２，３０４  機能安全部、３０６  非機能安全部、３０８  構成データ、３１０，３１０Ａ，３１０Ｂ，３３０  ドキュメント、３１２Ａ，３１２Ｂ  ファンクションブロック、３１４，３２２，３２４，３２６，３２８  署名コード、３３２，３３４  ドキュメント部分。
【図１】
0006477553.tif 000002
【図２】
0006477553.tif 000003
【図３】
0006477553.tif 000004
【図４】
0006477553.tif 000005
【図５】
0006477553.tif 000006
【図６】
0006477553.tif 000007
【図７】
0006477553.tif 000008