(57)【特許請求の範囲】
【請求項１】
少なくとも１つ以上のＣＰＵモジュールと複数のＩ／Ｏモジュールがバスに接続されて成るプログラマブルコントローラにおいて、
前記バス上のデータ転送に用いられるフレームに、タクト周期毎に所定の規則に従って更新される識別番号を付加し、
前記各Ｉ／Ｏモジュールは、
予め自局の周期情報と位相情報とを記憶しておく記憶手段と、
前記フレームを受信する毎に、該フレームに付加されている前記識別番号と前記記憶してある周期情報と位相情報とに基づいて、前記識別番号と前記周期情報とを用いた所定の演算の結果が前記位相情報と一致した場合には、前記ＣＰＵモジュールへのデータ出力タイミングであると判定して前記フレームにデータを付加して転送させるデータ出力制御手段と、
を有することを特徴とするプログラマブルコントローラ。
【請求項２】
少なくとも１つ以上のＣＰＵモジュールと複数のＩ／Ｏモジュールがバスに接続されて成るプログラマブルコントローラにおいて、
前記バス上を巡回するトークンに、タクト周期毎に所定の規則に従って更新される識別番号を付加し、
前記ＣＰＵモジュールは、
予め前記各識別番号毎に対応付けて、該識別番号を有するトークンを受信したときにデータ出力対象とする１又は複数のＩ／Ｏモジュールを記憶する記憶手段と、
前記トークンを受信する毎に、該トークンに付加されている前記識別番号を取得し、前記記憶手段を参照してデータ出力対象のＩ／Ｏモジュールを判別し、該データ出力対象のＩ／Ｏモジュールに対するデータの出力処理を行う出力処理手段とを有し、
前記ＣＰＵモジュールの出力処理手段は、前記識別番号を付加したフレームに、前記データ出力対象のＩ／Ｏモジュールの局番とデータとを格納して、該フレームを前記バス上を送出し、
前記各Ｉ／Ｏモジュールは、
予め自局の周期情報と位相情報とを記憶しておく記憶手段と、
前記フレームを受信する毎に、該受信したフレーム内に格納された前記局番に基づいて該フレーム内に自モジュール宛のデータが存在するか否かを判定し、存在する場合には該データを取込むと共に該フレームに付加されている前記識別番号を取得し、該識別番号と前記記憶してある周期情報と位相情報とに基づいて、前記識別番号と前記周期情報とを用いた所定の演算の結果が前記位相情報と一致した場合には、自モジュールの制御機器に対するデータ出力タイミングであると判定し、前記取込んだデータを自モジュールの制御機器に出力する制御手段と、
を有することを特徴とするプログラマブルコントローラ。
【請求項３】
複数のＣＰＵモジュールと複数のＩ／Ｏモジュールがバスに接続されて成るプログラマブルコントローラにおいて、
前記バス上のデータ転送に用いられるフレームに、タクト周期毎に所定の規則に従って更新される識別番号を付加し、
前記各ＣＰＵモジュールは、
自モジュールが有する定周期タスクに関する周期情報と位相情報とを記憶する記憶手段と、
前記フレームを受信する毎に、該フレームに付加されている前記識別番号と前記記憶してある周期情報と位相情報とに基づいて、前記識別番号と前記周期情報とを用いた所定の演算の結果が前記位相情報の値と一致した場合には、前記定周期タスクを起動するタスク起動制御手段と、
を有することを特徴とするプログラマブルコントローラ。
【請求項４】
前記識別番号と前記周期情報とを用いた所定の演算の結果は、前記識別番号を前記周期情報の値で除算した余りであることを特徴とする請求項１，２、３の何れかに記載のプログラマブルコントローラ。
【請求項５】
前記識別番号は、前記タクト周期毎に＋１インクリメントされることを特徴とする請求項１〜４の何れかに記載のプログラマブルコントローラ。
【請求項６】
前記識別番号、周期情報、及び位相情報は、ビットパターンデータとして構成されることを特徴とする請求項１、２、３のいずれかに記載のプログラマブルコントローラ。
【請求項７】
少なくとも１つ以上のＣＰＵモジュールと複数のＩ／Ｏモジュールがバスに接続されて成るプログラマブルコントローラにおける各Ｉ／Ｏモジュールの入出力制御方法であって、
受信したフレームに付加されている識別番号を予め設定される周期情報で除算し、該除算の余りが予め設定される位相情報と一致する場合に自モジュールのデータ出力またはデータ入力を行うことを特徴とする入出力制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラマブルコントローラ、及びその入出力制御方法に関する。
【０００２】
【従来の技術】
近年、プラント、工場などでは、機械や装置のシーケンス制御に多くのプログラマブルコントローラ（以下ＰＣという）を用い、ＦＡ（ファクトリーオートメーション）化を実現している。
【０００３】
あるＰＣシステムは、プログラムの実行やデータの演算処理等を行うＣＰＵモジュールや、制御機器とプロセスデータの入出力を行うＩ／Ｏモジュールがバス（システムバス等）で接続されて成る構成となっている。これら各モジュールは、システムバスを介して互いにデータのやりとりを行い、接続機器の制御処理を行う。
【０００４】
ＰＣシステムが複数のＣＰＵモジュールを備える構成の場合、各ＣＰＵモジュールはそれぞれ非同期に動作処理を行っており、またＩ／Ｏモジュールに対するプロセスデータの入出力処理もそれぞれ非同期に行っている。このような各ＣＰＵモジュールそれぞれが非同期に処理を行うと、ＣＰＵモジュール間で入出力処理に対する競合が発生する場合がある。この場合は１つのＣＰＵモジュールのみが入出力処理を行うことが出来、他のＣＰＵモジュールはその間処理の実行を待たされることになる。
【０００５】
また、各Ｉ／Ｏモジュールは、リアルタイムで接続機器からのプロセスデータの出力を行い、またＣＰＵモジュールからのデータを必要としているので、複数のＣＰＵモジュールが連携して処理を行う場合に、ＣＰＵモジュール間やタスク間で同期が行われていないと、異なるデータを同じデータと認識して処理してしまうなどの問題が生じる場合がある。
【０００６】
このような問題に対して、本発明の出願人は、先出願（特願平１０−１４８６４８）において、ＣＰＵモジュール間やマルチタスク処理時のタスク間で同期してデータのやり取りを行うことが可能なＰＣ及びその入出力制御方式を提案している。
【０００７】
【発明が解決しようとする課題】
上記本発明の出願人による先出願（特願平１０−１４８６４８）の方式では、以下に述べる問題点があった。
【０００８】
すなわち、上記先出願の方式では、１タクト周期の間に全Ｉ／Ｏモジュール分のデータ転送を行っている。この為、システムに接続されるＩ／Ｏモジュールの数が多くなってくるとデータ量が増える為、例えばタクト周期を延ばさないと１タクト周期の間に処理しきれなくなる。
【０００９】
また、マルチＣＰＵを構築した場合、上記先出願の方式では各ＣＰＵはタクト周期に同期して動作するが、各ＣＰＵのタスクの動作までは同期しないものであった。
【００１０】
本発明の課題は、Ｉ／Ｏモジュール数が多くなってもタクト周期を比較的短くすることができ、またマルチＣＰＵを構築した場合に各ＣＰＵのタスク間の同期までとることができるプログラマブルコントローラ、及びその入出力制御方法を提供することである。
【００１１】
【課題を解決するための手段】
本発明による第１のプログラマブルコントローラは、少なくとも１つ以上のＣＰＵモジュールと複数のＩ／Ｏモジュールがバスに接続されて成るプログラマブルコントローラにおいて、前記バス上のデータ転送に用いられるフレームに、タクト周期毎に所定の規則で更新される識別番号を付加し、前記各Ｉ／Ｏモジュールは、受信するフレームの前記識別番号に応じて前記ＣＰＵモジュールへのデータ出力タイミングであるか否かを判断し、該データ出力タイミングであると判断した場合には前記フレームにデータを付加して転送させるデータ出力制御手段を有する。
【００１２】
上記第１のプログラマブルコントローラによれば、例えばトータルフレーム方式のデータ転送において、各Ｉ／Ｏモジュールは、各々、フレームに付加される識別番号に基づいて、自モジュールがデータ出力するタイミングであるか否かを判断し、そうである場合のみフレームにデータを付加して出力する。このように、あるフレームに対して、全てのＩ／Ｏモジュールのデータを付加するのではなく、一部のＩ／Ｏモジュールのデータのみ付加して転送させることにより、バス上を流れるデータ量を削減することができ、これを以てＩ／Ｏモジュールの数が多くても比較的タクト周期を短く設定することができる。
【００１３】
本発明による第２のプログラマブルコントローラは、少なくとも１つ以上のＣＰＵモジュールと複数のＩ／Ｏモジュールがバスに接続されて成るプログラマブルコントローラにおいて、前記バス上を巡回するトークンに、タクト周期毎に所定の規則で更新される識別番号を付加し、前記ＣＰＵモジュールは、前記トークンを受け取ってＩ／Ｏモジュールに対するデータ出力を行う際に、該トークンに付加されている識別番号に応じてデータ出力対象のＩ／Ｏモジュールを判断し、前記タクト周期毎に該データ出力対象のＩ／Ｏモジュールに対するデータの出力処理を行う出力処理手段を有する。
【００１４】
上記第２のプログラマブルコントローラによれば、例えばマルチキャスト方式のデータ転送において、ＣＰＵモジュールは、タクト周期毎に、全てのＩ／Ｏモジュールに対してデータ出力するのではなく、一部のＩ／Ｏモジュールに対してのみデータ出力することにより、バス上を流れるデータ量を削減することができ、これを以てＩ／Ｏモジュールの数が多くても比較的タクト周期を短く設定することができる。
【００１５】
また、前記ＣＰＵモジュールの出力処理手段により出力されるデータは、前記識別番号を付加したフレームにより前記バス上を転送され、前記各Ｉ／Ｏモジュールは、受信するフレーム内に自モジュール宛のデータが存在する場合には該データを取込み、受信するフレームの前記識別番号と予め設定／記憶されている出力タイミングデータとに基づいて、所定の条件が成立したときに前記取込んだデータを自モジュールの制御機器に出力する。
【００１６】
このように、各Ｉ／Ｏモジュール側において、上記ＣＰＵモジュール側で決定される各Ｉ／Ｏモジュールへのデータ出力のタイミングとは関係なく、自モジュールの制御機器へのデータ出力タイミングを判断させることで、例えば複数のＩ／Ｏモジュールが同期して自モジュールの制御機器にデータ出力する必要性がある場合でも、これら各Ｉ／Ｏモジュールに対する上記ＣＰＵモジュール側でのデータ出力タイミングが異なっていても関係なく、同期してデータ出力させることができる。
【００１７】
本発明による第３のプログラマブルコントローラは、複数のＣＰＵモジュールと複数のＩ／Ｏモジュールがバスに接続されて成るプログラマブルコントローラにおいて、前記バス上のデータ転送に用いられるフレームに、タクト周期毎に所定の規則で更新される識別番号を付加し、前記各ＣＰＵモジュールは、自モジュールの各タスクの起動条件を格納する起動条件格納手段と、該起動条件格納手段に格納される起動条件と受信するフレームの前記識別番号とに基づいて起動条件が成立するか否かを判定し、起動条件が成立するタスクを起動するタスク起動制御手段とを有する。
【００１８】
上記第３のプログラマブルコントローラによれば、特にマルチＣＰＵを構築した場合において、各ＣＰＵのタスクの動作までタクト周期に同期して行わせることができる。
【００１９】
また、例えば、前記識別番号はビットパターンデータとして構成され、前記各Ｉ／ＯモジュールまたはＣＰＵモジュールは、該識別番号に基づいて前記判断または判定を行う為に設定／記憶されているデータをビットパターンデータとしてもつようにすることで、前記判断または判定を行う為の構成を、識別番号を数字データとしてもつ場合に比べて、より簡単なハードウェアで実現することが可能となる。
【００２０】
【発明の実施の形態】
以下、図面を参照して、本発明の実施形態について説明する。
図１は、本実施形態を適用するＰＣシステム全体の構成を示す図である。
【００２１】
同図に示すＰＣシステムは、１または複数のＣＰＵモジュール２と複数のＩ／Ｏモジュール３がリング型の伝送トポロジーをもつシリアルリンクバス１によって接続されるネットワーク構成をもつ。このシリアルリンクバス１に接続されている各モジュールには、そのネットワーク上での局としてそれぞれを一意に識別する局番が設定されている。同図では、ＣＰＵモジュール２とＩ／Ｏモジュール３とを合わせて１６局接続されており、各局にその局番として＃０〜＃１６が設定されているものとする。
【００２２】
ここで、同図に示すＰＣシステムの基本的な構成／動作は、上記先出願（特願平１０−１４８６４８）に記載されているシステムと略同様であるので、ここでは概略的にのみ説明する。
【００２３】
まず、ネットワーク上の局となるＣＰＵモジュール２、Ｉ／Ｏモジュール３等のＰＣ内の各モジュールは、内部にシリアルリンク制御ＬＳＩ（不図示）を備え、このシリアルリンク制御ＬＳＩを介してシリアルリンクバス１と接続されている。
【００２４】
ネットワーク上を流れるフレームは、シリアルリンクバス１上を一定方向に巡回し（例えば図１において“矢印”で示す方向）、シリアルリンク制御ＬＳＩは、上流局から送信されたフレームを自己の受信バッファに取込み、自局に対するデータがなければそのまま下流局に送り、また自局に対するデータがあればそれを取込む。このようにして、シリアルリンクバス１上をフレームデータが一定方向に巡回する。
【００２５】
そして、ＣＰＵモジュール２がＩ／Ｏモジュール３等からデータを受信する“受信処理”のときのデータ転送は、トータルフレーム方式により行う。またＣＰＵモジュール２からＩ／Ｏモジュール３などへデータを出力する“送信処理”のときのデータ転送は、マルチキャスト方式により行う。
【００２６】
トータルフレーム方式は、リング上のトポロジーを持つシリアルリンクバス１において、巡回する１つのフレームに対してＩ／Ｏモジュール３の各局が自局データを追加してゆき、フレームがシリアルリンクバス１を２巡回することで、自局データの送信及び他局データの受信を行い、各局が他局のデータの共有化を図ると共に伝送効率を上げるようにした伝送方式である。
【００２７】
マルチキャスト方式は、シリアルリンクバス１上にマルチキャスト通信用のフリートークンを巡回させ、データ伝送を要求する局（出力装置に出力するための送信データが用意されており、また当該送信帯域の送信許可設定がされている局）は、フリートークンを確保して代わりにマルチキャストフレームの送信を行う。マルチキャストフレームはシリアルリンクバス１上を巡回し、このマルチキャストフレームを受信したネットワーク上の局は、それを下流へ中継して巡回させると共に、フレーム内の出力データの設定内容に基づいて自局宛のデータの取込みを行う。
【００２８】
トータルフレーム方式、マルチキャスト方式の詳細については、上記先出願で説明されているので、ここでの説明は省略する。
以下、まず、図２〜図５を参照して、本実施形態におけるトータルフレーム方式によるＣＰＵモジュール２のデータ受信処理について説明する。
【００２９】
上記先出願ではタクト周期の時間は、例えば１ｍｓｅｃ＊Ｎ（Ｎの値はシリアルリンクバス１上の局数に応じて変動する）としており、局数が多くなるにしたがってタクト周期の時間を延ばさなければならなかったが、本実施形態では局数が多くなってもタクト周期を比較的短く設定できる。
【００３０】
尚、これは、第１の実施例とする。
尚、ＣＰＵモジュール２には、定周期タスクが４種類定義され、それぞれの周期が１ｍｓ、２ｍｓ、５ｍｓ、１０ｍｓであるものとする。また、タクト周期は１ｍｓとする。換言すれば、タクト周期の１倍、２倍、５倍、１０倍の周期の定周期タスクが存在する。
【００３１】
図２は、ＣＰＵモジュール２内での入力データに対する制御処理を示す図である。すなわち、特にトータルフレーム方式に係わる構成を示してある。
同図において、ＣＰＵモジュール２は、データの入力制御を行うための構成要素として、入力バッファ２１、Ｉ／Ｏ領域２２、入力バッファ転送テーブル２３及び入力データ転送テーブル２４を有する。また、ＣＰＵモジュール２は、シリアルリンク制御ＬＳＩ１０を備えており、これはデータの入力制御に係わる構成要素として、受信バッファ１１を有する。
【００３２】
入力バッファ２１は、上流局から流れてきたデータの中で自モジュールで必要な局からのプロセスデータを取込む為のバッファである。
Ｉ／Ｏ領域２２は、自局で実行されているアプリケーションプログラムの各タスク２５が、直接アクセスすることが出来るメモリ領域である。ＣＰＵモジュール２内にあるプログラム処理を行う実行プロセッサ（不図示）は、このＩ／Ｏ領域２２内から自己が必要とするデータを読み出したり、あるいはＩ／Ｏモジュール３への出力データをＩ／Ｏ領域２２に書込む。
【００３３】
シリアルリンク制御ＬＳＩ１０は、シリアルリンクバス１からトータルフレーム方式により送信されてくるフレーム（トータルフレーム）を受信すると、これを自己の受信バッファ１１に取込むと共に下流局のモジュールに流す。そして、ＣＰＵモジュール２は、入力バッファ転送テーブル２３を参照して、必要なデータを受信バッファ１１から入力バッファ２１に取込む。詳しくは、受信バッファ１１に一時的に記憶されたデータの中で自局が必要とするデータは、タクト周期（シリアルリンクバス１の転送周期と同一周期）で、受信バッファ１１から入力バッファ２１に転送される。そして、タスク２５起動時に、そのタスクに対応する入力データ転送テーブル２４が参照されて、そのタスクが必要とするデータが入力バッファ２１からＩ／Ｏ領域２２に転送される。
【００３４】
図３は、Ｉ／Ｏモジュール３の構成の一例を示す図であり、特に入力装置ＤｉとしてのＩ／Ｏモジュールの構成を示す。
ここで、Ｉ／Ｏモジュール３の役割は、自局が接続している制御機器からのデータを入力してＣＰＵモジュール２に渡す入力装置Ｄｉとしての役割と、ＣＰＵモジュール２からの制御指示情報等を自己が接続される制御機器等に渡す出力装置Ｄｏとしての役割とに大別される。ここでは、トータルフレーム方式に係わり、入力装置ＤｉとしてのＩ／Ｏモジュールの構成／動作について説明する。
【００３５】
図３に示す入力装置（Ｄｉ）３０は、シリアルリンク制御ＬＳＩ３１、バッファ３２等を有する。また、同図に示す（自局の）“局番情報”、“構成情報”等を記憶する記憶部等も備えている。
【００３６】
シリアルリンク制御ＬＳＩ３１は、シリアルリンクバス１よりトータルフレーム方式のフレーム（１巡目のフレーム）を受信すると、後述する自局のデータ出力タイミング（ＣＰＵモジュールへのデータ出力）である場合のみ、受信したフレームの末尾に自局のデータを付加して出力する。この出力データは、当該入力装置（Ｄｉ）３０に接続されている制御機器からの入力データに基づいて、事前に出力バッファ３２内に生成しておいたものである。また、このデータには、上記自局の局番情報、構成情報（データサイズ、ステータス情報等）が付加される。
【００３７】
Ｉ／Ｏモジュール３のシリアルリンク制御ＬＳＩ３１は、その内部の不図示のメモリ等に周期情報と位相情報の格納領域を備えており、上記フレームを受信すると、このフレームに含まれる“タクトNO. ”（後述する）と、当該周期情報と位相情報とに基づいて、自局の出力タイミングであるか否かを判定し、そうである場合のみデータ出力を行う。尚、これらの情報は、例えば電源ＯＮ時やリセットスタート時等のイニシャル処理時に、ＣＰＵモジュール２が各Ｉ／Ｏモジュール３に対して設定する。設定内容は、プログラム作成ツール（ローダ）によるプログラム作成時やシステム構成作成時に、自動あるいは手動により作成される。
【００３８】
本実施形態の“受信処理”においては、各Ｉ／Ｏモジュールが、少なくとも全て同じ頻度でデータ更新する必要はないことに着目し、上記各Ｉ／Ｏモジュール毎に個別に周期情報と位相情報を設定することで、各Ｉ／Ｏモジュール毎に必要とされる適切な頻度でデータ出力できるようにして、不必要なデータ転送を避ける。そして、これを以て、各フレームに付加されるＩ／Ｏモジュールの出力データ量を減少させることで、Ｉ／Ｏモジュール点数が多くなっても、その分タクト周期の時間を延ばさなければならないということがなくなるようにする。各Ｉ／Ｏモジュール毎の適切なデータ転送頻度とは、例えば、高速性が要求されるＩ／Ｏモジュールは短い周期でデータ転送し、高速性が要求されないＩ／Ｏモジュールは長い周期でデータ転送するように設定する。
【００３９】
例えば、図４に示すようにシリアルリンクバス１に一台のＣＰＵモジュール２（局番＃０）と１７台のＩ／Ｏモジュール（＃１〜＃１７）（入力装置（Ｄｉ））が接続されて成るＰＣシステムにおいて、上記プログラム作成ツール（ローダ）によるプログラム作成時やシステム構成作成時に、各Ｉ／Ｏモジュール（＃１〜＃１７）の制御周期を、Ｉ／Ｏ＃１〜Ｉ／Ｏ＃２を１ms、Ｉ／Ｏ＃３〜Ｉ／Ｏ＃５を１ms、Ｉ／Ｏ＃６〜Ｉ／Ｏ＃９を５ms、Ｉ／Ｏ＃１０〜Ｉ／Ｏ＃１７を１０msと設定した場合、各Ｉ／Ｏモジュールの周期情報と位相情報は、図４の図上の下側に示すような内容となる（尚、位相情報は、同一の制御周期のＩ／Ｏモジュールの出力タイミングが分散されるように適宜決められるようにプログラムされる。すなわち、“位相情報”とは、“制御周期”が同じであるＩ／Ｏモジュールが複数ある場合に、同じタイミングで出力されることで特定のフレームにデータが集中しないように、出力タイミングをズラす為の情報である）。
【００４０】
図５は、図４に示す様に各Ｉ／Ｏモジュール毎に“周期情報”と“位相情報”が設定された場合に、ＣＰＵモジュール（＃０）に転送されるトータルフレームに付加されるデータ内容を示す図である。
【００４１】
トータルフレームには、図５に示すように、その先頭部分にタクトNO. が設定される。タクトNO. は、例えばＣＰＵモジュール（＃０）（リングマスター局）がフレームをシリアルリンクバス１上に送出する毎に＋１インクリメントされる。勿論これに限るものではなく、タクトNO. は何等かの所定の規則にしたがって更新されていくものである。また、タクトNO. は例えば０〜９まで更新されると次は０に戻るというように、ある周期でローテートさせるようにしてもよい。
【００４２】
各Ｉ／Ｏモジュール（＃１〜＃１７）は、受信したフレームのタクトNO. を参照し、図４に示すように設定された“周期情報”と“位相情報”とに基づいて、自局のデータ出力タイミングであるか否かを判定し、そうである場合は受信したフレームの末尾に自局のデータを付加して出力する。
【００４３】
上記判定の方法は、例えば、受信したフレームのタクトNO. を“周期情報”で割り、その余りが“位相情報”と一致するか否かで行う。例えば、タクトNO. が‘３’のフレームを受信した場合、Ｉ／Ｏモジュール＃１、＃２は、“周期情報”が‘１’で“位相情報”が‘０’であり、３÷１の演算の余り‘０’が“位相情報”と一致するので、自局のデータを出力する。また、Ｉ／Ｏモジュール＃４、＃９、＃１３も、それぞれ、タクトNO. と“周期情報”に基づく演算（３÷２）、（３÷５）、（３÷１０）の余り‘１’、‘３’、‘３’が、自己の“位相情報”と一致するので、自局のデータを出力する。これによって、図５に示すように、タクトNO. （＝３）のフレームには、Ｉ／Ｏモジュール＃１、＃２、＃４、＃９、及び＃１３の出力データが付加されて、ＣＰＵモジュール（＃０）に転送される。
【００４４】
このように、多数のＩ／Ｏモジュール（＃１〜＃１７）が存在する場合でも、従来のようにフレームに＃１〜＃１７の全ての出力データを付加することなく、シリアルリンク１上を転送させるデータ量を少なくすることができるので、データ転送処理時間を短縮させることができ、以てタクト周期を短くすることができる。これは、換言すれば、Ｉ／Ｏモジュールの数が増えても従来と比較してタクト周期を延ばす割合を小さくでき（またはタクト周期を延ばす必要なく）、また従来と比較して、同じタクト周期で扱えるＩ／Ｏ点数を大幅に増やすことが可能となると言える。
【００４５】
このような効果は、“位相情報”を用いることにより、出力頻度（周期情報）が同じである複数のＩ／Ｏモジュールが存在する場合に、例えば図４に示すような周期情報が‘５’であるＩ／Ｏモジュール＃６、＃７、＃８、及び＃９の出力を、図５に示すようにタクトNO. ０〜４のフレームに分散させることにより、更に顕著になる。
【００４６】
次に、以下、図６〜図１１を参照して、本実施形態におけるマルチキャスト方式によるＣＰＵモジュール２のデータ出力処理について説明する。
上記先出願ではタクト周期の時間は１ｍｓｅｃ＊Ｎ（Ｎの値はシリアルリンクバス１上の局数に応じて変動する）としており、局数が多くなるにしたがってタクト周期の時間を延ばさなければならなかったが、本実施形態では局数が多くなってもタクト周期を比較的短く設定できる。
【００４７】
尚、これは、第２の実施例とする。
以下の説明では、例えば、図６に示すように、シリアルリンクバス１には、ＣＰＵモジュール２（局番＃０）と、＃２１〜＃３７までの１７局のＩ／Ｏモジュール３（全て出力装置とする）が接続されているものとする。
【００４８】
図７は、ＣＰＵモジュール２内でのデータ出力に関する制御処理を示す図である。すなわち、特にマルチキャスト方式に係わる構成を示してある。
ＣＰＵモジュール２内には、データの出力制御を行うための構成要素として、出力バッファ２６、出力データ転送テーブル２７、及び出力バッファ転送テーブル２８を有し、またシリアルリンク制御ＬＳＩ１０内に送信バッファ１２を有する。
【００４９】
出力バッファ２６は、出力データ転送テーブル２７の参照結果によりデータを出力する局毎にタスク２５が出力処理を行うデータを、出力先のＩ／Ｏモジュールの局番、データのサイズ及びマスク情報と共に蓄積するバッファである。
【００５０】
出力データ転送テーブル２７は、タスク毎に存在し、そのタスクが出力する出力データをＩ／Ｏ領域２２から出力バッファ２６へ転送を行う際に参照されるものである。
【００５１】
出力バッファ転送テーブル２８は、各タクトNO. に対応する形式でタクトNO. 毎に存在する。すなわち、本実施形態のマルチキャスト方式においては、マルチキャスト用のトークンの中にタクトNO. が設定されている。そして、ＣＰＵモジュール２（シリアルリンクＬＳＩ１０）は、受信したマルチキャスト用のトークンの中にあるタクトNO. より、出力バッファ転送テーブル２８の中でこのタクトNO. に対応するテーブルを用いて、出力バッファ２６から送信バッファ１２に必要なデータを転送させる。
【００５２】
これについて、更に、図８、図９に示す具体的な一例を参照しながら説明する。
図８は、図７の出力バッファ転送テーブル２８による出力バッファ２６から送信バッファ１２へのデータの転送を詳細に説明する為の図である。
【００５３】
出力データ転送テーブル２７は、上記の様に、各タスク毎に複数存在し、Ｉ／Ｏ領域２２から出力バッファ２６へのデータの転送を行う際に参照されるものである。これは、例えば図８に示すように、入力データ転送テーブル２７には、各タスクが出力処理を行うデータ毎に、そのデータのＩ／Ｏ領域２２における格納位置である「アドレス１」と、出力バッファ２６における格納位置である「アドレス２」とが対応付けられて格納されている。
【００５４】
また、出力バッファ２６は、同図に示すように、データを出力すべき局（Ｉ／Ｏモジュール３）毎に、タスク２５が出力処理を行うデータと、その局の局番（例えば＃２１等）、データのサイズ及びマスク情報とを格納する。
【００５５】
出力バッファ転送テーブル２８は、上記の様にタクトNO. 毎に対応する各テーブルより成り、例えば同図に示すように、タクト０用、タクト１用、タクト２用、・・・のテーブルが存在する。各タクトNO. 用のテーブルには、そのタクトNO. を持つマルチキャスト用のトークンを受信したときに各局（Ｉ／Ｏモジュール）に出力すべきデータが格納されている（出力バッファ２６内の）アドレス（アドレス３）が格納されている。尚、同図では、一律に、「アドレス３」として示しているが、実際には、例えば図９に示すようになる。
【００５６】
図９は、出力バッファ転送テーブル２８の一例を示す図である。
同図では、例えば、タクトNO. が０〜９まであるものとし、各タクトNO. に対応したテーブルの一例を示している。各テーブルには、上記の様に、各局（Ｉ／Ｏモジュール）への出力データが格納されている（出力バッファ２６内の）アドレスが格納されており、例えばタクト０用のテーブルでは、Ｉ／Ｏモジュール＃２１、＃２２、＃２３、＃２５、＃２６、＃３０のデータが格納されている（出力バッファ２６内の）各アドレスが格納されている。また、各テーブルの最後には「終了コード」が格納されている。
【００５７】
これら各テーブルの内容は、例えば、コンパイル時に、プログラム作成ツール（ローダ）がＰＣのシステムの定義情報を参照し、自動生成する（例えば、図９に示す例は、図６の下側に示すような制御周期、周期情報、位相情報に対応する形で生成されている）。そして、アプリケーションプログラムをＣＰＵモジュール２にダウンロードする時に同時にシステム定義としてダウンロードされ、アプリケーションプログラムが実行される前に予めＣＰＵモジュール２内に格納される。
【００５８】
このような出力バッファ転送テーブル２８を参照するデータ出力処理について、以下、図１０を参照して説明する。
図１０において、マルチキャスト用のトークンを受信すると、そのタクトNO. に対応するテーブルを参照して、以下の処理を行う（ステップＳ１）。
【００５９】
すなわち、そのテーブルより１データ読み出す毎に、そのデータが上記「終了コード」であるか否かを判定し（ステップＳ２）、そうである場合には（ステップＳ２、ＹＥＳ）処理を終了する。「終了コード」ではない場合には（ステップＳ２、ＮＯ）、上記読み出したデータは、いずれかの局に対する出力データの（出力バッファ２６内の）格納アドレスであるので、出力バッファ２６内の当該アドレスに格納されているデータを送信バッファ１２に転送する。これは、まず、このアドレスにおける上記「サイズ」情報を参照し、この情報により示されるササイズ分だけこのアドレスにおける「データ」を送信バッファ１２に転送する（ステップＳ３）。転送が完了すると、テーブルのポインタを進めて（ステップＳ４）、上記ステップＳ２の処理に戻り、「終了コード」になるまでステップＳ２〜ステップＳ４の処理を繰り返す。
【００６０】
例えば受信したトークンのタクトNO. が‘０’であった場合、図９におけるタクト０用のテーブルを用いて上記図１０の処理を行うことにより、図１１の一番上側に示すように、＃２１、＃２２、＃２３、＃２５、＃２６、＃３０のＩ／Ｏモジュールに対するマルチキャストフレームが出力される。
【００６１】
このように、ＣＰＵモジュール２は、タクトNO. に応じて所定のＩ／Ｏモジュール３に対するデータのみ有するマルチキャストフレームを出力する。
これより、各Ｉ／Ｏモジュール３（出力装置ＤO ）における入力処理は、単に、出力装置であるＩ／Ｏモジュール３がシリアルリンクバス１より受信したマルチキャストフレームの中から、自局に対するデータを取込み、自局に接続されている制御機器等に出力するだけでよい。すなわち上記先出願の入力処理と略同様であってよい。
【００６２】
上述した第２の実施例では、“制御周期”が同じであるＩ／Ｏモジュールが複数ある場合に、“位相”をズラして、特定のフレームにデータが集中しないようにしているが、一方で、ＰＣシステムにおいては、何等かの事情により、“制御周期”が同じである複数のＩ／Ｏモジュールが同期して自局に接続されている制御機器にデータ出力しなければならない場合がある。
【００６３】
このような場合、上述した第２の実施例の方法だけでは、“位相情報”を同一にするしかないが、これでは特定のフレームにデータが集中してしまい、シリアルバス１上を流れるデータ量の削減効果が小さくなってしまう。
【００６４】
以下、このような場合に対応する方法の一例について、図１２〜図１４を参照して説明する。尚、これは第３の実施例とする。
図１２は、第３の実施例におけるＩ／Ｏモジュール３（出力装置ＤO ）の構成の一例を示す図である。
【００６５】
同図において、出力装置（ＤO ）４０は、シリアルリンク制御ＬＳＩ４１とバッファ４２等を有する。
シリアルリンク制御ＬＳＩ４１は、シリアルリンクバス１よりマルチキャストフレームを受信すると、自己の受信バッファ（不図示）内にそのフレームを取込むと共に下流局へ送信する。
【００６６】
ここで、シリアルリンク制御ＬＳＩ４１は、その内部の不図示のメモリ等に周期情報格納領域と位相情報格納領域を備えており、上記フレームを受信すると、当該フレームに自局宛のデータが含まれている場合にはデータを取り出し、またこのフレームに含まれる“タクトNO. ”と、当該周期情報及び位相情報とに基づいて、自局の制御機器に対するデータ出力タイミングであるか否かを判定する。
【００６７】
判定方法は、例えば、受信したマルチキャストフレームの先頭部分に設定されている“タクトNO. ”を取込み、このNO. の値を上記周期情報の値で除算し、その余りが上記位相情報の値と一致したとき、自局の制御機器に対するデータ出力タイミングであると判定する。
【００６８】
そして、データ出力タイミングではない場合には、上記フレームより取り出したデータを一時的に記憶しておく。一方、データ出力タイミングである場合には、上記フレームより取り出したデータまたは上記一時的に記憶してあったデータを、自局の制御機器に出力する。
【００６９】
尚、これらの情報は、例えば電源ＯＮ時やリセットスタート時等のイニシャル処理時に、ＣＰＵモジュール２が各Ｉ／Ｏモジュール３に対して設定する。設定内容は、プログラム作成ツール（ローダ）によるプログラム作成時やシステム構成作成時に、自動あるいは手動により作成される。
【００７０】
図１３、図１４は、上記各Ｉ／Ｏモジュール３（出力装置ＤO ）の周期情報と位相情報の設定内容の一例を示す図である。
図１３では、同図に示すように、全てのＩ／Ｏモジュール３の位相情報を‘０’に設定している。これは、上述した同一の制御周期のＩ／Ｏモジュール３の出力を、同期したタイミングで行わせる為の設定である。
【００７１】
例えば、同図において、図１１における“タクトNO. ”（＝３）のフレームがバス上を転送されている場合、Ｉ／Ｏモジュール＃２４は自局宛のデータを受信するが、“タクトNO. ”（＝３）を周期情報（＝２）で割った余り‘１’が、位相情報（＝０）と一致しないので、このときは未だ自局が接続されている制御機器にデータ出力せずに、一時的に記憶しておく。そして、次に“タクトNO. ＝４”のフレームが転送されてくると、出力タイミングであると判断して、上記データを出力する。このとき、Ｉ／Ｏモジュール＃２３、＃２５でも、自局宛のデータを受信すると共に出力タイミングであると判断して受信データを制御機器に出力する。このようにして、制御周期が同じである３つのＩ／Ｏモジュール＃２３、＃２４、＃２５が、同期したタイミングでデータ出力するようにできる。
【００７２】
このように、第３の実施例によれば、ＣＰＵモジュール２側で位相をズラして（特定のフレームにデータが集中しないようにして）送信しても、Ｉ／Ｏモジュール３側では受信したデータの出力タイミングを、“タクトNO. ”と自局内に格納されている周期情報と位相情報とに基づいて判断するので、同一の制御周期のＩ／Ｏモジュール３の出力を、同期したタイミングで行わせることができる。
【００７３】
また、図１４に示すような位相情報の設定の仕方により、同一の制御周期のＩ／Ｏモジュール３の出力タイミングを、意識的にズラすこともできる。尚、同図に示す設定内容では、図１１に示すようなフレームを受信する場合は、自局宛のデータを受信するときが出力タイミングとなっているが、これに限るものではない。
【００７４】
次に、第４の実施例について、図１５〜図１７を参照して説明する。
第４の実施例では、例えば図１５に示すようなマルチＣＰＵシステムにおいて、各ＣＰＵ内のタスクの動作まで同期させる方法を示す。
【００７５】
以後、図１５に示すようなＣＰＵ＃０、ＣＰＵ＃１、ＣＰＵ＃２の３台のＣＰＵを有するマルチＣＰＵシステムを一例として説明する。
また、各ＣＰＵには、図１６に示すような定周期タスクが登録されているものとする。すなわち、ＣＰＵ＃０には、タスク０（２ms周期）及びタスク１（５ms周期）という定周期タスクが登録されている。ＣＰＵ＃１には、タスク２（２ms周期）及びタスク３（５ms周期）が登録されている。ＣＰＵ＃２には、タスク４（５ms周期）が登録されている。
【００７６】
そして、本実施例では、同図に示すように、各ＣＰＵモジュール毎に、各定周期タスクに関する周期情報と位相情報が設定されている。尚、これら周期情報、位相情報は、例えば各ＣＰＵ毎に各タスクの制御情報として予めローダから設定されている。
【００７７】
これより、例えば上記第１の実施例におけるトータルフレーム受信時に、当該トータルフレームに付加されている“タクトNO. ”に応じて上記各定周期タスクの起動タイミングも制御される。すなわち、上記各ＣＰＵモジュールの各タスク毎に、上記“タクトNO. ”の値を周期情報の値で除算して、その余りが位相情報の値と一致する場合にそのタスクを起動する。
【００７８】
例えば、図１６に示すように各定周期タスクの周期情報と位相情報が設定されている場合、当該マルチＣＰＵシステムのタスクの動作シーケンスは、図１７に示すようになる。例えば、タクト２（“タクトNO. ”＝２）のトータルフレーム受信時には、ＣＰＵ０のタスク０が、２÷２の余りがその位相情報‘０’と一致し、またＣＰＵ２のタスク４が、２÷５の余りがその位相情報‘２’と一致するので、これらタスク０及びタスク４が起動する。
【００７９】
このように、トータルフレームの“タクトNO. ”と、各ＣＰＵモジュール２において各定周期タスクに対して設定されている周期情報及び位相情報とを用いて、上述した方法により各タスクの起動タイミングを制御することにより、マルチＣＰＵシステムにおける各タスク間で完全に同期した制御を行うことが可能となる。また、各ＣＰＵ間のタスク制御をパイプライン化して制御することも可能となる。
【００８０】
上述した各実施例の説明では、“タクトNO. ”や周期情報、位相情報等を、数値データとして扱うような説明としたが、これに限るものではない。
例えば、図１８に示すようなビットパターンとして構成することもできる。
【００８１】
図１８（ａ）には、トータルフレームに付加するビットパターンの一例を示す。これは、“タクトNO. ”に相当するものであり、以後「タクトパターンデータ」という。
【００８２】
図１８（ｂ）には、各Ｉ／Ｏモジュールにおいて設定／格納されるビットパターンの一例を示す。これは、周期情報、位相情報に相当するものであり、以後「処理パターンデータ」と呼ぶ。
【００８３】
尚、同図では、タクトパターンデータ、処理パターンデータを１６bit としているが、これに限るものではない。
上記ビットパターンを用いる構成によって、上述した各実施例における「自モジュールのデータ入力／出力タイミングであるか否かを判定すること」を実現する方法について、以下に説明する。
【００８４】
すなわち、各Ｉ／Ｏモジュールは、受信したトータルフレームに付加されているタクトパターンデータを取り出して、このタクトパターンデータと自己の処理パターンデータとで論理積（ＡＮＤ）処理を行い、この結果が‘０’（0000000000000000）でなければ上記データ入力／出力タイミングであると判定して、上記所定の処理を実行する。例えば、同図（ａ）におけるタクトNO. ０に相当する「タクトパターンデータ」を、同図（ｂ）におけるＩ／Ｏ＃１に相当する「処理パターンデータ」とで論理積（ＡＮＤ）処理を行うと、その結果は‘０’にはならない（別の言い方をすれば、ＡＮＤ処理結果が、タクトNO. ０の「タクトパターンデータ」と同じになる）ので、上記データ入力／出力タイミングであると判定する。
【００８５】
尚、同図に示す「処理パターンデータ」は、図４に示す周期情報、位相情報に対応するものとなっている。例えば、Ｉ／Ｏ＃１、＃２は周期情報が‘１’であるので、いずれの「タクトパターンデータ」に対してもＡＮＤ処理結果が‘０’にはならないように設定されている（尚、これらの上位ビット側が‘１’になっていないのは、タクトNO. ０〜９までしか対応させていないからであり、これらは必要であれば、１６bit 全てを‘１’にすべき性質のものである）。
【００８６】
このような方法を用いることにより、各Ｉ／Ｏモジュール毎に剰余算の為の回路を設ける必要はなく、簡単なハードウェアで実現することができるようになる。
【００８７】
【発明の効果】
以上、詳細に説明したように、本発明のプログラマブルコントローラ及びその入出力制御方法によれば、システムバス上を流れるフレームに、所定の規則にしたがって更新される識別番号を付加し、この識別番号に基づいて自モジュールのデータ入力またはデータ出力タイミング、あるいは出力先のモジュールを決定する為の情報を各モジュール毎に設定／格納しておくことにより、各Ｉ／Ｏモジュール毎に適切なデータ更新周期を設定することができ、以て不必要なデータ転送を抑止してバス上を流れるデータ量を削減することができ、これよりＩ／Ｏモジュール数が増えてもタクト周期を比較的短く設定することができるようになる。
【００８８】
また、上記フレームに付加される識別番号に基づいて、ＣＰＵモジュールの各タスクの起動タイミングも制御でき、複数のＣＰＵモジュールより成るマルチＣＰＵシステムにおいてはタスク間の同期を完全に取ることが可能となる。
【図面の簡単な説明】
【図１】本実施形態を適用するＰＣシステム全体の構成を示す図である。
【図２】ＣＰＵモジュール内での入力データに対する制御処理を示す図である。
【図３】Ｉ／Ｏモジュール（入力装置ＤｉとしてのＩ／Ｏモジュール）の構成の一例を示す図である。
【図４】各Ｉ／Ｏモジュールの制御周期に応じた周期情報、位相情報の設定の一例を示す図である。
【図５】図４に示す設定内容に応じてトータルフレームにより転送されるデータの一例を示す図である。
【図６】図１に示すＰＣシステムにおいて、特にマルチキャスト方式に係わる構成を示すシステム構成図である。
【図７】ＣＰＵモジュール内でのデータ出力に関する制御処理を示す図である。
【図８】図７の出力バッファ転送テーブルを用いた出力バッファから送信バッファへのデータの転送を詳細に説明する為の図である。
【図９】出力バッファ転送テーブルの一例を示す図である。
【図１０】ＣＰＵモジュールのデータ出力処理を説明する為のフローチャートである。
【図１１】図９に示す設定内容に応じてマルチキャストフレームにより転送されるデータの一例を示す図である。
【図１２】Ｉ／Ｏモジュール（出力装置ＤO ）の構成の一例を示す図である。
【図１３】各Ｉ／Ｏモジュール（出力装置ＤO ）の周期情報及び位相情報の設定内容の一例（その１）を示す図である。
【図１４】各Ｉ／Ｏモジュール（出力装置ＤO ）の周期情報及び位相情報の設定内容の一例（その２）を示す図である。
【図１５】マルチＣＰＵシステムであるＰＣシステムの構成の一例を示す図である。
【図１６】マルチＣＰＵシステムにおける各ＣＰＵの定周期タスクに関する周期情報及び位相情報の設定内容の一例を示す図である。
【図１７】図１６に示す各定周期タスクの設定内容に応じたタスクの動作シーケンスの一例を示す図である。
【図１８】タクトNO. 、周期情報、位相情報等を、ビットパターンとして構成する変形例を説明する為の図である。
【符号の説明】
１  シリアルリンク
２  ＣＰＵモジュール
３  Ｉ／Ｏモジュール
１０  シリアルリンクＬＳＩ
１１  受信バッファ
１２  送信バッファ
２１  入力バッファ
２２  Ｉ／Ｏ領域
２３  入力バッファ転送テーブル
２４  入力データ転送テーブル
２５  タスク
２６  出力バッファ
２７  出力データ転送テーブル
２８  出力バッファ転送テーブル
３０  入力装置（Ｉ／Ｏモジュール）
３１  シリアルリンクＬＳＩ
３２  バッファ
４０  出力装置（Ｉ／Ｏモジュール）
４１  シリアルリンクＬＳＩ
４２  バッファ
【図１】
0003887989.tif 000002
【図２】
0003887989.tif 000003
【図３】
0003887989.tif 000004
【図４】
0003887989.tif 000005
【図５】
0003887989.tif 000006
【図６】
0003887989.tif 000007
【図７】
0003887989.tif 000008
【図８】
0003887989.tif 000009
【図９】
0003887989.tif 000010
【図１０】
0003887989.tif 000011
【図１１】
0003887989.tif 000012
【図１２】
0003887989.tif 000013
【図１３】
0003887989.tif 000014
【図１４】
0003887989.tif 000015
【図１５】
0003887989.tif 000016
【図１６】
0003887989.tif 000017
【図１７】
0003887989.tif 000018
【図１８】
0003887989.tif 000019