FA(Factory Automation)におけるネットワークシステムは、生産設備内の入力機器及び出力機器の制御を司る1または複数のPLC(Programmable Logic Controller)と、そのPLCにより動作が制御される機器とが、制御系のネットワークに接続される。それらPLCと機器は、その制御系のネットワークを介してサイクリックに通信を行なうことで、INデータ及びOUTデータ(以下I/Oデータという)の送受を行ない、生産設備を制御する。
PLCは、制御プログラムに基づいて演算実行するCPUユニット、センサやスイッチなどの入力機器を接続してそれらのオン・オフ信号を入力信号として取り込む入力ユニット、アクチュエータやリレーなどの出力機器を接続してそれらに対して出力信号を送り出す出力ユニット、ネットワークに接続された他の装置とデータの送受を行なう通信ユニット、各ユニットに電源を供給する電源ユニット、などの複数のユニットを組み合わせることにより構成されている。また、各機能を1つの筐体内に実装した一体型のPLCもある。
さらに最近ではPLCによる制御においても、フェイルセーフ(安全)システムが導入されつつある。つまり、PLCや各機器自体はもちろん、それらを接続するネットワークも安全機能を組み込まれたもので構成される。ここで安全機能とは、例えばCPUその他の各処理部等を二重化して、正しい出力をするようにしたり、ネットワーク異常(正常な通信ができない)の場合や、緊急停止スイッチが押下されたり、ライトカーテンなどのセンサが人(身体の一部)の進入を検出した場合等の、ネットワークシステムが危険状態になった場合に、フェイルセーフが働き、システムが安全側になって、動作が停止するものである。
この種のセーフティ制御システムは、セーフティコントローラ、セーフティI/Oターミナルを含み、切削機械や切断機械やアーム付き製造機ロボット等とともに使用される。セーフティコントローラは、一般的なプログラマブルコントローラ(PLC)に類似するロジック演算機能、入出力制御機能に加えて、安全面の自己診断機能を内蔵させることにより、その制御において高度な安全性および信頼性を確保したものである。セーフティコントローラは、自己診断結果により異常を検出した場合には、自己の制御が危険につながらないように、強制的に安全な制御を行なうような機能(フェールセーフ機能)を備えている。セーフティI/Oターミナルにおいても、自己診断機能を有していて、自己診断結果により異常を検出した場合には自己の制御が危険につながらない制御をするといった、フェイルセーフ機能を備えている。それにより、セーフティ制御システムは、製造機ロボット等の動作が危険につながらないようにしている。
ここに言う安全は、より具体的には、規格化されている安全基準を含む意味である。安全規格には、例えばIEC61508やEN規格などがある。IEC61508(プログラム可能な電子システムの機能安全に関する国際電気標準委員会)では、時間あたりの危険故障確立を(失敗確立:Probability of Failure per Hour)を定義し、この確立によってSILのレベル(Safety Integrity Level)を4段階に分類している。また、EN規格では、機械のリスクの大きさを評価し、リスク低減策を講じるように義務づけされていて、EN954−1では5つの安全カテゴリにて規定されている。この明細書でいうセーフティコントローラ、セーフティI/Oターミナル、セーフティ制御システム等は、このような安全基準のいずれかに対応したものである。
なお、セーフティ制御システムは「安全制御システム」と称されることもあり、セーフティコントローラは「安全コントローラ」や「安全制御装置」と称されることもある。セーフティI/Oターミナルは「セーフティスレーブ局」や「セーフティスレーブユニット」、単に「セーフティスレーブ」と称されることもあり、セーフティを「安全」と置き換えて称されることもある。
セーフティコントローラとセーフティI/Oターミナルとをネットワークで結んでなるセーフティ制御システムが知られている。セーフティコントローラは、セーフティI/Oターミナルに対してネットワーク通信する通信マスタ機能を備えている。セーフティコントローラが複数のユニット筐体(例えば、電源ユニット、CPUユニット、IOユニット、通信ユニット等)を結合させてなるビルディングブロックタイプである場合には、通信マスタユニットにその通信マスタ機能が内蔵される。その通信マスタユニットは「セーフティマスタ局」、「セーフティマスタユニット」や「セーフティマスタ」と称されることもあり、セーフティを「安全」と置き換えて称されることもある。
セーフティI/Oターミナルは、セーフティコントローラの通信マスタ機能との間でネットワーク通信機能、つまり、通信スレーブ機能を備えている。セーフティI/Oターミナルは接続端子を備えていて、その接続端子に、オン・オフ信号を出すスイッチ等の入力機器と、制御信号の出力先となる出力機器との少なくとも一方が接続されている。入力機器の例は、非常停止スイッチSW、ライトカーテン、ドアスイッチ、2ハンドスイッチなどである。出力機器の例は、安全リレーやコンタクタである。これらの入力機器または出力機器も安全規格に対応している。セーフティI/Oターミナルは、接続された安全用途機器から入力した信号に基づいて制御データを生成し、生成した制御データをセーフティコントローラへネットワーク通信する。
セーフティコントローラがビルディングブロックタイプのものであれば、各ユニットは、共通内部バスに接続され、セーフティコントローラ全体の制御を司るCPUユニットとの間でバス通信をし、データをやり取りする。連結されたI/Oユニットも接続端子を備えていて、その接続端子に、安全用途の入力機器または安全用途の出力機器が接続されている。そして、セーフティコントローラは、通信マスタユニットを介してセーフティI/Oターミナルからネットワーク通信により入力した入力機器の入力信号、または連結されたI/Oユニットに接続された入力機器の入力信号を入力し、予め記憶されたロジックプログラムによってその入力信号のオン・オフを論理演算する。その演算結果に基づく出力信号を、通信マスタユニットを介してネットワーク通信によりセーフティI/Oターミナルへ出力するか、または連結されたI/Oユニットへ出力をする。I/Oユニット及びセーフティI/Oターミナルは、その出力信号を出力機器へ出力する。この一連の動作を繰り返し実行することにより、セーフティコントローラにより製造機ロボットを含むシステム全体が制御される。
なお、セーフティコントローラとセーフティI/Oターミナルとの間の通信サイクルは、セーフティコントローラの繰り返し実行のサイクルと同期していてもよいし、非同期でもよい。また、セーフティコントローラあるいはCPUユニットにおけるロジック演算処理の対象となるロジックプログラムは、プログラマーにより予め作成される。作成する際のプログラミング記述については、例えば、ラダー表記、ニーモニック表記、ファンクションブロック表記であってもよい。プログラミング言語でいうと、インタプリタ型言語、スクリプト言語、アセンブリ言語、高級言語、Java言語と呼ばれるものであってもよい。このようなプログラミング言語で書かれたソースコードを、アセンブルやコンパイルなどの処理を行ってCPUに実行させる。
また、セーフティI/Oターミナルに接続された出力機器であるところの安全リレーやコンタクタは、製造機ロボットや加工機械、切断機械等につながれていて、リレーやコンタクタの接点がオン中は製造機ロボット等が動作し、接点がオフ中は製造機ロボット等が停止するようになっている。よって、セーフティコントローラは、出力機器をオン・オフ制御することで、最終的な制御対象の操作ロボット等の動作停止に関する制御をする。具体的な例をいうと、セーフティコントローラは、非常停止スイッチSWが正常に操作されたことをセーフティI/Oターミナルから通信にて入力すると、制御対象が危険な動作をしないように出力機器(リレーやコンタクタ)をオフするか、安全側の状態に強制制御し、直ちに必要な安全処置を採る。セーフティコントローラは、非常停止スイッチSWまたは他の入力機器が異常有りの診断結果を入力すると、非常停止スイッチSWの操作有無または入力機器のオン・オフ状態にかかわらずに、制御対象が危険な動作をしないようにその動作を停止するよう出力機器をオフするか、安全側の状態に強制制御し、直ちに必要な安全処置を採る。
このセーフティ制御システム(安全システム)は、例えば図1に示すように、セーフティコントローラ1と複数のセーフティスレーブ2とがセーフティネットワーク3に接続されたネットワーク構成をとる。各セーフティコントローラ1,セーフティスレーブ2,セーフティネットワーク3等のネットワークを構成する機器は二重化されている。図では、左端の入力スレーブから緊急停止スイッチ等の異常状態を検出するスイッチがONになったことをセーフティネットワーク3経由でマスタであるセーフティコントローラ1に伝える。セーフティコントローラ1は、論理演算を実行し、右端のセーフティスレーブ2に対して動作停止命令を送るべくI/OデータとしてOFFを送る。これにより、その右端のセーフティスレーブ2に接続された外部のI/O機器(出力装置)の動作が停止し、フェイルセーフが働くことになる。
この安全システムに対応したセーフティコントローラ1のユーザプログラムは、例えば、1つのファンクションブロック或いは複数のファンクションブロックの組み合わせで構築されるものがある。このようにファンクションブロックを用いて記述されたユーザプログラムを演算実行するPLCとしては、特許文献1に開示されたものがある。
特開2000−276508号公報
図1に示すように、通信機能をサポートしたPLC1は、プログラムの実行と通信開始に時間的なズレが生じる場合がある。これは、通信を開始するためには、I/Oデータ等の実際のデータ等を通信するに先立ち通信相手(セーフティスレーブ2等)との間でコネクションを確立させる必要がある。そして、多くの相手と通信を行う場合、個々の通信相手に対して適宜の順にコネクションを確立していくため、全ての通信相手との間でコネクションが確立するまでに時間がかかる。一方、電源投入にともないPLC1の初期設定等が終了し、ユーザプログラムをサイクリックに実行することを開始すると、このユーザプログラムの実行時に、必ずしも全ての通信相手とコネクションが確立しているとは限らず、一部の通信相手とはI/Oデータの通信ができない状態でユーザプログラムの演算実行が進むことがある。
このようなズレが発生するとアプリケーションによって問題が発生する場合がある。すなわち、セーフティコントローラ特有のファンクションブロックとして、外部デバイスモニタリングや外部機器モニタ等と称させるEDM(External Device Monitoring)の入力端子を備えたものがある。このEDMはセーフティの考え方そのものであり、安全リレーなどは、接点を二つ持ち、どちらかが閉じればどちらかが開く構造になっている。
図2は、このEDMのファンクションブロックを用いた制御プログラム(制御システム)の一例を示している。このEDMファンクションブロックFB1は、入力信号と、外部機器の状態を評価して、外部デバイスへの安全出力を行うものである。実際には外部機器(安全リレー2c)からのフィードバック信号を入力信号として取りこみ、EDMファンクションブロックFB1へのEDM Feed Back信号へ入力しなければいけない。このフィードバック信号は、出力と反対側の接点を入力するため、外部機器2cが正常であれば出力をOFFした場合には、フィードバック信号はONとなる。一方、リレーの溶着が起きたとき、出力をOFFしているのに、フィードバックがOFFのままになり、異常を検知できる仕組みになっている。
つまり、緊急停止押しボタンスイッチ2a,2bが押下され、緊急停止のファンクションブロックFB2からEDMファンクションブロックFB1の入力信号としてONが入力され、それ伴い、EDMファンクションブロックFB1の出力がONになったとすると、安全リレー2cの出力はOFFとなり、当該信号がEDMファンクションブロックFB1のEDM Feed Back信号として入力され、正常であることが確認できる。また、係る緊急停止押しボタンスイッチが押下されていない正常状態の時は、EDMファンクションブロックFB1の出力もOFFのままであるので、安全リレー2cの出力はONとなり、当該信号がEDMファンクションブロックFB1のEDM Feed Back信号として入力され、正常であることが確認できる。なお、緊急停止押しボタンスイッチの押下に伴うON/OFFの状態は逆の場合もあり得る。
一方、EDMファンクションブロックFB1の入力側は正常に動作し、出力側のコネクションが確立していない状態において、EDMファンクションブロックFB1の出力がOFFになったとすると、正常であれば安全リレー2cの出力は反転されてONとなるが、コネクションが確立していないため、安全リレー2cと通信ができず、EDMファンクションブロックFB1へ入力されるEDM Feed Back信号が、OFFのままとなる。すると、EDMファンクションブロックFB1の出力と、EDM Feed Back信号がともに同じ状態になり、EDMファンクションブロックFB1は、異常と誤判断してしまう。
また、安全制御特有の機能として、このような障害が発生した場合、ファンクションブロックFB1が異常状態となり、これを通常状態に復帰するには異常解除の操作が必要となる。したがって、通信が開始されず、外部機器からのデータが到着する前にプログラムが実行されると、プログラムからの出力結果と外部機器からのフィードバック入力に不整合が発生し、ユーザがその解除操作をしなければシステムを稼動させることができないという問題が生じる。
この対策として、起動時のみ、外部機器からのフィードバック信号を意図的に操作するためのプログラムを追加することができる。たとえば図3に示すように、スレーブI/O用の処理プログラムのJMP命令を記述する。このようにすると、JMP命令の入力条件がONのときはジャンプせずにスレーブI/Oの処理を実行し、JMP命令の入力条件がOFFのときはジャンプしてスレーブI/Oの処理をしないようになる。よって、コネクションが確立するまでは、入力条件がOFFになるようにプログラムを記述することで、コネクション確立前にそのコネクションの接続先の外部機器についてのプログラムが実行されてしまうのを阻止できる。
しかし、上記のようなJMP命令を含むプログラムを記述することは、本来は不要な処理を追加することになるため、通信相手が多くなると、プログラム作成時間の増加、プログラム容量の増加、プログラム可読性の低下、などの問題が発生する。さらに、図3に示すように、コネクション相手となるスレーブ用の処理を一括してジャンプさせることができる場合にはまだしも、図2に示すように、プログラム中の1つのファンクションブロック(FB1の出力信号と、EDM Feed Back信号)に対してコネクションの確立の可否による影響が生じるような場合には、JMP命令を挿入するのが困難・煩雑なことも多々ある。
また、このような問題を解決するためには、通信開始を待ってからプログラムを実行する機能を持ったPLCが開発されている。しかし、通信開始を待ってからプログラムを実行する機能を使っても、故障などによりコネクションが確立できない相手が存在すると、ユーザプログラム全体を実行することができなくなる。この問題発生を回避するため、あらかじめ設定した時間が経過した場合は、通信の開始を待たずにプログラムを実行することも可能であるが、その場合は、上記のアプリケーションエラーの発生を防止することができない。
この発明は、ユーザが通信の設定や通信状態を意識することなくプログラムを作成することができ、またコネクションの確立前にプログラムを実行してもアプリケーションエラーが発生することがない産業用コントローラを提供することを目的とする。
上述した目的を達成するため、本発明に係る産業用コントローラは、(1)複数の命令語から構成されるプログラム構成単位であるPOUを含むユーザプログラムを演算実行する演算部と、ユーザプログラム中に含まれる信号の有効/無効の属性情報を記憶する属性情報記憶部と、を備え、演算部は、POUの演算を行う場合、属性情報記憶部をアクセスしその演算対象のPOUについてのすべての入力信号が有効状態であることを条件に、そのPOUの演算を実行し、演算結果である出力信号についての属性情報記憶部に格納される属性情報を有効状態にし、ひとつでも無効な状態の入力信号があれば、そのPOUの演算は実行しないように動作するようにした。
(2)通信によって受信する入力信号についての属性情報は、通信が開始されるまでは無効状態にし、コネクションが確立して最初のデータを受信した後は有効状態にすべく属性情報記憶部に格納される属性情報を更新する手段を備えるようにした。
(3)産業用コントローラ自身が持つI/O端子からの入力信号についての属性情報は、初期値を無効状態にし、最初の入力信号を受け取った後は有効状態にすべく属性情報記憶部に格納される属性情報を更新する手段を備えるとよい。
(4)演算部は、ひとつでも無効な状態の入力信号があってPOUの演算は実行しない場合、そのPOUの演算結果を示す信号の属性情報を無効状態にする機能を備えるとよい。
(5)産業用コントローラは、安全動作を保証できない場合にフェイルセーフが働いて制御対象装置が安全側になって動作停止する安全システムに用いられるものとすることができる。
POUは、“Program Organization Unit”の略であり、プログラム構成単位とも称される。このPOUは複数の命令語から構成されるプログラム管理上の最小単位で、プログラム,ファンクション,ファンクションブロックと呼ばれるものである。このPOU単位でプログラム再利用ができる。
産業用コントローラは、FA用のコントローラであり、PLCはもちろんのこと、PAC(Programmable Automation Controller)と称されるコントローラ等も含まれる。このPACは、パーソナルコンピュータが持つ高速性や高機能や機能拡張性に加え、PLCが持つ高精度や耐久性を備えている。そのPACもPLCと同様に、ネットワークを介して生産設備の機器と通信を行なうことで、I/Oデータの送受を行ない、生産設備を制御する。
本発明は、ユーザが作成したプログラムが使用する信号は、その属性情報が産業用コントローラの内部(属性情報記憶部)で記憶保持される。演算部は、ユーザプログラムを順次実行していくが、実行対象がPOUになった場合、すぐに演算実行するのではなく、その処理対象のPOUの入力信号の属性信号を確認する。属性情報は、有効なデータが入力されたときに有効状態となり、それまでは無効状態である。
よって、POUに対する全ての入力信号が、すでにコネクションが確立して正常に通信できる(I/Oデータの送受ができる)外部機器並びに自己に接続されI/Oデータの送受が可能となるI/O機器からの入力信号や、正常に動作しているPOUの出力信号のように、属性情報が有効状態となっている信号のみから構成されている場合には、そのPOUは演算実行される。一方、コネクションが確立していない通信相手からの入力信号の属性情報を無効状態にすることで、その入力信号により実行されるPOUの演算を実行させないですむ。
よって、たとえば、EDMファンクションブロックの出力信号が安全リレーに与えられ、安全リレーからの反転信号がEDM Feed Back信号に与えられるようなプログラムにおいて、安全リレーとのコネクションが確立されていない状態でユーザプログラムが演算処理されるようなことがあっても、ファンクションブロックの入力信号であるEDM Feed Back信号の属性情報が無効状態にすることで、当該ファンクションブロックは演算されず、異常となることが回避できる。
従って、一部にコネクションが確立していない外部機器等があったとしても、ユーザプログラムの演算実行を開始することができる。更に、ユーザは、ユーザプログラムを作成するに際し、コネクションの確立の有無や、そのタイミングを考慮する必要がない。もちろん、EDMファンクションブロックは、一例を示したものであり、他のものでも同様である。
本発明は、ユーザが通信の設定や通信状態を意識することなくプログラムを作成することができ、またコネクションの確立前にプログラムを実行してもアプリケーションエラーが発生することなくなる。
図4は、本発明が適用されるネットワークシステムの一例を示している。PLC10と、複数のリモート装置20とが、同一のネットワーク30に加入している。リモート装置20は、1または複数のI/O機器が接続されるもので、複数のI/O機器を接続するものは、リモートI/Oやリモートターミナル等とも称される。このネットワークシステムは、安全動作を保証できない場合にフェイルセーフが働いて制御対象装置が安全側になって動作停止する安全システムを構築する。よって、リモート装置20並びにPLC10や、ネットワーク30は、安全ネットワークシステムに準拠する構成を採る。
安全ネットワークシステムについて簡単に説明すると、例えば、安全入力機器で検出したセンシング情報は、リモート装置20からネットワーク30を介して所定のPLC10に送信される。このPLC10は、取得したセンシング情報を解析し、そのセンシング結果に基づいて動作すべき安全出力機器(当該機器が接続されたリモート装置20)に対して制御命令を送る。そして、異常事態発生の場合には、安全出力機器を安全側に動作させるようになっている。また、安全入力機器から安全出力機器に直接命令を送る場合もある。
PLC10は、本実施形態では、ビルディングブロックタイプである。図では、PLC10は、CPUユニット11と、I/Oユニット12と、通信ユニット13と、を備えて構成されているが、その他にも、電源ユニットや、必要に応じて高機能ユニットその他の各種のユニットが連結される。図5に示すように、PLC10の場合、各ユニット11,12,13は、内部バス10aにより接続され、その内部バス10aを経由してI/Oデータやメッセージの送受を行なう。安全PLCの場合、この内部バス8aも二重化されたりする。
CPUユニット11は、MPU11aと、RAM11bと、不揮発性メモリ11cと、表示部11eと、設定部11fと、バス制御部11hと、を備える。MPU11aは、ユーザプログラムをサイクリックに演算実行し、安全ネットワークシステムを構成する各機器の制御等を司る。RAM11bは、MPU11aが演算実行する際のワークメモリや、I/Oデータを格納するIOメモリ等として機能する。不揮発性メモリ11cは、ツールや設定部11fを介して設定される各種の設定データや、ユーザプログラム等が格納される。表示部11eは、たとえばLEDなどの動作状態(通信状態)や異常/正常を示す表示ランプ(警報ランプ)や、液晶パネルやELパネルを用いたメッセージ表示機能を備えたものなどがある。設定部11fは、アドレスを設定するスイッチなどである。バス制御部11hは、内部バス10a用のインタフェース(物理層)であり、MPU11aは、バス制御部11h経由で所定のユニットとの間でデータの送受を行なう。
I/Oユニット12は、MPU12aと、RAM12bと、不揮発性メモリ12cと、表示部12dと、設定部12eと、I/O駆動回路12fと、バス制御部12gと、を備える。MPU12aは、内部バス10aを介して取得したメッセージを受けて、所定の処理を実行し、レポンスを生成・返信したり、接続されたI/O機器に対する制御等を実行したりする。RAM12bは、MPU12aが処理を実行する際に使用するワークメモリとして機能する。不揮発性メモリ12cは、各種の設定データ等が格納される。表示部12dは、たとえばLEDなどの動作状態(通信状態)や異常/正常を示す表示ランプ(警報ランプ)等である。設定部12eは、アドレスなどのパラメータを設定するスイッチなどである。I/O駆動回路12fは、I/Oユニット12に接続された入力機器や出力機器等の外部のI/O機器との間でI/Oデータの送受を行なう。I/O機器が、ON/OFFの2値を採るものとすると、出力機器の場合には、I/O駆動回路12fは、MPU12aからの指示に従い、出力機器の動作のON/OFFを制御する。I/O機器が入力機器の場合、I/O駆動回路12は、そのI/O機器の状態をMPU12aに伝える機能を持つ。電気回路に開閉スイッチを設け、その開閉スイッチを開閉することにより、出力機器の動作を制御するようにすることもできる。バス制御部12gは、内部バス10a用のインタフェース(物理層)であり、MPU12aは、バス制御部12g経由で所定のユニットとの間でデータの送受を行なう。
通信ユニット13は、MPU13aと、RAM13bと、不揮発性メモリ13cと、表示部13dと、設定部13eと、通信物理層13fと、バス制御部13gと、を備える。MPU13aは、CPUユニット11との通信処理や、外部の機器との通信処理を実行する。この通信処理は、予め決まったI/Oデータの送受信処理(転送処理を含む)や、受信した自己宛のメッセージに対する処理並びにそのレスポンスの返信処理等もある。
RAM13bは、MPU13aが処理を実行する際に使用するワークメモリとして機能する。不揮発性メモリ13cは、各種の設定データ等が格納される。表示部13dは、たとえばLEDなどの動作状態(通信状態)や異常/正常を示す表示ランプ(警報ランプ)等である。設定部13eは、アドレスや通信速度などのパラメータを設定するスイッチなどである。通信物理層13fは、接続されるネットワークの通信プロトコルに対応する物理層であり、通信インタフェースとも称される。バス制御部13gは、内部バス10a用のインタフェース(物理層)であり、MPU13aは、バス制御部13g経由で所定のユニットとの間でデータの送受を行なう。
図6は、リモート装置20の内部構造を示すブロック図である。このリモート装置20は、1または複数のセンサやスイッチやリレーその他の安全入力機器や安全出力機器等のI/O機器を接続する。また、リモート装置20は、MPU20aと、RAM20bと、不揮発性メモリ20cと、表示部20dと、設定部20eと、通信物理層20fと、I/O駆動回路20gと、を備えている。MPU20aは、ネットワーク30を介して取得したメッセージを受けて、所定の処理を実行し、レポンスを生成・返信したり、接続されたI/O機器に対する制御等を実行したりする。つまり、このI/O機器に対する制御は、例えば接続されたセンサやスイッチ等の入力機器のI/Oデータ(INデータ)を取得し、所定のタイミングでコネクションが張られたPLC10等に向けて送信することであり、アクチュエータやリレー等の出力機器が接続されている場合はPLC10等から送られてくるI/Oデータ(OUTデータ)を取得し、接続された出力機器を動作させることである。
RAM20bは、MPU20aが処理を実行する際に使用するワークメモリとして機能する。不揮発性メモリ20cは、各種の設定データ等が格納される。表示部20dは、たとえばLEDなどの動作状態(通信状態)や異常/正常を示す表示ランプ(警報ランプ)等である。設定部20eは、アドレスを設定するスイッチなどである。通信物理層20fは、接続されるネットワーク30の通信プロトコルに対応する物理層であり、通信インタフェースとも称され、マスタとなる通信ユニット13との間でI/Oデータや各種メッセージ等の送受を行なう。I/O駆動回路20gは、入力機器や出力機器等の外部のI/O機器と接続しI/Oデータの送受を行なう。I/O機器が、ON/OFFの2値を採るものとすると、出力機器の場合には、I/O駆動回路20gは、MPU20aからの指示に従い、出力機器の動作のON/OFFを制御する。I/O機器が入力機器の場合、I/O駆動回路20gは、そのI/O機器の状態をMPU20aに伝える機能を持つ。電気回路に開閉スイッチを設け、その開閉スイッチを開閉することにより、出力機器の動作を制御するようにすることもできる。また、リモート装置20がリモートターミナルのように複数のI/O機器を接続可能とする場合、I/O駆動回路20gは、I/O機器を接続するための端子部を複数個有し、各端子部に対して個々に制御する(I/Oデータの送受等を行なう)。
ここで本実施形態では、ユーザが作成したプログラム(ユーザプログラム)が使用する信号(I/Oデータ)に、それが有効なものか否かの属性情報(ステータスフラグ)を付加するようにした。そして、CPUユニットがユーザプログラムを実行する場合、ファンクションブロック等の複数の命令語から構成されるプログラム構成単位であるPOUを実行するに際し、演算部であるMPU11aは、図7に示すフローチャートを実行する機能を備えた。すなわち、MPU11aは、ユーザプログラムを順次実行し、処理対象がファンクションブロックになると、すぐに演算実行することはなく、そのファンクションブロックの入力信号の属性を確認する(S1,S2)。そして、全ての属性情報が有効になっている場合(S2はYes)、MPU11aは、当該ファンクションブロックを実行するとともに、そのファンクションブロックの実行結果である出力信号の属性情報を有効にする(S3,S4)。一方、属性情報が無効な入力信号が1つでも存在する場合(S2はNo)、MPU11aは、ファンクションブロックのプログラムは実行しないようにする(S5)。従って、属性情報の初期値は無効であるので、係る非実行のファンクションブロックの出力信号の属性情報は無効のままとなる。なお、このとき、無効状態に更新する処理を行なっても良い。
一例を示すと、ユーザプログラムが、図8に示すように構成されているものとする。このユーザプログラムは、まず、リモート装置Aの端子0と、自己のIOユニットの端子0の2つの信号が第1ファンクションブロックFB11に入力され、その第1ファンクションブロックFB11の演算結果(出力信号)が第3ファンクションブロックFB13の一方に入力される。一方、リモート装置Bの端子0と、自己のIOユニットの端子1の2つの信号が第2ファンクションブロックFB12に入力され、その第2ファンクションブロックFB12の演算結果(出力信号)が第3ファンクションブロックFB3の他方に入力されるとともに、リモート装置Cの端子0へ出力される。そして、第3ファンクションブロックFB13の演算結果(出力信号)は、自己のI/Oユニットの端子10へ与えられる。
前提として、全てのI/Oデータの属性情報の初期値は無効となり、コネクションが確立されて正規のデータが受信できた場合(リモート装置の場合)や、データを受け取った場合(I/Oユニットの場合)に、属性情報が有効に切り替わる。そして、上記のプログラムにおいて、リモート装置Aの端子0と、I/Oユニットの端子0の信号の属性情報が無効(リモート装置とのコネクショが確立されていない,I/Oユニットからのデータを受信していない状態)で、リモート装置Bの端子0とI/Oユニットの端子1からの信号の属性情報が有効とする。
すると、第1ファンクションブロックFB11は、全ての入力信号の属性情報に無効であるので、演算されず、その出力信号の属性情報も無効状態のままとなる。一方、第2ファンクションブロックFB12は、全ての入力信号の属性情報が有効であるので、演算実行され、その出力信号の属性情報も有効に切り替わる。
第3ファンクションブロックFB13は、第1ファンクションブロックFB11からの入力信号が無効状態のままであるので、やはり演算実行はされず、その出力信号の属性情報も無効状態のままとなる。
そして、この状態において、リモート装置Aの端子0と、自己のIOユニットの端子0の2つの信号の属性情報が、いずれも有効になった場合には、第1ファンクションブロックFB11は演算実行され、その結果が出力信号(属性情報:有効)される。すると、第3ファンクションブロックFB13の全ての入力信号が有効になるので、当該第3ファンクションブロックFB13も演算実行され、その出力がI/Oユニットの端子10へ与えられる。
従って、例えば図2に示したEDMファンクションブロックFB1の場合、外部の安全リレー2cとの間でコネクションが確立するまでのあいだは、EDM Feed Back信号の属性情報は無効となっているので、当該EDMファンクションブロックFB1は演算実行されない。よって、出力信号とEDM Feed Back信号の関係が判定状態にあるか否かのチェックも行なわれないので、異常状態にあると判定されることはない。そして、安全リレー2cとの間でコネクションが確立し、正常にデータが受信できてEDM Feed Back信号の属性情報が有効になり、かつ、他の入力信号の属性情報も有効となると、EDMファンクションブロックFB1は実行され、出力信号とEDM Feed Back信号が反転関係にあるか否かの異常状態の有無のチェックが行なわれる。このとき反転状態にない場合には、機器の異常があるとなると判断できる。
上記の処理を実行するため、CPUユニット11のRAM11bに、図9に示すように、IOメモリ15と関連付けてステータスフラグ記憶部16を設けた。このステータスフラグ記憶部16は、IOメモリ15に格納される各I/Oデータと一意に関連付けられ、各I/Oデータが有効(1)か無効(0)かの情報(属性情報)が格納される。IOメモリ15の格納領域(アドレス)と、ステータスフラグ記憶部16の格納領域(アドレス)の関係づけは、別のテーブル等により管理され、MPU11aが演算実行する際には、IOメモリ15にアクセスして入力信号を取得する際には、ステータスフラグ記憶部16にアクセスし該当する属性情報を確認し、ファンクションブロックを演算実行して得られた出力信号をIOメモリに格納する際には、それに関連付けられたステータスフラグ記憶部16の該当領域の属性情報を有効に更新する。
また、通信ユニット13のRAM13b内にも、通信相手のリモート装置20についてのI/Oデータを格納するIOメモリが用意されているので、そのIOメモリに格納されるI/Oデータの属性情報を格納するためのステータスフラグ記憶部も、同様にRAM13bに用意し、管理する。
そして、ステータスフラグ記憶部16の無効/有効の管理は、MPU11aが、以下のようにして行なう。すなわち、このステータスフラグ記憶部16の初期値は、全て無効(0)としておく。そして、上述したように、ファンクションブロックの出力信号に対応するステータスフラグ記憶部16の格納領域については、上述したようにCPUユニット11のRAM11aが当該プログラムを演算実行し、出力信号を出力(IOメモリへの書き込み)するとともにその信号の属性情報を有効(1)に更新する。
また、入力信号については、通信ユニット13や入力機器が接続されたI/OユニットからCPUユニット11に対して所定のタイミング(I/Oリフレッシュ)でI/Oデータが送られてくるが、そのI/Oデータに属性情報を付加して送るようにする。すると、MPU11aは、取得したI/OデータをIOメモリの所定の領域に格納し、取得した属性情報を対応するステータスフラグ記憶部16の格納領域に格納する。なお、I/Oユニットや通信ユニット13からの属性情報の送信であるが、毎回全てのI/Oデータに属性情報を付加するようにしても良いし、無効状態から有効状態に切り替わった際に1回或いはその後数回だけ送り、それ以降は送らないようにしても良い。無効状態から有効状態への切り替わりは、例えば、属性情報を送信したか否かのフラグを用意し、属性情報を送っていない場合で属性情報が有効になった場合に有効状態への切り替わりがあったと判断し、送信することで対応できる。
また、通信ユニット13におけるステータスフラグ記憶部16に格納された無効状態から有効状態の切り替え(特に、入力信号について)であるが、MPU13aは、それぞれのリモート装置のI/OデータのIOメモリへの格納領域はわかっているので、コネクションが確立し、リモート装置からI/Oデータを受信したことを条件に、そのI/Oデータに対応するステータスフラグ記憶部16の格納領域の属性情報を有効に書き換えることで管理できる。
I/Oユニット12についても、コネクションの確立の判定が不要なことを除いて、基本的に、上記と同様の処理を行なうための機能・構成を備える。つまり、I/Oユニット12のMPU12aは、自己に接続された入力機器からI/Oデータを受信したならば、その信号の属性情報を無効から有効に切り替える処理を行なう。また、I/OデータをCPUユニット11に送る際に、そのI/Oデータに属性情報を付加する。そして、その属性情報を付加して送信する処理は、毎回行なっても良いし、有効状態への切り替わった際に1回或いはその後数回送るようにしても良い。
なお、一旦属性情報が“有効”に切り替わったならば、その後は、特に更監視・更新処理をしなくても良い。これは、コネクションが確立した後は、通常のネットワーク(機器の異常・故障発生)の監視を行なうことができるからである。
なお、上述した実施形態では、プログラム中に入出力変数と内部変数を持つブロックである“ファンクションブロック”を含む例について説明したが、本発明は、ファンクションブロックに限ることはなく、例えば、PLC等の産業用コントローラにおける演算の組み合わせを拡張したブロックで内部変数を持たない“ファンクション”でもよいし、I/Oやグローバル変数を含むメインプログラムである“プログラム”でもよい。このように、“ファンクションブロック”,“ファンクション”,“プログラム”等のPOU(Program Organization Unit)について適用できる。いずれの場合も、全ての入力信号の属性情報が有効になるまで、POUを演算実行しないとともに、全ての入力信号の属性情報が有効になったならば、演算実行するとともにその出力信号の属性情報を有効に更新する。