(57)【要約】【課題】  プログラミングミスが生じ難く、かつそのようなプログラミングミスが生じた場合には、そのことをファンクションブロックのレイアウトから容易に発見することが可能な安全コントローラのプログラム開発支援装置を提供すること。【解決手段】  プログラミングフィールドへのファンクションブロックの配置は、当該プログラミングフィールド上に表示され、かつ行と列との各交叉位置にブロック配置可能位置が定義されたファンクションブロック配置用のテンプレートによる案内にしたがって行われ、前記ファンクションブロック配置用のテンプレートは、入力側に位置しかつそれぞれ入力信号に関する所定種別のファンクションブロックの配置を受け入れる一連の複数列を含む入力側テンプレートと、出力側に位置しかつそれぞれ出力信号に関する所定種別のファンクションブロックの配置を受け入れる一連の複数列を含む出力側テンプレートと、に分離されている。【選択図】  図３４
2008310479.tif 000002
【特許請求の範囲】
【請求項１】
画像表示器のスクリーン上のプログラミングフィールドに、予め用意された複数種のファンクションブロックの中から選択された１の種類のファンクションブロックを順次に配置しかつ各ファンクションブロック毎に必要な固有パラメータを設定することにより、所望の制御仕様に対応するロジック回路図を完成する一連のユーザ操作を通して、安全コントローラ用の制御プログラムが自動的に生成されるようにした安全コントローラのプログラム開発支援装置であって、
前記プログラミングフィールドへのファンクションブロックの配置は、当該プログラミングフィールド上に表示され、かつ行と列との各交叉位置にそれぞれ対応するようにして、ブロック配置可能位置が定義されると共に、行方向の一端側は入力端子側として又他端側は出力端子側として定義されたファンクションブロック配置用のテンプレートによる案内にしたがって行われ、
前記ファンクションブロック配置用のテンプレートは、入力側に位置しかつそれぞれ入力信号に関する所定種別のファンクションブロックの配置を受け入れる一連の複数列を含む入力側テンプレートと、出力側に位置しかつそれぞれ出力信号に関する所定種別のファンクションブロックの配置を受け入れる一連の複数列を含む出力側テンプレートと、に分離されている、ことを特徴とする安全コントローラのプログラム開発支援装置。
【請求項２】
前記入力側テンプレートと前記出力側テンプレートとは、プログラミングフィールド上に択一的に表示可能とされている、ことを特徴とする請求項１に記載の安全コントローラのプログラム開発支援装置。
【請求項３】
前記入力側テンプレートの表示が先で、前記出力側テンプレートの表示が後になるように、両テンプレートを択一的にプログラミングフィールド上に表示させる仕組みが組み込まれている、ことを特徴とする請求項１に記載の安全コントローラのプログラム開発支援装置。
【請求項４】
ユーザにより選択されるファンクションブロックが、その種別毎に予め定義される配置列及び配置手順にしたがって、各テンプレート上の該当列のブロック配置可能位置へと配置されるように、各ファンクションブロックを予め定義された配置列へと予め定義された配置手順をもって誘導する仕組みが組み込まれている、ことを特徴とする請求項１〜３のいずれかに記載の安全コントローラのプログラム開発支援装置。
【請求項５】
各ファンクションブロックを予定される配置列へと予定される配置手順をもって誘導する仕組みが、そのために必要な操作をユーザに対して促すための案内表示である、ことを特徴とする請求項４に記載の安全コントローラのプロクラム開発支援装置。
【請求項６】
各ファンクションブロックを予定される配置列へと予定される配置手順をもって誘導する仕組みが、ユーザにより選択されるファンクションブロックが、その種別毎に予め定義される配置列以外の配置列、又は配置手順以外の配置手順にしたがって、各テンプレート上に配置される動作を検知してそれを禁止するように、又はそのような動作を検知してそれに警告を発するように仕組まれたものである、ことを特徴とする請求項４に記載の安全コントローラのプログラム開発支援装置。
【請求項７】
テンプレートが入力側テンプレートであり、かつ予め定義された配置手順が、予め定義された配置列に配置されるべき複数のファンクションブロックが、入力端子に近い列のものから順に配置されるものである、ことを特徴とする請求項４〜６のいずれかに記載の安全コントローラのプログラム開発支援装置。
【請求項８】
テンプレートが出力側テンプレートであり、かつ予め定義された配置手順が、予め定義された配置列に配置されるべき複数のファンクションブロックが、出力端子に近い列のものから順に配置されるものである、ことを特徴とする請求項４〜６のいずれかに記載の安全コントローラのプログラム開発支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、画像表示器のスクリーン上のプログラミングフィールドに、所望の制御仕様に対応するロジック回路図を記述するための一連のユーザ操作を通して、安全コントローラ用の制御プログラムが自動的に生成されるされるようにした安全（セーフティ）コントローラのプログラム開発支援装置に関する。
【背景技術】
【０００２】
安全コントローラは、一般的なプログラマブルコントローラ（ＰＬＣ）に類似するロジック演算機能、入出力制御機能に加えて、安全面の自己診断機能を内蔵させることにより、その制御において高度な安全性および信頼性を確保したものであり、自己診断結果により異常を検出した場合には、自己の制御が危険につながらないように、強制的に安全な制御を行なうような機能（フェールセーフ機能）を備えている。
【０００３】
ここに言う安全は、より具体的には、規格化されている安全基準を含む意味である。安全規格には、例えばＩＥＣ６１５０８やＥＮ規格などがある。ＩＥＣ６１５０８（プログラム可能な電子システムの機能安全に関する国際電気標準委員会）では、時間あたりの危険故障確立を（失敗確立：Ｐｒｏｂａｂｉｌｉｔｙ  ｏｆ  Ｆａｉｌｕｒｅ  ｐｅｒ  Ｈｏｕｒ）を定義し、この確立によってＳＩＬのレベル（Ｓａｆｅｔｙ  Ｉｎｔｅｇｒｉｔｙ  Ｌｅｖｅｌ）を４段階に分類している。また、ＥＮ規格では、機械のリスクの大きさを評価し、リスク低減策を講じるように義務づけされていて、ＥＮ９５４−１では５つの安全カテゴリにて規定されている。この明細書でいう安全コントローラ、安全Ｉ／Ｏターミナル等は、このような安全基準のいずれかに対応したものである。
【０００４】
安全コントローラ用の制御プログラムを作成するための従来のプログラム開発支援装置（日本国、オムロン株式会社製セーフティネットワークコントローラ）におけるロジック回路図表示例が図３５に示されている。
【０００５】
このプロラム開発支援装置（第１従来例）は、画像表示器のスクリーン上のプログラミングフィールド８０１に、予め用意された複数種のファンクションブロックの中から選択された１の種類のファンクションブロック（ＦＢ８１〜ＦＢ８５）を順次に配置し、かつ各ファンクションブロック毎に必要な固有パラメータ（図示せず）を設定（この例では、配線描画のためのマウスによるドラッグ操作で、パラメータが自動設定される）することにより、所望の制御仕様に対応するロジック回路図を完成する一連のユーザ操作を通して、安全コントローラ用の制御プログラムが自動的に生成されるされるようにしたものである。
【０００６】
なお、図において、ＦＢ８１は非常停止スイッチ・アプリケーション用のファンクションブロック、ＦＢ８２はセーフティライトカーテン・アプリケーション用のファンクションブロック、ＦＢ８３はリセット／リスタート・アプリケーション用のファンクションブロック、ＦＢ８４は論理積演算・アプリケーション用のファンクションブロック、ＦＢ８５は外部出力機器モニタリング・アプリケーション用のファンクションブロックである。また、図において、Ｔ８１１，Ｔ８１２は非常停止スイッチの２系統の出力信号が入力される一対の入力端子表示、Ｔ８２１，Ｔ８２２はセーフティライトカーテンの２系統の出力信号が入力される一対の入力端子表示、Ｔ８３はリセットスイッチの出力信号が入力される入力端子表示、Ｔ８４は外部出力機器モニタリング信号が入力される入力端子表示である。
【０００７】
そして、ユーザによりプログラミングフィールド８０１上に描かれたロジック回路に対応して作成される回路図データは、所定のコンパイル処理が施されて、安全コントローラが直接に解読実行可能な設定ファイル（すなわち、安全コントローラ用制御プログラム）に変換される。こうして得られた実行用の設定ファイルは、対象となる安全コントローラへと、通信を介して又は可搬型記録媒体を介して、インストールされる。
【０００８】
上述の第１従来例によれば、プログラミングフィールド８０１上には、ファンクションブロックや端子表示（以下、回路素子と言う）の置き場所が固定されていないから、所望の回路素子をプログラミングフィールド８０１上の任意の位置に配置することができ、回路素子の配置自由度が高いと言う利点がある。その反面、限られた大きさのプログラミングフィールド８０１内に、所望の回路素子の全てを収容しかつそれらの回路素子を全体の回路動作が理解しやすく配置（レイアウト）するためには、ある種のデザイン上のセンス乃至適性が必要とされ、それらのセンスや適性に劣る者にとっては却って使い勝手が悪いと言う欠点がある（非特許文献１参照）。
【０００９】
安全コントローラ用の制御プログラムを作成するための従来の他のプログラム開発支援装置（独国、ＰＩＬＺ社製）におけるロジック回路図表示例が図３６に示されている。
【００１０】
このプロラム開発支援装置（第２従来例）も、画像表示器のスクリーン上のプログラミングフィールド９０１に、予め用意された複数種のファンクションブロックの中から選択された１の種類のファンクションブロック（ＦＢ９１〜ＦＢ９５）を順次に配置しかつ各ファンクションブロック毎に必要な固有パラメータ（図示せず）を設定（この例でも、配線描画のためのマウスによるドラッグ操作で、パラメータが自動設定される）することにより、所望の制御仕様に対応するロジック回路図を完成する一連のユーザ操作を通して、安全コントローラ用の制御プログラムが自動的に生成されるされるように構成されている。
【００１１】
加えて、この第２従来例にあっては、プログラミングフィールド９０１へのファンクションブロックの配置は、プログラミングフィールド９０１上に表示されるファンクションブロック配置用のテンプレート９００による案内にしたがって行われ、このテンプレート９００には、スクリーン上の垂直方向を基準方向として、複数の行（Ｒ１，Ｒ２，Ｒ３・・・）と複数の列（Ｃ１，Ｃ２，Ｃ３・・・）とが定義される共に、行（Ｒ）方向の一端（左端）は入力側として他端（右端）は出力側として定義され、かつそれらの行（Ｒ１，Ｒ２，Ｒ３・・・）と列（Ｃ１，Ｃ２，Ｃ３・・・）との各交点位置にそれぞれ対応するようにして、複数のブロック配置可能位置（Ａ１１〜Ａ３３）が定義されている。
【００１２】
なお、図において、ＦＢ９１は非常停止スイッチ・アプリケーション用のファンクションブロック、ＦＢ９２はセーフティライトカーテン・アプリケーション用のファンクションブロック、ＦＢ９３は論理積演算・アプリケーション用のファンクションブロック、ＦＢ９４はリセット／リスタート・アプリケーション用のファンクションブロック、ＦＢ９５は外部出力機器モニタリング・アプリケーション用のファンクションブロックである。また、図において、Ｔ９１１，Ｔ９１２は非常停止スイッチの２系統の出力信号が入力される一対の入力端子表示、Ｔ９２１，Ｔ９２２はセーフティライトカーテンの２系統の出力信号が入力される一対の入力端子表示、Ｔ９３はリセットスイッチの出力信号が入力される入力端子表示、Ｔ９４は外部出力機器モニタリング信号が入力される入力端子表示、である。
【００１３】
そして、ユーザによりプログラミングフィールド９０１上に描かれたロジック回路に対応して作成される回路図データは、第１従来例と同様に所定のコンパイル処理が施されて、安全コントローラが直接に解読実行可能な設定ファイル（すなわち、安全コントローラ用制御プログラム）に変換される。こうして得られた実行用の設定ファイルは、対象となる安全コントローラへと、通信を介して又は可搬型記録媒体を介して、インストールされる。
【００１４】
上述の第２従来例によれば、プログラミングフィールド９０１上には、回路素子の置き場所が予め定義されているから、所望の回路素子を選択したのち、その回路素子を例えばマウスのドラッグ操作で、予め決められた置き場所の近辺に近づけさえすれば、ドラッグされた回路素子は予め定義された置き場所へと自動的に誘導されて配置されるから、デザイン上のセンスや適性を有しない者であっても、選択された複数の回路素子をプログラミングフィールド９０１内に要領よく配置することができ、第１従来例の場合のように、選択された回路素子のレイアウトに頭を悩ますことがないと言う利点がある（非特許文献２）。
【非特許文献１】オムロン株式会社のカタログ（ＵＲＬ  http://www.fa.omron.co.jp/product/32.htmlに掲載）
【非特許文献２】ＰＩＬＺ社カタログ（ＵＲＬ  http://www.pilz.jp/p_saferelay7.htmに掲載）
【発明の開示】
【発明が解決しようとする課題】
【００１５】
ところで、この種のプログラム開発支援装置において、所望の安全制御仕様に対応するロジック回路図を生成するに際しては、単に入出力間の信号論理のみならず、安全コントローラに特有とされる様々な事情に配慮しつつ、必要なファンクションブロックをロジック回路図上の必要な位置に適切に配置せねばならない。
【００１６】
例えば、１もしくは２以上の入力端子から得られる入力信号が所定の論理値（危険）を示すときに、１もしくは２以上の出力端子から所定論理値（危険源の停止）を有する出力信号を送出するようなロジック回路図を作成しようとする場合、これが安全仕様でない通常のコントローラ（ＰＬＣ等）であれば、それらの入出力間論理に相当する論理演算用のファンクションブロックを入出力端子列間に配置するだけで充分あろう。
【００１７】
しかし、これが安全仕様のコントローラとなると、些か、事情は異なる。すなわち、安全仕様のコントローラの場合には、入力端子から何らかの危険を示す入力信号が得られたとしても、その入力信号は、危険を検知する入力機器（非常停止スイッチ、ライトカーテン、リミットスイッチ、ドアスイッチ等々）それ自体の故障等に起因するものである可能性もあるため、そのような入力信号を直ちに取り込んで必要な論理演算に供することはできない。そのため、論理演算用のファンクションブロックの少なくとも前段には、各入力機器毎に適切な故障診断機能等が組み込まれた入力系ファンクションブロックを配置せねばならない。
【００１８】
また、そのような入力系ファンクションブロック経由で何らかの危険を示す入力信号が得られたとしても、その入力信号は、調整やメンテナンス等のために、危険を承知で作業員が危険領域に侵入したことに起因するものである可能性もあるため、そのような入力信号を直ちに取り込んで必要な論理演算に供することはできない場合もある。そのため、論理演算用のファンクションブロックの少なくとも前段には、調整時やメンテナンス時等に相当する所定の条件が成立するときには、入力信号を無効化する機能を有する無効化ファンクションでロックを配置せねばならない場合もある。
【００１９】
また、そのような入力診断系ファンクションブロック、及び／又は、無効化ブロック経由で何らかの危険を示す入力信号が得られた場合、危険を示す状態から安全を示す状態への復帰と同時に出力信号の状態を復帰させてはいけないとする安全法規上の理由から、そのような入力信号を直ちに取り込んで必要な論理演算に供することができない場合（特に、瞬時動作／瞬時復帰・接点からの入力信号の場合）もある。そのため、論理演算用のファンクションブロックの少なくとも前段には、入力信号の危険状態を保持するセット機能と、危険状態の保持を解除するリセット機能と、リセット条件を規定するリセット条件設定機能とを有するセット／リセット・ファンクションブロックを配置せねばならない場合もある。
【００２０】
また、出力機器それ自体にも故障の可能性があることを考慮すると、論理演算用（出力条件設定用）のファンクションブロックの出力信号を無条件で出力機器へと送出することは必ずしも適当ではない。そのため、論理演算用のファンクションブロックの少なくとも後段には、各出力機器毎に適切な故障診断機能等が組み込まれた出力診断系ファンクションブロック（例えば、ＥＤＭファンクションブロック等の外部機器モニタリング用ファンクションブロック）を配置せねばならない。
【００２１】
さらに、出力機器のそれぞれには固有の動作遅れ時間があることを等考慮すると、複数の出力端子のそれぞれから同一のタイミングで出力信号を送出することが必ずしも適当でない場合もある。そのため、論理演算用のファンクションブロックの少なくとも後段には、出力信号のオンタイミング、及び／又は、オフタイミングを遅らせる機能を有する出力態様指定ファンクションブロックを配置せねばならない場合もある。
【００２２】
このように、ロジック回路図を介在する安全コントローラのプログラミングにおいては、入力端子から出力端子へ至る信号経路上の必要な位置に、必要なファンクションブロックを適切に配置する作業がユーザに対して要求される。この作業は、上述の安全コントローラ特有の事情を十分に考慮してはじめて適切に成し得るものであるから、安全コントローラのプログラミングに不慣れな初心者にとってはなかなか容易なことではなく、しばしば必要なファンクションブロックの欠落を生じたり、必要なファンクションブロックは存在するものの、配置される位置が誤っている等のプログラミングミスが生ずる。
【００２３】
殊に、上述の第１、第２従来例にあっては、プログラミングフィールド上の各ファンクションブロックが配置される位置とその位置に配置されるファンクションブックの種別との間には厳密な相関は存在しないから、本来配置されるべき複数のファンクションブロックのうちのいずれかが、誤って欠落していたり、配置される位置が異なっていたとしても、そのことを各ファンクションブロックのレイアウト状態から直ちに発見することはなかなか困難である。
【００２４】
そのため、それらの従来例において、そのようなプログラミングミスを発見するためには、具体的な制御の事情を頭に浮かべながら、例えば入力端子から出力端子へと信号経路を順に辿ると言う地道な検証作業が必要となり、このような検証作業の煩雑さがこの種の安全コントローラの普及を阻害する一因ともなっている。
【００２５】
しかも、安全コントローラのプログラミングに使用されるファンクションブロックの種類は、安全コントローラの普及に連れて益々増加することが予想されるため、より多数の種別のファンクションブロックが存在するであろう将来の状況下においても、プログラミングミスが生じ難く、かつプログラミングミスが生じた場合には、そのことを容易に発見することが可能な安全コントローラのプログラム開発支援装置が要望されている。
【００２６】
一方、入力端子から出力端子へ至る信号経路上の必要な位置に、必要なファンクションブロックが適切な配置順（空間的配置順）で配置されたとしても、その配置手順（時間的配置順）が不適切であれば、プログラミングミスを生じやすいと言う問題もある。
【００２７】
すなわち、この種の安全コントローラのプログラミングにおいて、回路図上に順次に配置されるファンクションブロックは、その配置時点において既に配置されている他のファンクションブロックの情報を必要とすることが多い。
【００２８】
そのため、例えば複数のファンクションブロックＦＢ１，ＦＢ２，ＦＢ３が存在する場合において、その好ましい空間的配置順がＦＢ１→ＦＢ２→ＦＢ３、かつ好ましい時間的配置順もＦＢ１→ＦＢ２→ＦＢ３であるときに、それらのファンクションブロックの実際の空間的配置順がＦＢ１→ＦＢ２→ＦＢ３であったとしても、その時間的配置順が例えばＦＢ１→ＦＢ３→ＦＢ２であったとすると、ファンクションブロックＦＢ３の配置時点において、ファンクションブロックＦＢ２は未だ配置されていないことから、ファンクションブロックＦＢ３はファンクションブロックＦＢ２の情報を参照することができず、これがファンクションブロックＦＢ３に関するパラメータ設定ミスの原因となる。
【００２９】
殊に、ロジック回路図の入出力端に隣接するファンクションブロックは、入出力端の情報を取り込んでパラメータ設定されるものであるから、これがもしも回路内部のファンクションブロックよりも時間的に後に配置されるとすると、回路内部のファンクションブロックの配置においてパラメータ設定ミスを生じやすい。
【００３０】
この発明は、上述の問題点に着目してなされたものであり、その目的とするところは、プログラミングミスが生じ難く、かつそのようなプログラミングミスが生じた場合には、そのことをファンクションブロックのレイアウトから容易に発見することが可能な安全コントローラのプログラム開発支援装置を提供することにある。
【００３１】
この発明のさらに他の目的並びに作用効果については、明細書の記述を参照することにより、当業者であれば容易に理解されるであろう。
【課題を解決するための手段】
【００３２】
上述の技術的な課題は、以下の構成を有する安全コントローラのプログラム開発支援装置により解決することができる。
【００３３】
すなわち、この安全コントローラのプログラム開発支援装置は、画像表示器のスクリーン上のプログラミングフィールドに、予め用意された複数種のファンクションブロックの中から選択された１の種類のファンクションブロックを順次に配置しかつ各ファンクションブロック毎に必要な固有パラメータを設定することにより、所望の制御仕様に対応するロジック回路図を完成する一連のユーザ操作を通して、安全コントローラ用の制御プログラムが自動的に生成されるように動作する処理部を有した基本構成を有している。
【００３４】
上記の基本構成に加えて、このプログラム開発支援装置において、前記プログラミングフィールドへのファンクションブロックの配置は、当該プログラミングフィールド上に表示され、かつ行と列との各交叉位置にそれぞれ対応するようにして、ブロック配置可能位置が定義されると共に、行方向の一端側は入力端子側として又他端側は出力端子側として定義されたファンクションブロック配置用のテンプレートによる案内にしたがって行われるようになっている。
【００３５】
加えて、前記ファンクションブロック配置用のテンプレートは、入力側に位置しかつそれぞれ入力信号に関する所定種別のファンクションブロックの配置を受け入れる一連の複数列を含む入力側テンプレートと、出力側に位置しかつそれぞれ出力信号に関する所定種別のファンクションブロックの配置を受け入れる一連の複数列を含む出力側テンプレートと、に分離されている。
【００３６】
このような動作をする処理部を備えた構成によれば、前記プログラミングフィールドへのファンクションブロックの配置は、当該プログラミングフィールド上に表示され、かつ行と列との各交叉位置にそれぞれ対応するようにして定義されたブロック配置可能位置に案内されるから、各ファンクションブロックは自動的に縦横整列されて配置され、ユーザはファンクションブロックのレイアウトに頭を悩ますことがない。
【００３７】
また、完成したロジック回路上における各ファンクションブロックは、同種別のものが列方向に並ぶこととなるため、完成後のロジック回路の検証については、各列単位で同種別のファンクションブロックが並んでいるか否かをチェックしたり、或いはいずれかの行に関してファンクションブロックが欠落しているときには、それがファンクションブロックの配置忘れではないかをチェックすると言った機械的なチェック作業で行うことができ、完成後のロジック回路の検証が容易である。
【００３８】
また、前記ファンクションブロック配置用のテンプレートは、入力側に位置しかつそれぞれ入力信号に関する所定種別のファンクションブロックの配置を受け入れる一連の複数列を含む入力側テンプレートと、出力側に位置しかつそれぞれ出力信号に関する所定種別のファンクションブロックの配置を受け入れる一連の複数列を含む出力側テンプレートと、に分離されているので、入力側テンプレートの各行のそれぞれに配置される一連のファンクションブロックは共通の１の入力信号を扱うものとなると共に、出力側テンプレートの各行のそれぞれに配置される一連のファンクションブロックについても共通の１の出力信号を取り扱うものとなって、作成されるロジック回路に含まれる各入出力信号系統と各テンプレート内の各行との対応関係が明確化され、これにより１の入力（又は出力）信号系統のファンクションブロックを別の入力（又は出力）信号系統に配置すると言ったプログラミングミスを生じ難いと言う利点がある。
【００３９】
このとき、前記入力側テンプレートと前記出力側テンプレートとを、プログラミングフィールド上に択一的に表示可能となるように処理部にて処理すれば、入力側ロジック回路又は出力側ロジック回路のいずれかに専念して、該当する側のファンクションブロックの配置に専念することができるから、一層、プログラミングミスを起こし難い利点がある。
【００４０】
加えて、このとき、前記入力側テンプレートの表示が先で、前記出力側テンプレートの表示が後になるように、両テンプレートを択一的にプログラミングフィールド上に表示させる仕組みが処理部に組み込まれていれば、ユーザは入力側ロジック回路に関するプログラミングを完了してから、出力側ロジック回路に関するプログラミングへと移行することとなり、出力側ロジック回路のプログラミングには入力側ロジック回路のプログラミング結果が不可欠であることから、これによってもプログラミングミスを起こし難い利点がある。
【００４１】
この発明の好ましい実施の形態のプログラム開発支援装置としては、ユーザにより選択されるファンクションブロックが、その種別毎に予め定義される配置列及び配置手順にしたがって、各テンプレート上の該当列のブロック配置可能位置へと配置されるように、各ファンクションブロックを予め定義された配置列へと予め定義された配置手順をもって誘導する仕組みが処理部に組み込まれていてもよい。
【００４２】
このような構成によれば、上述の「誘導する仕組み」が組み込まれていることから、ユーザにより選択されるファンクションブロックは、その種別毎に予め定義された配置列に配置されるのみならず、予め定義された配置手順（時間的な配置順）にしたがって、各テンプレート上の該当列のブロック配置可能位置へと配置されるから、各ファンクションブロックの配置時に参照が必要となる他のファンクションブロックについて、それよりも以前に必ず配置が完了しているように、配置手順を定義しておくことにより、配置時に必要とされる他のファンクションブロックが未配置であることによるプログラミングミスの発生を抑制することができる。
【００４３】
このとき、各ファンクションブロックを予定される配置列へと予定される配置手順をもって誘導する仕組みとしては、そのために必要な操作をユーザに対して促すための案内表示としてもよい。
【００４４】
このような構成によれば、案内表示を介してユーザの心理に訴えかけることにより、ユーザの操作を介して、各ファンクションブロックを予定される配置列へと予定される配置手順をもって誘導することができる。
【００４５】
また、各ファンクションブロックを予定される配置列へと予定される配置手順をもって誘導する仕組みとしては、ユーザにより選択されるファンクションブロックが、その種別毎に予め定義される配置列以外の配置列、又は配置手順以外の配置手順にしたがって、各テンプレート上に配置される動作を検知してそれを禁止するように、又はそのような動作を検知してそれに警告を発するように仕組まれたものであってもよい。
【００４６】
このような構成によれば、禁止措置や警告により誤ったファンクションブロック配置操作を排除することにより、ユーザの叛意による操作を介して又は強制的に、各ファンクションブロックを予定される配置列へと予定される配置手順をもって誘導することができる。
【００４７】
このとき、テンプレートが入力側テンプレートであれば、予め定義された配置手順としては、予め定義された配置列に配置されるべき複数のファンクションブロックが、入力端子に近い列のものから順に配置されると言った配置手順であってもよい。
【００４８】
このような構成によれば、回路動作の理解が容易となるように、入力側テンプレートの各列に、入力端子から近いものから順に処理されるように、複数のファンクションブロックを並べて配置する場合において、プログラミングミスの抑制に有効である。
【００４９】
また、テンプレートが出力側テンプレートであれば、予め定義された配置手順としては、予め定義された配置列に配置されるべき複数のファンクションブロックが、出力端子に近い列のものから順に配置されると言った配置手順であってもよい。
【００５０】
このような構成によれば、回路動作の理解が容易となるように、出力側テンプレートの各列に、入力端子から近いものから順に処理されるように、複数のファンクションブロックを並べて配置する場合において、プログラミングミスの抑制に有効である。
【発明の効果】
【００５１】
この発明によれば、プログラミングミスが生じ難く、かつそのようなプログラミングミスが生じた場合には、そのことをファンクションブロックのレイアウトから容易に発見することが可能な安全コントローラのプログラム開発支援装置を提供することができる。
【発明を実施するための最良の形態】
【００５２】
以下に、この発明に係る安全コントローラのプログラム開発支援装置の好適な実施の一形態を添付図面を参照しながら詳細に説明する。
【００５３】
本発明に係るプログラム開発支援装置の対象となる安全コントローラを含む安全制御システムを示す概念図が図１に示されている。同図（ａ）に示される安全制御システムは、１台の安全コントローラ１と１若しくは２台以上の安全Ｉ／Ｏターミナル５とをバス型ネットワーク２ａにて接続して構成されている。尚、同図（ａ）に示される安全制御システムにおいては、安全コントローラ１はマスタとして、安全Ｉ／Ｏターミナル５はスレーブとして機能する。
【００５４】
これらの安全コントローラ１及び安全Ｉ／Ｏターミナル５には、それぞれ入力機器３及び出力機器４が接続される。入力機器３としては、セーフティ非常停止スイッチ、セーフティライトカーテン、セーフティリミットスイッチ、セーフティドアスイッチなどを挙げることができる。また、出力機器４としては、セーフティリレー、セーフティコンタクタなどを挙げることができる。
【００５５】
同図（ａ）に示されるマスタ・スレーブ型の安全制御システムに適用する場合、本発明のプログラム開発支援装置１０は、安全コントローラ１と各安全Ｉ／Ｏターミナル５とを繋ぐバス型ネットワーク２ａに接続することができる。これに対して、同図（ｂ）に示される単独タイプの制御システムに適用する場合、本発明のプログラム開発支援装置１０は所定のケーブル２ｂを介して直結される。こうして、プログラム開発支援装置１０にて生成される安全に関する制御プログラムは、各安全コントローラ１で実行可能な形式に変換された後、安全コントローラ１へと送り込まれる。
【００５６】
本発明に係るプログラム開発支援装置の電気的なハードウェア構成を示す概略ブロックズが図３に示されている。図１と図３とを参照して明らかなように、このプログラム開発支援装置１０は、図示の例にあっては、ノート型パソコンを主体として構成されている。ノート型パソコンのハードウェア構成は、当業者にはよく知られているように、ＣＰＵ１１と、入力操作部１２と、画像表示部１３と、ワークＲＡＭ１４と、記憶装置１５と、通信部１６とをシステムバス１７で接続して構成されている。
【００５７】
ＣＰＵ１１は、マイクロプロセッサを主体として構成されており、当該ノート型パソコン全体を統括制御するものである。入力操作部１２は、マウスやキーボードなどを主体として構成されており、当該ノートパソコンに対する各種の指令を与えるためのヒューマン・マシン・インタフェースとして機能するものである。画像表示部１３は、液晶ディスプレイなどにより構成されており、その画面（スクリーン）１３ａには、後に図２１等を参照して詳述するように、本発明に係るプログラミングフィールド２０１が表示されるようになっている。ワークＲＡＭ１４は、後述するシステムプログラム、アプリケーションプログラムなどをＣＰＵ１１が実行する際のワークエリアとして利用される。記憶装置１５は、ハードディスクなどで構成されており、その内部には出力イメージメモリ１５ａ、システムメモリ１５ｂ、プログラムメモリ１５ｃがそれぞれ配置されている。出力イメージメモリ１５ａは、本発明に関連して、各種のイメージを画像表示部１３のスクリーン１３ａ上に表示させる際の各種のイメージデータを格納するために使用され、システムメモリ１５ｂは、当該ノートパソコンの基本的な機能を構成するためのファームウェア（オペレーティングシステムを含む）を格納するために使用される。プログラムメモリ１５ｃは、当該ノート型パソコンで実行されるべき各種のアプリケーションプログラムを格納するために使用される。先に述べたように、出力イメージメモリ１５ａ、システムメモリ１５ｂ、プログラムメモリ１５ｃに格納された各種のプログラム並びにデータは、それぞれＣＰＵ１１が実行する際には、ワークＲＡＭ１４のワークエリア上に展開されて実行されることはよく知られている通りである。
【００５８】
次に、安全コントローラの電気的なハードウェア構成を示す概略ブロック図が図４に示されている。同図に示されるように、安全コントローラ１の内部には、通信Ｉ／Ｆ部１０１と、中央演算部１０２と、入力端子部１０４ａと、出力端子部１０４ｂとが含まれている。
【００５９】
通信Ｉ／Ｆ部１０１は、当該安全コントローラ１とネットワーク２ａ，２ｂとの間で通信を行う際のインタフェース機能を実現するためのものである。中央演算部１０２は、当該安全コントローラ１の全体を統括制御するものであり、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを主体として構成されている。
【００６０】
入力端子部１０４ａには、入力機器３からの信号を受け付けるための複数の入力端子（端子１，端子２，・・・，端子ｎ）が含まれている。一方、出力端子部１０４ｂには、出力機器４へと出力信号を送出するための複数の出力端子（端子１，端子２，・・・，端子ｎ）が含まれている。
【００６１】
入力側の端子異常診断部１０３ａは、入力端子部１０４ａに含まれる各入力端子のそれぞれに対応する個別診断部を有している。各個別診断部は、複数の入力機器種別に対応する汎用の診断部として構成されており、この診断部は各入力機器種別に応じたパラメータが設定されることによって、その機種に特化した形態に構築されるように仕組まれている。後述するプログラミング作業において、入力系ファンクションブロックのパラメータとして出現するのは、この端子異常診断部１０３ａを各入力機器種別に特化するためのパラメータのことである。
【００６２】
出力側の端子異常診断部１０３ｂもまた、出力端子部１０４ｂに含まれる各出力端子に対応する個別診断部を有している。この個別診断部は、複数の出力機器種別に対応する汎用の診断部として構成されており、これに各出力機器に対応するパラメータを設定することによって、その出力機器種別に対応する診断部として特化されるように構成されている。
【００６３】
次に、プログラム開発支援装置１０の機能を概念的に示すブロック図が図２に示されている。同図に示されるように、本発明を実現するための構成に着目した場合、プログラム開発支援装置１０として必要な機能構成としては、セーフティロジックウィザードＤＢ１０ａと、ロジック回路図データ１０ｂと、設定パラメータを作成するためのコンパイラ１０ｃと、コンパイラ１０ｃを介してロジック回路図データ１０ｂから変換された設定パラメータ１０ｄとを挙げることができる。これらの機能構成要素については、後に本発明に係るプログラム開発支援装置の動作を説明する際に、図１７〜図２０に示される図表、並びに、図５〜図１６に示されるフローチャートを参照しながら詳述することとする。
【００６４】
次に、図５〜図１６を参照しながら、本発明に係るプログラム開発支援装置（第１実施形態）の動作について説明する。なお、それらのフローチャートに示されるアプリケーションプログラムについては、先に図３を参照して説明したプログラムメモリ１５ｃに格納されたものである。また、それらのフローチャートに示される動作については、処理部に相当するＣＰＵ１１によって統括して実行処理される。
【００６５】
プログラム開発支援装置（第１実施形態）のソフトウェア構成を示すフローチャート（その１〜その３）が図５〜図７に示されている。
【００６６】
図５において、処理が開始されると、まず、安全入出力端子の設定のためのユーザアクションを受け付ける処理が実行される（ステップ１０１）。ここで、ユーザアクションとしては、プログラム開発支援装置１０を構成するノート型パソコンにおける所定のキー入力操作やマウス操作等を挙げることができる。このユーザアクションによって、安全入出力端子に関する各種のデータが設定される。こうして得られた安全入出力端子に関する各種のデータは、ワークＲＡＭ１４に格納される。
【００６７】
入力側テンプレートにおけるファンクションブロック（以下、「ＦＢ」ともいう）配置開始初期の画面説明図が図２１に、出力側テンプレートにおけるＦＢ配置設定開始初期の画面説明図が図２６にそれぞれ示されている。
【００６８】
図２１に示されるように、プログラム開発支援装置１０を構成するノート型パソコンの画像表示部１３のスクリーン１３ａには、入力用のセーフティロジックウィザードのためのウィンドウ２００が開かれる。ここで、「セーフティロジックウィザード」とは、安全コントローラ用の制御プログラムに相当するロジック回路図作成のための各種ユーザサポート機能を総称するものである。
【００６９】
こうして開かれたウィンドウ２００内には、横長長方形状のプログラミングフィールド２０１が定義されており、このプログラミングフィールド２０１には本発明の要部であるところの入力用テンプレート２０２が表示される。
【００７０】
この入力側テンプレート２０２には、それぞれスクリーンの水平方向へと延びる行（Ｒ１，Ｒ２，Ｒ３，・・・）とスクリーンの垂直方向へ延びる列（Ｃ１，Ｃ２，Ｃ３）との各交点に対応するようにして、複数のブロック配置可能位置が設けられている。また、入力側テンプレート２０２の左側縁部には、各行（Ｒ１，Ｒ２，Ｒ３，Ｒ４・・・）に対応させて、その行の入力端子に関する情報が表示されている。
【００７１】
この例では、第１行（Ｒ１）は、２つの入力端子［ＩＮ０／１］に割り当てられており、それらの入力端子は、二重化仕様のセーフティ非常停止スイッチからの一対のＮＣ（ノーマルクローズ）信号を受け付けるように設定されている。また、第２行（Ｒ２）は、２つの入力端子［ＩＮ２／３］に割り当てられており、それらの入力端子は、二重化仕様のセーフティドアスイッチからの一対のＮＣ信号を受け付けるように設定されている。また、第３行（Ｒ３）は、１個の入力端子［ＩＮ４］に割り当てられており、この入力端子は、非二重化仕様のドアスイッチからの信号を受け付けるように設定されている。
【００７２】
これらの入力端子設定に対応するようにして、入力側テンプレート２０２の第１列（Ｃ１）には、各行（Ｒ１，Ｒ２，Ｒ３）の端子設定に対応するようにして、それぞれの端子に関する自己診断機能を実現するためのファンクションブロックが配置される。すなわち、第１列（Ｃ１）の第１行（Ｒ１）に対応するブロック配置可能位置（横長長方形の小領域）には、セーフティ非常停止スイッチファンクションブロック（ＦＢ１１）が、第２行に対応するファンクションブロック配置可能位置には、二重化仕様のセーフティライトカーテンファンクションブロック（ＦＢ１２）が、第３行（Ｒ３）に相当するファンクションブロック配置可能位置には、非二重化仕様のセーフティライトカーテンファンクションブロック（ＦＢ１３）がそれぞれ配置されている。
【００７３】
そして、図５のフローチャートにおいて、ステップ１０１，１０２の処理が実行されると、以上説明した入力端子の設定並びにファンクションブロックの配置が実行される。
【００７４】
なお、この入力側テンプレート２０２における第２列（Ｃ２）の各行のブロック配置位置には、入力無効化ファンクションブロック又は入出力間導通ファンクションブロック（ＦＢ０１）が配置されるように仕組まれており、同様にして第３列（Ｃ３）の各行のブロック配置位置にはセット／リセットファンクションブロック又は入力間導通ファンクションブロック（ＦＢ０１）が配置されるように仕組まれている。これらの仕組みは、各列毎に選択可能なファンクションブロックをメニューウィンドウの中からのみ選択可能とすることで実現されている。
【００７５】
そして、入力側テンプレート２０２の上縁部には、各列（Ｃ１，Ｃ２，Ｃ３）に対応するようにして、その列に配置されるべきファンクションブロックの意味内容を示すインデックス２０３−１〜３が表示されている。ここで、第１列（Ｃ１）に対応するインデックス２０３−１の内容は、入力系ファンクションブロックであることを示す「入力」とされ、第２行（Ｃ２）に対応するインデックス２０３−２の内容は、入力無効化ファンクションブロックであることを示す「無効化」とされており、さらに第３列（Ｃ３）に対応するインデックス２０３−３の内容は、セット／リセットファンクションブロックであることを示す「リセット」とされている。
【００７６】
一方、この入力側テンプレート２０２の右側縁部には、各行（Ｒ１，Ｒ２，Ｒ３，Ｒ４・・・）ごとに、その左側縁部の入力表示情報と同一の入力表示情報とが表示されている。つまり、この入力側テンプレートにおいては、各行のそれぞれは、行単位で１個の入力信号に割り付けられているのである。
【００７７】
そのため、このような構造を有する入力側テンプレート２０２によれば、同一の入力信号に係るファンクションブロックについては同一行に配置すればよく、また同種のファンクションブロックについては同一列に配置すればよいことになるため、ある入力信号経路に配置すべきファンクションブロックを別の入力信号経路に配置したり、あるいはある並び順で配列されるべき複数のファンクションブロックを別の並び順で配置してしまうといったプログラミングミスを起こし難いという利点がある。
【００７８】
次に、出力側テンプレートにおけるＦＢ配置設定開始初期の画面説明図が図２６に示されている。同図に示されるように、この例にあっては、スクリーン上に開かれたウィンドウ２００内のプログラミングフィールド２０１には、出力側テンプレート２１０が表示される。この出力側テンプレート２１０には、行（Ｃ４，Ｃ５，Ｃ６）と列（Ｒ１，Ｒ２，Ｒ３，Ｒ４・・・）との各交点に対応して、ブロック配置可能位置（横長長方形状の小領域）が定義されている。
【００７９】
この出力側テンプレート２１０の右側縁部には、各行（Ｒ１，Ｒ２，Ｒ３，Ｒ４・・・）に対応するようにして、その行に紐付けられた端子情報が表示されている。図示の例にあっては、第１行（Ｒ１）は安全仕様を有する２個の出力端子［ＯＵＴ０／１］に割り当てられると共に、それらの出力端子のそれぞれは２個のセーフティリレーへと結線される。また、第２行（Ｒ２）は、１個の出力端子［ＯＵＴ２］に割り当てられ、この出力端子は１個のセーフティリレーへと結線される。なお、この例では、第３行（Ｒ３）及び第４行（Ｒ４）についてはそれぞれ１個の出力端子［ＯＵＴ３］，［ＯＵＴ４］に割り当てられるものの、それらの出力端子の結線先については未定とされている。
【００８０】
一方、この出力側テンプレート２１０の第４列（Ｃ４）は出力条件ファンクションブロックに割り当てられ、第５列（Ｃ５）は溶着チェック（ＥＤＭ）ファンクションブロックに割り当てられ、さらに第６列（Ｃ６）は端子モードファンクションブロックに割り当てられている。
【００８１】
このことを明らかとするために、出力側テンプレート２１０の上縁部には、各列（Ｃ４，Ｃ５，Ｃ６）にそれぞれ対応させて、その列に配置されるべきファンクションブロックを意味するインデックス２０３−４〜６が表示されている。具体的には、インデックス２０３−４の内容は、１もしくは２以上の入力信号のそれぞれの論理値がどのようなときに出力を生成すべきかを決定する出力条件ファンクションブロックであることを意味する「出力条件」とされている。また、インデックス２０３−５の内容は、出力端子に接続されるセーフティリレーの溶着チェックを行うための溶着チェック（ＥＤＭ）ファンクションブロックであることを意味する「溶着チェック（ＥＤＭ）」とされている。また、インデックス２０３−６の内容は、オンディレイやオフディレイなどの端子モードを設定する端子モードファンクションブロックであることを意味する「端子モード」とされている。
【００８２】
なお、この初期画面においては、第６列（Ｃ６）の第１行（Ｒ１）のブロック配置可能位置には、リモートＩ／Ｏファンクションブロック（ＦＢ６１）が配置されており、第２行（Ｒ２）のブロック配置可能位置にはリモートＩ／Ｏファンクションブロック（ＦＢ６２）が配置されている。
【００８３】
ここで重要な点であるが、先に説明した入力側テンプレートの場合と同様に、出力側テンプレートにおいても、各列（Ｃ４，Ｃ５，Ｃ６）は、それぞれ特定種類のファンクションブロックに割り当てられると共に、特に初段に位置する列（Ｃ４）については、出力条件ファンクションブロックに割り当てられているため、少なくとも列（Ｃ４）に出力条件ファンクションブロックが配置されている行のブロック配置可能位置には、その出力条件が成立して得られる出力信号に関するファンクションブロックが配置されることとなる。
【００８４】
そのため、このような出力側テンプレートによれば、同一の出力信号に関する処理を行うファンクションブロックについては、その出力信号を生成する出力条件ファンクションブロックが置かれた行と同一の行に配置すればよく、また同種のファンクションブロックについてはそれぞれ特定の列に配置すればよいこととなるため、先の入力側テンプレートの場合と同様に、ある出力信号経路に配置すべきファンクションブロックを別の出力信号経路に配置したり、あるいは一定の並び順で配置されるべき複数のファンクションブロックを異なる並び順で配置するといったプログラミングミスを起こし難いという利点がある。
【００８５】
さらに、本発明のプログラム開発支援装置によれば、図２１と図２６とに分離して示されるように、テンプレートの全体は、入力側テンプレート２０２と出力側テンプレート２１０とに分離して表示されることから、それらを一体に結合して表示させた場合に比べて、プログラミングミスを生じ難いという利点もある。
【００８６】
すなわち、先に説明したように、入力側又は出力側のいずれのテンプレート２０２，２１０においても、各行（Ｒ１，Ｒ２，Ｒ３，Ｒ４・・・）のそれぞれには、同一の信号に関するファンクションブロックが配列されるのであるが、これを仔細に検討すると、同じ列であっても、入力側テンプレート２０２の側と出力側テンプレート２１０の場合とでは、一方は入力信号ラインまた他方は出力信号ラインであって、信号ラインの意味づけが大きく異なることが分かる。そのため、もしも、入力側テンプレート２０２と出力側テンプレート２１０とを一体に結合して、同一行の各列にファンクションブロックを配置する場合、入力信号に関するファンクションブロックを出力信号経路に配置してしまったり、逆に出力信号経路に配置すべきファンクションブロックを入力信号経路に配置するといったプログラミングミスを生じ易くなる。
【００８７】
これに対して、本発明のように、テンプレートの全体を、入力側テンプレート２０２と出力側テンプレート２１０とに分離すれば、両者間に境界線を明示するだけであっても、ユーザはその境界線によって同一行であっても境界を境として各側の信号線の意味が異なることを理解するから、そのようなプログラミングミスを生じ難くなるのである。
【００８８】
加えて、この実施形態のように、単に入力側と出力側とに分離するのみならず、入力側テンプレート２０２と出力側テンプレート２１０とを別々の画面で択一的に表示するようにすれば、そのような入力信号経路と出力信号経路とを誤認することによるファンクションブロックの配置誤りを確実に防止することができる。
【００８９】
なお、以上説明した図２１及び図２６において、Ｄ１は画面を垂直方向へとスクロールするためのスクロールバー、Ｄ２は前の画面へと強制的に戻すための「戻る」ボタン、Ｄ３は次の画面へと強制的に進ませるための「次へ」ボタン、Ｄ４は様々なコマンドをキャンセルするためのキャンセルボタンである。
【００９０】
スクロールバーＤ１の存在からも明らかなように、入力側テンプレート２０２及び出力側テンプレート２１０は、必要とする入力端子が８点、１６点、３２点、６４点・・・といったように増加するのに合わせて、任意の長さ延長することができ、その場合にはスクロールバーＤ１の操作によって、画面から隠れた特定の行をプログラミングフィールド２００内に引き寄せることができる。
【００９１】
なお、本発明においては、以上説明した入力側テンプレート２０２及び出力側テンプレート２１０において、様々な原因によるプログラミングミスを防止するために、先に説明したセーフティロジックウィザードが採用されている。このセーフティロジックウィザードの内容については、後に図１７〜図２０の図表を参照しながら詳細に説明する。
【００９２】
図５に戻って、安全入出力端子設定の記憶が完了すると（ステップ１０２）、続いて、図２１に示されるように、セーフティロジックウィザードの適用された入力側テンプレート２０２の表示が行われ（ステップ１０３）、その後、本発明の要部であるところの入力側回路図データ生成処理（ステップ１０４）が実行される。この入力側回路図データ生成処理は、セーフティロジックウィザードの支援の下に行われる。
【００９３】
この入力側回路図データ生成処理（ステップ１０４）は、図５に示されるように、入力側テンプレート上へのＦＢ配置のためのユーザアクションが行われるたびに（ステップ１０４ａ）、予め定義した「配置列」及び「配置手順」にしたがってＦＢを配置しているかどうかを判定し（ステップ１０４ｂ）、予め定義した「配置列」及び「配置手順」にしたがってＦＢを配置している場合には（ステップ１０４ｂ  ＹＥＳ）、そのＦＢの配置内容を記憶（登録）しては（ステップ１０４ｃ）、ユーザ側のＦＢ配置継続意思を確認したのち（ステップ１０５）、次のユーザアクション（ステップ１０４ａ）を待機して同様な処理を繰り返す。一方、予め定義した「配置列」及び「配置手順」にしたがってＦＢを配置していないと判定されるときには（ステップ１０４ｂ  ＮＯ）、そのようなＦＢの配置内容の記憶（登録）を行うことなく、画面上に所定の警告表示を行う（ステップ１０４ｄ）といった処理を、ユーザの入力側のＦＢ配置継続意思が確認される限り（ステップ１０５）、繰り返すものである。
【００９４】
ここで、判定基準となる「予め定義した配置列」とは、各ファンクションブロックを入力側テンプレート２０２上のどの列に配置すべきかを定義するものであって、例えば、図１７に示されるように、安全プログラムテンプレートデータ（入力側）としてワークＲＡＭ１４に格納されたものである。
【００９５】
図１７に示されるように、この安全プログラムテンプレートデータ（入力側）は、各列（１列目、２列目、３列目・・・）毎に、その列に格納が許容されるファンクションブロックの「種別名」（入力系ファンクションブロック等）と、その「種別名」に包含される個々のファンクションブロックのリストを互いに関連づけて表形式に記憶させたものである。
【００９６】
具体的には、１列目には、入力系ファンクションブロックが格納されるべきものとされ、そのようなファンクションブロックには、不使用ファンクションブロック（Ｎｏｔ  Ｕｓｅｄ）、非常停止スイッチファンクションブロック、セーフティライトカーテンファンクションブロックが含まれる。２列目には、入力無効化ファンクションブロックが格納されるべきものとされ、この入力無効化ファンクションブロックには、不使用ファンクションブロック（Ｎｏｔ  Ｕｓｅｄ）、論理和演算ファンクションブロック（ＯＲ）、論理積及び論理和演算ファンクションブロック（ＡＮＤ＋ＯＲ）が含まれる。３列目には、セット／リセットファンクションブロックが配置されるべきものとされ、このセット／リセットファンクションブロックには、不使用ファンクションブロック（Ｎｏｔ  Ｕｓｅｄ）、マニュアルリセットファンクションブロック（Ｌｏｗ−Ｈｉｇｈ−Ｌｏｗ信号）、マニュアルリセットファンクションブロック（Ｒｉｓｉｎｇ  Ｅｄｇｅ信号）が含まれる。
【００９７】
図５へ戻って、ステップ１０４ｂの判定処理においては、ユーザアクション（１０４ａ）で指定される「列」及び具体的な「ファンクションブロック名」との組み合わせを、図１７に示される安全プログラムテンプレートデータ（入力側）と照合することによって、予め定義した「配置列」にしたがってＦＢを配置しているか否かを判断する。
【００９８】
図２１に示される入力側テンプレート２０２上において、例えば第１行（Ｒ１）の第２列（Ｃ２）のブロック配置可能位置に論理和演算ファンクションブロック（ＦＢ２１）を配置したい場合には、第１行（Ｒ１）のプルダウンボタン（ＰＢ２）をマウスでクリックする。すると、図２２（ａ）に示されるように、入力側テンプレート２０２上に重ねるようにして、メニューウィンドウ２０４が開かれる。
【００９９】
このメニューウィンドウ２０４には、上下３段にわたって３つのファンクションブロックが表示される。すなわち、これらは、入出力間導通ファンクションブロック（ＦＢ０１）、論理和演算ファンクションブロック（ＦＢ２１）、論理積及び論理和演算ファンクションブロック（ＦＢ２２）である。そして、この状態において、マウスの所定操作などによって、論理和演算ファンクションブロック（ＦＢ２１）を選択すれば、選択されたファンクションブロック（ＦＢ２１）が、第１行（Ｒ１）と第２列（Ｃ２）で特定されるブロック配置可能位置に配置される。
【０１００】
同様に、例えば、第１行（Ｒ１）の第３列（Ｃ３）に位置するブロック配置可能位置にセット／リセットファンクションブロック（ＦＢ３１）を配置したい場合には、第３列のプルダウンボタンＰＢ３を操作する。すると、図２２（ｂ）に示されるように、メニューウィンドウ２０５が開かれる。
【０１０１】
このメニューウィンドウ２０５には、上下２段にわたって選択可能なファンクションブロックが表示される。それらは、入出力間導通ファンクションブロック（ＦＢ０１）及びセット／リセットファンクションブロック（ＦＢ３１）である。この状態において、マウスのクリック操作などにより、セット／リセットファンクションブロック（ＦＢ３１）を選択すると、この選択されたファンクションブロック（ＦＢ３１）は、第１行（Ｒ１）の第１列（Ｃ３）に位置するブロック配置可能位置へと配置される。一方、この状態から入力無効化条件を設定する場合には、マウスの所定操作によって、さらに、図２３に示されるメニューウィンドウ２０６を開く。
【０１０２】
同図に示されるように、このメニューウィンドウ２０６内には、ＡＮＤ条件設定用の信号名列とＯＲ条件設定用の信号名列とが表示されると共に、それらの信号名列を構成する各信号名の先頭にはチェックボックス列２０７，２０８が表示されている。
【０１０３】
そのため、図２２（ａ）に示されるメニューウィンドウ２０４において、ＯＲ演算が選択された場合には、図２３（ａ）に示されるように、メニューウィンドウ２０６内のＡＮＤ条件設定エリア内において、マウスのクリック操作などでチェックマークを挿入する。これに対して、図２２（ａ）に示されるメニューウィンドウ２０４において、図示しないＡＮＤ演算が選択された場合には、図２３（ｂ）に示されるように、メニューウィンドウ２０６内のＡＮＤ条件領域において、該当する入力信号名のチェックボックス２０７に対してマウス操作などでチェックマークを挿入する。このような操作によって、入力無効化ファンクションブロックの選択及び入力無効化条件の設定を誰でも簡単に行うことができるのである。
【０１０４】
また、セット／リセットファンクションブロックを選択した後、リセット条件の設定を行う場合には、図２４に示されるように、メニューウィンドウ２０９を開くことによって、該当するリセット条件の設定を行う。すなわち、同図（ａ）に示されるように、メニューウィンドウ２０９内において、プルダウンボタンＤ７をマウスで操作すると、リセット条件リストが表示されるから、その中から最適なリセット条件を設定した後、同図（ｂ）に示されるように、ＯＫボタンＤ８を操作すれば、所望のリセット条件を簡単に設定することができる。なお、リセット条件をやり直すためにキャンセルするのであれば、キャンセルボタンＤ９を操作すればよい。
【０１０５】
このようにして、ファンクションブロックの選択及び各条件の設定を行った後の入力側テンプレートの一例が図２５に示されている。同図に示されるように、上述の選択及び指定操作によって、入力系ファンクションブロック、無効化条件ファンクションブロック、及びリセットファンクションブロックを希望通りに配置することができる。
【０１０６】
図５に戻って、セーフティロジックウィザードの支援の下に行われる入力側回路図データ生成処理１０４においては、予め定義した「配置手順」にしたがってＦＢを配置しているか否かの判定も行われる。ここで、予め定義した「配置手順」とは、例えば図２５におけるブロック配置例を例にとるならば、各行（Ｒ１，Ｒ２，Ｒ３・・・）に関して、並び順は同一であったとしても、配置の時間的順番については、入力端子に近いものから順に配置せねばならないという規則のことである。
【０１０７】
このように、予め定義した「配置手順」にしたがって各ＦＢが配置されるように誘導するための処理の一例が図８及び図９に示されている。これらの処理を実行するためには、現在入力側テンプレート上にどのようにファンクションブロックが配置しているかが判断されなければならない。この目的のために、図１９に示されるように、例えば、ワークＲＡＭ１４上には、ユーザにより作成されるロジック回路データ（１０ｂ）が記憶されている。
【０１０８】
同図に示されるように、このロジック回路データ（１０ｂ）内には、行と列とで特定される各ブロック可能配置位置に、現在どのようなファンクションブロックが配置されているかが記憶されている。そして、後述するように、このロジック回路データ（１０ｂ）を参照することによって、予め定義した「配置手順」にしたがってＦＢを配置しようとしているか否かの判断が行われる。
【０１０９】
無効化ＦＢの配置に際する「配置手順」の判断処理が図８のフローチャートに示されている。同図に示されるように、ユーザアクションにより配置されようとするＦＢが入力無効化ＦＢの場合、そのユーザアクションで指定される「行」について図１９に示されるロジック回路データ（１０ｂ）を参照することによって、その時点ですでに入力系ＦＢの配置が完了しているか否かの判断を行う（ステップ１０４２ａ）。
【０１１０】
ここで、入力系ＦＢの配置がすでに完了していれば（ステップ１０４２ａ  ＹＥＳ）、ユーザアクションで配置が希望される入力無効化ＦＢは、図１９に示されるロジック回路データとしてメモリ内に記憶される（ステップ１０４３ａ）。これに対して、その時点において、入力系ＦＢの配置が未だ完了していないと判定されると（ステップ１０４２ａ）、画面上には所定の警告表示が行われる（ステップ１０４４ａ）。
【０１１１】
セット／リセットＦＢを配置しようとする場合における「配置手順」の判断処理が図９に示されている。同図に示されるように、ユーザアクションによって配置希望されるＦＢがセット／リセットＦＢであるときには、まず、先の場合と同様にして、入力系ＦＢの配置が完了しているか否かの判断が行われる（ステップ１０４２ｂ）。ここで、入力系ＦＢの配置が完了しているものと判定されれば（ステップ１０４２ｂ  ＹＥＳ）、ステップ１０４３ｂへと進むのに対し、入力系ＦＢの配置がその時点において未だ完了していないものと判定されると（ステップ１０４２ｂ  ＮＯ）、画面上には所定の警告表示が行われる（ステップ１０４４ｂ）。
【０１１２】
一方、入力系ＦＢの配置が完了しているものと判定されれば（ステップ１０４２ｂ  ＹＥＳ）、さらに、入力無効化ＦＢの配置が完了しているか否かの判断が行われる（ステップ１０４３ｂ）。
【０１１３】
ここで、入力無効化ＦＢの配置がすでに完了していると判定されれば（ステップ１０４３ｂ  ＹＥＳ）、ユーザアクションによって希望されるセット／リセットＦＢは図１９に示されるように該当するブロック配置可能位置へと記憶（登録）される（ステップ１０４５ｂ）。これに対して、入力系ＦＢの配置は完了していても（ステップ１０４２ｂ  ＹＥＳ）、入力無効化ＦＢの配置が未だ完了していなければ（ステップ１０４３ｂ）、画面上には所定の警告表示が行われる（ステップ１０４６ｂ）。
【０１１４】
このように、図５に示される入力側回路図データ生成処理（ステップ１０４）においては、ユーザアクションによって何らかのファンクションブロックが配置されようとするたびに（ステップ１０４ａ）、それが予め定義した「配置列」及び「配置手順」にしたがって配置されようとしているかどうかの判断が行われ、両者が肯定される場合に限って、その希望されるＦＢの配置内容がロジック回路データ（１０ｂ）へと反映されるのに対し、「配置列」又は「配置手順」の何れかが予め定義したものでないと判定されれば（ステップ１０４ｂ  ＮＯ）、そのようなＦＢの配置は拒絶され、かつ画面上には所定の警告表示が行われるのである。
【０１１５】
そのため、このように、セーフティロジックウィザードの支援の下に行われる入力側回路図データ生成処理によれば、各ファンクションブロックのそれぞれは、適切な「配置列」及び「配置手順」をもって入力側テンプレート２０２上に正しく配置されることとなる。
【０１１６】
このようにして、入力側テンプレート２０２上に所望のファンクションブロックを全て配置したならば（ステップ１０５  ＮＯ）、図６へ移って、「次へ」ボタンＤ３を操作するユーザアクション（ステップ１０６）を待って、出力側テンプレートに関する処理へと移行する。
【０１１７】
この出力側テンプレートに関する処理においては、まず、セーフティロジックウィザードの組み込まれた出力側テンプレート２１０が、プログラミングフィールド２０１に表示される（ステップ１０７）。
【０１１８】
こうして、ウィンドウ２００内のプログラミングフィールド２０１に表示された出力側テンプレート２１０の一例が図２６に示されている。先に説明したように、この出力側テンプレートは、行（Ｒ１，Ｒ２，Ｒ３，Ｒ４・・・）と列（Ｃ４，Ｃ５，Ｃ６）との各交差点にそれぞれ対応するようにしてブロック配置可能位置（横長長方形状の領域）が定義されると共に、行方向の左側から右側へ向けて出力信号の流れが定義されている。
【０１１９】
各列（Ｃ４，Ｃ５，Ｃ６）のそれぞれは、出力信号に関する所定種別のファンクションブロックに割り当てられている。具体的に言えば、この例にあっては、初段に位置する列（Ｃ４）は出力条件ファンクションブロックに、次の列（Ｃ５）は溶着チェック（ＥＤＭ）ファンクションブロックに、さらに次の列（Ｃ６）は端子モードファンクションブロックにそれぞれ割り当てられている。
【０１２０】
図６に戻って、出力側テンプレートの表示に続いて（ステップ１０７）、セーフティロジックウィザードの支援の下に行われる出力側回路図データ生成処理（ステップ１０８）が実行される。
【０１２１】
この出力側回路図データ生成処理（ステップ１０８）は、先に説明した入力側回路図データ生成処理と同様であって、出力側テンプレート２１０上へのＦＢ配置のためのユーザアクションが行われるたびに（ステップ１０８ａ）、予め定義した「配置列」及び「配置手順」にしたがってＦＢを配置しているかの判断を行い（ステップ１０８ｂ）、その判断が肯定される場合には（ステップ１０８ｂ  ＹＥＳ）、そのようにして配置されようとするＦＢの配置内容を記憶（登録）する処理（ステップ１０８ｃ）を、出力側のＦＢ配置が継続される限り（ステップ１０９  ＹＥＳ）、繰り返す。これに対して、上記の判断が否定される場合には（ステップ１０８ｂ  ＮＯ）、そのようなＦＢの配置を拒絶すると共に、画面上に所定の警告表示を行うようにしたものである。
【０１２２】
ここで、予め定義した「配置列」にしたがってＦＢを配置しているか否かの判断は、この例にあっては、図１８に示される安全プログラムテンプレートデータ（出力側）の内容に基づいて行われる。すなわち、図１８に示されるように、この安全プログラムテンプレートデータ（出力側）は、各列毎に、その列に配置が許容されるファンクションブロックの種別名称、及びその種別名称に包含される具体的なファンクションブロックのリストとを互いに関連づけて記憶することにより構成されている。
【０１２３】
すなわち、図示の例にあっては、１列目には出力条件ファンクションブロックが配置可能とされると共に、この出力条件ファンクションブロックには不使用ファンクションブロック（Ｎｏｔ  Ｕｓｅｄ）、論理積演算ファンクションブロック（ＡＮＤ）などが含まれるように設定されている。また、第２列目には溶着チェック（ＥＤＭ）ファンクションブロックが配置可能とされると共に、この溶着チェック（ＥＤＭ）ファンクションブロックには、不使用ファンクションブロック（Ｎｏｔ  Ｕｓｅｄ）、ＥＤＭファンクションブロックなどが含まれるように設定されている。さらに、第３列目には端子モードファンクションブロックが配置可能とされると共に、この端子モードファンクションブロックには不使用ファンクションブロック（Ｎｏｔ  Ｕｓｅｄ）、マスタからの受信データ（リモートＩ／Ｏ）、ロジックからの出力、補助出力が含まれるように設定されている。
【０１２４】
ここで、マスタからの受信データとは、当該安全コントローラが通信マスタユニットを介してリモートＩ／Ｏターミナル（スレーブ）と接続されるような構成の場合、当該リモートＩ／Ｏターミナル（スレーブ）から通信マスタが受信したデータを出力することを意味している。また、ロジックからの出力とは、当該安全コントローラ内部のロジック演算による演算結果を出力することを意味している。さらに、補助出力とは、当該安全コントローラからの出力を分岐して補助出力とすることを意味している。
【０１２５】
そして、出力側テンプレート上へのＦＢ配置のための何らかのユーザアクションが検出されるたびに（ステップ１０８ａ）、そのユーザアクションにより指定される「ブロック配置可能位置」と「ファンクションブロック名」とを図１８に示される安全プログラムテンプレートデータ（出力側）と照合することによって、その配置されようとするＦＢが、予め定義した「配置列」にしたがって配置されるものであるか否かの判断を行うものである。
【０１２６】
これをより具体的に説明すると、いま仮に、図２６に示される出力側テンプレート２１０を前提として、行（Ｒ１）と列（Ｃ５）とで特定されるブロック配置可能位置に、溶着チェック（ＥＤＭ）ファンクションブロックを配置する場合を想定する。
【０１２７】
このような場合には、まず、行（Ｒ１）のプルダウンボタンＰＢ５をマウスで操作する。すると、図２７（ａ）に示されるように、出力側テンプレート２１０上に重ねるようにしてメニューウィンドウ２１１が開かれる。このメニューウィンドウ２１１内には、上下２段にわたって、２個のファンクションブロックが表示されている。すなわち、それらは、出力側分岐ファンクションブロックＦＢ５１とＥＤＭファンクションブロックＦＢ５２である。ここでユーザは、マウス操作で、ＥＤＭファンクションブロック（ＦＢ５２）を選択する。すると、この選択されたファンクションブロック（ＦＢ５２）は、行（Ｒ１）と列（Ｃ５）とで特定されるブロック配置可能位置に配置される。
【０１２８】
また、このＥＤＭファンクションブロック（ＦＢ５２）について、溶着チェック（ＥＤＭ）フィードバックを設定する場合には、所定のマウス操作によって、図２７（ｂ）に示されるように、メニューウィンドウ２１２を開く。このメニューウィンドウ２１２内には、プルダウンボタンＤ１０、ＯＫボタンＤ１１、キャンセルボタンＤ１２が配置されている。この状態において、ユーザは、プルダウンボタンＤ１０をマウスで操作することによって、フィードバック信号リストを表示させ、その中から所望のフィードバック信号を選択し、ＯＫボタンＤ１１の操作でこれを確定する。図２７（ｂ）の例では、フィードバック信号として、入力信号ＩＮ７が選択設定される。
【０１２９】
また、行（Ｒ１）と列（Ｃ６）とで特定されるブロック配置可能位置に二重化処理されたリモートＩ／Ｏファンクションブロックを配置する場合には、行（Ｒ１）と列（Ｃ６）とで特定されるブロック配置可能位置の右側に位置するプルダウンボタンＰＢ６をマウスで操作する。すると、図２８（ａ）に示されるように、出力側テンプレート２１０に重ねるようにして所定のメニューウィンドウ２１３が開かれる。
【０１３０】
このメニューウィンドウ２１３内には、上下２段に２個のファンクションブロックが表示される。それらのファンクションブロックは、この例にあっては、二重化対応のリモートＩ／Ｏファンクションブロック（ＦＢ６１）と非二重化対応のロジックファンクションブロック（ＦＢ６２）である。
【０１３１】
ここでユーザは、マウスの操作で、メニュー上から、二重化対応のリモートＩ／Ｏファンクションブロック（ＦＢ６１）を選択する。すると、選択されたファンクションブロック（ＦＢ６１）は、行（Ｒ１）と列（Ｃ６）とで特定されるブロック配置可能位置に配置される。
【０１３２】
さらに、行（Ｒ２）と列（Ｃ６）とで特定されるブロック配置可能位置に二重化非対応のロジックファンクションブロック（ＦＢ６４）を配置する場合には、そのブロック配置可能位置の右側に位置するプルダウンボタンＰＢ６をマウスで操作する。すると、図２８（ｂ）に示されるように、出力側テンプレート２１０に重なるようにしてメニューウィンドウ２１４が開かれる。
【０１３３】
このメニューウィンドウ２１４内には、上下３段にわたって３個のファンクションブロックが表示されている。それらは、二重化非対応のリモートＩ／Ｏファンクションブロック（ＦＢ６３）、二重化非対応のロジックファンクションブロック（ＦＢ６４）、及び補助出力ファンクションブロック（ＦＢ６５）である。ここで、ユーザは、二重化非対応のロジックファンクションブロック（ＦＢ６４）を選択する。すると、選択されたファンクションブロック（ＦＢ６４）は、行（Ｒ２）と列（Ｃ６）とで特定されるブロック配置可能位置に配置される。
【０１３４】
出力条件ファンクションブロックの選択並びに設定についても、図２７（ａ）に示される溶着チェック（ＥＤＭ）ファンクションブロック（ＦＢ５２）の場合と同様にして、メニューウィンドウを用いた選択設定により行われるのであるが、このようにして選択設定された出力条件ファンクションブロックについて、さらに出力条件の設定を行うに際しては、この実施形態においては、さらにユーザの使い勝手を考慮した優れた機能が備えられている。
【０１３５】
すなわち、図３０に示されるように、選択設定された出力条件ファンクションブロックについて出力条件を設定する場合には、マウスによる所定操作に応答して出力条件設定用ウィンドウ２１５が開かれるようになっている。この出力条件設定用ウィンドウ２１５内には、出力条件であるＡＮＤ条件の入力候補となる入力信号名が一連に表示されると共に、各入力信号名の頭には、チェックボックス２１６が設けられる。
【０１３６】
そして、出力条件となる入力信号の選択は、このチェックボックス２１６内にマウスを用いて所定のチェックマークを挿入するだけで行うことができる。この選択を確定するためには、ＯＫボタンＤ１３をマウスで操作するだけでよく、逆に設定を解除するためにはキャンセルボタンＤ１４をマウスで操作すればよいのである。
【０１３７】
このようにして、端子モードＦＢ、出力条件ＦＢ、及び溶着チェックＦＢがそれぞれ配置された出力側テンプレートの状態が図２９に示されている。同図から明らかなように、上述の選択設定処理によって、各指定されたブロック配置可能位置には、選択されたファンクションブロック（ＦＢ６２，ＦＢ６５，ＦＢ５２，ＦＢ４１）がそれぞれ配置されていることが理解されるであろう。
【０１３８】
最後に、入力側テンプレートにおけるＦＢ配置完了時の確認用画面の説明図が図３１に、また出力側テンプレートにおけるＦＢ配置完了時の確認用画面の説明図が図３２にそれぞれ示されている。それらの図から明らかなように、以上の各ファンクションブロック選択並びに設定操作を繰り返すことによって、入力側テンプレート並びに出力側テンプレート上には必要なファンクションブロックが必要な位置に適切に配置されるのである。
【０１３９】
この状態において、所定の完了ボタンを操作することにより、作成された回路図が確定すると共に、先に図７を参照して説明したデータ変換処理（ステップ１１１〜１１３）並びにダウンロードパラメータ生成処理（ステップ１１４）が実行されて、最終的に安全コントローラ用の制御プログラムが生成されるのである。
【０１４０】
このように、図６のフローチャートに示される出力側回路図データ生成処理（ステップ１０８）においては、予め定義した「配置列」にしたがってＦＢを配置しているか否かの判断が行われ、予め定義した「配置列」にしたがってＦＢが配置されていると判定された場合に限り（ステップ１０８ｂ  ＹＥＳ）、その配置が希望されるＦＢの配置内容が記憶（登録）されて、図１９に示されるロジック回路データ（１０ｂ）が生成される。
【０１４１】
次に、予め定義した「配置手順」にしたがってＦＢが配置されているか否かの判断処理について説明する。ここで、予め定義した「配置手順」とは、この例にあっては、各行（Ｒ１，Ｒ２，Ｒ３，・・・）ごとに、出力端子に近い側から順に各ファンクションブロックを配置することを意味している。
【０１４２】
このような判断処理を行うためには、入力側テンプレートの場合と同様にして、図１９に示されるロジック回路データ（１０ｂ）が参照される。先に説明したように、このロジック回路データ（１０ｂ）には、各行の各列に対応するブロック配置可能位置に現在どのようなファンクションブロックが配置されているかの情報を記憶されている。
【０１４３】
図６に示される出力側回路図データ生成処理（ステップ１０８）内の判断処理１０８ｂにおいては、このロジック回路データ（１０ｂ）を参照することによって、配置を要求されるファンクションブロックの種別ごとに、それが予め定義した「配置手順」にしたがってＦＢを配置するものであるか否かの判断が行われる。
【０１４４】
各ファンクションブロック種別毎の具体的な「配置手順」判断処理の詳細が図１０〜図１２に示されている。まず、端子モードファンクションブロックに対応する処理を図１０のフローチャートを参照して説明する。
【０１４５】
端子モードＦＢの配置のためのユーザアクションが行われると（ステップ１０８１ａ）、配置要求された「行」に関して、その時点において、既に出力条件ＦＢの配置が完了しているか否かの判定が行われ（ステップ１０８２ａ）、既に出力条件ＦＢの配置が完了しているときには（ステップ１０８２ａ  ＹＥＳ）、当該配置要求された端子モードＦＢの記憶（登録）が行われるのに対して（ステップ１０８３ａ）、出力条件ＦＢの配置が未だ完了していない場合には（ステップ１０８２ａ  ＮＯ）、画面上には所定の警告表示が行われる（ステップ１０８４ａ）。
【０１４６】
ＥＤＭファンクションブロックに対応する処理の詳細が図１１のフローチャートに示されている。同図に示されるように、ＥＤＭ・ＦＢの配置のためのユーザアクションが行われると（ステップ１０８１ｂ）、その配置要求された「行」に関して、その時点において、出力条件ＦＢの配置が既に完了しているか否かの判定が行われ（ステップ１０８２ｂ）、既に完了しているものと判定されれば（ステップ１０８２ｂ  ＹＥＳ）、続いて、端子モードＦＢの配置が完了しているか否かの判定が行われ（ステップ１０８３ｂ）、ここで既に完了していると判定された場合に限り（ステップ１０８３ｂ）、配置要求された溶着チェック（ＥＤＭ）ＦＢの記憶（登録）が行われる（ステップ１０８５ｂ）。
【０１４７】
これに対して、出力条件ＦＢの配置が未だ完了していないと判定されたり（ステップ１０８２ｂ）、あるいは端子モードＦＢの配置が未だ完了していないと判定された場合には（ステップ１０８３ｂ  ＮＯ）、それぞれ画面上に所定の警告表示が行われる（ステップ１０８４ｂ，１０８６ｂ）。
【０１４８】
出力条件ファンクションブロックに対応する処理が図１２のフローチャートに示されている。出力条件の設定のためのユーザアクションが行われると（ステップ１０８１ｃ）、出力条件ＦＢの配置が完了しているか否か（ステップ１０８２ｃ）、端子モードＦＢの配置が完了しているか（ステップ１０８３ｃ）、及びＥＤＭ・ＦＢの配置が完了しているか否か（ステップ１０８５ｃ）の判断が行われ、それらが何れも肯定された場合に限り（ステップ１０８２ｃ  ＹＥＳ、１０８３ｃ  ＹＥＳ、１０８５ｃ  ＹＥＳ）、配置要求されたＥＤＭ・ＦＢの記憶（登録）が行われる（ステップ１０８７ｃ）。
【０１４９】
これに対して、それらの判断のいずれかが否定された場合には（ステップ１０８２ｃ  ＮＯ、１０８３ｃ  ＮＯ、又は１０８５ｃ  ＮＯ）、画面上には所定の警告表示が行われる（ステップ１０８４ｃ、１０８６ｃ、又は１０８８ｃ）。端子モードＦＢ未配置にも拘わらず、出力条件ＦＢ、溶着チェック（ＥＤＭ）ＦＢを配置しようとした時の表示例が図３３に示されている。同図に示されるように、このような場合、出力側ファンクションブロックに重ねるようにして、警告ウィンドウ２１７が開かれ、ユーザに対して「端子モードをロジックに設定して下さい」なるメッセージが伝えられ、これに対してＯＫボタンＤ１５を操作することにより、システム側との対話が可能となされている。
【０１５０】
このように、これらの「配置手順」判断処理においては、何れかの「行」に関して、何らかのファンクションブロックの配置が要求された場合には、その行において出力端子に近い側のブロック配置可能位置に予定されたファンクションブロックが既に配置されていることを条件として、そのファンクションブロックの配置を許容するように制御が行われる。
【０１５１】
図６に戻って、このようにして、出力側テンプレート２１０上に必要なファンクションブロックの配置が完了したならば（ステップ１０９  ＮＯ）、「次へ」ボタンＤ３の操作に相当するユーザアクション（ステップ１１０）を待って、以上のファンクションブロック配置操作で生成された図１９に示されるロジック回路データ（１０ｂ）は、全ファンクションブロックに関して、安全コントローラが解読可能なデータ形式に変換され（ステップ１１１〜１１３）、それら変換されたデータを集合することによって、ダウンロードパラメータ（安全コントローラ用制御プログラム）が生成される（ステップ１１４）。
【０１５２】
こうして生成されたダウンロードパラメータは、従来と同様、通信を介して又は可搬型記録媒体を介して、目的とする安全コントローラへとインストールされることとなる。
【０１５３】
以上、図５〜図１２を参照して説明した第１実施形態のソフトウェア構成によれば、ファンクションブロック配置用のテンプレートの全体は、入力側テンプレート２０２と出力側テンプレート２１０とに分離されているため、各テンプレート２０２，２１０内の信号経路は、入力信号経路又は出力信号経路に統一されるため、入力信号経路に出力信号対応のファンクションブロックを配置したり、逆に出力信号経路に入力信号対応のファンクションブロックを配置するといったファンクションブロック配置誤りを生じ難い。
【０１５４】
また、入力側テンプレート２０２並びに出力側テンプレート２１０の何れにおいても、各行には同一の入力信号又は出力信号の経路が存在することとなるため、同一の入力信号又は出力信号に関するファンクションブロックについては各ファンクションテーブル内において同一の行に配置しておきさえすれば、ある信号経路に配置されるべきファンクションブロックを誤って別の信号経路に配置するといったプログラミングミスを生じ難いという利点もある。
【０１５５】
また、プログラミングフィールド２０１上には、入力側テンプレート２０２と出力側テンプレート２１０とが択一的に表示されるため、それらを分離しつつも１画面に同時に表示する場合に比べて、上述のプログラミングミスを一層生じ難い。
【０１５６】
また、プログラミングフィールド２０１上に入力側テンプレート２０２と出力側テンプレート２１０とを択一的に表示するに際しては、入力側テンプレート２０２の表示が先でかつ出力側テンプレート２１０の表示が後となるようにしているため、そのような表示手順に従うだけで、ユーザは、入力側テンプレート２０２上のファンクションブロックの配置を完了してから、出力側テンプレート２１０上のファンクションブロックの配置を行うこととなり、一般に出力側テンプレート上のファンクションブロックの配置並びにパラメータ設定には、それよりも先に入力側テンプレート上のファンクションブロックの配置並びにパラメータの設定が必要であることを考慮すると、これによってもプログラミングミスを生じ難いという利点もある。
【０１５７】
加えて、ファンクションブロックを何れかのブロック配置可能位置に配置するに際しては、まず第１には、そのファンクションブロックをその種別に応じて予め定義された「配置列」へと誘導するセーフティロジックウィザードの仕組みが組み込まれているため、このセーフティロジックウィザードの作用によって、１の信号経路内において、複数のファンクションブロックが誤った並びで配列されるといったプログラミングミスは生ずる余地がない。
【０１５８】
一方、そのようなセーフティロジックウィザードの作用によって、同一種別のファンクションブロックは必ず同一列に配置されることとなるため、何れかの行においてファンクションブロックを誤って配置し忘れたような場合には、列単位でファンクションブロックの抜けている箇所を探すだけで、この種の安全プログラムの検証を容易に行うことができる。
【０１５９】
また、ファンクションブロックを入力側又は出力側のテンプレート上に配置するに際しては、第２としては、各ファンクションブロック種別毎に予め定義された「配置手順」へと誘導するセーフティロジックウィザードが作用するため、入力側テンプレート又は出力側テンプレートの何れにおいても、「配置列」のみならず「配置手順」についても、適切な順番に誘導されることとなり、時間的配置順番の誤りに起因するプログラミングミスについても生ずる余地がない。
【０１６０】
次に、本発明に係るプログラム開発支援装置（第２実施形態）のソフトウェア構成を示すフローチャートが図１３及び図１４に示されている。前述したように、フローチャートに示されるアプリケーションプログラムは図３のプログラムメモリ１５ｃに格納されており、ＣＰＵ１１によって統括して実行処理される。この第２実施形態においては、図１３に示されるように、入力側テンプレートについては、予め定義した「配置列」及び「配置手順」にしたがってＦＢを配置しているか否かの判断を含むセーフティロジックウィザードを採用するものの（ステップ２０４）、図１４に示されるように、出力側テンプレートについては、「配置列」の制約下におけるＦＢの配置内容記憶は行うものの（ステップ２０９）、「配置手順」の制約下におけるＦＢの配置内容記憶は採用されていない（ステップ２０９）。
【０１６１】
このように、入力側テンプレートに関してのみ、「配置列」及び「配置手順」の制約下におけるＦＢの配置内容記憶処理（ステップ２０４ｃ）を実行するようにしても、プログラミングミスの発生を十分に抑制することができる。
【０１６２】
プログラム開発支援装置（第３実施形態）のソフトウェア構成を示すフローチャートが図１５及び図１６に示されている。これらのフローチャートに示されるアプリケーションプログラムは図３のプログラムメモリ１５ｃに格納されており、ＣＰＵ１１によって統括して実行処理される。この第３実施形態においては、図１５及び図１６を参照して明らかなように、入力側回路図データの作成処理並びに出力側回路図データの作成処理の何れについても、「配置列」の制約下におけるＦＢの配置内容記憶（ステップ３０５，３１０）は行うものの、「配置手順」の制約下におけるＦＢの配置内容記憶については行わないようにしている。このような構成によっても、プログラミングミスを十分に抑制することができる。
【０１６３】
このように、以上説明した各実施形態のプログラム開発支援装置によれば、図３４に示されるように、テンプレートの全体は入力側テンプレートと出力側テンプレートとに分離されることから、各テンプレート内においては、同一信号に関する信号経路は同一行に存在することとなる。
【０１６４】
また、各テンプレート内の各列（Ｃ１〜Ｃ６）のそれぞれには、同一種別のファンクションブロックがセーフティロジックウィザードの作用によって配置されるように導かれることとなる。しかも、そのようなセーフティロジックウィザードの作用によって、同種別のファンクションブロックについては、同一列にひとりでに配列されるため、何れかのファンクションブロックを配置し忘れたような場合にも、プログラム完成後においては、各列ごとにファンクションブロックの有無をチェックし、何れかの行にファンクションブロックが存在しなければ、その部分を集中的にチェックすることによって、この種の安全コントローラ用制御プログラムのデバッグを簡単に行うことが可能となる。
【０１６５】
そのため、このような入力側テンプレート又は出力側テンプレートの構造によれば、同一信号に関するファンクションブロックについては同一行に配置するといった習慣づけを行うだけで、同一信号経路に配置されるべきファンクションブロックを別の信号経路に誤って配置したり、入力信号経路に配置すべきファンクションブロックを出力信号経路に配置するといったプログラミングミスを確実に防止することができる。
【０１６６】
また、単に２つに分離するのみならず、出力側テンプレートに先立って入力側テンプレートをユーザに提示することにより、出力側テンプレート上のファンクションブロックを配置する段においては、既に入力側テンプレート上のファンクションブロックの配置が完了していることとなるから、これによってもユーザによるプログラミングミスを未然に防止することができる。
【０１６７】
さらに、何れかの行について何らかのファンクションブロックを配置するについては、入力側テンプレートについては、矢印ＡＲ１に示されるように、入力端子側から順に配置されるように誘導されると共に、出力側テンプレートについては、矢印ＡＲ２に示されるように、出力端子側から順に配置するように誘導されるため、このような誘導に従う限り、個々のファンクションブロックの配置される段階では、そのファンクションブロックの設定に必要な他のファンクションブロックについては必ずそれよりも先に配置が完了していることとなり、これによってもプログラミングミスを確実に防止することができる。
【産業上の利用可能性】
【０１６８】
この発明によれば、プログラミングミスが生じ難く、かつそのようなプログラミングミスが生じた場合には、そのことをファンクションブロックのレイアウトから容易に発見することが可能な安全コントローラのプログラム開発支援装置を提供することができる。
【図面の簡単な説明】
【０１６９】
【図１】安全コントローラを含む安全制御システムを示す概念図である。
【図２】プログラム開発支援装置の機能を概念的に示すブロック図である。
【図３】プログラム開発支援装置の電気的なハードウェア構成を示す概略ブロック図である。
【図４】安全コントローラの電気的なハードウェア構成を示す概略ブロック図である。
【図５】プログラム開発支援装置（第１実施形態）のソフトウェア構成を示すフローチャート（その１）である。
【図６】プログラム開発支援装置（第１実施形態）のソフトウェア構成を示すフローチャート（その２）である。
【図７】プログラム開発支援装置（第１実施形態）のソフトウェア構成を示すフローチャート（その３）である。
【図８】入力側回路図データ生成処理の詳細フローチャート（無効化・ファンクションブロックに対応する処理）である。
【図９】入力側回路図データ生成処理の詳細フローチャート（セット・リセット・ファンクションブロックに対応する処理）である。
【図１０】出力側回路図データ生成処理の詳細フローチャート（端子モード・ファンクションブロックに対応する）である。
【図１１】出力側回路図データ生成処理の詳細フローチャート（ＥＤＭ・ファンクションブロックに対応する処理）である。
【図１２】出力側回路図データ生成処理の詳細フローチャート（出力条件・ファンクションブロックに対応する処理）である。
【図１３】プログラム開発支援装置（第２実施形態）のソフトウェア構成を示すフローチャート（その１）である。
【図１４】プログラム開発支援装置（第２実施形態）のソフトウェア構成を示すフローチャート（その２）である。
【図１５】プログラム開発支援装置（第３実施形態）のソフトウェア構成を示すフローチャート（その１）である。
【図１６】プログラム開発支援装置（第３実施形態）のソフトウェア構成を示すフローチャート（その２）である。
【図１７】安全プログラムテンプレートデータ（入力側）の一例を示す説明図である。
【図１８】安全プログラムテンプレートデータ（出力側）の一例を示す説明図である。
【図１９】ユーザにより作成されたロジック回路データ（１０ｂ）の一例を示す説明図である。
【図２０】安全コントローラへダウンロードされる設定パラメータデータ（制御プログラム）の一例を示す説明図である。
【図２１】入力側テンプレートにおけるＦＢ配置開始初期の画面説明図である。
【図２２】ＦＢ選択用メニューウィンドウの説明図である。
【図２３】入力無効化条件設定用メニューウィンドウの説明図である。
【図２４】リセット条件設定用メニューウィンドウの説明図である。
【図２５】入力ＦＢ、無効化条件ＦＢ、及びリセットＦＢが配置された入力側テンプレートの画面説明図である。
【図２６】出力側テンプレートにおけるＦＢ配置設定開始初期の画面説明図である。
【図２７】溶着チェックに関する各種メニューウィンドウの画面説明図である。
【図２８】端子モード設定用メニューウィンドウの説明図である。
【図２９】端子モードＦＢ、出力条件ＦＢ、及び溶着チェックＦＢが配置された出力側テンプレートの画面説明図である。
【図３０】出力条件設定用ウィンドウの説明図である。
【図３１】入力側テンプレートにおけるＦＢ配置完了時の確認用画面説明図である。
【図３２】出力側テンプレートにおけるＦＢ配置完了時の確認用画面説明図である。
【図３３】ＦＢの配置手順を誤った時に提示される警告ウィンドウの画面説明図である。
【図３４】各ＦＢの好ましい配置例及び配置手順の説明図である。
【図３５】プログラム開発支援装置（第１従来例）によるロジック回路図表示例である。
【図３６】プログラム開発支援装置（第２従来例）によるロジック回路図表示例である。
【符号の説明】
【０１７０】
１      安全コントローラ
１ａ    設定パラメータ
２ａ    バス型ネットワーク
２ｂ    直結型ネットワーク
３      入力機器
４      出力機器
５      安全Ｉ／Ｏターミナル
６      ユーザ
１０    プログラム開発支援装置
１０ａ  セーフティロジックウィザードデータベース（ＤＢ）
１０ｂ  ロジック回路図データ
１０ｃ  コンパイラ
１０ｄ  設定パラメータ
１１    ＣＰＵ
１２    入力操作部
１３    画像表示部
１４    ワークＲＡＭ
１５    記憶装置
１５ａ  出力イメージメモリ
１５ｂ  システムメモリ
１５ｃ  プログラムメモリ
１６    通信部
１７    システムバス
１０１  通信インタフェース部
１０２  中央演算部
１０３ａ  入力側の端子異常診断部
１０３ｂ  出力側の端子異常診断部
１０４ａ  入力端子部
１０４ｂ  出力端子部
２００  ウィンドウ
２０１  プログラミングフィールド
２０２  入力側テンプレート
２０３−１〜２０３−６  インデックス
２０４  メニューウィンドウ
２０５  メニューウィンドウ
２０６  メニューウィンドウ
２０７  チェックボックス
２０８  チェックボックス
２０９  メニューウィンドウ
２１０  出力側テンプレート
２１１  メニューウィンドウ
２１３  メニューウィンドウ
２１４  メニューウィンドウ
２１５  メニューウィンドウ
２１６  チェックボックス
２１７  警告ウィンドウ
ＡＲ１  入力側テンプレートの配置手順を示す矢印
ＡＲ２  出力側テンプレートの配置手順を示す矢印
Ｃ１〜Ｃ６  列
Ｄ１    スクロールバー
Ｄ２    戻りボタン
Ｄ３    進みボタン
Ｄ４    キャンセルボタン
Ｄ５    ＯＫボタン
Ｄ６    キャンセルボタン
Ｄ７    プルダウンボタン
Ｄ８    ＯＫボタン
Ｄ９    キャンセルボタン
Ｄ１０  プルダウンボタン
Ｄ１１  ＯＫボタン
Ｄ１２  キャンセルボタン
Ｄ１３  ＯＫボタン
Ｄ１４  キャンセルボタン
Ｄ１５  ＯＫボタン
ＦＢ０１  入出力導通ファンクションブロック
ＦＢ１１  セーフティ非常停止スイッチファンクションブロック
ＦＢ１２  二重化対応のセーフティライトカーテンファンクションブロック
ＦＢ１３  二重化非対応のセーフティライトカーテン
ＦＢ２１  論理和演算ファンクションブロック
ＦＢ２２  論理積及び論理和演算ファンクションブロック
ＦＢ３１  セット／リセットファンクションブロック
ＦＢ５２  溶着チェック（ＥＤＭ）ファンクションブロック
ＦＢ６１  二重化対応のリモートＩ／Ｏファンクションブロック
ＦＢ６２  二重化対応のロジックファンクションブロック
ＦＢ６３  二重化非対応のリモートＩ／Ｏファンクションブロック
ＦＢ６４  二重化非対応のロジックファンクションブロック
ＦＢ６５  補助出力ファンクションブロック
ＰＢ２，ＰＢ３  プルダウンボタン
Ｒ１，Ｒ２，Ｒ３，Ｒ４  行
【図１】
2008310479.tif 000003
【図２】
2008310479.tif 000004
【図３】
2008310479.tif 000005
【図４】
2008310479.tif 000006
【図５】
2008310479.tif 000007
【図６】
2008310479.tif 000008
【図７】
2008310479.tif 000009
【図８】
2008310479.tif 000010
【図９】
2008310479.tif 000011
【図１０】
2008310479.tif 000012
【図１１】
2008310479.tif 000013
【図１２】
2008310479.tif 000014
【図１３】
2008310479.tif 000015
【図１４】
2008310479.tif 000016
【図１５】
2008310479.tif 000017
【図１６】
2008310479.tif 000018
【図１７】
2008310479.tif 000019
【図１８】
2008310479.tif 000020
【図１９】
2008310479.tif 000021
【図２０】
2008310479.tif 000022
【図２１】
2008310479.tif 000023
【図２２】
2008310479.tif 000024
【図２３】
2008310479.tif 000025
【図２４】
2008310479.tif 000026
【図２５】
2008310479.tif 000027
【図２６】
2008310479.tif 000028
【図２７】
2008310479.tif 000029
【図２８】
2008310479.tif 000030
【図２９】
2008310479.tif 000031
【図３０】
2008310479.tif 000032
【図３１】
2008310479.tif 000033
【図３２】
2008310479.tif 000034
【図３３】
2008310479.tif 000035
【図３４】
2008310479.tif 000036
【図３５】
2008310479.tif 000037
【図３６】
2008310479.tif 000038