(57)【特許請求の範囲】
【請求項１】
複数の命令語から構成されるプログラム構成単位であるＰＯＵを含むユーザプログラムを演算実行する演算部と、
ユーザプログラム中に含まれる信号の有効／無効の属性情報を記憶する属性情報記憶部と、
を備え、
前記演算部は、前記ＰＯＵの演算を行う場合、前記属性情報記憶部をアクセスしその演算対象のＰＯＵについてのすべての入力信号が有効状態であることを条件に、そのＰＯＵの演算を実行し、演算結果である出力信号についての前記属性情報記憶部に格納される属性情報を有効状態にし、ひとつでも無効な状態の入力信号があれば、そのＰＯＵの演算は実行しないように動作することを特徴とする
産業用コントローラ。
【請求項２】
通信によって受信する入力信号についての前記属性情報は、通信が開始されるまでは無効状態にし、コネクションが確立して最初のデータを受信した後は有効状態にすべく前記属性情報記憶部に格納される属性情報を更新する手段を備えたことを特徴とする請求項１に記載の産業用コントローラ。
【請求項３】
産業用コントローラ自身が持つＩ／Ｏ端子からの入力信号についての前記属性情報は、初期値を無効状態にし、最初の入力信号を受け取った後は有効状態にすべく前記属性情報記憶部に格納される属性情報を更新する手段を備えたことを特徴とする請求項１または２に記載の産業用コントローラ。
【請求項４】
前記演算部は、前記ひとつでも無効な状態の入力信号があってＰＯＵの演算は実行しない場合、そのＰＯＵの演算結果を示す信号の属性情報を無効状態にする機能を備えたことを特徴とする請求項１から３のいずれか１項に記載の産業用コントローラ。
【請求項５】
前記産業用コントローラは、安全動作を保証できない場合にフェイルセーフが働いて制御対象装置が安全側になって動作停止する安全システムに用いられるものであることを特徴とする請求項１から４のいずれか１項に記載の産業用コントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、産業用コントローラに関するものである。
【背景技術】
【０００２】
ＦＡ（Ｆａｃｔｏｒｙ  Ａｕｔｏｍａｔｉｏｎ）におけるネットワークシステムは、生産設備内の入力機器及び出力機器の制御を司る１または複数のＰＬＣ（Programmable Logic Controller）と、そのＰＬＣにより動作が制御される機器とが、制御系のネットワークに接続される。それらＰＬＣと機器は、その制御系のネットワークを介してサイクリックに通信を行なうことで、ＩＮデータ及びＯＵＴデータ（以下Ｉ／Ｏデータという）の送受を行ない、生産設備を制御する。
【０００３】
ＰＬＣは、制御プログラムに基づいて演算実行するＣＰＵユニット、センサやスイッチなどの入力機器を接続してそれらのオン・オフ信号を入力信号として取り込む入力ユニット、アクチュエータやリレーなどの出力機器を接続してそれらに対して出力信号を送り出す出力ユニット、ネットワークに接続された他の装置とデータの送受を行なう通信ユニット、各ユニットに電源を供給する電源ユニット、などの複数のユニットを組み合わせることにより構成されている。また、各機能を１つの筐体内に実装した一体型のＰＬＣもある。
【０００４】
さらに最近ではＰＬＣによる制御においても、フェイルセーフ（安全）システムが導入されつつある。つまり、ＰＬＣや各機器自体はもちろん、それらを接続するネットワークも安全機能を組み込まれたもので構成される。ここで安全機能とは、例えばＣＰＵその他の各処理部等を二重化して、正しい出力をするようにしたり、ネットワーク異常（正常な通信ができない）の場合や、緊急停止スイッチが押下されたり、ライトカーテンなどのセンサが人（身体の一部）の進入を検出した場合等の、ネットワークシステムが危険状態になった場合に、フェイルセーフが働き、システムが安全側になって、動作が停止するものである。
【０００５】
この種のセーフティ制御システムは、セーフティコントローラ、セーフティＩ／Ｏターミナルを含み、切削機械や切断機械やアーム付き製造機ロボット等とともに使用される。セーフティコントローラは、一般的なプログラマブルコントローラ（ＰＬＣ）に類似するロジック演算機能、入出力制御機能に加えて、安全面の自己診断機能を内蔵させることにより、その制御において高度な安全性および信頼性を確保したものである。セーフティコントローラは、自己診断結果により異常を検出した場合には、自己の制御が危険につながらないように、強制的に安全な制御を行なうような機能（フェールセーフ機能）を備えている。セーフティＩ／Ｏターミナルにおいても、自己診断機能を有していて、自己診断結果により異常を検出した場合には自己の制御が危険につながらない制御をするといった、フェイルセーフ機能を備えている。それにより、セーフティ制御システムは、製造機ロボット等の動作が危険につながらないようにしている。
【０００６】
ここに言う安全は、より具体的には、規格化されている安全基準を含む意味である。安全規格には、例えばＩＥＣ６１５０８やＥＮ規格などがある。ＩＥＣ６１５０８（プログラム可能な電子システムの機能安全に関する国際電気標準委員会）では、時間あたりの危険故障確立を（失敗確立：Ｐｒｏｂａｂｉｌｉｔｙ  ｏｆ  Ｆａｉｌｕｒｅ  ｐｅｒ  Ｈｏｕｒ）を定義し、この確立によってＳＩＬのレベル（Ｓａｆｅｔｙ  Ｉｎｔｅｇｒｉｔｙ  Ｌｅｖｅｌ）を４段階に分類している。また、ＥＮ規格では、機械のリスクの大きさを評価し、リスク低減策を講じるように義務づけされていて、ＥＮ９５４−１では５つの安全カテゴリにて規定されている。この明細書でいうセーフティコントローラ、セーフティＩ／Ｏターミナル、セーフティ制御システム等は、このような安全基準のいずれかに対応したものである。
【０００７】
なお、セーフティ制御システムは「安全制御システム」と称されることもあり、セーフティコントローラは「安全コントローラ」や「安全制御装置」と称されることもある。セーフティＩ／Ｏターミナルは「セーフティスレーブ局」や「セーフティスレーブユニット」、単に「セーフティスレーブ」と称されることもあり、セーフティを「安全」と置き換えて称されることもある。
【０００８】
セーフティコントローラとセーフティＩ／Ｏターミナルとをネットワークで結んでなるセーフティ制御システムが知られている。セーフティコントローラは、セーフティＩ／Ｏターミナルに対してネットワーク通信する通信マスタ機能を備えている。セーフティコントローラが複数のユニット筐体（例えば、電源ユニット、ＣＰＵユニット、ＩＯユニット、通信ユニット等）を結合させてなるビルディングブロックタイプである場合には、通信マスタユニットにその通信マスタ機能が内蔵される。その通信マスタユニットは「セーフティマスタ局」、「セーフティマスタユニット」や「セーフティマスタ」と称されることもあり、セーフティを「安全」と置き換えて称されることもある。
【０００９】
セーフティＩ／Ｏターミナルは、セーフティコントローラの通信マスタ機能との間でネットワーク通信機能、つまり、通信スレーブ機能を備えている。セーフティＩ／Ｏターミナルは接続端子を備えていて、その接続端子に、オン・オフ信号を出すスイッチ等の入力機器と、制御信号の出力先となる出力機器との少なくとも一方が接続されている。入力機器の例は、非常停止スイッチＳＷ、ライトカーテン、ドアスイッチ、２ハンドスイッチなどである。出力機器の例は、安全リレーやコンタクタである。これらの入力機器または出力機器も安全規格に対応している。セーフティＩ／Ｏターミナルは、接続された安全用途機器から入力した信号に基づいて制御データを生成し、生成した制御データをセーフティコントローラへネットワーク通信する。
【００１０】
セーフティコントローラがビルディングブロックタイプのものであれば、各ユニットは、共通内部バスに接続され、セーフティコントローラ全体の制御を司るＣＰＵユニットとの間でバス通信をし、データをやり取りする。連結されたＩ／Ｏユニットも接続端子を備えていて、その接続端子に、安全用途の入力機器または安全用途の出力機器が接続されている。そして、セーフティコントローラは、通信マスタユニットを介してセーフティＩ／Ｏターミナルからネットワーク通信により入力した入力機器の入力信号、または連結されたＩ／Ｏユニットに接続された入力機器の入力信号を入力し、予め記憶されたロジックプログラムによってその入力信号のオン・オフを論理演算する。その演算結果に基づく出力信号を、通信マスタユニットを介してネットワーク通信によりセーフティＩ／Ｏターミナルへ出力するか、または連結されたＩ／Ｏユニットへ出力をする。Ｉ／Ｏユニット及びセーフティＩ／Ｏターミナルは、その出力信号を出力機器へ出力する。この一連の動作を繰り返し実行することにより、セーフティコントローラにより製造機ロボットを含むシステム全体が制御される。
【００１１】
なお、セーフティコントローラとセーフティＩ／Ｏターミナルとの間の通信サイクルは、セーフティコントローラの繰り返し実行のサイクルと同期していてもよいし、非同期でもよい。また、セーフティコントローラあるいはＣＰＵユニットにおけるロジック演算処理の対象となるロジックプログラムは、プログラマーにより予め作成される。作成する際のプログラミング記述については、例えば、ラダー表記、ニーモニック表記、ファンクションブロック表記であってもよい。プログラミング言語でいうと、インタプリタ型言語、スクリプト言語、アセンブリ言語、高級言語、Ｊａｖａ言語と呼ばれるものであってもよい。このようなプログラミング言語で書かれたソースコードを、アセンブルやコンパイルなどの処理を行ってＣＰＵに実行させる。
【００１２】
また、セーフティＩ／Ｏターミナルに接続された出力機器であるところの安全リレーやコンタクタは、製造機ロボットや加工機械、切断機械等につながれていて、リレーやコンタクタの接点がオン中は製造機ロボット等が動作し、接点がオフ中は製造機ロボット等が停止するようになっている。よって、セーフティコントローラは、出力機器をオン・オフ制御することで、最終的な制御対象の操作ロボット等の動作停止に関する制御をする。具体的な例をいうと、セーフティコントローラは、非常停止スイッチＳＷが正常に操作されたことをセーフティＩ／Ｏターミナルから通信にて入力すると、制御対象が危険な動作をしないように出力機器（リレーやコンタクタ）をオフするか、安全側の状態に強制制御し、直ちに必要な安全処置を採る。セーフティコントローラは、非常停止スイッチＳＷまたは他の入力機器が異常有りの診断結果を入力すると、非常停止スイッチＳＷの操作有無または入力機器のオン・オフ状態にかかわらずに、制御対象が危険な動作をしないようにその動作を停止するよう出力機器をオフするか、安全側の状態に強制制御し、直ちに必要な安全処置を採る。
【００１３】
このセーフティ制御システム（安全システム）は、例えば図１に示すように、セーフティコントローラ１と複数のセーフティスレーブ２とがセーフティネットワーク３に接続されたネットワーク構成をとる。各セーフティコントローラ１，セーフティスレーブ２，セーフティネットワーク３等のネットワークを構成する機器は二重化されている。図では、左端の入力スレーブから緊急停止スイッチ等の異常状態を検出するスイッチがＯＮになったことをセーフティネットワーク３経由でマスタであるセーフティコントローラ１に伝える。セーフティコントローラ１は、論理演算を実行し、右端のセーフティスレーブ２に対して動作停止命令を送るべくＩ／ＯデータとしてＯＦＦを送る。これにより、その右端のセーフティスレーブ２に接続された外部のＩ／Ｏ機器（出力装置）の動作が停止し、フェイルセーフが働くことになる。
【００１４】
この安全システムに対応したセーフティコントローラ１のユーザプログラムは、例えば、１つのファンクションブロック或いは複数のファンクションブロックの組み合わせで構築されるものがある。このようにファンクションブロックを用いて記述されたユーザプログラムを演算実行するＰＬＣとしては、特許文献１に開示されたものがある。
【特許文献１】特開２０００−２７６５０８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
図１に示すように、通信機能をサポートしたＰＬＣ１は、プログラムの実行と通信開始に時間的なズレが生じる場合がある。これは、通信を開始するためには、Ｉ／Ｏデータ等の実際のデータ等を通信するに先立ち通信相手（セーフティスレーブ２等）との間でコネクションを確立させる必要がある。そして、多くの相手と通信を行う場合、個々の通信相手に対して適宜の順にコネクションを確立していくため、全ての通信相手との間でコネクションが確立するまでに時間がかかる。一方、電源投入にともないＰＬＣ１の初期設定等が終了し、ユーザプログラムをサイクリックに実行することを開始すると、このユーザプログラムの実行時に、必ずしも全ての通信相手とコネクションが確立しているとは限らず、一部の通信相手とはＩ／Ｏデータの通信ができない状態でユーザプログラムの演算実行が進むことがある。
【００１６】
このようなズレが発生するとアプリケーションによって問題が発生する場合がある。すなわち、セーフティコントローラ特有のファンクションブロックとして、外部デバイスモニタリングや外部機器モニタ等と称させるＥＤＭ（External  Device  Monitoring）の入力端子を備えたものがある。このＥＤＭはセーフティの考え方そのものであり、安全リレーなどは、接点を二つ持ち、どちらかが閉じればどちらかが開く構造になっている。
【００１７】
図２は、このＥＤＭのファンクションブロックを用いた制御プログラム（制御システム）の一例を示している。このＥＤＭファンクションブロックＦＢ１は、入力信号と、外部機器の状態を評価して、外部デバイスへの安全出力を行うものである。実際には外部機器（安全リレー２ｃ）からのフィードバック信号を入力信号として取りこみ、ＥＤＭファンクションブロックＦＢ１へのＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号へ入力しなければいけない。このフィードバック信号は、出力と反対側の接点を入力するため、外部機器２ｃが正常であれば出力をＯＦＦした場合には、フィードバック信号はＯＮとなる。一方、リレーの溶着が起きたとき、出力をＯＦＦしているのに、フィードバックがＯＦＦのままになり、異常を検知できる仕組みになっている。
【００１８】
つまり、緊急停止押しボタンスイッチ２ａ，２ｂが押下され、緊急停止のファンクションブロックＦＢ２からＥＤＭファンクションブロックＦＢ１の入力信号としてＯＮが入力され、それ伴い、ＥＤＭファンクションブロックＦＢ１の出力がＯＮになったとすると、安全リレー２ｃの出力はＯＦＦとなり、当該信号がＥＤＭファンクションブロックＦＢ１のＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号として入力され、正常であることが確認できる。また、係る緊急停止押しボタンスイッチが押下されていない正常状態の時は、ＥＤＭファンクションブロックＦＢ１の出力もＯＦＦのままであるので、安全リレー２ｃの出力はＯＮとなり、当該信号がＥＤＭファンクションブロックＦＢ１のＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号として入力され、正常であることが確認できる。なお、緊急停止押しボタンスイッチの押下に伴うＯＮ／ＯＦＦの状態は逆の場合もあり得る。
【００１９】
一方、ＥＤＭファンクションブロックＦＢ１の入力側は正常に動作し、出力側のコネクションが確立していない状態において、ＥＤＭファンクションブロックＦＢ１の出力がＯＦＦになったとすると、正常であれば安全リレー２ｃの出力は反転されてＯＮとなるが、コネクションが確立していないため、安全リレー２ｃと通信ができず、ＥＤＭファンクションブロックＦＢ１へ入力されるＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号が、ＯＦＦのままとなる。すると、ＥＤＭファンクションブロックＦＢ１の出力と、ＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号がともに同じ状態になり、ＥＤＭファンクションブロックＦＢ１は、異常と誤判断してしまう。
【００２０】
また、安全制御特有の機能として、このような障害が発生した場合、ファンクションブロックＦＢ１が異常状態となり、これを通常状態に復帰するには異常解除の操作が必要となる。したがって、通信が開始されず、外部機器からのデータが到着する前にプログラムが実行されると、プログラムからの出力結果と外部機器からのフィードバック入力に不整合が発生し、ユーザがその解除操作をしなければシステムを稼動させることができないという問題が生じる。
【００２１】
この対策として、起動時のみ、外部機器からのフィードバック信号を意図的に操作するためのプログラムを追加することができる。たとえば図３に示すように、スレーブＩ／Ｏ用の処理プログラムのＪＭＰ命令を記述する。このようにすると、ＪＭＰ命令の入力条件がＯＮのときはジャンプせずにスレーブＩ／Ｏの処理を実行し、ＪＭＰ命令の入力条件がＯＦＦのときはジャンプしてスレーブＩ／Ｏの処理をしないようになる。よって、コネクションが確立するまでは、入力条件がＯＦＦになるようにプログラムを記述することで、コネクション確立前にそのコネクションの接続先の外部機器についてのプログラムが実行されてしまうのを阻止できる。
【００２２】
しかし、上記のようなＪＭＰ命令を含むプログラムを記述することは、本来は不要な処理を追加することになるため、通信相手が多くなると、プログラム作成時間の増加、プログラム容量の増加、プログラム可読性の低下、などの問題が発生する。さらに、図３に示すように、コネクション相手となるスレーブ用の処理を一括してジャンプさせることができる場合にはまだしも、図２に示すように、プログラム中の１つのファンクションブロック（ＦＢ１の出力信号と、ＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号）に対してコネクションの確立の可否による影響が生じるような場合には、ＪＭＰ命令を挿入するのが困難・煩雑なことも多々ある。
【００２３】
また、このような問題を解決するためには、通信開始を待ってからプログラムを実行する機能を持ったＰＬＣが開発されている。しかし、通信開始を待ってからプログラムを実行する機能を使っても、故障などによりコネクションが確立できない相手が存在すると、ユーザプログラム全体を実行することができなくなる。この問題発生を回避するため、あらかじめ設定した時間が経過した場合は、通信の開始を待たずにプログラムを実行することも可能であるが、その場合は、上記のアプリケーションエラーの発生を防止することができない。
【００２４】
この発明は、ユーザが通信の設定や通信状態を意識することなくプログラムを作成することができ、またコネクションの確立前にプログラムを実行してもアプリケーションエラーが発生することがない産業用コントローラを提供することを目的とする。
【課題を解決するための手段】
【００２５】
上述した目的を達成するため、本発明に係る産業用コントローラは、（１）複数の命令語から構成されるプログラム構成単位であるＰＯＵを含むユーザプログラムを演算実行する演算部と、ユーザプログラム中に含まれる信号の有効／無効の属性情報を記憶する属性情報記憶部と、を備え、演算部は、ＰＯＵの演算を行う場合、属性情報記憶部をアクセスしその演算対象のＰＯＵについてのすべての入力信号が有効状態であることを条件に、そのＰＯＵの演算を実行し、演算結果である出力信号についての属性情報記憶部に格納される属性情報を有効状態にし、ひとつでも無効な状態の入力信号があれば、そのＰＯＵの演算は実行しないように動作するようにした。
【００２６】
（２）通信によって受信する入力信号についての属性情報は、通信が開始されるまでは無効状態にし、コネクションが確立して最初のデータを受信した後は有効状態にすべく属性情報記憶部に格納される属性情報を更新する手段を備えるようにした。
【００２７】
（３）産業用コントローラ自身が持つＩ／Ｏ端子からの入力信号についての属性情報は、初期値を無効状態にし、最初の入力信号を受け取った後は有効状態にすべく属性情報記憶部に格納される属性情報を更新する手段を備えるとよい。
【００２８】
（４）演算部は、ひとつでも無効な状態の入力信号があってＰＯＵの演算は実行しない場合、そのＰＯＵの演算結果を示す信号の属性情報を無効状態にする機能を備えるとよい。
【００２９】
（５）産業用コントローラは、安全動作を保証できない場合にフェイルセーフが働いて制御対象装置が安全側になって動作停止する安全システムに用いられるものとすることができる。
【００３０】
ＰＯＵは、“Program Organization Unit”の略であり、プログラム構成単位とも称される。このＰＯＵは複数の命令語から構成されるプログラム管理上の最小単位で、プログラム，ファンクション，ファンクションブロックと呼ばれるものである。このＰＯＵ単位でプログラム再利用ができる。
【００３１】
産業用コントローラは、ＦＡ用のコントローラであり、ＰＬＣはもちろんのこと、ＰＡＣ（Programmable Automation Controller）と称されるコントローラ等も含まれる。このＰＡＣは、パーソナルコンピュータが持つ高速性や高機能や機能拡張性に加え、ＰＬＣが持つ高精度や耐久性を備えている。そのＰＡＣもＰＬＣと同様に、ネットワークを介して生産設備の機器と通信を行なうことで、Ｉ／Ｏデータの送受を行ない、生産設備を制御する。
【００３２】
本発明は、ユーザが作成したプログラムが使用する信号は、その属性情報が産業用コントローラの内部（属性情報記憶部）で記憶保持される。演算部は、ユーザプログラムを順次実行していくが、実行対象がＰＯＵになった場合、すぐに演算実行するのではなく、その処理対象のＰＯＵの入力信号の属性信号を確認する。属性情報は、有効なデータが入力されたときに有効状態となり、それまでは無効状態である。
【００３３】
よって、ＰＯＵに対する全ての入力信号が、すでにコネクションが確立して正常に通信できる（Ｉ／Ｏデータの送受ができる）外部機器並びに自己に接続されＩ／Ｏデータの送受が可能となるＩ／Ｏ機器からの入力信号や、正常に動作しているＰＯＵの出力信号のように、属性情報が有効状態となっている信号のみから構成されている場合には、そのＰＯＵは演算実行される。一方、コネクションが確立していない通信相手からの入力信号の属性情報を無効状態にすることで、その入力信号により実行されるＰＯＵの演算を実行させないですむ。
【００３４】
よって、たとえば、ＥＤＭファンクションブロックの出力信号が安全リレーに与えられ、安全リレーからの反転信号がＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号に与えられるようなプログラムにおいて、安全リレーとのコネクションが確立されていない状態でユーザプログラムが演算処理されるようなことがあっても、ファンクションブロックの入力信号であるＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号の属性情報が無効状態にすることで、当該ファンクションブロックは演算されず、異常となることが回避できる。
【００３５】
従って、一部にコネクションが確立していない外部機器等があったとしても、ユーザプログラムの演算実行を開始することができる。更に、ユーザは、ユーザプログラムを作成するに際し、コネクションの確立の有無や、そのタイミングを考慮する必要がない。もちろん、ＥＤＭファンクションブロックは、一例を示したものであり、他のものでも同様である。
【発明の効果】
【００３６】
本発明は、ユーザが通信の設定や通信状態を意識することなくプログラムを作成することができ、またコネクションの確立前にプログラムを実行してもアプリケーションエラーが発生することなくなる。
【発明を実施するための最良の形態】
【００３７】
図４は、本発明が適用されるネットワークシステムの一例を示している。ＰＬＣ１０と、複数のリモート装置２０とが、同一のネットワーク３０に加入している。リモート装置２０は、１または複数のＩ／Ｏ機器が接続されるもので、複数のＩ／Ｏ機器を接続するものは、リモートＩ／Ｏやリモートターミナル等とも称される。このネットワークシステムは、安全動作を保証できない場合にフェイルセーフが働いて制御対象装置が安全側になって動作停止する安全システムを構築する。よって、リモート装置２０並びにＰＬＣ１０や、ネットワーク３０は、安全ネットワークシステムに準拠する構成を採る。
【００３８】
安全ネットワークシステムについて簡単に説明すると、例えば、安全入力機器で検出したセンシング情報は、リモート装置２０からネットワーク３０を介して所定のＰＬＣ１０に送信される。このＰＬＣ１０は、取得したセンシング情報を解析し、そのセンシング結果に基づいて動作すべき安全出力機器（当該機器が接続されたリモート装置２０）に対して制御命令を送る。そして、異常事態発生の場合には、安全出力機器を安全側に動作させるようになっている。また、安全入力機器から安全出力機器に直接命令を送る場合もある。
【００３９】
ＰＬＣ１０は、本実施形態では、ビルディングブロックタイプである。図では、ＰＬＣ１０は、ＣＰＵユニット１１と、Ｉ／Ｏユニット１２と、通信ユニット１３と、を備えて構成されているが、その他にも、電源ユニットや、必要に応じて高機能ユニットその他の各種のユニットが連結される。図５に示すように、ＰＬＣ１０の場合、各ユニット１１，１２，１３は、内部バス１０ａにより接続され、その内部バス１０ａを経由してＩ／Ｏデータやメッセージの送受を行なう。安全ＰＬＣの場合、この内部バス８ａも二重化されたりする。
【００４０】
ＣＰＵユニット１１は、ＭＰＵ１１ａと、ＲＡＭ１１ｂと、不揮発性メモリ１１ｃと、表示部１１ｅと、設定部１１ｆと、バス制御部１１ｈと、を備える。ＭＰＵ１１ａは、ユーザプログラムをサイクリックに演算実行し、安全ネットワークシステムを構成する各機器の制御等を司る。ＲＡＭ１１ｂは、ＭＰＵ１１ａが演算実行する際のワークメモリや、Ｉ／Ｏデータを格納するＩＯメモリ等として機能する。不揮発性メモリ１１ｃは、ツールや設定部１１ｆを介して設定される各種の設定データや、ユーザプログラム等が格納される。表示部１１ｅは、たとえばＬＥＤなどの動作状態（通信状態）や異常／正常を示す表示ランプ（警報ランプ）や、液晶パネルやＥＬパネルを用いたメッセージ表示機能を備えたものなどがある。設定部１１ｆは、アドレスを設定するスイッチなどである。バス制御部１１ｈは、内部バス１０ａ用のインタフェース（物理層）であり、ＭＰＵ１１ａは、バス制御部１１ｈ経由で所定のユニットとの間でデータの送受を行なう。
【００４１】
Ｉ／Ｏユニット１２は、ＭＰＵ１２ａと、ＲＡＭ１２ｂと、不揮発性メモリ１２ｃと、表示部１２ｄと、設定部１２ｅと、Ｉ／Ｏ駆動回路１２ｆと、バス制御部１２ｇと、を備える。ＭＰＵ１２ａは、内部バス１０ａを介して取得したメッセージを受けて、所定の処理を実行し、レポンスを生成・返信したり、接続されたＩ／Ｏ機器に対する制御等を実行したりする。ＲＡＭ１２ｂは、ＭＰＵ１２ａが処理を実行する際に使用するワークメモリとして機能する。不揮発性メモリ１２ｃは、各種の設定データ等が格納される。表示部１２ｄは、たとえばＬＥＤなどの動作状態（通信状態）や異常／正常を示す表示ランプ（警報ランプ）等である。設定部１２ｅは、アドレスなどのパラメータを設定するスイッチなどである。Ｉ／Ｏ駆動回路１２ｆは、Ｉ／Ｏユニット１２に接続された入力機器や出力機器等の外部のＩ／Ｏ機器との間でＩ／Ｏデータの送受を行なう。Ｉ／Ｏ機器が、ＯＮ／ＯＦＦの２値を採るものとすると、出力機器の場合には、Ｉ／Ｏ駆動回路１２ｆは、ＭＰＵ１２ａからの指示に従い、出力機器の動作のＯＮ／ＯＦＦを制御する。Ｉ／Ｏ機器が入力機器の場合、Ｉ／Ｏ駆動回路１２は、そのＩ／Ｏ機器の状態をＭＰＵ１２ａに伝える機能を持つ。電気回路に開閉スイッチを設け、その開閉スイッチを開閉することにより、出力機器の動作を制御するようにすることもできる。バス制御部１２ｇは、内部バス１０ａ用のインタフェース（物理層）であり、ＭＰＵ１２ａは、バス制御部１２ｇ経由で所定のユニットとの間でデータの送受を行なう。
【００４２】
通信ユニット１３は、ＭＰＵ１３ａと、ＲＡＭ１３ｂと、不揮発性メモリ１３ｃと、表示部１３ｄと、設定部１３ｅと、通信物理層１３ｆと、バス制御部１３ｇと、を備える。ＭＰＵ１３ａは、ＣＰＵユニット１１との通信処理や、外部の機器との通信処理を実行する。この通信処理は、予め決まったＩ／Ｏデータの送受信処理（転送処理を含む）や、受信した自己宛のメッセージに対する処理並びにそのレスポンスの返信処理等もある。
【００４３】
ＲＡＭ１３ｂは、ＭＰＵ１３ａが処理を実行する際に使用するワークメモリとして機能する。不揮発性メモリ１３ｃは、各種の設定データ等が格納される。表示部１３ｄは、たとえばＬＥＤなどの動作状態（通信状態）や異常／正常を示す表示ランプ（警報ランプ）等である。設定部１３ｅは、アドレスや通信速度などのパラメータを設定するスイッチなどである。通信物理層１３ｆは、接続されるネットワークの通信プロトコルに対応する物理層であり、通信インタフェースとも称される。バス制御部１３ｇは、内部バス１０ａ用のインタフェース（物理層）であり、ＭＰＵ１３ａは、バス制御部１３ｇ経由で所定のユニットとの間でデータの送受を行なう。
【００４４】
図６は、リモート装置２０の内部構造を示すブロック図である。このリモート装置２０は、１または複数のセンサやスイッチやリレーその他の安全入力機器や安全出力機器等のＩ／Ｏ機器を接続する。また、リモート装置２０は、ＭＰＵ２０ａと、ＲＡＭ２０ｂと、不揮発性メモリ２０ｃと、表示部２０ｄと、設定部２０ｅと、通信物理層２０ｆと、Ｉ／Ｏ駆動回路２０ｇと、を備えている。ＭＰＵ２０ａは、ネットワーク３０を介して取得したメッセージを受けて、所定の処理を実行し、レポンスを生成・返信したり、接続されたＩ／Ｏ機器に対する制御等を実行したりする。つまり、このＩ／Ｏ機器に対する制御は、例えば接続されたセンサやスイッチ等の入力機器のＩ／Ｏデータ（ＩＮデータ）を取得し、所定のタイミングでコネクションが張られたＰＬＣ１０等に向けて送信することであり、アクチュエータやリレー等の出力機器が接続されている場合はＰＬＣ１０等から送られてくるＩ／Ｏデータ（ＯＵＴデータ）を取得し、接続された出力機器を動作させることである。
【００４５】
ＲＡＭ２０ｂは、ＭＰＵ２０ａが処理を実行する際に使用するワークメモリとして機能する。不揮発性メモリ２０ｃは、各種の設定データ等が格納される。表示部２０ｄは、たとえばＬＥＤなどの動作状態（通信状態）や異常／正常を示す表示ランプ（警報ランプ）等である。設定部２０ｅは、アドレスを設定するスイッチなどである。通信物理層２０ｆは、接続されるネットワーク３０の通信プロトコルに対応する物理層であり、通信インタフェースとも称され、マスタとなる通信ユニット１３との間でＩ／Ｏデータや各種メッセージ等の送受を行なう。Ｉ／Ｏ駆動回路２０ｇは、入力機器や出力機器等の外部のＩ／Ｏ機器と接続しＩ／Ｏデータの送受を行なう。Ｉ／Ｏ機器が、ＯＮ／ＯＦＦの２値を採るものとすると、出力機器の場合には、Ｉ／Ｏ駆動回路２０ｇは、ＭＰＵ２０ａからの指示に従い、出力機器の動作のＯＮ／ＯＦＦを制御する。Ｉ／Ｏ機器が入力機器の場合、Ｉ／Ｏ駆動回路２０ｇは、そのＩ／Ｏ機器の状態をＭＰＵ２０ａに伝える機能を持つ。電気回路に開閉スイッチを設け、その開閉スイッチを開閉することにより、出力機器の動作を制御するようにすることもできる。また、リモート装置２０がリモートターミナルのように複数のＩ／Ｏ機器を接続可能とする場合、Ｉ／Ｏ駆動回路２０ｇは、Ｉ／Ｏ機器を接続するための端子部を複数個有し、各端子部に対して個々に制御する（Ｉ／Ｏデータの送受等を行なう）。
【００４６】
ここで本実施形態では、ユーザが作成したプログラム（ユーザプログラム）が使用する信号（Ｉ／Ｏデータ）に、それが有効なものか否かの属性情報（ステータスフラグ）を付加するようにした。そして、ＣＰＵユニットがユーザプログラムを実行する場合、ファンクションブロック等の複数の命令語から構成されるプログラム構成単位であるＰＯＵを実行するに際し、演算部であるＭＰＵ１１ａは、図７に示すフローチャートを実行する機能を備えた。すなわち、ＭＰＵ１１ａは、ユーザプログラムを順次実行し、処理対象がファンクションブロックになると、すぐに演算実行することはなく、そのファンクションブロックの入力信号の属性を確認する（Ｓ１，Ｓ２）。そして、全ての属性情報が有効になっている場合（Ｓ２はＹｅｓ）、ＭＰＵ１１ａは、当該ファンクションブロックを実行するとともに、そのファンクションブロックの実行結果である出力信号の属性情報を有効にする（Ｓ３，Ｓ４）。一方、属性情報が無効な入力信号が１つでも存在する場合（Ｓ２はＮｏ）、ＭＰＵ１１ａは、ファンクションブロックのプログラムは実行しないようにする（Ｓ５）。従って、属性情報の初期値は無効であるので、係る非実行のファンクションブロックの出力信号の属性情報は無効のままとなる。なお、このとき、無効状態に更新する処理を行なっても良い。
【００４７】
一例を示すと、ユーザプログラムが、図８に示すように構成されているものとする。このユーザプログラムは、まず、リモート装置Ａの端子０と、自己のＩＯユニットの端子０の２つの信号が第１ファンクションブロックＦＢ１１に入力され、その第１ファンクションブロックＦＢ１１の演算結果（出力信号）が第３ファンクションブロックＦＢ１３の一方に入力される。一方、リモート装置Ｂの端子０と、自己のＩＯユニットの端子１の２つの信号が第２ファンクションブロックＦＢ１２に入力され、その第２ファンクションブロックＦＢ１２の演算結果（出力信号）が第３ファンクションブロックＦＢ３の他方に入力されるとともに、リモート装置Ｃの端子０へ出力される。そして、第３ファンクションブロックＦＢ１３の演算結果（出力信号）は、自己のＩ／Ｏユニットの端子１０へ与えられる。
【００４８】
前提として、全てのＩ／Ｏデータの属性情報の初期値は無効となり、コネクションが確立されて正規のデータが受信できた場合（リモート装置の場合）や、データを受け取った場合（Ｉ／Ｏユニットの場合）に、属性情報が有効に切り替わる。そして、上記のプログラムにおいて、リモート装置Ａの端子０と、Ｉ／Ｏユニットの端子０の信号の属性情報が無効（リモート装置とのコネクショが確立されていない，Ｉ／Ｏユニットからのデータを受信していない状態）で、リモート装置Ｂの端子０とＩ／Ｏユニットの端子１からの信号の属性情報が有効とする。
【００４９】
すると、第１ファンクションブロックＦＢ１１は、全ての入力信号の属性情報に無効であるので、演算されず、その出力信号の属性情報も無効状態のままとなる。一方、第２ファンクションブロックＦＢ１２は、全ての入力信号の属性情報が有効であるので、演算実行され、その出力信号の属性情報も有効に切り替わる。
【００５０】
第３ファンクションブロックＦＢ１３は、第１ファンクションブロックＦＢ１１からの入力信号が無効状態のままであるので、やはり演算実行はされず、その出力信号の属性情報も無効状態のままとなる。
【００５１】
そして、この状態において、リモート装置Ａの端子０と、自己のＩＯユニットの端子０の２つの信号の属性情報が、いずれも有効になった場合には、第１ファンクションブロックＦＢ１１は演算実行され、その結果が出力信号（属性情報：有効）される。すると、第３ファンクションブロックＦＢ１３の全ての入力信号が有効になるので、当該第３ファンクションブロックＦＢ１３も演算実行され、その出力がＩ／Ｏユニットの端子１０へ与えられる。
【００５２】
従って、例えば図２に示したＥＤＭファンクションブロックＦＢ１の場合、外部の安全リレー２ｃとの間でコネクションが確立するまでのあいだは、ＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号の属性情報は無効となっているので、当該ＥＤＭファンクションブロックＦＢ１は演算実行されない。よって、出力信号とＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号の関係が判定状態にあるか否かのチェックも行なわれないので、異常状態にあると判定されることはない。そして、安全リレー２ｃとの間でコネクションが確立し、正常にデータが受信できてＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号の属性情報が有効になり、かつ、他の入力信号の属性情報も有効となると、ＥＤＭファンクションブロックＦＢ１は実行され、出力信号とＥＤＭ  Ｆｅｅｄ  Ｂａｃｋ信号が反転関係にあるか否かの異常状態の有無のチェックが行なわれる。このとき反転状態にない場合には、機器の異常があるとなると判断できる。
【００５３】
上記の処理を実行するため、ＣＰＵユニット１１のＲＡＭ１１ｂに、図９に示すように、ＩＯメモリ１５と関連付けてステータスフラグ記憶部１６を設けた。このステータスフラグ記憶部１６は、ＩＯメモリ１５に格納される各Ｉ／Ｏデータと一意に関連付けられ、各Ｉ／Ｏデータが有効（１）か無効（０）かの情報（属性情報）が格納される。ＩＯメモリ１５の格納領域（アドレス）と、ステータスフラグ記憶部１６の格納領域（アドレス）の関係づけは、別のテーブル等により管理され、ＭＰＵ１１ａが演算実行する際には、ＩＯメモリ１５にアクセスして入力信号を取得する際には、ステータスフラグ記憶部１６にアクセスし該当する属性情報を確認し、ファンクションブロックを演算実行して得られた出力信号をＩＯメモリに格納する際には、それに関連付けられたステータスフラグ記憶部１６の該当領域の属性情報を有効に更新する。
【００５４】
また、通信ユニット１３のＲＡＭ１３ｂ内にも、通信相手のリモート装置２０についてのＩ／Ｏデータを格納するＩＯメモリが用意されているので、そのＩＯメモリに格納されるＩ／Ｏデータの属性情報を格納するためのステータスフラグ記憶部も、同様にＲＡＭ１３ｂに用意し、管理する。
【００５５】
そして、ステータスフラグ記憶部１６の無効／有効の管理は、ＭＰＵ１１ａが、以下のようにして行なう。すなわち、このステータスフラグ記憶部１６の初期値は、全て無効（０）としておく。そして、上述したように、ファンクションブロックの出力信号に対応するステータスフラグ記憶部１６の格納領域については、上述したようにＣＰＵユニット１１のＲＡＭ１１ａが当該プログラムを演算実行し、出力信号を出力（ＩＯメモリへの書き込み）するとともにその信号の属性情報を有効（１）に更新する。
【００５６】
また、入力信号については、通信ユニット１３や入力機器が接続されたＩ／ＯユニットからＣＰＵユニット１１に対して所定のタイミング（Ｉ／Ｏリフレッシュ）でＩ／Ｏデータが送られてくるが、そのＩ／Ｏデータに属性情報を付加して送るようにする。すると、ＭＰＵ１１ａは、取得したＩ／ＯデータをＩＯメモリの所定の領域に格納し、取得した属性情報を対応するステータスフラグ記憶部１６の格納領域に格納する。なお、Ｉ／Ｏユニットや通信ユニット１３からの属性情報の送信であるが、毎回全てのＩ／Ｏデータに属性情報を付加するようにしても良いし、無効状態から有効状態に切り替わった際に１回或いはその後数回だけ送り、それ以降は送らないようにしても良い。無効状態から有効状態への切り替わりは、例えば、属性情報を送信したか否かのフラグを用意し、属性情報を送っていない場合で属性情報が有効になった場合に有効状態への切り替わりがあったと判断し、送信することで対応できる。
【００５７】
また、通信ユニット１３におけるステータスフラグ記憶部１６に格納された無効状態から有効状態の切り替え（特に、入力信号について）であるが、ＭＰＵ１３ａは、それぞれのリモート装置のＩ／ＯデータのＩＯメモリへの格納領域はわかっているので、コネクションが確立し、リモート装置からＩ／Ｏデータを受信したことを条件に、そのＩ／Ｏデータに対応するステータスフラグ記憶部１６の格納領域の属性情報を有効に書き換えることで管理できる。
【００５８】
Ｉ／Ｏユニット１２についても、コネクションの確立の判定が不要なことを除いて、基本的に、上記と同様の処理を行なうための機能・構成を備える。つまり、Ｉ／Ｏユニット１２のＭＰＵ１２ａは、自己に接続された入力機器からＩ／Ｏデータを受信したならば、その信号の属性情報を無効から有効に切り替える処理を行なう。また、Ｉ／ＯデータをＣＰＵユニット１１に送る際に、そのＩ／Ｏデータに属性情報を付加する。そして、その属性情報を付加して送信する処理は、毎回行なっても良いし、有効状態への切り替わった際に１回或いはその後数回送るようにしても良い。
【００５９】
なお、一旦属性情報が“有効”に切り替わったならば、その後は、特に更監視・更新処理をしなくても良い。これは、コネクションが確立した後は、通常のネットワーク（機器の異常・故障発生）の監視を行なうことができるからである。
【００６０】
なお、上述した実施形態では、プログラム中に入出力変数と内部変数を持つブロックである“ファンクションブロック”を含む例について説明したが、本発明は、ファンクションブロックに限ることはなく、例えば、ＰＬＣ等の産業用コントローラにおける演算の組み合わせを拡張したブロックで内部変数を持たない“ファンクション”でもよいし、Ｉ／Ｏやグローバル変数を含むメインプログラムである“プログラム”でもよい。このように、“ファンクションブロック”，“ファンクション”，“プログラム”等のＰＯＵ（Program Organization Unit）について適用できる。いずれの場合も、全ての入力信号の属性情報が有効になるまで、ＰＯＵを演算実行しないとともに、全ての入力信号の属性情報が有効になったならば、演算実行するとともにその出力信号の属性情報を有効に更新する。
【図面の簡単な説明】
【００６１】
【図１】全体システムを示す図である。
【図２】ＥＤＭ付のファンクションブロックを用いたプログラムの一例示す図である。
【図３】従来のプログラムの一例を示す図である。
【図４】全体システムを示す図で亜。
【図５】ＰＬＣの内部構成を示す図である。
【図６】リモート装置の内部構成を示す図である。
【図７】ＣＰＵユニットのＭＰＵ（演算部）の機能を示すフローチャートである。
【図８】動作原理を説明する図である。
【図９】ＩＯメモリとステータスフラグ記憶部のデータ構造を示す図である。
【符号の説明】
【００６２】
１０  ＰＬＣ（産業用コントローラ）
１１  ＣＰＵユニット
１１ａ  ＭＰＵ（演算部）
１２  Ｉ／Ｏユニット
１３  通信ユニット
１５  ＩＯメモリ
１６  ステータスフラグ記憶部（属性情報記憶部）
２０  リモート装置
【図１】
0004941365.tif 000002
【図２】
0004941365.tif 000003
【図３】
0004941365.tif 000004
【図４】
0004941365.tif 000005
【図５】
0004941365.tif 000006
【図６】
0004941365.tif 000007
【図７】
0004941365.tif 000008
【図８】
0004941365.tif 000009
【図９】
0004941365.tif 000010