(57)【要約】【課題】プログラム言語１ＥＣ６１１３１−３に対応するコンパイラの処理効率を高め、高速演算も可能にする。【解決手段】アキュムレータ１とデータメモリ２および演算回路３による従来の演算回路に、スタック４とスタックポインタ５を設け、複数個の入力パラメータを持つ演算命令をコンパイルする際、一旦、全ての入力パラメータをスタックヘ格納後、一つずつスタックから入力パラメータを取り出して現在の演算結果との演算を行って演算結果を更新し、これをすべての入力パラメータを取り出すまで繰り返し、最終的な演算結果を出力する。  入力パラメータと演算結果を各々格納するスタック構成のアキュムレータとし、演算にはアキュムレータのスタック位置を１つ移動させて演算を繰り返す構成も含む。【選択図】図１
2007183848.tif 000002
【特許請求の範囲】
【請求項１】
プログラム言語１ＥＣ６１１３１−３に対応するプログラマブルコントローラにおいて、
固定でない複数個の入力パラメータを持つ演算命令をコンパイルする際、一旦、全ての入力パラメータをスタックヘ格納後、一つずつスタックから入力パラメータを取り出して現在の演算結果との演算を行って演算結果を更新し、これをすべての入力パラメータを取り出すまで繰り返し、最終的な演算結果を出力する構成としたことを特徴とするプログラマブルコントローラ。
【請求項２】
前記プログラマブルコントローラは、１個の入力パラメータと演算結果を各々格納するアキュムレータをスタック上に配置し、１回の演算後にアキュムレータの位置を１つ移動し、スタック上の入力パラメータについてアキュムレータの移動がすべて終わるまで演算を繰り返す構成としたことを特徴とする請求項１記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、拡張演算可能なプログラマブルコントローラに関する。
【背景技術】
【０００２】
プログラマブルコントローラ（以下、ＰＬＣと略記する場合もある）の言語として、ＩＥＣ６１１３１−３（ＪｌＳＢ３５０３）がある（非特許文献１）。この規格に則ったＰＬＣが多く販売されている。ＩＥＣ言語の中にファンクションと呼ぶ演算ブロックがある。このファンクションは、図６の（ａ）に示すように、複数の入力パラメータを使って目的とする演算を行い、この演算結果として１つの出力パラメータを得る。
【０００３】
図６の（ｂ）に示すように、上記のファンクションの中には加減乗除などの算術演算を行うものがある。これらの中で加算と乗算は、入力パラメータを２個以上持っても良いことになっている。このようなファンクションを拡張ファンクションと呼んでいる。
【０００４】
拡張ファンクションを実行するためには、あらかじめ入力パラメータ数を知る必要がある。拡張ファンクションをコンパイルした時に、初めて、入力パラメータ数が分かり、コンパイラは入力パラメータ数に対応したインストラクションに展開する。例えば、３つ以上の入力パラメータがあるＡＤＤファンクションについて述べる。
【０００５】
この場合、コンパイラは以下の２つの方式でインストラクションに展開するのが一般的である。
【０００６】
（１）複数命令に展開
図７の（ａ）に示すように、２入力のＡＤＤ命令のみをもつ演算要素を用い、この演算要素を縦続させたプログラム構成にすることで、入力パラメータ数に対応したインストラクションに展開し、３入力以上のＡＤＤ演算を実現する。
【０００７】
（２）入力パラメータ数別の命令に展開
図７の（ｂ）に示すように、ＡＤＤ命令は２入力用だけでなく、３入力用、４入力用、…Ｎ入力用の専用の演算要素を複数用意しておき、３入力の場合は３入力用演算要素を使用することによって入力パラメータ数に対応したインストラクションに展開し、３入力のＡＤＤ演算を実現する。
【非特許文献１】ＩＥＣ６１１３１−３（ＪｌＳＢ３５０３）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
（１）複数命令に展開の場合
２入力のＡＤＤ命令のみをもつ演算要素を用いる方式では、入力パラメータ数によって、使用する命令数が多くなってしまい、処理効率の低下および演算速度の低下を起こす。また、展開コードを見ただけでは、本来３入力だったのか、２入力命令を２つ使ったのかわからない。
【０００９】
（２）入力パラメータ数別の命令に展開する場合
ＡＤＤ命令は入力パラメータ数の数だけの種類を用意しなければならない。無限に用意することはできないので、実際には最大入力パラメータ数を制限し、それ以上の命令数の場合には複数命令の組み合わせにすることになり、上記の（１）の場合と同様の問題が残る。
【００１０】
本発明の目的は、コンパイラの処理効率を高め、高速演算も可能にしたプログラマブルコントローラを提供することにある。
【課題を解決するための手段】
【００１１】
前記の課題を解決するための本発明は、以下の構成を特徴とする。
【００１２】
（１）プログラム言語１ＥＣ６１１３１−３に対応するプログラマブルコントローラにおいて、
固定でない複数個の入力パラメータを持つ演算命令をコンパイルする際、一旦、全ての入力パラメータをスタックヘ格納後、一つずつスタックから入力パラメータを取り出して現在の演算結果との演算を行って演算結果を更新し、これをすべての入力パラメータを取り出すまで繰り返し、最終的な演算結果を出力する構成としたことを特徴とする。
【００１３】
（２）前記プログラマブルコントローラは、１個の入力パラメータと演算結果を各々格納するアキュムレータをスタック上に配置し、１回の演算後にアキュムレータの位置を１つ移動し、スタック上の入力パラメータについてアキュムレータの移動がすべて終わるまで演算を繰り返す構成としたことを特徴とする。
【発明の効果】
【００１４】
以上のとおり、本発明によれば、以下の効果がある。
【００１５】
（１）コンパイラの処理効率が良い
固定でない複数個の入力パラメータを持つ演算命令をコンパイルする際、従来手法であれば入力パラメータ数ごとに展開処理を分けて用意する必要があった。本発明では、入力パラメータ数にかかわらず同一の演算命令に対しては用意する展開処理が１つで済むため処理効率が良い。
【００１６】
（２）高速演算が可能
アキュムレータにスタック機能も設けることにより、そうでない場合に比べ高速演算が可能となる。
【発明を実施するための最良の形態】
【００１７】
（実施形態１）
本実施形態は、演算を行うハードウェアを工夫して、拡張ファンクションを１つの命令で実現できるようにする。
【００１８】
図１は、本実施形態のプログラマブルコントローラの要部演算回路ブロックである。同図中、アキュムレータ１とデータメモリ２および演算回路３は従来のプログラマブルコントローラがもつ演算回路である。
【００１９】
アキュムレータ１は、演算結果を格納するためのレジスタであり、演算回路の入力にもなる。演算回路３は、数値演算を行う演算回路であり、一般的にＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）と呼ぶことが多い。データメモリ２は、演算対象データを格納するメモリであり、演算プログラムのオペランドで示されたデータを入出力する。
【００２０】
これら演算回路によって、例えば、３入力のＡＤＤ演算を行う場合にはＩＬ言語を使って、図２に示す演算命令手順になる。
【００２１】
ここでのＡＤＤ命令は、アキュムレータ１に、データメモリ２のデータ（指定オペランドの内容）を演算回路３で加算して、結果をアキュムレータ１に格納するという処理を行うものである。
【００２２】
本実施形態では、演算ブロックとして、スタック４を追加し、スタック４に格納されている命令数をカウントするスタックポインタ（ＳＰ）５を用意し、３つ以上のパラメータによる演算を可能にする。
【００２３】
スタック４は、ＦＩＬＯ（Ｆｉｒｓｔ  Ｉｎ  Ｌａｓｔ  Ｏｕｔ）構成になっているメモリであり、アキュムレータ１の内容を格納する。この格納アドレスがＳＰ５でカウントされる。ＰＵＳＨ命令でアキュムレータ１の内容がスタック４に格納され、ＰＯＰ命令で演算回路３にデータを出力する。
【００２４】
３入力ＩＮ１，ＩＮ２，ＩＮ３によるＡＤＤ演算命令を例にして動作を説明する。演算プログラムは図３に示すような演算命令手順になり、このプログラムの実行手順は以下のようになる。
【００２５】
（Ｓ１）ＬＤ  ＩＮ１
この演算は、データメモリ２にあるＩＮ１を演算回路３を介して、アキュムレータ１に格納する。演算回路３ではＮＯＰ処理を行うことになる。更に、スタックポインタ（ＳＰ）＝０として、初期化をする。
【００２６】
（Ｓ２）ＰＵＳＨ  ＩＮ２
この演算は、アキュムレータ１に格納されているＩＮ１をスタック４にＰＵＳＨする。そのために、ＳＰ５が示すスタック領域にアキュムレータ１の内容を転送して、ＳＰ５を＋１する。その結果、ＳＰ＝１になる。更に、データメモリ２からＩＮ２を読み込んで、演算回路３を介して、アキュムレータ１に格納する。演算回路３ではＮＯＰ処理を行うことになる。
【００２７】
（Ｓ３）ＰＵＳＨ  ＩＮ３
この演算は、アキュムレータ１に格納されているＩＮ２をスタック４にＰＵＳＨする。そのために、ＳＰ５が示すスタック領域にアキュムレータ１の内容を転送して、ＳＰ５を＋１する。その結果、ＳＰ＝２になる。更に、データメモリ２からＩＮ３を読み込んで、演算回路３を介して、アキュムレータ１に格納する。演算回路３ではＮＯＰ処理を行うことになる。
【００２８】
（Ｓ４）ＡＤＤ
アキュムレータ１に格納されているＩＮ３とスタック４にＰＵＳＨされているＩＮ１，ＩＮ２を加算する。ＳＰ＝２であるので、２個のデータがスタック４にＰＵＳＨされていることがわかる。最初に、アキュムレータ１の内容（ＩＮ３）とスタック４に最後にＰＵＳＨされたデータ（ＩＮ２）をＰＯＰして、演算回路３で加算し、結果（ＩＮ３＋ＩＮ２）をアキュムレータ１に格納する。
【００２９】
スタック４をＰＯＰしたことで、ＳＰ＝１になる。ＳＰ５の内容が０でないので、更に、アキュムレータ１の内容（ＩＮ３＋ＩＮ２）とスタック４に最初にＰＵＳＨされたデータ（ＩＮ１）をＰＯＰして、演算回路３で加算し、結果（ＩＮ３＋ＩＮ２＋ＩＮ１）をアキュムレータ１に格納する。スタック４をＰＯＰしたことで、ＳＰ＝０になる。ＳＰ＝０になったため、演算処理を終える。
【００３０】
（Ｓ５）ＳＴ  ＯＵＴ
アキュムレータ１に格納されている演算結果（ＩＮ３＋ＩＮ２＋ＩＮ１）をデータメモリ２のＯＵＴに書き込む。
【００３１】
（実施形態２）
図４は、本実施形態の要部演算回路ブロックを示し、図１と異なる部分は、アキュムレータ１をスタック構成にしたアキュムレータ１Ａとすることで、スタック４を省略した点にある。
【００３２】
すなわち、実施形態１ではアキュムレータ１とは別にスタック４を用意したが、アキュムレータ１Ａ自体をスタック構成とし、ＳＰ５が示す位置が現在のアキュムレータ位置とする。
【００３３】
このスタック構成のアキュムレータ１Ａは、ＳＰ５で現在格納アドレスが示され、例えば、２つの入力ＩＮ１，ＩＮ２を使った演算には、その出力は現在のスタックポインタ（ＳＰ）が示す位置の内容と、１つ前のスタックポインタ（ＳＰ−１）が示す位置の内容のデータになる。
【００３４】
本実施形態における演算は、図５に示す演算命令手順で実行され、この動作を以下に説明する。
【００３５】
（Ｓ１１）ＬＤ  ＩＮ１
この演算は、まず、スタックポインタ（ＳＰ）＝０として、初期化をする。データメモリ２にあるＩＮ１を演算回路３を介して、ＳＰ５が示すアキュムレータ１Ａの領域に格納する。演算回路３ではＮＯＰ処理を行うことになる。
【００３６】
（Ｓ１２）ＰＵＳＨ  ＩＮ２
この演算は、まず、ＳＰ＋１する。その結果、ＳＰ＝１になる。データメモリ２からＩＮ２を読み込んで、演算回路３を介して、ＳＰ５が示すアキュムレータ１Ａの領域に格納する。演算回路３ではＮＯＰ処理を行うことになる。
【００３７】
（Ｓ１３）ＰＵＳＨ  ＩＮ３
この演算は、まず、ＳＰ＋１する。その結果、ＳＰ＝２になる。データメモリ２からＩＮ３を読み込んで、演算回路３を介して、ＳＰ５が示すアキュムレータ１Ａの領域に格納する。演算回路３ではＮＯＰ処理を行うことになる。
【００３８】
（Ｓ１４）ＡＤＤ
アキュムレータ１Ａに格納されているＩＮ１，ＩＮ２，ＩＮ３を加算する。ＳＰ＝２であるので、３個のデータがアキュムレータにＰＵＳＨされていることがわかる。最初に、ＳＰ５が示すアキュムレータ１Ａの内容（ＩＮ３）とＳＰ−１が示すアキュムレータ１Ａの内容（ＩＮ２）を演算回路で加算し、結果（ＩＮ３＋ＩＮ２）をＳＰ−１が示すアキュムレータ１Ａの領域に格納する。その時点でＳＰ−１する。その結果、ＳＰ＝１になる。
【００３９】
ＳＰ５の内容が０でないので、更に、ＳＰ５が示すアキュムレータ１Ａの内容（ＩＮ３＋ＩＮ２）とＳＰ−１が示すアキュムレータ１Ａの内容（ＩＮ１）を演算回路３で加算し、結果（ＩＮ３＋ＩＮ２＋ＩＮ１）をＳＰ−１が示すアキュムレータ１Ａの領域に格納する。そして、ＳＰ−１する。これで、ＳＰ＝０になる。ＳＰ＝０になったので、演算処理を終える。
【００４０】
（Ｓ１５）ＳＴ  ＯＵＴ
ＳＰ５が示すアキュムレータ１Ａの領域に格納されている演算結果（ＩＮ３＋ＩＮ２＋ＩＮ１）をデータメモリ２のＯＵＴに書き込む。
【００４１】
ここで、ＬＤ命令はＳＰ＝０にして、ＳＰ＝０のスタック領域にオペランドデータを格納する。ＰＵＳＨ命令はＳＰの内容を＋１して、それが示すスタック領域にオペランドデータを格納する。ＡＤＤ命令はＳＰが示す数だけＰＯＰしながら加算処理を行う。これにより、ＳＰ＝０になり、ＳＰ＝０のスタック領域に加算結果が残る。
【００４２】
なお、以上までの実施形態においては、加算演算の場合を示すが、通常の２項演算子ファンクション（例えば、加減乗除、論理積、論理和などの論理演算）や単項演算子ファンクション（例えば，ｓｉｎ、ｃｏｓ演算、反転演算、絶対値演算など）に応用して同等の作用効果を得ることができる。
【図面の簡単な説明】
【００４３】
【図１】本発明の実施形態１を示すＰＬＣの要部演算回路ブロック。
【図２】３入力ＡＤＤ演算命令の例。
【図３】実施形態１における３入力ＡＤＤ演算命令の例。
【図４】本発明の実施形態２を示すＰＬＣの要部演算回路ブロック。
【図５】実施形態２における３入力ＡＤＤ演算命令の例。
【図６】ＰＬＣのファンクションの形態。
【図７】３入力以上のファンクション展開。
【符号の説明】
【００４４】
１、１Ａ  アキュムレータ
２  データメモリ
３  演算回路
４  スタック
５  スタックポインタ
【図１】
2007183848.tif 000003
【図２】
2007183848.tif 000004
【図３】
2007183848.tif 000005
【図４】
2007183848.tif 000006
【図５】
2007183848.tif 000007
【図６】
2007183848.tif 000008
【図７】
2007183848.tif 000009