(57)【特許請求の範囲】
【請求項１】
ラダープログラムを実行するプログラマブルコントローラにおいて、
定数を格納する第１のメモリ部と、
実行形式プログラムを格納する第２のメモリ部と、
前記ラダープログラムのソースコードの定数を前記第１のメモリ部に格納し、ソースコード中の定数を格納先アドレスに置き換えて、実行形式プログラムに変換し、前記第２のメモリ部に格納するコンパイル部と、
複数のレジスタを備え、前記第２のメモリ部の実行形式プログラムを、前記第１のメモリ部の定数を用いて実行するプログラム実行部と、
を備え、
前記第１、第２のメモリ部は、１つのメモリであり、
前記コンパイル部は、
定数を前記第２のメモリ部の変数に格納するソースコードを実行形式のプログラムに変換する場合、前記定数を前記レジスタに格納することなく、前記定数の格納先アドレスを用いて前記変数に格納する命令に変換することを特徴とするプログラマブルコントローラ。
【請求項２】
前記コンパイル部は、
定数を前記第２のメモリ部の変数と演算するソースコードを実行形式のプログラムに変換する場合、前記定数を前記レジスタに格納することなく、前記定数の格納先アドレスを用いて前記変数と演算する命令に変換する
ことを特徴とする請求項１記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、被制御対象機器を制御するプログラマブルコントローラに関し、定数を含むラダープログラムの実行を高速に行うことの出来るプログラマブルコントローラに関する。
【背景技術】
【０００２】
プログラマブルコントローラ（ＰＬＣ）は、工場等で用いられる制御装置で、外部には被制御対象機器となるバルブやモータ等の機器が接続されている。ＰＬＣの構成は、外部に接続された機器に対して入出力制御を行う入出力モジュールと、この入出力モジュールを統括する制御モジュール等から成る。
【０００３】
ＰＬＣの制御は、被制御対象機器の入出力接点情報や、各種データ演算等を記述したラダープログラム等を用いて行われる。ラダープログラムは、ＰＬＣに接続されたコンピュータ等を用いて作成された後、ＬＡＮ(Local Area Network)、ＵＳＢ(Universal Serial Bus)等を介しＰＬＣの制御モジュールへ転送され、実行形式に変換される。実行形式とは、プログラム実行の実行単位である命令語や、プログラムで使用される変数領域等の情報のことである。実行形式は、制御モジュール内のプログラム実行部によって実行され、被制御対象機器の制御や、各種データ演算を行う。
【０００４】
このような装置の構成を、図面を用いて説明する。図３は、従来のＰＬＣの構成図である。コンピュータ１は、ＰＣ(Personal Computer)等で、自身の記憶部１１にラダープログラムのソースコード（以下ソースコード）を格納している。ＰＬＣの制御モジュール２は、図示しない入出力モジュールを統括し、記憶部２１、コンパイル部２２、メモリ部２３、プログラム実行部２４を有し、コンピュータ１と接続されている。記憶部２１は、コンピュータ１と接続されており、コンピュータ１の記憶部１１から転送されるソースコードを格納する。コンパイル部２２は、記憶部２１と接続されており、記憶部２１からソースコードを読み出して実行形式プログラム（以下実行形式）に変換し出力する。メモリ部２３はコンパイル部２２と接続されており、自身のプログラム領域２３１にコンパイル部２２の出力である実行形式を格納する。プログラム領域２３１に格納された実行形式は命令語やラダープログラム中の変数を確保する図示しない変数領域（例えば変数「Ｄ００１」〜「Ｄ００２」）を含んでいる。プログラム実行部２４はメモリ部２３と接続され、メモリ部２３のプログラム領域２３１に格納されている実行形式を実行する。レジスタ部２４１は、プログラム実行部２４の内部に存在し、読み書き可能なデータ格納専用の記憶装置であるレジスタが複数で構成され、たとえば、図示しないレジスタ「Ｒ０」〜「Ｒ２」を備える。
【０００５】
このような装置の動作を、図面を用いて説明する。図４はコンピュータの記憶部に格納されているラダープログラムのソースコードであり、以下の２行が記述されている。
（Ｌ１）「ＭＯＶ  １２３４  Ｄ００１」
（Ｌ２）「ＣＡＬ  Ｄ００２＝Ｄ００１＋２」
各行の意味は、（Ｌ１）は、定数「１２３４」を変数「Ｄ００１」へ格納せよの意、（Ｌ２）は、変数「Ｄ００１」と定数２を加算した結果を変数「Ｄ００２」に格納せよの意、である。
このソースコードが記憶部２１へ転送される。
記憶部２１へ転送されたソースコードは、コンパイル部２２により、実行形式に変換され出力される。実行形式に含まれる命令語は、プログラム実行部２４が１クロックサイクルで処理することが出来る実行単位である。メモリ部２３には、この出力に基づき、図５のようにプログラム領域２３１に命令語が格納され、また図示しない変数領域（変数「Ｄ００１」〜変数「Ｄ００２」）が確保される。ここで、ソースコード（Ｌ１）に対応する命令語は、以下の２命令
（ａ）「ＭＯＶ  Ｒ０，＃１２３４」
（ｂ）「ＭＯＶ  （＠Ｄ００１），Ｒ０」
となる。（＃は定数であることを示す。）
ソースコード（Ｌ２）に対応する命令語は、以下の４命令
（ｃ）「ＬＤ  Ｒ１，（＠Ｄ００１）」
（ｄ）「ＭＯＶ  Ｒ２，＃２」と、
（ｅ）「ＡＤＤ  Ｒ０，Ｒ１，Ｒ２」
（ｆ）「ＳＴ  （＠Ｄ００２），Ｒ０」
となる。（「＠」は後に続く変数のアドレスを示す。たとえば「＠Ｄ００１」は変数「Ｄ００１のアドレス」を示す。また、「（）」は、囲まれるアドレスの内容を示す。例えば、「（＠Ｄ００１）」は変数「Ｄ００１」のアドレスの内容を示している。
【０００６】
プログラム実行部は、上記６命令（ａ）〜（ｆ）を以下のように解釈し、実行する。
（ａ）定数１２３４をレジスタ部２４１のレジスタ「Ｒ０」へ格納する。
（ｂ）レジスタ部２４１のレジスタ「Ｒ０」の値をメモリ部２３の変数「Ｄ００１」へ転送する。
（ｃ）メモリ部２３の変数「Ｄ００１」の値を読み込んでレジスタ部２４１のレジスタ「Ｒ１」に格納する。
（ｄ）定数「２」をレジスタ部２４１のレジスタ「Ｒ２」に格納する。
（ｅ）レジスタ部２４１のレジスタ「Ｒ１」の値とレジスタ部２４１のレジスタ「Ｒ２」の値を加算してレジスタ部２４１のレジスタ「Ｒ０」へ格納する。
（ｆ）レジスタ部２４１のレジスタ「Ｒ０」の値をメモリ部２３の「Ｄ００２」へ転送する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開昭６０−１６９９０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、このような装置では、データの転送やデータの演算は必ずレジスタ部２４１を経由する手順が必要となり、「定数をメモリ部に転送」の際には、定数を一旦レジスタ部２４１に格納するという命令と、この定数をレジスタ部２４１からメモリ２３に転送する命令とが必要である。また、「定数を含むデータの演算」の際には、プログラム実行部２４が定数をレジスタ部２４１に格納する命令と、そしてメモリ部２３の変数領域に格納されているデータをレジスタ部２４１に格納する命令と、そのレジスタ部２４１を対象として演算しその結果をレジスタ部２４１に格納する命令と、レジスタ部２４１にある結果をメモリ部２３に格納するという命令とが必要である。
たとえば図４の例で、「（Ｌ１）定数をメモリ部の変数に転送」する場合には（ａ）〜（ｂ）の２命令、つまり２クロックサイクル、「（Ｌ２）定数値とメモリ部の変数との加算」では（ｃ）〜（ｆ）の４命令、つまり４クロックサイクル要していた。このために、定数や変数を含む演算が数多く出現するプログラムにおいて、処理速度が遅くなってしまうという問題点があった。
【０００９】
そこで、本発明の目的は、ラダープログラムにおいて、定数が使用された場合の処理を高速化するプログラマブルコントローラを実現することにある。
【課題を解決するための手段】
【００１０】
このような課題を達成するために、本発明のうち請求項１記載の発明は、
ラダープログラムを実行するプログラマブルコントローラにおいて、
定数を格納する第１のメモリ部と、
実行形式プログラムを格納する第２のメモリ部と、
前記ラダープログラムのソースコードの定数を前記第１のメモリ部に格納し、ソースコード中の定数を格納先アドレスに置き換えて、実行形式プログラムに変換し、前記第２のメモリ部に格納するコンパイル部と、
複数のレジスタを備え、前記第２のメモリ部の実行形式プログラムを、前記第１のメモリ部の定数を用いて実行するプログラム実行部と、
を備え、
前記コンパイル部は、
定数を前記第２のメモリ部の変数に格納するソースコードを実行形式のプログラムに変換する場合、前記定数を前記レジスタに格納することなく、前記定数の格納先アドレスを用いて前記変数に格納する命令に変換することを特徴とする。
請求項２記載の発明は、請求項１記載の発明であって、
前記コンパイル部は、
定数を前記第２のメモリ部の変数と演算するソースコードを実行形式のプログラムに変換する場合、前記定数を前記レジスタに格納することなく、前記定数の格納先アドレスを用いて前記変数と演算する命令に変換することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、コンパイル部が、ラダープログラムのソースコードの定数を第１のメモリ部へ格納し、ソースコード中の定数を、格納先のアドレスに置き換えて、実行形式に変換し、第２のメモリ部に格納するので、プログラム実行部がこの第２のメモリ部の実行形式を実行する際に、「定数をメモリ部に転送」の場合には１命令、「定数を含むデータの演算」の場合には２命令で実行することができ、従来と比較し、ラダープログラムに対応する命令語の数を少なくすることができ、その結果としてラダー実行を高速化することができるという効果がある。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施例を示した構成図である。
【図２】図１に示す装置の第１のメモリ部３３，３４の格納例を示した図である。
【図３】従来のプログラムコントローラを示した構成図である。
【図４】ラダープログラムのソースコード例を示した図である。
【図５】図３に示す装置のメモリ部２３の格納例を示した図である。
【発明を実施するための形態】
【００１３】
以下本発明を、図面を用いて詳細に説明する。図１は本発明の一実施例を示した構成図である。ここで、図３と同一のものは同一符号を付し、説明を省略する。
【００１４】
ＰＬＣの制御モジュール３は、図示しない入出力モジュールを統括し、制御モジュール２の代りに設けられ、記憶部３１、コンパイル部３２、メモリ部３３，３４、プログラム実行部３５を有し、コンピュータ１と接続されている。
記憶部３１は、コンピュータ１と接続されており、コンピュータ１の記憶部１１から転送されるソースコードを格納する。コンパイル部３２は、記憶部３１と接続されており、記憶部３１からラダープログラムを読み出して、コンパイルを行い、ソースコードに含まれる定数と実行形式を出力する。実行形式は命令語と、ラダープログラム中の変数を確保する図示しない変数領域、例えば変数「Ｄ００１」〜「Ｄ００２」を含む。メモリ部３３はコンパイル部と接続され、コンパイル部３２の出力である定数を格納する。メモリ部３３は、コンパイル部３２と接続され、コンパイル部３２の出力である定数を格納する。メモリ部３４は、コンパイル部３２と接続され、コンパイル部３２の出力である実行形式を格納するプログラム領域３４１を有する。プログラム実行部３５は、メモリ部３４の実行形式をメモリ部３３の定数を用いて実行する。レジスタ部３５１は、プログラム実行部３５の内部に存在し、読み書き可能なデータ格納専用の記憶装置であるレジスタが複数で構成され、例えば図示しないレジスタ「Ｒ０」〜「Ｒ２」を備える。
【００１５】
このような装置の動作を、図面を用いて説明する。コンピュータ１の記憶部１１に格納されているソースコードは、既に説明した図４と同一の以下２行
（Ｌ１）「ＭＯＶ  １２３４  Ｄ００１」
（Ｌ２）「ＣＡＬ  Ｄ００２＝Ｄ００１＋２」
である。
【００１６】
記憶部３１は、コンピュータ１から転送されるこのソースコードを格納する。
そして、コンパイル部３２は、記憶部３１のソースコードに定数が含まれる場合には、その定数をメモリ部３３へ格納し、その格納先のアドレスを記憶しておく。そして、実行形式中の当該定数を、先ほど記憶した格納先のアドレスに置き換えて、プログラム実行部３５が最少のクロックサイクルで実行を行う実行形式に変換し、メモリ部３４のプログラム領域３４１に格納する。
すなわち、具体的な例は以下の通りである。
まず、記憶部３１のソースコード（Ｌ１）に含まれる定数「１２３４」と、（Ｌ２）に含まれる定数「２」を、メモリ部３３のそれぞれのアドレス「０ｘ３００」とアドレス「０ｘ３０４」へ格納しておく。
そして、
ラダープログラム（Ｌ１）に対応する命令語は、以下の１命令
（ｊ）「ＭＯＶ  （＠Ｄ００１），（０ｘ３００）」
と、
ラダープログラム（Ｌ２）に対応する命令語は、以下の２命令
（ｋ）「ＡＤＤ  Ｒ０，（＠Ｄ００１），（０ｘ３０４）」
（ｌ）「ＳＴ  （＠Ｄ００２），Ｒ０」
とを、メモリ部３４のプログラム領域３４１に格納する。
この３命令（ｊ）〜（ｌ）は、以下の意味である。
（ｊ）メモリ部３３のアドレス「０ｘ３００」の内容である定数「１２３４」をメモリ部３４の変数「Ｄ００１」へ格納する。
（ｋ）プログラム領域３４１の変数「Ｄ００１」とメモリ部３３のアドレス「０ｘ３０４」の内容を加算し、その結果をレジスタ「Ｒ０」へ格納する。
（ｌ）レジスタＲ０の値をメモリ部３４の変数「Ｄ００２」へ格納する。
プログラム実行部３５は、メモリ部３４のプログラム領域３４１の命令語のアドレスにより、メモリ部３３から定数を読み出して、実行する。
【００１７】
したがって、図４のソースコード
（Ｌ１）「ＭＯＶ  １２３４  Ｄ００１」
（Ｌ２）「ＣＡＬ  Ｄ００２＝Ｄ００１＋２」
に、従来では図５の通り６命令（６クロックサイクル）要していたが、本実施例では、上記（ｊ）〜（ｌ）の３命令（３クロックサイクル）で実行することができる。
【００１８】
このように、コンパイル部３２が、記憶部３１のソースコードに定数が含まれる場合には、その定数をメモリ部３３へ格納し、その格納先のアドレスを記憶しておく。そして、コンパイル部３２が、実行形式中の当該定数を、先ほど記憶した格納先のアドレスに置き換えて、実行形式に変換し、メモリ部３４のプログラム領域３４１に格納する。プログラム実行部３５は、メモリ部３４の実行形式をメモリ部３３の定数を用いて実行するので、
「（Ｌ１）定数をメモリ部の変数に転送」する場合には（ｊ）の１命令、「（Ｌ２）定数値とメモリ部の変数との加算」では（ｋ）〜（ｌ）の２命令で実行することができる。従来では、「（Ｌ１）定数をメモリ部の変数に転送」する場合には（ａ）〜（ｂ）の２命令、「（Ｌ２）定数値とメモリ部の変数との加算」では（ｃ）〜（ｆ）の４命令要していたことと比較すると、本発明では、ラダープログラムに対応する命令語の命令数を従来装置よりも少なくすることができ、その結果としてラダープログラムの実行を高速化することができるという効果がある。
【００１９】
なお、本発明では、ソースコードに定数が含まれない場合の演算についても効果があることはいうまでもない。この場合、定数の値が格納されるメモリ部３４のアドレスを実行形式の命令語に含ませる。
また、メモリ部３３，３４を別メモリとする構成を示したが、１つのメモリとしてもよい。
【符号の説明】
【００２０】
１  コンピュータ
１１  記憶部
３  制御モジュール
３１  記憶部
３２  コンパイル部
３３  メモリ部
３４  メモリ部
３４１  プログラム領域
３５  プログラム実行部
３５１  レジスタ部
【図１】
0005482016.tif 000002
【図２】
0005482016.tif 000003
【図３】
0005482016.tif 000004
【図４】
0005482016.tif 000005
【図５】
0005482016.tif 000006