(57)【要約】【課題】テンポラリサイズテーブル領域を参照することなく、ファンクションブロックがワークメモリとして使用するサイズ分だけテンポラリデータ領域を確保する。【解決手段】ファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍおよびファンクションブロック復帰処理１８ａ、１８ｂ、・・・、１８ｍは、ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎがワークメモリとして使用する分のテンポラリサイズ２７、２８を固定データとして内部に保持し、ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎを呼び出す場合、そのファンクションブロック１６ａ、１６ｂ、・・・、１６ｎがワークメモリとして使用する分に対応したテンポラリサイズ２７が記憶されたファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍを呼び出す。【選択図】      図１
2008262529.tif 000002
【特許請求の範囲】
【請求項１】
ユーザプログラム上で呼び出されるファンクションブロックを記憶するファンクションブロック記憶手段と、
前記ファンクションブロックの実行時に前記ファンクションブロックがワークメモリとして使用するテンポラリデータ記憶手段と、
前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズを内部に保持し、前記テンポラリサイズに基づいて前記ファンクションブロックがワークメモリとして使用するサイズ分の領域を前記テンポラリデータ記憶手段上で確保するファンクションブロック呼び出し処理手段とを備えることを特徴とするプログラマブルコントローラ。
【請求項２】
ユーザプログラム上で呼び出されるファンクションブロックを記憶するファンクションブロック記憶手段と、
前記ファンクションブロックの実行時に前記ファンクションブロックがワークメモリとして使用するテンポラリデータ記憶手段と、
前記ファンクションブロックが前記ワークメモリとして使用可能な予め決められたサイズ分の領域を前記テンポラリデータ記憶手段上で確保するファンクションブロック呼び出し処理手段と、
前記ファンクションブロックが前記ワークメモリとして使用するサイズ分に対応した領域を前記テンポラリデータ記憶手段上で確保する可変長対応ファンクションブロック呼び出し処理手段と、
前記ファンクションブロックを呼び出す場合、前記ファンクションブロックがワークメモリとして使用するサイズに基づいて、前記ファンクションブロック呼び出し処理手段または前記可変長対応ファンクションブロック呼び出し処理手段を選択するファンクションブロック呼び出し選択手段とを備えることを特徴とするプログラマブルコントローラ。
【請求項３】
前記ファンクションブロック呼び出し選択手段は、前記ファンクションブロックがワークメモリとしての使用するサイズに一致する領域を確保するファンクションブロック呼び出し処理手段がある場合、前記ファンクションブロック呼び出し処理手段を選択し、前記ファンクションブロックがワークメモリとしての使用するサイズに一致する領域を確保するファンクションブロック呼び出し処理手段がない場合、前記可変長対応ファンクションブロック呼び出し処理手段を選択することを特徴とする請求項２記載のプログラマブルコントローラ。
【請求項４】
前記ファンクションブロック呼び出し選択手段は、前記ファンクションブロック呼び出し処理手段にて確保される領域の使用率が閾値以上の場合、前記ファンクションブロック呼び出し処理手段を選択し、前記ファンクションブロック呼び出し処理手段にて確保される領域の使用率が閾値未満の場合、前記可変長対応ファンクションブロック呼び出し処理手段を選択することを特徴とする請求項２記載のプログラマブルコントローラ。
【請求項５】
前記ファンクションブロックがワークメモリとして使用したサイズ分の領域を前記テンポラリデータ記憶手段上で開放する可変長対応ファンクションブロック復帰処理手段を備えることを特徴とする請求項２から４のいずれか１項記載のプログラマブルコントローラ。
【請求項６】
前記ファンクションブロック呼び出し処理手段は、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズに応じて複数設けられていることを特徴とする請求項１から５のいずれか１項記載のプログラマブルコントローラ。
【請求項７】
前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズを内部に保持し、前記テンポラリサイズに基づいて前記ファンクションブロックがワークメモリとして使用したサイズ分の領域を前記テンポラリデータ記憶手段上で開放するファンクションブロック復帰処理手段を備えることを特徴とする請求項１から６のいずれか１項記載のプログラマブルコントローラ。
【請求項８】
前記ファンクションブロック復帰処理手段は、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズに応じて複数設けられていることを特徴とする請求項７記載のプログラマブルコントローラ。
【請求項９】
ユーザプログラム上でファンクションブロックを呼び出すステップと、
前記ファンクションブロックがワークメモリとして使用する分としてシステムプログラムに保持されたテンポラリサイズに基づいて、前記ファンクションブロックがワークメモリとして使用するサイズ分のテンポラリデータ領域を確保するステップとをコンピュータに実行させることを特徴とするファンクションブロック呼び出し処理プログラム。
【請求項１０】
ユーザプログラム上でファンクションブロックを呼び出すステップと、
前記ファンクションブロックがワークメモリとして使用するサイズに基づいて、前記ファンクションブロックがワークメモリとして使用可能な予め決められたサイズ分のテンポラリデータ領域を確保するか、あるいは前記ファンクションブロックがワークメモリとして使用するサイズ分に対応したテンポラリデータ領域を確保する処理を選択するステップとをコンピュータに実行させることを特徴とするファンクションブロック呼び出し処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラマブルコントローラおよびファンクションブロック呼び出し処理プログラムに関し、特に、テンポラリメモリを使用するファンクションブロックを（以下、ＦＢと略すこともある）呼び出し可能なプログラマブルコントローラにおけるファンクションブロックの呼び出し方式に適用して好適なものである。
【背景技術】
【０００２】
極めて高い安全性や安定性が求められる機械制御や運搬制御などの分野では、一般的に普及しているノイマン型のコンピュータの代わりにプログラマブルコントローラが用いられている。
図１３は、プログラマブルコントローラの概略構成を示すブロック図である。
図１３において、プログラマブルコントローラには、演算処理を行うＣＰＵモジュール１１１およびデータなどの入出力を行うＩ／Ｏモジュール１１０ａ、１１０ｂ、・・・、１１０ｎが設けられ、ＣＰＵモジュール１１１とＩ／Ｏモジュール１１０ａ、１１０ｂ、・・・、１１０ｎとはシステムバス１０１を介して接続されている。
【０００３】
そして、Ｉ／Ｏモジュール１１０ａ、１１０ｂ、・・・、１１０ｎはリミットスイッチ、センサ、温度計などからデータを読み込み、ユーザプログラムに従ってＣＰＵモジュール１１１にて演算処理が行われた後、Ｉ／Ｏモジュール１１０ａ、１１０ｂ、・・・、１１０ｎを介してモーター、空気シリンダー、液圧シリンダー、振動板、リレー、ソレノイドなどを駆動することができる。
【０００４】
図１４は、従来のプログラマブルコントローラに搭載されるＣＰＵモジュールの概略構成を示すブロック図である。
図１４において、ＣＰＵモジュール１１１には、マイクロプロセッサ１１９、プログラムＲＡＭ１１２およびデータＲＡＭ１２０が設けられている。ここで、プログラムＲＡＭ１１２には、ユーザ側で作成されるユーザプログラム１１３およびメーカ側で作成されるシステムプログラム１１４を格納することができる。そして、ユーザプログラム１１３は、プログラム１１５ａ、１１５ｂ、・・・、１１５ｏおよびファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎから構成することができる。なお、プログラム１１５ａ、１１５ｂ、・・・、１１５ｏおよびファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎは同一の言語で記述することができ、プログラム１１５ａ、１１５ｂ、・・・、１１５ｏは定周期またはサイクリックに起動され、ファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎはプログラム１１５ａ、１１５ｂ、・・・、１１５ｏから呼び出される機能モジュールである。
【０００５】
また、システムプログラム１１４には、ユーザプログラム１１３上でファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎを呼び出すファンクションブロック呼び出し処理１１７および呼び出されたファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎから元の処理に復帰するファンクションブロック復帰処理１１８を実装することができる。
また、データＲＡＭ１２０には、ユーザプログラム１１３が使用するユーザデータ領域１２１、ファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎがワークメモリとして使用するスタック構造のテンポラリデータ領域１２２および各ファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎが使用するテンポラリデータ領域１２２のサイズを記憶するテンポラリサイズテーブル領域１２３が設けられている。
【０００６】
図１５は、図１４のテンポラリデータ領域およびテンポラリサイズテーブル領域の概略構成を示すブロック図である。
図１５において、テンポラリサイズテーブル領域１２３には、各ファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎが使用するテンポラリデータ領域１２２のサイズを記憶する番地１、２、・・・、ｎがそれぞれ割り当てられ、例えば、ファンクションブロック１１６ａが使用するテンポラリデータ領域１２２のサイズとして、テンポラリサイズテーブル領域１２３の番地１には２０ワードと記憶され、ファンクションブロック１１６ｂが使用するテンポラリデータ領域１２２のサイズとして、テンポラリサイズテーブル領域１２３の番地２には１０ワードと記憶されている。
【０００７】
そして、ユーザプログラム１１３上でファンクションブロック１１６ａが呼び出される場合、ファンクションブロック１１６ａが使用するワークメモリとして２０ワード分のファンクションブロックワーク領域１２４をテンポラリデータ領域１２２に確保することができる。また、ユーザプログラム１１３上でファンクションブロック１１６ｂが呼び出される場合、ファンクションブロック１１６ｂが使用するワークメモリとして１０ワード分のファンクションブロックワーク領域１２５をテンポラリデータ領域１２２に確保することができる。なお、ファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎにて使用されないテンポラリデータ領域１２２は、空き領域１２６として扱うことができる。
【０００８】
図１６は、従来のコンパイラが生成するコードの一例を示す図である。
図１６において、例えば、プログラム１１５ａ上ではファンクションブロック１１６ａを呼び出し、ファンクションブロック１１６ａ上ではファンクションブロック１１６ｂを呼び出すことができる。
図１７は、従来のファンクションブロックの実行方法を示す図である。
図１７において、図１４のマイクロプロセッサ１１９は、プログラム１１５ａが起動されると、入力データ処理（Ｋ１１１）およびユーザプログラム演算処理（Ｋ１１２）を行う。そして、プログラム１１５ａ上でファンクションブロック１１６ａが呼び出されると、マイクロプロセッサ１１９は、ファンクションブロック呼び出し処理１１７を起動してファンクションブロック呼び出し処理１１７を実行する（Ｋ１１３）。
【０００９】
そして、ファンクションブロック呼び出し処理１１７がプログラム１１５ａ上で実行されると、マイクロプロセッサ１１９は、テンポラリサイズテーブル領域１２３の１番地を参照することにより、ファンクションブロック１１６ａがテンポラリデータ領域１２２上で使用するワークメモリのサイズを確認する。そして、マイクロプロセッサ１１９は、ファンクションブロック１１６ａがテンポラリデータ領域１２２上で使用するワークメモリのサイズが２０ワードであると認識すると、ファンクションブロック１１６ａが使用するワークメモリとして２０ワード分のファンクションブロックワーク領域１２４をテンポラリデータ領域１２２に確保する。
【００１０】
そして、ファンクションブロック１１６ａが使用するワークメモリとして２０ワード分のファンクションブロックワーク領域１２４が確保されると、マイクロプロセッサ１１９は、ファンクションブロック１１６ａに処理を移行させ、ユーザプログラム演算処理（Ｋ１１４）をファンクションブロック１１６ａ上で行う。そして、ファンクションブロック１１６ａ上でファンクションブロック１１６ｂが呼び出されると、マイクロプロセッサ１１９は、ファンクションブロック呼び出し処理１１７を起動してファンクションブロック呼び出し処理１１７を実行する（Ｋ１１５）。
【００１１】
そして、ファンクションブロック呼び出し処理１１７がファンクションブロック１１６ａ上で実行されると、マイクロプロセッサ１１９は、テンポラリサイズテーブル領域１２３の２番地を参照することにより、ファンクションブロック１１６ｂがテンポラリデータ領域１２２上で使用するワークメモリのサイズを確認する。そして、マイクロプロセッサ１１９は、ファンクションブロック１１６ｂがテンポラリデータ領域１２２上で使用するワークメモリのサイズが１０ワードであると認識すると、ファンクションブロック１１６ｂが使用するワークメモリとして１０ワード分のファンクションブロックワーク領域１２５をテンポラリデータ領域１２２に確保する。
【００１２】
そして、ファンクションブロック１１６ｂが使用するワークメモリとして１０ワード分のファンクションブロックワーク領域１２５が確保されると、マイクロプロセッサ１１９は、ファンクションブロック１１６ｂに処理を移行させ、ユーザプログラム演算処理（Ｋ１１６）をファンクションブロック１１６ｂ上で行う。
そして、ファンクションブロック１１６ｂ上でユーザプログラム演算処理が終了すると、マイクロプロセッサ１１９は、ファンクションブロック１１６ａに処理を移行させ、ファンクションブロック復帰処理１１８を起動してファンクションブロック呼び出し処理１１８を実行することで、ファンクションブロック１１６ｂがワークメモリとして使用した１０ワード分のファンクションブロックワーク領域１２５を開放する（Ｋ１１７）。
そして、ファンクションブロック１１６ｂがワークメモリとして使用した１０ワード分のファンクションブロックワーク領域１２５が開放されると、マイクロプロセッサ１１９は、ユーザプログラム演算処理（Ｋ１１８）をファンクションブロック１１６ａ上で行う。
【００１３】
そして、ファンクションブロック１１６ａ上でユーザプログラム演算処理が終了すると、マイクロプロセッサ１１９は、プログラム１１５ａに処理を移行させ、ファンクションブロック復帰処理１１８を起動してファンクションブロック呼び出し処理１１８を実行することで、ファンクションブロック１１６ａがワークメモリとして使用した２０ワード分のファンクションブロックワーク領域１２４を開放する（Ｋ１１９）。
そして、ファンクションブロック１１６ａがワークメモリとして使用した２０ワード分のファンクションブロックワーク領域１２４が開放されると、マイクロプロセッサ１１９は、ユーザプログラム演算処理（Ｋ１２０）および出力データ処理（Ｋ１２１）をプログラム１１５ａ上で行う。
【００１４】
図１８は、従来のファンクションブロック呼び出し処理およびファンクションブロック復帰処理を示すフローチャートである。
図１８において、ファンクションブロック呼び出し処理では、マイクロプロセッサ１１９は、テンポラリサイズテーブル領域１２３を参照することにより、各ファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎが使用するテンポラリデータ領域１２２のサイズを確認する（ステップＳ２１）。
そして、各ファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎが使用するテンポラリデータ領域１２２のサイズがテンポラリデータ領域１２２の総容量サイズを超える場合（ステップＳ２２）、システム異常として扱う（ステップＳ２４）。
【００１５】
一方、各ファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎが使用するテンポラリデータ領域１２２のサイズがテンポラリデータ領域１２２の総容量サイズ以下の場合、テンポラリサイズテーブル領域１２３にて指定されたサイズ分のテンポラリデータ領域１２２を確保する。
また、ファンクションブロック復帰処理では、マイクロプロセッサ１１９は、各ファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎがワークメモリとして使用した分のテンポラリデータ領域１２２を開放する（ステップＳ２５）。
以上のような処理を、従来のプログラマブルコントローラは行っていた。
【００１６】
また、例えば、特許文献１には、ユーザプログラムが格納されたユーザメモリと、ユーザメモリにアクセスし、ユーザプログラムで規定される命令を読み出すとともに、命令を解読し、演算実行するＡＳＩＣと、演算実行する際に使用されるデータメモリとを設け、データメモリには、構造化されたデータが格納されるとともに、そのデータメモリへのアクセスが、予め設定した基底アドレスからのオフセットにより実行可能とすることで、間接参照方式のメリット（小メモリ容量、容易な編集）を発揮しつつ、演算処理の高速化を図れるようにする方法が開示されている。
【特許文献１】特開２００３−２２１８２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１７】
しかしながら、従来のプログラマブルコントローラでは、ファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎがワークメモリとして使用するサイズ分だけテンポラリデータ領域１２２が確保されるため、テンポラリデータ領域１２２を有効活用することができるが、そのためにはファンクションブロック１１６ａ、１１６ｂ、・・・、１１６ｎが呼び出されるごとにテンポラリサイズテーブル領域１２３を検索する必要があり、ユーザプログラムのオーバヘッドになるという問題があった。
【００１８】
また、特許文献１に開示された方法では、親プログラムから呼び出される子プログラム内でローカルに使用されるテンポラリデータ領域を確保することができないため、ユーザプログラムの実行性能が劣るという問題があった。
そこで、本発明の目的は、テンポラリサイズテーブル領域を参照することなく、ファンクションブロックがワークメモリとして使用するサイズ分だけテンポラリデータ領域を確保することが可能なプログラマブルコントローラおよびファンクションブロック呼び出し処理プログラムを提供することである。
【課題を解決するための手段】
【００１９】
上述した課題を解決するために、請求項１記載のプログラマブルコントローラによれば、ユーザプログラム上で呼び出されるファンクションブロックを記憶するファンクションブロック記憶手段と、前記ファンクションブロックの実行時に前記ファンクションブロックがワークメモリとして使用するテンポラリデータ記憶手段と、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズを内部に保持し、前記テンポラリサイズに基づいて前記ファンクションブロックがワークメモリとして使用するサイズ分の領域を前記テンポラリデータ記憶手段上で確保するファンクションブロック呼び出し処理手段とを備えることを特徴とする。
【００２０】
また、請求項２記載のプログラマブルコントローラによれば、ユーザプログラム上で呼び出されるファンクションブロックを記憶するファンクションブロック記憶手段と、前記ファンクションブロックの実行時に前記ファンクションブロックがワークメモリとして使用するテンポラリデータ記憶手段と、前記ファンクションブロックが前記ワークメモリとして使用可能な予め決められたサイズ分の領域を前記テンポラリデータ記憶手段上で確保するファンクションブロック呼び出し処理手段と、前記ファンクションブロックが前記ワークメモリとして使用するサイズ分に対応した領域を前記テンポラリデータ記憶手段上で確保する可変長対応ファンクションブロック呼び出し処理手段と、前記ファンクションブロックを呼び出す場合、前記ファンクションブロックがワークメモリとして使用するサイズに基づいて、前記ファンクションブロック呼び出し処理手段または前記可変長対応ファンクションブロック呼び出し処理手段を選択するファンクションブロック呼び出し選択手段とを備えることを特徴とする。
【００２１】
また、請求項３記載のプログラマブルコントローラによれば、前記ファンクションブロック呼び出し選択手段は、前記ファンクションブロックがワークメモリとしての使用するサイズに一致する領域を確保するファンクションブロック呼び出し処理手段がある場合、前記ファンクションブロック呼び出し処理手段を選択し、前記ファンクションブロックがワークメモリとしての使用するサイズに一致する領域を確保するファンクションブロック呼び出し処理手段がない場合、前記可変長対応ファンクションブロック呼び出し処理手段を選択することを特徴とする。
【００２２】
また、請求項４記載のプログラマブルコントローラによれば、前記ファンクションブロック呼び出し選択手段は、前記ファンクションブロック呼び出し処理手段にて確保される領域の使用率が閾値以上の場合、前記ファンクションブロック呼び出し処理手段を選択し、前記ファンクションブロック呼び出し処理手段にて確保される領域の使用率が閾値未満の場合、前記可変長対応ファンクションブロック呼び出し処理手段を選択することを特徴とする。
【００２３】
また、請求項５記載のプログラマブルコントローラによれば、前記ファンクションブロックがワークメモリとして使用したサイズ分の領域を前記テンポラリデータ記憶手段上で開放する可変長対応ファンクションブロック復帰処理手段を備えることを特徴とする。
また、請求項６記載のプログラマブルコントローラによれば、前記ファンクションブロック呼び出し処理手段は、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズに応じて複数設けられていることを特徴とする。
【００２４】
また、請求項７記載のプログラマブルコントローラによれば、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズを内部に保持し、前記テンポラリサイズに基づいて前記ファンクションブロックがワークメモリとして使用したサイズ分の領域を前記テンポラリデータ記憶手段上で開放するファンクションブロック復帰処理手段を備えることを特徴とする。
また、請求項８記載のプログラマブルコントローラによれば、前記ファンクションブロック復帰処理手段は、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズに応じて複数設けられていることを特徴とする。
【００２５】
また、請求項９記載のファンクションブロック呼び出し処理プログラムによれば、ユーザプログラム上でファンクションブロックを呼び出すステップと、前記ファンクションブロックがワークメモリとして使用する分としてシステムプログラムに保持されたテンポラリサイズに基づいて、前記ファンクションブロックがワークメモリとして使用するサイズ分のテンポラリデータ領域を確保するステップとをコンピュータに実行させることを特徴とする。
【００２６】
また、請求項１０記載のファンクションブロック呼び出し処理プログラムによれば、ユーザプログラム上でファンクションブロックを呼び出すステップと、前記ファンクションブロックがワークメモリとして使用するサイズに基づいて、前記ファンクションブロックがワークメモリとして使用可能な予め決められたサイズ分のテンポラリデータ領域を確保するか、あるいは前記ファンクションブロックがワークメモリとして使用するサイズ分に対応したテンポラリデータ領域を確保する処理を選択するステップとをコンピュータに実行させることを特徴とする。
【発明の効果】
【００２７】
以上説明したように、本発明によれば、ファンクションブロックがワークメモリとして使用する分のテンポラリサイズ種類分の呼び出し処理を持ち、これらをシステムプログラムに保持することにより、テンポラリサイズテーブル領域を参照することなく、ファンクションブロックがワークメモリとして使用するサイズ分だけテンポラリデータ領域を確保することが可能となる。このため、ユーザプログラムのオーバヘッドを削減しつつ、テンポラリデータ領域を有効活用することができ、ユーザプログラムの実行性能を向上させることができる。
【発明を実施するための最良の形態】
【００２８】
以下、本発明の実施形態に係るプログラマブルコントローラについて図面を参照しながら説明する。
図１は、本発明の第１実施形態に係るプログラマブルコントローラに搭載されるＣＰＵモジュールの概略構成を示すブロック図である。
図１において、ＣＰＵモジュール１１には、マイクロプロセッサ１９、プログラムＲＡＭ１２およびデータＲＡＭ２０が設けられている。ここで、プログラムＲＡＭ１２には、ユーザ側で作成されるユーザプログラム１３およびメーカ側で作成されるシステムプログラム１４を格納することができる。そして、ユーザプログラム１３は、プログラム１５ａ、１５ｂ、・・・、１５ｏおよびファンクションブロック１６ａ、１６ｂ、・・・、１６ｎから構成することができる。なお、プログラム１５ａ、１５ｂ、・・・、１５ｏおよびファンクションブロック１６ａ、１６ｂ、・・・、１６ｎは同一の言語で記述することができ、プログラム１５ａ、１５ｂ、・・・、１５ｏは定周期またはサイクリックに起動され、ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎはプログラム１５ａ、１５ｂ、・・・、１５ｏから呼び出される機能モジュールである。
【００２９】
また、システムプログラム１４には、ユーザプログラム１３上でファンクションブロック１６ａ、１６ｂ、・・・、１６ｎを呼び出す複数のファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍおよび呼び出されたファンクションブロック１６ａ、１６ｂ、・・・、１６ｎから元の処理に復帰するファンクションブロック復帰処理１８ａ、１８ｂ、・・・、１８ｍを実装することができる。なお、ファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍは、ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎがワークメモリとして使用する分のテンポラリサイズに応じて複数設けることができる。また、ファンクションブロック復帰処理１８ａ、１８ｂ、・・・、１８ｍは、ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎがワークメモリとして使用する分のテンポラリサイズに応じて複数設けることができる。
【００３０】
また、データＲＡＭ２０には、ユーザプログラム１３が使用するユーザデータ領域２１およびファンクションブロック１６ａ、１６ｂ、・・・、１６ｎがワークメモリとして使用するスタック構造のテンポラリデータ領域２２が設けられている。
ここで、ファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍおよびファンクションブロック復帰処理１８ａ、１８ｂ、・・・、１８ｍは、ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎがワークメモリとして使用する分のテンポラリサイズ２７、２８を固定データとして内部に保持することができる。
【００３１】
そして、マイクロプロセッサ１９は、ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎを呼び出す場合、そのファンクションブロック１６ａ、１６ｂ、・・・、１６ｎがワークメモリとして使用する分に対応したテンポラリサイズ２７が記憶されたファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍを呼び出すことができる。そして、ファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍは、その内部にそれぞれ記憶されたテンポラリサイズ２７分の容量をテンポラリデータ領域２２に確保することができる。
【００３２】
また、マイクロプロセッサ１９は、ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎからの復帰を行う場合、そのファンクションブロック１６ａ、１６ｂ、・・・、１６ｎがワークメモリとして使用した分に対応したテンポラリサイズ２８が記憶されたファンクションブロック復帰処理１８ａ、１８ｂ、・・・、１８ｍを呼び出すことができる。そして、ファンクションブロック復帰処理１８ａ、１８ｂ、・・・、１８ｍは、その内部にそれぞれ記憶されたテンポラリサイズ２８分の容量をテンポラリデータ領域２２上で開放することができる。
【００３３】
例えば、ファンクションブロック１６ａが使用するテンポラリデータ領域２２のサイズが２０ワードの場合、ファンクションブロック呼び出し処理１７ａおよびファンクションブロック復帰処理１８ａには、テンポラリサイズ２７、２８として２０ワードと記憶することができる。また、ファンクションブロック１６ｂが使用するテンポラリデータ領域２２のサイズが１０ワードの場合、ファンクションブロック呼び出し処理１７ｂおよびファンクションブロック復帰処理１８ｂには、テンポラリサイズ２７、２８として１０ワードと記憶することができる。
【００３４】
そして、ユーザプログラム１３上でファンクションブロック１６ａが呼び出される場合、そのファンクションブロック１６ａがワークメモリとして使用する分の２０ワードという値がテンポラリサイズ２７として記憶されたファンクションブロック呼び出し処理１７ａを起動することができる。そして、ファンクションブロック呼び出し処理１７ａが起動されると、ファンクションブロック１６ａが使用するワークメモリとして２０ワード分のファンクションブロックワーク領域２４をテンポラリデータ領域２２に確保することができる。
【００３５】
また、ユーザプログラム１３上でファンクションブロック１６ｂが呼び出される場合、そのファンクションブロック１６ｂがワークメモリとして使用する分の１０ワードという値がテンポラリサイズ２７として記憶されたファンクションブロック呼び出し処理１７ｂを起動することができる。そして、ファンクションブロック呼び出し処理１７ｂが起動されると、ファンクションブロック１６ｂが使用するワークメモリとして１０ワード分のファンクションブロックワーク領域２５をテンポラリデータ領域２２に確保することができる。
【００３６】
また、呼び出されたファンクションブロック１６ａから元の処理に復帰する場合、そのファンクションブロック１６ａがワークメモリとして使用した分の２０ワードという値がテンポラリサイズ２８として記憶されたファンクションブロック復帰処理１８ａを起動することができる。そして、ファンクションブロック復帰処理１８ａが起動されると、ファンクションブロック１６ａがワークメモリとして使用した２０ワード分のファンクションブロックワーク領域２４をテンポラリデータ領域２２上で開放することができる。
【００３７】
また、呼び出されたファンクションブロック１６ｂから元の処理に復帰する場合、そのファンクションブロック１６ｂがワークメモリとして使用した分の１０ワードという値がテンポラリサイズ２８として記憶されたファンクションブロック復帰処理１８ｂを起動することができる。そして、ファンクションブロック復帰処理１８ｂが起動されると、ファンクションブロック１６ｂがワークメモリとして使用した１０ワード分のファンクションブロックワーク領域２５をテンポラリデータ領域２２上で開放することができる。
【００３８】
図２は、本発明の第１実施形態に係るコンパイラが生成するコードの一例を示す図である。
図２において、例えば、プログラム１５ａ上では図１のファンクションブロック呼び出し処理１７ａにてファンクションブロック１６ａが呼び出され、ファンクションブロック１６ａ上では図１のファンクションブロック呼び出し処理１７ｂにてファンクションブロック１６ｂが呼び出されるようにコード生成を行うことができる。
【００３９】
図３は、本発明の第１実施形態に係るファンクションブロックの実行方法を示す図である。
図３において、図１のマイクロプロセッサ１９は、プログラム１５ａが起動されると、入力データ処理（Ｋ１１）およびユーザプログラム演算処理（Ｋ１２）を行う。そして、プログラム１５ａ上でファンクションブロック１６ａが呼び出されると、マイクロプロセッサ１９は、そのファンクションブロック１６ａがワークメモリとして使用する分の２０ワードという値がテンポラリサイズ２７として記憶されたファンクションブロック呼び出し処理１７ａを起動してファンクションブロック呼び出し処理１７ａを実行する（Ｋ１３）。
【００４０】
そして、ファンクションブロック呼び出し処理１７ａがプログラム１５ａ上で実行されると、マイクロプロセッサ１９は、ファンクションブロック呼び出し処理１７ａが保持するテンポラリサイズ２７に基づいて、ファンクションブロック１６ａがテンポラリデータ領域２２上で使用するワークメモリのサイズが２０ワードであると認識することができる。そして、マイクロプロセッサ１９は、ファンクションブロック１６ａが使用するワークメモリとして２０ワード分のファンクションブロックワーク領域２４をテンポラリデータ領域２２に確保する。
【００４１】
そして、ファンクションブロック１６ａが使用するワークメモリとして２０ワード分のファンクションブロックワーク領域２４が確保されると、マイクロプロセッサ１９は、ファンクションブロック１６ａに処理を移行させ、ユーザプログラム演算処理（Ｋ１４）をファンクションブロック１６ａ上で行う。そして、ファンクションブロック１６ａ上でファンクションブロック１６ｂが呼び出されると、マイクロプロセッサ１９は、そのファンクションブロック１６ｂがワークメモリとして使用する分の１０ワードという値がテンポラリサイズ２７として記憶されたファンクションブロック呼び出し処理１７ｂを起動してファンクションブロック呼び出し処理１７ｂを実行する（Ｋ１５）。
【００４２】
そして、ファンクションブロック呼び出し処理１７ｂがファンクションブロック１６ｂ上で実行されると、マイクロプロセッサ１９は、ファンクションブロック呼び出し処理１７ｂが保持するテンポラリサイズ２７に基づいて、ファンクションブロック１６ｂがテンポラリデータ領域２２上で使用するワークメモリのサイズが１０ワードであると認識することができる。そして、マイクロプロセッサ１９は、ファンクションブロック１６ｂが使用するワークメモリとして１０ワード分のファンクションブロックワーク領域２５をテンポラリデータ領域２２に確保する。
そして、ファンクションブロック１６ｂが使用するワークメモリとして１０ワード分のファンクションブロックワーク領域２５が確保されると、マイクロプロセッサ１９は、ファンクションブロック１６ｂに処理を移行させ、ユーザプログラム演算処理（Ｋ１６）をファンクションブロック１６ｂ上で行う。
【００４３】
そして、ファンクションブロック１６ｂ上でユーザプログラム演算処理が終了すると、マイクロプロセッサ１９は、ファンクションブロック１６ａに処理を移行させる。そして、マイクロプロセッサ１９は、そのファンクションブロック１６ｂがワークメモリとして使用した分の１０ワードという値がテンポラリサイズ２８として記憶されたファンクションブロック復帰処理１８ｂを起動してファンクションブロック呼び出し処理１８ｂを実行することで、ファンクションブロック１６ｂがワークメモリとして使用した１０ワード分のファンクションブロックワーク領域２５を開放する（Ｋ１７）。
そして、ファンクションブロック１６ｂがワークメモリとして使用した１０ワード分のファンクションブロックワーク領域２５が開放されると、マイクロプロセッサ１９は、ユーザプログラム演算処理（Ｋ１８）をファンクションブロック１６ａ上で行う。
【００４４】
そして、ファンクションブロック１６ａ上でユーザプログラム演算処理が終了すると、マイクロプロセッサ１９は、プログラム１５ａに処理を移行させる。そして、マイクロプロセッサ１９は、そのファンクションブロック１６ａがワークメモリとして使用した分の２０ワードという値がテンポラリサイズ２８として記憶されたファンクションブロック復帰処理１８ａを起動してファンクションブロック呼び出し処理１８ａを実行することで、ファンクションブロック１６ａがワークメモリとして使用した２０ワード分のファンクションブロックワーク領域２４を開放する（Ｋ１９）。
そして、ファンクションブロック１６ａがワークメモリとして使用した２０ワード分のファンクションブロックワーク領域２４が開放されると、マイクロプロセッサ１９は、ユーザプログラム演算処理（Ｋ２０）および出力データ処理（Ｋ２１）をプログラム１５ａ上で行う。
【００４５】
図４は、本発明の第１実施形態に係るファンクションブロック呼び出し処理およびファンクションブロック復帰処理を示すフローチャートである。
図４において、ファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍでは、マイクロプロセッサ１９は、ファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍにそれぞれ保持されたテンポラリサイズ２７に基づいて、各ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎが使用するテンポラリデータ領域２２のサイズを確認する。そして、各ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎが使用するテンポラリデータ領域２２のサイズがテンポラリデータ領域２２の総容量サイズを超える場合（ステップＳ１１）、システム異常として扱う（ステップＳ１３）。
【００４６】
一方、各ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎが使用するテンポラリデータ領域２２のサイズがテンポラリデータ領域２２の総容量サイズ以下の場合、テンポラリサイズ２７にて指定されたサイズ分のテンポラリデータ領域２２を確保する。なお、テンポラリデータ領域２２を使い切らない場合は、空き領域２６が発生する。
また、ファンクションブロック復帰処理１８ａ、１８ｂ、・・・、１８ｍでは、マイクロプロセッサ１９は、各ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎがワークメモリとして使用した分のテンポラリデータ領域２２を開放する（ステップＳ１４）。
【００４７】
これにより、図１４のテンポラリサイズテーブル領域１２３を参照することなく、各ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎがワークメモリとして使用するサイズ分だけテンポラリデータ領域２２を確保することが可能となる。このため、ユーザプログラム１３のオーバヘッドを削減しつつ、テンポラリデータ領域２２を有効活用することができ、ユーザプログラム１３の実行性能を向上させることができる。
【００４８】
なお、上述した第１実施形態では、ファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍにてそれぞれ確保されるテンポラリサイズを細かく用意すればするほど（例えば、２ワード用、４ワード用、６ワード用、１００ワード用、１０２ワード用、９９８ワード用、１０００ワード用、１００２ワード用、・・・）、システムプログラム１４のサイズが膨らみ、プログラマブルコントローラが必要とするプログラムＲＡＭ１２の容量が大きくなりコストアップを招く。
【００４９】
このため、ファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍにてそれぞれ確保されるテンポラリサイズを大まかに区切ると、（例えば、１０ワード用、５０ワード用、１００ワード用、５００ワード用、１０００ワード用、・・・）、実際に実行されるファンクションブロック１６ａ、１６ｂ、・・・、１６ｎに対して丁度サイズの合うファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍが用意されていない場合、大き目のサイズに対応したファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍを選択しなければならない。このため、大き目のサイズに対応したファンクションブロック呼び出し処理１７ａ、１７ｂ、・・・、１７ｍを選択した時に、ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎにて使用されずに無駄に確保されるテンポラリデータ領域６２が存在し、容量に余裕のあるプログラムＲＡＭ１２をプログラマブルコントローラに搭載する必要があることから、やはりコストアップの要因となる。
【００５０】
また、ユーザによっては、プログラムＲＡＭ１２の使用効率が多少悪くても、実行時間を短くしたいという要求が強い場合もあれば、ファンクションブロック１６ａ、１６ｂ、・・・、１６ｎが何段もネストしているために、テンポラリデータ領域２２をできるだけ効率よく使い、テンポラリデータ領域２２が容量オーバになるのを防止したいという要求が強い場合もある。
このため、プログラムＲＡＭ１２の容量の増大を抑制しつつ、ユーザプログラム１３のオーバヘッド時間を少なくしてユーザプログラム１３の実行性能を高く維持できるような機能をプログラマブルコントローラに持たせるようにしてもよい。また、ユーザの要求に応じた最適な実行コードを生成する機能をプログラマブルコントローラに持たせるようにしてもよい。
【００５１】
図５は、本発明の第２実施形態に係るプログラマブルコントローラに搭載されるＣＰＵモジュールの概略構成を示すブロック図、図６は、図５のテンポラリデータ領域およびテンポラリサイズテーブル領域の概略構成を示すブロック図である。
図５において、ＣＰＵモジュール５１には、マイクロプロセッサ５９、プログラムＲＡＭ５２およびデータＲＡＭ６０が設けられている。ここで、プログラムＲＡＭ５２には、ユーザ側で作成されるユーザプログラム５３およびメーカ側で作成されるシステムプログラム５４を格納することができる。そして、ユーザプログラム５３は、プログラム５５ａ、５５ｂ、・・・、５５ｏおよびファンクションブロック５６ａ、５６ｂ、・・・、５６ｎから構成することができる。なお、プログラム５５ａ、５５ｂ、・・・、５５ｏおよびファンクションブロック５６ａ、５６ｂ、・・・、５６ｎは同一の言語で記述することができ、プログラム５５ａ、５５ｂ、・・・、５５ｏは定周期またはサイクリックに起動され、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎはプログラム５５ａ、５５ｂ、・・・、５５ｏから呼び出される機能モジュールである。
【００５２】
また、データＲＡＭ６０には、ユーザプログラム５３が使用するユーザデータ領域６１およびファンクションブロック５６ａ、５６ｂ、・・・、５６ｎがワークメモリとして使用するスタック構造のテンポラリデータ領域６２が設けられている。
さらに、データＲＡＭ６０には、各ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎが使用するテンポラリデータ領域６２のサイズを指示するテンポラリサイズテーブル領域７２が設けられている。
なお、ユーザプログラム５３には、後述のコンパイラが生成し、マイクロプロセッサ５９が実行可能な形式のコードが格納される。また、このコンパイラにて生成されたテンポラリサイズテーブルが、テンポラリサイズテーブル領域７２に格納される。
【００５３】
以降、ＣＰＵモジュール５１においては、マイクロプロセッサ５９はこれらの情報に従い処理を実行するが、コードの記述内容によってファンクションブロックの呼び出し／復帰処理の様態が異なる。この呼び出し／復帰処理について説明する。
システムプログラム５４には、ユーザプログラム５３上でファンクションブロック５６ａ、５６ｂ、・・・、５６ｎを呼び出す複数のファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍおよび呼び出されたファンクションブロック５６ａ、５６ｂ、・・・、５６ｎから元の処理に復帰するファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍを実装することができる。
【００５４】
ここで、ファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍは、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎがワークメモリとして使用可能な予め決められたサイズ分の容量をテンポラリデータ領域６２上にそれぞれ確保することができる。また、ファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍは、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎがワークメモリとして使用した予め決められたサイズ分の容量をテンポラリデータ領域６２から開放することができる。
【００５５】
なお、ファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍは、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎがワークメモリとして使用する分のテンポラリサイズに応じて複数設けることができる。また、ファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍは、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎがワークメモリとして使用する分のテンポラリサイズに応じて複数設けることができる。
【００５６】
また、ファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍは、例えば、１０ワード、２０ワード、３０ワードというように１０ワード刻みの容量をテンポラリデータ領域６２上にそれぞれ確保することができる。また、ファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍは、例えば、１０ワード、２０ワード、３０ワードというように１０ワード刻みの容量をテンポラリデータ領域６２上からそれぞれ開放することができる。
【００５７】
さらに、システムプログラム５４には、ユーザプログラム５３上でファンクションブロック５６ａ、５６ｂ、・・・、５６ｎを呼び出す可変長対応ファンクションブロック呼び出し処理７３および呼び出されたファンクションブロック５６ａ、５６ｂ、・・・、５６ｎから元の処理に復帰する可変長対応ファンクションブロック復帰処理７４を実装することができる。
ここで、可変長対応ファンクションブロック呼び出し処理７３は、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎがワークメモリとして使用するサイズ分の容量をテンポラリデータ領域６２上に確保することができる。また、可変長対応ファンクションブロック復帰処理７４は、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎがワークメモリとして使用したサイズ分の容量をテンポラリデータ領域６２上から開放することができる。
【００５８】
以上のファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍ、ファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍ、可変長対応ファンクションブロック呼び出し処理７３、可変長対応ファンクションブロック復帰処理７４は、プログラム５５ａ、５５ｂ、・・・、５５ｏ或いはファンクションブロック５６ａ、５６ｂ、・・・、５６ｎから呼び出される。マイクロプロセッサ５９は、後述のコンパイラによって生成される実行コードに応じてこれらを呼び出す。
【００５９】
図６において、テンポラリサイズテーブル領域７２には、各ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎが使用するテンポラリデータ領域６２のサイズを記憶する番地１、２、・・・、ｎがそれぞれ割り当てられる。例えば、ファンクションブロック５６ｂが使用するテンポラリデータ領域６２のサイズとして、テンポラリサイズテーブル領域７２の番地２には１６ワードと記憶されており、ファンクションブロック５６ｂを実行前に可変長対応ファンクションブロック呼び出し処理７３によって、テンポラリデータ領域６２にファンクションブロックワーク領域６５が１６ワード確保される。ここで、テンポラリデータ領域６２にファンクションブロックワーク領域６４として２０ワード確保されるが、テンポラリサイズテーブル領域７２の番地１は「空き」となっている。これは、後述のコンパイルの時点でファンクションブロックに割り当てる領域のサイズをコードレベルで記載しているからであり、コードではファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍ／ファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍによる処理を指示している。ここで、マイクロプロセッサ５９はテンポラリサイズテーブル領域７２を参照せずに処理している。一方で、ファンクションブロック５６ｂの場合、コードでは可変長対応ファンクションブロック呼び出し処理７３／可変長対応ファンクションブロック復帰処理７４による処理を指示しており、テンポラリサイズテーブル領域７２を参照しながら処理する。
なお、テンポラリデータ領域６２を使い切らない場合は、空き領域６６が発生する。
【００６０】
図７は、本発明の第２実施形態に係るコンパイラが生成するコードの一例を示す図である。
図７において、例えば、プログラム５５ａ上では、図５のファンクションブロック呼び出し処理５７ａにてファンクションブロック５６ａが呼び出され、ファンクションブロック５６ａ上では、図５の可変長対応ファンクションブロック呼び出し処理７３にてファンクションブロック５６ｂが呼び出されるようにコード生成を行うことができる。
ここで、「ＣＡＬ  ＦＢｙｙ，ｘ」は命令の書式であり、ｘと言うＦＢを呼び出し、その際にはｙｙと言うメモリサイズを確保する。ｙｙは数値である場合や、＿Ｖのように可変値を指す場合がある。この命令を後述のコンパイラにて処理すると、ｙｙが数値等の場合はファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５7ｍを、ｙｙが＿Ｖの場合は可変長対応ファンクションブロック呼び出し処理７３を実行させるコードを生成する。
【００６１】
同様に、「ＲＥＴ  ＦＢｙｙ」は命令の書式であり、ｙｙと言うメモリサイズを開放する。ｙｙが数値である場合や、＿Ｖのように可変値を指す場合がある。この命令をコンパイラにて処理すると、ｙｙが数値等の場合はファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍを、ｙｙが＿Ｖの場合は後者は可変長対応ファンクションブロック復帰処理７４を実行させるコードを生成する。ここで、引数の情報にｘが無いのは、現在実行されている箇所が呼び出されたＦＢであり、自身のＦＢを終了すれば良いからである。
なお、上記ｙｙやｘの表記は桁数や文字数を制限する訳ではなく、説明を分かり易くする為に本実施例の表記に合わせただけであり、発明を限定するものではない。＿Ｖについても同様である。
【００６２】
図８は、本発明の第２実施形態に係るコンパイラの動作を概念的に示す図である。
図８において、コンパイラ８０は、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎがワークメモリとして使用するサイズに基づいて、ファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍまたは可変長対応ファンクションブロック呼び出し処理７３が選択された実行コード（ＣＡＬ  ＦＢｙｙ，ｘ）を生成するアルゴリズムと、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎがワークメモリとして使用したサイズに基づいて、ファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍまたは可変長対応ファンクションブロック復帰処理７４が選択された実行コード（ＲＥＴ  ＦＢｙｙ）を生成するアルゴリズムとを備える。
【００６３】
前述のワークメモリとして使用するサイズは、ユーザプログラム（ソース）７５におけるＦＢごとにサイズを計算する。例えば、ＦＢ１は２０ワード、ＦＢ２は１６ワードのテンポラリサイズを必要とするものとする。なお、テンポラリサイズはソースコードにおける変数の個数や構成から、コンパイラにより導出する。
また、ＦＢごとのサイズが、例えば、１８ワード、８ワード、３０ワード、１０ワード、２２ワード…のように細分化される場合、これに応じたテンポラリサイズを用意する必要がある。ところが、第１実施形態で述べたように、全てのテンポラリサイズを用意すると図５のプログラムＲＡＭ５２の容量を大きくする必要が発生し、コストアップを招く。そこで、ユーザプログラム（ソース）７５より、ある程度のテンポラリサイズをリストアップしたものが、サポートサイズテーブル７１になる。ここでは、一例として、１０ワード単位で用意している。
【００６４】
コンパイラ８０は、ユーザプログラム（ソース）７５と、実行予定のプログラマブルコントローラがサポートしているファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍのテンポラリサイズが列挙されているサポートサイズテーブル７１を読み込み、ユーザプログラム（ソース）７５の実行コード（プログラム５５ａ、５７ｂ、・・・、５７ｏ）と、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎの番号に対応するテンポラリサイズテーブル（テンポラリサイズテーブル領域７２）とを生成し出力する。
【００６５】
そして、コンパイラ８０にて生成された実行コード（プログラム５５ａ、５５ｂ、・・・、５５ｏ）とテンポラリサイズテーブル（テンポラリサイズテーブル領域７２）とは、図５のプログラムＲＡＭ５２およびテンポラリサイズテーブル領域７２にそれぞれ転送され、マイクロプロセッサ５９により実行される。この際に、実行形式のファンクションブロック５６ａ、５６ｂ、・・・、５６ｎも図５のプログラムＲＡＭ５２に転送される。
【００６６】
ここで、コンパイラ８０は、ユーザプログラム（ソース）７５を読み込み、ＰＧ１００というプログラム５５ａのコンパイル過程において、ＦＢ１というファンクションブロック５６ａのコールを検出する。そして、コールするＦＢ１というファンクションブロック５６ａのテンポラリサイズを取得する。なお、ここで取得するテンポラリサイズは、コンパイラにより、すでに算出済みである。
ここでは、ＦＢ１というファンクションブロック５６ａのテンポラリサイズは２０ワードであるので、ＦＢ１というファンクションブロック５６ａのサイズをＮ＝２０に設定する。次に、サポートサイズテーブル７１を参照し、実行予定のプログラマブルコントローラにサイズＮ＝２０専用のファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍがあるか検索する。
【００６７】
そして、サポートサイズテーブル７１を参照した結果、サイズＮ＝２０専用のファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍがある場合、ＰＧ１００というプログラム５５ａの実行コードを“ＣＡＬ  ＦＢｙｙ、ｘ”と決定し生成する。なお、ＰＧ１００というプログラム５５ａの実行コードにおいて、呼び出すＦＢが１で、サイズＮ＝２０なので、“ＣＡＬ  ＦＢ２０，１”と記述される。
【００６８】
次に、コンパイラ８０は、ＦＢ１というファンクションブロック５６ａのコンパイルに進み、その過程において、ＦＢ２というファンクションブロック５６ｂのコールを検出する。そして、ＦＢ２というファンクションブロック５６ｂのコールに対応する実行コードを決定し生成する。ここで、ＦＢ２というファンクションブロック５６ｂのテンポラリサイズは１６ワードであり、このサイズはファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍではサポートされていない。このため、コンパイラ８０は、可変長対応ファンクションブロック呼び出し処理７３を選択し、ＦＢ１というファンクションブロック５６ａの実行コードとして“ＣＡＬ  ＦＢ＿Ｖ，２”を生成するとともに、テンポラリサイズテーブル領域７２のＦＢ２というファンクションブロック５６ｂに対応する箇所に１６ワードと記録する。
【００６９】
また、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎのコードの末尾には呼び元のプログラム５５ａ、５５ｂ、・・・、５５ｏまたはファンクションブロック５６ａ、５６ｂ、・・・、５６ｎに戻るための復帰処理がある。ここでのコンパイルでは、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎのテンポラリサイズに一致する復帰処理をファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍがサポートしているならば、固定サイズの復帰処理のコード（ＲＥＴ  ＦＢｙｙ）を生成し、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎのテンポラリサイズに一致する復帰処理をファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍがサポートしていないならば、可変長対応の復帰処理のコード（ＲＥＴ  ＦＢ＿Ｖ）を生成して実行コードを生成するとともに、テンポラリサイズテーブル領域７２のＦＢ番号に該当する箇所にテンポラリサイズを格納する。
【００７０】
例えば、ＦＢ２というファンクションブロック５６ｂはテンポラリサイズが１６ワードで、このサイズはファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍにてサポートされていないので、可変長対応の復帰処理のコード（“ＲＥＴ  ＦＢ＿Ｖ”）を生成する。また、ＦＢ１というファンクションブロック５６ａはテンポラリサイズが２０ワードでファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍにてサポートされているので、固定サイズ復帰処理のコード（“ＲＥＴ  ＦＢ２０”）を生成する。
【００７１】
このようにして、コンパイラ８０は、ユーザプログラム（ソース）７５をコンパイルし、実行コード５５ａ、５６ａ、５６ｂ、及びテンポラリサイズテーブル領域７２を生成することができる。
そして、コンパイラ８０にて生成された実行コードおよびテンポラリサイズテーブルをプログラマブルコントローラに転送し、これらが実行される。
ここで、コンパイラ８０にて生成された実行コード（ＰＧ１００，ＦＢ１，ＦＢ２）は、図５のＣＰＵモジュール５１のプログラムＲＡＭ５２内のユーザプログラム５３の領域に格納され、マイクロプロセッサ５９にて解釈され実行される。なお、図８のテンポラリサイズテーブル領域７２は、図５のデータＲＡＭ６０内のテンポラリサイズテーブル領域７２に格納され、マイクロプロセッサ５９から参照される。
【００７２】
図９は、本発明の第２実施形態に係るファンクションブロックの実行方法を示す図である。
図９において、図５のマイクロプロセッサ５９は、プログラム５５ａが起動されると、入力データ処理（Ｋ５１）およびユーザプログラム演算処理（Ｋ５２）を行う。そして、プログラム５５ａ上でファンクションブロック５６ａが呼び出されると、マイクロプロセッサ５９は、そのファンクションブロック５６ａがワークメモリとして使用する２０ワード分のテンポラリサイズを確保するファンクションブロック呼び出し処理５７ａを起動してファンクションブロック呼び出し処理５７ａを実行する（Ｋ５３）。
【００７３】
そして、ファンクションブロック呼び出し処理５７ａがプログラム５５ａ上で実行されると、マイクロプロセッサ５９は、ファンクションブロック５６ａが使用するワークメモリとして２０ワード分のファンクションブロックワーク領域６４をテンポラリデータ領域６２に確保する。
そして、ファンクションブロック５６ａが使用するワークメモリとして２０ワード分のファンクションブロックワーク領域６４が確保されると、マイクロプロセッサ５９は、ファンクションブロック５６ａに処理を移行させ、ユーザプログラム演算処理（Ｋ５４）をファンクションブロック５６ａ上で行う。そして、ファンクションブロック５６ａ上でファンクションブロック５６ｂが呼び出されると、マイクロプロセッサ５９は、そのファンクションブロック５６ｂがワークメモリとして使用する１６ワード分のテンポラリサイズを確保する可変長対応ファンクションブロック呼び出し処理７３を起動して可変長対応ファンクションブロック呼び出し処理７３を実行する（Ｋ５５）。
【００７４】
そして、可変長対応ファンクションブロック呼び出し処理７３がファンクションブロック５６ｂ上で実行されると、マイクロプロセッサ５９は、テンポラリサイズテーブル領域７２内のファンクションブロック５６ｂ用の番地を参照して、確保すべきワード数を取得する。今回の例では、ファンクションブロック５６ｂが使用するワークメモリとして１６ワード分のファンクションブロックワーク領域６５をテンポラリデータ領域６２に確保する。
そして、ファンクションブロック５６ｂが使用するワークメモリとして１６ワード分のファンクションブロックワーク領域６５が確保されると、マイクロプロセッサ５９は、ファンクションブロック５６ｂに処理を移行させ、ユーザプログラム演算処理（Ｋ５６）をファンクションブロック５６ｂ上で行う。
【００７５】
そして、ファンクションブロック５６ｂ上でユーザプログラム演算処理が終了すると、マイクロプロセッサ５９は、ファンクションブロック５６ａに処理を移行させる。そして、マイクロプロセッサ５９は、そのファンクションブロック５６ｂがワークメモリとして使用した１６ワード分の領域を開放する可変長対応ファンクションブロック復帰処理７４を起動して可変長対応ファンクションブロック復帰処理７４を実行することで、ファンクションブロック５６ｂがワークメモリとして使用した１６ワード分のファンクションブロックワーク領域６５を開放する。（Ｋ５７）。
そして、ファンクションブロック５６ｂがワークメモリとして使用した１６ワード分のファンクションブロックワーク領域６５が開放されると、マイクロプロセッサ５９は、ユーザプログラム演算処理（Ｋ５８）をファンクションブロック５６ａ上で行う。
【００７６】
そして、ファンクションブロック５６ａ上でユーザプログラム演算処理が終了すると、マイクロプロセッサ５９は、プログラム５５ａに処理を移行させる。そして、マイクロプロセッサ５９は、そのファンクションブロック５６ａがワークメモリとして使用した２０ワード分の領域を開放するファンクションブロック復帰処理５８ａを起動してファンクションブロック呼び出し処理５８ａを実行することで、ファンクションブロック５６ａがワークメモリとして使用した２０ワード分のファンクションブロックワーク領域６４を開放する（Ｋ５９）。
そして、ファンクションブロック５６ａがワークメモリとして使用した２０ワード分のファンクションブロックワーク領域６４が開放されると、マイクロプロセッサ５９は、ユーザプログラム演算処理（Ｋ６０）および出力データ処理（Ｋ６１）をプログラム５５ａ上で行う。
【００７７】
上述した実施形態では、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎがワークメモリとしての使用するサイズに一致する領域を確保するファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍがある場合、そのファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍを選択する方法について説明したが、ファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍにて確保されるテンポラリデータ領域６２の使用率が閾値以上の場合、ファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍを選択するようにしてもよい。
【００７８】
図１０は、本発明の第２実施形態に係るメモリ使用率の算出方法を示す図である。
図１０において、図８のコンパイラ８０にはコンパイル時のオプションとして目標メモリ使用率（０〜１００％）をユーザが与えることができる。
例えば、目標メモリ使用率を８０％とし、ＦＢ１というファンクションブロック５６ａからＦＢ２というファンクションブロック５６ｂをコールする部分をコンパイルするものとする。
【００７９】
この場合、呼び出すＦＢ２というファンクションブロック５６ｂのテンポラリサイズは１６ワードである。そして、１６ワードというサイズをサポートしているファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍはないが、１６ワードよりも大きなサイズをサポートしているものとして、２０ワードというサイズをサポートしているファンクションブロック呼び出し処理５７ａがあるものとする。
【００８０】
そして、２０ワードというサイズをサポートしているファンクションブロック呼び出し処理５７ａを選ぶか否かを決定するため、このファンクションブロック呼び出し処理５７ａを使った場合のテンポラリメモリ使用率（Ｎ／Ｍ）を算出する。ただし、Ｍはファンクションブロック呼び出し処理５７ａにてサポートされているサイズ、Ｎはファンクションブロック５６ｂのテンポラリサイズである。
【００８１】
そして、ファンクションブロック５６ｂのテンポラリサイズは１６ワード、ファンクションブロック呼び出し処理５７ａにてサポートされているサイズは２０ワードなので、Ｎ＝１６、Ｍ＝２０となり、テンポラリメモリ使用率は８０％となる。そして、この値は、目標メモリ使用率以上であるため、ファンクションブロック呼び出し処理５７ａを使うこととし、コンパイラ８０は、実行コードとして（“ＣＡＬ  ＦＢ２０，２”）を生成することができる。
【００８２】
一方、目標メモリ使用率が９０％であった場合、２０ワードというサイズをサポートしているファンクションブロック呼び出し処理５７ａを使用すると、メモリ使用率（Ｎ／Ｍ＝０．８）は目標メモリ使用率に満たない。このため、コンパイラ８０は、可変長対応ファンクションブロック呼び出し処理７３を使うこととし、実行コードとして（“ＣＡＬ  ＦＢ＿Ｖ，２”）を生成することができる。
【００８３】
これにより、ユーザの指定するメモリ効率を満足する範囲内で、実行時間の比較的短いファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍを使用した実行コードを生成することができ、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎの実行の高速化を図ることができる。
なお、コンパイラ８０に認識させられるのであれば、目標メモリ使用率を指定する手段としては、ＧＵＩ（グラフィカルユーザインタフェース）を用いるようにしてもよいし、テキストファイルによる指定であってもよい。
【００８４】
図１１は、本発明の第２実施形態に係るファンクションブロック呼び出し処理を示すフローチャートである。
図１１において、図８のコンパイラ８０は、ユーザプログラム（ソース）７５を読み込み、コールするファンクションブロック５６ａ、５６ｂ、・・・、５６ｎのテンポラリサイズＮを取得する（ステップＳ３１）。
そして、コンパイラ８０は、サポートサイズテーブル７１を参照し、実行予定のプログラマブルコントローラにサイズＮのファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍが実装されているかどうかを検索する（ステップＳ３２）。
【００８５】
そして、実行予定のプログラマブルコントローラにサイズＮのファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍが実装されている場合（ステップＳ３３）、サイズＮを番号ｎに設定し（ステップＳ３４）、実行コード“ＣＡＬ  ＦＢｎ，ｘ”を生成する（ステップＳ３５）。ここでｘはコール対象のファンクションブロックである。
一方、実行予定のプログラマブルコントローラにサイズＮのファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍが実装されていない場合（ステップＳ３３）、サイズＮよりも大きなサイズをサポートするファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍが実装されているかどうかを検索する（ステップＳ３６）。
【００８６】
そして、サイズＮよりも大きなサイズをサポートするファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍが実装されている場合（ステップＳ３７）、そのファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍがサポートするサイズＭと、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎのテンポラリサイズＮとの比率を算出することで、テンポラリメモリ使用率（Ｎ／Ｍ）を算出する。そして、テンポラリメモリ使用率（Ｎ／Ｍ）が目標メモリ使用率以上の場合（ステップＳ３８）、サイズＭを番号ｎに設定し（ステップＳ３９）、実行コード“ＣＡＬ  ＦＢｎ，ｘ”を生成する（ステップＳ３５）。
【００８７】
一方、サイズＮよりも大きなサイズをサポートするファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍが実装されていない場合（ステップＳ３７）またはテンポラリメモリ使用率（Ｎ／Ｍ）が目標メモリ使用率未満の場合（ステップＳ３８）、実行コード“ＣＡＬ  ＦＢ＿Ｖ，ｘ”を生成し（ステップＳ４０）、ＦＢ番号に対応するテンポラリサイズテーブル領域７２にサイズＮを登録する（ステップＳ４１）。
【００８８】
図１２は、本発明の第２実施形態に係るファンクションブロック復帰処理を示すフローチャートである。
図１２において、図８のコンパイラ８０は、ユーザプログラム（ソース）７５を読み込み、リターンするファンクションブロック５６ａ、５６ｂ、・・・、５６ｎのテンポラリサイズＮを取得する（ステップＳ５１）。
そして、コンパイラ８０は、サポートサイズテーブル７１を参照し、実行予定のプログラマブルコントローラにサイズＮのファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍが実装されているかどうかを検索する（ステップＳ５２）。
【００８９】
そして、実行予定のプログラマブルコントローラにサイズＮのファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍが実装されている場合（ステップＳ５３）、サイズＮを番号ｎに設定し（ステップＳ５４）、実行コード“ＲＥＴ  ＦＢｎ”を生成する（ステップＳ５５）。
一方、実行予定のプログラマブルコントローラにサイズＮのファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍが実装されていない場合（ステップＳ５３）、サイズＮよりも大きなサイズをサポートするファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍが実装されているかどうかを検索する（ステップＳ５６）。
【００９０】
そして、サイズＮよりも大きなサイズをサポートするファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍが実装されている場合（ステップＳ５７）、そのファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍがサポートするサイズＭと、ファンクションブロック５６ａ、５６ｂ、・・・、５６ｎのテンポラリサイズＮとの比率を算出することで、テンポラリメモリ使用率（Ｎ／Ｍ）を算出する。そして、テンポラリメモリ使用率（Ｎ／Ｍ）が目標メモリ使用率以上の場合（ステップＳ５８）、サイズＭを番号ｎに設定し（ステップＳ５９）、実行コード“ＲＥＴ  ＦＢｎ”を生成する（ステップＳ５５）。
【００９１】
一方、サイズＮよりも大きなサイズをサポートするファンクションブロック復帰処理５８ａ、５８ｂ、・・・、５８ｍが実装されていない場合（ステップＳ５７）またはテンポラリメモリ使用率（Ｎ／Ｍ）が目標メモリ使用率未満の場合（ステップＳ５８）、実行コード“ＲＥＴ  ＦＢ＿Ｖ”を生成し（ステップＳ６０）、ＦＢ番号に対応するテンポラリサイズテーブル領域７２が未登録ならサイズＮを登録する（ステップＳ６１）。
【００９２】
以上の図１１、図１２の説明において、ｎはサイズＮの値をそのまま格納しても良いし、サイズＮのファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍが実装されている場所の値を格納してもよい。例えば、図８のサポートサイズテーブル７１の順番でファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍが実装されている場合、Ｎ＝２０においては２番目であるファンクションブロック呼び出し処理５７ｂが呼び出し対象になるので、ｎには２を設定する。このようにｎの値はサイズＮのファンクションブロック呼び出し処理５７ａ、５７ｂ、・・・、５７ｍを一意に決められるものであれば何でも良く、例えばアドレス値やファンクションブロック呼び出し名称であっても構わない。上記どのようなｎの情報が実行コードに記載されるかは予め決めておき、この規則は図５のマイクロプロセッサ５９においても反映されているものとする。このｎの情報に従い、マイクロプロセッサ５９は対応した呼び出し／復帰処理を実行するものとする。
【００９３】
また、図１１、図１２のファンクションブロック呼び出し／復帰処理において、呼び出し処理と復帰処理が対で実施されている。そこで、図１１において呼び出されたＦＢ側で、ｎの情報、及び呼び出し元情報を保持し、図１２においてステップＳ３５及びステップＳ４０のみで構成しても構わない。
以上のように第２実施形態では、コンパイラ側で細かな設定処理を実施しＣＰＵモジュール（プログラマブルコントローラ）側ではマイクロプロセッサは実行コードに従って処理するだけなので、プログラムの実行性能が高い。また、テンポラリサイズテーブルを参照する回数を減らしているので第１実施形態に比べオーバヘッド時間も少なくなる。加えて、サポートサイズテーブルにより、ユーザはファンクションブロックに応じて的確にテンポラリサイズを設定できるので、必要なメモリ容量が少なくなるよう効率的にメモリを使用することが可能になる。
【図面の簡単な説明】
【００９４】
【図１】本発明の第１実施形態に係るプログラマブルコントローラに搭載されるＣＰＵモジュールの概略構成を示すブロック図である。
【図２】本発明の第１実施形態に係るコンパイラが生成するコードの一例を示す図である。
【図３】本発明の第１実施形態に係るファンクションブロックの実行方法を示す図である。
【図４】本発明の第１実施形態に係るファンクションブロック呼び出し処理およびファンクションブロック復帰処理を示すフローチャートである。
【図５】本発明の第２実施形態に係るプログラマブルコントローラに搭載されるＣＰＵモジュールの概略構成を示すブロック図である。
【図６】図５のテンポラリデータ領域およびテンポラリサイズテーブル領域の概略構成を示すブロック図である。
【図７】本発明の第２実施形態に係るコンパイラが生成するコードの一例を示す図である。
【図８】本発明の第２実施形態に係るコンパイラの動作を概念的に示す図である。
【図９】本発明の第２実施形態に係るファンクションブロックの実行方法を示す図である。
【図１０】本発明の第２実施形態に係るメモリ使用率の算出方法を示す図である。
【図１１】本発明の第２実施形態に係るファンクションブロック呼び出し処理を示すフローチャートである。
【図１２】本発明の第２実施形態に係るファンクションブロック復帰処理を示すフローチャートである。
【図１３】プログラマブルコントローラの概略構成を示すブロック図である。
【図１４】従来のプログラマブルコントローラに搭載されるＣＰＵモジュールの概略構成を示すブロック図である。
【図１５】図１４のテンポラリデータ領域およびテンポラリサイズテーブル領域の概略構成を示すブロック図である。
【図１６】従来のコンパイラが生成するコードの一例を示す図である。
【図１７】従来のファンクションブロックの実行方法を示す図である。
【図１８】従来のファンクションブロック呼び出し処理およびファンクションブロック復帰処理を示すフローチャートである。
【符号の説明】
【００９５】
１１、５１  ＣＰＵモジュール
１２、５２  プログラムＲＡＭ
１３、５３  ユーザプログラム
１４、５４  システムプログラム
１５ａ、１５ｂ、・・・、１５ｏ、５５ａ、５５ｂ、・・・、５５ｏ  プログラム
１６ａ、１６ｂ、・・・、１６ｎ、５６ａ、５６ｂ、・・・、５６ｎ  ファンクションブロック
１７ａ、１７ｂ、・・・、１７ｍ、５７ａ、５７ｂ、・・・、５７ｍ  ファンクションブロック呼び出し処理
１８ａ、１８ｂ、・・・、１８ｍ、５８ａ、５８ｂ、・・・、５８ｍ  ファンクションブロック復帰処理
１９、５９  マイクロプロセッサ
２０、６０  データＲＡＭ
２１、６１  ユーザデータ領域
２２、６２  テンポラリデータ領域
２４、２５、６４、６５  ファンクションブロックワーク領域
２６、６６  空き領域
２７、２８  テンポラリサイズ
７１  サポートサイズテーブル
７２  テンポラリサイズテーブル領域
７３  可変長対応ファンクションブロック呼び出し処理
７４  可変長対応ファンクションブロック復帰処理
７５  ユーザプログラム（ソース）
８０  コンパイラ
【図１】
2008262529.tif 000003
【図２】
2008262529.tif 000004
【図３】
2008262529.tif 000005
【図４】
2008262529.tif 000006
【図５】
2008262529.tif 000007
【図６】
2008262529.tif 000008
【図７】
2008262529.tif 000009
【図８】
2008262529.tif 000010
【図９】
2008262529.tif 000011
【図１０】
2008262529.tif 000012
【図１１】
2008262529.tif 000013
【図１２】
2008262529.tif 000014
【図１３】
2008262529.tif 000015
【図１４】
2008262529.tif 000016
【図１５】
2008262529.tif 000017
【図１６】
2008262529.tif 000018
【図１７】
2008262529.tif 000019
【図１８】
2008262529.tif 000020