(57)【特許請求の範囲】
【請求項１】
マルチタスク処理を行う複数のＣＰＵモジュールと１乃至複数のＩ／Ｏモジュールがバスによって接続されるプログラマブルコントローラであって、
前記ＣＰＵモジュールは、
前記バスの転送速度に合わせて、一定周期で割込みを発生させるタクト割込み発生手段と、
前記タクト割込み発生手段による割込みに同期して、前記Ｉ／Ｏモジュールに対するデータの入出力処理を行う同期手段と、
を備え、
前記Ｉ／Ｏモジュールは、
前記バスからフレームを受信すると、当該フレームに対して入出力処理を行ない、フレームを前記バスに送出する送受信手段と、
を備えることを特徴とするプログラマブルコントローラ。
【請求項２】
前記ＣＰＵモジュールは、該ＣＰＵモジュールで実行されるアプリケーションプログラムを前記タクト割込み発生手段による割込みに同期して実行する実行手段を更に備えることを特徴とする請求項１記載のプログラマブルコントローラ。
【請求項３】
前記ＣＰＵモジュールは入力バッファを更に備え、前記実行手段が複数のタスクを並列実行するマルチタスクで前記アプリケーションプログラムを実行する時、該マルチタスクのタスクは前記Ｉ／Ｏモジュールに対するデータの入力処理を、前記割込みに同期して前記フレーム内のデータを前記入力バッファに取り込むことにより実現することを特徴とする請求項２記載のプログラマブルコントローラ。
【請求項４】
前記実行手段は、前記出力処理が前記割込み発生手段による割込みが発生する前に終了するかどうかを判断し、終了しないと判断したときに該出力処理を該割込みが終了するまで遅らせることを特徴とする請求項２又は３記載のプログラマブルコントローラ。
【請求項５】
前記バスはリング上の構成を備え、前記ＣＰＵモジュール及びＩ／Ｏモジュールは、前記バス上をデータを巡回させて他のモジュールとのデータの入出力処理を行うことを特徴とする請求項１乃至４のいずれか１つに記載のプログラマブルコントローラ。
【請求項６】
前記ＣＰＵモジュールは前記Ｉ／Ｏモジュールに対してデータを送る場合トータルフレーム方式により、前記Ｉ／Ｏモジュールは前記ＣＰＵモジュールに対してデータを送る場合マルチキャスト方式によりデータの転送を行うことを特徴とする請求項５記載のプログラマブルコントローラ。
【請求項７】
複数のＣＰＵモジュールと１乃至複数のＩ／Ｏモジュールがバスによって接続されるプログラマブルコントローラにおけるＣＰＵモジュールであって、
アプリケーションプログラムを実行する実行手段と、
前記アプリケーションプログラムによる処理のために必要な、前記Ｉ／Ｏモジュールからの入力データを保持する第１の入力バッファ手段と、
前記バスから受信したフレーム内の前記Ｉ／Ｏモジュールからの入力データを保持する第２の入力バッファ手段と、
前記アプリケーションプログラムの実行により生じた前記Ｉ／Ｏモジュールへの出力データを保持する第１の出力バッファ手段と、
前記バスにフレームとして出力する出力データを保持する第２の出力バッファ手段と、
前記バスの転送速度に合わせて、一定周期で割込みを発生させるタクト割込み発生手段と、
前記タクト割込み発生手段による割込みに同期して、前記第２の入力バッファ手段が保持する入力データを前記第１の入力バッファ手段へ転送する第１の同期手段と、
前記タクト割込み発生手段による割込みに同期して、前記第１の出力バッファ手段が保持する出力データを前記第２の出力バッファ手段へ転送する第２の同期手段と、
を備えることを特徴とするプログラマブルコントローラのＣＰＵモジュール。
【請求項８】
複数のＣＰＵモジュールと１乃至複数のＩ／Ｏモジュールがバスによって接続されるプログラマブルコントローラでのデータの入出力方法であって
前記ＣＰＵモジュールが、
前記バスの転送速度に合わせて、一定周期で割込みを発生させ、
前記割込みに同期して、前記Ｉ／Ｏモジュールに対するデータの入出力処理を行い、
前記Ｉ／Ｏモジュールは、
前記バスからフレームを受信すると、当該フレームに対して入出力処理を行ない、フレームを前記バスに送出する
ことを特徴とするプログラマブルコントローラでのデータの入出力方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、産業用制御装置であるプログラマブルコントローラにおける入出力制御方式に関する。
【０００２】
【従来の技術】
近年、プラント、工場などでは、機械や装置のシーケンス制御に多くのプログラマブルコントローラ（以下ＰＣという）を用い、ＦＡ（ファクトリーオートメーション）化を実現している。
【０００３】
１つのＰＣは、プログラムの実行やデータの演算処理等を行うＣＰＵモジュールや、制御機器とプロセスデータの入出力を行うＩ／Ｏモジュールが複数バスで接続されて構成されている。
【０００４】
図２０に従来のＰＣの構成例を示す。１つのＰＣは、図２０に示すように、システムバス１０１にＣＰＵモジュール１０２、Ｉ／Ｏモジュール１０３及び不図示の通信モジュールが複数接続されて構成されている。これら各モジュールは、システムバス１０１を介して互いにデータのやりとりを行い、接続機器の制御処理を行う。
【０００５】
図２０の様に、ＰＣが複数のＣＰＵモジュール１０２を備える構成の場合、各ＣＰＵモジュール１０２はそれぞれ非同期に動作処理を行っており、またＩ／Ｏモジュール１０３に対するプロセスデータの入出力処理もそれぞれ非同期に行っている。
【０００６】
図２１にＣＰＵモジュール１０２で行われる従来のタスク動作とプロセスデータの入出力処理の関係を示す。図２１に示すように各ＣＰＵモジュール１０２は、１スキャンの開始時及び終了時にＩ／Ｏモジュール１０３に対するプロセスデータの入力処理と出力処理を行う。
【０００７】
ここでの１スキャンとは、ＣＰＵモジュール１０２上でアプリケーションプログラム等が実行されるプログラムレベル（以下Ｐレベルという）での、データ入力処理、演算及びデータ出力処理からなるタスクの始まりから終わりまでを指す。また入力処理とはＩ／Ｏモジュール１０３などからＣＰＵモジュール１０２にデータを取込む処理、出力処理とはＣＰＵモジュール１０２から演算結果等をＩ／Ｏモジュール１０３などに出力する処理を指す。
【０００８】
各ＣＰＵモジュール１０２は、それぞれが非同期に処理を行うため、ＣＰＵモジュール１０２間で入出力処理に対する競合が発生する場合がある。この場合は１つのＣＰＵモジュールのみが入出力処理を行うことが出来、他のＣＰＵモジュール１０２はその間処理の実行を待たされることになる。例えば図２１の場合、ＣＰＵ０はＣＰＵ１の出力処理が終了するまで自己の出力処理の実行を待ち、ＣＰＵ１はＣＰＵ０の入力処理が終了するまで自己の入力処理の実行を待っている。
【０００９】
ＣＰＵモジュール１０２が複数のタスクを並列実行するマルチタスク処理を行う場合、その入出力処理の方法には図２２に示す様なものがある。
例えば図２２に示す場合の様にＰレベルのタスクと、より優先レベルの高い上位レベルの定周期タスクが実行されている場合、上位レベルのタスクにおける入出力処理の方法としては、(1) に示すように上位レベルである定周期タスク内で特別な命令を用いてＩ／Ｏモジュール１０３と直接入出力を行う方法と、(2) に示すようにＰレベルの入出力処理と同じタイミング内で定周期タスクの入出力を行う方法とがある。
【００１０】
【発明が解決しようとする課題】
ＰＣが複数のＣＰＵモジュール１０２を備える構成の場合、各ＣＰＵモジュール１０２は個々に動作し、よって従来から行われている入出力制御方式では、ＣＰＵモジュール１０２によるＩ／Ｏモジュール１０３などからのプロセスデータの取込みや、Ｉ／Ｏモジュールなどへのプロセスデータの出力を行う入出力処理は、各ＣＰＵモジュール１０２間で非同期に行われる。
【００１１】
このため各ＣＰＵモジュール１０２間では同期したデータを使用して処理を行っていない。さらにＩ／Ｏモジュール１０３へのプロセスデータの出力についても、各ＣＰＵモジュール１０２は独自のタイミングで出力しているので、Ｉ／Ｏモジュール１０３へのプロセスデータの出力は各ＣＰＵモジュール１０２間で同期していない。
【００１２】
各Ｉ／Ｏモジュール１０３は、リアルタイムで接続機器からのプロセスデータの出力を行い、またＣＰＵモジュール１０２からのデータを必要としているので、複数のＣＰＵモジュール１０２が連携して処理を行う場合に、ＣＰＵモジュール１０２間やタスク間で同期が行われていないと、異なるデータを同じデータと認識して処理してしまうなどの問題が生じる場合がある。
【００１３】
本発明は上記問題点を考慮し、ＣＰＵモジュール間やマルチタスク処理時のタスク間でが同期してデータのやり取りを行うことが可能なＰＣ及びその入出力制御方式を提供することを目的とする。
【００１４】
【課題を解決するための手段】
本発明によるプログラマブルコントローラは、複数のＣＰＵモジュールと１乃至複数のＩ／Ｏモジュールがバスによって接続される構成を前提としている。
【００１５】
上記ＣＰＵモジュールは、タクト割込み発生手段及び同期手段を備える。
タクト割込み発生手段は、上記バスの転送速度に合わせて一定周期で割込みを発生させる。
【００１６】
同期手段は、上記タクト割込み発生手段による割込みに同期して、上記Ｉ／Ｏモジュールに対するデータの入出力処理を行う。
上記ＣＰＵモジュールは、該ＣＰＵモジュールで実行されるアプリケーションプログラムを上記タクト割込み発生手段による割込みに同期して実行する実行手段を更に備えるとすることも出来る。
【００１７】
この実行手段は、例えばマルチタスクで上記アプリケーションプログラムを実行する時、該マルチタスクのタスクは上記Ｉ／Ｏモジュールに対するデータの入力処理及び出力処理を上記割込みに同期して行う。
【００１８】
また実行手段は、上記出力処理が上記割込み発生手段による割込みが発生する前に終了するかどうかを判断し、終了しないと判断したときに該出力処理を該割込みが終了するまで遅らせる。
【００１９】
更に本発明のプログラマブルコントローラでは、各モジュールが接続されるバスはリング上の構成を備え、上記ＣＰＵモジュール及びＩ／Ｏモジュールは、上記バス上をデータを巡回させて他のモジュールとのデータの入出力処理を行う構成とすることも出来る。この場合、上記ＣＰＵモジュールは上記Ｉ／Ｏモジュールに対してデータを送る場合トータルフレーム方式により、上記Ｉ／Ｏモジュールは上記ＣＰＵモジュールに対してデータを送る場合マルチキャスト方式によりデータの転送を行う。
【００２０】
本発明によれば、プログラマブルコントローラを構成するＣＰＵモジュールは、タクト割込み発生手段が発生させる割込みに同期して、上記Ｉ／Ｏモジュールに対するデータの入出力処理を行う。よって複数のＣＰＵモジュールを備える構成の場合、各ＣＰＵモジュールは、この割込みに同期して処理を行う。
【００２１】
また例えばマルチタスクで上記アプリケーションプログラムを実行するに場合においても、該マルチタスクのタスクは上記Ｉ／Ｏモジュールに対するデータの入出力処理を上記割込みに同期して行うので、各タスクは同期して処理を行う。
【００２２】
【発明の実施の形態】
図１は本実施形態のＰＣの構成を示す図である。
本実施形態のＰＣでは、複数のＣＰＵモジュール２と複数のＩ／Ｏモジュール３がリング型の伝送トポロジーをもつシリアルリンクバス１によって接続されるネットワーク構成をもつ。このシリアルリンクバス１に接続されている各モジュールは、そのネットワーク上での局としてそれぞれを一意に識別する局番が設定されている。本実施形態でのネットワークは、その局として最大２５６局接続できるものとし、各局にその局番として＃０〜２５５が設定される。
【００２３】
まず、シリアルリンクバス１上のデータの流れを説明する。
図２は、ＰＣ内の各モジュールの接続及びシリアルリンク１内を流れるデータの流れを示す図である。
【００２４】
ネットワーク上の局となるＣＰＵモジュール２、Ｉ／Ｏモジュール３等ＰＣ内の各モジュールは、内部にシリアルリンク制御ＬＳＩ１０を備え、このシリアルリンク制御ＬＳＩ１０を介してシリアルリンクバス１と接続されている。
【００２５】
ネットワーク上を流れるフレームデータは、シリアルリンクバス１上を一定方向に巡回し、シリアルリンク制御ＬＳＩ１０は、上流局から送信されたフレームを自己の受信バッファに取込み、それが自局に対するものでなければそのまま下流局に送り、また自局に対するものあればそれを取込む。これによってシリアルリンクバス１上をフレームデータが一定方向に巡回する。
【００２６】
シリアルリンク制御ＬＳＩ１０は、シリアルリンクバス１から受信したフレームデータを下流のモジュールに流すと共に、入力バッファ転送テーブルを参照して必要なデータを入力バッファに取込む。
【００２７】
本実施形態では、ＣＰＵモジュール２がＩ／Ｏモジュール３等からデータを受信する受信処理のときのデータ転送は、トータルフレーム方式により行う。またＣＰＵモジュール２からＩ／Ｏモジュール３などへデータを出力する送信処理のときのデータ転送は、マルチキャスト方式により行う。これらの転送方式により、シリアルリンクバス１上の各モジュールは、一定周期毎に同一のデータを同期して送受信することになる。
【００２８】
まずトータルフレーム方式について説明する。
トータルフレーム方式は、ＣＰＵモジュール２がＩ／Ｏモジュール３からのデータを受取る時に用いるデータ転送方式である。
【００２９】
トータルフレーム方式は、リング上のトポロジーを持つシリアルリンクバス１において、巡回する１つのフレームに対してＩ／Ｏモジュール３の各局が自局データを追加してゆき、フレームがシリアルリンクバス１を２巡回することで、自局データの送信及び他局データの受信を行い、各局が他局のデータの共有化を図ると共に伝送効率を上げるようにした伝送方式である。
【００３０】
図３はトータルフレーム方式によるデータ通信の説明図である。
本実施形態では、シリアルリンクバス１の局の内の１つをリングマスター局とし、このリングマスター局によってトータルフレーム方式及び後述するマルチキャスト方式によるデータ転送を管理する。また図３中のＤｉはＩ／Ｏモジュール３の中で入力装置、Ｄｏは出力装置の局を示す。
【００３１】
トータルフレーム方式では、ネットワーク上に唯一存在するリングマスター局により、まずトータルフレーム送信の要求を表すＲＥＱフレームが送信される。図３ではこの時のＲＥＱフレームはｒｅｑ０と表されている。
【００３２】
このＲＥＱフレームには、フレームのデミリタ部（スタートデミリタ（ＳＤ）部）にこのフレームがＲＥＱフレームであることを示すデータ（ＪＫコード）が設定されており、このフレームの受信局はＳＤ部を調べることによりこのフレームがＲＥＱフレームであることを認識する。
【００３３】
ＲＥＱフレームを受信した局は、そのフレーム最後に自局のデータを付加して下流局へ送信する。図３の場合、Ｄｉ局はＲＥＱフレームを受信すると、その末尾に自己の入力データＤｉ１を付加して下流局のＤｏ１局へ送信する。Ｄｏ１局ではこのフレームを受信すると、その末尾に自己の出力データＤｏ１を付加して出力する。以下、順に各局はフレームを受取ると自己のデータをフレームの末尾に付加して下流局へ送信する。尚、本実施形態は複数のＣＰＵモジュール２を使用するマルチＣＰＵの構成であり、ＣＰＵモジュール２が他のＣＰＵモジュール２が出力装置に出力したデータを参照できるようにするため、各出力装置の局Ｄｏも自己のデータの出力を行っている。しかし、ＣＰＵモジュールを１つしか持たないＰＣの構成の場合には、この様な必要はない。
【００３４】
ＲＥＱフレームがシリアルリンクバス１を１巡して、これをリングマスター局が受信すると、リングマスター局はこのフレームのＳＤ部に設定されているデータを２巡目のＲＥＱフレームであることを示すデータ（ＪＪコード）に変更し、またフレームの最後に自己のデータを付加して隣の下流局であるＤｉ１局へ送信する。
【００３５】
このフレームを受信したＤｉ１局は、受信フレームのＳＤ部を調べ、これが２巡目のＲＥＱフレームであることを認識すると、フレームのＳＤ部の次にある１巡目の時に自己が付加した自局データを削除して下流局へ中継する。図３の場合、Ｄｉ局は２巡目のＲＥＱフレームを受信すると、１巡目で自己が付加した自局のデータＤｉ１を削除して下流局のＤｏ１局へ送信し、Ｄｏ１局は受信フレームのＳＤ部の次にある自己の出力データＤｏ１を削除して次の下流局であるＤｉ２局へ送信する。以下、順に各局はフレームを受取ると１巡目で付加した自己のデータをフレームから削除して下流局へ送信する。
【００３６】
この２巡回目のＲＥＱフレームがシリアルリンクバス１を巡回して、リングマスター局に戻ってくると、リングマスター局は、このフレームをシリアルリンクバス１から除去する。これによってトータルフレーム通信は完了する。
【００３７】
次にマルチキャスト方式によるデータ転送について説明する。
マルチキャスト方式は、ＣＰＵモジュール２から出力機器が接続されているＩ／Ｏモジュール３に対してデータの出力を行う時用いられるデータ転送方式である。
【００３８】
マルチキャスト方式は、シリアルリンクバス１上にマルチキャスト通信用のフリートークンを巡回させ、データ伝送を要求する局（出力装置に出力するための送信データが用意されており、また当該送信帯域の送信許可設定がされている局）はそのフリートークンを確保して代わりにマルチキャストフレームの送信を行う。マルチキャストフレームはシリアルリンクバス１上を巡回し、このマルチキャストフレームを受信したネットワーク上の局は、それを下流へ中継して巡回させると共にフレーム内の出力データの設定内容に基づいてデータの取込みを行う。
【００３９】
図４は、マルチキャスト方式による通信の説明図である。
マルチキャスト方式による通信では、まず、シリアルリンクバス１上に１つだけ存在するネットワーク管理を行うリングマスター局が、データ転送の権限を制御するフリートークンを生成し、シリアルリンクバス１上にリリースする。このフリートークンのリリースによって、マルチキャスト通信は開始される。
【００４０】
リリースされたフリートークンは、各局が順次下流局へ中継してゆき、シリアルリンクバス１上を巡回する。そしてデータの出力を行いたいＣＰＵモジュール２は、このフリートークンを受信すると、これをシリアルリンクバス１から確保し、マスター局となる。
【００４１】
マスター局は、用意してある送信データを、ＳＤ部にこのフレームがマルチキャスト通信のフレームであることを示すデータを設定したマルチキャストフレームとしてシリアルリンクバス１上に流す。図４では、マスター局は、保持したフリートークンの代わりにＤｏ１局に対する出力データ（Ｍ−＞Ｄｏ１）とＤｏ２局に対する出力データ（Ｍ−＞Ｄｏ２）の２つの局に対する出力データがマルチキャストフレームとして、下流局Ｄｏ２へ送信される。
【００４２】
このマルチキャストフレームを受取った局は、そのフレーム内の出力データに設定されている出力データの格納先の局番を参照し、この出力データが自局に対するものであれば、それを取込むと共にそのフレームをそのまま下流局へ送信する。図４では、マルチキャストフレームを受信したＤｏ２局及びＤｏ１局はそれぞれ自局にあててマスタ局が出力した出力データ（Ｍ−＞Ｄｏ２、Ｍ−＞Ｄｏ１）を取込むと共に、その受信フレームをそのまま隣の下流局であるリングマスター局及びマスター局へ送信する。
【００４３】
フレームが１巡すると、そのフレームを最初に送信したマスタ局は、これをシリアルリンクバス１から除去し、代わりにフリートークンを生成して１上にリリースする。
【００４４】
そしてフリートークンがシリアルリンクバス１を１巡して戻ってくると、リングマスター局はデータ伝送要求の有無をチェックし、要求があれば当該送信データの送信を行う。その後、自局が送信したデータフレームがシリアルリンクを１巡して自局に戻ってきたことでリングマスター局はフリートークンをシリアルリンク上から除去し、これによってマルチキャスト通信は終了する。
【００４５】
尚、マルチキャスト通信に限らず、シリアルリンクバス１上では、リングマスター局のデータフレームは常に最後に送信される。
次にシリアルリンクバス１上の局となっている、各モジュールにおけるデータの送受信処理について説明する。
【００４６】
まずＣＰＵモジュール２での処理について説明する。
ＣＰＵモジュール２内のシリアルリンク制御ＬＳＩ１０は、シリアルリンクバス１からトータルフレーム方式により送信されてくるフレーム（トータルフレーム）を受信すると、それを下流のモジュールに送信すると共に、入力バッファ転送テーブルを参照して必要なデータを入力バッファに取込む。図５はこの時のＣＰＵモジュール２内での入力データに対する制御処理を示す図である。
【００４７】
図５に示すように、ＣＰＵモジュール２内には、データの入力制御を行うための構成要素としてシリアルリンク制御ＬＳＩ１０の他に入力バッファ２１、Ｉ／Ｏ領域２２、入力バッファ転送テーブル２３及び入力データ転送テーブル２４を備える。
【００４８】
入力バッファ２１は、上流局から流れてきたデータの内自モジュールで必要な局からのプロセスデータを、入力バッファ転送テーブル２３を参照して取込むバッファである。またＩ／Ｏ領域２２は自局で実行されている複数のアプリケーションプログラムの各タスク２５が直接アクセスすることが出来るメモリ領域である。ＣＰＵモジュール２内にあるプログラム処理を行う実行プロセッサ（不図示）は、このＩ／Ｏ領域２２内から自己が必要とするデータを読み出したり、あるいはＩ／Ｏモジュール３への出力データをＩ／Ｏ領域２２に書込む。
【００４９】
シリアルリンク制御ＬＳＩ１０は、シリアルリンクバス１からトータルフレーム方式で送信されてきたデータを自己の受信バッファ１１に取込むと共に下流局のモジュールに流す。
【００５０】
シリアルリンクバス１から受信したデータは、受信バッファ１１に取込まれた後、シリアルリンクバス１の転送周期と同一周期のタクト周期で、入力バッファ転送テーブル２３を参照して受信バッファ１１から自局が必要とする局のデータが入力バッファ２１に格納される。そして、タスク起動時にそのタスクに対応する入力データ転送テーブル２４が参照されてそのタスクが必要とするデータがＩ／Ｏ領域２２に転送される。なおタクト周期については後述する。
【００５１】
この処理をトータルフレーム方式による２つのフレーム（１巡目、２巡目）に対して行うことによって、ＣＰＵモジュール２は、シリアルリンクバス１上の全てのＩ／Ｏモジュール３のデータを取込むことが出来る。
【００５２】
図６は、図５の入力バッファ転送テーブル２３と入力データ転送テーブル２４によるデータ転送を説明する図である。
入力バッファ転送テーブル２３は、ネットワーク上の全ての局の局番と対応づけて、その局からのデータの入力バッファ２１での格納位置がアドレスとして格納されており、局番により入力バッファ転送テーブル２３を参照することにより、その局からのデータを格納する入力バッファ２１上のアドレスを求めることが出来る。尚自局が必要とせず、データ転送を行わない局に対応する部分にはアドレスとして“ＦＦＦＦ”が設定されており、データの転送処理を行う際にはバッファ転送テーブル２３に“ＦＦＦＦ”以外の値が設定されている局のデータに対してその局の局番、データのサイズ及びステータス情報と共に受信バッファ１１内のトータルフレームから入力バッファ２１の対応するアドレスの位置に順次転送される。
【００５３】
入力データ転送テーブル２４は、入力バッファ２１からＩ／Ｏ領域２２へのデータの転送を行う際に参照されるものである。入力データ転送テーブル２４は、各タスク毎に複数存在し、そのタスクが使用するデータの入力バッファ２１での格納位置であるアドレス１、Ｉ／Ｏ領域２２での格納位置であるアドレス２及びデータサイズが格納されている。タスクが起動される際に、入力バッファ２１からＩ／Ｏ領域２２へのデータの転送を行うときには、そのタスクに対応した入力データ転送テーブル２４を使用してそのタスクが起動される前に入力バッファからＩ／Ｏ領域２２にそのタスクが使用するデータのみが転送される。また入力バッファのステータスがエラーを示していれば、そのデータはＩ／Ｏ領域２２に転送しない。
【００５４】
なおこの入力バッファ転送テーブル２３及び入力データ転送テーブル２４は、アプリケーションプログラムを作成し、コンパイルした時にプログラム作成ツール（ローダ）がＩ／ＯモジュールなどのＰＣのシステムの定義情報を参照し、自動生成する。またこれらのテーブルは、アプリケーションプログラムをＣＰＵモジュール２にダウンロードする時に同時にシステム定義としてダウンロードされ、アプリケーションプログラムが実行される前に予めＣＰＵモジュール２に設定されている。
【００５５】
ＣＰＵモジュール２は、受信バッファ１１から入力バッファ転送テーブル２３によって指定された自己で使用する入力データを入力バッファ２１に取込むが、このデータの転送はシリアルリンクバス１での転送速度と同一速度の一定間隔の周期で行われる。またシリアルリンク制御ＬＳＩ１０は、このデータ転送と同一周期で実行プロセッサに対して割込みを発生させる。この割込みが、図７に示すタクト割込みである。またこのタクト割込みの発生周期をタクト周期という。
【００５６】
ＣＰＵモジュール２内の実行プロセッサは、タクト割込みを受けるとタスクの起動条件をチェックし、最もタスクレベルの高い、すなわち最も優先度の高いタスクを起動する。その動作を示したのが図７である。
【００５７】
図７では、Ｐレベルと、それよりタスクレベルの高いタスク０、タスク１の２つの定周期タスクの動作例を示している。
タクト割込みが発生すると、実行プロセッサはタスクの起動条件をチェックし、起動すべきタスクがあると、タスクレベルの高い順にそのタスクに割り当てられたプロセスデータのデータ入力処理を行う。図７の場合、最初のタクト割込みが発生すると、タスク０、タスク１、Ｐレベルの順に各タスクのデータ入力処理が行われる。
【００５８】
ここで言うデータ入力処理とは、図５に示す入力バッファ２１からＩ／Ｏ領域２２へデータを転送することである。実際のタスクは、その実行時にこのＩ／Ｏ領域２２のデータに対して演算処理を行う。この入力バッファ２１からＩ／Ｏ領域２２へのデータ転送は、各タスク毎に存在する入力データ転送テーブル２４を参照して行われる。この入力データ転送テーブル２４を参照することにより、起動しようとしているタスクで必要とするプロセスデータが判り、使用するプロセスデータのみが入力バッファ２１からＩ／Ｏ領域２２へ転送される。
【００５９】
このタクト割込みによる入力処理は、割込み発生時に、別のタスクが実行中であっても、そのタスクによる処理を中断して行われる。例えば、図７の場合、２回目及び５回目のタクト割込みが発生した時、Ｐレベルのタスクは処理の実行中であったが、その処理を中断してタスク０及びタスク１のデータ入力処理が実行され、全てのデータ実行処理が完了後、中断されていたＰレベルのタスクの実行が再開される。
【００６０】
図８は図７で説明したタスクを示す図である。
図８中のＰｘｘｘはプログラムを示し、１つのタスクは複数のプログラムから構成されている。各タスク毎にプログラム管理テーブルが作成され、タスク内ではこのプログラム管理テーブルに登録されている順番にプログラムが起動される。
【００６１】
１つのタスクではその開始時に、まずデータ入力処理が行われ、タスクの終了時にデータ出力処理が行われる。
図９は、図７でのタスクの中断を説明する図である。
【００６２】
図９（ａ）は、他のタスクの入力処理によって処理の中断が発生した場合、図９（ｂ）は２つのタクト周期に跨がったために中断が発生した場合を示す。図９（ａ）では、このタスクを含む全てのタスクでデータ入力処理が完了するまでプログラムの実行は行われず、全てのタスクでデータ入力処理が完了した時点でプログラムが実行される。また図９（ｂ）では、プログラムＰ１５７を実行中にタクト割込みが発生すると、このＰ１５７の処理は中断され、他のタスクでのデータ入力処理が実行される。そして、全てのタスクでデータ入力処理が完了すると、Ｐ１５７の処理が再開される。
【００６３】
図１０は、ＣＰＵモジュール２内での出力データに対する制御処理を示す図である。
ＣＰＵモジュール２内にはデータの出力制御を行うための構成要素として、出力バッファ２６、出力データ転送テーブル２７及びシリアルリンク制御ＬＳＩ１０内に送信バッファ１２を有する。出力バッファ２６は、出力データ転送テーブル２７の参照結果によりデータを出力する局毎にタスク２５が出力処理を行うデータを、出力を行うＩ／Ｏモジュールの局の局番、データのサイズ及びマスク情報と共に蓄積するバッファである。尚マスク情報については後述する。出力データ転送テーブル２７は、タスク毎に存在し、そのタスクが出力する出力データをＩ／Ｏ領域２２から出力バッファ２６へ転送を行う際に参照されるものである。
【００６４】
タスク処理が終了した時点で実行プロセッサは、出力データ転送テーブル２７を参照し、Ｉ／Ｏ領域２２から出力バッファ２６へそのタスクに割り当てられたデータのみ転送する。
【００６５】
出力バッファ２６のデータは、実行プロセッサによるＣＰＵモジュール２の内部処理とは無関係にタクト周期でシリアルリンク上に出力される。この様な一連の動作により、シリアルリンクバス１に接続された各モジュールは、一定周期（タクト周期）中は共通のデータを用いて動作することが可能である。
【００６６】
図１１は、図１０の出力データ転送テーブル２７によるＩ／Ｏ領域２２から出力バッファ２６へのデータの転送を説明する図である。
出力データ転送テーブル２７は、Ｉ／Ｏ領域２２から出力バッファ２６へのデータの転送を行う際に参照されるものである。入力データ転送テーブル２７は、各タスク毎に複数存在し、そのタスクが出力処理を行うデータ毎に、そのデータのＩ／Ｏ領域２２での格納位置であるアドレス３と出力バッファ２６での格納位置であるアドレス４が格納されている。
【００６７】
データ出力処理では、タスクの終了時に、そのタスクに対応した出力データ転送テーブル２７が参照され、Ｉ／Ｏ領域２２から出力バッファ２６にデータが転送される。出力バッファ２６は、マルチキャスト方式のフレームフォーマットそのものの構成をもち、シリアルリンク制御ＬＳＩ１０は、マルチキャスト用のトークンを受信すると出力バッファ２６内のデータをマルチキャストフレームとして、シリアルリンクバス１上にＤＭＡ転送する。
【００６８】
この出力データ転送テーブル２７も、前述した入力バッファ転送テーブル２３や２４と同様、コンパイル時にプログラム作成ツール（ローダ）がＩ／ＯモジュールなどのＰＣのシステムの定義情報を参照し、自動生成する。またこれのテーブルは、アプリケーションプログラムをＣＰＵモジュール２にダウンロードする時に同時にシステム定義としてダウンロードされ、アプリケーションプログラムが実行される前に予めＣＰＵモジュール２に設定されている。
【００６９】
このＣＰＵモジュール２でのデータ出力処理は、Ｉ／Ｏ領域２２から出力バッファへ２６のデータ転送（データ出力処理）と、出力バッファ２６からシリアルリンク１へ出力するタイミングは非同期に行われる。このため、この２つのデータ転送が重ならないようにする必要がある。このためには、データ出力処理がタクト割込みの発生タイミングと重ならないようにすればよい。
【００７０】
図１２は、このデータ転送のタイミングの調節処理を説明する図である。
ＣＰＵモジュール２では、図１２の様に、タスクが終了しデータ出力処理に入る前に、タクト周期からタクト割込みの発生からの経過時間を引いた残り時間と、そのタスクに割り当てられているデータ出力処理のために必要な時間とを比較する。そして残り時間よりデータ転送に必要な時間の方が短ければ（図１２の（ａ）の場合）、そのままデータ出力処理を行う。またデータ転送に必要な時間の方が長ければ（図１２（ｂ）の場合）、次のタクト割込みまでにデータ出力処理は完了しないので、このデータ出力処理の実行を次のタクト周期まで遅らせ、データ転送が重ならない様にする。
【００７１】
この様にタスクの中断処理の調整を行うことにより、タクト周期より長いタスク処理であっても、タクト周期に同期した処理をすることが可能となる。
次にＩ／Ｏモジュール３における入出力処理について説明する。
【００７２】
図１３（ａ）は、Ｉ／Ｏモジュール３における入力処理を説明する図である。
Ｉ／Ｏモジュールにおける入力処理とは、出力装置であるＩ／Ｏモジュール３がシリアルリンクバス１より受信したマルチキャストフレームの中から、自己に対するデータを取込み、自己に接続されている制御装置等に出力することである。
【００７３】
Ｉ／Ｏモジュール３内のシリアルリンク制御ＬＳＩ１０は、シリアルリンクバス１よりマルチキャストフレームを受信すると、自己の受信バッファ（不図示）内にそのフレームを取込むと共に下流局へ送信する。
【００７４】
マルチキャストフレームには、送信局によって出力された１乃至複数の出力データが含まれており、各出力データにはそれぞれ出力相手局を示す局番、データのサイズ及びマスク情報が付されている。
【００７５】
Ｉ／Ｏモジュール３は、受信フレーム内の各出力データに対し、付されている局番と自己の局番情報を比較しゆき、一致するものがあれば対応する出力データを入力バッファ３１に取込む。
【００７６】
入力バッファ３１に取込んだ出力データは、データと共に送信されてきたマスク情報によって有効なデータのみが制御装置に出力する。図１３（ｂ）は、そのマスク処理を示す図である。
【００７７】
マルチキャストフレームによって送信されてくる出力データには、それぞれマスク情報が付されており、制御装置へ出力するデータとしては、このマスク情報で示された有効なデータ部のみが用いられる。例えば図１３（ｂ）では、ＣＰＵモジュール＃０及びＣＰＵモジュール＃１の２つのＣＰＵモジュール２からの出力データに対して、マスク情報を用いて、ＣＰＵモジュール＃０からの出力データの上位８ビットとＣＰＵモジュール＃１からの出力データの下位８ビットから制御装置への出力データを生成して出力している。これにより、制御装置への出力データの上位ビットをＣＰＵモジュール＃０、下位ビットをＣＰＵモジュール＃１が使用することになり、マスク情報を用いることにより、１つの出力装置を複数のＣＰＵモジュール２で共有することが可能となる。
図１４は、Ｉ／Ｏモジュール３における出力処理を説明する図である。
【００７８】
Ｉ／Ｏモジュール３に於ける出力処理とは、入力装置であるＩ／Ｏモジュール３が制御装置等からの入力データをＣＰＵモジュール２に対してトータルフレーム方式で出力することである。
【００７９】
Ｉ／Ｏモジュール３内のシリアルリンク制御ＬＳＩ１０は、シリアルリンクバス１よりＳＤ部にＪＫコードが設定されているトータルフレーム方式のフレーム（１巡目のフレーム）を受信すると、受信したフレームに末尾に自己のデータを付加して出力する。この出力データは、Ｉ／Ｏモジュール３に接続されている複数の制御装置からの入力データに基づいて、事前に出力バッファ３２内に生成しておいたもので、これに自局の局番情報、データサイズ及びステータス情報と共にトータルフレームの末尾に付加して出力する。
【００８０】
またシリアルリンクバス１よりＳＤ部にＪＪコードが設定されているフレーム（２巡目のフレーム）を受信すると、受信フレームのＳＤ部の次のデータは自己が付加したデータなのでそれを削除し、残りのデータをそのまま下流局へ出力する。
【００８１】
以上の様にして、Ｉ／Ｏモジュール３では、マルチキャスト方式による入力処理及びトータルフレーム方式による出力処理が行われる。図１５は、シリアルリンクバス１とＣＰＵモジュール２内の実行プロセッサでの処理の流れを示す図である。図１５中「Ｔ・Ｆ１」はトータルフレーム方式で転送されるデータ転送の時間帯域、「Ｍ・Ｃ」はマルチキャスト方式で転送されるデータ転送の時間帯域、「ＭＳＧ」はＣＰＵモジュール２間やＣＰＵモジュール２と通信モジュールなどとの間で行われるメッセージ転送用の時間帯域を示している。
【００８２】
図１５に示されるように、１タクト周期内で「Ｔ・Ｆ１」と「Ｍ・Ｃ」が送信されており、よって各ＣＰＵモジュール２の実行プロセッサは、同一タクト周期内で行った入力処理では同じデータ値を得られ、各ＣＰＵモジュール２間で同期を取ることが出来る。
【００８３】
尚図１５中のタクト周期の時間は１ｍｓｅｃ＊Ｎで、このＮの値はシリアルリンクバス１上の局数に応じて変動する。
図１６は、ＣＰＵモジュール２でのデータ入力処理時に、シリアルリンク制御ＬＳＩ１０によって行われる受信バッファ１１から入力バッファ２１へのデータ転送処理のフローを示すフローチャートである。
【００８４】
図１６において処理が開始されると、まずステップＳ１としてシリアルリンクバス１よりトータルフレームを受信したかどうかが判断され、受信していないのならば（ステップＳ１、Ｎ）、処理を終了する。
【００８５】
ステップＳ１において、トータルフレームを受信したのならば（ステップＳ１Ｙ）、次にステップＳ２として入力バッファ転送テーブル２３を参照し、局番からデータの転送先である入力バッファ２１のアドレスを求める。
【００８６】
ステップＳ２で求めたアドレスが“ＦＦＦＦ”であったならば（ステップＳ３、Ｙ）、この局のデータは必要としていないので、ステップＳ２の処理に戻り、次の局に対するアドレスを求める。またステップＳ３で、ステップＳ２で求めたアドレスが“ＦＦＦＦ”以外の値であれば（ステップＳ３、Ｎ）、その局のデータは必要であるので、受信バッファ１１からまずその局のステータス情報を入力バッファ２１へ書込む（ステップＳ４）。
【００８７】
そして、その局のデータに対して、ステップＳ５及び６でアドレスを＋１インクリメントしながら、サイズ分のデータを入力バッファ２１へ転送する（ステップＳ６）。
【００８８】
そしてサイズ分のデータ転送が終了したすると（ステップＳ５、Ｙ）、ステップＳ７として全ての局のデータに対する転送処理が終了したかどうかが判断され、まだ未処理の局があれば（ステップＳ７、Ｎ）、ステップＳ２に戻りこれまでの処理を繰り返す。また全ての局のデータの転送が終了したのならば（ステップＳ７、Ｙ）、処理を終了する。
【００８９】
図１７は、ＣＰＵモジュール２でのデータ入力処理として、タスクがその処理開始時に行う入力バッファ２１からＩ／Ｏ領域２２への出力データの転送処理を示すフローチャートである。
【００９０】
図１７において処理が開始されると、まずステップＳ１１として、タスクは自己の入力データ転送テーブル２４を参照する。次にステップＳ１２として、入力データ転送テーブル２４に登録されている、このタスクが出力する出力データ全てに対しての処理が終了したかどうかが判断される。そして全て終了していれば（ステップＳ１２、Ｙ）、このタスクは出力処理を終了する。
【００９１】
またステップＳ１２で、処理が終了していないデータがあれば（ステップＳ１２、Ｎ）、次にステップＳ１３として未転送のデータについて、そのサイズ分のデータ転送が終了したかどうかが判断される。サイズ分のデータが転送されていれば（ステップＳ１３、Ｙ）、そのデータは転送が完了しているので、ステップＳ１２に戻り、まだ転送が完了していないデータがあるかが判断される。
【００９２】
このステップＳ１３の判断で、まだサイズ分のデータ転送が終了していなければ（ステップＳ１３、Ｎ）、入力データ転送テーブル２４から読み出した、出力データの入力バッファ２１での格納位置であるアドレス１及びＩ／Ｏ領域２２での格納位置であるアドレス２を用い、ステップＳ１４として、出力データを入力バッファ２１のアドレス１の位置から読み出す。そして次にデータをステップＳ１５として、Ｉ／Ｏ領域２２のアドレス２の位置へ書込む。
【００９３】
この後、ステップＳ１６として、アドレス１及びアドレス２の値を＋１インクリメントし、またサイズを−１デクリメントしてそれぞれ値を更新する。以上ステップＳ１３〜１６での処理がサイズの値が０になるまで繰り返され、１つの出力データに対する転送処理が終了すると、ステップＳ１２の判断に処理は移り、入力データ転送テーブル２４に登録されている全てのデータに対して同様の処理が繰り返されて、タスクによる出力データの転送処理が完了する。
【００９４】
図１８は、データ入力処理時にタスクがその処理終了時に行うＩ／Ｏ領域２２から出力バッファ２６への出力データの転送処理を示すフローチャートである。図１８において処理が開始されると、まずステップＳ２１として、タスクは自己の出力データ転送テーブル２７を参照する。次にステップＳ２２として、出力データ転送テーブル２７に登録されている、このタスクが出力する出力データ全てに対しての処理が終了したかどうかが判断される。そして全てに対して処理が終了していれば（ステップＳ２２、Ｙ）、このタスクは出力データの転送処理を終了する。
【００９５】
またステップＳ２２で処理が終了していないデータがあれば（ステップＳ２２、Ｎ）、次にステップＳ２３として未転送のデータについて、そのサイズ分のデータ転送が終了したかどうかが判断される。サイズ分のデータが転送されていれば（ステップＳ２３、Ｙ）、そのデータは転送が完了しているので、ステップＳ２２に戻り、まだ転送が完了していないデータがあるかが判断される。
【００９６】
またステップＳ２３の判断で、まだサイズ分のデータ転送が終了していなければ（ステップＳ２３、Ｎ）、出力データ転送テーブル２７から読み出したＩ／Ｏ領域２２での出力データの格納位置であるアドレス３及び出力バッファ２６での出力先のアドレスであるアドレス４を用い、ステップＳ２４として、まず、Ｉ／Ｏ領域２２のアドレス３の位置からデータを読み出す。そしてこのデータをステップＳ２５として、出力バッファ２６のアドレス４の位置へ書込む。
【００９７】
この後、ステップＳ２６として、アドレス３及びアドレス４の値を＋１インクリメントし、またサイズを−１デクリメントしてそれぞれ値を更新する。以上ステップＳ２３〜２６での処理がサイズの値が０になるまで繰り返され、１つの出力データに対する転送処理が終了すると、ステップＳ２２の判断に処理は移り、入力データ転送テーブル２４に登録されている全てのデータに対して同様の処理が繰り返されて、タスクによるデータの出力データの転送処理が完了する。
【００９８】
図１９は、ＣＰＵモジュール２での出力処理において、シリアルリンク制御ＬＳＩ１０によって行われる出力バッファ２６からシリアルリンク制御ＬＳＩ１０内の送信バッファ１２への送信処理を示すフローチャートである。
【００９９】
図１９において処理が開始されると、ステップＳ３１として、タクト周期で、出力バッファ２６内のデータがシリアルリンク制御ＬＳＩ１０によってＤＭＡ転送され、全てのデータが転送し終わると処理は終了する。
【０１００】
【発明の効果】
以上の様に本発明によるＰＣにおいては、そのＰＣを構成するＣＰＵモジュールが、タクト割込み発生手段が発生させる割込みに同期して、上記Ｉ／Ｏモジュールに対するデータの入出力処理を行う。よって複数のＣＰＵモジュールを備える構成の場合、各ＣＰＵモジュール間でこの割込みの発生に合わせて同期処理を行うことが出来る。
【０１０１】
また例えばマルチタスクで上記アプリケーションプログラムを実行する場合ににおいても、該マルチタスクのタスクは上記Ｉ／Ｏモジュールに対するデータの入出力処理を上記割込みに同期して行うので、各タスク間で同期を取ることが出来る。
【図面の簡単な説明】
【図１】本実施形態のＰＣの構成を示す図である。
【図２】ＰＣ内の各モジュールの接続及びシリアルリンク内を流れるデータの流れを示す図である。
【図３】トータルフレーム方式による通信の説明図である。
【図４】マルチキャスト方式による通信の説明図である。
【図５】ＣＰＵモジュール内での入力データに対する制御処理を示す図である。
【図６】入力バッファ転送テーブルと入力データ転送テーブルによるデータ転送を説明する図である。
【図７】タクト割込みとタスク動作を説明する図である。
【図８】タスクの詳細を示す図である。
【図９】タスクの中断を説明する図である。
【図１０】ＣＰＵモジュール内での出力データに対する制御処理を示す図である。
【図１１】出力データ転送テーブルによるＩ／Ｏ領域から出力バッファへのデータの転送を説明する図である。
【図１２】データ出力処理のタイミング調節処理を説明する図である。
【図１３】Ｉ／Ｏモジュールにおける入力処理及び出力データのマスク処理を説明する図である。
【図１４】Ｉ／Ｏモジュールにおける出力処理を説明する図である。
【図１５】シリアルリンクバスとＣＰＵモジュール内の実行プロセッサでの処理の流れを示す図である。
【図１６】シリアルリンク制御ＬＳＩによって行われる受信バッファから入力バッファへのデータ転送処理のフローを示すフローチャートである。
【図１７】タスクがその処理開始時に行う入力バッファからＩ／Ｏ領域への出力データの転送処理のフローを示すフローチャートである。
【図１８】タスクがその処理終了時に行うＩ／Ｏ領域から出力バッファへの出力データの転送処理のフローを示すフローチャートである。
【図１９】シリアルリンク制御ＬＳＩによって行われる出力バッファから送信バッファへの送信処理を示すフローチャートである。
【図２０】従来のＰＣの構成例を示す図である。
【図２１】ＣＰＵモジュールで行われる従来のタスク動作とプロセスデータの入出力処理の関係を示す図である。
【図２２】従来のタスク動作を示す図である。
【符号の説明】
１  シリアルリンクバス
２  ＣＰＵモジュール
３  Ｉ／Ｏモジュール
１０  シリアルリンク制御ＬＳＩ
１１  送信バッファ
１２  受信バッファ
２１、３１  入力バッファ
２２  Ｉ／Ｏ領域
２３  入力バッファ転送テーブル
２４  入力データ転送テーブル
２５  タスク
２６、３２  出力バッファ
２７  出力データ転送テーブル
【図１】
0003959845.tif 000002
【図２】
0003959845.tif 000003
【図３】
0003959845.tif 000004
【図４】
0003959845.tif 000005
【図５】
0003959845.tif 000006
【図６】
0003959845.tif 000007
【図７】
0003959845.tif 000008
【図８】
0003959845.tif 000009
【図９】
0003959845.tif 000010
【図１０】
0003959845.tif 000011
【図１１】
0003959845.tif 000012
【図１２】
0003959845.tif 000013
【図１３】
0003959845.tif 000014
【図１４】
0003959845.tif 000015
【図１５】
0003959845.tif 000016
【図１６】
0003959845.tif 000017
【図１７】
0003959845.tif 000018
【図１８】
0003959845.tif 000019
【図１９】
0003959845.tif 000020
【図２０】
0003959845.tif 000021
【図２１】
0003959845.tif 000022
【図２２】
0003959845.tif 000023