(57)【要約】【課題】入力機器と出力機器との間の入出力関係に関して安全プログラムの設計を容易にするための技術が要望されている。【解決手段】予め定められた条件が成立すると安全が保たれるように出力機器を動作させるための安全プログラムを生成するための情報処理装置２００は、入力機器からの入力信号の値が初期値である第１の入力値から第２の入力値に変化したことに対して応答する出力機器を入力機器ごとに対応付けている入出力設定２３０を取得するための取得部と、入出力設定２３０に規定されている入力機器のいずれかからの入力信号の値が第１の入力値から第２の入力値に変化した場合に、当該入力機器に対応付けられている出力機器の動作状態を安全状態に遷移させるための安全プログラム１０を生成する生成部とを備える。【選択図】図１
2018152032.tif 000002
【特許請求の範囲】
【請求項１】
予め定められた条件が成立すると安全が保たれるように出力機器を動作させるための安全プログラムを生成するための情報処理装置であって、
入力機器からの入力信号の値が初期値である第１の入力値から第２の入力値に変化したことに対して応答する出力機器を入力機器ごとに対応付けている入出力設定を取得するための取得部と、
前記入出力設定に規定されている入力機器のいずれかからの入力信号の値が前記第１の入力値から前記第２の入力値に変化した場合に、当該入力機器に対応付けられている出力機器の動作状態を安全状態に遷移させるための安全プログラムを生成する生成部とを備える、情報処理装置。
【請求項２】
前記情報処理装置は、前記入出力設定の設定操作を受付けるためのユーザインターフェイスを提供する提供部をさらに備える、請求項１に記載の情報処理装置。
【請求項３】
前記ユーザインターフェイスは、前記入出力設定に規定されている各入力機器について、当該入力機器からの入力信号の変化に応答する出力機器の設定を受付けるように構成されている、請求項２に記載の情報処理装置。
【請求項４】
前記ユーザインターフェイスは、マトリクス状に表示された設定領域群を含み、
前記設定領域群の行方向および列方向の一方には、前記入出力設定に規定されている各入力機器が関連付けられており、
前記設定領域群の行方向および列方向の他方には、前記入出力設定に規定されている各出力機器が関連付けられており、
前記設定領域群に含まれる各設定領域は、当該設定領域に関連付けられている出力機器が当該設定領域に関連付けられている入力機器からの入力信号の値の変化に応答するか否かを示す設定を受付ける、請求項３に記載の情報処理装置。
【請求項５】
前記ユーザインターフェイスは、予め定められた複数の入力機器の中から前記入出力設定に含める入力機器を選択可能に構成されている、請求項２〜４のいずれか１項に記載の情報処理装置。
【請求項６】
前記ユーザインターフェイスは、予め定められた複数の出力機器の中から前記入出力設定に含める出力機器を選択可能に構成されている、請求項２〜５のいずれか１項に記載の情報処理装置。
【請求項７】
前記ユーザインターフェイスは、前記入出力設定に規定されている各入力機器について、入力機器から出力される入力信号を二重化するか否かを示す設定をさらに受付けるように構成されている、請求項２〜６のいずれか１項に記載の情報処理装置。
【請求項８】
前記ユーザインターフェイスは、
メンテナンスモードを使用するか否かについての設定を受付け可能に構成されており、
前記メンテナンスモードの使用が有効に設定されたことに基づいて、前記設定領域群とは異なる他の前記設定領域群をさらに表示する、請求項４に記載の情報処理装置。
【請求項９】
前記ユーザインターフェイスは、他の前記設定領域群の表示時に、前記設定領域群に設定されている設定値を初期値として他の前記設定領域群に反映する、請求項８に記載の情報処理装置。
【請求項１０】
前記生成部は、
前記設定領域群に規定されている入力機器のいずれかからの入力信号の値が前記第１の入力値から前記第２の入力値に変化した場合に、当該入力信号の値の変化に応答するように設定されている出力機器の動作状態を安全状態に遷移させるための第１制御命令と、
他の前記設定領域群に規定されている入力機器のいずれかからの入力信号の値が前記第１の入力値から前記第２の入力値に変化した場合に、当該入力信号の値の変化に応答するように設定されている出力機器の動作状態を安全状態に遷移させるための第２制御命令とを前記安全プログラムに含める、請求項８または９に記載の情報処理装置。
【請求項１１】
予め定められた条件が成立すると安全が保たれるように出力機器を動作させるための安全プログラムを生成するための情報処理方法であって、
入力機器からの入力信号の値が初期値である第１の入力値から第２の入力値に変化したことに対して応答する出力機器を入力機器ごとに対応付けている入出力設定を取得するステップと、
前記入出力設定に規定されている入力機器のいずれかからの入力信号の値が前記第１の入力値から前記第２の入力値に変化した場合に、当該入力機器に対応付けられている出力機器の動作状態を安全状態に遷移させるための安全プログラムを生成するステップとを備える、情報処理方法。
【請求項１２】
予め定められた条件が成立すると安全が保たれるように出力機器を動作させるための安全プログラムを生成するための情報処理プログラムであって、
前記情報処理プログラムは、情報処理装置に、
入力機器からの入力信号の値が初期値である第１の入力値から第２の入力値に変化したことに対して応答する出力機器を入力機器ごとに対応付けている入出力設定を取得するステップと、
前記入出力設定に規定されている入力機器のいずれかからの入力信号の値が前記第１の入力値から前記第２の入力値に変化した場合に、当該入力機器に対応付けられている出力機器の動作状態を安全状態に遷移させるための安全プログラムを生成するステップとを実行させる、情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、安全プログラムを生成するための情報処理装置、情報処理方法、および情報処理プログラムに関する。
【背景技術】
【０００２】
多くの製造現場で使用される機械を安全に使用するためには、国際規格に従う入力機器（安全コンポーネント）を使用しなければならばない。この入力機器は、ロボットなどの自動的に動く装置によって人の安全が脅かされることの防止を目的としている。このような入力機器は、安全プログラムを実行する安全コントローラをはじめとして、人の存在や侵入を検知する検知機器、非常時の操作を受付ける入力機器、実際に機器を停止させる出力機器などを含む。
【０００３】
このような製造現場での安全を確保する技術の一つとして、たとえば、特開２０１４−１３７６２１号公報（特許文献１）は、安全コントローラのユーザプログラムの設計を容易にすることが可能な安全コントローラのユーザプログラムの設計を支援する方法を開示する。
【０００４】
特開２０１４−１３７６２１号公報（特許文献１）は、安全コントローラと安全Ｉ／Ｏターミナルとがバス型ネットワークを介して接続され、安全コントローラでは、安全Ｉ／Ｏターミナルに接続される安全入力機器からの入力信号に基づいて、安全Ｉ／Ｏターミナルに接続される安全出力機器に対して安全動作を行うための指令を出力する構成を開示する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−１３７６２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、安全コントローラで実行される安全プログラムについては、設計者は、入力機器と出力機器との間の入出力関係を設定する必要がある。上述の特許文献１は、安全入力機器の入力端子または安全出力機器の出力端子に関して安全プログラムの設計を容易にするための方法を開示しているが、安全入力機器と安全出力機器との間の入出力関係に関して安全プログラムの設計を容易にすることについては開示していない。
【０００７】
したがって、入力機器と出力機器との間の入出力関係に関して安全プログラムの設計を容易にするための技術が要望されている。
【課題を解決するための手段】
【０００８】
ある局面に従うと、予め定められた条件が成立すると安全が保たれるように出力機器を動作させるための安全プログラムを生成するための情報処理装置は、入力機器からの入力信号の値が初期値である第１の入力値から第２の入力値に変化したことに対して応答する出力機器を入力機器ごとに対応付けている入出力設定を取得するための取得部と、上記入出力設定に規定されている入力機器のいずれかからの入力信号の値が上記第１の入力値から上記第２の入力値に変化した場合に、当該入力機器に対応付けられている出力機器の動作状態を安全状態に遷移させるための安全プログラムを生成する生成部とを備える。
【０００９】
好ましくは、上記情報処理装置は、上記入出力設定の設定操作を受付けるためのユーザインターフェイスを提供する提供部をさらに備える。
【００１０】
好ましくは、上記ユーザインターフェイスは、上記入出力設定に規定されている各入力機器について、当該入力機器からの入力信号の変化に応答する出力機器の設定を受付けるように構成されている。
【００１１】
好ましくは、上記ユーザインターフェイスは、マトリクス状に表示された設定領域群を含む。上記設定領域群の行方向および列方向の一方には、上記入出力設定に規定されている各入力機器が関連付けられている。上記設定領域群の行方向および列方向の他方には、上記入出力設定に規定されている各出力機器が関連付けられている。上記設定領域群に含まれる各設定領域は、当該設定領域に関連付けられている出力機器が当該設定領域に関連付けられている入力機器からの入力信号の値の変化に応答するか否かを示す設定を受付ける。
【００１２】
好ましくは、上記ユーザインターフェイスは、予め定められた複数の入力機器の中から上記入出力設定に含める入力機器を選択可能に構成されている。
【００１３】
好ましくは、上記ユーザインターフェイスは、予め定められた複数の出力機器の中から上記入出力設定に含める出力機器を選択可能に構成されている。
【００１４】
好ましくは、上記ユーザインターフェイスは、上記入出力設定に規定されている各入力機器について、入力機器から出力される入力信号を二重化するか否かを示す設定をさらに受付けるように構成されている。
【００１５】
好ましくは、上記ユーザインターフェイスは、メンテナンスモードを使用するか否かについての設定を受付け可能に構成されており、上記メンテナンスモードの使用が有効に設定されたことに基づいて、上記設定領域群とは異なる他の上記設定領域群をさらに表示する。
【００１６】
好ましくは、上記ユーザインターフェイスは、他の上記設定領域群の表示時に、上記設定領域群に設定されている設定値を初期値として他の上記設定領域群に反映する。
【００１７】
好ましくは、上記生成部は、上記設定領域群に規定されている入力機器のいずれかからの入力信号の値が上記第１の入力値から上記第２の入力値に変化した場合に、当該入力信号の値の変化に応答するように設定されている出力機器の動作状態を安全状態に遷移させるための第１制御命令と、他の上記設定領域群に規定されている入力機器のいずれかからの入力信号の値が上記第１の入力値から上記第２の入力値に変化した場合に、当該入力信号の値の変化に応答するように設定されている出力機器の動作状態を安全状態に遷移させるための第２制御命令とを上記安全プログラムに含める。
【００１８】
他の局面に従うと、予め定められた条件が成立すると安全が保たれるように出力機器を動作させるための安全プログラムを生成するための情報処理方法は、入力機器からの入力信号の値が初期値である第１の入力値から第２の入力値に変化したことに対して応答する出力機器を入力機器ごとに対応付けている入出力設定を取得するステップと、上記入出力設定に規定されている入力機器のいずれかからの入力信号の値が上記第１の入力値から上記第２の入力値に変化した場合に、当該入力機器に対応付けられている出力機器の動作状態を安全状態に遷移させるための安全プログラムを生成するステップとを備える。
【００１９】
他の局面に従うと、予め定められた条件が成立すると安全が保たれるように出力機器を動作させるための安全プログラムを生成するための情報処理プログラムは、情報処理装置に、入力機器からの入力信号の値が初期値である第１の入力値から第２の入力値に変化したことに対して応答する出力機器を入力機器ごとに対応付けている入出力設定を取得するステップと、上記入出力設定に規定されている入力機器のいずれかからの入力信号の値が上記第１の入力値から上記第２の入力値に変化した場合に、当該入力機器に対応付けられている出力機器の動作状態を安全状態に遷移させるための安全プログラムを生成するステップとを実行させる。
【発明の効果】
【００２０】
ある局面において、入力機器と出力機器との間の入出力関係に関して安全プログラムの設計を容易にすることができる。
【図面の簡単な説明】
【００２１】
【図１】第１の実施の形態に従う情報処理装置の概要を機能的な面から説明する模式図である。
【図２】第１の実施の形態に従う安全システムのシステム構成の一例を示す図である。
【図３】第１の実施の形態に従う安全コントローラの装置構成の一例を示す模式図である。
【図４】第１の実施の形態に従う情報処理装置のハードウェア構成の一例を示す模式図である。
【図５】第１の実施の形態に従う情報処理装置の機能構成の一例を示す図である。
【図６】安全プログラムの設計画面の一例であるユーザインターフェイスを示す図である。
【図７】図６に示される設定内容に基づいて生成された入出力設定の一例を示す図である。
【図８】生成部によって生成される安全プログラムの概略を示す図である。
【図９】入力機器設定のデータ構造の一例を示す図である。
【図１０】入力機器設定から取得された入力ＦＢ（ＦＢ：Function Block）の一例を表わす図である。
【図１１】入力機器設定から取得された入力ＦＢの他の例を表わす図である。
【図１２】安全プログラムに含まれる非常停止ＦＢに設定されるリセット種別を説明するための図である。
【図１３】中間ＦＢ生成部によって生成された中間ＦＢの１つを表わす図である。
【図１４】出力機器設定のデータ構造の一例を示す図である。
【図１５】出力機器設定から取得された出力ＦＢの１つを表わす図である。
【図１６】安全プログラムのフローを示す図である。
【図１７】第２の実施の形態に従うユーザインターフェイスの一例を示す図である。
【図１８】中間ＦＢ生成部によって生成された中間ＦＢの１つを表わす図である。
【発明を実施するための形態】
【００２２】
以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。なお、以下で説明される各実施の形態および各変形例は、適宜選択的に組み合わされてもよい。
【００２３】
［第１の実施の形態］
＜Ａ．情報処理装置２００の処理概要＞
まず、本実施の形態に従う情報処理装置２００の概要について説明する。情報処理装置２００は、安全コントローラで実行される安全プログラムを生成する機能を有する。
【００２４】
本明細書において、「安全プログラム」は、予め定められた条件（安全条件）が成立すると出力機器を安全が保たれるように動作させるためのプログラムであり、安全コントローラの処理を定義する命令群を意味する。より具体的には、安全プログラムは、１または複数の入力信号に対して、１または複数の出力信号の値を決定するための命令の組み合わせを含む。
【００２５】
安全プログラムは、安全コントローラの処理を定義するものであれば、どのような実体であってもよい。すなわち、安全プログラムは、１または複数のソースコードとして存在してもよいし、１または複数のオブジェクトコードとして存在してもよいし、安全コントローラのプロセッサで実行可能な形式（実行形式）であってもよい。
【００２６】
また、安全プログラムは、ファンクションブロックダイアグラム（ＦＢＤ：Function Block Diagram）を用いて記述されていてもよい。あるいは、ラダーダイアグラム（ＬＤ：Ladder Diagram）、命令リスト（ＩＬ：Instruction List）、構造化テキスト（ＳＴ：Structured Text）、および、シーケンシャルファンクションチャート（ＳＦＣ：Sequential Function Chart）のいずれか、あるいは、これらの組み合わせで記述されてもよい。さらにあるいは、ＪａｖａＳｃｒｉｐｔ（登録商標）やＣ言語のような汎用的なプログラミング言語で記述されていてもよい。
【００２７】
なお、ＰＬＣプログラミングの国際基準ＩＥＣ  ６１１３１−３（ＪＩＳ  Ｂ  ３５０３）の普及活動と、ベンダに依存しない標準ファンクションブロックダイアグラムの仕様策定および認定を行う第三者機関であるＰＬＣｏｐｅｎ（登録商標）が、ｔｅｃｈｎｉｃａｌ  ｃｏｍｍｉｔｔｅｅ  ５において公開している規約に準拠して安全プログラムを作成することが好ましい。
【００２８】
以下の説明では、変数プログラムとして記述された安全プログラムについて例示する。そのため、実際に安全コントローラと安全コンポーネントなどとの間で遣り取りされる信号（典型的には、入力信号および出力信号）を安全プログラム内では、それぞれ「変数」として取り扱うことになる。これらの現実の信号と安全プログラム内の対応する変数とは本質的に同じものであるため、以下の説明では、これらを「信号」と総称することもある。すなわち、本明細書において、「信号」は、現実に遣り取りされる電気信号に加えて、安全コントローラ上でその電気信号に割り当てられた値を参照する変数を含み得る。
【００２９】
図１は、本実施の形態に従う情報処理装置２００の概要を機能的な面から説明する模式図である。図１を参照して、情報処理装置２００は、その主たる機能として、安全プログラム１０の生成機能４を含む。
【００３０】
安全プログラムは、入出力設定２３０に基づいて生成される。入出力設定２３０は、各入力機器からの入力信号と各出力機器へ出力する出力信号との間の入出力関係を規定している。典型的には、正常時における入力信号および出力信号の値は、「ＴＲＵＥ」（「１」または「真」）で示される。すなわち、何らかの条件にて安全動作を行う場合には、当該安全動作のトリガとなる入力信号の値が「ＦＡＬＳＥ」（「０」または「偽」）に変化することで、出力値も「ＦＡＬＳＥ」となる。「ＦＡＬＳＥ」の出力値によって、対象の装置が安全動作を行う。
【００３１】
入出力設定２３０においては、入力機器からの入力信号の値が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化したときに安全状態に遷移させる出力機器が「ＦＡＬＳＥ」（「０」または「偽」）で示されており、動作状態を維持する出力機器が「ＴＲＵＥ」（「１」または「真」）で示されている。ここでいう安全状態とは、出力機器を安全に停止する状態のことをいう。
【００３２】
生成機能４は、入出力設定２３０に基づいて、安全プログラム１０を生成する。安全プログラム１０は、入出力設定２３０に規定されている入力機器のいずれかからの入力信号の値が「ＴＲＵＥ」（第１の入力値）から「ＦＡＬＳＥ」（第２の入力値）に変化した場合に、当該変化に応答するように入出力設定２３０に規定されている出力機器の動作状態を安全状態に遷移させる。一例として、入力信号の変化に応答する出力機器には「０」が関連付けられ、入力信号の変化に応答しない出力機器には「１」が関連付けられる。図１の例では、入力機器「Ａ」からの入力信号の値が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化したときに、安全プログラム１０は、出力機器「α」については動作状態を維持し、出力機器「β」については動作状態を停止状態に遷移させる。また、入力機器「Ｂ」からの入力信号の値が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化したときに、安全プログラム１０は、出力機器「α」については動作状態を停止状態に遷移させ、出力機器「β」については動作状態を維持する。
【００３３】
このように、入力機器と出力機器との間の入出力関係が規定された入出力設定２３０が与えられると、生成機能４は、当該入出力関係を実現するための信号処理を行うような安全プログラム１０を生成する。このような生成機能４が実装されることで、入力機器と出力機器との間の入出力関係に関して安全プログラムの設計が容易になる。
【００３４】
なお、入出力設定２３０は、後述するように情報処理装置２００によって提供されるユーザインターフェイス上で設定されてもよいが、他の情報処理装置で設定された上で情報処理装置２００に送られてもよい。すなわち、情報処理装置２００としては、入力機器と出力機器との間の入出力関係が規定された入出力設定２３０から安全プログラム１０を生成する機能が少なくとも搭載されていればよい。
【００３５】
＜Ｂ．安全システム１のシステム構成＞
次に、本実施の形態に従う安全システム１のシステム構成について説明する。図２は、安全システム１のシステム構成の一例を示す図である。
【００３６】
図２を参照して、安全システム１は、主として、安全コントローラ１００と、情報処理装置２００と、設備や機械などを制御する制御装置３００とを含む。
【００３７】
制御装置３００は、典型的には、ＰＬＣ（プログラマブルコントローラ）などで構成され、制御対象から取得された入力データに関して、予め定められたユーザプログラムを実行し、それによって算出される出力データに応じて制御対象に指令を与える。図２に示す制御対象として、モータ５１０およびモータ５１０を駆動するドライバ５１２を例示する。制御装置３００は、ユーザプログラムに従って、ある駆動開始条件が成立するとモータ５１０を回転駆動させるために、ドライバ５１２に駆動指令を出力する。また、ある駆動停止条件が成立するとモータ５１０の回転駆動を停止させるために、ドライバ５１２への駆動指令の出力を停止する。
【００３８】
このような制御装置３００での制御対象の制御に加えて、典型的には、制御対象に関連する作業者などの安全を確保するなどのために、安全コントローラ１００がさらに配置される。安全コントローラ１００は、安全機器である入力機器４００（セーフティセンサ、セーフティドアスイッチ、セーフティリミットスイッチ、非常停止スイッチ、セーフティスイッチなど）からの入力信号などの関連付けられる、予め定められた条件（安全条件）が成立すると、安全動作を遂行する。
【００３９】
図２に示す例では、ドライバ５１２への電力供給ライン上に出力機器の一例であるセーフティリレー５１４が配置されている。ここでいう出力機器とは、入力機器４００に対する操作に連動して駆動される機器のこという。セーフティリレー５１４は、たとえば、電路の遮断するためのコンタクタを駆動する。また、モータ５１０により駆動される装置の周辺に危険エリアが設定されており、その危険エリアの周辺に入力機器４００が配置されている。入力機器４００は、たとえば、人の存在や侵入を検知する検知機器、非常時の操作を受付ける入力機器などを含む。セーフティリレー５１４は、入力機器４００からの入力信号を受けることで駆動する。
【００４０】
一例として、非常停止スイッチとしての入力機器４００が作業者による非常停止操作を受けると、安全コントローラ１００は、非常停止スイッチからの停止信号に応答して、対応するセーフティリレー５１４に制御信号を出力する。セーフティリレー５１４は、安全コントローラ１００からの制御信号に応答して動作し、モータ５１０を駆動するドライバ５１２への電力供給を遮断する。その結果、モータ５１０が強制的に停止される。このようなモータ５１０の強制的な停止によって、作業者の安全を確保することができる。
【００４１】
他の例として、セーフティセンサとしての入力機器４００は、作業者が危険エリアへ進入したことを検知する。作業者が危険エリアへ進入すると、セーフティセンサによりその作業者の進入が検知される。安全コントローラ１００は、セーフティセンサからの検知信号に応答して、対応するセーフティリレー５１４に制御信号を出力する。セーフティリレー５１４は、安全コントローラ１００からの制御信号に応答して動作し、モータ５１０を駆動するドライバ５１２への電力供給を遮断する。その結果、モータ５１０が強制的に停止される。このようなモータ５１０の強制的な停止によって、危険エリアへ進入した作業者の安全を確保することができる。
【００４２】
図２に示す構成例においては、安全コントローラ１００および制御装置３００は、制御系ネットワークＮＷ１を介して接続されており、互いが内部的に保持するデータを遣り取りすることができる。また、安全コントローラ１００および制御装置３００は、情報系ネットワークＮＷ２を介して、情報処理装置２００と接続されている。
【００４３】
情報処理装置２００は、安全コントローラ１００または制御装置３００で実行されるプログラムの開発、プログラムの実行状態の確認、プログラムの変更などの機能を提供するためのサポートツールである。情報処理装置２００は、たとえば、ＰＣ（Personal Computer）、タブレット端末、スマートフォン、または、その他の通信端末である。
【００４４】
＜Ｃ．装置構成＞
次に、図３および図４を参照して、本実施の形態に従う安全システム１を構成する各装置の装置構成について説明する。
【００４５】
（ｃ１：安全コントローラ１００）
図３は、本実施の形態に従う安全コントローラ１００の装置構成の一例を示す模式図である。図３を参照して、安全コントローラ１００は、プロセッサ１０２と、主メモリ１０４と、フラッシュメモリ１０６とを含む演算処理部１０８、および、各種インターフェイスからなる。
【００４６】
演算処理部１０８において、プロセッサ１０２は、フラッシュメモリ１０６に格納されているシステムプログラムおよび安全プログラムなどを主メモリ１０４に展開して実行することで、制御対象に応じた機能安全を実現する。
【００４７】
安全コントローラ１００は、インターフェイスとして、制御系ネットワークインターフェイス１１０と、情報系ネットワークインターフェイス１１２と、フィールドバスインターフェイス１１４と、メモリカードインターフェイス１１６と、ローカル通信インターフェイス１２０と、内部バスインターフェイス１２２とを含む。
【００４８】
制御系ネットワークインターフェイス１１０は、制御系ネットワークＮＷ１（図２参照）を介して他の装置との通信を仲介する。制御系ネットワークＮＷ１としては、たとえば、ＥｔｈｅｒＣＡＴ（登録商標）などの定時性が保証されるネットワークプロトコルが好ましい。
【００４９】
情報系ネットワークインターフェイス１１２は、情報系ネットワークＮＷ２（図２参照）を介して他の装置との通信を仲介する。情報系ネットワークＮＷ２としては、たとえば、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）などの定時性が保証されるネットワークプロトコルが好ましい。
【００５０】
フィールドバスインターフェイス１１４は、図示しないフィールドバスを介して接続される入出力ユニットとの通信を仲介する。フィールドバスとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、ＤｅｖｉｃｅＮｅｔ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などの定時性が保証されるネットワークプロトコルが好ましい。
【００５１】
メモリカードインターフェイス１１６は、メモリカード１１８を装着可能に構成されており、メモリカード１１８からのデータ読出しおよびメモリカード１１８へのデータ書込みを行う。
【００５２】
ローカル通信インターフェイス１２０は、情報処理装置２００または他の装置と直接接続するインターフェイスであり、たとえば、ＵＳＢ（Universal Serial Bus）などが用いられる。
【００５３】
内部バスインターフェイス１２２は、内部バスを介して安全コントローラ１００に直接装着される入出力ユニットとの間の通信を仲介する。
【００５４】
（ｃ２：情報処理装置２００）
次に、情報処理装置２００のハードウェア構成について例示する。図４は、本実施の形態に従う情報処理装置２００のハードウェア構成の一例を示す模式図である。
【００５５】
情報処理装置２００は、ノートＰＣ、タブレット端末、スマートフォンなどの携帯端末であってもよいし、デスクトップ型のＰＣなどの非携帯端末であってもよい。
【００５６】
情報処理装置２００は、主たるコンポーネントとして、オペレーティングシステム（ＯＳ：Operating System）および後述するような各種プログラムを実行するプロセッサ２０２と、プロセッサ２０２でのプログラム実行に必要なデータを格納するための作業領域を提供するメモリ２０４と、キーボードやマウスなどのユーザ操作を受付ける操作ユニット２０６と、ディスプレイ、各種インジケータ、プリンタなどの処理結果を出力する出力ユニット２０８と、外部ネットワークと通信するためのネットワークインターフェイス（Ｉ／Ｆ：Inter Face）２１０と、光学ドライブ２１２と、安全コントローラなどと通信するためのローカル通信インターフェイス（Ｉ／Ｆ）２１６と、補助記憶装置２２０とを含む。これらのコンポーネントは、内部バス２１８などを介してデータ通信可能に接続される。
【００５７】
情報処理装置２００は、光学ドライブ２１２を有しており、コンピュータ読取可能なプログラムを非一過的に格納する光学記録媒体（たとえば、ＤＶＤ（Digital Versatile Disc）など）のコンピュータ読取可能な記録媒体２１４から、各種プログラムを読取って補助記憶装置２２０などにインストールする。本実施の形態に従う安全プログラムの生成処理は、安全コントローラに対する設定、プログラミング、デバッグなどの機能を提供する開発環境プログラムの一部として提供されてもよい。
【００５８】
情報処理装置２００で実行される各種プログラムは、コンピュータ読取可能な記録媒体２１４を介してインストールされてもよいが、ネットワーク上のサーバ装置などからダウンロードする形でインストールするようにしてもよい。また、本実施の形態に従う安全プログラムの生成機能に係るプログラムは、ＯＳが提供するモジュールの一部を利用する形で実現される場合もある。このような場合には、本実施の形態に従う安全プログラムの生成機能の実現に必要な全てのソフトウェアモジュールが配布されるのではなく、その一部のみが配布されることになる。このような場合であっても、本発明の技術的範囲に包含されることは自明である。また、本実施の形態に従う安全プログラムの生成機能が、他のプログラムまたはソフトウェアの一部として実装されてもよい。
【００５９】
補助記憶装置２２０は、たとえば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Flash Solid State Drive）などで構成され、プロセッサ２０２で実行されるプログラムを格納する。具体的には、補助記憶装置２２０は、後述するような処理を提供するプログラムとして、安全プログラム１０（ソースプログラム）からプロセッサ２０２で実行可能なコード（実行モジュール）を生成する実行プログラム２２２と、予め用意されている複数のファンクションブロック２２４とを含む。補助記憶装置２２０には、安全プログラム１０に関連付けられた各種設定２２６が格納される。
【００６０】
また、補助記憶装置２２０は、入力機器からの入力信号に応答して出力機器を安全に動作させるための安全プログラム１０と、後述の入力機器設定２２７と、後述の出力機器設定２２８と、後述のリセット機器設定２２９と、上述の入出力設定２３０とを保持する。
【００６１】
図４には、汎用コンピュータがプログラムを実行することで、本実施の形態に従う安全プログラムの生成機能を実現するが、このような構成に代えて、その全部または一部をハードワイヤード回路で実装してもよい。たとえば、プロセッサ２０２が上述の各種プログラムを実行することで提供される機能をＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field-Programmable Gate Array）を用いて実装してもよい。
【００６２】
（ｃ３：制御装置３００）
本実施の形態に従う制御装置３００は、図３に示す安全コントローラ１００と同様の装置構成を有しているので、詳細な説明は繰り返さない。なお、安全コントローラ１００は、プロセッサなどの二重化やセーフティ用のモジュールが採用されているが、一般的には、制御装置３００にはそのような構成は採用されていない。また、制御装置３００では、上述の安全プログラムではなく、ユーザプログラムが実行される。
【００６３】
＜Ｄ．情報処理装置２００の機能構成＞
図５〜図１５を参照して、情報処理装置２００の機能について説明する。図５は、情報処理装置２００の機能構成の一例を示す図である。
【００６４】
図５に示されるように、情報処理装置２００は、主要なハードウェア構成として、プロセッサ２０２と、出力ユニット２０８（図４参照）の一例であるディスプレイ２０８Ａと、補助記憶装置２２０とを含む。プロセッサ２０２は、機能構成として、提供部２８２と、取得部２８４と、生成部２８６とを含む。生成部２８６は、入力ＦＢ生成部２８８と、中間ＦＢ生成部２９０と、出力ＦＢ生成部２９２とで構成される。
【００６５】
以下では、これらの機能構成について順に説明する。
（Ｄ１．提供部２８２）
提供部２８２は、安全プログラム１０を設計するためのアプリケーションが起動されたことに基づいて、安全プログラム１０の設計画面をディスプレイ２０８Ａに表示する。図６は、安全プログラム１０の設計画面の一例であるユーザインターフェイス６００を示す図である。
【００６６】
ユーザインターフェイス６００は、入力機器からの入力信号（入力変数）に係る設定値を表示する入力設定表示エリア６１０と、出力機器への出力信号（出力変数）に係る設定値を表示する出力設定表示エリア６２０と、入力変数と出力変数との対応関係を設定する入出力関係設定エリア６３０とを含む。
【００６７】
入力設定表示エリア６１０では、対象の安全プログラムに含まれる入力変数に係る情報の登録および表示が可能になっている。出力設定表示エリア６２０では、対象の安全プログラムに含まれる出力変数に係る情報の登録および表示が可能になっている。入力設定表示エリア６１０および出力設定表示エリア６２０での変数登録については、変数登録ボタン６０６が選択されることで有効化される。
【００６８】
入力設定表示エリア６１０は、予め設定されている入力変数の変数名を表示する変数名表示欄６１２と、対応する入力変数についてのコメントを表示するコメント表示欄６１４と、対応する入力変数についてのリセット種別を表示するリセット種別表示欄６１６と、対応する入力変数についての入力タイプを表示する入力タイプ表示欄６１８とを含む。入力タイプ表示欄６１８における入力タイプの指定により、入力機器からの入力信号を二重化して受けることを有効にするか否かが設定される。すなわち、入力タイプ表示欄６１８において同一の入力機器に対して２つの入力変数を割り当てるか否かが設定される。
【００６９】
出力設定表示エリア６２０は、予め設定されている出力変数の変数名を表示する変数名表示欄６２２と、対応する出力変数についてのコメントを表示するコメント表示欄６２４とを含む。
【００７０】
入出力関係設定エリア６３０は、入力機器と出力機器との間の入出力関係の設定を受付ける。入出力関係設定エリア６３０は、対象となる入力変数を表示する入力変数表示エリア６３４と、対応する入力変数についてのコメントを表示するコメント表示欄６３６と、対応する入力変数についてのリセット種別を表示するリセット種別表示欄６３８と、入力機器と出力機器との間の入出力関係を設定するための設定領域群６４０とを含む。
【００７１】
設定領域群６４０における各設定領域は、マトリクス状に配置されている。設定領域群６４０における各設定領域は、入力設定表示エリア６１０において登録された入力機器と、出力設定表示エリア６２０において登録された出力機器との組み合わせの数だけ用意されている。設定領域群６４０の列方向には、入力設定表示エリア６１０に示される入力機器（入力変数）が関連付けられている。設定領域群６４０の行方向には、出力設定表示エリア６２０に示される出力機器（出力変数）が関連付けられている。設定領域群６４０を構成する各設定領域は、当該設定領域に関連付けられている出力機器が当該設定領域に関連付けられている入力機器からの入力信号の値の変化に応答するか否かを示す設定を受付ける。すなわち、設定領域群６４０は、入力機器からの入力信号の変化に応答する出力機器の設定を各入力機器について受付けるように構成されている。
【００７２】
設定領域群６４０は、１つの入力変数に対して、対象となる出力変数の数だけ出力値が設定されるようになっている。図６に示すユーザインターフェイス６００の例では、出力設定表示エリア６２０に表示されている４つの出力変数に対応して、４つの欄が設けられており、各欄に入出力設定を設定できるようになっている。ユーザは、事前の安全設計に基づいて、設定領域群６４０にしかるべき値を設定することになる。なお、図６の設定領域群６４０において、「０」は、対応の入力変数が「ＦＡＬＳＥ」になった場合に、対応の出力変数も「ＦＡＬＳＥ」へ変化することを意味し、「１」は、対応の入力変数が「ＦＡＬＳＥ」になった場合であっても、対応の出力変数が「ＴＲＵＥ」を維持することを意味する。
【００７３】
たとえば、ある非常停止ボタンＡが危険エリアＡに配置されている装置Ａの安全動作をトリガするものであり場合には、当該非常停止ボタンＡからの入力信号に対応する入力変数に関連付けて、危険エリアＡにある装置Ａの非常停止を司る安全リレーへの指令を示す出力変数については、安全動作を示す「ＦＡＬＳＥ」、つまり「０」が入出力設定として設定される。一方で、非常停止ボタンＡは危険エリアＢに向けられるものではなく、危険エリアＢには別の非常停止ボタンＢが設けられる場合には、非常停止ボタンＡに対する操作によって、危険エリアＢの装置Ｂが停止することは予定されていない。そのため、当該非常停止ボタンＡからの入力信号に対応する入力変数に関連付けて、危険エリアＢにある装置Ｂの非常停止を司る安全リレーへの指令を示す出力変数については、安全動作しないことを示す「ＴＲＵＥ」、つまり「１」が入出力設定として設定される。このように、設定領域群６４０において、入力変数の各々とそれぞれの出力変数との間の関係が設定される。
【００７４】
ＯＫボタン６５１が押下されると、入力設定表示エリア６１０に登録された入力機器に関する情報と、出力設定表示エリア６２０に登録された出力機器に関する情報と、入出力関係設定エリア６３０に設定された設定内容とが入出力設定２３０（図４参照）に反映される。同時に、リセット種別表示欄６３８に設定された設定内容がリセット機器設定２２９に反映される。キャンセルボタン６５２が押下されると、ユーザインターフェイス６００に設定された設定内容が図７に示される入出力設定２３０に反映されずに、ユーザインターフェイス６００が閉じされる。
【００７５】
図７は、図６に示される設定内容に基づいて生成された入出力設定２３０の一例を示す図である。図７に示されるように、入出力設定２３０は、入力機器情報２３０Ａと、二重化情報２３０Ｂと、出力機器情報２３０Ｃと、入出力情報２３０Ｄとを含む。
【００７６】
入力機器情報２３０Ａにおいて、入力設定表示エリア６１０に登録された入力変数が割り当てられている入力機器が反映される。二重化情報２３０Ｂにおいて、入力タイプ表示欄６１８における設定内容が反映される。出力機器情報２３０Ｃにおいて、出力設定表示エリア６２０に登録された出力変数が割り当てられている出力機器が反映される。入出力情報２３０Ｄにおいて、設定領域群６４０において設定された入出力関係が反映される。
【００７７】
（Ｄ２．取得部２８４）
次に、図５に示される取得部２８４の機能について説明する。
【００７８】
取得部２８４は、安全プログラム１０の生成命令を受付けたことに基づいて、補助記憶装置に記憶されている入出力設定２３０を取得する。安全プログラム１０の生成命令は、たとえば、ユーザインターフェイス６００上のＯＫボタン６５１が押下されたタイミングで発せられてもよいし、その他のユーザ操作に基づいて発せられてもよい。
【００７９】
取得された入出力設定２３０は、入力ＦＢ生成部２８８と、中間ＦＢ生成部２９０と、出力ＦＢ生成部２９２とに出力される。
【００８０】
（Ｄ３．生成部２８６）
次に、図８を参照して、図５に示される生成部２８６の機能について説明する。図８は、生成部２８６によって生成される安全プログラム１０の概略を示す図である。
【００８１】
図８に示されるように、生成部２８６は、上述のユーザインターフェイス６００（図６参照）において設定された入出力設定２３０（図７参照）に基づいて、入力機器からの入力信号を入力として受ける入力ＦＢと、入力ＦＢからの入力信号に対して論理演算を行う中間ＦＢと、中間ＦＢからの中間信号に対して所定の演算を行い、演算結果として対応する出力機器に出力信号を出力する出力ＦＢとを生成する。生成された入力ＦＢ、中間ＦＢ、出力ＦＢによって安全プログラム１０が構成される。
【００８２】
より具体的には、生成部２８６は、入出力設定２３０に規定されている各入力機器について入力ＦＢを生成する。図７に示される入出力設定２３０から入力ＦＢが生成される場合、図８に示されるように、６つの入力ＦＢが生成される。各入力ＦＢには、上述のユーザインターフェイス６００（図６参照）の変数名表示欄６１２に設定された入力変数が入力として割り当てられる。その結果、入力変数ＩＮ＿Ａ〜ＩＮ＿Ｆがそれぞれ入力ＦＢに割り当てられる。各入力ＦＢは、割り当てられた入力変数の変化に対して予め定められた演算を実行する。当該演算結果は、出力として割り当てられている第１中間変数ＭＤ１＿Ａ〜ＭＤ１＿Ｆに反映される。
【００８３】
典型的には、正常時における入力変数ＩＮ＿Ａ〜ＩＮ＿Ｆの値は「ＴＲＵＥ」となり、第１中間変数ＭＤ１＿Ａ〜ＭＤ１＿Ｆの値も「ＴＲＵＥ」となる。すなわち、何らかの条件にて安全動作を行う場合には、当該安全動作のトリガとなる入力変数ＩＮ＿Ａ〜ＩＮ＿Ｆの値が「ＦＡＬＳＥ」に変化すると、対応する第１中間変数も「ＦＡＬＳＥ」に変化する。
【００８４】
生成部２８６は、さらに、入出力設定２３０に規定されている入力機器と出力機器との間の入出力関係に基づいて、中間ＦＢを生成する。中間ＦＢは、入出力設定２３０に規定されている各出力機器について生成される。図７に示される入出力設定２３０から中間ＦＢが生成される場合、図８に示されるように、４つの中間ＦＢが生成される。各中間ＦＢには、入力として、第１中間変数ＭＤ１＿Ａ〜ＭＤ１＿Ｆの少なくとも１つが割り当てられる。割り当てられる第１中間変数は、入出力設定２３０に規定されている入出力関係に基づいて決定される。典型的には、入出力設定２３０において「ＦＡＬＳＥ」（すなわち、０）が設定されている入力機器と出力機器との組み合わせについては、接続関係が構築される。
【００８５】
図７の例では、出力機器の一例であるセーフティリレー「１」については全入力機器と接続することが規定されているので、セーフティリレー「１」用の中間ＦＢには、図８に示されるように、第１中間変数ＭＤ１＿Ａ〜ＭＤ１＿Ｆの全てが割り当てられる。
【００８６】
また、図７の例では、出力機器の一例であるセーフティリレー「２」については、「非常停止スイッチ１」と「セーフティライトカーテン１」と「セーフティドア」と接続することが規定されているので、セーフティリレー「２」用の中間ＦＢには、図８に示されるように、第１中間変数ＭＤ１＿Ａ１，ＭＤ１＿Ｃ１，ＭＤ１＿Ｅ１が割り当てられる。
【００８７】
また、図７の例では、出力機器の一例であるセーフティリレー「３」については全入力機器と接続することが規定されているので、セーフティリレー「３」用の中間ＦＢには、図８に示されるように、第１中間変数ＭＤ１＿Ａ〜ＭＤ１＿Ｆの全てが割り当てられる。
【００８８】
また、出力機器の一例であるセーフティリレー「４」については全入力機器と接続することが規定されているので、セーフティリレー「４」用の中間ＦＢには、図８に示されるように、第１中間変数ＭＤ１＿Ａ〜ＭＤ１＿Ｆの全てが割り当てられる。
【００８９】
典型的には、中間ＦＢは、割り当てられた第１中間変数の値についてＡＮＤ演算を実行する。当該演算結果は、各中間ＦＢに出力として割り当てられている第２中間変数ＭＤ２＿Ａ〜ＭＤ２＿Ｄに反映される。一例として、第１中間変数ＭＤ１＿Ａの値が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化した場合には、第２中間変数ＭＤ２＿Ａ〜ＭＤ２＿Ｄの値が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化する。第１中間変数ＭＤ１＿Ｂの値が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化した場合には、第２中間変数ＭＤ２＿Ａ，ＭＤ２＿Ｃ，ＭＤ２＿Ｄの値が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化し、第２中間変数ＭＤ２＿Ｂの値は「ＴＲＵＥ」に維持される。
【００９０】
生成部２８６は、さらに、入出力設定２３０に規定されている各出力機器について出力ＦＢを生成する。図７に示される入出力設定２３０から出力ＦＢが生成される場合、図８に示されるように、４つの出力ＦＢが生成される。各出力ＦＢは、割り当てられた第２中間変数の変化に対して予め定められた演算を実行する。当該演算結果は、各出力ＦＢに出力として割り当てられている出力変数ＯＵＴ＿Ａ〜ＯＵＴ＿Ｄに反映される。典型的には、第２中間変数ＭＤ２＿Ａ〜ＭＤ２＿Ｄの値が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化した場合に、出力変数ＯＵＴ＿Ａ〜ＯＵＴ＿Ｄの値は「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化する。出力変数の値が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化した場合、当該出力変数の出力先の出力機器の動作状態が安全状態に遷移する。出力変数の値が「ＴＲＵＥ」である場合には、当該出力変数の出力先の出力機器の動作状態が維持される。
【００９１】
（Ｄ４．入力ＦＢ生成部２８８）
上述のように生成部２８６は、入出力設定２３０に基づいて、入力ＦＢと、中間ＦＢと、出力ＦＢとを生成する。入力ＦＢは、図５に示される入力ＦＢ生成部２８８によって生成される。以下では、図９〜図１１を参照して、入力ＦＢ生成部２８８の機能について説明する。
【００９２】
入力ＦＢ生成部２８８は、図９に示される入力機器設定２２７を参照して、入出力設定２３０に規定されている各入力機器に対応する入力ＦＢを特定し、当該入力ＦＢを安全プログラム１０に含める。
【００９３】
図９は、入力機器設定２２７のデータ構造の一例を示す図である。入力機器設定２２７において、各入力機器について使用されるＦＢが一意に関連付けられている。入力ＦＢ生成部２８８は、入力機器設定２２７に規定されている入力機器の中から、入出力設定２３０（図７参照）において設定された入力機器に一致するものを特定し、当該入力機器に関連付けられている入力ＦＢを取得する。
【００９４】
図１０は、入力機器設定２２７から取得された入力ＦＢの一例を表わす図である。図１０には、取得された入力ＦＢの１つとして非常停止ＦＢ１２が示されている。非常停止ＦＢ１２は、非常停止ボタンからの入力信号を処理する論理である。図１１は、入力機器設定２２７から取得された入力ＦＢの他の例を表わす図である。図１１には、取得された入力ＦＢの１つとして非常停止ＦＢ１４が示されている。非常停止ＦＢ１４は、ライトカーテンからの入力信号を処理するための論理である。
【００９５】
非常停止ＦＢ１２，１４の各々は、その入力として、ファンクションブロックの処理の有効／無効を設定する「Ａｃｔｉｖａｔｅ」と、非常停止に係る入力機器から出力される信号が入力される「Ｓ＿ＥＳｔｏｐＩｎ」と、リセット後のプログラム実行を開始するか否かを設定する信号が入力される「Ｓ＿ＳｔａｒｔＲｅｓｅｔ」と、安全動作後のリセット種別を設定する信号が入力される「Ｓ＿ＡｕｔｏＲｅｓｅｔ」と、安全動作後の動作をリセットする信号が入力される「Ｒｅｓｅｔ」との、合計５つを有している。
【００９６】
また、非常停止ＦＢ１２，１４の各々は、その出力として、ファンクションブロックが運転状態であるか否か示す信号を出力する「Ｒｅａｄｙ」と、安全動作を指示する信号を出力する「Ｓ＿ＥＳｔｏｐＯｕｔ」と、何らかのエラーの発生を示す信号を出力する「Ｅｒｒｏｒ」と、発生したエラーの内容に対応するコードを出力する「ＤｉａｇＣｏｄｅ」との、合計４つを有している。
【００９７】
本実施の形態において、安全プログラム１０では、正常時における入力値および出力値を「ＴＲＵＥ」（「１」または「真」）とする。すなわち、何らかの条件にて安全動作を行う場合には、当該安全動作のトリガとなる入力値が「ＦＡＬＳＥ（「０」または「偽」）」に変化することで、出力値も「ＦＡＬＳＥ」となり、「ＦＡＬＳＥ」の出力値によって、対象の装置が安全動作を行う。
【００９８】
入力信号および出力信号の初期値として設定される「ＴＲＵＥ」は、安全プログラム１０を実行する安全コントローラに供給される電源が喪失したときと同様のメモリの状態において示される値（すなわち、「ＦＡＬＳＥ」）とは異なる値が用いられる。すなわち、安全コントローラの不揮発性メモリに電荷などが保持されていない状態において示される値とは異なる値を用いることで、ハードウェアの故障などにおいて、安全動作が行われる、いわゆるフェールセーフを実現できる。
【００９９】
なお、正常時および非常時における入力値および出力値に対する値の割り付けは設計事項であり、どのようなものであってもよい。但し、上述したようなフェールセーフの観点などからは、正常時の入力値および出力値を「ＴＲＵＥ」とすることが好ましい。
【０１００】
非常停止ＦＢ１２の入力「Ｓ＿ＥＳｔｏｐＩｎ」には、非常停止ボタンから出力される信号を示す変数「ＥｍｅｒｇｅｎｃｙＳｔｏｐＳｗｉｔｃｈ１」が割り当てられ、入力「Ｒｅｓｅｔ」には、安全コントローラに対するシステムリセットを示す変数「ＲｅｓｅｔＳｗｉｔｃｈ」が割り当てられている。これら割り当ては、上述のユーザインターフェイス６００の入力設定表示エリア６１０に登録された設定内容に基づいて行われる。なお、変数「ＥｍｅｒｇｅｎｃｙＳｔｏｐＳｗｉｔｃｈ１」は、図１０の入力変数ＩＮ＿Ａに対応する。
【０１０１】
非常停止ＦＢ１４の入力「Ｓ＿ＥＳｔｏｐＩｎ」には、ライトカーテンから出力される信号を示す変数「ＬｉｇｈｔＣｕｒｔａｉｎ１」が割り当てられ、入力「Ｒｅｓｅｔ」には、安全コントローラに対するシステムリセットを示す変数「ＲｅｓｅｔＳｗｉｔｃｈ」が割り当てられている。これら割り当ては、上述のユーザインターフェイス６００の入力設定表示エリア６１０に登録された設定内容に基づいて行われる。なお、変数「ＬｉｇｈｔＣｕｒｔａｉｎ１」は、図１０の入力変数ＩＮ＿Ｃに対応する。
【０１０２】
非常停止ＦＢ１２，１４の「Ａｃｔｉｖａｔｅ」にはいずれも「ＴＲＵＥ」、すなわち処理の有効が設定されており、「Ｓ＿ＳｔａｒｔＲｅｓｅｔ」にはいずれも「ＴＲＵＥ」、すなわちリセット後のプログラム実行が設定されており、「Ｓ＿ＡｕｔｏＲｅｓｅｔ」にはいずれも「ＦＡＬＳＥ」、すなわちリセット種別として「マニュアルリセット」が設定されている。これら割り当ては、上述のユーザインターフェイス６００（図６参照）のリセット種別表示欄６１６に登録された設定内容に基づいて行われる。
【０１０３】
「Ｓ＿ＡｕｔｏＲｅｓｅｔ」に対するリセット種別は、上述のユーザインターフェイス６００（図６参照）のリセット種別表示欄６１６において設定される。リセット種別は、「オートリセット」および「マニュアルリセット」を含む。
【０１０４】
以下では、図１２を参照して、「オートリセット」および「マニュアルリセット」について説明する。図１２は、本実施の形態に従う安全プログラム１０に含まれる非常停止ＦＢに設定されるリセット種別を説明するための図である。
【０１０５】
図１２（Ａ）は、リセット種別として「オートリセット」が設定されている場合を示し、図１２（Ｂ）は、リセット種別として「マニュアルリセット」が設定されている場合を示す。
【０１０６】
図１２（Ａ）に示す「オートリセット」では、非常停止ＦＢの入力「Ｓ＿ＥＳｔｏｐＩｎ」が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化すると、非常停止ＦＢの出力「Ｓ＿ＥＳｔｏｐＯｕｔ」が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化する。この「Ｓ＿ＥＳｔｏｐＯｕｔ」の変化によって、安全動作が行われる。その後、非常停止ＦＢの入力「Ｓ＿ＥＳｔｏｐＩｎ」が「ＦＡＬＳＥ」から「ＴＲＵＥ」に復帰すると、リセット動作も併せて実行される。すなわち、非常停止ＦＢの入力「Ｓ＿ＥＳｔｏｐＩｎ」に連動して、非常停止ＦＢの出力「Ｓ＿ＥＳｔｏｐＯｕｔ」も変化することになる。
【０１０７】
図１２（Ｂ）に示す「マニュアルリセット」では、非常停止ＦＢの入力「Ｓ＿ＥＳｔｏｐＩｎ」が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化して、非常停止ＦＢの出力「Ｓ＿ＥＳｔｏｐＯｕｔ」が「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化した後、非常停止ＦＢの入力「Ｓ＿ＥＳｔｏｐＩｎ」が「ＦＡＬＳＥ」から「ＴＲＵＥ」に復帰したとしても、非常停止ＦＢの出力「Ｓ＿ＥＳｔｏｐＯｕｔ」が「ＦＡＬＳＥ」に維持される。この状態において、非常停止ＦＢの入力「Ｒｅｓｅｔ」が「ＦＡＬＳＥ」から「ＴＲＵＥ」に変化することで、はじめて非常停止ＦＢの出力「Ｓ＿ＥＳｔｏｐＯｕｔ」は「ＦＡＬＳＥ」から「ＴＲＵＥ」に変化する。
【０１０８】
「オートリセット」は、たとえば、ライトカーテンなどの安全コンポーネントからの入力信号が「ＦＡＬＳＥ」になっている間だけ安全動作を行うような場合などに好適である。たとえば、人が危険エリアに侵入している間だけ装置を停止させ、それ以外の状態では装置を動作させるような状況に用いることができる。このような「オートリセット」を設定することで、作業者に対する安全を確保しつつ、タクトタイムへの影響を低減できる。
【０１０９】
「マニュアルリセット」は、一般的なリセット種別であり、非常停止ボタンなどの安全コンポーネントが操作されて、安全動作が行われた後、リセットには所定の復帰操作を必要とするような場合に好適である。たとえば、非常停止ボタンが操作されて、装置が作業途中で停止した場合などには、当該装置を初期位置に戻した上で、リセットすることが好ましい。
【０１１０】
このように、リセット種別としては、入力信号の値が「ＦＡＬＳＥ」（第２の入力値）から「ＴＲＵＥ」（第１の入力値）に戻ったときに、対応する出力信号の出力値を連動して元の値に戻すことを示す「オートリセット」（第１の種別）と、予め定められたリセット条件が成立するまでは出力信号の出力値を元の値に戻さないことを示す「マニュアルリセット」（第２の種別）とを含む。
【０１１１】
（Ｄ５．中間ＦＢ生成部２９０）
上述のように生成部２８６は、入出力設定２３０に基づいて、入力ＦＢと、中間ＦＢと、出力ＦＢとを生成する。中間ＦＢは、図５に示される中間ＦＢ生成部２９０によって生成される。以下では、図１３を参照して、中間ＦＢ生成部２９０の機能について説明する。
【０１１２】
中間ＦＢ生成部２９０は、図７に示される入出力設定２３０に規定されている入力機器と出力機器との入出力関係に基づいて、中間ＦＢを生成する。図１３は、中間ＦＢ生成部２９０によって生成された中間ＦＢの１つを表わす図である。図１３には、生成された中間ＦＢの１つとしてＡＮＤ演算子１６Ａ，１６Ｂが示されている。
【０１１３】
ＡＮＤ演算子１６Ａ，１６Ｂは、入出力設定２３０に規定されているセーフティリレー「１」（図７参照）に向けて生成されたものである。上述のように、入出力設定２３０において「ＦＡＬＳＥ」（すなわち、０）が設定されている入力機器と出力機器との組み合わせについては、接続関係が構築される。図７に示されるセーフティリレー「１」については全入力機器について「０」が関連付けられているので、全入力機器と接続するように中間ＦＢが生成される。その結果、ＡＮＤ演算子１６Ａ，１６Ｂには、第１中間変数ＭＤ１＿Ａ〜ＭＤ１＿Ｆが割り当てられる。
【０１１４】
また、図１３に示されるように、中間ＦＢには、出力として、第２中間変数ＭＤ２＿Ａが割り当てられる。第１中間変数ＭＤ１＿Ａ〜ＭＤ１＿Ｅのいずれかが「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化したことに基づいて、第２中間変数ＭＤ２＿Ａの値は、「ＴＲＵＥ」から「ＦＡＬＳＥ」に変化する。第１中間変数ＭＤ１＿Ａ〜ＭＤ１＿Ｅの全てが「ＴＲＵＥ」である場合には、第２中間変数ＭＤ２＿Ａの値は、「ＴＲＵＥ」に維持される。
【０１１５】
なお、図１３には、ＡＮＤ演算子１６Ａ，１６Ｂが２つに分離されている例が示されているが、ＡＮＤ演算子１６Ａ，１６Ｂは、１つのＡＮＤ演算子で表わされてもよい。いずれの場合であっても、演算結果は、同じになる。
【０１１６】
（Ｄ６．出力ＦＢ生成部２９２）
上述のように生成部２８６は、入出力設定２３０に基づいて、入力ＦＢと、中間ＦＢと、出力ＦＢとを生成する。出力ＦＢは、図５に示される出力ＦＢ生成部２９２によって生成される。以下では、図１４および図１５を参照して、出力ＦＢ生成部２９２の機能について説明する。
【０１１７】
出力ＦＢ生成部２９２は、図１４に示される出力機器設定２２８を参照して、入出力設定２３０に規定されている各出力機器に対応する出力ＦＢを特定し、当該出力ＦＢを安全プログラム１０に含める。
【０１１８】
図１４は、出力機器設定２２８のデータ構造の一例を示す図である。出力機器設定２２８において、各出力機器について使用されるＦＢが一意に関連付けられている。出力ＦＢ生成部２９２は、出力機器設定２２８に規定されている出力機器の中から、入出力設定２３０（図７参照）において設定された出力機器に一致するものを特定し、当該出力機器に関連付けられている出力ＦＢを取得する。
【０１１９】
図１５は、出力機器設定２２８から取得された出力ＦＢの１つを表わす図である。図１５には、出力機器設定２２８から取得された出力ＦＢの１つとして出力チェックＦＢ１８が示されている。出力チェックＦＢ１８は、出力機器が指令どおりに機能しているかをチェックする論理である。典型的には、出力チェックＦＢ１８は、ＥＤＭ（External Device Monitoring）ファンクションブロックである。
【０１２０】
出力チェックＦＢ１８は、その入力として、ファンクションブロックの処理の有効／無効を設定する「Ａｃｔｉｖａｔｅ」と、安全コンポーネントの動作指令を示す信号が入力される「Ｓ＿ＯｕｔＣｏｎｔｒｏｌ」と、安全コンポーネントの状態値を示す信号が入力される「Ｓ＿ＥＤＭ１」および「Ｓ＿ＥＤＭ２」と、健全性の監視周期を示す値が入力される「ＭｏｎｉｔｏｒｉｎｇＴｉｍｅ」と、リセット後のプログラム実行を開始するか否かを設定する信号が入力される「Ｓ＿ＳｔａｒｔＲｅｓｅｔ」と、安全動作後の状態値をリセットする信号が入力される「Ｒｅｓｅｔ」との、合計７つを有している。
【０１２１】
また、出力チェックＦＢ１８は、その出力として、ファンクションブロックが運転状態であるか否か示す信号を出力する「Ｒｅａｄｙ」と、安全コンポーネントに対する安全動作を指示する最終的な信号を出力する「Ｓ＿ＥＤＭ＿Ｏｕｔ」と、何らかのエラーの発生を示す信号を出力する「Ｅｒｒｏｒ」と、発生したエラーの内容に対応するコードを出力する「ＤｉａｇＣｏｄｅ」との、合計４つを有している。
【０１２２】
出力チェックＦＢ１８は、「Ｓ＿ＯｕｔＣｏｎｔｒｏｌ」への入力値に応じて、「Ｓ＿ＥＤＭ＿Ｏｕｔ」から対象の安全コンポーネントへ与える指令値を変化させるとともに、安全コンポーネントの状態値が指令値と一致しているか否かを判断する。これによって、たとえば、安全リレーの断線などによる不動、および、溶着などによる常時動作などの不具合を検出することができる。
【０１２３】
＜Ｅ．情報処理装置２００の制御構造＞
図１６を参照して、情報処理装置２００の制御構造について説明する。図１６は、安全プログラムのフローを示す図である。図１６の処理は、情報処理装置２００のプロセッサ２０２がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【０１２４】
ステップＳ１０において、プロセッサ２０２は、安全プログラムの生成指示を受付けたか否かを判断する。プロセッサ２０２は、安全プログラムの生成指示を受付けたと判断した場合（ステップＳ１０においてＹＥＳ）、制御をステップＳ２０に切り替える。そうでない場合には（ステップＳ１０においてＮＯ）、プロセッサ２０２は、ステップＳ１０の処理を再び実行する。
【０１２５】
ステップＳ２０において、プロセッサ２０２は、上述の取得部２８４（図５参照）として、入力機器と出力機器との間の入出力関係を規定した入出力設定２３０（図７参照）を取得する。
【０１２６】
ステップＳ２０の処理に続く、ステップＳ３０〜Ｓ３６の処理とステップＳ４０〜Ｓ４６の処理とは、好ましくは並列に実行される。
【０１２７】
ステップＳ３０において、プロセッサ２０２は、ユーザによって設定された入力機器に関する設定を取得する。典型的には、プロセッサ２０２は、各入力機器の入力端子に関する設定を取得する。
【０１２８】
ステップＳ３２において、プロセッサ２０２は、ステップＳ３０で取得された入力端子の設定を各入力機器に反映する。一例として、プロセッサ２０２は、上述のユーザインターフェイス６００（図６参照）の入力タイプ表示欄６１８において設定された入力の二重化設定や、ユーザインターフェイス６００のリセット種別表示欄６１６に設定されたリセット種別の設定を各入力機器に反映する。
【０１２９】
ステップＳ３４において、プロセッサ２０２は、ステップＳ３２で設定した入力端子を示す入力変数を生成する。あるいは、プロセッサ２０２は、入力端子の位置を示すタグを生成してもよい。
【０１３０】
ステップＳ３６において、プロセッサ２０２は、上述の入力ＦＢ生成部２８８（図５参照）として、ステップＳ２０で取得した入出力設定２３０に規定されている入力機器の種別を取得する。次に、プロセッサ２０２は、入力機器設定２２７（図９参照）を参照して、取得した入力機器の種別に対応付けられている入力ＦＢを特定する。その後、プロセッサ２０２は、特定した入力ＦＢに対してステップＳ３４で生成した入力変数（またはタグ）を割り当てる。
【０１３１】
ステップＳ４０において、プロセッサ２０２は、ユーザによって設定された出力機器に関する設定を取得する。典型的には、プロセッサ２０２は、各出力機器の出力端子に関する設定を取得する。
【０１３２】
ステップＳ４２において、プロセッサ２０２は、ステップＳ４０で取得された出力端子の設定を各出力機器に反映する。プロセッサ２０２は、上述のユーザインターフェイス６００（図６参照）の入力タイプ表示欄６１８において設定された入力の二重化設定や、ユーザインターフェイス６００のリセット種別表示欄６１６に設定されたリセット種別の設定を各出力機器に反映する。
【０１３３】
ステップＳ４４において、プロセッサ２０２は、ステップＳ４２で設定した出力端子を示す出力変数を生成する。あるいは、プロセッサ２０２は、出力端子の位置を示すタグを生成してもよい。
【０１３４】
ステップＳ４６において、プロセッサ２０２は、上述の出力ＦＢ生成部２９２（図５参照）として、ステップＳ２０で取得した入出力設定２３０に規定されている出力機器の種別を取得する。次に、プロセッサ２０２は、出力機器設定２２８（図１４参照）を参照して、取得した出力機器の種別に対応付けられている出力ＦＢを特定する。その後、プロセッサ２０２は、特定した出力ＦＢに対してステップＳ４４で生成した出力変数（またはタグ）を割り当てる。
【０１３５】
ステップＳ５０において、プロセッサ２０２は、各中間ＦＢに対して入力として割り当てられる第１中間変数と、各中間ＦＢに対して出力として割り当てられる第２中間変数とを生成する。
【０１３６】
ステップＳ５２において、プロセッサ２０２は、上述の中間ＦＢ生成部２９０（図５参照）として、中間ＦＢとしてＡＮＤ演算子を生成する。各中間ＦＢには、ステップＳ５０で生成された第１，第２中間変数が割り当てられる。第１，第２中間変数は、ステップＳ２０で取得した入出力設定２３０に規定される入力機器と出力機器との間の入出力関係に従って各中間ＦＢに割り当てられる。典型的には、入出力設定２３０において「ＦＡＬＳＥ」（すなわち、０）と規定されている入力機器と出力機器との組み合わせについては、接続関係が構築されるように、プロセッサ２０２は、第１中間変数と第２中間変数とをＡＮＤ演算子で接続する。
【０１３７】
なお、図１６の例では、入力ＦＢおよび出力ＦＢが並行して生成された後に中間ＦＢが生成される例について説明を行ったが、入力ＦＢ、出力ＦＢ、中間ＦＢの生成順序は、任意である。一例として、プロセッサ２０２は、入力ＦＢ、出力ＦＢ、中間ＦＢの順で各ＦＢを生成してもよいし、中間ＦＢ、入力ＦＢ、出力ＦＢの順で各ＦＢを生成してもよい。
【０１３８】
＜Ｆ．利点＞
以上のようにして、設計者は、入力機器と出力機器との入出力関係をユーザインターフェイス６００（図６参照）上において設定することができる。これにより、入力機器と出力機器との入出力関係が規定された入出力設定２３０（図７参照）が生成される。情報処理装置２００は、入出力設定２３０に基づいて、安全プログラム１０を生成する。当該安全プログラム１０は、入出力設定２３０に規定されている入力機器からのいずれかの入力信号の値が「ＴＲＵＥ」（第１の入力値）から「ＦＡＬＳＥ」（第２の入力値）に変化した場合に、当該変化に応答するように規定されている出力機器の動作状態を安全状態に遷移させる。
【０１３９】
このように、入出力設定２３０が与えられると、情報処理装置２００は、当該入出力関係を実現するための信号処理を行うような安全プログラム１０を生成する。このような生成機能が実装されることで、安全プログラムの設計が入力機器と出力機器との間の入出力関係に関して容易になる。
【０１４０】
［第２の実施の形態］
＜Ａ．概要＞
ユーザは、入出力機器や安全プログラムが正常に動作しているか否かを確認することがある。この場合、入出力機器や安全プログラムに不具合が生じている箇所を早期に特定することが求められる。不具合箇所を早期に特定するためには、ユーザは、通常とは異なる態様で入出力機器を動作させる必要がある。そこで、第２の実施の形態に情報処理装置２００は、通常時における出力機器に対する制御命令を生成するだけでなく、メンテナンス時における出力機器に対する制御命令を生成する。これにより、情報処理装置２００は、様々な状況に対応することができる安全プログラムを生成することができる。
【０１４１】
第２の実施の形態に従う情報処理装置２００のハードウェア構成などその他の点については第１の実施の形態に従う情報処理装置２００と同じであるので、以下ではそれらの説明については繰り返さない。
【０１４２】
＜Ｂ．ユーザインターフェイス＞
上述のように、提供部２８２（図５参照）は、安全プログラム１０を設計するためのユーザインターフェイス６００を提供する。以下では、第２の実施の形態に従うユーザインターフェイス６００について説明する。図１７は、第２の実施の形態に従うユーザインターフェイス６００の一例を示す図である。
【０１４３】
ユーザインターフェイス６００は、安全プログラムの生成条件を設定する生成条件表示エリア６０１と、入力機器からの入力信号（入力変数）に係る設定値を表示する入力設定表示エリア６１０と、出力機器への出力信号（出力変数）に係る設定値を表示する出力設定表示エリア６２０と、入力変数と出力変数との対応関係を設定する入出力関係設定エリア６３０，６６０とを含む。
【０１４４】
生成条件表示エリア６０１は、リセット信号に関する設定を受付ける変数設定欄６０２を含む。変数設定欄６０２に設定された入力変数の状態に応じて、リセット操作が行われているか否かを判断する。図１７の例では、変数設定欄６０２には、変数名として「ＲｅｓｅｔＳｗｉｃｈ」が設定されている。変数「ＲｅｓｅｔＳｗｉｃｈ」は、上述のリセット種別がマニュアルリセットに設定されている入力ＦＢに対して入力として追加される（図１０，図１１参照）。
【０１４５】
生成条件表示エリア６０１は、さらに、マニュアルモードを使用するか否かを受付けるためのチェックボックス６０３を含む。チェックボックス６０３にチェックが入れられていない状態で安全プログラム１０が生成されると、情報処理装置２００は、通常運転モードにおける出力機器に対する制御命令のみを生成する。すなわち、情報処理装置２００は、上述の「第１の実施の形態」で説明した通りに安全プログラム１０を生成する。チェックボックス６０３にチェックが入れられた状態で安全プログラム１０が生成されると、情報処理装置２００は、通常運転モードにおける出力機器に対する制御命令（以下、「通常運転プログラム」ともいう。）を生成するだけでなく、メンテナンスモードにおける出力機器に対する制御命令（以下、「メンテナンスプログラム」ともいう。）を生成する。ここでいうメンテナンスモードとは、安全プログラム１０や入出力機器が正常に動作しているか否かを確認するための動作モードである。
【０１４６】
生成条件表示エリア６０１は、さらに、メンテナンスモード用の変数に関する変数設定欄６０４を含む。より具体的には、ユーザは、入出力機器のメンテナンス時には、メンテナンスモードを有効にするためのキーを使用する場合がある。メンテナンスプログラムは、変数設定欄６０４に設定された変数の値を監視することで、キーがオンされているか否かを判断する。典型的には、キーがオフに設定されているときには、メンテナンスプログラムが実行されない。
【０１４７】
生成条件表示エリア６０１は、さらに、メンテナンスモード用の変数に関する変数設定欄６０５を含む。より具体的には、ユーザは、生成された安全プログラム１０に対して、通常運転モードおよびメンテナンスモードのいずれかをユーザ操作によって有効にすることができる。安全プログラム１０は、変数設定欄６０５に設定された変数の値に基づいて、メンテナンスモードが有効化されているか否かを判断する。一例として、変数設定欄６０５に設定された変数の値が「ＦＡＬＳＥ」（すなわち、０）である場合には、メンテナンスモードが無効化される。
【０１４８】
入力設定表示エリア６１０では、対象の安全プログラムに含まれる入力変数に係る情報の登録および表示が可能になっている。入力設定表示エリア６１０は、上述の入力ＦＢに対する入力変数の変数名を表示する変数名表示欄６１２と、各入力変数についてのコメントを表示するコメント表示欄６１４と、各入力変数についてのリセット種別を表示するリセット種別表示欄６１６と、各入力変数に対応付けられている入力ＦＢ名を表示する入力ＦＢ表示欄６１９とを含む。なお、図１７の例では、変数名表示欄６１２において入力変数が表示されているが、代わりに、入力機器の識別情報（たとえば、入力機器名など）が表示されてもよい。
【０１４９】
出力設定表示エリア６２０では、対象の安全プログラムに含まれる出力変数に係る情報の登録および表示が可能になっている。出力設定表示エリア６２０は、上述の出力ＦＢからの出力変数の変数名を表示する変数名表示欄６２２と、各出力変数についてのコメントを表示するコメント表示欄６２４と、上述のＥＤＭファンクションブロックを使用するか否かについての設定を表示するＥＤＭ設定表示欄６２６とを含む。典型的には、ＥＤＭ設定表示欄６２６に「ＴＲＵＥ」が設定されている場合には、対応する出力変数についてＥＤＭファンクションブロックが生成される。ＥＤＭ設定表示欄６２６において「ＦＡＬＳＥ」が設定されている場合には、対応する出力変数についてＥＤＭファンクションブロックが生成されない。
【０１５０】
入力設定表示エリア６１０における入力変数および出力設定表示エリア６２０における出力変数については、変数登録ボタン６０６が選択されることで実現される。あるいは、当該入力変数および当該出力変数は、入力設定表示エリア６１０および出力設定表示エリア６２０にユーザ操作によって直接入力されてもよいし、プルダウンメニューなどによって予め登録されている候補から選択されてもよい。好ましくは、当該入力変数および当該出力変数は、入力設定表示エリア６１０および出力設定表示エリア６２０にコピー＆ペーストで入力され得る。
【０１５１】
入出力関係設定エリア６３０において、通常運転モードにおける入力機器と出力機器との間の入出力関係が設定される。より具体的には、入出力関係設定エリア６３０は、入力機器を表示する入力機器表示エリア６３３と、各入力機器についてのコメントを表示するコメント表示欄６３６と、入力機器と出力機器との間の入出力関係を設定するための設定領域群６４０とを含む。なお、図１７の例では、入力機器表示エリア６３３において入力機器名が示されているが、上述の図６で説明したように入力機器表示エリア６６３において各入力機器に対応する入力変数が表示されてもよい。この場合、入力変数と入力機器との対応関係が予め設定されており、当該対応関係に基づいて、各入力変数に対応する入力機器が特定される。
【０１５２】
入出力関係設定エリア６６０において、メンテナンスモードにおける入力機器と出力機器との間の入出力関係が設定される。より具体的には、入出力関係設定エリア６６０は、入力機器を表示する入力機器表示エリア６６３と、各入力機器についてのコメントを表示するコメント表示欄６６６と、入力機器と出力機器との間の入出力関係を設定するための設定領域群６７０（他の設定領域群）とを含む。なお、図１７の例では、入力機器表示エリア６６３において入力機器名が示されているが、代わりに、各入力機器に対応する入力変数が表示されてもよい。この場合、入力変数と入力機器との対応関係が予め設定されており、当該対応関係に基づいて、各入力変数に対応する入力機器が特定される。
【０１５３】
好ましくは、ユーザインターフェイス６００、チェックボックス６０３においてメンテナンスモードの使用が有効に設定されたことに基づいて、入出力関係設定エリア６６０を表示する。すなわち、入出力関係設定エリア６６０の表示および非表示は、チェックボックス６０３に対する操作に連動して切り替えられる。より具体的には、チェックボックス６０３にチェックが入れられた場合には、ユーザインターフェイス６００は、メンテナンスモードの使用が有効に設定されたと判断し、入出力関係設定エリア６６０を表示する。チェックボックス６０３からチェックが外された場合には、ユーザインターフェイス６００は、メンテナンスモードの使用が無効に設定されたと判断し、入出力関係設定エリア６６０を非表示にする。
【０１５４】
設定領域群６７０における各設定領域は、マトリクス状に配置される。設定領域群６７０における各設定領域は、入力設定表示エリア６１０において登録された入力機器と、出力設定表示エリア６２０において登録された出力機器との組み合わせの数だけ用意されている。設定領域群６７０の列方向には、入力設定表示エリア６１０に示される入力機器（入力変数）が関連付けられている。設定領域群６７０の行方向には、出力設定表示エリア６２０に示される出力機器（出力変数）が関連付けられている。設定領域群６７０を構成する各設定領域は、当該設定領域に関連付けられている出力機器が当該設定領域に関連付けられている入力機器からの入力信号の値の変化に応答するか否かを示す設定を受付ける。すなわち、設定領域群６７０は、入力機器からの入力信号の変化に応答する出力機器の設定を各入力機器について受付けるように構成されている。
【０１５５】
設定領域群６７０は、１つの入力変数に対して、対象となる出力変数の数だけ出力値が設定されるようになっている。図１７に示すユーザインターフェイス６００の例では、出力設定表示エリア６２０に表示されている４つの出力変数に対応して、４つの欄が設けられており、各欄に入出力設定を設定できるようになっている。ユーザは、メンテナンスモードにおける事前の安全設計に基づいて、設定領域群６７０にしかるべき値を設定することになる。なお、図１７の設定領域群６７０において、「０」は、対応の入力変数が「ＦＡＬＳＥ」になった場合に、対応の出力変数も「ＦＡＬＳＥ」へ変化することを意味し、「１」は、対応の入力変数が「ＦＡＬＳＥ」になった場合であっても、対応の出力変数が「ＴＲＵＥ」を維持することを意味する。
【０１５６】
好ましくは、ユーザインターフェイス６００は、設定領域群６７０の表示時に、設定領域群６４０に設定されている設定値を設定領域群６７０に初期値として反映する。その後、ユーザは、メンテナンスモードにおける入出力関係を設定領域群６７０において設定する。設定領域群６４０における設定値が初期値として設定領域群６７０に反映されることで、メンテナンスモードにおける入出力関係の設定が簡略化される。
【０１５７】
ＯＫボタン６５１が押下されると、情報処理装置２００は、設定領域群６４０において設定された入出力関係に基づいて通常運転モードにおける出力機器に対する第１制御命令（すなわち、通常運転プログラム）を生成し、設定領域群６７０において設定された入出力関係に基づいてメンテナンスモードにおける出力機器に対する第２制御命令（すなわち、メンテナンスプログラム）を生成する。これにより、通常運転プログラムおよびメンテナンスプログラムを含む安全プログラム１０が生成される。
【０１５８】
より具体的には、通常運転プログラムは、設定領域群６４０に規定されている入力機器のいずれかからの入力信号の値が「ＴＲＵＥ」（第１の入力値）から「ＦＡＬＳＥ」（第２の入力値）に変化した場合に、当該入力信号の値の変化に応答するように設定されている出力機器の動作状態を安全状態に遷移させる。メンテナンスプログラムは、設定領域群６４０に規定されている入力機器のいずれかからの入力信号の値が「ＴＲＵＥ」（第１の入力値）から「ＦＡＬＳＥ」（第２の入力値）に変化した場合に、当該入力信号の値の変化に応答するように設定されている出力機器の動作状態を安全状態に遷移させる。
【０１５９】
安全プログラム１０は、通常運転プログラムおよびメンテナンスプログラムのいずれか一方を有効にするための命令を受付け可能に構成されている。通常運転プログラムが有効に設定されている場合には、通常運転プログラムが実行される。メンテナンスプログラムが有効に設定されている場合、メンテナンスプログラムが実行される。
【０１６０】
なお、図１７では、メンテナンスモードに関する入出力関係設定エリア６６０がユーザインターフェイス６００において１つだけ表示されている例が示されているが、入出力関係設定エリア６６０は、ユーザインターフェイス６００において複数表示されてもよい。すなわち、ユーザがメンテナンスモードにおける制御を複数規定する場合には、ユーザインターフェイス６００は、メンテナンスモードの数と同数の入出力関係設定エリア６６０を表示するように構成される。これにより、ユーザは、異なる種類のメンテナンスプログラムを自動で生成することができる。
【０１６１】
＜Ｃ．中間ＦＢ＞
「第１の実施の形態」で説明したように、生成部２８６（図５参照）は、入力機器と出力機器との間の入出力関係に基づいて、入力ＦＢ、中間ＦＢ、および出力ＦＢを生成する。本実施の形態に従う生成部２８６は、メンテナンスモードの使用が有効に設定されている場合には、通常運転モード用の各ＦＢだけでなく、メンテナンスモード用の各ＦＢをさらに生成する。より具体的には、生成部２８６は、通常運転モードに関する設定領域群６４０に設定された入出力関係に基づいて、通常運転モード用の入力ＦＢおよび出力ＦＢを生成するとともに、メンテナンスモードに関する設定領域群６７０に設定された入出力関係に基づいてメンテナンスモード用の入力ＦＢおよび出力ＦＢを生成する。その後、生成部２８６は、各モード用に生成した入力ＦＢおよび出力ＦＢを接続するための中間ＦＢを生成する。
【０１６２】
中間ＦＢは、たとえば、上述の中間ＦＢ生成部２９０（図５参照）によって生成される。以下では、図１８を参照して、中間ＦＢ生成部２９０による中間ＦＢの生成方法について説明する。なお、入力ＦＢおよび出力ＦＢの生成方法については、「第１の実施の形態」で説明した通りであるので、それらの生成方法の説明については繰り返さない。
【０１６３】
図１８は、中間ＦＢ生成部２９０によって生成された中間ＦＢの１つを表わす図である。図１８には、生成された中間ＦＢの一例として中間ＦＢ７００が示されている。中間ＦＢ７００は、出力機器の一例である「ＳａｆｅｔｙＲｅｌａｙ１」（図１７参照）に向けて生成されたものである。
【０１６４】
設定領域群６４０，６７０において「ＦＡＬＳＥ」（すなわち、０）が設定されている入力機器と出力機器との組み合わせについては、接続関係が構築される。一例として、図１７に示される設定領域群６４０の「ＳａｆｅｔｙＲｅｌａｙ１」においては、入力機器「Ｎｏ１」〜「Ｎｏ５」について「０」が関連付けられている。そのため、「ＳａｆｅｔｙＲｅｌａｙ１」および入力機器「Ｎｏ１」〜「Ｎｏ５」については、ＡＮＤ演算子１６Ａによって接続関係が構築される。そのために、ＡＮＤ演算子１６Ａには、入力機器「Ｎｏ１」〜「Ｎｏ５」に対応する第１中間変数ＭＤ１＿Ａ〜ＭＤ１＿Ｅ（図８参照）が入力として割り当てられる。
【０１６５】
同様に、図１７に示される設定領域群６７０の「ＳａｆｅｔｙＲｅｌａｙ１」においては、入力機器「Ｎｏ１」，「Ｎｏ３」について「０」が関連付けられている。そのため、「ＳａｆｅｔｙＲｅｌａｙ１」および入力機器「Ｎｏ１」，「Ｎｏ３」については、ＡＮＤ演算子１７Ａによって接続関係が構築される。そのために、ＡＮＤ演算子１７Ａには、入力機器「Ｎｏ１」，「Ｎｏ３」に対応する第１中間変数ＭＤ１＿Ａ，ＭＤ１＿Ｃ（図８参照）が入力として割り当てられる。
【０１６６】
このように、通常運転モード用にＡＮＤ演算子１６Ａが設けられ、メンテナンスモード用にＡＮＤ演算子１７Ａが設けられる。ＡＮＤ演算子１６Ａ，１７Ａの出力値は、現在の動作モードに従う。典型的には、現在の動作モードとして通常運転モードが設定されている場合には、ＡＮＤ演算子１７Ａは、メンテナンスモード用の第１中間変数ＭＤ１＿Ａ，ＭＤ１＿Ｃの値によらず、常に「ＦＡＬＳＥ」（すなわち、０）を出力するように構成される。一方で、現在の動作モードとしてメンテナンスモードが設定されている場合には、ＡＮＤ演算子１６Ａは、通常運転用の第１中間変数ＭＤ１＿Ａ〜ＭＤ１＿Ｅの値によらず、常に「ＦＡＬＳＥ」（すなわち、０）を出力するように構成される。これにより、ＡＮＤ演算子１６Ａ，１７Ａの出力値は、現在の動作モードに従って切り替えられる。
【０１６７】
このような動作モードによる制御の切り替えを実現するために、たとえば、ＡＮＤ演算子１７Ｂがメンテナンスモード用のＡＮＤ演算子１７Ａに接続される。ＡＮＤ演算子１７Ｂは、メンテナンスモードを有効にするか否かを設定するための入力変数ＩＮ１，ＩＮ２が割り当てられる。メンテナンスモードを有効にするためのキーがオンを示す場合には入力変数ＩＮ１は「ＴＲＵＥ」（すなわち、１）になり、当該キーがオフである場合には入力変数ＩＮ１は「ＦＡＬＳＥ」（すなわち、０）になる。また、メンテナンスモードが有効に設定されている場合には入力変数ＩＮ２は「ＴＲＵＥ」（すなわち、１）になり、当該設定が無効に設定されている場合には入力変数ＩＮ２は「ＦＡＬＳＥ」（すなわち、０）になる。入力変数ＩＮ１，ＩＮ２のいずれかが「ＦＡＬＳＥ」（すなわち、０）を示す場合、ＡＮＤ演算子１７Ｂからの出力は「ＦＡＬＳＥ」（すなわち、０）となる。その結果、ＡＮＤ演算子１７Ａからの出力も「ＦＡＬＳＥ」（すなわち、０）となる。すなわち、メンテナンスモードが無効に設定されている場合には、入力機器「Ｎｏ１」，「Ｎｏ３」の状態によらず、ＡＮＤ演算子１７Ａからの出力は、常に「ＦＡＬＳＥ」（すなわち、０）となる。これにより、メンテナンスモードが無効化される。
【０１６８】
このように、安全プログラム１０は、メンテナンスモードを無効にするための命令を受付け可能に構成されている。これにより、メンテナンスモードの有効または無効が適宜切り替えられる。
【０１６９】
なお、上述では、メンテナンスモードを無効化するためのＡＮＤ演算子１７ＢがＡＮＤ演算子１７Ａに接続される例について説明を行ったが、通常運転モードを無効化するためのＡＮＤ演算子がＡＮＤ演算子１６Ａにさらに接続されてもよい。すなわち、安全プログラムは、通常運転モードおよびメンテナンスモードのいずれか一方を無効にするための命令を受付け可能に構成される。これにより、ユーザは、通常運転モードおよびメンテナンスモードを用途に応じて適宜切り替えることができる。
【０１７０】
＜Ｄ．利点＞
以上のようにして、第２の実施の形態にユーザインターフェイス６００は、通常運転モード時における入出力機器の入出力関係だけでなく、メンテナンスモード時における入出力機器の入出力関係をさらに設定可能に構成される。これにより、情報処理装置２００は、複数の動作モードに対応した安全プログラムを生成することができる。
【０１７１】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【０１７２】
１  安全システム、４  生成機能、１０  安全プログラム、１２，１４  非常停止ＦＢ、１６Ａ，１６Ｂ，１７Ａ，１７Ｂ  ＡＮＤ演算子、１８  出力チェックＦＢ、１８Ａ  ＯＲ演算子、１００  安全コントローラ、１０２，２０２  プロセッサ、１０４  主メモリ、１０６  フラッシュメモリ、１０８  演算処理部、１１０  制御系ネットワークインターフェイス、１１２  情報系ネットワークインターフェイス、１１４  フィールドバスインターフェイス、１１６  メモリカードインターフェイス、１１８  メモリカード、１２０  ローカル通信インターフェイス、１２２  内部バスインターフェイス、２００  情報処理装置、２０４  メモリ、２０６  操作ユニット、２０８  出力ユニット、２０８Ａ  ディスプレイ、２１２  光学ドライブ、２１４  記録媒体、２１８  内部バス、２２０  補助記憶装置、２２２  実行プログラム、２２４  ファンクションブロック、２２６  各種設定、２２７  入力機器設定、２２８  出力機器設定、２２９  リセット機器設定、２３０  入出力設定、２３０Ａ  入力機器情報、２３０Ｂ  二重化情報、２３０Ｃ  出力機器情報、２３０Ｄ  入出力情報、２８２  提供部、２８４  取得部、２８６  生成部、２８８  入力ＦＢ生成部、２９０  中間ＦＢ生成部、２９２  出力ＦＢ生成部、３００  制御装置、４００  入力機器、５１０  モータ、５１２  ドライバ、５１４  セーフティリレー、６００  ユーザインターフェイス、６０１  生成条件表示エリア、６０２，６０４，６０５  変数設定欄、６０３  チェックボックス、６０６  変数登録ボタン、６１０  入力設定表示エリア、６１２，６２２  変数名表示欄、６１４，６２４，６３６，６６６  コメント表示欄、６１６，６３８，６６８  リセット種別表示欄、６１８  入力タイプ表示欄、６１９  入力ＦＢ表示欄、６２０  出力設定表示エリア、６２６  ＥＤＭ表示欄、６３０，６６０  入出力関係設定エリア、６３３，６６３  入力機器表示エリア、６３４  入力変数表示エリア、６４０，６７０  設定領域群、６５１  ＯＫボタン、６５２  キャンセルボタン、７００  中間ＦＢ。
【図１】
2018152032.tif 000003
【図２】
2018152032.tif 000004
【図３】
2018152032.tif 000005
【図４】
2018152032.tif 000006
【図５】
2018152032.tif 000007
【図６】
2018152032.tif 000008
【図７】
2018152032.tif 000009
【図８】
2018152032.tif 000010
【図９】
2018152032.tif 000011
【図１０】
2018152032.tif 000012
【図１１】
2018152032.tif 000013
【図１２】
2018152032.tif 000014
【図１３】
2018152032.tif 000015
【図１４】
2018152032.tif 000016
【図１５】
2018152032.tif 000017
【図１６】
2018152032.tif 000018
【図１７】
2018152032.tif 000019
【図１８】
2018152032.tif 000020
【手続補正書】
【提出日】平成30年6月28日(2018.6.28)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００５６
【補正方法】変更
【補正の内容】
【００５６】
情報処理装置２００は、主たるコンポーネントとして、オペレーティングシステム（ＯＳ：Operating System）および後述するような各種プログラムを実行するプロセッサ２０２と、プロセッサ２０２でのプログラム実行に必要なデータを格納するための作業領域を提供する主メモリ２０４と、キーボードやマウスなどのユーザ操作を受付ける操作ユニット２０６と、ディスプレイ、各種インジケータ、プリンタなどの処理結果を出力する出力ユニット２０８と、外部ネットワークと通信するためのネットワークインターフェイス（Ｉ／Ｆ：Inter Face）２１０と、光学ドライブ２１２と、安全コントローラなどと通信するためのローカル通信インターフェイス（Ｉ／Ｆ）２１６と、補助記憶装置２２０とを含む。これらのコンポーネントは、内部バス２１８などを介してデータ通信可能に接続される。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００９３
【補正方法】変更
【補正の内容】
【００９３】
図９は、入力機器設定２２７のデータ構造の一例を示す図である。入力機器設定２２７において、各入力機器について使用される入力ＦＢが一意に関連付けられている。入力ＦＢ生成部２８８は、入力機器設定２２７に規定されている入力機器の中から、入出力設定２３０（図７参照）において設定された入力機器に一致するものを特定し、当該入力機器に関連付けられている入力ＦＢを取得する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０１１８
【補正方法】変更
【補正の内容】
【０１１８】
図１４は、出力機器設定２２８のデータ構造の一例を示す図である。出力機器設定２２８において、各出力機器について使用される出力ＦＢが一意に関連付けられている。出力ＦＢ生成部２９２は、出力機器設定２２８に規定されている出力機器の中から、入出力設定２３０（図７参照）において設定された出力機器に一致するものを特定し、当該出力機器に関連付けられている出力ＦＢを取得する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１７２
【補正方法】変更
【補正の内容】
【０１７２】
１  安全システム、４  生成機能、１０  安全プログラム、１２，１４  非常停止ＦＢ、１６Ａ，１６Ｂ，１７Ａ，１７Ｂ  ＡＮＤ演算子、１８  出力チェックＦＢ、１８Ａ  ＯＲ演算子、１００  安全コントローラ、１０２，２０２  プロセッサ、１０４  主メモリ、１０６  フラッシュメモリ、１０８  演算処理部、１１０  制御系ネットワークインターフェイス、１１２  情報系ネットワークインターフェイス、１１４  フィールドバスインターフェイス、１１６  メモリカードインターフェイス、１１８  メモリカード、１２０  ローカル通信インターフェイス、１２２  内部バスインターフェイス、２００  情報処理装置、２０４  主メモリ、２０６  操作ユニット、２０８  出力ユニット、２０８Ａ  ディスプレイ、２１２  光学ドライブ、２１４  記録媒体、２１８  内部バス、２２０  補助記憶装置、２２２  実行プログラム、２２４  ファンクションブロック、２２６  各種設定、２２７  入力機器設定、２２８  出力機器設定、２２９  リセット機器設定、２３０  入出力設定、２３０Ａ  入力機器情報、２３０Ｂ  二重化情報、２３０Ｃ  出力機器情報、２３０Ｄ  入出力情報、２８２  提供部、２８４  取得部、２８６  生成部、２８８  入力ＦＢ生成部、２９０  中間ＦＢ生成部、２９２  出力ＦＢ生成部、３００  制御装置、４００  入力機器、５１０  モータ、５１２  ドライバ、５１４  セーフティリレー、６００  ユーザインターフェイス、６０１  生成条件表示エリア、６０２，６０４，６０５  変数設定欄、６０３  チェックボックス、６０６  変数登録ボタン、６１０  入力設定表示エリア、６１２，６２２  変数名表示欄、６１４，６２４，６３６，６６６  コメント表示欄、６１６，６３８，６６８  リセット種別表示欄、６１８  入力タイプ表示欄、６１９  入力ＦＢ表示欄、６２０  出力設定表示エリア、６２６  ＥＤＭ表示欄、６３０，６６０  入出力関係設定エリア、６３３，６６３  入力機器表示エリア、６３４  入力変数表示エリア、６４０，６７０  設定領域群、６５１  ＯＫボタン、６５２  キャンセルボタン、７００  中間ＦＢ。