(57)【要約】【課題】Ｉ／Ｏリフレッシュ時のキャッシュ無効化による影響の少ないプログラマブルコントローラを提供する。【解決手段】プログラマブルコントローラ１は、キャッシュメモリ１９を共有する第１ＣＰＵ１１および第２ＣＰＵ１２と、外部のＩ／Ｏユニット２５とのデータ送受を行う外部インターフェース１７とを備える。外部インターフェース１７は、Ｉ／Ｏユニット２５からの入力データと、データメモリ２０における当該入力データの格納先のアドレスのデータとを比較して、両者が異なる場合にのみ、当該入力データをデータメモリ２０に格納してデータを更新するとともに、更新されたデータに対応するキャッシュメモリ１９のデータを無効化する。【選択図】図１
2015141648.tif 000002
【特許請求の範囲】
【請求項１】
外部とのデータ送受を行う外部インターフェースと、
前記外部インターフェースが外部から取得した入力データに基づき、制御プログラムに沿って演算実行を行い、前記演算実行の結果である出力データを前記外部インターフェースを介して外部へ出力するＣＰＵと、
前記入力データ、前記出力データおよび前記ＣＰＵが前記演算実行に使用するデータを格納するデータメモリと、
を備えるプログラマブルコントローラであって、
前記ＣＰＵは、キャッシュメモリを備え、
前記外部インターフェースは、前記入力データと、前記データメモリにおける前記入力データの格納先のアドレスのデータとを比較して、両者が異なる場合にのみ、前記入力データを前記データメモリに格納してデータを更新するとともに更新されたデータに対応する前記キャッシュメモリのデータを無効化する
ことを特徴とするプログラマブルコントローラ。
【請求項２】
外部とのデータ送受を行う外部インターフェースと、
前記外部インターフェースが外部から取得した入力データに基づき、制御プログラムに沿って演算実行を行い、前記演算実行の結果である出力データを前記外部インターフェースを介して外部へ出力するＣＰＵと、
前記入力データ、前記出力データおよび前記ＣＰＵが前記演算実行に使用するデータを格納するデータメモリと、
を備えるプログラマブルコントローラであって、
前記ＣＰＵは、キャッシュメモリを備え、前記演算実行の前または前記演算実行中の待ち処理期間に、前記データメモリ内のデータの一部を前記キャッシュメモリへ転送するプリロード処理を行う
ことを特徴とするプログラマブルコントローラ。
【請求項３】
前記外部インターフェースは、前記演算実行が行われている間に前記入力データを外部から取得して前記データメモリに格納する処理を行う
請求項２に記載のプログラマブルコントローラ。
【請求項４】
前記外部インターフェースは、前記演算実行が行われている間に前記データメモリに格納されている前記出力データを外部へ出力する処理を行う
請求項２または請求項３に記載のプログラマブルコントローラ。
【請求項５】
前記データメモリを複数有し、
前記外部インターフェースは、前記複数のデータメモリのうち前記演算実行で使用されていないものに、前記入力データを格納する
請求項２から請求項４のいずれか一項に記載のプログラマブルコントローラ。
【請求項６】
前記外部インターフェースは、前記データメモリのデータが更新されるときに、更新されたデータに対応する前記キャッシュメモリのデータを無効化する
請求項２から請求項５のいずれか一項に記載のプログラマブルコントローラ。
【請求項７】
前記外部インターフェースは、前記キャッシュメモリのデータを無効化するときに、無効化したデータのアドレスを前記データメモリに格納し、
前記ＣＰＵは、前記プリロード処理において、前記データメモリに格納されている前記無効化されたデータのアドレスに対応する前記データメモリのアドレスのデータを前記キャッシュメモリへ転送する
請求項６に記載のプログラマブルコントローラ。
【請求項８】
前記外部インターフェースは、前記入力データと、前記データメモリにおける前記入力データの格納先のアドレスのデータとを比較して、両者が異なる場合にのみ、前記入力データを前記データメモリに格納してデータを更新するとともに更新されたデータに対応する前記キャッシュメモリのデータを無効化する
請求項７に記載のプログラマブルコントローラ。
【請求項９】
前記制御プログラムに基づいて、前記キャッシュに前記入力データを格納するプリロード処理を行うプログラムを作成するコンパイラをさらに備える
請求項２から請求項６のいずれか一項に記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラに関し、特に、入出力（Ｉ／Ｏ）データを他の制御装置との間で送受する技術に関する。
【背景技術】
【０００２】
ＦＡ（ファクトリーオートメーション）で用いられるプログラマブルコントローラは、入力機器（スイッチやセンサなど）のＯＮ／ＯＦＦ情報に基づき、ラダー言語などで書かれた制御プログラム（ユーザプログラム）に沿って論理演算を行い、その演算結果に応じて、制御対象である出力機器（リレーやバルブ、アクチュエータなど）にＯＮ／ＯＦＦ情報を出力することにより、出力機器を制御する。
【０００３】
例えば、下記の特許文献１に、ＯＮ／ＯＦＦ情報の通信を行う制御装置の一例が開示されている。特許文献１の制御装置は、制御対象との通信を高速に実行するために、制御系と待機系の両方にプログラムを実行する機能を持たせている。
【０００４】
特許文献１の制御装置は、制御対象とのデータ送受（入出力リフレッシュ；以下「Ｉ／Ｏリフレッシュ」ともいう）を行うＩ／Ｏインターフェースと、制御プログラムを実行する制御プログラム実行回路とを有している。Ｉ／Ｏインターフェースは、制御対象及びコモンメモリとのデータ送受を行い、制御プログラム実行回路は、コモンメモリに格納されたデータに基づき、制御プログラムを沿った演算を行い、その演算結果をコモンメモリに格納する。Ｉ／Ｏリフレッシュと制御プログラム演算とが同時に実行されることで、制御の高速化が図られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第４００８９１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
キャッシュを搭載するコントローラは、Ｉ／Ｏリフレッシュを行うときに、入力データに対応するキャッシュを無効化する。そのため、Ｉ／Ｏリフレッシュと制御プログラムの演算とが並列実行されるコントローラでは、制御プログラム演算において入力データをリード（読み出し）する命令を実行するときにキャッシュミスが発生して、制御プログラム実行時間が長くなる問題が生じる。
【０００７】
本発明は以上のような課題を解決するためになされたものであり、Ｉ／Ｏリフレッシュ時のキャッシュ無効化による影響の少ないプログラマブルコントローラを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の第１の局面に係るプログラマブルコントローラは、外部とのデータ送受を行う外部インターフェースと、前記外部インターフェースが外部から取得した入力データに基づき、制御プログラムに沿って演算実行を行い、前記演算実行の結果である出力データを前記外部インターフェースを介して外部へ出力するＣＰＵと、前記入力データ、前記出力データおよび前記ＣＰＵが前記演算実行に使用するデータを格納するデータメモリと、を備えるプログラマブルコントローラであって、前記ＣＰＵは、キャッシュメモリを備え、前記外部インターフェースは、前記入力データと、前記データメモリにおける前記入力データの格納先のアドレスのデータとを比較して、両者が異なる場合にのみ、前記入力データを前記データメモリに格納してデータを更新するとともに更新されたデータに対応する前記キャッシュメモリのデータを無効化する。
【０００９】
本発明の第２の局面に係るプログラマブルコントローラは、外部とのデータ送受を行う外部インターフェースと、前記外部インターフェースが外部から取得した入力データに基づき、制御プログラムに沿って演算実行を行い、前記演算実行の結果である出力データを前記外部インターフェースを介して外部へ出力するＣＰＵと、前記入力データ、前記出力データおよび前記ＣＰＵが前記演算実行に使用するデータを格納するデータメモリと、を備えるプログラマブルコントローラであって、前記ＣＰＵは、キャッシュメモリを備え、前記演算実行の前または前記演算実行中の待ち処理期間に、前記データメモリ内のデータの一部を前記キャッシュメモリへ転送するプリロード処理を行う。
【発明の効果】
【００１０】
本発明に係るプログラマブルコントローラによれば、データメモリの更新に伴うキャッシュメモリのデータの無効化によって、ＣＰＵによる演算実行が受ける影響を小さくすることができる。それにより、演算実行の時間を短縮できるため、制御周期の短い制御を実行することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】実施の形態１に係るプログラマブルコントローラの構成を示すブロック図である。
【図２】実施の形態１に係るプログラマブルコントローラの動作を説明するための図である。
【図３】実施の形態２に係るプログラマブルコントローラの構成を示すブロック図である。
【図４】実施の形態２に係るプログラマブルコントローラの動作を説明するための図である。
【図５】演算実行中の同期待ち期間を説明するための図である。
【図６】実施の形態２に係るプログラマブルコントローラの制御プログラムの一例を示す図である。
【図７】図６の制御プログラムに基づき作成されるプリロード処理プログラムを示す図である。
【図８】実施の形態３に係るプログラマブルコントローラの構成を示すブロック図である。
【図９】実施の形態２に係るプログラマブルコントローラの制御プログラムの一例を示す図である。
【発明を実施するための形態】
【００１２】
＜実施の形態１＞
図１は、実施の形態１に係るプログラマブルコントローラ１の構成を示すブロック図である。プログラマブルコントローラ１は、第１ＣＰＵ１１及び第２ＣＰＵ１２、第１ＣＰＵプログラムメモリ１３、第２ＣＰＵプログラムメモリ１４及び外部インターフェース（外部ＩＦ）１７を備えている。
【００１３】
第１ＣＰＵ１１及び第２ＣＰＵ１２は、共通のキャッシュメモリ１９を有している。第１ＣＰＵ１１のユーザプログラムで規定される命令は、第１ＣＰＵプログラムメモリ１３に格納される。第２ＣＰＵ１２のユーザプログラムで規定される命令は、第２ＣＰＵプログラムメモリ１４に格納される。また、外部インターフェース１７は、データメモリ２０及び比較部２６を有している。
【００１４】
第１ＣＰＵ１１及び第２ＣＰＵ１２、第１ＣＰＵプログラムメモリ１３、第２ＣＰＵプログラムメモリ１４及び外部インターフェース１７の間は、伝送路１５によって接続されている。また、第１ＣＰＵ１１及び第２ＣＰＵ１２と外部インターフェース１７との間は、スヌープバス１８によっても接続されている。スヌープバス１８は、第１ＣＰＵ１１及び第２ＣＰＵ１２のキャッシュメモリ１９と外部インターフェース１７のデータメモリ２０とのキャッシュコヒーレンシを保つためのスヌープ処理を行うための専用バスである。また、外部インターフェース１７は、伝送路２４を介して外部のＩ／Ｏユニット２５に接続される。
【００１５】
第１ＣＰＵ１１及び第２ＣＰＵ１２は、外部インターフェース１７のデータメモリ２０内のデータにアクセスしながら、それぞれのユーザプログラムで規定される命令に従って演算実行（命令実行）し、その演算実行の結果（演算結果）をデータメモリ２０に書き込む。つまり、第１ＣＰＵ１１及び第２ＣＰＵ１２は、演算実行に伴って、データメモリ２０に対するデータ読み出し及び書き込みを行う。また、第１ＣＰＵ１１及び第２ＣＰＵ１２は、データメモリ２０にアクセスする度にキャッシュメモリ１９にもデータを書込む。それにより、次に同じデータが必要となったときにキャッシュヒットとなり、演算実行の高速化を図ることができる。
【００１６】
外部インターフェース１７は、外部のＩ／Ｏユニット２５とのデータ送受（Ｉ／Ｏリフレッシュ）の処理、すなわち、Ｉ／Ｏユニット２５から入力データをリードする処理（入力リフレッシュ）、ならびに、第１ＣＰＵ１１及び第２ＣＰＵ１２による演算結果のデータをＩ／Ｏユニット２５へ出力する処理（出力リフレッシュ）を行う。外部インターフェース１７のデータメモリ２０には、外部インターフェース１７が入出力したデータが格納される。なお、外部インターフェース１７はＤＭＡ（ダイレクトメモリアクセス）機能を有しており、Ｉ／Ｏユニット２５の間のデータ送受はＤＭＡ機能を用いて行うことが可能である。
【００１７】
外部インターフェース１７は、データメモリ２０のデータの書き換え（更新）を行うとき、第１ＣＰＵ１１及び第２ＣＰＵ１２のキャッシュメモリ１９とのキャッシュコヒーレンシを保つために、スヌープバス１８を用いて、書き換えられたデータに対応するキャッシュ（キャッシュメモリ１９内のデータ）を無効化する機能を有している。また、外部インターフェース１７が有する比較部２６は、データメモリ２０内のデータと、Ｉ／Ｏユニット２５から取得したデータとを比較する機能を有している。
【００１８】
図２は、実施の形態１に係るプログラマブルコントローラ１の動作を説明するための図である。
【００１９】
まず、外部インターフェース１７は、Ｉ／Ｏユニット２５から入力リフレッシュ（ＩＮ）を実行する。すなわち、Ｉ／Ｏユニット２５から入力データを取得し、データメモリ２０に格納する処理を行う。
【００２０】
ただし、本実施の形態では、Ｉ／Ｏユニット２５からの入力データをデータメモリ２０に格納する前に、比較部２６が、Ｉ／Ｏユニット２５から取得した入力データと、データメモリ２０における当該入力データの格納先のアドレスのデータとを比較する。両者が異なる場合、外部インターフェース１７は、当該入力データをデータメモリ２０に格納する処理を通常どおり行う。両者が一致した場合、外部インターフェース１７は、当該入力データをデータメモリ２０に格納する処理は行わない。
【００２１】
外部インターフェース１７は、データメモリ２０に入力データを格納する処理を行った場合、当該入力データをデータメモリ２０に格納したアドレスを、スヌープバス１８を通してキャッシュメモリ１９へ送信し、それに一致するキャッシュメモリ１９のアドレスのデータを無効化する。このキャッシュの無効化処理は、外部インターフェース１７がデータメモリ２０に入力データを格納する処理をしなかった場合は行われない。
【００２２】
プログラマブルコントローラ１における演算実行時間は短いため、Ｉ／Ｏユニット２５からリードした入力データにおいて、演算実行毎に更新されるデータは少ない確率が高い。上記のようにＩ／Ｏユニット２５から取得した入力データとデータメモリ２０内のデータが同じ場合は、キャッシュの無効化処理を行わないようにすることで、キャッシュメモリ１９に有効なデータが多く残ることになり、この後の演算実行の処理におけるキャッシュヒットの確率が上がるため、演算実行の処理時間を短くできる。
【００２３】
その後、第１ＣＰＵ１１及び第２ＣＰＵ１２は、第１ＣＰＵプログラムメモリ１３及び第２ＣＰＵプログラムメモリ１４に格納されているラダー言語などで書かれた制御プログラム（ユーザプログラム）に従って演算処理を行う（演算実行）。第１ＣＰＵ１１及び第２ＣＰＵ１２は、この演算処理にデータメモリ２０内のデータを使用する。
【００２４】
第１ＣＰＵ１１及び第２ＣＰＵ１２は、演算実行の終了後、その演算結果に基づいて、Ｉ／Ｏユニット２５を通して出力機器（リレーやバルブ、アクチュエータなど）にＯＮ／ＯＦＦ情報を出力する出力リフレッシュ処理の実行を、外部インターフェース１７に指示する。指示を受けた外部インターフェース１７は、出力リフレッシュ（ＯＵＴ）を実行する。
【００２５】
なお、図２においては、Ｉ／Ｏリフレッシュが行われる間、第１ＣＰＵ１１及び第２ＣＰＵ１２は何も行わない待ち処理の状態としたが、その期間を、例えば、Ｅｔｈｅｒｎｅｔ（登録商標）やＵＳＢ等を介してプログラマブルコントローラ１に接続したＰＣがデータメモリ２０内のデータをモニタする処理やデバッグ処理といったサービス処理にあててもよい。
【００２６】
以上のように、実施の形態１に係るプログラマブルコントローラ１によれば、Ｉ／Ｏリフレッシュ時に無効化されるキャッシュを減らすことができ、制御プログラムの実行時間が短縮されるため、制御周期の短い制御を実行することが可能となる。
【００２７】
＜実施の形態２＞
実施の形態２では、外部インターフェース１７に設けた２つのデータメモリ（第１及び第２データメモリ）を用いることによって、全体の演算実行時間を短く技術を提案する。実施の形態２の技術では、実施の形態１に比べて多くのメモリを必要とするが、実施の形態１よりも高速に演算実行を行うことが可能となる。
【００２８】
図３は、実施の形態２に係るプログラマブルコントローラ１の構成を示すブロック図である。この図において、図１に示したものと同様の機能を有する要素には同一符号を付してある。実施の形態２のプログラマブルコントローラ１においては、外部インターフェース１７内に、第１ＣＰＵ１１及び第２ＣＰＵ１２が演算で用いるデータを格納するデータメモリとして、第１データメモリ２１及び第２データメモリ２２の２つが設けられている。
【００２９】
第１ＣＰＵ１１及び第２ＣＰＵ１２は、外部インターフェース１７の第１及び第２データメモリ２１，２２内のデータにアクセスしながら、それぞれのユーザプログラムで規定される命令に従って演算実行（命令実行）し、その演算実行の結果（演算結果）を第１及び第２データメモリ２１，２２に書き込む。つまり、第１ＣＰＵ１１及び第２ＣＰＵ１２は、演算実行に伴って、第１及び第２データメモリ２１，２２に対するデータ読み出し及び書き込みを行う。また、第１ＣＰＵ１１及び第２ＣＰＵ１２は、第１及び第２データメモリ２１，２２にアクセスする度にキャッシュメモリ１９にもデータを書込む。それにより、次に同じデータが必要となったときにキャッシュヒットとなり、演算実行の高速化を図ることができる。
【００３０】
外部インターフェース１７は、外部のＩ／Ｏユニット２５とのデータ送受（Ｉ／Ｏリフレッシュ）の処理、すなわち、Ｉ／Ｏユニット２５から入力データをリードする処理（入力リフレッシュ）、ならびに、第１ＣＰＵ１１及び第２ＣＰＵ１２による演算結果のデータをＩ／Ｏユニット２５へ出力する処理（出力リフレッシュ）を行う。外部インターフェース１７の第１及び第２データメモリ２１，２２には、外部インターフェース１７が入出力したデータが格納される。
【００３１】
外部インターフェース１７は、第１及び第２データメモリ２１，２２のデータの書き換え（更新）を行うとき、第１ＣＰＵ１１及び第２ＣＰＵ１２のキャッシュメモリ１９とのキャッシュコヒーレンシを保つために、スヌープバス１８を用いて、書き換えられたデータに対応するキャッシュ（キャッシュメモリ１９内のデータ）を無効化する機能を有している。
【００３２】
図４は、実施の形態２に係るプログラマブルコントローラ１の動作を説明するための図である。
【００３３】
まず、外部インターフェース１７は、Ｉ／Ｏユニット２５から入力リフレッシュ（ＩＮ）を実行する。ここでは、外部インターフェース１７は、Ｉ／Ｏユニット２５から入力データを取得し、第１データメモリ２１に格納する。
【００３４】
入力データが第１データメモリ２１に格納されたことを受けて、第１ＣＰＵ１１及び第２ＣＰＵ１２は、第１データメモリ２１からプリロード（先読み）を行い、入力データをキャッシュメモリ１９に転送する。その後、第１ＣＰＵ１１及び第２ＣＰＵ１２は、演算実行の処理を行う。この演算実行の処理には、第１データメモリ２１が使用される。
【００３５】
なお、図４には、演算実行の前に全ての入力データをプリロード処理を行うシーケンスを示しているが、演算実行の期間に行われる実際の演算処理では、第１ＣＰＵ１１と第２ＣＰＵ１２とで互いに同期処理を行う必要があり、図５に示すように同期待ちの期間（待ち処理期間）が発生する。プリロード処理は、この同期待ちの期間に行われてもよく、その方が制御プログラムの処理にかかる全体の時間を短縮できることが多い。
【００３６】
図６，図７を用いてプリロード処理について説明する。図６は、ユーザがラダー言語などで書いた制御プログラム（ユーザプログラム）の一例である。また、図７には図６の制御プログラムからコンパイラが自動的に生成するプリロード処理プログラムを示している。
【００３７】
図６の制御プログラムにおいて、Ｘデバイスが、入力リフレッシュによって書き換わるデバイス（入力データ）であるとする。Ｘデバイスは、演算実行開始時の入力リフレッシュにより、データが書き換えられる。その際、キャッシュコヒーレンシを保つため、外部インターフェース１７は、スヌープバス１８を介して、書き換えられたデータのアドレスをキャッシュメモリ１９へ送信し、それと一致するキャッシュメモリ１９のアドレスのデータを無効化する。
【００３８】
ここで、コンパイラが図６の制御プログラムから図７に示すプリロード処理プログラムを作成する方法について述べる。まず、コンパイラは、制御プログラムから「ＦＯＲ〜ＮＥＸＴ」構文を表す命令と、入力データＸをリードする命令を抽出する。次に、インデックス修飾デバイスＺで修飾された入力データＸをリードする命令を抽出する。その後、入力データＸを使用したＺ値を変更する命令を抽出する。
【００３９】
このように各命令が抽出されると、コンパイラは、図７に示すように、使用しているインデックス修飾デバイスＺを別のメモリに退避する命令を、プリロード処理プログラムの先頭に配置する。またプリロード処理プログラムの作成においては、抽出した入力データＸをリードする命令は、入力データＸをプリロード処理する命令に変えて配置される。
【００４０】
また、ＦＯＲ〜ＮＥＸＴ構文を表す命令に関して、制御プログラムのＦＯＲ〜ＮＥＸＴ間に、インデックス修飾デバイスＺで修飾された入力データＸをリードする命令がある場合は、ＦＯＲ〜ＮＥＸＴ命令と、インデックス修飾デバイスＺで修飾された入力データＸをプリロードする命令と、入力データＸを使用したＺ値を変更する命令とが、制御プログラムと同じ順番に並べられてプリロード処理プログラムに配置される。
【００４１】
コンパイラは、抽出した各命令を配置し終えると、プリロード処理プログラムの最後に、退避したインデックス修飾デバイスＺを復帰させる命令を配置する。以上により、プリロード処理プログラムが作成される。
【００４２】
図４に戻り、プリロード処理の後、第１ＣＰＵ１１及び第２ＣＰＵ１２は制御プログラムに沿って演算実行を行う。第１ＣＰＵ１１及び第２ＣＰＵ１２が演算実行している間、外部インターフェース１７は入力リフレッシュ（ＩＮ）を行い、入力データを第２データメモリ２２に格納する。このとき、第１データメモリ２１は、第１ＣＰＵ１１及び第２ＣＰＵ１２の演算実行に使用されているため、第１データメモリ２１の書き換えは行わない。このように、外部インターフェース１７による入力リフレッシュは、第１ＣＰＵ１１および第２ＣＰＵ１２による演算実行に並列して実行される。
【００４３】
演算実行の終了後、第１ＣＰＵ１１及び第２ＣＰＵ１２は、入力リフレッシュが完了していることを確認して、プリロード処理と、外部インターフェース１７に対する出力リフレッシュ処理の指示とを実行する。今回のプリロード処理は、第２データメモリ２２に対して行う。
【００４４】
プリロード処理の実行後、第１ＣＰＵ１１及び第２ＣＰＵ１２は、２度目の演算実行を行う。また、それに並列して、外部インターフェース１７が、出力リフレッシュ（ＯＵＴ）を実行する。このように、外部インターフェース１７による出力リフレッシュも、第１ＣＰＵ１１および第２ＣＰＵ１２による演算実行に並列して実行される。
【００４５】
２度目の演算実行では、基本的には第１データメモリ２１が使用されるが、入力データのリードと、次の出力リフレッシュにおける出力データの格納は、第２データメモリ２２を使用して行われる。次の出力リフレッシュでの出力データを第２データメモリ２２に格納する理由は、演算実行の処理で外部インターフェース１７が第１データメモリ２１を使用している可能性があるためである。
【００４６】
２度目の演算実行の間、外部インターフェース１７は入力リフレッシュを行い、今度は入力データを第１データメモリ２１に格納する。このとき、第２データメモリ２２は、第１ＣＰＵ１１及び第２ＣＰＵ１２の演算実行に使用されているため、第２データメモリ２２の書き変えは行わない。
【００４７】
２度目の演算実行の終了後、第１ＣＰＵ１１及び第２ＣＰＵ１２は、出力リフレッシュ及び入力リフレッシュが完了していることを確認して、外部インターフェース１７に対して、出力リフレッシュの実行を指示する。その後、第１ＣＰＵ１１及び第２ＣＰＵ１２は、プリロード処理を実行する。今度のプリロード処理は、第１データメモリ２１に対して行う。このように、Ｉ／Ｏリフレッシュの処理では、演算実行の度に、第１データメモリ２１と第２データメモリ２２とを切り替えて使用される。
【００４８】
以上のように、実施の形態２に係るプログラマブルコントローラ１によれば、第１及び第２データメモリ２１，２２に対するプリロード処理によって、入力データをキャッシュメモリ１９に転送するため、演算実行中のキャッシュミスが低減される。さらに、Ｉ／Ｏリフレッシュと演算実行の並列処理が可能となることから、制御プログラムの実行時間を短くすることができ、制御周期の短い制御を実行することが可能となる。
【００４９】
＜実施の形態３＞
実施の形態２において、制御プログラムが入力データを多用するものである場合、生成されるプリロード処理プログラムの実行時間が長くなり、かえって制御周期が長くなることが考えられる。そこで、実施の形態３では、実行時間が制御プログラムに依存しないプリロード処理プログラムを作成する技術を提案する。
【００５０】
図８は、実施の形態３に係るプログラマブルコントローラ１の構成を示すブロック図である。実施の形態２（図３）の構成とは、外部インターフェース１７に比較部２６が設けられている点で異なっている。
【００５１】
比較部２６は、入力リフレッシュの実行時に、実施の形態１と同様に、Ｉ／Ｏユニット２５から取得した入力データと、第１及び第２データメモリ２１，２２における当該入力データの格納先のアドレスのデータとを比較する。両者が異なる場合、外部インターフェース１７は、当該入力データを第１及び第２データメモリ２１，２２に格納する処理を行う。両者が一致した場合、外部インターフェース１７は、当該入力データを第１及び第２データメモリ２１，２２に格納する処理は行わない。
【００５２】
外部インターフェース１７は、第１及び第２データメモリ２１，２２に入力データを格納する処理を行った場合、当該入力データを第１及び第２データメモリ２１，２２に格納したアドレスを、スヌープバス１８を通してキャッシュメモリ１９へ送信し、それに一致するキャッシュメモリ１９のアドレスのデータを無効化する。実施の形態３では、さらにそのとき、外部インターフェース１７がキャッシュを無効化した回数（キャッシュ無効化回数）と、無効化したデータのアドレス（キャッシュ無効化アドレス）を第１及び第２データメモリ２１，２２に格納する。
【００５３】
実施の形態３に係るプログラマブルコントローラ１の動作は、基本的に実施の形態２（図４）と同様であるが、プリロード処理プログラムが異なる。
【００５４】
実施の形態３のプリロード処理プログラムは、図９に示すように、入力リフレッシュの実行時に外部インターフェース１７が第１及び第２データメモリ２１，２２に格納したキャッシュ無効化アドレスを読み出すプログラムである。このプリロード処理プログラムでは、まず、キャッシュ無効化回数（図９の例では４回）を読み出す。次に、キャッシュ無効化回数分だけキャッシュ無効化アドレスを読み出し、そのキャッシュ無効化アドレスに対応するデータのプリロード処理を実行する。つまり、第１データメモリ２１または第１データメモリ２１から当該データをプリロードして、キャッシュメモリ１９に転送する。
【００５５】
実施の形態３のプリロード処理プログラムの実行時間は、制御プログラム（ユーザープログラム）に依存せず、Ｉ／Ｏユニット２５の更新頻度、つまりＩ／Ｏユニット２５の更新によるキャッシュ無効化の頻度に依存する。
【００５６】
実施の形態３では、実施の形態２と同様の効果が得られる。さらに、実施の形態３のプリロード処理の実行時間は、制御周期ごとのＩ／Ｏユニット２５の更新頻度に依存し、制御プログラムに依存しない。また、プログラマブルコントローラ１における演算実行時間は短いため、Ｉ／Ｏユニット２５からリードした入力データにおいて、演算実行毎に更新されるデータは少ない確率が高いので、プリロード処理も短くなる。
【００５７】
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【符号の説明】
【００５８】
１  プログラマブルコントローラ、１１  第１ＣＰＵ、１２  第２ＣＰＵ、１３  第１ＣＰＵプログラムメモリ、１４  第２ＣＰＵプログラムメモリ、１５  伝送路、１７  外部インターフェース、１８  スヌープバス、１９  キャッシュメモリ、２０  データメモリ、２１  第１データメモリ、２２  第２データメモリ、２４  伝送路、２５  Ｉ／Ｏユニット、２６  比較部。
【図１】
2015141648.tif 000003
【図２】
2015141648.tif 000004
【図３】
2015141648.tif 000005
【図４】
2015141648.tif 000006
【図５】
2015141648.tif 000007
【図６】
2015141648.tif 000008
【図７】
2015141648.tif 000009
【図８】
2015141648.tif 000010
【図９】
2015141648.tif 000011