(57)【要約】【課題】マルチＣＰＵ構成のプログラマブルコントローラシステムにおいて、電源投入の時間の差異やＣＰＵモジュールの初期化内容の違いなどにより、スキャンタイミングにギャップが生じる可能性がある。各ＣＰＵモジュール間のスキャンタイミングを同期させる明確な方法を確立することにより、インタロックなどの処理を用いずに各ＣＰＵモジュール間で実行するアプリケーションタスクの結果を保証する。【解決手段】基準局となるＣＰＵモジュールのカウンタ値を各ＣＰＵモジュールのスキャン周期を考慮したタイミングで送信し、受信した各ＣＰＵモジュールはカウンタ値を更新することにより同期を確立する。【選択図】図９
2011123688.tif 000002
【特許請求の範囲】
【請求項１】
第１のアプリケーションを実行する第１のＣＰＵモジュールと、
前記第１のアプリケーションの実行結果を用いる第２のアプリケーションを実行する第２のＣＰＵモジュールと、を有するプログラムコントローラにおいて、
前記第１のＣＰＵモジュールと前記第２のＣＰＵモジュールとの間で読み書きするときに用いるＣＰＵ間バスと、
前記第１のＣＰＵモジュール内で動作し、スキャン周期に基づいて割り込みを発生させて前記第１のアプリケーションを実行させる第１の割り込み処理部と、
前記第２のＣＰＵモジュール内で動作し、前記スキャン周期に基づいて割り込みを発生させて前記第２のアプリケーションを実行させる第２の割り込み処理部と、を備え、
前記第１のＣＰＵモジュールは、前記第１のＣＰＵモジュールのスキャン開始時刻と前記第２のＣＰＵモジュールのスキャン開始時刻との同期を目的とする割り込みを前記第１の割り込み処理部に通知して前記第１のアプリケーションを実行させると共に、前記ＣＰＵ間バスに信号を送信し、
前記信号を受信した前記第２のＣＰＵモジュールは、前記第２の割り込み処理部に前記同期を目的とする割り込みを通知して、前記第２のアプリケーションを実行させること、
を特徴とするプログラマブルコントローラ。
【請求項２】
請求項１に記載のプログラマブルコントローラにおいて、
前記信号の専用回線を更に備え、
前記第１の割り込み処理部は前記同期を目的とする割り込みが発生したときに、前記信号を前記専用回線を経由させて、前記第２の割り込み処理部に同期を目的とする割り込みが発生したことを直接伝達すること、
を特徴とするプログラマブルコントローラ。
【請求項３】
請求項１または２に記載のプログラマブルコントローラにおいて、
前記第１のＣＰＵモジュールは、経過時間を自己のパルスをカウントアップして計測する第１のカウンタを更に有し、該第１のカウンタのカウンタ値に基づく所定のタイミングで前記第１の割り込み処理部に前記同期を目的とする割り込みを通知すること、
を特徴とするプログラマブルコントローラ。
【請求項４】
請求項３に記載のプログラマブルコントローラにおいて、
前記所定のタイミングとは、前記第１のカウンタのカウンタ値より求まる時間とスキャン周期とが一致したとき或いはその直前であること、
を特徴とするプログラマブルコントローラ。
【請求項５】
請求項３または４のいずれか１項に記載のプログラマブルコントローラにおいて、
前記第２のアプリケーションの実行周期が複数の前記スキャン周期にまたがるときは、
前記第１のＣＰＵモジュールは、複数回に１回のタイミングで前記ＣＰＵ間バスに前記信号を送信すること、
を特徴とするプログラマブルコントローラ。
【請求項６】
第１のアプリケーションを定周期で実行する第１のＣＰＵモジュールを含む第１のプログラマブルコントローラと、
前記第１のアプリケーションの実行結果を用いる第２のアプリケーションを定周期で
実行する第２のＣＰＵモジュールを含む第２のプログラマブルコントローラと、
前記第１のＣＰＵモジュールと前記第２のＣＰＵモジュールとを繋ぐネットワークと、
を有するプログラムコントローラシステムにおいて、
前記第１のＣＰＵモジュールは、
経過時間を自己のパルスをカウントアップして計測する第１のカウンタと、該第１のカウンタ値に基づいてスキャンを開始させる第１の割り込み処理部と、を有し、
前記第２のＣＰＵモジュールは、
経過時間を自己のパルスをカウントアップして計測する第２のカウンタと、該第２のカウンタ値に基づいてスキャンを開始させる第２の割り込み処理部と、を有し、
前記第１のＣＰＵモジュールは、所定のタイミングで前記第１のカウンタ値を前記ネットワークを経由して送信し、
前記第２のＣＰＵモジュールは、受信した前記第１のカウンタ値で前記第２のカウンタ値を更新すること、
を特徴とするプログラマブルコントローラシステム。
【請求項７】
請求項６に記載のプログラマブルコントローラシステムにおいて、
前記所定のタイミングとは、前記第１のカウンタのカウンタ値より求まる時間とスキャン周期とが一致したとき或いはその直前であること、
を特徴とするプログラマブルコントローラシステム。
【請求項８】
請求項６または７に記載のプログラマブルコントローラシステムにおいて、
前記第２のアプリケーションの実行周期が複数のスキャン周期にまたがるときは、
前記第１のＣＰＵモジュールは、複数回に１回のタイミングで前ネットワークに前記第１のカウンタ値を送信すること、
を特徴とするプログラマブルコントローラシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵモジュールからなるマルチＣＰＵ構成のプログラマブルコントローラ(以下、ＰＬＣと略す)に関し、特に各ＣＰＵモジュールで動作させる複数アプリケーションの処理タイミングを同期させる同期プログラマブルコントローラに関する。
【背景技術】
【０００２】
ファクトリーオートメーション等における工業用汎用コンピュータとして、ＰＬＣが用いられる。このような分野では、多品種少量生産や短納期化など顧客のさまざまなニーズのため、ＰＬＣのアプリケーションの大規模化、複雑化、高速化が進んでいる。
【０００３】
このため、一般にＰＬＣなどの組込機器では、ユーザプログラム、通信、システムを維持するための基本システム処理など、様々な種類の処理が並行的、すなわちマルチタスクで処理されることが多い。
【０００４】
一方で、一つのＰＬＣに複数のＣＰＵモジュール(以下、マルチＣＰＵと略す)を搭載し負荷分散により処理を高速化し、加えてアプリケーションを機能ごとに区分けし処理担当のＣＰＵモジュールを明確にすることにより複雑な処理を回避する手法も確立されている。このようなＰＬＣの一例として、出願人の製品であるＭＩＣＲＥＸ−ＳＸシリーズがある。
【０００５】
このようなマルチＣＰＵ構成のＰＬＣを他のＰＬＣや制御機器、ネットワークに接続してプログラマブルコントローラシステム(以下、ＰＬＣシステムと略す)を構築する。ＰＬＣシステムの任意のＣＰＵモジュールは、他のＣＰＵモジュールとのＣＰＵ間データ交換として、例えば、メモリ空間へのダイレクトリード・ライト処理や、サイクリック伝送方式がある。
以降、図１〜３にてＰＬＣシステムの概略構成を説明し、図４にてアプリケーションタスクの動作について説明する。
【０００６】
図1は、マルチＣＰＵ構成のＰＬＣの構成例／ＰＬＣシステムの構成例の一例である。ＰＬＣは、ベースボード１０で互いに接続される複数のモジュールで構成される。モジュールとしては、電源モジュール１２、ＣＰＵモジュール１４、ＩＯモジュール１６などがある。例えば、破線で囲んだＰＬＣ１００は、一つの電源モジュール１２と三つのＣＰＵモジュール１４と２つのＩＯモジュール１６を、一つのベースボード１０で接続したものである。電源モジュール１２は、ベースボード１０で繋がっているＣＰＵモジュール１４、ＩＯモジュール１６などに電源を供給している。
【０００７】
ＰＬＣはネットワーク２０を介して、他のＰＬＣや機能モジュール１８に接続し、相互に通信する。ここで機能モジュール１８とはインバータやサーボアンプなどの独立した機能を有する装置であり、通常電源も別途供給されている。このような機器で構成される一転鎖線の構成をＰＬＣシステム２００と呼ぶ。
【０００８】
図２は、マルチＣＰＵ構成で使用されるベースボードの一例であり、ベースボード１０を上面から見た模式構成を示している。
ベースボード１０には、図1のネットワーク２０を接続するためのネットワーク用コネクタ２２と、ネットワーク２０の信号を各モジュールに接続するためのモジュール用コネクタ２６と、ＣＰＵモジュール１４同士でダイレクトリード・ライト機能を実現するためのバスコネクタ２４（ＣＰＵ間バス）が実装されている。電源モジュール１２は、これらのモジュール用コネクタ２６を介して電源を各モジュールに供給する。図２の場合、ベースボード１０には電源モジュール１２の他に７つのモジュールが接続可能であり、この内３つまではＣＰＵモジュール１４の接続が可能である。なお、マルチＣＰＵ構成でなく、一つのＣＰＵモジュール１４による動作も可能である。
【０００９】
図３は、ＣＰＵモジュールの概略構成である。ＣＰＵモジュール１４において、主要部分を基本ＣＰＵ３０として説明する。特に図示しないが、ＣＰＵモジュール１４は基本ＣＰＵ３０以外にも必要に応じて専用機能を有するＬＳＩ（Large Scale Integration）などを具備しても構わない。
【００１０】
基本ＣＰＵ３０は、アプリケーション実行を行う演算プロセッサ４２とシステム処理を行うシステムプロセッサ４４の２つのプロセッサを有する。演算プロセッサ４２は、処理を実行するための記憶領域としてＲＡＭ３８を持ち、システムプロセッサ４４は処理を実行するための記憶領域としてＲＡＭ４８に加えてシステムファームウェアやユーザプログラムを格納するためのフラッシュＲＯＭ４６を持つ。システムプロセッサ４４がＣＰＵモジュール１４を識別する情報として局番スイッチ５２を有する。この局番スイッチの設定により自己のＣＰＵモジュール１４と、他のＣＰＵモジュール１４とを区別して識別可能になる。これはハードェア的に信号値を設定する構成でも良いし、フラッシュＲＯＭ４６に格納される情報であっても構わない。演算プロセッサ４２、システムプロセッサ４４は、これらの情報をネットワークＬＳＩ５４を経由して、自己のベースボード１０に接続されているモジュールや、ネットワーク２０を経由して他のＰＬＣや機能モジュール１８にアクセスする。
【００１１】
基本ＣＰＵ３０は、クロック発生部３６とそのクロック値をカウントしカウンタ値として保持するカウンタ３４を有する。カウンタ３４には、クロック発生部３６のカウンタ値とは別に、ある一定時間に相当するカウント値を設定値として保持する。この設定値とカウンタ値が一致したら、割り込み信号を割り込み制御部３２に出力する。割り込み信号を出力後は、カウンタ３４のカウンタ値をリセットする。この繰り返しにより、定周期割り込みを実現する。
【００１２】
図４は、アプリケーションタスクの実行イメージになる。図４では左側から右側に向って時系列が経過している。ここでＰＬＣ１００のアプリケーション（プログラム）は、スキャンと呼ばれる実行周期に従ってアプリケーションを周期的に実行するのが通常である。スキャンによって呼び出されるアプリケーションの実行単位はタスク６８と呼ばれる。タスク６８にはプログラム（ここではプログラム６２〜６６）が登録されており、タスク６８の起動によりプログラムが順番に処理される。マルチＣＰＵ構成においても、各ＣＰＵ上で実行されるアプリケーションタスクはスキャン周期６０に従って実行される。尚、タスク６８に登録されるプログラムは1つであっても構わない。
【００１３】
以上のようなマルチＣＰＵ構成のＰＬＣシステムが示されている。
また特許文献１には、マスタ局から一定周期ごとにデータを送出し、他の局は送信されたデータ受信後にスキャンを行なうことにより制御動作を同期させる技術が記載されている。
【００１４】
更に特許文献２には、司令部１から各アクチュエータ制御部に対し割込み信号を発し内部カウンタ初期値にして同期させる方法が記載されている。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開平９−２１９７１４号公報
【特許文献２】特開平１０−９１２２２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
マルチＣＰＵ構成のＰＬＣシステムでは、複数のＣＰＵで実行するアプリケーションタスクにおいて、以下のような理由で個々のアプリケーションタスクのスキャンが非同期となってしまう問題がある。
・電源投入時の電源モジュールと各ＣＰＵモジュールの位置関係による電源電圧立ち上がり時間の差異。
・システム全体の管理を司るマスタ局として動作するＣＰＵモジュールとそれ以外のＣＰＵモジュールの初期化処理内容の違いによる生ずるアプリケーションタスク起動タイミングの差異。
以降、図５〜８を用いて、スキャンが非同期になった場合の問題点を詳しく説明する。
【００１７】
図５は、マルチＣＰＵ構成におけるアプリケーション配置の一例である。ここでは説明に関係のある各ＣＰＵモジュールにおける主要部のみを記述する。ＣＰＵ１モジュール７２、ＣＰＵ２モジュール７４、ＣＰＵ３モジュール７６は同一のベースボード１０に接続されている。ＣＰＵ１モジュール７２にはプログラム１（６２）が、ＣＰＵ２モジュール７４にはプログラム２（６４）が、ＣＰＵ３モジュール７６にはプログラム３（６６）が格納されており、同じスキャン周期で処理が実行されているものとする。また、ＣＰＵ２モジュール７４にはグローバル変数Ａ８２、ＣＰＵ３モジュール７６にはグローバル変数Ｂ８４が格納されている。
【００１８】
図６は、アプリケーション処理のフローチャートである。図６（ａ）は図５のプログラム１（６２）、図６（ｂ）は図５のプログラム２（６４）の一例である。尚、図５のプログラム３（６６）の構成は、図６（ｂ）と図５のプログラム２（６４）との関係と同様であるので、ここでは図示せず、説明も省略する。
【００１９】
図６（ａ）の処理について説明する。プログラム１（６２）が実行されると、定義済の処理Ｘの演算を実行する（ステップＳ１０）。次に、ＣＰＵ２モジュール７４のグローバル変数Ａ８２に、演算結果の変数Ａの値を書き込む（ステップＳ１２）。同様に、ＣＰＵ３モジュール７６のグローバル変数Ｂ８２に、演算結果の変数Ｂの値を書き込む（ステップＳ１４）。
【００２０】
図６（ｂ）の処理について説明する。プログラム２（６４）が実行されると、ＣＰＵ２モジュール７４のグローバル変数Ａ８２の値を読み込む（ステップＳ２０）。変数Ａの値が１の場合、定義済の処理１を実行する（ステップＳ２２Ｙｅｓ、ステップＳ２６）。変数Ａの値が１ではない場合、続いて変数Ａの値が２か否か判定する（ステップＳ２２Ｎｏ、ステップＳ２４）。変数Ａの値が２の場合、定義済の処理２を実行する（ステップＳ２４Ｙｅｓ、ステップＳ３０）。変数Ａの値が２ではない場合、定義済の処理３を実行する（ステップＳ２４Ｎｏ、ステップＳ２８）。
【００２１】
図６のアプリケーションでは、プログラム１（６２）の実行結果を受けてグローバル変数Ａ８２、グローバル変数Ｂ８４が変更され、この結果に基づいてプログラム２（６４）や図示しないプログラム３（６６）の処理が決定される。即ち、図５のようにアプリケーションタスクが配置されているときは、ＣＰＵ１モジュール７２の動作結果によって、ＣＰＵ２モジュール７４やＣＰＵ３モジュール７６の動作が異なってくる。
【００２２】
図７は、マルチＣＰＵ構成におけるタスク周期間の処理タイミングの一例を示したものであり、図６のフローチャートを処理タイミングで示したものである。図７では左側から右側に向って時系列が経過しており、各ＣＰＵモジュールにおける処理タイミングの流れを示している。上段のＣＰＵ１モジュール７２は、スキャン周期９２で処理を行なっており、各スキャン周期９２において、“処理Ｘ１０２”、“変数Ａ８２の書き込み１０４”、“変数Ｂ８４の書き込み１０６”が行なわれている。中段のＣＰＵ２モジュール７４は、スキャン周期９４で処理を行なっており、各スキャン周期９４において、“変数Ａ８２の読み込み１０８”、“判定１１２”、“処理１１４”が行なわれている。“判定１１２”は図６のステップＳ２２などの変数Ａ８２の値による分岐判定を指し、“処理１１４”はステップＳ２６などの判定後の実処理を指す。下段のＣＰＵ３モジュール７６は、スキャン周期９６で処理を行なっており、各スキャン周期９６において、“変数Ｂ８４の読み込み１１６”、“判定１１８”、“処理１２２”が行なわれている。
【００２３】
ここで、各ＣＰＵモジュールでは、スキャン周期９２〜９６の長さの相違は無く、タイミング（位相）だけ異なる。各ＣＰＵモジュール間のタイミングの違いを明確にするために周期１０１を中心に見てみると、“変数Ａ８２の読み込み１０８”の後に“変数Ａ８２の書き込み１０４”が行なわれるので両者の関係に問題は生じない。一方で、“変数Ｂ８４の読み込み１１６”と“変数Ｂ８４の書き込み１０６”とのタイミングは処理が重なる可能性があるので、図６のプログラム１（６２）の結果が正しくプログラム３（６６）に反映されているかは分からない。
【００２４】
このため、通常マルチＣＰＵ構成におけるアプリケーションにおいて、複数ＣＰＵモジュール間で処理の整合性を保つためには、インタロックの処理をアプリケーションに記述し、アプリケーションレベルで同期の保証をする必要があった。
【００２５】
図８は、図６のフローチャートにインタロックを追加したアプリケーション処理のフローチャートである。プログラム２（６４）やプログラム３（６６）で変数の値が読み込まれない限り、プログラム１（６２）で変数の値を書き換えないようにする点が図６のフローチャートとは異なる。
【００２６】
図８（ｂ）において、プログラム２（６４）が実行されると、ＣＰＵ２モジュール７４のグローバル変数Ａ８２の値を読み込む（ステップＳ２０）のは同じだが、読み込み後、グローバル変数Ａ８２の値をクリアする（ステップＳ３６）。
【００２７】
一方で図８（ａ）において、プログラム１（６２）が実行されると、定義済の処理Ｘの演算を実行する（ステップＳ１０）のは同じだが、その後、グローバル変数Ａ８２の値がクリアされているか判定する（ステップＳ３２）。クリアされない限り処理は進まない。同様に、ＣＰＵ３モジュール７６のグローバル変数Ｂ８４への書き込み（ステップＳ１４）を行なう前に、グローバル変数Ｂ８４の値がクリアされているか判定する（ステップＳ３４）。クリアされない限り処理は進まない。
【００２８】
このような処理をインタロックと呼ぶ。インタロックは、ハードウェア・ソフトウェアのどちらで実施することもできるが、ここではソフトウェア処理にて実現している。
同様に、プログラム３（６６）にもインタロック処理を追加するが、プログラム２（６４）と同様になるのでここでは図示せず、説明も省略する。
【００２９】
このようにインタロックの記述を追加すると、図６のアプリケーションに比べてコードの記述が増える。加えて位相ずれがあった場合、1スキャン周期で処理が可能なはずのアプリケーション処理が、２スキャン周期処理がまたがってしまう問題がある。ＰＬＣシステムの処理において定周期（１スキャン周期）でのアプリケーション実行完了の確保は重要であり、このようなインタロック等による定周期の確保の妨げは避けるのが好ましい。
【００３０】
そこでインタロックを行なわずに解決する方法として、ＣＰＵモジュール間の同期を取る方法が考えられる。特許文献１、２とも同期に関する記述はあるが、マルチＣＰＵを有するＰＬＣシステムの同期を想定したものではなく、その同期方法についても同期頻度などの基準が示されていないという未解決な課題がある。
【課題を解決するための手段】
【００３１】
上記の課題を解決する手段として、本発明は以下のように構成する。
第１に、第１のアプリケーションを実行する第１のＣＰＵモジュールと、前記第１のアプリケーションの実行結果を用いる第２のアプリケーションを実行する第２のＣＰＵモジュールと、を有するプログラムコントローラにおいて、前記第１のＣＰＵモジュールと前記第２のＣＰＵモジュールとの間で読み書きするときに用いるＣＰＵ間バスと、前記第１のＣＰＵモジュール内で動作し、スキャン周期に基づいて割り込みを発生させて前記第１のアプリケーションを実行させる第１の割り込み処理部と、前記第２のＣＰＵモジュール内で動作し、前記スキャン周期に基づいて割り込みを発生させて前記第２のアプリケーションを実行させる第２の割り込み処理部と、を備え、前記第１のＣＰＵモジュールは、前記第１のＣＰＵモジュールのスキャン開始時刻と前記第２のＣＰＵモジュールのスキャン開始時刻との同期を目的とする割り込みを前記第１の割り込み処理部に通知して前記第１のアプリケーションを実行させると共に、前記ＣＰＵ間バスに信号を送信し、前記信号を受信した前記第２のＣＰＵモジュールは、前記第２の割り込み処理部に前記同期を目的とする割り込みを通知して、前記第２のアプリケーションを実行させるように構成する。
【００３２】
第２に、前記信号の専用回線を更に備え、前記第１の割り込み処理部は前記同期を目的とする割り込みが発生したときに、前記信号を前記専用回線を経由させて、前記第２の割り込み処理部に同期を目的とする割り込みが発生したことを直接伝達するように構成する。
【００３３】
第３に、前記第１のＣＰＵモジュールは、経過時間を自己のパルスをカウントアップして計測する第１のカウンタを更に有し、該第１のカウンタのカウンタ値に基づく所定のタイミングで前記第１の割り込み処理部に前記同期を目的とする割り込みを通知するように構成する。
【００３４】
第４に、前記所定のタイミングとは、前記第１のカウンタのカウンタ値より求まる時間とスキャン周期とが一致したとき或いはその直前であるように構成する。
第５に、前記第２のアプリケーションの実行周期が複数の前記スキャン周期にまたがるときは、前記第１のＣＰＵモジュールは、複数回に１回のタイミングで前記ＣＰＵ間バスに前記信号を送信するように構成する。
【００３５】
第６に、第１のアプリケーションを定周期で実行する第１のＣＰＵモジュールを含む第１のプログラマブルコントローラと、前記第１のアプリケーションの実行結果を用いる第２のアプリケーションを定周期で実行する第２のＣＰＵモジュールを含む第２のプログラマブルコントローラと、前記第１のＣＰＵモジュールと前記第２のＣＰＵモジュールとを繋ぐネットワークと、を有するプログラムコントローラシステムにおいて、前記第１のＣＰＵモジュールは、経過時間を自己のパルスをカウントアップして計測する第１のカウンタと、該第１のカウンタ値に基づいてスキャンを開始させる第１の割り込み処理部と、を有し、前記第２のＣＰＵモジュールは、経過時間を自己のパルスをカウントアップして計測する第２のカウンタと、該第２のカウンタ値に基づいてスキャンを開始させる第２の割り込み処理部と、を有し、前記第１のＣＰＵモジュールは、所定のタイミングで前記第１のカウンタ値を前記ネットワークを経由して送信し、前記第２のＣＰＵモジュールは、受信した前記第１のカウンタ値で前記第２のカウンタ値を更新するように構成する。
【発明の効果】
【００３６】
マルチＣＰＵ構成のプログラマブルコントローラシステムにおいて、的確なタイミングで各ＣＰＵモジュールのカウンタ値を基準局（マスタ）のカウンタ値で更新することにより、スキャン周期を同期させ、インタロックなどの処理を用いずに各ＣＰＵモジュール間で実行するアプリケーションの結果を保証する。加えて、基本ネットワークの他に拡張ネットワークを保持するＰＬＣシステムの構成であっても、同様な効果を奏する。
【解決手段】
【００３７】
基準局となるＣＰＵモジュールのカウンタ値を各ＣＰＵモジュールのスキャン周期を考慮したタイミングで送信し、受信した各ＣＰＵモジュールはカウンタ値を更新することにより同期を確立する。
【図面の簡単な説明】
【００３８】
【図１】マルチＣＰＵ構成のプログラマブルコントローラの構成例、プログラマブルコントローラシステムの構成例を示す説明図である。
【図２】マルチＣＰＵ構成で使用されるベースボードの一例を示す説明図である。
【図３】ＣＰＵモジュールの概略構成を示す説明図である。
【図４】アプリケーションタスクの実行イメージを示す説明図である。
【図５】マルチＣＰＵ構成におけるアプリケーション配置の一例を示す説明図である。
【図６】アプリケーション処理のフローチャートである。
【図７】マルチＣＰＵ構成におけるタスク周期間の処理タイミングの一例を示す説明図である。
【図８】インタロックを追加したアプリケーション処理のフローチャートである。
【図９】本発明のマルチＣＰＵ構成における同期方法を示す説明図である。
【図１０】タスク周期が整数倍になるアプリケーションの実行タイミングの一例である。
【図１１】本発明における実行周期が整数倍のアプリケーションの実行方法を示す説明図である。
【図１２】マルチＣＰＵ構成のＰＬＣシステムの拡張構成例を示す説明図である。
【図１３】従来のＣＰＵモジュールの概略構成を示す説明図である。
【図１４】本発明のＣＰＵモジュールの概略構成の一例を示す説明図である。
【発明を実施するための形態】
【００３９】
以下、本発明の実施の形態を説明する。
始めに図９を用い第１の実施例を説明する。次に図１０、１１を用い第２の実施例を説明する。最後に図１２〜１４を用い第３の実施例を説明する。
【００４０】
図９は、本発明のマルチＣＰＵ構成における同期方法を示している。本実施例におけるＰＬＣシステムのマルチＣＰＵ構成は従来と同じであり、例えば既に説明した図1〜３のようになる。ここでは、ＣＰＵモジュール１（１４）とＣＰＵモジュール２（１４）とにおける同期を説明するが、動作に直接関係しない部位の説明は省略する。また、構成は同じなので、図３と同じ引用番号を付与した箇所の個別説明も省略する。
【００４１】
従来、ＣＰＵモジュール１（１４）やＣＰＵモジュール２（１４）は、夫々に搭載するクロック発生部３６で生成されるパルスに基づいてスキャンを実行している。本来、同等の構成、同等の性能にて動作する機器の場合、スキャン動作も同様になる。しかしながら、電源投入の時間の差異やＣＰＵモジュールの初期化内容の違いなどにより、スキャンタイミングにギャップが生じる可能性がある。尚、クロック発生部３６で生成されるパルスはどのようなものであっても構わないが、通常は水晶発振子などにより供給される安定した信号であり、以降の説明ではクロックパルスと記述する。
【００４２】
図９の太い矢印は、割り込み信号の流れを示している。ここでは、ＣＰＵモジュール１（１４）を基準局とし、ＣＰＵモジュール２（１４）との同期を図る。尚、基準局となるＣＰＵモジュール１４は予め決めておいても良いし、全てのＣＰＵモジュール１４の局番ＳＷ５２の値を比較し、最小（最大）の局番ＳＷ５２の値を有するＣＰＵモジュール１４を基準局としても構わない。
【００４３】
基準局となったＣＰＵモジュール１４は、同期を目的とする割り込みを発生させる。この同期を目的とする割り込みでは、例えば、カウンタ３４のカウンタ値を基づいて所定のタイミングで割り込みを行なう。割り込み制御部３２で発生させた割り込み信号を、演算プロセッサ４２の指令をネットワークＬＳＩ５４経由でネットワーク２０に送信する。ネットワーク２０より割り込み信号を受信したＣＰＵモジュール１４は、ネットワークＬＳＩ５４を経由し演算プロセッサ４２の指令により割り込み制御部３２で割り込みを発生させる。以上の一連の動作により、基準局で発生させた同期を目的とする割り込みが、他のＣＰＵモジュール１４でも同期を目的とする割り込みが生成される。
【００４４】
尚、図９の場合、同じベースボード１０上のＣＰＵモジュール１４同士なので、ネットワーク２０を経由せず、図２で示したバスコネクタ２４を経由し直接ＣＰＵモジュール１４同士のメモリ（ここでは、割り込みを対象とするレジスタ）にアクセスして構わない。更に、同期を目的とする割り込み専用線を設けても構わない。これはバスコネクタ２４に追加しても良いし、別途配線しても構わない。
【００４５】
上述の所定のタイミングについて説明する。
基準局から同期を目的とする割り込み信号するタイミングは、クロック発生部３６のクロックパルスごとに実施すれば必ず同期するが、処理が頻繁になりネットワーク２０のトラフィック負荷や演算プロセッサ４２の処理負荷に影響が大きい。
【００４６】
ところで、スキャン周期に対し１００％のタスクを積むことは設計上の見地からも一般的には行わない。図４で示すようにスキャン周期６０に対しタスク６８は時間的に余裕を見込んだ長さになる。そこで、基準局のタスク完了後に信号を送信することにより、他のＣＰＵモジュール１４のスキャン立ち上がりを確実に同期させることが可能になる。例えば、基準局の次のスキャン周期６０の立ち上がりのタイミング、或いはその直前のクロックパルスのタイミングにおいて、信号を送信する。具体的には、クロック発生部３６のクロックパルスの発生周期（時間）を予め求めておき、カウンタ値と発生周期との乗算により経過時間を求める。この経過時間とスキャン周期との値が等しく（或いは経過時間の方が大きくなった）場合、信号を送信する。或いは、この経過時間より数クロック前の経過時間を比較の条件として用いる。
【００４７】
尚、スキャン周期ごとに信号送信を実施する必要は無く、ＰＬＣシステムの全体設計に基づき、例えば数スキャン周期に１回で良く、一方でスキャン周期が長い場合は1回のスキャン内で数回の同期を実施しても構わない。
【００４８】
また、基準局のタスク完了直後のタイミングに限定する必要はないが、タスク開始の直前に信号を送信する場合、ＣＰＵモジュール１４の動作タイミングによっては１パルス以上の誤差で基準局より先に他のＣＰＵモジュール１４がスキャンを開始している可能性もあるので、タスク開始の直前より余裕時間を見込んで早めに信号を送信するのが好ましい。
【００４９】
同期を目的とする割り込み信号の送出形態は特に限定しないが、上述の通り同じベースボード１０上にあるＣＰＵモジュール１４同士においては、バスコネクタ２４を経由するので簡単な信号でよい。一方で、ネットワーク２０に送信する形態では、専用のメッセージフレームを生成しても良いし、データ送信のフレームに割り込み信号の発生情報を追加しても構わない。受信局で割り込みの発生を認識可能な形式であれば良い。
【００５０】
フレームの送受信の伝送時間が問題となるようなＰＬＣシステムであれば、たとえばＩＥＥＥ１５８８のような同期プロトコルを用いて構わない。
以上のように同期を目的とする割り込み信号により、各ＣＰＵモジュール１４の同期を実現する。
【００５１】
ところで各ＣＰＵモジュール１４は、スキャン周期の制御も割り込み制御部３２が制御する。即ちスキャン周期の立ち上がり時には、割り込みが発生し、このタイミングに基づいてタスク管理が行なわれ、結果アプリケーションが実行される。このスキャン周期の制御に関しても、カウンタ３４のカウンタ値を用いる。そこでカウンタ値が同じタイミングで更新され、同値を保持していればスキャン周期も同期することになる。そこで基準局から同期を目的とする割り込み信号を送信する替わりに、基準局のカウンタ値を送信し、他のＣＰＵモジュール１４のカウンタ値に反映させても構わない。この場合、受信したＣＰＵモジュール１４は直ちに受信したカウンタ値で自己のカウンタ値を更新する。その後、各ＣＰＵモジュール１４は、自己のカウンタ値に基づいてスキャンを実施する。
【００５２】
図１０は、タスク周期が整数倍になるアプリケーションの実行タイミングの一例を示しており、左側から右側に向って時系列が経過しており、各ＣＰＵモジュールにおける処理タイミングの流れを示している。
【００５３】
マルチＣＰＵ構成のＰＬＣシステムにおいては、各ＣＰＵモジュール１４に実装されるユーザアプリケーションを並列動作させることで処理時間の短縮を図る負荷分散のようなアプリケーションもあるが、アプリケーションの可読性の向上や保守交換、機能アップなどを容易とするように機能分散型のアプリケーション実装もある。機能分散型のアプリケーションでは、各ＣＰＵモジュール１４のアプリケーションの処理周期が異なることもありえる。
【００５４】
加えて、他のＣＰＵモジュール１４で数回演算した結果を参照して自己のＣＰＵモジュール１４のアプリケーションを１回実行させるなど、整数倍周期で異なるアプリケーションタスクを実行しなければならない場合もある。
【００５５】
図１０の場合、上段のＣＰＵ１モジュール７２はスキャン周期１２４で処理し、中段のＣＰＵ２モジュール７４はスキャン周期１２６で処理し、ＣＰＵ３モジュール７６はスキャン周期１２８で処理を実行している。ここで例えば、ＣＰＵ２モジュール７４の処理ｂはＣＰＵ１モジュール７２の処理ａを２回実行した結果を用いている。ＣＰＵ３モジュール７６の処理ｃはＣＰＵ１モジュール７２の処理ａを１回実行した結果を用いている。
【００５６】
図１１は、本発明における実行周期が整数倍のアプリケーションの実行方法を示したものであり、ＣＰＵモジュール１４内におけるカウンタ３４の概略構成になる。
通常、カウンタ３４にはカウンタＡ１３２と設定値Ａ１３４、及び比較器Ａ１３６を有する。カウンタＡ１３２はカウンタ値を格納する領域で、クロック発生部３６より受けたクロックパルスをカウントアップする。設定値Ａ１３４は割り込みを発生させる周期を設定する領域で予め設定値を設定しておく。比較器Ａ１３６はカウンタＡ１３２と設定値Ａ１３４との値を比較し、一致した場合は割り込み制御部３２に信号を送信する。
【００５７】
本実施例のではカウンタ３４で、この構成に加えてカウンタＢ１４２と設定値Ｂ１４４、及び比較器Ｂ１４６を有する。この場合、比較器Ａ１３６はカウンタＢ１４２に信号を送信するが、破線の割り込み制御部３２に信号は送信しない。
カウンタＢ１４２は比較器Ａ１３６から受けた信号をカウントアップする。設定値Ｂ１４４は割り込みを発生させる周期を設定する領域で予め設定値を設定しておく。尚、設定値Ｂ１４４に設定する値は、基準となるカウンタ３４（カウンタＡ）の周期の何倍の周期で動作させるかの値になる。比較器Ｂ１４６はカウンタＢ１４２と設定値Ｂ１４４との値を比較し、一致した場合は割り込み制御部３２に信号を送信する。
【００５８】
割り込み制御部３６は、信号を受けたタイミングで演算プロセッサ４２へ割り込みを掛け、演算プロセッサ４２は他のＣＰＵモジュール１４のカウンタ値を送信する。
図１１では説明を簡単にするため、比較器を複数設け直列構造としたが、これは発明を限定するものではなく、基本となる周期のｎ倍の周期を出力できれば、この例に限らない。
【００５９】
図１２は、マルチＣＰＵ構成のＰＬＣシステムの拡張構成例を示したものである。ここで、ＣＰＵモジュール１４の機能を拡張し、拡張バスコネクタ２８を有するのがＣＰＵモジュール１５になる。この拡張バスコネクタ２８は、ネットワーク２１によりベースボード１１と接続される。ベースボード１１は、基本的な構造はベースボード１０と同様だが、ＣＰＵモジュール１４を搭載しない点、外部との接続は拡張バスコネクタ２８と繋ぐネットワーク２１になる点が異なる。尚、ここでは各ＣＰＵモジュール１５から夫々１台の機器しか繋いでいないが、これは一例に過ぎず、更に機能モジュール等の機器を繋いでも構わない。このような一点鎖線で囲まれた領域得が、ＰＬＣシステム２０１となる。また、ここでは図１のネットワーク２０を基本系統、図１３のネットワーク２１を拡張系統と呼称する。
【００６０】
図１２の例では、一点鎖線で囲まれるＰＬＣシステム２０１はネットワーク２０で接続される基本系統の他に、ネットワーク２１で接続される拡張系統を二つ持つことになる。
このため、基本系統のＣＰＵモジュール１４のスキャンの同期だけでなく、拡張系統のＣＰＵモジュール１５の同期も保証する必要が生じる。
【００６１】
図１３は、図１２の拡張構成を実現させる従来のＣＰＵモジュールの概略構成を示した
ものである。ここでＣＰＵモジュール１４は、複数の基本ＣＰＵ３０を持ち、片方の基本ＣＰＵ３０は図３で示すような従来の構成で、もう片方の基本ＣＰＵ３０は拡張バスコネクタ２８により拡張ネットワークに接続される。また、双方の基本ＣＰＵ３０の情報を媒介するインタフェースＬＳＩ５８と共有ＲＡＭ４９とを更に有する。
【００６２】
このように一つのＣＰＵモジュール１４内に複数の基本ＣＰＵ３０を持ち、夫々がネットワークを保持することにより、スキャン周期に影響を与えることなく、各機器の接続台を増やすことができる。の増設が可能になる。
【００６３】
一方で、一つのＣＰＵモジュール１４内に複数の基本ＣＰＵ３０を持ち、夫々が独立したクロック発生部３６に基づいて動作しているが、その同期について考慮がなされていない。
【００６４】
図１４は、図１２の拡張構成を実現させる本発明のＣＰＵモジュールの概略構成の一例を示したものである。一つのＣＰＵモジュール１４内に複数の基本ＣＰＵ３０を持ち、夫々がネットワークを保持する点は図１３の従来の構成と同様なので、ここでは図１３との相違点について説明する。
【００６５】
図１３では同等の機能の基本ＣＰＵ３０であったが、ここでは基本ＣＰＵ３０ａにのみクロック発生部３６を有する。また、カウンタ３４を基本ＣＰＵ３０ａと基本ＣＰＵ３０ｂとで共有化し、例えばインタフェースＬＳＩ５８内に保持する。加えて割り込み制御部３２もインタフェースＬＳＩ５８内に保持する。
【００６６】
このような構成にすることにより、ＣＰＵモジュール１４は、複数の基本ＣＰＵ、複数の系統のネットワークへのアクセスを可能としつつも、内部でのカウンタ３４を共用しているので、各ネットワークに対し同期した演算プロセッサ４２によりアプリケーションタスクの実行が可能になる。
【００６７】
尚、共有ＲＡＭ４９は特に図示しないが、必要に応じて保持する構成であっても構わない。また、クロック発生部３６はＣＰＵモジュール１５内に一つであり、カウンタ３４及び割り込み制御部３２も双方の基本ＣＰＵから同等のアクセスが可能であれば、この構成に限らない。
【符号の説明】
【００６８】
１００  プログラマブルコントローラ（ＰＬＣ）
２００、２０１  プログラマブルコントローラシステム（ＰＬＣシステム）
１０、１１  ベースボード
１２  電源モジュール
１４、１５  ＣＰＵモジュール
１６  ＩＯモジュール
１８  機能モジュール
２０、２１  ネットワーク
２２  ネットワーク用コネクタ
２４  バスコネクタ
２６  モジュール用コネクタ
２８  拡張バスコネクタ
３０、３０ａ、３０ｂ  基本ＣＰＵ
３２  割り込み制御部
３４  カウンタ
３６  クロック発生部
３８、４８  ＲＡＭ
４２  演算プロセッサ
４４  システムプロセッサ
４６  フラッシュＲＯＭ
４９  共有ＲＡＭ
５２  局番スイッチ
５４、５６  ネットワーク集積回路（ネットワークインターフェース）
５８、５９  インターフェース集積回路
６０、９２、９４、９６  スキャン周期
６２、６４、６６  プッログラム１〜３
６８  タスク
７２、７４、７６  ＣＰＵ1〜３モジュール
８２、８４  変数Ａ、Ｂ
１０１  周期
１０２  処理Ｘ
１０４、１０６  変数Ａ、Ｂの書き込み
１０８、１１６  変数Ａ、Ｂの読み込み
１１２、１１８  判定
１１４、１２２  処理
１２４、１２６、１２８  実行周期
１３２、１４２  カウンタ
１３４、１４４  設定値
１３６、１４６  比較器
【図１】
2011123688.tif 000003
【図２】
2011123688.tif 000004
【図３】
2011123688.tif 000005
【図４】
2011123688.tif 000006
【図５】
2011123688.tif 000007
【図６】
2011123688.tif 000008
【図７】
2011123688.tif 000009
【図８】
2011123688.tif 000010
【図９】
2011123688.tif 000011
【図１０】
2011123688.tif 000012
【図１１】
2011123688.tif 000013
【図１２】
2011123688.tif 000014
【図１３】
2011123688.tif 000015
【図１４】
2011123688.tif 000016