(57)【要約】【課題】  メインプログラム内にて提供するサブルーチンプログラムをどのような条件で実行・非実行となるように作成されても提供するサブルーチンプログラムを適切に動作されることができるコントローラを提供すること【解決手段】  メインプログラムと、そのメインプログラム中に記述されたサブルーチン分岐命令により呼び出されて実行されるサブルーチンプログラムが実装されたコントローラである。まず、サブルーチン分岐命令の実行条件の成立，不成立にかかわらずサブルーチンプログラムを起動させる。そして、変数メモリには、実行条件の成立，不成立の情報を記憶保持させ、サブルーチンプログラムで実行する際に、その記憶保持させた実行条件に基づき動作を決定するようにした。【選択図】        図８
2005258828.tif 000002
【特許請求の範囲】
【請求項１】
メインプログラムと、そのメインプログラム中に記述されたサブルーチン分岐命令により呼び出されて実行されるサブルーチンプログラムが実装されたコントローラであって、
前記サブルーチン分岐命令の実行条件の成立，不成立にかかわらずサブルーチンプログラムを起動させる機能と、
前記実行条件の成立，不成立の情報を記憶する実行条件記憶部とを備え、
前記サブルーチンプログラムは、前記実行条件記憶部に格納された実行条件に基づき動作が決定されるようにしたことを特徴とするコントローラ。
【請求項２】
前記決定される動作は、前記実行条件が不成立の場合にサブルーチンプログラムの実行を停止するものであることを特徴とする請求項１に記載のコントローラ。
【請求項３】
前記サブルーチンプログラムは、前記実行条件が成立の場合に実行されるプロクラム部分と、前記実行条件が不成立の場合に実行されるプロクラム部分とを含むように構成されたことを特徴とする請求項１または２に記載のコントローラ。
【請求項４】
前記サブルーチンプログラムへの入力データが格納されている入力データエリアが格納されたアドレスを指定する手段を備えたことを特徴とする請求項１から３のいずれか１項に記載のコントローラ。
【請求項５】
サブルーチンプログラムの実行結果である出力データを格納する出力データエリアのアドレスを指定する手段を備えたことを特徴とする請求項１から４のいずれか１項に記載のコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コントローラに関するものである。
【背景技術】
【０００２】
生産工場（製造現場）に設置されるファクトリーオートメーション（ＦＡ）の制御装置として、プログラマブルコントローラ（ＰＬＣ）が用いられている。このＰＬＣは、複数のユニットから構成される。すなわち、電源供給源の電源ユニット，ＰＬＣ全体の制御を統率するＣＰＵユニット，ＦＡの生産装置や設備装置の適所に取り付けたスイッチやセンサの信号を入力する入力ユニット，アクチュエータなどに制御出力を出す出力ユニット，通信ネットワークに接続するための通信ユニットなどの各種のユニットを適宜組み合わせて構成される。そして、これら各ユニットは、側面に設けられたコネクタを介して電気・機械的に連結され、電源ユニットから各ユニットへ電力供給を受けるとともに、情報の送受も行えるようになっている。
【０００３】
ＰＬＣのＣＰＵユニットにおける制御は、入力ユニットで入力した信号をＣＰＵユニットのＩ／Ｏメモリに取り込み（ＩＮリフレッシュ）、予め登録されたユーザプログラム記述言語（例えばラダー言語）で組まれたユーザプログラムに基づき論理演算をし（演算実行）、その演算実行結果をＩ／Ｏメモリに書き込んで出力ユニットに送り出し（ＯＵＴリフレッシュ）、その後、いわゆる周辺処理を行うと言うことをサイクリックに繰り返し処理するようになる。
【０００４】
ところで、上述のユーザプログラムのプログラム構成として、サブルーチンプログラムを利用したものがある。このサブルーチンプログラムは、たとえば、モータを駆動させるなどある機能を実行するプログラム部品であり、メインプログラム内にサブルーチンプログラムを呼び出すコール命令を記述し、当該コール命令を実行することにより、呼び出されたサブルーチンプログラムを実行する。そして、そのサブルーチンプログラムを最後まで実行したならば、メインプログラムに戻り、上記のコール命令の次のステップを実行する。なお、サブルーチンのコール命令は、実行条件が成立すれば実行され、不成立であれば完全に非実行（Ｓｋｉｐ）となるのが一般的である。このようにサブルーチンプログラムを用いたプログラム構成については、たとえば特許文献１に開示されている。
【０００５】
また、メーカーやベンダーは、商品や装置を提供するエンドユーザに対して提供する商品または機械を利用しやすいものとするために機能毎にプログラムを作成しソフト部品として提供することがある。すなわち、エンドユーザが商品等を利用しやすくするために、メーカー側で商品の機能を使用するためのラダーライブラリ（サブルーチンプログラム）を用意することがある。
【特許文献１】特開平９−２６５３０６
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来のソフト部品として商品の機能をサブルーチンプログラムとしてエンドユーザに提供するような場合、以下に示す問題があった。まず、提供するサブルーチンプログラム内で直接Ｉ／Ｏを制御する場合、メインプログラム側でサブルーチンが非実行となるとサブルーチンプログラムが完全に実行されなくなってしまうためＩ／Ｏ制御がそのままとなってしまう。特に、サブルーチンプログラムを実行して得られる制御が、出力機器の制御などの場合には、出力をＯＦＦしないと危険な場合がある。
【０００７】
すなわち、サブルーチンプログラムが、モータのＯＮ／ＯＦＦを制御するものであるとすると、あるサイクルの実行によりメインプログラムからサブルーチンプログラムが読み出され、そのサブルーチンプログラムの実行がされる。すなわち、モータのＯＮ／ＯＦＦの実行条件が判断され、例えば実行条件が成立であればＯＮとなり、モータが駆動される。この状態は保持される。そして、その後、メインプログラムが継続して実行され、サブルーチンプログラムの呼び出しが行なわれると、その都度サブルーチンプログラムが実行され、モータのＯＮ／ＯＦＦについて成立／不成立が判断される。このとき、不成立に変わっている場合には、モータがＯＦＦ（停止）されることになる。
【０００８】
しかし、モータのＯＮ／ＯＦＦの実行条件が不成立になっている場合でも、そのサブルーチンプログラムが呼び出されて実行されない限り、不成立と判断してＯＦＦすることができず、出力がＯＮの状態が続きモータが駆動しつづけてしまう。従って、仮にメインプログラムでサブルーチンプログラムのコール呼び出しの条件が不成立になると、サブルーチンが呼び出されなくなり、モータを停止することができなくなるという問題がある。
【０００９】
つまり、サブルーチンプログラム内で直接コントローラのハードウェアを制御し、位置決め動作におけるＪＯＧ運転動作のためのパルス出力コントロールを行うケースにおいて、まずユーザはメインプログラムにて本サブルーチンプログラムをコールするサブルーチン命令を実行する。メインプログラム側からの指令によりサブルーチンプログラム内でパルス出力し、指令がＯＮしている間ＪＯＧ運転させている状態でメインプログラム側のサブルーチン命令が非実行となるとサブルーチンプログラムが完全に実行されなくなり状態は保持となるのでパルス出力動作のままとなり危険な状態となることが考えられる。
【００１０】
メーカーがＪＯＧ運転機能としてのラダーライブラリをユーザに提供する場合、メインプログラム側でサブルーチン命令が実行されなくなった場合、機能停止（動作停止）してから非実行状態とするのが安全面からみても必要である。しかし、メインプログラム側でサブルーチン命令が非実行となると完全にサブルーチンプログラム側は実行されなくなるため、ユーザが作成するメインプログラム中のサブルーチンコール命令の実行条件がＯＦＦとなるとサブルーチンプログラム実行が完全にスキップされてしまうためメインプログラムでサブルーチンコール命令の実行条件がＯＦＦとなった場合の処理がサブルーチンプログラム側で組むことができないという問題がある。
【００１１】
また、サブルーチンプログラム側で演算処理を数サイクルに分割して実行し、サイクルタイムが大きくならないようにしたいという要求があるが、サブルーチンプログラムの立ち上がり検出がサブルーチンプログラム側だけで構築することができないため、分割処理するようなソフト部品を作成することはできない。すなわち、サブルーチンプログラム内でサブルーチンが起動された初回かどうか判断する手段がないため数サイクルに分割して処理を行いたい場合のプログラムをサブルーチンプログラムとして作成することができないのである。
【００１２】
従来のサブルーチン命令でもプログラムを組み合わせて同様の動作ができるようにすることは可能であるが、結局メインプログラム側とのＩ／Ｆ制約が必要となりソフト部品としての汎用性が低下してしまう。従来のサブルーチン命令は一般的にサブルーチンプログラムを起動するだけであったり、一部引数を持つサブルーチン命令でも引数量に制約がある（引数量が多くなると起動時間も遅くなる）ため大量の入力／出力を必要とするサブルーチンプログラムの提供はできなかったり、できてもメインプログラム側とのＩ／Ｆ制約が必要となる。このように、制約が必要となることにより提供するソフト部品としての汎用性が低下してしまう。
【００１３】
この発明は、メインプログラム内にて提供するサブルーチンプログラムをどのような条件で実行・非実行となるように作成されても提供するサブルーチンプログラムの機能として、実行時、非実行時、実行立ち上がり時、実行立下り時など適切に判断して機能させることができるコントローラを提供することを目的とする。
【課題を解決するための手段】
【００１４】
この発明のコントローラは、メインプログラムと、そのメインプログラム中に記述されたサブルーチン分岐命令により呼び出されて実行されるサブルーチンプログラムが実装されたコントローラであって、前記サブルーチン分岐命令の実行条件の成立，不成立にかかわらずサブルーチンプログラムを起動させる機能と、前記実行条件の成立，不成立の情報を記憶する実行条件記憶部とを備え、前記サブルーチンプログラムは、前記実行条件記憶部に格納された実行条件に基づき動作が決定されるようにした。
【００１５】
前記決定される動作は、たとえば、前記実行条件が不成立の場合にサブルーチンプログラムの実行を停止するようにすることができる。また、前記サブルーチンプログラムは、前記実行条件が成立の場合に実行されるプロクラム部分と、前記実行条件が不成立の場合に実行されるプロクラム部分とを含むように構成することもできる。
【００１６】
実行条件記憶部は、実施の形態では、変数メモリの自サブルーチンＮｏ．リレーエリアに対応する。また、実施の形態では、サブルーチンプログラム中の所定の接点を、変数メモリのサブルーチンＮｏ．リレーエリアに関連づけることにより、動作が決定されるようにした。
【００１７】
このサブルーチン命令はサブルーチンプログラム側でエンドユーザが作成するメインプログラム側でのサブルーチン実行条件（起動条件）が判定できる。よって、特にメインプログラム側との制約を設けることなくサブルーチンプログラム内にて直接Ｉ／Ｏを制御することが可能となる。つまり、例えば、実行条件成立中は出力動作し実行条件が不成立となればサブルーチンプログラム側で出力をＯＦＦしてから処理をＳｋｉｐするようにすることができる。また、サブルーチンプログラムの実行条件成立立上がり、立下りが特定エリアの自サブルーチンＮｏのフラグによって検出できるため、起動時１回だけ処理するサブルーチンプログラムを作成したり、負荷量の大きな演算のプログラムを数サイクルに分けて結果を出力するサブルーチンプログラムを作成することが可能となる。そして、サブルーチンプログラムを提供されたユーザ側は、従来のサブルーチン命令と同じ間隔でメインプログラム内でサブルーチン分岐命令を使用することができる。
【００１８】
前記サブルーチンプログラムへの入力データが格納されている入力データエリアが格納されたアドレスを指定する手段を備えるとよい。また、サブルーチンプログラムの実行結果である出力データを格納する出力データエリアのアドレスを指定する手段を備えるとよい。実施の形態では、インデックスレジスタエリアに入力データや出力データの具体的なアドレスを格納することにより実現する。
【００１９】
これにより、サブルーチンプログラム側が処理するためのデータが格納されているアドレスを参照することが可能となり、メインプログラム側で任意に用意される引数データの格納元や格納先アドレスをサブルーチンプログラム側で参照可能なる。よって、複数の引数を組み合わせる場合や１つの引数のデータ量が多い場合でもサブルーチンプログラム起動時間は短いままで、メインプログラム側から渡される任意のデータの処理を実行するサブルーチンプログラムを作成することが可能となる。
【００２０】
上記結果として、メーカーやベンダーが、エンドユーザが利用するための機能（ソフト部品）を従来のような単純な演算処理だけでなく直接ハードウェア制御したりする幅広いソフト部品（サブルーチンプログラム）を汎用性高く提供することが可能となる。
【発明の効果】
【００２１】
この発明では、メインプログラム内にて提供するサブルーチンプログラムをどのような条件で実行・非実行となるように作成されても提供するサブルーチンプログラムの機能として、実行時、非実行時、実行立ち上がり時、実行立下り時など適切に判断して機能させることができる。
【発明を実施するための最良の形態】
【００２２】
図１は、本発明が適用されるコントローラの一例である同期コントローラ（モーションコンローラ）を示している。まず、本発明の実施の形態を説明する前に、この同期コントローラについて説明する。この同期コントローラ１０は、電源モジュール１１とサイクルマスタモジュール１２と、モーションコントロールモジュール１３と、エンドモジュール１４から構成される。１つのサイクルマスタモジュール１２に対し複数のモーションコントロールモジュール１３を装着可能としている。サイクルマスタモジュール１２とモーションコントロールモジュール１３は、共にユーザプログラムがインストールされ、それぞれがサイクリックに実行される。
【００２３】
本例では、サイクルマスタモジュール１２のシリアルポートＳＰ１にプログラミングツール３を接続し、サイクルマスタモジュール１２のユーザプログラムは、そのプログラミングツール３から直接サイクルマスタモジュール１２にアップロード・ダウンロードされ、モーションコントロールモジュール１３のユーザプログラムは、プログラミングツール３からサイクルマスタモジュール１２を経由してアップロード・ダウンロードがされる。
【００２４】
モーションコントロールモジュール１３は、パルスやアナログのサーボモータ４（サーボドライバ５）などの入出力機器とデータの送受を行い、実際にモーション制御を行うものである。サイクルマスタモジュール１２は、各モジュールが同期して動作する場合に、その制御サイクルのタイミングを生成したり、上位コントローラ１やプログラミングツール３と通信を行い、自己あるいはモーションコントロールモジュール１３と外部の装置１，２との間のデータの受け渡し（ゲートウェイ）をする機能を備えている。
【００２５】
つまり、従来のＰＬＣに高機能ユニットの一つとして連結されたモーションコントロールユニットの場合、モーション制御を行う機能と、ＰＬＣを構成するＣＰＵユニットとの間の通信を行う機能が組み込まれ、サイクリックに行われるユーザプログラムの実行時にモーション制御を行い、周辺処理の際にＣＰＵユニットとの間の通信等を行うようにしたが、本実施の形態では、モーション制御と周辺処理をそれぞれ別のモーションコントロールモジュール１３とサイクルマスタモジュール１２に分けて別々に処理させるようにした。これにより、モーションコントロールモジュール１３では、主にモーション制御に関する処理を実行することにより、高速かつ高精度な制御を行えるようになる。
【００２６】
さらに、モーションコントロールモジュール１３は複数連結可能となっているので、用途に合わせてモーションコントロールモジュール１３を追加することができ、アプリケーションにあわせたコントローラ構造が構築でき、必要十分な適切なスペース・コストとなり好ましい。コントローラとして、それぞれのモジュールが成すべき処理を分散させて各モジュールにユーザプログラムを持たせることが可能であるため、複数モジュール構成となっても処理能力を低下させることなく実行させることも可能である。
【００２７】
さらに、モーションコントロールモジュール１３を複数連結した場合、後述する同期バスの活用により別のモーションコントロールモジュール１３が持つＩ／Ｏの情報を高速で入手するとともに自モジュールの処理に使用することも可能である。よって、例えば、パルス入出力機能を有するモーションコントロールモジュール１３がアナログ入出力機能を有する他のモーションコントロールモジュールからアナログ入力情報を同期バスを介して入手し、如何にも自モジュールが内蔵するＩ／Ｏかのように使用して自モジュールのパルス出力制御などに使用することが可能である。これにより、より複雑な制御も高速かつ高精度に行うことができる。
【００２８】
次に、上述した処理機能を実現するための具体的なモジュールの構成を説明する。図２は、ハードウェア構成を示しており、図３はソフトウエアに着目したコントローラの内部イメージを示している。
【００２９】
この実施の形態では、サイクルマスタモジュール１２，モーションコントロールモジュール１３が、共にＭＰＵ１２ａ，１３ａと、ＲＯＭ１２ｂ，１３ｂと、ＲＡＭ１２ｃ，１３ｃを有し、各モジュール１２，１３のシステムソフトはＭＰＵ１２ａ，１３ａまたはＲＯＭ１２ｂ，１３ｂに格納される。また、このＲＯＭ１２ｂ，１３ｂは、たとえばフラッシュＲＯＭを用いることができ、ユーザにて作成されるユーザプログラムもこのＲＯＭ１２ｂ，１３ｂにバックアップ格納される。
【００３０】
図３に示すように、ＲＡＭ１２ｃ，１３ｃ内の記憶領域は、ユーザプログラムエリア，変数エリア，ワークエリアが設定されており、ユーザプログラム実行時は電源ＯＮ時にＲＯＭ１２ｂ，１３ｂからＲＡＭ１２ｃ，１３ｃに展開されてそれを実行する。
【００３１】
また、変数エリア（変数メモリ）はユーザプログラムにて使用するためのエリアであり、各モジュール１２，１３が持つＩ／Ｏのデータや、モジュール間で交換する情報の格納エリアとして使用される。ワークエリアは各モジュール１２，１３のシステムソフトがシステム実行のために使用するエリアである。
【００３２】
これらのＭＰＵ１２ａ，１３ａ，ＲＯＭ１２ｂ，１３ｂ，ＲＡＭ１２ｃ，１３ｃの機能は、ＰＬＣを構成するＣＰＵユニットや、モーションコントロールニットなどに実装されるものと基本的に同様である。
【００３３】
さらにモーションコントロールモジュール１３は、サーボモータなどのＩ／Ｏ機器（外部装置）を制御するためのパルス入出力やアナログ入出力回路１３ｈを有し、それら各入出力回路１３ｈは、特殊Ｉ／Ｏポート１３ｉを介して外部のＩ／Ｏ機器と接続されるようになっている。ここに接続されるＩ／Ｏ機器としては、図１に示すサーボモータ４を制御するサーボドライバ５がある。そして、外部のＩ／Ｏ機器（入力機器）から取得した入力信号は、ＭＰＵ１２ａに与えられ（パルス入力回路はＡＳＩＣを介して）、ＭＰＵ１２ａから外部のＩＯ機器（出力機器）へ対して送るデータは、アナログ出力回路，パルス出力回路を介して行われる。
【００３４】
また、モーションコントロールモジュール１３には、装置構成の共通化を図る上でパルスの入出力回路とアナログの入出回路１３ｈの両方を設けたが、実際の運用に際しては、それら全てを用いてもよいし、パルスとアナログのうちの一方のみとしたり、入力回路のみあるいは出力回路のみを実際に稼働するようにしてもよい。このようにどの種類を有効にするかは、システム設定（図３参照）により設定されている。また、モーションコントロールモジュール１３の外部Ｉ／Ｆとしてこれらパルス・アナログ入出力回路だけではなく通信Ｉ／Ｆを設けてもよい。
【００３５】
さらに、サイクルマスタモジュール１２，モーションコントロールモジュール１３は、外部Ｉ／ＦとしてＩ／Ｏポート１２ｊ，１３ｊを有し、そのＩ／Ｏポート１２ｊ，１３ｊに接続された機器とＭＰＵ１２ａ，１３ａとの間でデータの送受が可能となる。つまり、モーションコントロールモジュール１３では、直接モータ制御するための汎用的なＩ／Ｏ機能部（パルスまたはアナログなど）と、直接外部機器（ＯＮ／ＯＦＦセンサ、アナログセンサ、エンコーダなど）から情報を入手するＩ／Ｏ機能部分を有する。
【００３６】
各モジュールは、上述した各外部Ｉ／Ｆ（Ｉ／Ｏポート１２ｊ，１３ｊ，特殊Ｉ／Ｏポート１３ｉなど）から取得した入力データに基づき、ユーザプログラムを演算実行し、得られた出力データを所定の外部Ｉ／Ｆを介して出力することにより制御することをサイクリックに繰り返す。このように、モータ制御には、汎用インタフェースを利用することができるため、市販のモータから適切なものを選択できる。また、通信ネットワークに比べ、モータ制御手段がパルスやアナログとなるため指令が連続的なものとなり滑らかな制御を実現することが可能となる。
【００３７】
また、各モジュールでのモーターコントロールにおいて、数軸（１ｏｒ２単位）で専用のＣＰＵを持たせ直接外部からの情報入力、モータへのパルスまたはアナログにて指令を出力できる構造となる。よって、使用されるモータについてはパルスまたはアナログＩ／Ｆ方式となり汎用品から広く選択できる他、直接外部機器からの情報を取り込めるため通信方式などのようにタイムラグもなくクイックな応答性能を実現することができる。
【００３８】
さらに、各モジュール間は、イベントバスと同期バスで繋がっており、エンドモジュール１４には、それら各バスを終端するバス接続終端機能１３ａを有する。そして、モーションコントロールモジュール１３には、イベントバスに接続される共有メモリ１３ｆを有し、サイクルマスタモジュール１２にはイベントバスに接続されるイベント送受用ＡＳＩＣ１２ｄが備えられている。このイベント送受用ＡＳＩＣ１２ｄは、ゲートウェイの機能を持ち、例えば上位コントローラ１やプログラミングツール３などからモーションコントロールモジュール１３宛にイベント，プログラム等が送られてきた場合に、対応するモーションコントロールモジュール１３（モジュール番号などにより特定）の共有メモリ１３ｆに係るイベント等を格納する。また、モーションコントロールモジュール１３は、共有メモリ１３ｆに格納されたデータを読み出してイベントに対するレスポンスとして外部の上位コントローラ１などへ返送する処理などを実行する。
【００３９】
このイベントバスを介して伝送されるデータは、一般に容量が大きく伝送に時間がかかるため、従来のモーションコントロールユニットのようにサイクリックに行なわれる周辺サービスの時に行なうと、時間がかかり本来のモーション制御に支障を来すおそれがあるが、本実施の形態では、モーション制御を行なわないサイクルマスタモジュール１２が係るデータ転送を実行するためモーション制御に支障を生じない。さらに、同期制御を行なうための同期バスト別にイベントバスを設けたため、共有メモリ１３ｆへのアクセスと平行して同期バスを介して同期制御のためのデータの送受が行なえるので、同期制御への支障も生じない。
【００４０】
同期バスに接続される同期用ＡＳＩＣ１２ｅ，１３ｅが各モジュール１２，１３内にそれぞれ実装され、同期用ＡＳＩＣ１２ｅ，１３ｅにＭＰＵ１２ａ，１３ａが接続される。この同期用ＡＳＩＣ１２ｅ，１３ｅは、Ｎ：Ｎ通信を行なうもので、データリング方式により同期バスに接続された他の全ての同期用ＡＳＩＣ１２ｅ，１３ｅに対して一斉にデータを送信できる。つまり、同期バスにデータを出力することにより、他の同期用ＡＳＩＣ１２ｅ，１３ｅは、送られてきたデータを取り込むことができる。このように本発明の要部の１つとなる同期バスを介してデータを送受することにより同期をとる仕組みの詳細については、後述する。
【００４１】
このように、各モジュール間が同期バスとイベントバスの２つのバスでつながっており、それぞれのバスを介してモジュール間のデータを交換しながら、それぞれのモジュールが内蔵するユーザプログラムを実行する。つまり、各モジュールで毎サイクル共有したい情報（データ）は小容量だが高速でデータ交換可能な同期バスを使用し、毎サイクル共有する必要のない大容量のデータはイベントバスを使用する。
【００４２】
この情報の用途目的に合わせた２重のモジュール間バス構造により、時折発生するモジュール間の大容量のデータ交換（イベント）が発生しても毎サイクル共有しなければならない情報はこの影響を受けることなく共有化される。
【００４３】
これにより各モジュールは、自モジュールに内蔵されたＩ／Ｏからの情報のみならず、システムにて実施される同期バス，イベントバスによるデータ交換の情報も利用することができ、ユーザプログラムがそれらの情報を任意に使用して演算ができるようになっている。もちろん、このユーザプログラムの実行に伴い求められた演算結果は、自モジュールのＩ／Ｏから出力されたり、同期バス，イベントバスによるデータ交換の情報として出力されたりする。
【００４４】
図４は、同期バスを利用した同期制御について説明する図である。この図４では、モーションコントロールモジュール１３が３個連結されており、モジュール番号がそれぞれ＃１，＃２，＃３が設定されている。また、サイクルマスタモジュール１２のモジュール番号は＃０とする。
【００４５】
同期バスにて各モジュール間で共有されるデータは、自モジュール分も他モジュール分も含めてＲＡＭ１２ｃ，１３ｃに展開される変数メモリ内のモジュール間同期データ記憶エリア（図３参照）に格納される。このモジュール間同期データ記憶エリアは、図４に示すように各モジュール毎に割付けられておりデータリンクにより毎サイクルすべてのモジュールの情報が共有され、各モジュールでは自モジュール内の同期データエリアを参照することにより、同時にすべてのモジュールの情報が参照することができる。
【００４６】
つまり、サイクルマスタモジュール１２では、自モジュールが管理するデータは、＃０の記憶エリアに格納するとともに、所定のタイミングで＃０に格納されたデータを他のモーションコントロールモジュール１３に送る。これにより、他の全てのモーションコントロールモジュール１３は、送られてきたデータを受信するとともに、自己の変数メモリのモジュール間同期データ記憶エリアの＃０に割り当てられた記憶エリアに格納する。また、各モーションコントロールモジュール１３（たとえば「＃１」）も、自己が管理するデータを送信すると、他のモーションコントロールモジュール１３（たとえば「＃２」，「＃３」）やサイクルマスタモジュール１２がその＃１のデータを受信するとともに、該当するモジュール間同期データ記憶エリア中の＃１に割り当てられた記憶エリアに格納する。
【００４７】
この同期データの送受は、各サイクルごとに行う。そして、各モジュールが送るデータは、他のモジュールでもユーザプログラムの実行の際に参照するデータとする。これにより、１サイクル実行する都度各モジュールの変数エリアに格納された同期データは、最新のものに更新されているため、その最新のデータに基づいて演算実行することにより、精密で、そのときの状態にあった制御が行える。
【００４８】
この同期バスを介して送受する同期データの種類は、図５に示すように、各モジュールが持つ情報を任意に選択して同期データとして各モジュール間で共有することができるようにしている。例えば、同期データとして共有できるのは自モジュール内のユーザプログラム実行にて生成される演算結果はもちろんであるが、それに限ることはなく自モジュールが持つＩ／Ｏの最新値を同期データとすることができる。さらに、自モジュールが持つＩ／Ｏ情報を同期データとする場合には、自モジュールに設定されるシステム設定にて登録することができ、登録された情報が同期データとしてシステムにて自動で転送され交換される。なお、この図５における同期データエリア（＋０，＋１，……+ｎ）が、図４における１つの記憶エリア（たとえば「＃１」についての記憶エリア）に対応し、各エリアにおいてｎの値は任意にとれる。つまり、各期おくエリアのデータ容量は異なることを許容している。
【００４９】
そして、本実施の形態では、各モジュール間の同期データの送受は、まず各モーションコントールモジュール１３が管理する自モジュールのデータの送信ならびにそれに伴い他のモジュールの受信処理を行う。そして、全てのモーションコントロールユニット１３についての同期データの送受が完了したならば、それを認識したサイクルマスタモジュール１２が同期データを送信するように設定している。係る仕組みを採ることにより、サイクルマスタモジュール１２からの同期データを受信すると、今回のサイクルにおける全てのモジュールについてのデータ交換が完了したものと判断できる。
【００５０】
よって、各モジュールは、サイクルマスタユニット１２から同期データが送られてくると、今回のサイクルでの同期データの送受は完了と判断し、ユーザプログラムの演算などの正規の処理を行う。このように、サイクルマスタモジュール１２から送られてくる同期テータの受信を契機として各モーションコントロールモジュール１３は、通常の処理を行うため、同期がとられる。
【００５１】
ここで本発明では、通常のサブルーチン命令に加え、常時実行型でサブルーチンプログラムが実行されるサブルーチン分岐命令（ＪＳＢ）を用意した。このサブルーチン分岐命令は、図５に示すように、サブルーチンＮｏ．：Ｎと、転送データ格納先：Ｓと、実行結果格納先Ｄで定義される。
【００５２】
このサブルーチン分岐命令（ＪＳＢ）は、メインプログラム内においてはサブルーチンプログラムの実行条件が成立／不成立に関係なく常時実行型でサブルーチンプログラムが呼ばれ実行できるようにしている。
【００５３】
さらに、このサブルーチン分岐命令の使用時には、起動されるサブルーチンプログラムに対して１対１でそのサブルーチン分岐命令が実行されたときの実行条件の状態（ＯＮ／ＯＦＦ）をＲＡＭ１３ｃの変数メモリに反映するようにしている。さらに、このとき指定された転送データ格納先（Ｓ）と、実行結果格納先の絶対アドレス（Ｄ）を、それぞれインデックスレジスタＩＲ０，ＩＲ１に格納する。
【００５４】
図６は、変数メモリのデータ構造を示している。図示するように、サーボドライバなどの入出力機器のＩＯデータを格納する領域であるＩ／Ｏエリアと、内部接点などの内部ＩＯデータを格納する内部Ｉ／Ｏエリアと、各サブルーチンＮｏ．毎のリレー（接点）に関する情報を格納するサブルーチンＮｏ．エリアと、パラメータその他の各種データが格納されるデータメモリエリアと、本サブルーチン命令実行時に、指定された転送データ格納先（Ｓ）と、実行結果格納先の絶対アドレス（Ｄ）に対するインデックスレジスタエリアがある。Ｉ／Ｏ用エリア，内部Ｉ／Ｏ用エリアならびにデータメモリエリアは、従来のコントローラと同様である。このインデックスレジスタエリアに格納されたデータに基づき、データメモリエリアの入力データや出力データにアクセスし、データの読み書きが行える。
【００５５】
図７は、サブルーチンＮｏ．リレーエリアのデータ構造の一例を示している。この図において、このエリア内に各サブルーチンNo.毎のリレー（接点）が割付けられ、サブルーチンの実行条件が不成立の場合には、Ｂｉｔが「０」となり、成立の場合にはＢｉｔが「１」となる。このサブルーチンＮｏ．リレーを使用することによってサブルーチンプログラム起動時なのか実行中なのか、停止時なのか判断することができるため、起動時１回のみの処理、停止時の処理、起動時から数サイクルに分けて実施する処理を作り込むことが可能となる。
【００５６】
なお、サブルーチンプログラムを作成する人は、使用するサブルーチンプログラムＮｏ．を認識した上で作成するためどのサブルーチンＮｏ．リレーを参照すればよいかわかる。よって、サブルーチンプログラム内でこのサブルーチンＮｏ．リレーを使用して、メインプログラム側での実行条件の成立，不成立に応じて処理する内容のプログラムを作成することになる。
【００５７】
このように、本サブルーチン分岐命令で使用するサブルーチンＮｏ．リレーの実行条件の状態や、インデックスレジスタ（転送データ格納先（Ｓ），実行結果格納先の絶対アドレス（Ｄ））はユーザプログラムにて利用可能な変数メモリに割付けられる。そこで、このサブルーチン分岐命令により呼び出され、実行するサブルーチンプログラムは、まずこの変数メモリ内の該当するサブルーチンＮｏ．のリレー（図７のＢｉｔ）を参照し、その実行条件の成立／不成立を特定するリレーのＯＮ／ＯＦＦに基づき、サブルーチンの実行動作を決定する。つまり、サブルーチン内の処理を実行するか否かを決定したり、ＯＦＦ時の機能停止処理を実行させる。また、サブルーチンプログラムの実行立ち上がりもこの変数エリア内のサブルーチンＮｏリレーを使って検出し、数サイクルに分割した処理型のプログラムを作成することもできるようにしている。
【００５８】
たとえば、サブルーチンプログラムの実行条件がＯＮであれば、上記リレーの接点がＯＮになっているため、サブルーチンプログラムは正常（通常）の動作をする。また、リレーの接点がＯＦＦの場合、サブルーチンプログラムの実行を停止したり、ＯＦＦ時の機能停止処理を実行させる。このようにＯＦＦの時にどのような処理をするかは、サブルーチンプログラムで予めプログラムとして記述することにより規定される。
【００５９】
このように、サブルーチンプログラムの呼び出しの条件の成立／不成立にかかわらず、サブルーチンプログラムが呼び出されるため、たとえば、サブルーチンプログラムがモータの駆動を制御するものであり、あるサイクルでのサブルーチンプログラムの実行に伴い、モータの動作がＯＮになった後、メインプログラム側のサブルーチンプログラムの実行条件がＯＦＦになってもスキップすることなくサブルーチンプログラムが呼び出される。そして、サブルーチンプログラムは、メインプログラム側の実行条件の成立／不成立を確認するため、不成立に応じた処理が行え、ＯＮ状態が継続するのを阻止できる。
【００６０】
つぎに、具体的なプログラム例に基づいて、本発明の機能を説明する。メインプログラム中にサブルーチンプログラム実行命令である［ＪＳＢ＃０，Ｓ，Ｄ］があると、ＳＢＮ００が呼び出されて実行する。このサブルーチンプログラム（ＳＢＮ００）は、たとえば先頭の接点Ａをそのサブルーチンプログラム（ＪＳＢ０００）に対応したサブルーチンＮｏ．ｌリレーエリアに割り付けることにより、実行条件が成立の場合には、接点ＡもＯＮに成り、不成立の場合には接点ＡがＯＦＦになる。よって、メインプログラム側でサブルーチンプログラム呼び出しの実行条件がＯＦＦになると、サブルーチンプログラムの所定の接点もＯＦＦになり、接点がＯＮ状態に保持されるのを抑止することができる。
【００６１】
また、サブルーチンプログラム中に、データ参照データメモリエリア中の入力データ格納変数エリアと実行結果の格納先変数エリアを指定する（サブルーチン分岐命令に付記されるＳ，Ｄ）だけで、サブルーチンプログラム起動時に入力データ格納先変数エリアの絶対アドレスと実行結果を格納する変数エリア（出力データ格納先）の絶対アドレスをそれぞれインデックスレジスタ（ＩＲ０（ＩＮＰＵＴ），ＩＲ１（ＯＵＴＰＵＴ））に格納される。
【００６２】
よって、サブルーチンプログラムはこれらインデックスレジスタを参照して直接指定された変数エリアのデータを参照したり、データ転送したりできる。また、引数をアドレスとしているためサブルーチン起動時の入力／出力データの引渡し処理が不要なため、サブルーチンプログラムの起動・終了時のオーバーヘッド時間も最小化される。
【００６３】
図９は、さらに別のプログラム例を示している。この図に示すメインプログラムのサブルーチンプログラム実行命令では、入力データの参照アドレスとしてインデックスレジスタＩＲ０にＤ０が指定され、結果可能を格納されるアドレスとしてインデックスレジスタＩＲ１にＤ１００が指定される。これにより、サブルーチンプログラムが実行された場合に、そのサブルーチンプログラム中のＩＲ０，ＩＲ１が、それぞれＤ０，Ｄ１００として、データメモリエリアに格納されたデータが読み書きされる。
【００６４】
さらに、メインプログラム側でサブルーチンプログラムの呼び出しの実行条件が成立（ＯＮ）の場合には、接点ＢがＯＮになり、実行条件が不成立(ＯＦＦ)の場合は接点ＣがＯＮになるので、接点Ｂあるいは接点Ｃの後段に接続されたいずれかのプログラムが択一的に選択されて実行される。これにより、異常時の原点復帰などのプログラムもサブルーチンプログラムにて実行することができる。
【００６５】
従来サブルーチン命令はメインプログラムとサブルーチンプログラム間でデータ交換するための引数がなかったり引数を持つ場合でも数ワード程度のものであったが、本発明によるサブルーチン分岐命令では、引数にアドレスを使用するようにしたため、無制限の引数渡しが可能となる。
【００６６】
実際の運用に際しては、サブルーチンプログラム提供側（作成側）にてプログラム内で必要とするデータをテーブルとして定義しておき、その利用者側はその定義に従い任意の変数エリアにそのテーブルを作成し、サブルーチン分岐命令使用時にそのテーブルのある変数エリアを指定することで、サブルーチンプログラム側はその使用者側が作成したテーブル内容に従って処理を実行することが可能となる。
【００６７】
また、同じように処理結果も定義しておけばサブルーチンプログラム実行後には指定した変数エリアに結果が格納されているので、使用者側（メインプログラム作成者）はテーブル定義に従いその結果を利用することができる。
なお、上述した例では、同期コントローラについて適用した場合について説明したが、本発明は、通常のＰＬＣその他のコントローラにも適用できるのはもちろんである。
【図面の簡単な説明】
【００６８】
【図１】本発明の好適な一実施の形態を示す。
【図２】本発明の一態様である同期コントローラの内部構造（ハードウェア構成）を示すブロック図である。
【図３】本発明の一態様である同期コントローラの内部構造（ソフトウェア構成）を示すブロック図である。
【図４】同期バスを利用した同期制御について説明する図である。
【図５】サブルーチンプログラムを呼び出す分岐命令の一例を示す図である。
【図６】変数メモリのデータ構造を示す図である。
【図７】サブルーチンＮｏ．リレーエリアのデータ構造の一例を示す図である。
【図８】本発明の要部を説明するプログラム例を示す図である。
【図９】プログラム例を示す図である。
【符号の説明】
【００６９】
３  プログラミングツール
１０  同期コントローラ
１１  電源モジュール
１２  サイクルマスタモジュール
１３  モーションコントロールモジュール
１４  エンドモジュール
【図１】
2005258828.tif 000003
【図２】
2005258828.tif 000004
【図３】
2005258828.tif 000005
【図４】
2005258828.tif 000006
【図５】
2005258828.tif 000007
【図６】
2005258828.tif 000008
【図７】
2005258828.tif 000009
【図８】
2005258828.tif 000010
【図９】
2005258828.tif 000011