(57)【特許請求の範囲】
【請求項１】
所定の状態を随時検出する安全機器が接続されるＩ／Ｏモジュールと、前記Ｉ／Ｏモジュールを管理する安全プログラムを実行するＣＰＵモジュールと、前記各モジュール間を互いに接続する連絡手段とを備えた安全ＰＬＣにおいて、
前記Ｉ／Ｏモジュールは、
接続可能な前記安全機器が有する具体的な接続仕様に個別に対応する様にそれぞれ構成されており、
前記ＣＰＵモジュールは、
各前記安全機器からの入力信号に応じて決定されるべき出力信号を算出する各ラダー回路を前記接続仕様別にプログラム化した複数種類のファンクション・ブロックを記憶するファンクション・ブロック記憶手段と、
前記連絡手段に接続された前記Ｉ／ＯモジュールのＩＤ番号を読み出すＩＤ番号取得手段と、
読み出された前記ＩＤ番号に基づいて、前記ファンクション・ブロック記憶手段から引き当てられた前記ファンクション・ブロックを順次連結することにより前記安全プログラムを自動的に生成するプログラム連結手段と
を有する
ことを特徴とする安全ＰＬＣ。
【請求項２】
前記安全プログラムが参照または更新可能な所定の引数領域上に前記ファンクション・ブロックが出力する出力情報の１つを、その他の少なくとも１つの前記ファンクション・ブロックの入力情報とすることによって、複数の前記ファンクション・ブロックの間をカスケード接続する
ことを特徴とする請求項１に記載の安全ＰＬＣ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、所定の状態を随時検出する、例えば緊急停止スイッチやライトカーテンなどの安全機器が接続されたＩ／Ｏモジュールや、これらのＩ／Ｏモジュールを介して各安全機器を制御する安全プログラムを実行するＣＰＵモジュールなどを備えた安全ＰＬＣに関し、特にその安全プログラムを自動生成するための手段に関する。
【背景技術】
【０００２】
近年では、ＰＬＣ（プログラマブルコントローラ）によるシステム制御において、安全機能の導入が一般化されつつある。ここで言う安全機能とは、例えばＣＰＵ（ＭＰＵ）その他の各処理部等を二重化してそれらの処理結果が正しく出力されるようにする機能や、システムが危険な状態になった場合に所定のフェイルセーフ動作に基づいてそのシステムを安全に停止させる機能等のことである。また、システムの危険な状態としては、例えば緊急停止スイッチが押下された時の状態や、ライトカーテンなどのセンサが人の進入を検出した時の状態等を考えることができる。
この様なシステムを構成するために導入される安全ＰＬＣとしては、例えば下記の特許文献１に記載されているもの等が公知である。
【０００３】
安全プログラムの製造規格としては、例えばＩＥＣ等の安全規格があり、それらの規格を満たす安全プログラムを製造するためには、安全プログラムに関する高度な専門知識が必要となる。
【０００４】
一方、一般のＰＬＣ（プログラマブルコントローラ）のシーケンスプログラムの開発コストや生産性に係わる問題を軽減するために、例えば下記の特許文献２に記載されているプログラミング装置等が提案されている。
【特許文献１】特開２００２−３５８１０６
【特許文献２】特開平１１−３１０５
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献２に記載されている従来のプログラミング装置は、ラダー言語やＣ言語などの高級言語で記載されたユーザプログラム（シーケンスプログラム）を処理するものであるので、ユーザはそれらのユーザプログラムを用意しなくてはならないのが現状である。
また、これらのシーケンスプログラム（安全プログラム）を製造するためには、所定の安全規格に関する高度に専門的な知識や、安全プログラムの製造に係わる豊富な経験等が必要となり、多大な時間と高い製造コストを要する。
【０００６】
本発明は、上記の課題を解決するために成されたものであり、その目的は、ユーザが安全プログラムの構成を具体的に意識する必要がない安全ＰＬＣを提供することである。
【課題を解決するための手段】
【０００７】
上記の課題を解決するためには、以下の手段が有効である。
即ち、本発明の第１の手段は、所定の状態を随時検出する安全機器が接続されるＩ／Ｏモジュールと、このＩ／Ｏモジュールを管理する安全プログラムを実行するＣＰＵモジュールと、これらの各モジュール間を互いに接続する連絡手段とを備えた安全ＰＬＣにおいて、接続可能な前記安全機器が有する具体的な接続仕様に個別に対応する様に上記の各Ｉ／Ｏモジュールをそれぞれ構成し、一方、上記のＣＰＵモジュールには、各安全機器からの入力信号に応じて決定されるべき出力信号を算出する各ラダー回路を上記の接続仕様別にプログラム化した複数種類のファンクション・ブロックを記憶するファンクション・ブロック記憶手段と、上記の連絡手段に接続された各Ｉ／ＯモジュールのＩＤ番号を読み出すＩＤ番号取得手段と、この読み出されたＩＤ番号に基づいて、上記のファンクション・ブロック記憶手段から引き当てられた各ファンクション・ブロックを順次連結することにより、上記の安全プログラムを自動的に生成するプログラム連結手段とを備えることである。
ただし、上記のＩＤ番号は、各Ｉ／Ｏモジュールの種別を判別するためのものであり、各Ｉ／Ｏモジュール毎に記憶されている。
【０００８】
また、本発明の第２の手段は、上記の第１の手段において、安全プログラムが参照または更新可能な所定の引数領域上にファンクション・ブロックが出力する出力情報の１つを、その他の少なくとも１つのファンクション・ブロックの入力情報とすることによって、複数のファンクション・ブロックの間をカスケード接続することである。
以上の本発明の手段により、前記の課題を効果的、或いは合理的に解決することができる。
【発明の効果】
【０００９】
以上の本発明の手段によって得られる効果は以下の通りである。
即ち、本発明の第１の手段によれば、各安全機器を用いて実現される各安全機能毎に設けられるＩ／Ｏモジュールの具体的な種別に対して、それぞれ個別に用意されたファンクション・ブロックが、上記のＩＤ番号によってそれぞれ一意に決定されるので、それらの各ファンクション・ブロックを順次連結することにより、所望の安全プログラムを自動的に生成することができる。
したがって、本発明の第１の手段によれば、ユーザが安全プログラムの構成を具体的に意識する必要がない安全ＰＬＣを提供することができる。
【００１０】
また、本発明の第２の手段によれば、あるファンクション・ブロックが上記の引数領域に出力する出力情報の１つがその他のファンクション・ブロックにそのまま入力されるので、任意のファンクション・ブロックの間を簡単にカスケード接続することができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明を具体的な実施例に基づいて説明する。
ただし、本発明の実施形態は、以下に示す個々の実施例に限定されるものではない。
【実施例１】
【００１２】
図１に本実施例１の安全ＰＬＣ１００の論理的な構成図を示す。この安全ＰＬＣ１００は、電源モジュール１０１と、Ｉ／Ｏモジュールを管理する安全プログラムを実行するＣＰＵモジュール１１０と、標準装備のＩ／Ｏモジュール１２０と、オプション装備のＩ／Ｏモジュール１３０から構成されている。以下、標準装備のＩ／Ｏモジュール１２０のことをマスターモジュール１２０と言う。このマスターモジュール１２０には、緊急停止機能やサーボ電源ｏｎ／ｏｆｆ制御機能などの安全機能が標準装備される。
【００１３】
各Ｉ／Ｏモジュールには、安全性に係わる所定の状態を随時検出する安全機器が接続される。また、各Ｉ／Ｏモジュールは何れも、接続可能な安全機器が有する具体的な接続仕様に個別に対応する様にそれぞれ個別の仕様で構成されている。それらの安全機器としては、例えば、二重化された緊急停止ボタン、ライトカーテン、ドアロックセンサ、マットスイッチ、レーザースキャナーなどの各種の検出装置が考えられる。
【００１４】
これらの安全機器（検出装置など）に対する入出力は、本図１の外部入力接点及び外部出力接点を入出力インターフェイスにして行われる。例えばマスターモジュール１２０の外部入力接点の数は４つあり、マスターモジュール１２０の外部出力接点の数は３つある。
また、これらの各モジュールには、それぞれ何れにもＭＰＵ（マイクロ演算処理装置）やＲＯＭ，ＲＡＭ、入出力インターフェイスなどが具備されており、各モジュール間は、図２に示す様に入出力バス１０２（連結手段）で接続されている。
【００１５】
図２に、ＣＰＵモジュール１１０の論理的な構成を示す。上記のＣＰＵモジュール１１０には、ＩＤ番号取得手段１１１と、プログラム連結手段１１２と、ファンクション・ブロック記憶手段１１３と、Ｉ／Ｏ領域１１４などが具備されている。例えば、Ｉ／Ｏ領域１１４は、主記憶装置上のプリフィックス領域上に設けられた、入出力データ用のバッファ領域であり、このＩ／Ｏ領域１１４上の入出力データは、入出力バス１０２の動作時には、その動作に基づいて他のモジュール（Ｉ／Ｏモジュール１２０，１３０）から参照または更新される。
【００１６】
また、ファンクション・ブロック記憶手段１１３は、各安全機器からの入力信号に応じて決定されるべき出力信号を算出する各ラダー回路を各安全機器の接続仕様別にプログラム化した複数種類のファンクション・ブロック（ＦＢ１，ＦＢ２，ＦＢ３，．．．）を記憶する。上記のラダー回路は、所定の安全規格に適合するものであり、したがって、これらのファンクション・ブロック（ＦＢ１，ＦＢ２，ＦＢ３，．．．）としては、勿論、全てその安全規格に従ったファンクション・ブロックが用いられる。
【００１７】
ＩＤ番号取得手段１１１は、上記の入出力バス１０２に接続された各Ｉ／Ｏモジュール（１２０，１３０）のＩＤ番号をＩ／Ｏ領域１１４を介して読み出す。プログラム連結手段１１２は、この読み出されたＩＤ番号に基づいて、上記のファンクション・ブロック記憶手段１１３から引き当てられた各ファンクション・ブロックを順次連結することにより、安全プログラムＺを主記憶装置上の所定の領域Ａ上に自動的に生成する。
【００１８】
上記のＩＤ番号に基づいて、対応するファンクション・ブロックは一意に決定することが出来るので、各安全機器に基づいて提供される各安全機能は、用意されている各ファンクション・ブロック単位にそれぞれ実現することが可能となる。
なお、二次記憶装置Ｄは、ＣＰＵモジュール１１０内に搭載可能な、例えば書き込み可能ＲＯＭなどの揮発性のない記憶装置であれば何でも良い。
【００１９】
図３に安全プログラムＺの連結構成を例示する。ファンクションブロックＦＢａは、上記のマスターモジュール１２０が奏するべき安全動作を具現するためシーケンスプログラムであり、上記の４つの外部入力接点にそのまま対応する変数Ｘ００１〜Ｘ００４や、上記の３つの外部出力接点にそのまま対応する変数Ｙ００１〜Ｙ００３は、それぞれ何れも上記のＩ／Ｏ領域１１４上に保持されている。以下、これらの変数（変数Ｘ００１〜Ｘ００４や変数Ｙ００１〜Ｙ００３）をファンクションブロックＦＢ１の外部変数と言う。
【００２０】
プログラム連結手段１１２によって連結されるファンクションブロックＦＢ１は、内部変数格納領域Ａ２１を有している。イニシャル処理Ｓには、外部入力接点にそのまま対応する上記の変数Ｘ００１〜Ｘ００４を内部変数格納領域Ａ２１に複写する入力処理が含まれている。また、エンド処理Ｅには、内部変数格納領域Ａ２１上に算出された出力情報を上記の変数Ｙ００１〜Ｙ００３に複写する出力処理が含まれている。
また、ファンクションブロックＦＢ１に連結されるファンクションブロックＦＢ２を用いて構成されるファンクションブロックＦＢｂについても、略同様に構成されている。ただし、このファンクションブロックＦＢｂは、勿論上記のＩ／Ｏモジュール１３０が奏するべき安全動作を具現するためシーケンスプログラムである。
【００２１】
なお、ファンクション・ブロックＦＢａとＦＢｂとの間においては、カスケード接続に係わる引数Ｋ００１が共用されているが、例えばこの様にして、あるファンクション・ブロック（この場合ＦＢａ）が出力する出力情報の１つをその他のファンクション・ブロック（この場合ＦＢｂ）の入力情報とすることによって、それらのファンクション・ブロック（この場合ＦＢａとＦＢｂ）の間にカスケード接続を構成することができる。
また、これらのカスケード接続は、例えば図３の様にしてトップ（上流）から下流へと、複数のＩ／Ｏモジュール（ファンクションブロック）にわたって一方向にのみ構成してもよいし、或いはまた、全てのＩ／Ｏモジュール（ファンクションブロック）の間で一定の向きに循環する様にサイクリックに構成してもよい。
【００２２】
例えば、図３に示した上記の引数Ｋ００１を、サーボモータ等の動力をｏｆｆするための非常停止信号として用いれば、ファンクション・ブロックＦＢａより、下流側のファンクション・ブロックＦＢｂに対して、その非常停止信号を連鎖的に伝達することが可能となる。そして、この様な非常停止信号の伝達形態に従えば、目的の安全システムを非常時に迅速かつ安全に停止させることができる。
【００２３】
以下、図４を用いて安全プログラムＺとＩ／Ｏ領域１１４との関連を説明する。入出力データを保持するバッファ領域として使用されるＩ／Ｏ領域１１４の先頭には、図１のスロット０用のＩ／Ｏ領域１１４０が定義されている。このＩ／Ｏ領域１１４０は、図１のＩ／Ｏモジュール１２０（マスターモジュール）との入出力に係わる主記憶領域であり、入出力バス１０２によって参照、更新されるマスターモジュールとの通信データがここに保持される。Ｉ／Ｏ領域１１４１以降についても同様に、各スロット対応にＩ／Ｏ領域が設けられる。
【００２４】
図３の安全プログラムＺは、主記憶装置上に定義される本図４の領域Ａ上に配置される。この領域Ａは、安全プログラムＺを構成する実行可能な機械命令語の列から成るプロシジャ部ＺPRを格納するプログラム領域Ａ１と、このプロシジャ部ＺPRによって更新または参照される内部変数を保持する上記の内部変数格納領域Ａ２１，Ａ２２などが配置される内部変数領域Ａ２から構成されている。図５、図６を用いて以下で詳しく説明する様に、アドレス対応テーブル１１５は、上記のＩ／Ｏ領域１１４上に格納される外部入出力変数（例：Ｘ００１，Ｙ００１）と、この内部変数領域Ａ２上に格納される内部変数（入出力引数）との間の各対応を一意に規定する。
【００２５】
図５に、Ｉ／Ｏ領域１１４上にある外部変数（Ｘ００１〜，Ｙ００１〜）に対する参照更新動作を例示する。図５のテーブル１１４０は、図４のスロット０用Ｉ／Ｏ領域１１４０のより詳細な構造を示している。
図４、図５の内部変数格納領域Ａ２１には、図３のファンクションブロックＦＢ１のみによって参照または更新される内部変数が格納されるが、これらの内部変数は、外部入力変数Ｘ００１〜Ｘ００４に１対１に対応する入力引数用の内部変数ＭＩ００１〜ＭＩ００４と、外部出力変数Ｙ００１〜Ｙ００３に１対１に対応する出力引数用の内部変数ＭＯ００１〜ＭＯ００３と、それらの外部入出力変数に直接関連しないその他のローカルな内部変数ＭＬ００１〜に分類することができる。
【００２６】
したがって、図４、図５の入力動作ｉｎ１は、前述のイニシャル処理Ｓによって実行される前述の入力処理に相当しており、図４、図５の出力動作ｏｕｔ１は、前述のエンド処理Ｅによって実行される前述の出力処理に相当している。
勿論、スロット１（Ｉ／Ｏモジュール１３０）についても、略同様の入出力動作（ｉｎ１，ｏｕｔ１）が実行される。
【００２７】
図６にこのアドレス対応テーブル１１５のテーブル構造を示す。アドレス対応テーブル１１５の領域１１５０は、スロット０に対応しており、Ｉ／Ｏ領域１１４０のアドレスと、スロット０に位置するＩ／Ｏモジュール１２０のＩＤ番号と、そのＩＤ番号に対応するファンクション・ブロックの番号（ＦＢ番号）と、そのＩ／Ｏモジュールが持つ外部入力接点及び外部出力接点の各接点数と、上記の内部変数格納領域Ａ２１のアドレスを保持する。以下、領域１１５１以降についても同様に、順次、各スロット毎に定義される。
【００２８】
ここで、重要なことは、図２の各ファンクション・ブロック（ＦＢ１，ＦＢ２，ＦＢ３，．．．）が、ＩＤ番号から一意に特定されるＩ／Ｏモジュールの各種別毎にそれぞれ用意されていることと、図３、図４の内部変数格納領域（Ａ２１，Ａ２２）が各スロット対応に用意されることである。この構成によって、安全プログラムＺを動的に自動生成することが可能となっている。
【００２９】
図７に、上記のプログラム連結手段１１２を実現するための制御手順を示す。この処理では、まず最初に、ステップ４１０において、ＩＤ番号取得手段１１１を用いて、入出力バス１０２に接続された各Ｉ／ＯモジュールのＩＤ番号をスロット０からスロット番号に従って順次それぞれ読み出して、アドレス対応テーブル１１５（図６）の各対応箇所に退避する。
【００３０】
そして、以下のステップ４２０〜ステップ４５０が、図１のプログラム連結手段１１２を実現するためのステップとなる。
その最初のステップ４２０では、ＩＤ番号で指定された各Ｉ／Ｏモジュールの具体的な種別に基づいて、上記のアドレス対応テーブル１１５を完成させる。
【００３１】
次に、ステップ４３０では、ステップ４２０で完成させたアドレス対応テーブル１１５に基づいて先頭の領域１１５０から順次、ファンクション・ブロック記憶手段１１３上のデータを検索し、対応する各ファンクション・ブロック（ＦＢ１，ＦＢ２，ＦＢ３，．．．）を見つけ出して、それぞれ領域Ａ上にロードする。
【００３２】
ステップ４４０では、アドレス対応テーブル１１５に基づいて、内部変数領域Ａ２上に定義される、入出力バス１０２を使った入出力処理に係わる各内部変数と、Ｉ／Ｏ領域１１４上に定義された、実Ｉ／Ｏに係わる外部変数との対応関係を図５に例示する様にそれぞれ確定し、主記憶装置上にロードされた全ファンクション・ブロック（ＦＢ１，ＦＢ２）を１つの実行形式のプログラムにリンクする。
ステップ４５０では、ステップ４４０によって自動生成された安全プログラムＺを所定の二次記憶装置（図２のＤ）上に保存する。
【００３３】
その後、主記憶上で自動生成された安全プログラムＺが実行可能状態（図７のＲＥＡＤＹ状態）になっていることをユーザに対してＬＥＤ表示などで表示して、ＲＵＮスイッチの操作を実行する様にユーザを促す。
【００３４】
また、上記の安全プログラムＺを起動したユーザは、対応するＩ／Ｏモジュールに所定の各安全機器をそれぞれ組み付ける。これらの安全機器の接続状態は、上記の安全プログラムＺを用いてチェックされる。そして、それらの接続が全て所定の接続仕様に従って正しく実施されたことが確認された後に、安全プログラムＺの設定や動作に基づいて、所望のシステムが安全な動作可能状態（：安全状態）となる。
【００３５】
即ち、上記のシステム構成作業を実施する作業者は、安全機器の正しい接続形態や、保証されるべき安全機能に関しての正しい理解を有していれば良く、安全プログラムの内容に関する詳しい高度な知識を要求されることはない。
このため、本発明によれば、所定の安全規格に従う安全プログラムを自動的に構成でき、安全システムを実現するにあたって、設計時間や調整時間などの各種の作業時間を大幅に短縮することができる。
【００３６】
最後に図８を用いて、前述の領域Ａ上に自動生成された上記の安全プログラムＺの動作形態を説明する。この安全プログラムＺのプロシジャ部ＺPRは、領域Ａ内のプログラム領域Ａ１上に生成される。また、このプロシジャ部ＺPRが使用する引数は、内部変数領域Ａ２に配置される。
【００３７】
まず最初に、図８のステップ６１０の初期設定処理では、電源投入時またはリセット／スタート時に１回だけ前述のイニシャルプログラムを実行する。
次に、プロシジャ部ＺPRは、所定の１制御周期において、その初めに、各Ｉ／Ｏモジュールの状態を示す変数（入力変数）をＩ／Ｏ領域１１４の各スロット用のＩ／Ｏ領域からそれぞれ内部変数領域Ａ２に読み込み（図８のステップ６３０）、これらの引数を随時参照しつつ、所定の各ファンクション・ブロック（ＦＢ１，ＦＢ２）を順番に実行する（図８のステップ６５０）。
【００３８】
このプロシジャ部ＺPRの実行により、上記の内部変数領域Ａ２に配置された各引数が参照または更新される。その後、上記の１制御周期の最後の処理として、プロシジャ部ＺPRは、各Ｉ／Ｏモジュールに対する指令内容などを示す出力情報をそれぞれ、内部変数領域Ａ２からＩ／Ｏ領域１１４上に出力する（図８のステップ６７０）。この出力処理は、Ｉ／Ｏ領域１１４に対する入出力バス１０２のアクセス動作に対して排他的に実行する。
そして、以上のプロシジャ部ＺPRの動作の前後で、システムの入出力制御プログラムにしたがって入出力バス１０２とＩ／Ｏ領域１１４とのデータのやり取りが実行される。
【図面の簡単な説明】
【００３９】
【図１】実施例１の安全ＰＬＣ１００の論理的な構成図。
【図２】ＣＰＵモジュール１１０の論理的な構成図。
【図３】安全プログラムＺの連結構成を例示するプログラム構造図。
【図４】安全プログラムＺとＩ／Ｏ領域１１４との関連を説明する説明図。
【図５】Ｉ／Ｏ領域１１４上にある外部変数に対する参照更新動作を例示するテーブル関連図。
【図６】アドレス対応テーブル１１５のテーブル構造図。
【図７】プログラム連結手段１１２を実現する制御手順を示すフローチャート。
【図８】安全プログラムＺの動作形態を示すフローチャート。
【符号の説明】
【００４０】
１００  ：  安全ＰＬＣ
１０１  ：  電源モジュール
１０２  ：  入出力バス（連絡手段）
１１０  ：  ＣＰＵモジュール
１１１  ：  ＩＤ番号取得手段
１１２  ：  プログラム連結手段
１１３  ：  ファンクション・ブロック記憶手段
１２０  ：  Ｉ／Ｏモジュール（標準装備）
１３０  ：  Ｉ／Ｏモジュール（オプション）
Ａ    ：  安全プログラムＺを格納する主記憶領域
Ａ１  ：  プログラム領域
Ａ２  ：  引数領域
ＦＢｊ  ：  ファンクション・ブロック（ｊは番号）
【図１】
0004442524.tif 000002
【図２】
0004442524.tif 000003
【図３】
0004442524.tif 000004
【図４】
0004442524.tif 000005
【図５】
0004442524.tif 000006
【図６】
0004442524.tif 000007
【図７】
0004442524.tif 000008
【図８】
0004442524.tif 000009