(57)【要約】【課題】制御プログラムを高速に実行可能な制御装置を提供する。【解決手段】本発明の一態様に係る制御装置は、連続して実行される処理命令に対して連続するアドレスが付された制御プログラムを、連続して実行される処理命令が並列に読出し可能なように分散して記憶する複数の制御プログラムメモリ１９１〜１９ｎと、複数の制御プログラムメモリ１９１〜１９ｎに対してアドレスを制御プログラム順に出力し、実行対象の処理命令以降の処理命令を先回りで読出すプログラムメモリ制御手段３１と、プログラムメモリ制御手段３１によって読出された処理命令を実行する演算手段３０とを具備する。【選択図】      図２
2005332370.tif 000002
【特許請求の範囲】
【請求項１】
連続して実行される処理命令に対して連続するアドレスが付された制御プログラムを、前記連続して実行される処理命令が並列に読出し可能なように分散して記憶する複数の制御プログラムメモリと、
前記複数の制御プログラムメモリに対して前記アドレスを制御プログラム順に出力し、実行対象の処理命令以降の処理命令を先回りで読出すプログラムメモリ制御手段と、
前記プログラムメモリ制御手段によって読出された処理命令を実行する演算手段と
を具備する制御装置。
【請求項２】
請求項１記載の制御装置において、
前記制御プログラムメモリから読出された内容を保存し、出力命令に応じて前記内容を出力する手段をさらに具備したことを特徴とする制御装置。
【請求項３】
請求項１又は請求項２記載の制御装置において、
前記処理命令は、複数の命令と、この複数の命令のそれぞれに対応しておりこの複数の命令のそれぞれについて実行するか否か判断する複数の判断命令とを含み、
前記制御プログラムは、処理に分岐と合流がある場合、分岐から合流までの一方の経路に含まれる判断命令及び命令が連続し、その後に、分岐から合流までの他方の経路に含まれる判断命令及び命令が連続する状態で、前記複数の判断命令及び前記複数の命令の実行順序が定められており、
前記制御プログラムにおける実行順序の隣り合う処理命令は、それぞれが異なる制御プログラムメモリに記憶される
ことを特徴とする制御装置。
【請求項４】
請求項３記載の制御装置において、
前記連続して実行される処理命令によってアクセスされる複数の制御データを記憶する複数の制御データメモリをさらに具備し、
実行順序の隣り合う処理命令によってアクセスされる制御データは、それぞれが異なる制御データメモリに記憶される
ことを特徴とする制御装置。
【請求項５】
請求項１乃至請求項３のいずれか１項に記載の制御装置において、
前記制御プログラムの一部で使用される制御データを記憶するキャッシュメモリと、
前記制御プログラムの一部で使用される制御データを前記キャッシュメモリの容量以内で記憶する制御データメモリと、
前記演算手段によって制御データ読出しが発生した場合に、前記キャッシュメモリに読出し対象の制御データが記憶されているか否か判断し、前記キャッシュメモリに前記読出し対象の制御データが記憶されている場合に前記キャッシュメモリから前記読出し対象の制御データを読出すキャッシュメモリ制御手段と
をさらに具備することを特徴とする制御装置。
【請求項６】
請求項４又は請求項５記載の制御装置において、
前記制御データメモリから読出された内容を保存し、出力命令に応じて前記内容を出力する手段をさらに具備したことを特徴とする制御装置。
【請求項７】
請求項１乃至請求項６のいずれか１項に記載の制御装置において、
前記複数の制御プログラムメモリは、前記制御プログラムを、プログラム命令語長が複数語長に拡張されたような状態で、並列に読出し又は書込み可能なように分散して記憶し、
前記制御プログラムの一部で使用される制御データについて前記制御データメモリに対する読出し又は書込み処理を実行するデータメモリ制御手段をさらに具備する
ことを特徴とする制御装置。
【請求項８】
請求項１乃至請求項７のいずれか１項に記載の制御装置において、
前記制御プログラムは、実行中に同期させたい部分に同期命令を含み、
前記制御プログラムを実行する他の装置が前記同期命令を実行したか否かを検出する手段をさらに具備し、
前記演算手段は、前記他の装置で前記同期命令が実行されている場合に、前記制御プログラムの処理を進め、他の制御装置と同期して前記制御プログラムを実行する
ことを特徴とする制御装置。
【請求項９】
請求項１乃至請求項８のいずれか１項に記載の制御装置において、
前記演算手段と通信インタフェースとを含む回路を具備することを特徴とする制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御対象のプロセス値を所定の値に制御する制御装置に関する。
【背景技術】
【０００２】
制御装置は、例えば、製紙プラントや自動車産業における組み立て作業などを含むＦＡ分野、化学プラントを含むＰＡ分野、上下水道システムなどを含む公共システムなど、様々な産業システムに対して用いられる。
【０００３】
図１７は、従来の制御装置の一例を示すブロック図である。
【０００４】
入出力モジュール１は、制御装置２から入力したデータを制御対象３に出力する。また、入出力モジュール１は、制御対象３から入力した制御データ１ａを制御装置２に出力する。
【０００５】
制御装置２の制御プログラム実行回路４としては、例えばマイクロプロセッサ、中央処理装置などが用いられる。
【０００６】
制御プログラム実行回路４は、制御プログラムメモリ５から制御プログラム５ａに記載された処理命令を順次読出し、制御データ１ａを入出力モジュール１及びＩ／Ｏインタフェース６経由で読出し、制御データメモリ７に格納されている制御データ７ａを読出す。
【０００７】
制御プログラム実行回路４は、制御プログラム５ａの処理命令にしたがって、制御データ１ａ及び制御データ７ａに対する処理を実行する。
【０００８】
そして、制御プログラム実行回路４は、制御プログラム５ａにしたがって、処理結果を示すデータをＩ／Ｏインタフェース６経由で入出力モジュール１に出力し、あるいは処理結果を示すデータを制御データメモリ７に書込む。
【０００９】
これにより、制御装置２の制御処理が実行される。制御装置２は、モニタ装置８から通信インタフェース９経由で各種命令を入力する。
【００１０】
また、制御装置２には、制御プログラム実行回路４、制御プログラムメモリ５、Ｉ／Ｏインタフェース６、制御データメモリ７の他にも、プログラム実行回路１０、プログラムメモリ１１、データメモリ１２を具備するとしてもよい。制御装置２内の各部分間では、バス１３経由でプログラム及びデータが入出力される。
【００１１】
制御装置２の一例としては、プログラマブルコントローラなどがある。
【００１２】
近年では、ある装置に複数の制御装置を実装して制御装置を多重化する技術や、ある装置に複数の制御装置を実装して処理を分担させるなどにより、制御処理を高速化する技術が提案されている（例えば、特許文献１参照）。
【特許文献１】特願平１１−１９６４５７号
【発明の開示】
【発明が解決しようとする課題】
【００１３】
従来の制御装置２では、制御プログラム実行回路４を高速化しても、制御プログラムメモリ５及び制御データメモリ７から制御プログラム５ａ及び制御データ７ａを読出す動作に時間がかかり、この読出し速度が制限となって制御処理の高速化が困難である。
【００１４】
また、複数の制御装置が持つ発振器の周波数が全く同一ではない場合には、多重化した複数の制御装置で同一の制御プログラムを並行に実行させ、複数の制御装置間で同期を取ることが困難である。また、制御開始のタイミングを合わせることも困難である。
【００１５】
本発明は、以上のような実情に鑑みてなされたもので、制御プログラムを高速に実行可能な制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明を実現するにあたって講じた具体的手段について以下に説明する。
【００１７】
本発明の実施例に係る制御装置において、複数の制御プログラムメモリは、連続して実行される処理命令に対して連続するアドレスが付された制御プログラムを、連続して実行される処理命令が並列に読出し可能なように分散して記憶する。プログラムメモリ制御手段は、複数の制御プログラムメモリに対してアドレスを制御プログラム順に出力し、実行対象の処理命令以降の処理命令を先回りで読出す。演算手段は、プログラムメモリ制御手段によって読出された処理命令を実行する。
【発明の効果】
【００１８】
本発明においては、メモリからデータ又はプログラムを高速に読出すことができ、これにより、制御プログラムを高速に実行できる。
【発明を実施するための最良の形態】
【００１９】
以下、図面を参照しながら本発明の実施の形態について説明する。なお、上記図１７及び以下の各図において同様の部分については同様の符号を付して説明を省略する。
【００２０】
（第１の実施の形態）
本実施の形態では、制御プログラムメモリから制御プログラムを高速に読出すとともに、制御データメモリから制御データを高速に読出すことにより、制御プログラムを高速に実行可能な制御装置について説明する。
【００２１】
図１は、本実施の形態に係る制御装置の一例を示すブロック図である。
【００２２】
制御装置１４は、プログラム実行回路１５、プログラムメモリ１６、データメモリ１７を具備する。
【００２３】
また、制御装置１４は、制御プログラム実行回路１８、他のメモリ単位の動作とは無関係に、異なるアドレスバス及び異なる命令でアクセス可能な複数の単位の制御プログラムメモリ１９１〜１９ｎ、他のメモリ単位の動作とは無関係に、異なるアドレスバス及び異なる命令でアクセス可能な複数の単位の制御データメモリ２０１〜２０ｍを具備する。
【００２４】
制御装置１４は、各制御プログラムメモリ１９１〜１９ｎに対応する複数のバッファ２１１〜２１ｎ、各制御データメモリ２０１〜２０ｍに対応する複数のバッファ２２１〜２２ｍを具備する。制御装置１４内の各部分間では、システムバス２６経由でプログラム及びデータが入出力される。
【００２５】
プログラムメモリ１６は、高級言語で記述されている制御ソースプログラム２３とコンパイラ２４とを記憶する。
【００２６】
プログラム実行回路１５は、プログラムメモリ１６をアクセスし、コンパイラ２４を用いて制御ソースプログラム２３に対するコンパイルを実行し、コンパイルの結果得られる制御プログラムを複数の制御プログラムメモリ１９１〜１９ｎに記録するとともに、コンパイルの結果得られる制御プログラムで使用される制御データの割り付けを複数の制御データメモリ２０１〜２０ｍに対して実行する。
【００２７】
図２は、制御プログラム実行回路１８の構成の一例を示すブロック図である。
【００２８】
制御プログラム実行回路１８は、複数の制御プログラムメモリ１９１〜１９ｎに対して、それぞれバッファ２１１〜２１ｎ経由でアクセスする。
【００２９】
また、制御プログラム実行回路１８は、複数の制御データメモリ２０１〜２０ｍに対して、それぞれバッファ２２１〜２２ｍ経由でアクセスする。
【００３０】
制御プログラム実行回路１８は、Ｉ／Ｏインタフェース２７、通信インタフェース２８、システムバスインタフェース２９、演算回路３０、制御プログラムメモリ制御回路３１、バッファ３２、キャッシュメモリ制御回路３３、キャッシュメモリ３４、制御データメモリ制御回路３５、バッファ３６を具備する。
【００３１】
Ｉ／Ｏインタフェース２７及び通信インタフェース２８は、上記図１７のＩ／Ｏインタフェース６及び通信インタフェース９と同様であるが、制御プログラム実行回路１８に内蔵されているため、高速にデータの入出力が可能である。
【００３２】
システムバスインタフェース２９は、制御装置１４内の他の部分からのデータをシステムバス２６経由で入力し、演算回路３０に出力する。また、システムバスインタフェース２９は、演算回路３０からのデータを入力し、システムバス２６経由で制御装置１４内の他の部分に出力する。
【００３３】
演算回路３０は、制御プログラムメモリ制御回路３１を用いて、各制御プログラムメモリ１９１〜１９ｎに記憶されているプログラムコードを、それぞれバッファ２１１〜２１ｎ、バッファ３２経由で読出す。
【００３４】
また、演算回路３０は、キャッシュメモリ制御回路３３によってキャッシュメモリ３４に読出し対象の制御データが記憶されていると判断された場合、キャッシュメモリ３４から制御データを読出す。
【００３５】
また、演算回路３０は、キャッシュメモリ制御回路３３によってキャッシュメモリ３４に読出し対象の制御データが記憶されていないと判断された場合、制御データメモリ制御回路３５を用いて、各制御データメモリ２０１〜２０ｍに記憶されている制御データをそれぞれバッファ２２１〜２２ｍ、バッファ３６経由で読出す。
【００３６】
また、演算回路３０は、制御データメモリ制御回路３５を用いて、バッファ３６、バッファ２２１〜２２ｍ経由で各制御データメモリ２０１〜２０ｍに制御データを書込む。
【００３７】
そして、演算回路３０は、読出したプログラムコード及び制御データにしたがって、処理を実行する。
【００３８】
本実施の形態では、制御プログラムメモリ１９１〜１９ｎが並列に備えられており、コンパイラ２４により連続するプログラムコードに連続するアドレスが割り付けられており、連続するプログラムコードがそれぞれ異なる制御プログラムメモリに記録されている。
【００３９】
このため、演算回路３０は、高速にプログラムコードを読出すことが可能であり、アドレスの順序にしたがって高速にプログラムコードを実行することが可能である。
【００４０】
また、本実施の形態では、コンパイラ２４により、あるプログラム構成単位（ここでいうプログラム構成単位とは、IEC 61131-3でいうProgram Organization Unit(POU)であるとする）で使用される制御データが制御データメモリ２０１〜２０ｍのいずれかの所定範囲の領域に記憶される。そして、この領域内の制御データがまとめてキャッシュメモリ３４に記憶される。
【００４１】
このため、演算回路３０は、高確率でキャッシュメモリ３４から制御データを読出すことができ、キャッシュメモリ３４のヒット率を向上させることができ、高速に制御データを読出すことが可能である。
【００４２】
また、本実施の形態では、制御データメモリ２０１〜２０ｍが並列に備えられており、コンパイラ２４により制御データが他の制御データへの読出し又は書込み状態に関係なく独立に読出し及び書込み可能とされている。
【００４３】
このため、演算回路３０は、ある制御データの読出し又は書込み状態に関係なく、他の制御データの読出し又は書込みを実行可能であり、制御データに対するアクセスを高速化できる。
【００４４】
以下に、本実施の形態に係る制御装置１４による制御プログラム及び制御データの読出し動作について説明する。
【００４５】
本実施の形態において、複数の制御プログラムメモリ１９１〜１９ｎがバッファ２１１〜２１ｎを介して制御プログラム実行回路１８に接続されている。バッファ２１１〜２１ｎは、後述するように、制御プログラムメモリ制御回路３１から出力されるアドレスをラッチし、制御プログラムメモリ制御回路３１から出力されたコマンドにしたがって、制御プログラムメモリに読出しコマンドを出力可能であり、任意の制御プログラムメモリを、他の制御プログラムメモリの動作とは無関係にアクセス可能としている。
【００４６】
各制御プログラムメモリ１９１〜１９ｎは，制御プログラムメモリ制御回路３１により、順次起動される。
【００４７】
図３は、コンパイラ２４による制御ソースプログラム２３のコンパイル結果の一例を示す図である。なお、この図３では、制御ソースプログラム２３がＳＦＣ（Sequential Function Chart）プログラムの場合を例示している。
【００４８】
なお、図３では、制御装置１４が４つの制御プログラムメモリ１９１〜１９４を具備する場合（４バンクメモリの場合）を例として説明を行う。
【００４９】
コンパイラ２４は、制御ソースプログラム２３をコンパイルし、連続して実行される処理命令（プログラムコード）が連続で読出し可能となる制御プログラム２５を作成する。
【００５０】
そして、コンパイラ２４は、連続して実行されるプログラムコードが異なるメモリ単位から連続で読出し可能となるように、制御プログラム２５を複数の制御プログラムメモリ１９１〜１９４に記憶する。
【００５１】
本実施の形態では、制御プログラム２５のあるプログラムコードが制御プログラムメモリ１９１に記録された場合、次に実行されるプログラムコードは、アクセス時間を短縮可能とするために、他の制御プログラムメモリ１９２〜１９４のいずれかに記録される。
【００５２】
なお、コンパイラ２４は、制御ソースプログラム２３に分岐条件がある場合であっても、分岐部分や並列実行部分が一続きになるようにコンパイルし、分岐して不実行となる部分を演算回路３０で不実行とするように制御することによって分岐動作を不要にし、分岐部分での制御プログラムの読出しアドレスが不連続とならないように、複数の制御プログラムメモリ１９１〜１９４に制御プログラム２５を記憶する。
【００５３】
すなわち、コンパイラ２４は、アドレス順にプログラムコードを実行するのみで、制御ソースプログラム２３で記述された処理が実現されるように、コンパイルを行う。
【００５４】
制御ソースプログラム２３は、命令Ｓａ１〜Ｓａ４を具備する。この命令Ｓａ１〜Ｓａ４を具備する制御ソースプログラム２３において、命令Ｓａ１の実行後には、処理が分岐し、命令Ｓａ２又は命令Ｓａ３が実行される。命令Ｓａ２と命令Ｓａ３のうちのいずれか一方の実行後には、処理が合流し、命令Ｓａ４が実行される。
【００５５】
さらに、制御ソースプログラム２３は、各命令Ｓａ２〜Ｓａ４の前段に配置され、「後段の命令Ｓａ２〜Ｓａ４の実行権限の有無を判断し、実行権限を有すると判断された場合に、後段の命令Ｓａ２〜Ｓａ４を、実行権限を有する状態とする」判断命令Ｔａ１〜Ｔａ４を具備する。すなわち、判断命令Ｔａ１〜Ｔａ４は、後段の各命令Ｓａ２〜Ｓａ４について、実行権限判断と実行権限付与とを行う。判断命令Ｔａ１〜Ｔａ４は、この各判断命令Ｔａ１〜Ｔａ４の前段の命令で得られた実行結果を、この各判断命令Ｔａ１〜Ｔａ４の前段の命令と後段の命令との間で中継するか否か判断する役割を持つ場合もある。
【００５６】
先の命令Ｓａ１と後の命令Ｓａ２，Ｓａ３との間に分岐がある場合、分岐部と分岐後の命令Ｓａ２，Ｓａ３との間に、判断命令Ｔａ１，Ｔａ２が配置される。
【００５７】
先の命令Ｓａ２，Ｓａ３と後の命令Ｓａ４との間に合流がある場合、合流前の命令Ｓａ２，Ｓａ３と合流部との間に、判断命令Ｔａ３，Ｔａ４が配置される。
【００５８】
制御ソースプログラム２３は、コンパイラ２４により、命令Ｓａ１→判断命令Ｔａ１→命令Ｓａ２→判断命令Ｔａ３→判断命令Ｔａ２→命令Ｓａ３→判断命令Ｔａ４→命令Ｓａ４という順序の制御プログラム２５に変換される。
【００５９】
この制御プログラム２５では、処理に分岐と合流がある場合に、分岐から合流までの一方の経路に含まれる判断命令及び命令が連続し、その後に、分岐から合流までの他方の経路に含まれる判断命令及び命令が連続する状態で、各判断命令及び命令が並べられる。
【００６０】
制御プログラム２５において、命令Ｓａ１〜Ｓａ４は、コンパイラ２４により、それぞれ命令「STEP」に変換される。より具体的に説明すると、命令Ｓａ１は、命令（命令語：オペランド）「STEP: Sa1」に変換される。命令Ｓａ２は、命令「STEP:Sa2」に変換される。命令Ｓａ３は、命令「STEP:Sa3」に変換される。命令Ｓａ４は、命令「STEP:Sa4」に変換される。
【００６１】
また、制御プログラム２５において、判断命令Ｔａ１〜Ｔａ４は、コンパイラ２４により、それぞれ後段の命令に実行権限があるか否かを判断する命令「CONDITION」、及び後段の命令に実行権限がある場合に実行権限を付与する命令「TRANSITION」に変換される。より具体的に説明すると、判断命令Ｔａ１は、命令（命令語：オペランド）「CONDITION:Ta1」及び「TRANSITION:Sa1,Sa2」に変換される。判断命令Ｔａ３は、命令「CONDITION:Ta3」及び命令「TRANSITION:Sa2,Sa4」に変換される。判断命令Ｔａ２は、命令「CONDITION:Ta2」及び命令「TRANSITION:Sa1,Sa3」に変換される。判断命令Ｔａ４は、命令「CONDITION:Ta4」及び命令「TRANSITION:Sa3,Sa4」に変換される。
【００６２】
命令（命令語：オペランド）には、実行順序にそってアドレス「1」〜「12」が付される。
【００６３】
本実施の形態において、順序が隣り合う命令は、先回りで読出し可能とするために、異なる制御プログラムメモリ１９１〜１９４に記憶される。このように、順序が隣り合う命令が異なる制御プログラムメモリ１９１〜１９４に記憶されることにより、順序が隣り合う命令の読出しを並列的に行うことができ、パイプライン制御の乱れの発生を防止できる。
【００６４】
ここで、本実施の形態における制御プログラム２５の実行状態について詳細に説明する。
【００６５】
図４は、本実施の形態に係る命令の実行状態の例を示す図である。なお、図４では、制御装置１４が４つの制御プログラムメモリ１９１〜１９４を具備する場合（４バンクメモリの場合）を例として説明を行う。
【００６６】
本実施の形態においては、各命令Ｓａ２〜Ｓａ４及び判断命令Ｔａ１〜Ｔａ４は、命令読出し段階、オペランド読出し段階、命令実行段階、書込み段階の４つの段階から構成される場合を例に説明するが、この段階は２以上であればよい。また、本実施の形態においては、分岐後の命令Ｓａ２が実行されず、分岐後の命令Ｓａ３が実行される場合を例に説明するが、逆に分岐後の命令Ｓａ２が実行され分岐後の命令Ｓａ３が実行されない場合も同様である。
【００６７】
本実施の形態では、制御プログラム実行回路１８は、パイプライン制御にしたがって、命令Ｓａ１→判断命令Ｔａ１→命令Ｓａ２→判断命令Ｔａ３→判断命令Ｔａ２→命令Ｓａ３→判断命令Ｔａ４→命令Ｓａ４の順序で制御プログラム２５を制御プログラムメモリ１９１〜１９４から読出す。
【００６８】
コンパイル後の命令単位で説明すると、制御プログラム実行回路１８は、パイプライン制御にしたがって、アドレス番号「1」の命令Ｓａ１の「STEP」→アドレス番号「2」の命令Ｔａ１の「CONDITION」→アドレス番号「3」の命令Ｔａ１の「TRANSITION」→アドレス番号「4」の命令Ｓａ２の「STEP」→アドレス番号「5」の命令Ｔａ３の「CONDITION」→アドレス番号「6」の命令Ｔａ３の「TRANSITION」→アドレス番号「7」の命令Ｔａ２の「CONDITION」→アドレス番号「8」の命令Ｔａ２の「TRANSITION」→アドレス番号「9」の命令Ｓａ３の「STEP」→アドレス番号「10」の命令Ｔａ４の「CONDITION」→アドレス番号「11」の命令Ｔａ４の「TRANSITION」→アドレス番号「12」の命令Ｓａ４の「STEP」、の順序で制御プログラム２５を制御プログラムメモリ１９１〜１９４から読出す。
【００６９】
以下に、制御プログラム２５に対するパイプライン制御について説明する。
【００７０】
まず、アドレス番号「1」の「STEP: Sa1」に対する命令読出し段階、オペランド読出し段階、命令実行段階、書込み段階が実行される。
【００７１】
アドレス番号「1」の「STEP: Sa1」に対する命令読出し段階の実行後、アドレス番号「2」の「CONDITION: Ta1」に対する命令読出し段階、オペランド読出し段階、命令実行段階、書込み段階が実行される。
【００７２】
このアドレス番号「2」の「CONDITION: Ta1」に対する命令実行段階では、アドレス番号「1」の「STEP: Sa1」に対する命令実行段階で得られた実行結果に基づいて、「命令Ｓａ２が実行権限を有する」か判断される。この例では、アドレス番号「2」の「CONDITION: Ta1」に対する命令実行段階において「命令Ｓａ２が実行権限を有していない」と判断されたとする。
【００７３】
アドレス番号「2」の「CONDITION: Ta1」に対する命令読出し段階の実行後、アドレス番号「3」の「TRANSITION: Sa1,Sa2」に対する命令読出し段階、オペランド読出し段階が実行される。しかしながら、先のアドレス番号「2」の「CONDITION:Ta1」に対する命令実行段階において「命令Ｓａ２が実行権限を有していない」と判断されたため、アドレス番号「3」の「TRANSITION: Sa1,Sa2」に対する命令実行段階及び書込み段階は実行されない。この結果、アドレス番号「4」の「STEP:Sa2」は、実行権限を有していない状態となる。
【００７４】
アドレス番号「3」の「TRANSITION: Sa1,Sa2」に対する命令読出し段階の実行後、アドレス番号「4」の「STEP:Sa2」に対する命令読出し段階、オペランド読出し段階が実行される。しかしながら、アドレス番号「4」の「STEP:Sa2」は実行権限を有していない状態であるため、アドレス番号「4」の「STEP:Sa2」に対する命令実行段階及び書込み段階は実行されない。
【００７５】
アドレス番号「4」の「STEP:Sa2」に対する命令読出し段階の実行後、アドレス番号「5」の「CONDITION:Ta3」に対する命令読出し段階、オペランド読出し段階、命令実行段階、書込み段階が実行される。このアドレス番号「5」の「CONDITION:Ta3」に対する命令実行段階では、先のアドレス番号「4」の「STEP:Sa2」に対する命令実行段階が実行されていないため、次のアドレス番号「6」の「TRANSITION:Sa2,Sa4」に対する命令実行段階、書込み段階を実行しないとの判断がなされる。
【００７６】
アドレス番号「5」の「CONDITION:Ta3」に対する命令読出し段階の実行後、アドレス番号「6」の「TRANSITION: Sa2,Sa4」に対する命令読出し段階、オペランド読出し段階が実行される。しかしながら、アドレス番号「6」の「TRANSITION: Sa2,Sa4」に対する命令実行段階、書込み段階は、先のアドレス番号「5」の「CONDITION: Ta3」での判断にしたがって実行されない。
【００７７】
アドレス番号「6」の「TRANSITION: Sa2,Sa4」に対する命令読出し段階の実行後、アドレス番号「7」の「CONDITION: Ta2」に対する命令読出し段階、オペランド読出し段階、命令実行段階、書込み段階が実行される。
【００７８】
このアドレス番号「7」の「CONDITION: Ta2」に対する命令実行段階では、アドレス番号「1」の「STEP:Sa1」に対する命令実行段階で得られた実行結果に基づいて、「命令Ｓａ３が実行権限を有する」か否か判断される。この例では、アドレス番号「7」の「CONDITION:Ta2」に対する命令実行段階において「命令Ｓａ３が実行権限を有する」と判断される。
【００７９】
アドレス番号「7」の「CONDITION:Ta2」に対する命令読出し段階の実行後、アドレス番号「8」の「TRANSITION:Sa1,Sa3」に対する命令読出し段階、オペランド読出し段階、命令実行段階、書込み段階が実行される。ここで、先のアドレス番号「7」の「CONDITION:Ta2」に対する命令実行段階において「命令Ｓａ３が実行権限を有する」と判断されたため、アドレス番号「8」の「TRANSITION:Sa1,Sa3」に対する命令実行段階により命令Ｓａ３が実行権限を有する状態とされる。
【００８０】
アドレス番号「8」の「TRANSITION:Sa1,Sa3」に対する命令読出し段階の実行後、アドレス番号「9」の「STEP:Sa3」に対する命令読出し段階、オペランド読出し段階が実行され、さらに命令Ｓａ３は実行権限を有する状態であるため、アドレス番号「9」の「STEP:Sa3」に対する命令実行段階、書込み段階が実行される。なお、アドレス番号「9」の「STEP:Sa3」に対する命令実行段階は、アドレス番号「1」の「STEP:Sa1」に対する命令実行段階で得られた結果を用いて処理を行う。
【００８１】
アドレス番号「9」の「STEP:Sa3」に対する命令読出し段階の実行後、アドレス番号「10」の「CONDITION:Ta4」に対する命令読出し段階、オペランド読出し段階、命令実行段階、書込み段階が実行される。
【００８２】
このアドレス番号「10」の「CONDITION:Ta4」に対する命令実行段階では、アドレス番号「9」の「STEP:Sa3」に対する命令実行段階で得られた実行結果に基づいて、「命令Ｓａ４が実行権限を有する」か否か判断される。この例では、アドレス番号「10」の「CONDITION: Ta4」に対する命令実行段階において「命令Ｓａ４が実行権限を有する」と判断される。
【００８３】
アドレス番号「10」の「CONDITION: Ta4」に対する命令読出し段階の実行後、アドレス番号「11」の「TRANSITION: Sa3,Sa4」に対する命令読出し段階、オペランド読出し段階、命令実行段階、書込み段階が実行され、先のアドレス番号「10」の「CONDITION:Ta4」に対する命令実行段階において「命令Ｓａ４が実行権限を有する」と判断されたため、アドレス番号「11」の「TRANSITION:Sa3,Sa4」に対する命令実行段階により命令Ｓａ４が実行権限を有する状態とされる。
【００８４】
アドレス番号「11」の「TRANSITION: Sa3,Sa4」に対する命令読出し段階の実行後、アドレス番号「12」の「STEP:Sa4」に対する命令読出し段階、オペランド読出し段階が実行され、さらに命令Ｓａ４は実行権限を有する状態であるため、アドレス番号「12」の「STEP:Sa4」に対する命令実行段階、書込み段階が実行される。なお、アドレス番号「12」の「STEP:Sa4」に対する命令実行段階は、アドレス番号「9」の「STEP:Sa3」に対する命令実行段階で得られた結果を用いて処理を行う。
【００８５】
本実施の形態では、この図４のように処理が行われることにより、パイプライン制御が継続し、命令Ｓａ１〜Ｓａ４及び判断命令Ｔａ１〜Ｔａ４に基づく各命令間で、処理段階を重複させつつ処理を実行させることができ、効率的かつ迅速な処理を行うことができる。
【００８６】
一方、処理に分岐がある場合の従来の制御プログラムの実行状態を、図５に示す。
【００８７】
従来において処理に分岐がある場合、制御プログラムには、条件成立時ジャンプ命令語「JON」や無条件ジャンプ命令語「JUMP」が含まれる。この条件成立時ジャンプ命令語「JON」や無条件ジャンプ命令語「JUMP」がある部分では、次の命令語を先回りして読出し・実行することが困難となり、パイプライン制御に乱れが生じ、パイプライン制御の継続が困難となる。分岐が増えるほど条件成立時ジャンプ命令語「JON」や無条件ジャンプ命令語「JUMP」が増加し、制御プログラムの効率的かつ迅速な処理が困難となる。
【００８８】
図６は、制御データの割り付け結果の第１例を示す図である。なお、この図６では、制御ソースプログラムがＬＤ（Ladder Diagram）言語で記述されており、制御ソースプログラムで使用されている制御データ変数Ａ１〜Ａ６，Ｂ７，Ａ８〜Ａ１０，Ｂ１１についての制御データが制御データメモリ５１に記録される場合を例示している。
【００８９】
コンパイラ２４は、制御プログラムメモリ５１のいずれかの所定範囲の領域に、制御プログラム内のあるプログラム構成単位MS01で使用される制御データを割り付ける。
【００９０】
制御データ変数Ａ１〜Ａ６，Ａ８〜Ａ１０についての制御データは入力データである。制御データ変数Ｂ７，Ｂ１１についての制御データは出力データである。
【００９１】
コンパイラ２４は、プログラム構成単位MS01に使用される制御データの割り付けられる記憶領域がキャッシュメモリ３４の記憶容量以下となるように、制御データの割り付けを行う。そして、プログラム構成単位MS01の実行中においては、このプログラム構成単位MS01に使用される制御データをキャッシュメモリ３４に記憶する。
【００９２】
この図６の記憶方式を採用することで、プログラム構成単位MS01の実行中においては、キャッシュメモリ３４に対する制御データのヒット率を向上させることができ、この結果、プログラム構成単位MS01の実行速度を高速化できる。
【００９３】
図７は、コンパイラ２４による制御データの割り付け結果の第２例を示す図である。なお、この図７では、制御ソースプログラム５２がＬＤ言語で記述されており、制御ソースプログラム５２で使用されている制御データ変数Ａ１〜Ａ６，Ｂ７，Ａ８〜Ａ１０，Ｂ１１についての制御データが制御データメモリ２０１，２０２に記録される場合を例示している。すなわち、この図７では、制御装置１４が２つの制御データメモリ２０１，２０２を具備する場合（２バンクメモリの場合）を例として図示している。
【００９４】
制御ソースプログラム５２を実行した場合の制御データ変数の出現順は、Ａ１〜Ａ６，Ｂ７，Ａ８〜Ａ１０，Ｂ１１であるとする。制御データ変数Ａ１〜Ａ６，Ｂ７，Ａ８〜Ａ１０，Ｂ１１は、出現順に、異なる制御データメモリ２０１，２０２に割り付けられる。この図７のように、出現順が隣り合う制御データがそれぞれ交互に制御データメモリ２０１，２０２に記憶されることにより、制御データメモリ２０１，２０２からの制御データの読出し又は書込みを効率よく行うことができる。また、一方の制御データメモリの内容を使用中において、他方の制御データメモリの内容をキャッシュメモリ３４に予め記憶しておくことで、先回りで次に使用される制御データをキャッシュメモリ３４に記憶させることができ、キャッシュヒット率を向上させることができる。
【００９５】
このように、コンパイラ２４は、連続して使用される制御データを、他の制御データの読出し又は書込み状態に関係なく独立に読出し及び書込み可能となるように、複数の制御データメモリ２０１〜２０ｍに制御データを記憶する。
【００９６】
本実施の形態では、第１の制御データが制御データメモリ２０１に記録されている場合、次に使用される第２の制御データは、第１の制御データと独立に読出し又は書込み可能とするために、他の制御プログラムメモリ２０２〜２０ｍのいずれかに記録される。
【００９７】
なお、上記図６の制御データの記憶方式と上記図７の制御データの記憶方式とは組み合わせることが可能である。例えば、上記図６のプログラム構成単位MS01で使用される制御データ変数Ａ１〜Ａ６，Ｂ７，Ａ８〜Ａ１０，Ｂ１１について、隣り合う使用順序の制御データ変数を異なる制御データメモリ２０１，２０２に記憶する。すなわち、制御データメモリ２０１に、制御データ変数Ａ１，Ａ３，Ａ５，Ｂ７，Ａ９，Ｂ１１を記憶し、制御データメモリ２０２に、制御データ変数Ａ２，Ａ４，Ａ６，Ａ８，Ａ１０を記憶する。加えて、制御データ変数Ａ１，Ａ３，Ａ５，Ｂ７，Ａ９，Ｂ１１を制御データメモリ２０１の近い所定の領域に記憶し、制御データ変数Ａ２，Ａ４，Ａ６，Ａ８，Ａ１０を制御データメモリ２０２の近い所定の領域に記憶する。そして、キャッシュメモリ３４は、プログラム構成単位MS01で使用される制御データ変数Ａ１〜Ａ６，Ｂ７，Ａ８〜Ａ１０，Ｂ１１をまとめて記憶可能とする。
【００９８】
これにより、プログラム構成単位MS01の実行中におけるキャッシュヒット率を向上させることができる。また、制御データメモリ２０１からの制御データ変数Ａ１，Ａ３，Ａ５，Ｂ７，Ａ９，Ｂ１１の読出しと並列的に、制御データメモリ２０２からの制御データ変数Ａ２，Ａ４，Ａ６，Ａ８，Ａ１０の読出しを行うことができる。さらに、キャッシュメモリ３４と制御データメモリ２０１との間での制御データ変数Ａ１，Ａ３，Ａ５，Ｂ７，Ａ９，Ｂ１１の読出し又は書込みと、キャッシュメモリ３４と制御データメモリ２０２との間での制御データ変数Ａ２，Ａ４，Ａ６，Ａ８，Ａ１０の読出し又は書込みとを、並列的に実行させることができる。したがって、プログラム構成単位MS01の実行速度を高速化できる。
【００９９】
ここで、本実施の形態における制御データのアクセス状態について詳細に説明する。
【０１００】
図８は、本実施の形態における制御データに対するアクセス状態の例を示す図である。なお、図８では、制御装置１４が２つの制御データメモリ２０１，２０２を具備する場合（２バンクメモリの場合）を例として示す。
【０１０１】
制御プログラム２５の各命令はパイプライン制御により実行され、本実施の形態において、制御プログラム２５の各命令は、順序通りに実行される。制御プログラム２５において、実行順序の隣り合う命令によってアクセスされる制御データは、異なる制御データメモリ（バンクメモリ）２０１，２０２に格納される。これにより、実行順序の隣り合う命令によってアクセスされる制御データを先回りでアクセスすることが可能となる。
【０１０２】
上述したように、本実施の形態では、パイプライン制御の乱れの発生を防止できる。本実施の形態では、実行順序の隣り合う命令によってアクセスされる制御データが同じ制御データメモリに記憶されていないため、制御データの並列的なアクセスを高レベルに維持できる。
【０１０３】
図９は、制御プログラムメモリ１９１〜１９４と、制御データメモリ２０１，２０２と、キャッシュメモリ３４との動作タイミングの一例を示すタイミングチャートである。
【０１０４】
この図９では、制御装置１４が４つの制御プログラムメモリ１９１〜１９４を具備し、２つの制御データメモリ２０１，２０２を具備する場合を例として図示しているが、他の制御プログラムメモリ１９３〜１９ｎ及び他の制御データメモリ２０３〜２０ｍを具備する場合についても同様である。
【０１０５】
また、この図９は、上記図１及び図２に示す制御装置１４において、上記図６のプログラム構成単位MS01又は図７の制御ソースプログラム５２における制御データ変数Ａ８の読出し処理が実行されるまでのタイミングチャートを示しており、その後の処理については省略している。
【０１０６】
制御プログラムメモリ１９１〜１９４に対する読出しコマンドは、立ち下がりでアドレス有効、立ち上がりで動作完了を表す。
【０１０７】
制御プログラムメモリ制御回路３１は、この図９に示すように、複数の制御プログラムメモリ１９１〜１９４に対して順番にアドレスと読出しコマンドを与え、アドレス順にプログラムコード（命令）を読出すことができる。制御プログラムメモリ１９１〜１９４毎にバッファ２１１〜２１４が備えられているため、制御プログラムメモリ１９１〜１９４からのプログラムコードの読出しは、それぞれ独立して実行可能である。
【０１０８】
すなわち、制御プログラムメモリ制御回路３１は、制御プログラムメモリ１９１〜１９４のうちのいずれかからプログラムコードを読出し中であっても、他の制御プログラムメモリから他のプログラムコードを読出すことが可能である。
【０１０９】
上述したように、制御ソースプログラム５２は、アドレス順に実行可能な状態にコンパイルされる。コンパイラ２４は、上記図３で説明したように、分岐実行や並列実行を単純な順実行プログラムとしてコンパイルすることで、制御プログラムメモリ１９１〜１９４をアクセスする際のアドレスが不連続にならないように制御プログラムを作成する。
【０１１０】
これにより、制御ソースプログラム５２に分岐条件がある場合であっても、制御プログラムメモリ制御回路３１によってアドレス順にプログラムコードが読出されることにより、演算回路３０は、条件分岐を含む処理を構成する各命令をパイプライン制御にしたがって実現可能である。
【０１１１】
しかしながら，割り込みプログラムの実行やタスクの切替などにより、読出すプログラムコードのアドレスを連続させることが困難な場合には、制御プログラムメモリ制御回路３１は、所望の制御プログラムメモリにアドレスと読出しコマンドを出力し、プログラムコードが出力されるまで演算回路３０の実行を待たせるように制御を行う。
【０１１２】
制御データメモリ２０１，２０２からの制御データの読出し及び書込みも、制御プログラムメモリ１９１，１９２からのプログラムコードの読出しと独立して実行される。
【０１１３】
この図９において、制御データ変数Ａ１，Ａ３，Ａ５，Ｂ７，Ａ９，Ｂ１１は、制御データメモリ２０１の所定の領域内に記憶されている。制御データ変数Ａ２，Ａ４，Ａ６，Ａ８，Ａ１０は、制御データメモリ２０２の所定の領域内に記憶されている。
【０１１４】
制御データ変数Ａ１，Ａ３，Ａ５，Ｂ７，Ａ９，Ｂ１１のいずれかに対してキャッシュミスが発生した場合、制御データメモリ２０１における所定領域内（キャッシュメモリ３４に記憶可能な領域内）の制御データ変数Ａ１，Ａ３，Ａ５，Ｂ７，Ａ９，Ｂ１１がキャッシュメモリ３４に記憶される。その後、制御データ変数Ａ１，Ａ３，Ａ５，Ｂ７，Ａ９，Ｂ１１に対する読出し又は書込みは、キャッシュメモリ３４に対して行われる。
【０１１５】
同様に、制御データ変数Ａ２，Ａ４，Ａ６，Ａ８，Ａ１０のいずれかに対してキャッシュミスが発生した場合、制御データメモリ２０２における所定領域内の制御データ変数Ａ２，Ａ４，Ａ６，Ａ８，Ａ１０がキャッシュメモリ３４に記憶される。その後、制御データ変数Ａ２，Ａ４，Ａ６，Ａ８，Ａ１０に対する読出し又は書込みは、キャッシュメモリ３４に対して行われる。
【０１１６】
例えば、制御データ変数Ｂ７のように、キャッシュメモリ３４に書込まれた制御データは、キャッシュメモリ３４から制御データメモリ２０１に書込まれる（ライドバック）。
【０１１７】
図９のパイプラインステージにおいては、各命令に対して、読出し又は書込み対象の制御データ変数が記載されている。
【０１１８】
この図９のパイプラインステージにおいて、キャッシュミスなどにより処理に必要な制御データ変数の読出し又は書き込みが行われていない場合には、命令の実行が待ち状態となる。
【０１１９】
なお、制御データ読出しコマンドと制御データ書込みコマンドとは、同様のタイミングで発生する。制御データ書込みコマンドにおいても、制御データ読出しコマンドと同様に、キャッシュミスが発生した場合に、その後制御プログラムの読出しが待たされる場合がある。
【０１２０】
以下に、本実施の形態に係る制御装置１４による制御データの読出し及び書込み動作の第１例について説明する。
【０１２１】
演算回路３０は、読出し対象の制御データのアドレスと読出しコマンドをキャッシュメモリ制御回路３３に出力する。
【０１２２】
キャッシュメモリ制御回路３３は、読出し対象の制御データがキャッシュメモリ３４に記憶されているか否か判断する。
【０１２３】
読出し対象の制御データがキャッシュメモリ３４に記憶されている場合、キャッシュメモリ制御回路３３は、キャッシュメモリ３４から読出し対象の制御データを読出し、演算回路３０に出力する。
【０１２４】
一方、読出し対象の制御データがキャッシュメモリ３４に記憶されていない場合、キャッシュメモリ制御回路３３は、読出し対象の制御データのアドレスと読出しコマンドを制御データメモリ制御回路３５に出力する。
【０１２５】
制御データメモリ制御回路３５は、読出し対象の制御データのアドレスと読出しコマンドを入力すると、読出し対象の制御データの属するプログラム構成単位で使用される制御データの集合を読出し、キャッシュメモリ３４に記憶するとともに、読出し対象の制御データを演算回路３０に出力する。
【０１２６】
このように、本実施の形態では、演算回路３０と制御データメモリ２０１〜２０ｍの間にキャッシュメモリ３４が装備されている。キャッシュメモリ３４は、制御データのアクセスに対してだけ有効である。
【０１２７】
キャッシュメモリ３４を有効に使用するために、上述したように、コンパイラ２４は、制御データを制御データメモリ２０１〜２０ｍに割り付ける際に、あるプログラム構成単位に含まれる制御データを所定範囲内の領域に割り付ける。これにより、あるプログラム構成単位のプログラムコード実行中においては、全制御データアクセス回数に対するキャッシュメモリ３４からの読出し回数の割合（ヒット率）が高くなり、高速に制御データ変数を読出すことができる。
【０１２８】
また、制御データ変数の中には直接出力変数という変数がある。直接出力変数に書込まれた制御データは、制御装置１４の一括入出力（スキャン入出力）とは別に、その書込み時点で入出力モジュール１に出力される。
【０１２９】
図１０は、直接出力変数の出力動作の一例を示すブロック図である。
【０１３０】
書込み対象の制御データ変数が直接出力変数の場合、演算回路３０は、キャッシュメモリ制御回路３４にその情報を出力し、キャッシュメモリ３４に制御データを書込むだけでなく、実際の入出力モジュール１に同時に書込みを行う（ライトスルー動作）。これにより、書込み対象の制御データがＩ／Ｏインタフェース２７経由で直接入出力モジュール１に出力される。
【０１３１】
以下に、本実施の形態に係る制御装置１４による制御データの読出し及び書込み動作の第２例について説明する。
【０１３２】
制御装置１４は、複数の制御データメモリ２０１〜２０ｍを制御可能とするために、制御データ用のバッファ２２１〜２２ｍ及び制御データメモリ制御回路３５を具備する。
【０１３３】
各制御データメモリ２０１〜２０ｍには、専用のバッファ２２１〜２２ｍが備えられている。このため、制御データメモリ制御回路３５は、読出しコマンド又は書込みコマンドに基づいて、独立して読出し及び書込み動作を実行可能である。
【０１３４】
図１１は、制御データメモリ２０１，２０２の動作タイミングの一例を示すタイミングチャートである。なお、他の制御データメモリ２０３〜２０ｍを具備する場合についても同様である。
【０１３５】
上述したように、複数の制御データメモリを効果的に使用するために、制御データ変数についての制御データは、アクセス順を考慮して制御データメモリ２０１，２０２に割り付けられる。
【０１３６】
例えば、上記図６に示すようなＬＤ言語で記述された制御プログラムでは，制御データのアクセス順がオペランドの変数名の数字で表される。本実施の形態では、連続してアクセスされる制御データが、アクセス順にしたがって異なる制御データメモリ２０１，２０２に割り付けられる。
【０１３７】
さらに、コイルコマンドのように書込みが発生する場合には、書込みと並行して制御データメモリからの読出しが可能となるように、次のコマンドで使用する制御データメモリを、コイルコマンドが使用する制御データメモリと異なる他の制御データメモリとする。コイルコマンドではない書込みが発生する他のコマンドについても同様とする。
【０１３８】
これにより、例えば、制御データメモリ２０１に制御データを書込んでいる間に、制御データメモリ２０２から制御データを読出すことが可能である。
【０１３９】
以上説明した本実施の形態においては、連続して実行されるプログラムコードがアドレスの順序にしたがってシーケンシャルに読出され、実行される。
【０１４０】
また、制御プログラムメモリ１９１〜１９ｎ及び制御プログラムメモリ制御回路３１を用いて、次に実行されるプログラムコードを先回りで読出しておくことができる。
【０１４１】
これにより、制御プログラム２５を高速に実行することができる。特に、制御装置１４がプログラマブルコントローラの場合、この制御装置１４に使用される制御プログラム２５はアドレス順に実行されることが多いため、本実施の形態に係る制御装置１４の動作は有効である。
【０１４２】
本実施の形態では、制御プログラムメモリ１９１〜１９ｎが演算回路３０に要求されるメモリアクセス速度よりも遅い場合であっても、制御プログラム２５を高速に実行することができる。
【０１４３】
また、本実施の形態においては、あるプログラム構成単位に属する制御データがまとめてキャッシュメモリ３４に記憶されるため、キャッシュメモリ３４のヒット率を向上させることができ、制御データを高速にアクセスすることができ、制御プログラム２５を高速に実行することができる。また、直接出力にも対応可能である。
【０１４４】
また、本実施の形態では、連続して使用される制御データが異なる制御データメモリ２０１〜２０ｍに記憶されるため、制御データの読出し又は書込みが同じ制御データメモリから連続して実行されることが防止され、また制御データの書込みと読出しとを並行して実行できる。
【０１４５】
これにより、制御データを高速にアクセスすることができ、制御プログラム２５を高速に実行することができる。
【０１４６】
（第２の実施の形態）
本実施の形態では、上記第１の実施の形態に係る制御装置の変形例について説明する。
【０１４７】
図１２は、本実施の形態に係る制御装置で用いられる制御プログラムの一例を示す図である。
【０１４８】
図１３は、本実施の形態に係る制御装置の一例を示すブロック図である。なお、この図１３において、上記図１，２と同一の部分については省略している。
【０１４９】
本実施の形態では、制御対象３に対する制御の信頼性を向上させるために、複数の制御装置３８１〜３８ｋに同一の制御プログラム３７を並列に実行させ、その結果を比較して正しい結果を選択する。制御プログラム３７の各プログラム構成単位の先頭には、同期命令が配置される。制御装置３８１〜３８ｋは、同様の構成とする。
【０１５０】
制御装置３８１は、上記制御装置１４の制御プログラム実行回路１８及び制御プログラム２５に代えて、制御プログラム実行回路３９及び制御プログラム３７が用いられる。制御装置３８１は、他の制御装置３８２〜３８ｋと同期をとるために、ＡＮＤ演算部４０を具備するとともに、制御プログラム実行回路３９内にＡＮＤ演算部４１を具備する。
【０１５１】
なお、ＡＮＤ演算部４０，４１は統合してもよい。
【０１５２】
制御プログラム実行回路３９に具備される演算回路４２は、同期命令を実行すると、同期要求を他の制御装置３８２〜３８ｋに出力する。同期要求の出力には、例えば通信インタフェース２８が用いられる。
【０１５３】
制御装置３８１は、他の制御装置３８２〜３８ｋの同期要求を入力する。ＡＮＤ演算部４０とＡＮＤ演算部４１とは、自制御装置３８１が出力される同期要求と他の制御装置３８２〜３８ｋから入力した各同期要求との論理積信号を演算回路４２に入力する。
【０１５４】
演算回路４２は、論理積信号に基づいて、各制御装置３８１〜３８ｋの同期が完了したか否か（論理積信号が有効状態か否か）を検出する。
【０１５５】
各制御装置３８１〜３８ｋの同期が完了していない場合、演算回路４２は、同期完了まで次のプログラムコードの実行を待機する。
【０１５６】
一方、同期が完了した場合、演算回路４２は、次のプログラムコードを実行する。
【０１５７】
以上説明した本実施の形態においては、制御プログラム３７の各プログラム構成単位の先頭に配置された同期命令により、制御装置３８１〜３８ｋの並列実行が容易に実現される。
【０１５８】
（第３の実施の形態）
本実施の形態では、上記第１の実施の形態における通信インタフェース２８について詳細に説明する。なお、上記第２の実施の形態に係る制御装置３８１〜３８ｋの通信インタフェース２８についても同様である。
【０１５９】
図１４は、通信インタフェース２８の詳細構成の一例を示すブロック図である。
【０１６０】
また、図１５は、伝送命令を含む制御プログラムの一例を示す図である。
【０１６１】
通信インタフェース２８は、制御プログラム実行回路１４に内蔵される。
【０１６２】
演算回路３０は、通信インタフェース２８に具備されている伝送ステータスレジスタ２８ａ、伝送データバッファ２８ｂを直接アクセス可能である。
【０１６３】
演算回路３０は、上記図１５に示すようなネットワークを介してデータを送信する伝送命令４３を実行した場合、指定されたデータを通信インタフェース２８の伝送データバッファ２８ｂに書込むと同時に、コマンド・ステータスレジスタ２８ａに伝送の種別、伝送起動指示を書込む。
【０１６４】
また、演算回路３０は、ネットワークを介してデータを受信する伝送命令を実行した場合、制御プログラム実行回路１４外部の通信インタフェースをアクセスするのではなく、制御プログラム実行回路１４内部の通信インタフェース２８をアクセスし、伝送ステータスの確認、データの受信を行う。
【０１６５】
このように、通信インタフェース２８を制御プログラム実行回路１４内部に実装し、その内部のバッファ２８ｂ，レジスタ２８ａを演算回路３０から直接アクセス可能とすることで、通信インタフェース２８のステータス、伝送データを高速に処理し、伝送命令を高速に実行することができる。
【０１６６】
（第４の実施の形態）
本実施の形態では、各種バッファにラッチ機能（保存機能）を具備する制御装置について説明する。
【０１６７】
図１６は、本実施の形態に係るバッファの一例を示す回路図である。この図１６では、１ビット分のラッチ及びバッファの構成の例を示している。
【０１６８】
バッファ４４は、例えば、データバッファ、アドレスバッファ、コマンドバッファとして用いることができる。
【０１６９】
バッファ４４は、上記各実施の形態で説明したバッファ２１１〜２１ｎ，２２１〜２２ｍ，３２，３６、通信インタフェース２８内の伝送データバッファ２８ｂ、Ｉ／Ｏインタフェース２７内のバッファ、システムバスインタフェース２９内のバッファなど、制御装置１４，３８１〜３８ｋ内の各種バッファに対して適用される。
【０１７０】
なお、本実施の形態において、バッファ４４は、データをラッチするデータバッファとして用いられる場合について説明するが、アドレスをラッチするアドレスバッファ、コマンドをラッチするコマンドバッファとして用いられる場合についても同様である。
【０１７１】
バッファ４４は、ＡＮＤ回路４５、シフトレジスタ４６、ラッチデータ読出し用バッファ４７、ＡＮＤ回路４８、ＯＲ回路４９、スイッチ回路５０を具備する。
【０１７２】
選択信号は、新データの出力が選択される場合にHigh信号として入力され、ラッチデータの出力が選択される場合にLow信号として入力される。すなわち、この選択信号は、ラッチデータの出力命令として機能する。
【０１７３】
ＡＮＤ回路４５は、新データと選択信号とを入力し、選択信号がHigh信号の場合に新データを出力する。
【０１７４】
シフトレジスタ４６は、入力した新データをラッチデータとしてラッチデータ読出し用バッファ４７に保存する。
【０１７５】
一方、シフトレジスタ４６は、ラッチ信号を入力する度に、ラッチデータ読出し用バッファ４７から各ラッチデータを出力する。なお、ラッチデータの出力順序は、保存された順序又は逆の順序のいずれでもよい。
【０１７６】
ＡＮＤ回路４８は、シフトレジスタ４６からのラッチデータと選択信号の反転結果を入力し、Low信号である選択信号が反転されてHigh信号となった場合に、ラッチデータを出力する。
【０１７７】
ＯＲ回路４９は、ＡＮＤ回路４５からの新データとＡＮＤ回路４８からのラッチデータのいずれか一方を出力する。
【０１７８】
スイッチ回路５０は、ＡＮＤ回路４５から新データとラッチデータのいずれか一方を入力する。また、スイッチ回路５０は、バッファイネーブル信号を入力すると、新データとラッチデータのいずれか一方を出力する。
【０１７９】
本実施の形態においては、選択信号により新データの出力かラッチデータの出力かを選択可能である。バッファ４４が両方向のバッファとして用いられる場合には、上記図１６と同様の回路が逆方向に並列接続される。
【０１８０】
本実施の形態では、制御プログラム２５，３７の実行において何らかのエラーが発生した場合、アクセスを停止し、バッファ４４にラッチされているデータを選択して読出す。
【０１８１】
このように、アドレス及びデータバッファにデータを時系列的にラッチする機能を具備することにより、エラー発生時にアクセスしたデータを確認することができ、エラー発生の原因を解析することができ、制御プログラム実行時に発生したエラーの原因究明が容易になる。
【０１８２】
なお、上記各実施の形態において、各構成要素は、同様の動作を実現可能であれば自由に変形可能であり、配置を変更させてもよく、自由に組み合わせることが可能であり、分割することも可能である。
【図面の簡単な説明】
【０１８３】
【図１】本発明の第１の実施の形態に係る制御装置の一例を示すブロック図。
【図２】制御プログラム実行回路の構成の一例を示すブロック図。
【図３】コンパイラによる制御ソースプログラムのコンパイル結果の一例を示す図。
【図４】同実施の形態に係る命令の実行状態の例を示す図。
【図５】従来の命令実行状態の例を示す図。
【図６】制御データの割り付け結果の第１例を示す図。
【図７】コンパイラによる制御データの割り付け結果の第２例を示す図。
【図８】同実施の形態における制御データに対するアクセス状態の例を示す図。
【図９】制御プログラムメモリと、制御データメモリと、キャッシュメモリとの動作タイミングの一例を示すタイミングチャート。
【図１０】直接出力変数の出力動作の一例を示すブロック図。
【図１１】制御データメモリの動作タイミングの一例を示すタイミングチャート。
【図１２】本発明の第２の実施の形態に係る制御装置で用いられる制御プログラムの一例を示す図。
【図１３】同実施の形態に係る制御装置の一例を示すブロック図。
【図１４】本発明の第３の実施の形態に係る制御装置の通信インタフェースの詳細構成の一例を示すブロック図。
【図１５】伝送命令を含む処理の一例を示す図。
【図１６】本発明の第４の実施の形態に係るバッファの一例を示す回路図。
【図１７】従来の制御装置の一例を示すブロック図。
【符号の説明】
【０１８４】
１…入出力モジュール、１ａ，７ａ，３８１〜３８ｋ…制御データ、２…制御装置、３，１４…制御対象、４，１８，３９…制御プログラム実行回路、５，１９１〜１９ｎ…制御プログラムメモリ、５ａ…制御プログラム、６…Ｉ／Ｏインタフェース、７，２０１〜２０ｍ…制御データメモリ、８…モニタ装置、９…通信インタフェース、１０，１５…プログラム実行回路、１１，１６…プログラムメモリ、１２，１７…データメモリ、１３…バス、２１１〜２１ｎ，２２１〜２２ｍ，３２，３６，４４…バッファ、２３…制御ソースプログラム、２４…コンパイラ、２５，３７…制御プログラム、２６…システムバス、２７…Ｉ／Ｏインタフェース、２８…通信インタフェース、２９…システムバスインタフェース、３０，４２…演算回路、３１…制御プログラムメモリ制御回路、３３…キャッシュメモリ制御回路、３４…キャッシュメモリ、３５…制御データメモリ制御回路、
【図１】
2005332370.tif 000003
【図２】
2005332370.tif 000004
【図３】
2005332370.tif 000005
【図４】
2005332370.tif 000006
【図５】
2005332370.tif 000007
【図６】
2005332370.tif 000008
【図７】
2005332370.tif 000009
【図８】
2005332370.tif 000010
【図９】
2005332370.tif 000011
【図１０】
2005332370.tif 000012
【図１１】
2005332370.tif 000013
【図１２】
2005332370.tif 000014
【図１３】
2005332370.tif 000015
【図１４】
2005332370.tif 000016
【図１５】
2005332370.tif 000017
【図１６】
2005332370.tif 000018
【図１７】
2005332370.tif 000019