(57)【特許請求の範囲】
【請求項１】
ユーザプログラムの命令を解読して命令実行する命令実行部と、
ローカルＩ／Ｏ部を接続するＩ／Ｏバスと、
リモートＩ／Ｏスレーブとデータの送受信が可能であり、前記Ｉ／Ｏバスを介することなく前記命令実行部とデータの交換が可能であるリモートマスタ部と、
前記リモートＩ／Ｏスレーブから入力した入力データと、前記命令実行結果としてリモートＩ／Ｏスレーブに出力する出力データとを記憶し、前記命令実行部が命令実行する際にアクセスするデータメモリと、
前記データメモリに対する前記命令実行部からのアクセスおよび前記リモートマスタ部からのアクセスを調停するアービタと、
を備えたプログラマブルコントローラ。
【請求項２】
前記命令実行部は、命令実行処理とＩ／Ｏリフレッシュ処理等の周辺処理とをサイクリックに実行するものであり、
前記リモートＩ／Ｏマスタ部は、前記命令実行処理とI/Oリフレッシュ処理等の周辺処理とを実行する時間を測定し、前記命令実行処理の終了タイミングで、リモートＩ／Ｏスレーブとの通信サイクルが終了するように制御するように構成したことを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項３】
前記命令実行部は、命令実行処理と、Ｉ／Ｏリフレッシュ処理等の周辺処理とをサイクリックに実行するものであり、命令実行処理の終了時に終了通知を発する機能を持ち、
前記リモートＩ／Ｏマスタ部は、前記終了通知をトリガとしてＩ／Ｏリフレッシュ動作を行い、前記データメモリに対するデータ転送を行うことを特徴とする請求項１に記載のプログラマブルコントロ−ラ。
【請求項４】
前記命令実行部は、I/Oリフレッシュ命令を出力する機能を持ち、前記リモートI/Oマスタ部は、前記リフレッシュ命令をトリガとしてI/Oリフレッシュ動作を行い、前記データメモリに対するデータ転送を行うことを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項５】
前記命令実行部と前記リモートI/Oマスタ部とは非同期に動作することを特徴とする請求項１に記載のプログラマブルコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、プログラマブルコントローラ（ＰＬＣ）に関するものである。
【０００２】
【従来の技術】
ＦＡ（ファクトリーオートメーション）で用いられるプログラマブルコントローラ（ＰＬＣ）は、入力機器（スイッチやセンサなど）のＯＮ／ＯＦＦ情報を入力し、ラダー言語などで書かれたシーケンスプログラム（ユーザプログラム）に沿って論理演算（命令）を実行して、その演算結果により、出力機器（リレーやバルブ、アクチュエータなど）にＯＮ／ＯＦＦ情報の信号を出力することで制御を行う。
【０００３】
そして、係るＯＮ／ＯＦＦ情報の最終的な通信相手の機器の一つとして、リモートＩ／Ｏがある。このリモートＩ／Ｏとの間で通信を行うためのネットワーク構成の一例として、従来、図１に示すシステムにより実現している。
【０００４】
すなわち、ＰＬＣのＣＰＵユニット１，リモートマスタユニット２が、Ｉ／Ｏバス３に接続されており、Ｉ／Ｏバス３にリモートＩ／Ｏスレーブ４が接続された構成をとる。ＣＰＵユニット１がリモートＩ／Ｏスレーブ４との間でデータの送受を行う場合、リモートマスタユニット２を介して行うようになっている。
【０００５】
つまり、リモートマスタユニット２内のリモートＩ／Ｏマスタ部２ａと、リモートＩ／Ｏスレーブ４との間でマスタ−スレーブ通信を行い、リモートＩ／Ｏスレーブ４からの入力データをＩ／Ｏバスインタフェース部２ｂを介して共有メモリ２ｃに一時格納する。
【０００６】
一方、ＰＬＣのＣＰＵユニット１は、ＰＬＣ命令実行部１ａがデータメモリ１ｂをアクセスしながら、命令を演算実行（命令実行）する。そして、リモートＩ／Ｏの入力データを取得するためには、Ｉ／Ｏバスインタフェース部１ｃ，Ｉ／Ｏバス３，Ｉ／Ｏバスインタフェース部２ｂを介してリモートマスタユニット２内の共有メモリ２ｃに格納されたデータを読み出し取得する。
【０００７】
つまり、リモートＩ／Ｏスレーブ４からの入力データをＣＰＵユニット１のデータメモリ１ｂに格納するためには、以下の手順に従って実行される。まず、スイッチなどの接点の入力を受けたリモートＩ／Ｏスレーブ４が、その接点情報を内部のレジスタ（図示省略）に記憶保持する。そして、リモートＩ／Ｏマスタ部２ａが各スレーブとシリアル通信をして、各リモートＩ／Ｏスレーブ４の内部レジスタの入力データを取り込むとともに、当該マスタ内のレジスタ（図示省略）に記憶する。次いで、リモートＩ／Ｏマスタ部２ａは、レジスタ内の入力データをＩ／Ｏバスインタフェース部２ｂを介して共有メモリ２ｃの所定データ領域に格納する（転送する）。このリモートＩ／Ｏスレーブ４から入力データを取得（受信）して共有メモリ２ｃに格納するまでは、リモートＩ／Ｏマスタ部２ａが主体となって行う。
【０００８】
そして、共有メモリ２ｃに格納された入力データをＣＰＵユニット１のデータメモリ１ｂに格納する処理は、まず、ＰＬＣ命令実行部１ａがＩ／Ｏリフレッシュ処理を実行する際に共有メモリ２ｃ内の入力データをＩ／Ｏバス３経由で読み出してラッチし、所定のタイミングでそのラッチした入力データをデータメモリ１ｂの所定のデータ領域に格納する。このように、入力データが、リモートＩ／Ｏスレーブ４のレジスタに格納されてから実際にＣＰＵユニット１のデータメモリ１ｂに格納されるまでには、多数のデータ転送が行われる。
【０００９】
一方、データメモリ１ｂには、Ｉ／Ｏバス３に接続されたローカルＩ／Ｏユニット７からの入力データも格納される。そして、係る入力データの格納は、まず、スイッチなどの接点の入力を受けたローカルＩ／Ｏユニット７が、その接点情報を内部のレジスタ（図示省略）に記憶保持しておく。そして、ＰＬＣ命令実行部１ａがＩ／Ｏリフレッシュ処理を実行する際にローカルＩ／Ｏユニット７のレジスタ内の入力データをＩ／Ｏバス３経由で読み出してラッチし、所定のタイミングでそのラッチした入力データをデータメモリ１ｂの所定のデータ領域に格納する。
【００１０】
このように、ローカルＩ／Ｏユニット７の入力データと、リモートＩ／Ｏスレーブ４の入力データは、共にＰＬＣの各ユニットを接続するＩ／Ｏバス３を経由してＣＰＵユニット１に取り込まれる（同一系統を使用する）ため、データの取り込みについて同時処理はできず、連続処理（順次処理）により一方からの入力データを順番に取得することになる。
【００１１】
また、ＰＬＣ命令実行部１ａが命令実行して得られた演算結果は、データメモリ１ｂの所定データ領域に格納される。そして、その格納された演算結果（出力データ）は、次のＩ／Ｏリフレッシュその他の周辺処理の際に、ＰＬＣ命令実行部１ａがデータメモリ１ｂから読み出し、Ｉ／Ｏバス３を介してリモートＩ／Ｏマスタ部ユニット２内の共有メモリ２ｃ或いはローカルＩ／Ｏユニット７のレジスタに格納する。この際も、入力データの取得のときと同様に同一系統のＩ／Ｏバス３を用いるので、順次処理していく。
【００１２】
そして、共有メモリ２ｃに格納された出力データは、リモートＩ／Ｏマスタ部２ａが読み出して（転送して）レジスタに記憶し、所定のタイミングでそのレジスタに格納したデータをマスタ−スレーブ通信により、所望のリモートＩ／Ｏスレーブ４に送るようになる。このように、出力データの転送回数も多くなる。
【００１３】
【発明が解決しようとする課題】
上記したように、従来のリモートＩ／Ｏに対するリフレッシュは、リモートＩ／Ｏスレーブ４の入力データがＰＬＣ命令実行部１ａで使用できるまで、並びにＰＬＣ命令実行部１ａの演算結果が、リモートＩ／Ｏスレーブ４に反映されるまでに、複数のデータ転送が発生し、効率が悪い。
【００１４】
しかも、Ｉ／Ｏバス３を介してのデータ転送は、ＰＬＣ命令実行部１ａを使用して、実行されるため、本来の演算処理のための命令実行サイクルに影響を与えるという問題がある。
【００１５】
一例を示すと、図２に示すように、リモートマスタユニット内の共有メモリ２ｃに、図示のタイミングで入力データ（ＩＮデータ）が格納された場合、ＰＬＣ命令実行部１ａにおける次の命令実行スキャンの後のＩ／Ｏリフレッシュ等周辺処理のタイミングで通信ユニット内処理を実行するとともにＣＰＵユニット１内のデータメモリ１ｂに取り込まれる。そして、次の命令実行スキャンで上記取り込まれた入力データに基づき、演算処理を実行し、得られた結果（出力データ：ＯＵＴデータ）は、共有メモリ２ｃに与えられる。このように、リモートＩ／Ｏスレーブ４から入力データが送られてきてから、その入力データが反映された出力データがリモートＩ／Ｏスレーブ４に送信されるまでに要するＩ／Ｏ応答時間の最大は、
命令実行スキャン×２＋通信ユニット内処理×２
となる。
【００１６】
このとき、命令実行サイクルがリモートＩ／Ｏ通信サイクル分は定常的に大きくなる。そのため、Ｉ／Ｏバス３上に存在するローカルＩ／Ｏユニット７に対するＩ／Ｏ応答性能も遅くなるという問題がある。すなわち、上記したようにリモートマスタユニット２の共有メモリ２ｃとの間のデータ通信と、ローカルＩ／Ｏユニット７のレジスタとの間のデータ通信は、共に同一系統であるＩ／Ｏバス３を用いてるので、同時に通信をすることはできないためである。
【００１７】
また、リモートＩ／Ｏの通信サイクル（リモートＩ／Ｏスレーブ４のリフレッシュ）と、命令実行サイクルを非同期に実行する場合、Ｉ／Ｏ応答サイクル（ＩＮデータ変化→演算処理→ＯＵＴデータ出力）の最大値が大きくなる。そして、通信サイクルよりも命令実行スキャンが大きい（長い）場合のＩ／Ｏ応答時間の最大値は、図３に示すように、命令実行スキャン開始と同時に入力データがリモートマスタユニット２（共有メモリ２ｃ）に取り込まれた場合、その命令実行スキャン終了に伴い実行されるＩ／Ｏリフレッシュ処理（ＲＥＦ）の際に通信ユニット内処理が行われ、更にその次のリフレッシュ処理の際に実際に入力データがＣＰＵユニット１内のデータメモリ１ｂに取り込まれる。そして、次の命令実行スキャンでは、取り込まれた入力データに基づいて演算処理が実行され、求められた出力データは、順でデータが転送され最終的にリモートマスタユニット２からリモートＩ／Ｏスレーブ４に向けて出力される。このようにリモートＩ／Ｏスレーブ４から入力データが送られてきてから、その入力データが反映された出力データがリモートＩ／Ｏスレーブ４に送信されるまでに要するＩ／Ｏ応答時間の最大は、
通信サイクル×３＋命令実行スキャン×２＋通信ユニット内処理×２
となる。
【００１８】
同様に、通信サイクルの方が命令実行スキャンよりも長い場合には、図４に示す手順にしたがってデータの転送が行われるため、やはり、
通信サイクル×３＋命令実行スキャン×２＋通信ユニット内処理×２
となる。
【００１９】
この発明は、Ｉ／Ｏリフレッシュに伴うデータ転送回数を少なくし、高速にリフレッシュ処理をすることのできるプログラマブルコントローラ（ＰＬＣ）を提供することを目的としている。
【００２０】
【課題を解決するための手段】
この発明によるプログラマブルコントローラは、ユーザプログラムの命令を解読して命令実行する命令実行部と、ローカルＩ／Ｏ部を接続するＩ／Ｏバスと、リモートＩ／Ｏスレーブとデータの送受信が可能であり、前記Ｉ／Ｏバスを介することなく前記命令実行部とデータの交換が可能であるリモートマスタ部と、前記リモートＩ／Ｏスレーブから入力した入力データと、前記命令実行結果としてリモートＩ／Ｏスレーブに出力する出力データとを記憶し、前記命令実行部が命令実行する際にアクセスするデータメモリと、前記データメモリに対する前記命令実行部からのアクセスおよび前記リモートマスタ部からのアクセスを調停するアービタと、を備えて構成した。
【００２１】
この発明によると、リモートＩ／Ｏマスタ部は、外部のリモートＩ／Ｏスレーブとの間でデータ通信（リモートＩ／Ｏの通信サイクル：リモートＩ／Ｏスレーブリフレッシュ）を行い、リモートＩ／Ｏスレーブからの入力データをデータメモリに書き込む。命令実行部は、命令実行する際にデータメモリをアクセスし、前記入力データを読み出したり、命令実行して得られた出力データをデータメモリに書き込む。この書き込まれた出力データは、次のサイクルで、リモートＩ／Ｏマスタ部が読み出し（転送し）、リモートＩ／Ｏスレーブのリフレッシュに反映される。
【００２２】
このように、データメモリを共有メモリとし、リモートＩ／Ｏマスタ部と命令実行部がそれぞれアクセスし、Ｉ／Ｏデータの読み書きをするので、Ｉ／Ｏデータの転送回数が削減され、転送にかかる時間を短縮でき、高速にリフレッシュ処理ができる。さらに、命令実行部がアクセスするデータメモリに入力データを格納する処理は、リモートＩ／Ｏマスタ部が行うので、命令実行部の負荷が軽減される。
【００２５】
このように、アービタを介してデータメモリにアクセスするようにしたため、アクセス競合制御され、チャネル単位や複数チャネル単位での同時性が保証される。
【００２６】
また、前記命令実行部は、命令実行処理と、Ｉ／Ｏリフレッシュ処理等の周辺処理をサイクリックに実行するものであり、命令実行処理の終了時に終了通知を発する機能を持ち、前記リモートＩ／Ｏマスタ部は、前記終了通知をトリガとしてＩ／Ｏリフレッシュ動作を行い、前記データメモリに対するデータ転送を行うようにすることができる。
【００２７】
係る構成をとると、リモートＩ／Ｏマスタ部と命令実行部の動作の同期が採れるので、１回の命令実行サイクル中における同一のデータ領域におけるデータの同時性が保証される。なお、終了通知は、実施の形態ではＥＮＤ命令に対応する。Ｉ／Ｏリフレッシュ動作は、実施の形態に示すＥＮＤ通信起動方式とＥＮＤ通信停止方式のいずれも採れる。
【００２８】
また、前記命令実行部は、Ｉ／Ｏリフレッシュ命令を出力する機能を持ち、前記リモートＩ／Ｏマスタ部は、前記リフレッシュ命令をトリガとしてＩ／Ｏリフレッシュ動作を行い、前記データメモリに対するデータ転送を行うようにすることもできる。このようにすると、任意のタイミングでリモートＩ／Ｏ上の入出力データをリフレッシュすることができる。
【００２９】
一方、前記命令実行部と前記リモートＩ／Ｏマスタ部は非同期に動作するようにしてもよい。このようにすると、同期をとる必要がないので、命令実行部の負荷が更に削減する。そして、アービタを設けているので、少なくともチャネル単位でのデータの同時性は保証されるので、問題はない。
【００３０】
さらにまた、前記命令実行部は、命令実行処理と、Ｉ／Ｏリフレッシュ処理等の周辺処理をサイクリックに実行するものであり、前記リモートＩ／Ｏマスタ部は、前記命令実行処理とＩ／Ｏリフレッシュ処理等の周辺処理を実行するのに要する時間を測定し、前記命令実行処理の終了タイミングで、リモートＩ／Ｏスレーブとの通信サイクルが終了するように制御するように構成するとよい。
【００３１】
係る構成をとると、命令実行処理（命令実行サイクル）が終了すると、遅滞なくリフレッシュ処理が実行できるので、無駄が無く効率よく命令実行サイクルとリモートＩ／Ｏ通信サイクルを同期させて動作させることができる。Ｉ／Ｏ応答性能も高速化できる。
【００３５】
【発明の実施の形態】
図５は、本発明の好適な一実施の形態を示している。良く知られているように、ＣＰＵユニット，電源ユニット，ローカルＩ／Ｏユニットなどの各機能毎に構成される複数のユニットをバスで接続することにより一体化し、ＰＬＣを形成するタイプのものがある。このバスが、Ｉ／Ｏデータを通信するためのＩ／Ｏバスであり、また、電源もこのバスを介して各ユニットに供給される。
【００３６】
そして、図５に示すように、ＰＬＣのＣＰＵユニット１０は、従来と同様にＩ／Ｏバスインタフェース部１１を介してＩ／Ｏバス２０に接続されており、ローカルＩ／Ｏユニット２１と通信可能となっている。
【００３７】
また、ＣＰＵユニット１０は、ユーザプログラムで規定される命令を演算実行（命令実行）するＰＬＣ命令実行部１２を有し、データメモリ１３からデータをアクセスしながら演算処理をする。つまり、データメモリ１３に格納されたデータを読み出したり、命令実行結果をデータメモリ１３に書き込む処理をする。
【００３８】
ここで本発明では、ＣＰＵユニット１０内に、リモートＩ／Ｏマスタ部１４を設け、このリモートＩ／Ｏマスタ部１４とリモートＩ／Ｏスレーブ２３とを接続するようにしている。リモートＩ／Ｏマスタ部１４とリモートＩ／Ｏスレーブ２３の間では、マスタ−スレーブ間通信により、データの送受を可能としている。
【００３９】
そして、リモートＩ／Ｏスレーブ２３との間で送受するデータは、データメモリ１３に格納するようにしている。つまり、データメモリ１３を、ＰＬＣ命令実行部１２とリモートＩ／Ｏマスタ部１４が扱う（アクセスする）共有メモリとした。
【００４０】
そして、ＰＬＣ命令実行部１２とリモートＩ／Ｏマスタ部１４は、アービタ１５を介してアクセスをし、所定のデータ領域に対してデータの読み書きを行うようにしている。このアービタ１５によりアクセス競合制御がなされ、同一のデータ領域に対してＰＬＣ命令実行部１２とリモートＩ／Ｏマスタ部１４が同時に読み書きをすることを抑止する。これにより、チャネル単位或いは複数チャネル単位でのデータの同時性が保証される。
【００４１】
このように、データメモリ１３を共有メモリとして使用し、リモートＩ／ＯのＩ／Ｏデータの転送回数が削減される。更に、リモートＩ／Ｏスレーブ２３からの入力データをＣＰＵユニット１０内のデータメモリ１３に格納する処理や、係るデータメモリ１３に格納された演算結果（リモートＩ／Ｏスレーブ２３への出力データ）の出力処理はリモートＩ／Ｏマスタ部１４が実行する。従って、係る処理を従来行っていたＰＬＣ命令実行部１２のＩ／Ｏデータリフレッシュ負荷が軽減される。更にまた、リモートＩ／Ｏマスタ部１４から直接データメモリ１３に転送されるので、ＰＬＣ命令実行部１２のＩ／Ｏ転送に係る時間を短縮することができ、Ｉ／Ｏ応答性能も高速化する。
【００４２】
さらに、本実施の形態では、ローカルＩ／Ｏユニット２１のＩ／Ｏデータは、従来と同様にＰＬＣ命令実行部１２のＩ／Ｏリフレッシュその他の周辺処理の際に、Ｉ／Ｏバス２０を経由して、データの送受が行われる。つまり、入力データは、ＰＬＣ命令実行部１２がラッチし、データメモリ１３の所定のデータ領域に書き込む。また、データメモリ１３に格納された出力データは、ＰＬＣ命令実行部１２により読み出され、Ｉ／Ｏバス２０を介してローカルＩ／Ｏユニット２１に書き込まれる。
【００４３】
このように、ローカルＩ／Ｏユニット２１とのＩ／Ｏデータの送受はＩ／Ｏバス２０を介して行われ、リモートＩ／Ｏスレーブ２３とのＩ／Ｏデータの送受はＩ／Ｏバス２０を介することなくリモートＩ／Ｏマスタ部１４を経由した別系統で独立して行われる。従って、それぞれを同時並行に処理することができ、全体の処理時間が短縮される。
【００４４】
更に、ローカルＩ／Ｏユニット２１との間で通信されるＩ／Ｏデータも、データメモリ１３に格納されるので、ローカルＩ／Ｏユニット２１のＩ／Ｏデータと、リモートＩ／Ｏスレーブ２３のＩ／Ｏデータメモリ１３へのアクセスの調停もアービタ１５により行われ、同時にアクセスされないようにしている。なお、調停が行われるのは実際のデータメモリ１３へのアクセスであるので、例えば、リモートＩ／Ｏマスタ部１４がリモートＩ／Ｏスレーブ２３からの入力データを受信し、内部レジスタに格納する処理と、ＰＬＣ命令実行部１２がローカルＩ／Ｏユニット２１から入力データを取得する処理は、上記したように同時並列に処理可能である。
【００４５】
さらに、ＰＬＣ命令実行部１２とリモートＩ／Ｏマスタ部１４は、相互に制御信号を送受し、効率よくＩ／Ｏリフレッシュ処理を実行するようにしている。具体的には、図６に示すように、ＰＬＣ命令実行部１２は、ユーザプログラムで規定される命令を順次命令実行し、命令実行の際にデータメモリ１３をアクセスし、入力データを取得したり、演算結果の出力データを格納する。そして、命令実行が終了した際に、ＥＮＤ命令実行を出力する。
【００４６】
一方、リモートＩ／Ｏマスタ部１４は、上記したＥＮＤ命令が出力されるのをモニタリングしており、ＥＮＤ命令実行をトリガとして、所定のＩ／Ｏリフレッシュ動作を実行し、処理が完了すると、制御信号として転送完了命令を出力する。ＰＬＣ命令実行部１２は、この転送終了命令をモニタリングし、その命令が出力されると、今回のＩ／Ｏリフレッシュ処理が終了したと判断し、次のサイクルに移行する。つまり、ＰＬＣ命令実行部１２は、Ｉ／Ｏリフレッシュ＋周辺処理フェーズでリモートＩ／Ｏマスタ部１４からの転送終了通知のみチェックしているだけで、リモート上のデータが全て同期したタイミングでデータメモリ１３にリフレッシュされる。この点でも、ＰＬＣ命令実行部１２の負荷が軽減される。
【００４７】
そして、上記したエンド命令並びに転送終了通知に基づいて動作するＰＬＣ命令実行部１２とリモートＩ／Ｏマスタ部１４の機能は、以下の通りである。すなわち、まず図６（ａ）に示すＥＮＤ通信起動方式の場合、リモートＩ／Ｏマスタ部１４は、ＰＬＣ命令実行部１２からのＥＮＤ命令をトリガとして、データメモリ１３に格納されている出力データを読み出す（ＯＵＴ転送）。次いで、リモートＩ／Ｏの通信を起動（１回）する。これに伴い、読み出した出力データを送信すべきリモートＩ／Ｏスレーブ２３（出力機器）に対して送信し（ＯＵＴ送信）、リモートＩ／Ｏスレーブ２３からの入力データを受信する（ＩＮ受信）。その後、受信した入力データを、データメモリ１３の所定領域に格納する（ＩＮ転送）。そして、係る転送処理が終了すると、ＰＬＣ命令実行部１２に向けて転送終了通知を発行する。
【００４８】
また、別の方式としては、例えば図６（ｂ）に示すようにＥＮＤ通信停止方式をとることもできる。この方式は、上記したＥＮＤ通信起動方式とは逆に、リモートＩ／Ｏの通信は定常的に起動させておき、リモートＩ／Ｏマスタ部１４とリモートＩ／Ｏスレーブ２３の間で出力データの送信（ＯＵＴ送信）と入力データの受信（ＩＮ受信）を繰り返し実行する。
【００４９】
そして、ＰＬＣ命令実行部１２からのＥＮＤ命令を受信すると、リモートＩ／Ｏマスタ部１４は、リモートＩ／Ｏの通信を停止する。つまり、ＥＮＤ命令を受けたときに実行しているリモートＩ／Ｏ通信が終了（ＩＮ受信処理終了）するのを待って、停止する。
【００５０】
そして、直前のＩＮ受信処理で取得したリモートＩ／Ｏスレーブ２３からの入力データをデータメモリ１３の所定のデータ領域に書き込む（ＩＮ転送）。次いで、データメモリ１３に格納された出力データを読み出す（ＯＵＴ転送）。その後、転送終了通知を発行するとともに、リモートＩ／Ｏ通信を再開し、読み出した出力データを所定のリモートＩ／Ｏスレーブ２３に向けて送信する（ＯＵＴ送信）。
【００５１】
なお、上記した実施の形態では、ＰＬＣ命令実行部１２の終了に伴い出力されるＥＮＤ命令をトリガとしてリモートＩ／Ｏマスタ部１４はデータの転送を行い、リモートＩ／Ｏ上の入出力データをリフレッシュするようにしたが、本発明はこれに限ることはなく、例えば、ＰＬＣ命令実行部１２からリモートＩ／Ｏ通信起動指令や、停止指令を出力するようにすることもできる。係る構成（都度リフレッシュ方式）をとることにより、任意のタイミングでリモートＩ／Ｏのリフレッシュを行うことができる。
【００５２】
一方、上記した実施の形態並びにその変形例は、ＰＬＣ命令実行部１２とリモートＩ／Ｏマスタ部１４の同期をとるようにしたが、本発明は必ずしも同期をとる必要はなく、それぞれ非同期に実行し、共有メモリであるデータメモリ１３に対するアクセスも非同期に転送するように構成することもできる。この場合でも、アービタ１５により、１チャネル（通常１６点）或いは複数チャネル単位での同時性は保証される。
【００５３】
これにより、ＰＬＣ命令実行部１２とリモートＩ／Ｏマスタ部１４は、互いに影響されることなく実行され、タイミングをとる必要がないので、より高速に実行することができる。なお、１サイクルの命令実行中において、同一のデータ領域に格納されているデータ値が変更されることはもちろんあるが、少なくとも１つの命令を実行中でのデータの同時性は保証される。
この場合の入出力データ（ＩＮデータ／ＯＵＴデータ）の転送タイミングは、例えば、図７に示すようになり、最大Ｉ／Ｏ応答時間は、
通信サイクル×３＋命令実行スキャン×２−Ｉ／Ｏリフレッシュ周辺処理
となる。従って、図３，図４に示した従来の非同期リフレッシュ方式に比べて、通信ユニット内の転送処理×２＋（Ｉ／Ｏバス転送時間−データメモリ転送時間）×２＋Ｉ／Ｏリフレッシュ／周辺処理分だけ高速化される。
【００５４】
一方、上記したリモートＩ／Ｏマスタ部１４の機能として、上記した実施の形態を基本とし、さらに、命令実行スキャンタイム（命令実行時間十Ｉ／Ｏリフレッシュ／周辺サービス時間）を測定し、命令実行フェーズ終了（ＥＮＤ命令の出力）時にリモート通信サイクルが終了するように通信を起動する機能を設けると良い。
【００５５】
このようにすると、命令実行が終了した際には、入力データを受信（ＩＮ受信）しているので、すぐにデータメモリ１３への転送が行える。よって、さらなる高速処理が可能となる。
【００５６】
係る作用効果を具体例を示して説明すると、図８のようになる。すなわち、前回測定した命令実行スキャンタイムがＣ１測定時間に基づき、入出力データの通信サイクルが、次の命令実行スキャンタイムの終了時点Ａ１で終了するようにＢ１のときに通信を起動する。これにより、入力データは、命令実行が終了した時点Ａ１で、スムーズに無駄なく入力データのデータメモリ１３への転送が実行できる。
【００５７】
同様に，Ｃ２測定時間に基づき、Ａ２の時点で通信サイクルが終了するようにＢ２時点で通信を起動する。従って、命令実行により求められ、データメモリ１３に格納された出力データ（ＯＵＴデータ）は、ＲＥＦフェーズで遅滞なくリモートＩ／Ｏ通信によりリモートＩ／Ｏマスタ部１４に転送され、その後、ＯＵＴデータリフレッシュのために通信サイクルを起動し、所望のリモートＩ／Ｏスレーブ２３に送信される。
【００５８】
これにより、命令事項サイクルとリモートＩ／Ｏ通信サイクルをロスなく同期させることができ、図示した例（入力データが矢印▲１▼のタイミングで入力された場合）におけるＩ／Ｏ応答時間は、
通信サイクル×１＋命令実行スキャン×２＋出力データ転送時間
となる。また、入力データが矢印▲２▼のタイミングで入力された場合には、命令実行スキャンタイムが１回分短くなるので、
通信サイクル×１＋命令実行スキャン×１＋出力データ転送時間
となる。つまり、入力データの入力タイミングで上記した範囲内となり、矢印▲１▼のタイミングの場合が最大Ｉ／Ｏ応答時間となる。なお、図中一点鎖線の矢印は、データ入力から演算ひいてはデータ出力までのデータの流れ（Ｉ／Ｏ応答）を示している。
【００５９】
【発明の効果】
以上のように、この発明では、リモートＩ／Ｏマスタ部を設け、リモートＩ／Ｏマスタ部と、命令を実行する命令実行部が、データメモリを共有メモリとして互いにアクセスするようにしたため、一方が書き込んだデータを他方が読み出すことができる。よって、Ｉ／Ｏリフレッシュに伴うデータ転送回数が少なくなり、高速にリフレッシュ処理をすることができる。
【図面の簡単な説明】
【図１】従来例を示す図である。
【図２】従来の問題点を説明する図である。
【図３】従来の問題点を説明する図である。
【図４】従来の問題点を説明する図である。
【図５】本発明の好適な一実施の形態を示す図である。
【図６】（ａ）は、ＥＮＤ通信起動方式を説明する図である。
（ｂ）は、ＥＮＤ通信停止方式を説明する図である。
【図７】変形例を説明する図である。
【図８】他の実施の形態を説明する図である。
【符号の説明】
１０  ＣＰＵユニット
１１  Ｉ／Ｏバスインタフェース部
１２  ＰＬＣ命令実行部
１３  データメモリ
１４  リモートＩ／Ｏマスタ部
１５  アービタ
２０  Ｉ／Ｏバス
２１  ローカルＩ／Ｏユニット
２３  リモートＩ／Ｏスレーブ
【図１】
0003669302.tif 000002
【図２】
0003669302.tif 000003
【図３】
0003669302.tif 000004
【図４】
0003669302.tif 000005
【図５】
0003669302.tif 000006
【図６】
0003669302.tif 000007
【図７】
0003669302.tif 000008
【図８】
0003669302.tif 000009