JP4849033B2 - プログラマブルコントローラ - Google Patents

プログラマブルコントローラ Download PDF

Info

Publication number
JP4849033B2
JP4849033B2 JP2007204367A JP2007204367A JP4849033B2 JP 4849033 B2 JP4849033 B2 JP 4849033B2 JP 2007204367 A JP2007204367 A JP 2007204367A JP 2007204367 A JP2007204367 A JP 2007204367A JP 4849033 B2 JP4849033 B2 JP 4849033B2
Authority
JP
Japan
Prior art keywords
function block
size
temporary
function
words
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2007204367A
Other languages
English (en)
Other versions
JP2008262529A (ja
Inventor
元治 鈴木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fuji Electric Co Ltd
Original Assignee
Fuji Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Electric Co Ltd filed Critical Fuji Electric Co Ltd
Priority to JP2007204367A priority Critical patent/JP4849033B2/ja
Publication of JP2008262529A publication Critical patent/JP2008262529A/ja
Application granted granted Critical
Publication of JP4849033B2 publication Critical patent/JP4849033B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Programmable Controllers (AREA)

Description

本発明はプログラマブルコントローラに関し、特に、テンポラリメモリを使用するファンクションブロックを(以下、FBと略すこともある)呼び出し可能なプログラマブルコントローラにおけるファンクションブロックの呼び出し方式に適用して好適なものである。
極めて高い安全性や安定性が求められる機械制御や運搬制御などの分野では、一般的に普及しているノイマン型のコンピュータの代わりにプログラマブルコントローラが用いられている。
図13は、プログラマブルコントローラの概略構成を示すブロック図である。
図13において、プログラマブルコントローラには、演算処理を行うCPUモジュール111およびデータなどの入出力を行うI/Oモジュール110a、110b、・・・、110nが設けられ、CPUモジュール111とI/Oモジュール110a、110b、・・・、110nとはシステムバス101を介して接続されている。
そして、I/Oモジュール110a、110b、・・・、110nはリミットスイッチ、センサ、温度計などからデータを読み込み、ユーザプログラムに従ってCPUモジュール111にて演算処理が行われた後、I/Oモジュール110a、110b、・・・、110nを介してモーター、空気シリンダー、液圧シリンダー、振動板、リレー、ソレノイドなどを駆動することができる。
図14は、従来のプログラマブルコントローラに搭載されるCPUモジュールの概略構成を示すブロック図である。
図14において、CPUモジュール111には、マイクロプロセッサ119、プログラムRAM112およびデータRAM120が設けられている。ここで、プログラムRAM112には、ユーザ側で作成されるユーザプログラム113およびメーカ側で作成されるシステムプログラム114を格納することができる。そして、ユーザプログラム113は、プログラム115a、115b、・・・、115oおよびファンクションブロック116a、116b、・・・、116nから構成することができる。なお、プログラム115a、115b、・・・、115oおよびファンクションブロック116a、116b、・・・、116nは同一の言語で記述することができ、プログラム115a、115b、・・・、115oは定周期またはサイクリックに起動され、ファンクションブロック116a、116b、・・・、116nはプログラム115a、115b、・・・、115oから呼び出される機能モジュールである。
また、システムプログラム114には、ユーザプログラム113上でファンクションブロック116a、116b、・・・、116nを呼び出すファンクションブロック呼び出し処理117および呼び出されたファンクションブロック116a、116b、・・・、116nから元の処理に復帰するファンクションブロック復帰処理118を実装することができる。
また、データRAM120には、ユーザプログラム113が使用するユーザデータ領域121、ファンクションブロック116a、116b、・・・、116nがワークメモリとして使用するスタック構造のテンポラリデータ領域122および各ファンクションブロック116a、116b、・・・、116nが使用するテンポラリデータ領域122のサイズを記憶するテンポラリサイズテーブル領域123が設けられている。
図15は、図14のテンポラリデータ領域およびテンポラリサイズテーブル領域の概略構成を示すブロック図である。
図15において、テンポラリサイズテーブル領域123には、各ファンクションブロック116a、116b、・・・、116nが使用するテンポラリデータ領域122のサイズを記憶する番地1、2、・・・、nがそれぞれ割り当てられ、例えば、ファンクションブロック116aが使用するテンポラリデータ領域122のサイズとして、テンポラリサイズテーブル領域123の番地1には20ワードと記憶され、ファンクションブロック116bが使用するテンポラリデータ領域122のサイズとして、テンポラリサイズテーブル領域123の番地2には10ワードと記憶されている。
そして、ユーザプログラム113上でファンクションブロック116aが呼び出される場合、ファンクションブロック116aが使用するワークメモリとして20ワード分のファンクションブロックワーク領域124をテンポラリデータ領域122に確保することができる。また、ユーザプログラム113上でファンクションブロック116bが呼び出される場合、ファンクションブロック116bが使用するワークメモリとして10ワード分のファンクションブロックワーク領域125をテンポラリデータ領域122に確保することができる。なお、ファンクションブロック116a、116b、・・・、116nにて使用されないテンポラリデータ領域122は、空き領域126として扱うことができる。
図16は、従来のコンパイラが生成するコードの一例を示す図である。
図16において、例えば、プログラム115a上ではファンクションブロック116aを呼び出し、ファンクションブロック116a上ではファンクションブロック116bを呼び出すことができる。
図17は、従来のファンクションブロックの実行方法を示す図である。
図17において、図14のマイクロプロセッサ119は、プログラム115aが起動されると、入力データ処理(K111)およびユーザプログラム演算処理(K112)を行う。そして、プログラム115a上でファンクションブロック116aが呼び出されると、マイクロプロセッサ119は、ファンクションブロック呼び出し処理117を起動してファンクションブロック呼び出し処理117を実行する(K113)。
そして、ファンクションブロック呼び出し処理117がプログラム115a上で実行されると、マイクロプロセッサ119は、テンポラリサイズテーブル領域123の1番地を参照することにより、ファンクションブロック116aがテンポラリデータ領域122上で使用するワークメモリのサイズを確認する。そして、マイクロプロセッサ119は、ファンクションブロック116aがテンポラリデータ領域122上で使用するワークメモリのサイズが20ワードであると認識すると、ファンクションブロック116aが使用するワークメモリとして20ワード分のファンクションブロックワーク領域124をテンポラリデータ領域122に確保する。
そして、ファンクションブロック116aが使用するワークメモリとして20ワード分のファンクションブロックワーク領域124が確保されると、マイクロプロセッサ119は、ファンクションブロック116aに処理を移行させ、ユーザプログラム演算処理(K114)をファンクションブロック116a上で行う。そして、ファンクションブロック116a上でファンクションブロック116bが呼び出されると、マイクロプロセッサ119は、ファンクションブロック呼び出し処理117を起動してファンクションブロック呼び出し処理117を実行する(K115)。
そして、ファンクションブロック呼び出し処理117がファンクションブロック116a上で実行されると、マイクロプロセッサ119は、テンポラリサイズテーブル領域123の2番地を参照することにより、ファンクションブロック116bがテンポラリデータ領域122上で使用するワークメモリのサイズを確認する。そして、マイクロプロセッサ119は、ファンクションブロック116bがテンポラリデータ領域122上で使用するワークメモリのサイズが10ワードであると認識すると、ファンクションブロック116bが使用するワークメモリとして10ワード分のファンクションブロックワーク領域125をテンポラリデータ領域122に確保する。
そして、ファンクションブロック116bが使用するワークメモリとして10ワード分のファンクションブロックワーク領域125が確保されると、マイクロプロセッサ119は、ファンクションブロック116bに処理を移行させ、ユーザプログラム演算処理(K116)をファンクションブロック116b上で行う。
そして、ファンクションブロック116b上でユーザプログラム演算処理が終了すると、マイクロプロセッサ119は、ファンクションブロック116aに処理を移行させ、ファンクションブロック復帰処理118を起動してファンクションブロック呼び出し処理118を実行することで、ファンクションブロック116bがワークメモリとして使用した10ワード分のファンクションブロックワーク領域125を開放する(K117)。
そして、ファンクションブロック116bがワークメモリとして使用した10ワード分のファンクションブロックワーク領域125が開放されると、マイクロプロセッサ119は、ユーザプログラム演算処理(K118)をファンクションブロック116a上で行う。
そして、ファンクションブロック116a上でユーザプログラム演算処理が終了すると、マイクロプロセッサ119は、プログラム115aに処理を移行させ、ファンクションブロック復帰処理118を起動してファンクションブロック呼び出し処理118を実行することで、ファンクションブロック116aがワークメモリとして使用した20ワード分のファンクションブロックワーク領域124を開放する(K119)。
そして、ファンクションブロック116aがワークメモリとして使用した20ワード分のファンクションブロックワーク領域124が開放されると、マイクロプロセッサ119は、ユーザプログラム演算処理(K120)および出力データ処理(K121)をプログラム115a上で行う。
図18は、従来のファンクションブロック呼び出し処理およびファンクションブロック復帰処理を示すフローチャートである。
図18において、ファンクションブロック呼び出し処理では、マイクロプロセッサ119は、テンポラリサイズテーブル領域123を参照することにより、各ファンクションブロック116a、116b、・・・、116nが使用するテンポラリデータ領域122のサイズを確認する(ステップS21)。
そして、各ファンクションブロック116a、116b、・・・、116nが使用するテンポラリデータ領域122のサイズがテンポラリデータ領域122の総容量サイズを超える場合(ステップS22)、システム異常として扱う(ステップS24)。
一方、各ファンクションブロック116a、116b、・・・、116nが使用するテンポラリデータ領域122のサイズがテンポラリデータ領域122の総容量サイズ以下の場合、テンポラリサイズテーブル領域123にて指定されたサイズ分のテンポラリデータ領域122を確保する。
また、ファンクションブロック復帰処理では、マイクロプロセッサ119は、各ファンクションブロック116a、116b、・・・、116nがワークメモリとして使用した分のテンポラリデータ領域122を開放する(ステップS25)。
以上のような処理を、従来のプログラマブルコントローラは行っていた。
また、例えば、特許文献1には、ユーザプログラムが格納されたユーザメモリと、ユーザメモリにアクセスし、ユーザプログラムで規定される命令を読み出すとともに、命令を解読し、演算実行するASICと、演算実行する際に使用されるデータメモリとを設け、データメモリには、構造化されたデータが格納されるとともに、そのデータメモリへのアクセスが、予め設定した基底アドレスからのオフセットにより実行可能とすることで、間接参照方式のメリット(小メモリ容量、容易な編集)を発揮しつつ、演算処理の高速化を図れるようにする方法が開示されている。
特開2003−22182号公報
しかしながら、従来のプログラマブルコントローラでは、ファンクションブロック116a、116b、・・・、116nがワークメモリとして使用するサイズ分だけテンポラリデータ領域122が確保されるため、テンポラリデータ領域122を有効活用することができるが、そのためにはファンクションブロック116a、116b、・・・、116nが呼び出されるごとにテンポラリサイズテーブル領域123を検索する必要があり、ユーザプログラムのオーバヘッドになるという問題があった。
また、特許文献1に開示された方法では、親プログラムから呼び出される子プログラム内でローカルに使用されるテンポラリデータ領域を確保することができないため、ユーザプログラムの実行性能が劣るという問題があった。
そこで、本発明の目的は、テンポラリサイズテーブル領域を参照することなく、ファンクションブロックがワークメモリとして使用するサイズ分だけテンポラリデータ領域を確保することが可能なプログラマブルコントローラを提供することである。
上述した課題を解決するために、請求項1記載のプログラマブルコントローラによれば、ユーザプログラム上で呼び出されるファンクションブロックを記憶するファンクションブロック記憶手段と、前記ファンクションブロックの実行時に前記ファンクションブロックがワークメモリとして使用するテンポラリデータ記憶手段と、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズを内部に保持し、前記テンポラリサイズに基づいて前記ファンクションブロックがワークメモリとして使用するサイズ分の領域を前記テンポラリデータ記憶手段上で確保するファンクションブロック呼び出し処理手段とを備え、前記ファンクションブロック呼び出し処理手段は、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズに応じて複数設けられていることを特徴とする。
また、請求項2記載のプログラマブルコントローラによれば、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズを内部に保持し、前記テンポラリサイズに基づいて前記ファンクションブロックがワークメモリとして使用したサイズ分の領域を前記テンポラリデータ記憶手段上で開放するファンクションブロック復帰処理手段を備えることを特徴とする。
また、請求項3記載のプログラマブルコントローラによれば、前記ファンクションブロック復帰処理手段は、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズに応じて複数設けられていることを特徴とする。
以上説明したように、本発明によれば、ファンクションブロックがワークメモリとして使用する分のテンポラリサイズ種類分の呼び出し処理を持ち、これらをシステムプログラムに保持することにより、テンポラリサイズテーブル領域を参照することなく、ファンクションブロックがワークメモリとして使用するサイズ分だけテンポラリデータ領域を確保することが可能となる。このため、ユーザプログラムのオーバヘッドを削減しつつ、テンポラリデータ領域を有効活用することができ、ユーザプログラムの実行性能を向上させることができる。
以下、本発明の実施形態に係るプログラマブルコントローラについて図面を参照しながら説明する。
図1は、本発明の第1実施形態に係るプログラマブルコントローラに搭載されるCPUモジュールの概略構成を示すブロック図である。
図1において、CPUモジュール11には、マイクロプロセッサ19、プログラムRAM12およびデータRAM20が設けられている。ここで、プログラムRAM12には、ユーザ側で作成されるユーザプログラム13およびメーカ側で作成されるシステムプログラム14を格納することができる。そして、ユーザプログラム13は、プログラム15a、15b、・・・、15oおよびファンクションブロック16a、16b、・・・、16nから構成することができる。なお、プログラム15a、15b、・・・、15oおよびファンクションブロック16a、16b、・・・、16nは同一の言語で記述することができ、プログラム15a、15b、・・・、15oは定周期またはサイクリックに起動され、ファンクションブロック16a、16b、・・・、16nはプログラム15a、15b、・・・、15oから呼び出される機能モジュールである。
また、システムプログラム14には、ユーザプログラム13上でファンクションブロック16a、16b、・・・、16nを呼び出す複数のファンクションブロック呼び出し処理17a、17b、・・・、17mおよび呼び出されたファンクションブロック16a、16b、・・・、16nから元の処理に復帰するファンクションブロック復帰処理18a、18b、・・・、18mを実装することができる。なお、ファンクションブロック呼び出し処理17a、17b、・・・、17mは、ファンクションブロック16a、16b、・・・、16nがワークメモリとして使用する分のテンポラリサイズに応じて複数設けることができる。また、ファンクションブロック復帰処理18a、18b、・・・、18mは、ファンクションブロック16a、16b、・・・、16nがワークメモリとして使用する分のテンポラリサイズに応じて複数設けることができる。
また、データRAM20には、ユーザプログラム13が使用するユーザデータ領域21およびファンクションブロック16a、16b、・・・、16nがワークメモリとして使用するスタック構造のテンポラリデータ領域22が設けられている。
ここで、ファンクションブロック呼び出し処理17a、17b、・・・、17mおよびファンクションブロック復帰処理18a、18b、・・・、18mは、ファンクションブロック16a、16b、・・・、16nがワークメモリとして使用する分のテンポラリサイズ27、28を固定データとして内部に保持することができる。
そして、マイクロプロセッサ19は、ファンクションブロック16a、16b、・・・、16nを呼び出す場合、そのファンクションブロック16a、16b、・・・、16nがワークメモリとして使用する分に対応したテンポラリサイズ27が記憶されたファンクションブロック呼び出し処理17a、17b、・・・、17mを呼び出すことができる。そして、ファンクションブロック呼び出し処理17a、17b、・・・、17mは、その内部にそれぞれ記憶されたテンポラリサイズ27分の容量をテンポラリデータ領域22に確保することができる。
また、マイクロプロセッサ19は、ファンクションブロック16a、16b、・・・、16nからの復帰を行う場合、そのファンクションブロック16a、16b、・・・、16nがワークメモリとして使用した分に対応したテンポラリサイズ28が記憶されたファンクションブロック復帰処理18a、18b、・・・、18mを呼び出すことができる。そして、ファンクションブロック復帰処理18a、18b、・・・、18mは、その内部にそれぞれ記憶されたテンポラリサイズ28分の容量をテンポラリデータ領域22上で開放することができる。
例えば、ファンクションブロック16aが使用するテンポラリデータ領域22のサイズが20ワードの場合、ファンクションブロック呼び出し処理17aおよびファンクションブロック復帰処理18aには、テンポラリサイズ27、28として20ワードと記憶することができる。また、ファンクションブロック16bが使用するテンポラリデータ領域22のサイズが10ワードの場合、ファンクションブロック呼び出し処理17bおよびファンクションブロック復帰処理18bには、テンポラリサイズ27、28として10ワードと記憶することができる。
そして、ユーザプログラム13上でファンクションブロック16aが呼び出される場合、そのファンクションブロック16aがワークメモリとして使用する分の20ワードという値がテンポラリサイズ27として記憶されたファンクションブロック呼び出し処理17aを起動することができる。そして、ファンクションブロック呼び出し処理17aが起動されると、ファンクションブロック16aが使用するワークメモリとして20ワード分のファンクションブロックワーク領域24をテンポラリデータ領域22に確保することができる。
また、ユーザプログラム13上でファンクションブロック16bが呼び出される場合、そのファンクションブロック16bがワークメモリとして使用する分の10ワードという値がテンポラリサイズ27として記憶されたファンクションブロック呼び出し処理17bを起動することができる。そして、ファンクションブロック呼び出し処理17bが起動されると、ファンクションブロック16bが使用するワークメモリとして10ワード分のファンクションブロックワーク領域25をテンポラリデータ領域22に確保することができる。
また、呼び出されたファンクションブロック16aから元の処理に復帰する場合、そのファンクションブロック16aがワークメモリとして使用した分の20ワードという値がテンポラリサイズ28として記憶されたファンクションブロック復帰処理18aを起動することができる。そして、ファンクションブロック復帰処理18aが起動されると、ファンクションブロック16aがワークメモリとして使用した20ワード分のファンクションブロックワーク領域24をテンポラリデータ領域22上で開放することができる。
また、呼び出されたファンクションブロック16bから元の処理に復帰する場合、そのファンクションブロック16bがワークメモリとして使用した分の10ワードという値がテンポラリサイズ28として記憶されたファンクションブロック復帰処理18bを起動することができる。そして、ファンクションブロック復帰処理18bが起動されると、ファンクションブロック16bがワークメモリとして使用した10ワード分のファンクションブロックワーク領域25をテンポラリデータ領域22上で開放することができる。
図2は、本発明の第1実施形態に係るコンパイラが生成するコードの一例を示す図である。
図2において、例えば、プログラム15a上では図1のファンクションブロック呼び出し処理17aにてファンクションブロック16aが呼び出され、ファンクションブロック16a上では図1のファンクションブロック呼び出し処理17bにてファンクションブロック16bが呼び出されるようにコード生成を行うことができる。
図3は、本発明の第1実施形態に係るファンクションブロックの実行方法を示す図である。
図3において、図1のマイクロプロセッサ19は、プログラム15aが起動されると、入力データ処理(K11)およびユーザプログラム演算処理(K12)を行う。そして、プログラム15a上でファンクションブロック16aが呼び出されると、マイクロプロセッサ19は、そのファンクションブロック16aがワークメモリとして使用する分の20ワードという値がテンポラリサイズ27として記憶されたファンクションブロック呼び出し処理17aを起動してファンクションブロック呼び出し処理17aを実行する(K13)。
そして、ファンクションブロック呼び出し処理17aがプログラム15a上で実行されると、マイクロプロセッサ19は、ファンクションブロック呼び出し処理17aが保持するテンポラリサイズ27に基づいて、ファンクションブロック16aがテンポラリデータ領域22上で使用するワークメモリのサイズが20ワードであると認識することができる。そして、マイクロプロセッサ19は、ファンクションブロック16aが使用するワークメモリとして20ワード分のファンクションブロックワーク領域24をテンポラリデータ領域22に確保する。
そして、ファンクションブロック16aが使用するワークメモリとして20ワード分のファンクションブロックワーク領域24が確保されると、マイクロプロセッサ19は、ファンクションブロック16aに処理を移行させ、ユーザプログラム演算処理(K14)をファンクションブロック16a上で行う。そして、ファンクションブロック16a上でファンクションブロック16bが呼び出されると、マイクロプロセッサ19は、そのファンクションブロック16bがワークメモリとして使用する分の10ワードという値がテンポラリサイズ27として記憶されたファンクションブロック呼び出し処理17bを起動してファンクションブロック呼び出し処理17bを実行する(K15)。
そして、ファンクションブロック呼び出し処理17bがファンクションブロック16b上で実行されると、マイクロプロセッサ19は、ファンクションブロック呼び出し処理17bが保持するテンポラリサイズ27に基づいて、ファンクションブロック16bがテンポラリデータ領域22上で使用するワークメモリのサイズが10ワードであると認識することができる。そして、マイクロプロセッサ19は、ファンクションブロック16bが使用するワークメモリとして10ワード分のファンクションブロックワーク領域25をテンポラリデータ領域22に確保する。
そして、ファンクションブロック16bが使用するワークメモリとして10ワード分のファンクションブロックワーク領域25が確保されると、マイクロプロセッサ19は、ファンクションブロック16bに処理を移行させ、ユーザプログラム演算処理(K16)をファンクションブロック16b上で行う。
そして、ファンクションブロック16b上でユーザプログラム演算処理が終了すると、マイクロプロセッサ19は、ファンクションブロック16aに処理を移行させる。そして、マイクロプロセッサ19は、そのファンクションブロック16bがワークメモリとして使用した分の10ワードという値がテンポラリサイズ28として記憶されたファンクションブロック復帰処理18bを起動してファンクションブロック呼び出し処理18bを実行することで、ファンクションブロック16bがワークメモリとして使用した10ワード分のファンクションブロックワーク領域25を開放する(K17)。
そして、ファンクションブロック16bがワークメモリとして使用した10ワード分のファンクションブロックワーク領域25が開放されると、マイクロプロセッサ19は、ユーザプログラム演算処理(K18)をファンクションブロック16a上で行う。
そして、ファンクションブロック16a上でユーザプログラム演算処理が終了すると、マイクロプロセッサ19は、プログラム15aに処理を移行させる。そして、マイクロプロセッサ19は、そのファンクションブロック16aがワークメモリとして使用した分の20ワードという値がテンポラリサイズ28として記憶されたファンクションブロック復帰処理18aを起動してファンクションブロック呼び出し処理18aを実行することで、ファンクションブロック16aがワークメモリとして使用した20ワード分のファンクションブロックワーク領域24を開放する(K19)。
そして、ファンクションブロック16aがワークメモリとして使用した20ワード分のファンクションブロックワーク領域24が開放されると、マイクロプロセッサ19は、ユーザプログラム演算処理(K20)および出力データ処理(K21)をプログラム15a上で行う。
図4は、本発明の第1実施形態に係るファンクションブロック呼び出し処理およびファンクションブロック復帰処理を示すフローチャートである。
図4において、ファンクションブロック呼び出し処理17a、17b、・・・、17mでは、マイクロプロセッサ19は、ファンクションブロック呼び出し処理17a、17b、・・・、17mにそれぞれ保持されたテンポラリサイズ27に基づいて、各ファンクションブロック16a、16b、・・・、16nが使用するテンポラリデータ領域22のサイズを確認する。そして、各ファンクションブロック16a、16b、・・・、16nが使用するテンポラリデータ領域22のサイズがテンポラリデータ領域22の総容量サイズを超える場合(ステップS11)、システム異常として扱う(ステップS13)。
一方、各ファンクションブロック16a、16b、・・・、16nが使用するテンポラリデータ領域22のサイズがテンポラリデータ領域22の総容量サイズ以下の場合、テンポラリサイズ27にて指定されたサイズ分のテンポラリデータ領域22を確保する。なお、テンポラリデータ領域22を使い切らない場合は、空き領域26が発生する。
また、ファンクションブロック復帰処理18a、18b、・・・、18mでは、マイクロプロセッサ19は、各ファンクションブロック16a、16b、・・・、16nがワークメモリとして使用した分のテンポラリデータ領域22を開放する(ステップS14)。
これにより、図14のテンポラリサイズテーブル領域123を参照することなく、各ファンクションブロック16a、16b、・・・、16nがワークメモリとして使用するサイズ分だけテンポラリデータ領域22を確保することが可能となる。このため、ユーザプログラム13のオーバヘッドを削減しつつ、テンポラリデータ領域22を有効活用することができ、ユーザプログラム13の実行性能を向上させることができる。
なお、上述した第1実施形態では、ファンクションブロック呼び出し処理17a、17b、・・・、17mにてそれぞれ確保されるテンポラリサイズを細かく用意すればするほど(例えば、2ワード用、4ワード用、6ワード用、100ワード用、102ワード用、998ワード用、1000ワード用、1002ワード用、・・・)、システムプログラム14のサイズが膨らみ、プログラマブルコントローラが必要とするプログラムRAM12の容量が大きくなりコストアップを招く。
このため、ファンクションブロック呼び出し処理17a、17b、・・・、17mにてそれぞれ確保されるテンポラリサイズを大まかに区切ると、(例えば、10ワード用、50ワード用、100ワード用、500ワード用、1000ワード用、・・・)、実際に実行されるファンクションブロック16a、16b、・・・、16nに対して丁度サイズの合うファンクションブロック呼び出し処理17a、17b、・・・、17mが用意されていない場合、大き目のサイズに対応したファンクションブロック呼び出し処理17a、17b、・・・、17mを選択しなければならない。このため、大き目のサイズに対応したファンクションブロック呼び出し処理17a、17b、・・・、17mを選択した時に、ファンクションブロック16a、16b、・・・、16nにて使用されずに無駄に確保されるテンポラリデータ領域62が存在し、容量に余裕のあるプログラムRAM12をプログラマブルコントローラに搭載する必要があることから、やはりコストアップの要因となる。
また、ユーザによっては、プログラムRAM12の使用効率が多少悪くても、実行時間を短くしたいという要求が強い場合もあれば、ファンクションブロック16a、16b、・・・、16nが何段もネストしているために、テンポラリデータ領域22をできるだけ効率よく使い、テンポラリデータ領域22が容量オーバになるのを防止したいという要求が強い場合もある。
このため、プログラムRAM12の容量の増大を抑制しつつ、ユーザプログラム13のオーバヘッド時間を少なくしてユーザプログラム13の実行性能を高く維持できるような機能をプログラマブルコントローラに持たせるようにしてもよい。また、ユーザの要求に応じた最適な実行コードを生成する機能をプログラマブルコントローラに持たせるようにしてもよい。
図5は、本発明の第2実施形態に係るプログラマブルコントローラに搭載されるCPUモジュールの概略構成を示すブロック図、図6は、図5のテンポラリデータ領域およびテンポラリサイズテーブル領域の概略構成を示すブロック図である。
図5において、CPUモジュール51には、マイクロプロセッサ59、プログラムRAM52およびデータRAM60が設けられている。ここで、プログラムRAM52には、ユーザ側で作成されるユーザプログラム53およびメーカ側で作成されるシステムプログラム54を格納することができる。そして、ユーザプログラム53は、プログラム55a、55b、・・・、55oおよびファンクションブロック56a、56b、・・・、56nから構成することができる。なお、プログラム55a、55b、・・・、55oおよびファンクションブロック56a、56b、・・・、56nは同一の言語で記述することができ、プログラム55a、55b、・・・、55oは定周期またはサイクリックに起動され、ファンクションブロック56a、56b、・・・、56nはプログラム55a、55b、・・・、55oから呼び出される機能モジュールである。
また、データRAM60には、ユーザプログラム53が使用するユーザデータ領域61およびファンクションブロック56a、56b、・・・、56nがワークメモリとして使用するスタック構造のテンポラリデータ領域62が設けられている。
さらに、データRAM60には、各ファンクションブロック56a、56b、・・・、56nが使用するテンポラリデータ領域62のサイズを指示するテンポラリサイズテーブル領域72が設けられている。
なお、ユーザプログラム53には、後述のコンパイラが生成し、マイクロプロセッサ59が実行可能な形式のコードが格納される。また、このコンパイラにて生成されたテンポラリサイズテーブルが、テンポラリサイズテーブル領域72に格納される。
以降、CPUモジュール51においては、マイクロプロセッサ59はこれらの情報に従い処理を実行するが、コードの記述内容によってファンクションブロックの呼び出し/復帰処理の様態が異なる。この呼び出し/復帰処理について説明する。
システムプログラム54には、ユーザプログラム53上でファンクションブロック56a、56b、・・・、56nを呼び出す複数のファンクションブロック呼び出し処理57a、57b、・・・、57mおよび呼び出されたファンクションブロック56a、56b、・・・、56nから元の処理に復帰するファンクションブロック復帰処理58a、58b、・・・、58mを実装することができる。
ここで、ファンクションブロック呼び出し処理57a、57b、・・・、57mは、ファンクションブロック56a、56b、・・・、56nがワークメモリとして使用可能な予め決められたサイズ分の容量をテンポラリデータ領域62上にそれぞれ確保することができる。また、ファンクションブロック復帰処理58a、58b、・・・、58mは、ファンクションブロック56a、56b、・・・、56nがワークメモリとして使用した予め決められたサイズ分の容量をテンポラリデータ領域62から開放することができる。
なお、ファンクションブロック呼び出し処理57a、57b、・・・、57mは、ファンクションブロック56a、56b、・・・、56nがワークメモリとして使用する分のテンポラリサイズに応じて複数設けることができる。また、ファンクションブロック復帰処理58a、58b、・・・、58mは、ファンクションブロック56a、56b、・・・、56nがワークメモリとして使用する分のテンポラリサイズに応じて複数設けることができる。
また、ファンクションブロック呼び出し処理57a、57b、・・・、57mは、例えば、10ワード、20ワード、30ワードというように10ワード刻みの容量をテンポラリデータ領域62上にそれぞれ確保することができる。また、ファンクションブロック復帰処理58a、58b、・・・、58mは、例えば、10ワード、20ワード、30ワードというように10ワード刻みの容量をテンポラリデータ領域62上からそれぞれ開放することができる。
さらに、システムプログラム54には、ユーザプログラム53上でファンクションブロック56a、56b、・・・、56nを呼び出す可変長対応ファンクションブロック呼び出し処理73および呼び出されたファンクションブロック56a、56b、・・・、56nから元の処理に復帰する可変長対応ファンクションブロック復帰処理74を実装することができる。
ここで、可変長対応ファンクションブロック呼び出し処理73は、ファンクションブロック56a、56b、・・・、56nがワークメモリとして使用するサイズ分の容量をテンポラリデータ領域62上に確保することができる。また、可変長対応ファンクションブロック復帰処理74は、ファンクションブロック56a、56b、・・・、56nがワークメモリとして使用したサイズ分の容量をテンポラリデータ領域62上から開放することができる。
以上のファンクションブロック呼び出し処理57a、57b、・・・、57m、ファンクションブロック復帰処理58a、58b、・・・、58m、可変長対応ファンクションブロック呼び出し処理73、可変長対応ファンクションブロック復帰処理74は、プログラム55a、55b、・・・、55o或いはファンクションブロック56a、56b、・・・、56nから呼び出される。マイクロプロセッサ59は、後述のコンパイラによって生成される実行コードに応じてこれらを呼び出す。
図6において、テンポラリサイズテーブル領域72には、各ファンクションブロック56a、56b、・・・、56nが使用するテンポラリデータ領域62のサイズを記憶する番地1、2、・・・、nがそれぞれ割り当てられる。例えば、ファンクションブロック56bが使用するテンポラリデータ領域62のサイズとして、テンポラリサイズテーブル領域72の番地2には16ワードと記憶されており、ファンクションブロック56bを実行前に可変長対応ファンクションブロック呼び出し処理73によって、テンポラリデータ領域62にファンクションブロックワーク領域65が16ワード確保される。ここで、テンポラリデータ領域62にファンクションブロックワーク領域64として20ワード確保されるが、テンポラリサイズテーブル領域72の番地1は「空き」となっている。これは、後述のコンパイルの時点でファンクションブロックに割り当てる領域のサイズをコードレベルで記載しているからであり、コードではファンクションブロック呼び出し処理57a、57b、・・・、57m/ファンクションブロック復帰処理58a、58b、・・・、58mによる処理を指示している。ここで、マイクロプロセッサ59はテンポラリサイズテーブル領域72を参照せずに処理している。一方で、ファンクションブロック56bの場合、コードでは可変長対応ファンクションブロック呼び出し処理73/可変長対応ファンクションブロック復帰処理74による処理を指示しており、テンポラリサイズテーブル領域72を参照しながら処理する。
なお、テンポラリデータ領域62を使い切らない場合は、空き領域66が発生する。
図7は、本発明の第2実施形態に係るコンパイラが生成するコードの一例を示す図である。
図7において、例えば、プログラム55a上では、図5のファンクションブロック呼び出し処理57aにてファンクションブロック56aが呼び出され、ファンクションブロック56a上では、図5の可変長対応ファンクションブロック呼び出し処理73にてファンクションブロック56bが呼び出されるようにコード生成を行うことができる。
ここで、「CAL FByy,x」は命令の書式であり、xと言うFBを呼び出し、その際にはyyと言うメモリサイズを確保する。yyは数値である場合や、_Vのように可変値を指す場合がある。この命令を後述のコンパイラにて処理すると、yyが数値等の場合はファンクションブロック呼び出し処理57a、57b、・・・、57mを、yyが_Vの場合は可変長対応ファンクションブロック呼び出し処理73を実行させるコードを生成する。
同様に、「RET FByy」は命令の書式であり、yyと言うメモリサイズを開放する。yyが数値である場合や、_Vのように可変値を指す場合がある。この命令をコンパイラにて処理すると、yyが数値等の場合はファンクションブロック復帰処理58a、58b、・・・、58mを、yyが_Vの場合は後者は可変長対応ファンクションブロック復帰処理74を実行させるコードを生成する。ここで、引数の情報にxが無いのは、現在実行されている箇所が呼び出されたFBであり、自身のFBを終了すれば良いからである。
なお、上記yyやxの表記は桁数や文字数を制限する訳ではなく、説明を分かり易くする為に本実施例の表記に合わせただけであり、発明を限定するものではない。_Vについても同様である。
図8は、本発明の第2実施形態に係るコンパイラの動作を概念的に示す図である。
図8において、コンパイラ80は、ファンクションブロック56a、56b、・・・、56nがワークメモリとして使用するサイズに基づいて、ファンクションブロック呼び出し処理57a、57b、・・・、57mまたは可変長対応ファンクションブロック呼び出し処理73が選択された実行コード(CAL FByy,x)を生成するアルゴリズムと、ファンクションブロック56a、56b、・・・、56nがワークメモリとして使用したサイズに基づいて、ファンクションブロック復帰処理58a、58b、・・・、58mまたは可変長対応ファンクションブロック復帰処理74が選択された実行コード(RET FByy)を生成するアルゴリズムとを備える。
前述のワークメモリとして使用するサイズは、ユーザプログラム(ソース)75におけるFBごとにサイズを計算する。例えば、FB1は20ワード、FB2は16ワードのテンポラリサイズを必要とするものとする。なお、テンポラリサイズはソースコードにおける変数の個数や構成から、コンパイラにより導出する。
また、FBごとのサイズが、例えば、18ワード、8ワード、30ワード、10ワード、22ワード…のように細分化される場合、これに応じたテンポラリサイズを用意する必要がある。ところが、第1実施形態で述べたように、全てのテンポラリサイズを用意すると図5のプログラムRAM52の容量を大きくする必要が発生し、コストアップを招く。そこで、ユーザプログラム(ソース)75より、ある程度のテンポラリサイズをリストアップしたものが、サポートサイズテーブル71になる。ここでは、一例として、10ワード単位で用意している。
コンパイラ80は、ユーザプログラム(ソース)75と、実行予定のプログラマブルコントローラがサポートしているファンクションブロック呼び出し処理57a、57b、・・・、57mのテンポラリサイズが列挙されているサポートサイズテーブル71を読み込み、ユーザプログラム(ソース)75の実行コード(プログラム55a、57b、・・・、57o)と、ファンクションブロック56a、56b、・・・、56nの番号に対応するテンポラリサイズテーブル(テンポラリサイズテーブル領域72)とを生成し出力する。
そして、コンパイラ80にて生成された実行コード(プログラム55a、55b、・・・、55o)とテンポラリサイズテーブル(テンポラリサイズテーブル領域72)とは、図5のプログラムRAM52およびテンポラリサイズテーブル領域72にそれぞれ転送され、マイクロプロセッサ59により実行される。この際に、実行形式のファンクションブロック56a、56b、・・・、56nも図5のプログラムRAM52に転送される。
ここで、コンパイラ80は、ユーザプログラム(ソース)75を読み込み、PG100というプログラム55aのコンパイル過程において、FB1というファンクションブロック56aのコールを検出する。そして、コールするFB1というファンクションブロック56aのテンポラリサイズを取得する。なお、ここで取得するテンポラリサイズは、コンパイラにより、すでに算出済みである。
ここでは、FB1というファンクションブロック56aのテンポラリサイズは20ワードであるので、FB1というファンクションブロック56aのサイズをN=20に設定する。次に、サポートサイズテーブル71を参照し、実行予定のプログラマブルコントローラにサイズN=20専用のファンクションブロック呼び出し処理57a、57b、・・・、57mがあるか検索する。
そして、サポートサイズテーブル71を参照した結果、サイズN=20専用のファンクションブロック呼び出し処理57a、57b、・・・、57mがある場合、PG100というプログラム55aの実行コードを“CAL FByy、x”と決定し生成する。なお、PG100というプログラム55aの実行コードにおいて、呼び出すFBが1で、サイズN=20なので、“CAL FB20,1”と記述される。
次に、コンパイラ80は、FB1というファンクションブロック56aのコンパイルに進み、その過程において、FB2というファンクションブロック56bのコールを検出する。そして、FB2というファンクションブロック56bのコールに対応する実行コードを決定し生成する。ここで、FB2というファンクションブロック56bのテンポラリサイズは16ワードであり、このサイズはファンクションブロック呼び出し処理57a、57b、・・・、57mではサポートされていない。このため、コンパイラ80は、可変長対応ファンクションブロック呼び出し処理73を選択し、FB1というファンクションブロック56aの実行コードとして“CAL FB_V,2”を生成するとともに、テンポラリサイズテーブル領域72のFB2というファンクションブロック56bに対応する箇所に16ワードと記録する。
また、ファンクションブロック56a、56b、・・・、56nのコードの末尾には呼び元のプログラム55a、55b、・・・、55oまたはファンクションブロック56a、56b、・・・、56nに戻るための復帰処理がある。ここでのコンパイルでは、ファンクションブロック56a、56b、・・・、56nのテンポラリサイズに一致する復帰処理をファンクションブロック復帰処理58a、58b、・・・、58mがサポートしているならば、固定サイズの復帰処理のコード(RET FByy)を生成し、ファンクションブロック56a、56b、・・・、56nのテンポラリサイズに一致する復帰処理をファンクションブロック復帰処理58a、58b、・・・、58mがサポートしていないならば、可変長対応の復帰処理のコード(RET FB_V)を生成して実行コードを生成するとともに、テンポラリサイズテーブル領域72のFB番号に該当する箇所にテンポラリサイズを格納する。
例えば、FB2というファンクションブロック56bはテンポラリサイズが16ワードで、このサイズはファンクションブロック復帰処理58a、58b、・・・、58mにてサポートされていないので、可変長対応の復帰処理のコード(“RET FB_V”)を生成する。また、FB1というファンクションブロック56aはテンポラリサイズが20ワードでファンクションブロック復帰処理58a、58b、・・・、58mにてサポートされているので、固定サイズ復帰処理のコード(“RET FB20”)を生成する。
このようにして、コンパイラ80は、ユーザプログラム(ソース)75をコンパイルし、実行コード55a、56a、56b、及びテンポラリサイズテーブル領域72を生成することができる。
そして、コンパイラ80にて生成された実行コードおよびテンポラリサイズテーブルをプログラマブルコントローラに転送し、これらが実行される。
ここで、コンパイラ80にて生成された実行コード(PG100,FB1,FB2)は、図5のCPUモジュール51のプログラムRAM52内のユーザプログラム53の領域に格納され、マイクロプロセッサ59にて解釈され実行される。なお、図8のテンポラリサイズテーブル領域72は、図5のデータRAM60内のテンポラリサイズテーブル領域72に格納され、マイクロプロセッサ59から参照される。
図9は、本発明の第2実施形態に係るファンクションブロックの実行方法を示す図である。
図9において、図5のマイクロプロセッサ59は、プログラム55aが起動されると、入力データ処理(K51)およびユーザプログラム演算処理(K52)を行う。そして、プログラム55a上でファンクションブロック56aが呼び出されると、マイクロプロセッサ59は、そのファンクションブロック56aがワークメモリとして使用する20ワード分のテンポラリサイズを確保するファンクションブロック呼び出し処理57aを起動してファンクションブロック呼び出し処理57aを実行する(K53)。
そして、ファンクションブロック呼び出し処理57aがプログラム55a上で実行されると、マイクロプロセッサ59は、ファンクションブロック56aが使用するワークメモリとして20ワード分のファンクションブロックワーク領域64をテンポラリデータ領域62に確保する。
そして、ファンクションブロック56aが使用するワークメモリとして20ワード分のファンクションブロックワーク領域64が確保されると、マイクロプロセッサ59は、ファンクションブロック56aに処理を移行させ、ユーザプログラム演算処理(K54)をファンクションブロック56a上で行う。そして、ファンクションブロック56a上でファンクションブロック56bが呼び出されると、マイクロプロセッサ59は、そのファンクションブロック56bがワークメモリとして使用する16ワード分のテンポラリサイズを確保する可変長対応ファンクションブロック呼び出し処理73を起動して可変長対応ファンクションブロック呼び出し処理73を実行する(K55)。
そして、可変長対応ファンクションブロック呼び出し処理73がファンクションブロック56b上で実行されると、マイクロプロセッサ59は、テンポラリサイズテーブル領域72内のファンクションブロック56b用の番地を参照して、確保すべきワード数を取得する。今回の例では、ファンクションブロック56bが使用するワークメモリとして16ワード分のファンクションブロックワーク領域65をテンポラリデータ領域62に確保する。
そして、ファンクションブロック56bが使用するワークメモリとして16ワード分のファンクションブロックワーク領域65が確保されると、マイクロプロセッサ59は、ファンクションブロック56bに処理を移行させ、ユーザプログラム演算処理(K56)をファンクションブロック56b上で行う。
そして、ファンクションブロック56b上でユーザプログラム演算処理が終了すると、マイクロプロセッサ59は、ファンクションブロック56aに処理を移行させる。そして、マイクロプロセッサ59は、そのファンクションブロック56bがワークメモリとして使用した16ワード分の領域を開放する可変長対応ファンクションブロック復帰処理74を起動して可変長対応ファンクションブロック復帰処理74を実行することで、ファンクションブロック56bがワークメモリとして使用した16ワード分のファンクションブロックワーク領域65を開放する。(K57)。
そして、ファンクションブロック56bがワークメモリとして使用した16ワード分のファンクションブロックワーク領域65が開放されると、マイクロプロセッサ59は、ユーザプログラム演算処理(K58)をファンクションブロック56a上で行う。
そして、ファンクションブロック56a上でユーザプログラム演算処理が終了すると、マイクロプロセッサ59は、プログラム55aに処理を移行させる。そして、マイクロプロセッサ59は、そのファンクションブロック56aがワークメモリとして使用した20ワード分の領域を開放するファンクションブロック復帰処理58aを起動してファンクションブロック呼び出し処理58aを実行することで、ファンクションブロック56aがワークメモリとして使用した20ワード分のファンクションブロックワーク領域64を開放する(K59)。
そして、ファンクションブロック56aがワークメモリとして使用した20ワード分のファンクションブロックワーク領域64が開放されると、マイクロプロセッサ59は、ユーザプログラム演算処理(K60)および出力データ処理(K61)をプログラム55a上で行う。
上述した実施形態では、ファンクションブロック56a、56b、・・・、56nがワークメモリとしての使用するサイズに一致する領域を確保するファンクションブロック呼び出し処理57a、57b、・・・、57mがある場合、そのファンクションブロック呼び出し処理57a、57b、・・・、57mを選択する方法について説明したが、ファンクションブロック呼び出し処理57a、57b、・・・、57mにて確保されるテンポラリデータ領域62の使用率が閾値以上の場合、ファンクションブロック呼び出し処理57a、57b、・・・、57mを選択するようにしてもよい。
図10は、本発明の第2実施形態に係るメモリ使用率の算出方法を示す図である。
図10において、図8のコンパイラ80にはコンパイル時のオプションとして目標メモリ使用率(0〜100%)をユーザが与えることができる。
例えば、目標メモリ使用率を80%とし、FB1というファンクションブロック56aからFB2というファンクションブロック56bをコールする部分をコンパイルするものとする。
この場合、呼び出すFB2というファンクションブロック56bのテンポラリサイズは16ワードである。そして、16ワードというサイズをサポートしているファンクションブロック呼び出し処理57a、57b、・・・、57mはないが、16ワードよりも大きなサイズをサポートしているものとして、20ワードというサイズをサポートしているファンクションブロック呼び出し処理57aがあるものとする。
そして、20ワードというサイズをサポートしているファンクションブロック呼び出し処理57aを選ぶか否かを決定するため、このファンクションブロック呼び出し処理57aを使った場合のテンポラリメモリ使用率(N/M)を算出する。ただし、Mはファンクションブロック呼び出し処理57aにてサポートされているサイズ、Nはファンクションブロック56bのテンポラリサイズである。
そして、ファンクションブロック56bのテンポラリサイズは16ワード、ファンクションブロック呼び出し処理57aにてサポートされているサイズは20ワードなので、N=16、M=20となり、テンポラリメモリ使用率は80%となる。そして、この値は、目標メモリ使用率以上であるため、ファンクションブロック呼び出し処理57aを使うこととし、コンパイラ80は、実行コードとして(“CAL FB20,2”)を生成することができる。
一方、目標メモリ使用率が90%であった場合、20ワードというサイズをサポートしているファンクションブロック呼び出し処理57aを使用すると、メモリ使用率(N/M=0.8)は目標メモリ使用率に満たない。このため、コンパイラ80は、可変長対応ファンクションブロック呼び出し処理73を使うこととし、実行コードとして(“CAL FB_V,2”)を生成することができる。
これにより、ユーザの指定するメモリ効率を満足する範囲内で、実行時間の比較的短いファンクションブロック呼び出し処理57a、57b、・・・、57mを使用した実行コードを生成することができ、ファンクションブロック56a、56b、・・・、56nの実行の高速化を図ることができる。
なお、コンパイラ80に認識させられるのであれば、目標メモリ使用率を指定する手段としては、GUI(グラフィカルユーザインタフェース)を用いるようにしてもよいし、テキストファイルによる指定であってもよい。
図11は、本発明の第2実施形態に係るファンクションブロック呼び出し処理を示すフローチャートである。
図11において、図8のコンパイラ80は、ユーザプログラム(ソース)75を読み込み、コールするファンクションブロック56a、56b、・・・、56nのテンポラリサイズNを取得する(ステップS31)。
そして、コンパイラ80は、サポートサイズテーブル71を参照し、実行予定のプログラマブルコントローラにサイズNのファンクションブロック呼び出し処理57a、57b、・・・、57mが実装されているかどうかを検索する(ステップS32)。
そして、実行予定のプログラマブルコントローラにサイズNのファンクションブロック呼び出し処理57a、57b、・・・、57mが実装されている場合(ステップS33)、サイズNを番号nに設定し(ステップS34)、実行コード“CAL FBn,x”を生成する(ステップS35)。ここでxはコール対象のファンクションブロックである。
一方、実行予定のプログラマブルコントローラにサイズNのファンクションブロック呼び出し処理57a、57b、・・・、57mが実装されていない場合(ステップS33)、サイズNよりも大きなサイズをサポートするファンクションブロック呼び出し処理57a、57b、・・・、57mが実装されているかどうかを検索する(ステップS36)。
そして、サイズNよりも大きなサイズをサポートするファンクションブロック呼び出し処理57a、57b、・・・、57mが実装されている場合(ステップS37)、そのファンクションブロック呼び出し処理57a、57b、・・・、57mがサポートするサイズMと、ファンクションブロック56a、56b、・・・、56nのテンポラリサイズNとの比率を算出することで、テンポラリメモリ使用率(N/M)を算出する。そして、テンポラリメモリ使用率(N/M)が目標メモリ使用率以上の場合(ステップS38)、サイズMを番号nに設定し(ステップS39)、実行コード“CAL FBn,x”を生成する(ステップS35)。
一方、サイズNよりも大きなサイズをサポートするファンクションブロック呼び出し処理57a、57b、・・・、57mが実装されていない場合(ステップS37)またはテンポラリメモリ使用率(N/M)が目標メモリ使用率未満の場合(ステップS38)、実行コード“CAL FB_V,x”を生成し(ステップS40)、FB番号に対応するテンポラリサイズテーブル領域72にサイズNを登録する(ステップS41)。
図12は、本発明の第2実施形態に係るファンクションブロック復帰処理を示すフローチャートである。
図12において、図8のコンパイラ80は、ユーザプログラム(ソース)75を読み込み、リターンするファンクションブロック56a、56b、・・・、56nのテンポラリサイズNを取得する(ステップS51)。
そして、コンパイラ80は、サポートサイズテーブル71を参照し、実行予定のプログラマブルコントローラにサイズNのファンクションブロック復帰処理58a、58b、・・・、58mが実装されているかどうかを検索する(ステップS52)。
そして、実行予定のプログラマブルコントローラにサイズNのファンクションブロック復帰処理58a、58b、・・・、58mが実装されている場合(ステップS53)、サイズNを番号nに設定し(ステップS54)、実行コード“RET FBn”を生成する(ステップS55)。
一方、実行予定のプログラマブルコントローラにサイズNのファンクションブロック復帰処理58a、58b、・・・、58mが実装されていない場合(ステップS53)、サイズNよりも大きなサイズをサポートするファンクションブロック復帰処理58a、58b、・・・、58mが実装されているかどうかを検索する(ステップS56)。
そして、サイズNよりも大きなサイズをサポートするファンクションブロック復帰処理58a、58b、・・・、58mが実装されている場合(ステップS57)、そのファンクションブロック復帰処理58a、58b、・・・、58mがサポートするサイズMと、ファンクションブロック56a、56b、・・・、56nのテンポラリサイズNとの比率を算出することで、テンポラリメモリ使用率(N/M)を算出する。そして、テンポラリメモリ使用率(N/M)が目標メモリ使用率以上の場合(ステップS58)、サイズMを番号nに設定し(ステップS59)、実行コード“RET FBn”を生成する(ステップS55)。
一方、サイズNよりも大きなサイズをサポートするファンクションブロック復帰処理58a、58b、・・・、58mが実装されていない場合(ステップS57)またはテンポラリメモリ使用率(N/M)が目標メモリ使用率未満の場合(ステップS58)、実行コード“RET FB_V”を生成し(ステップS60)、FB番号に対応するテンポラリサイズテーブル領域72が未登録ならサイズNを登録する(ステップS61)。
以上の図11、図12の説明において、nはサイズNの値をそのまま格納しても良いし、サイズNのファンクションブロック呼び出し処理57a、57b、・・・、57mが実装されている場所の値を格納してもよい。例えば、図8のサポートサイズテーブル71の順番でファンクションブロック呼び出し処理57a、57b、・・・、57mが実装されている場合、N=20においては2番目であるファンクションブロック呼び出し処理57bが呼び出し対象になるので、nには2を設定する。このようにnの値はサイズNのファンクションブロック呼び出し処理57a、57b、・・・、57mを一意に決められるものであれば何でも良く、例えばアドレス値やファンクションブロック呼び出し名称であっても構わない。上記どのようなnの情報が実行コードに記載されるかは予め決めておき、この規則は図5のマイクロプロセッサ59においても反映されているものとする。このnの情報に従い、マイクロプロセッサ59は対応した呼び出し/復帰処理を実行するものとする。
また、図11、図12のファンクションブロック呼び出し/復帰処理において、呼び出し処理と復帰処理が対で実施されている。そこで、図11において呼び出されたFB側で、nの情報、及び呼び出し元情報を保持し、図12においてステップS35及びステップS40のみで構成しても構わない。
以上のように第2実施形態では、コンパイラ側で細かな設定処理を実施しCPUモジュール(プログラマブルコントローラ)側ではマイクロプロセッサは実行コードに従って処理するだけなので、プログラムの実行性能が高い。また、テンポラリサイズテーブルを参照する回数を減らしているので第1実施形態に比べオーバヘッド時間も少なくなる。加えて、サポートサイズテーブルにより、ユーザはファンクションブロックに応じて的確にテンポラリサイズを設定できるので、必要なメモリ容量が少なくなるよう効率的にメモリを使用することが可能になる。
本発明の第1実施形態に係るプログラマブルコントローラに搭載されるCPUモジュールの概略構成を示すブロック図である。 本発明の第1実施形態に係るコンパイラが生成するコードの一例を示す図である。 本発明の第1実施形態に係るファンクションブロックの実行方法を示す図である。 本発明の第1実施形態に係るファンクションブロック呼び出し処理およびファンクションブロック復帰処理を示すフローチャートである。 本発明の第2実施形態に係るプログラマブルコントローラに搭載されるCPUモジュールの概略構成を示すブロック図である。 図5のテンポラリデータ領域およびテンポラリサイズテーブル領域の概略構成を示すブロック図である。 本発明の第2実施形態に係るコンパイラが生成するコードの一例を示す図である。 本発明の第2実施形態に係るコンパイラの動作を概念的に示す図である。 本発明の第2実施形態に係るファンクションブロックの実行方法を示す図である。 本発明の第2実施形態に係るメモリ使用率の算出方法を示す図である。 本発明の第2実施形態に係るファンクションブロック呼び出し処理を示すフローチャートである。 本発明の第2実施形態に係るファンクションブロック復帰処理を示すフローチャートである。 プログラマブルコントローラの概略構成を示すブロック図である。 従来のプログラマブルコントローラに搭載されるCPUモジュールの概略構成を示すブロック図である。 図14のテンポラリデータ領域およびテンポラリサイズテーブル領域の概略構成を示すブロック図である。 従来のコンパイラが生成するコードの一例を示す図である。 従来のファンクションブロックの実行方法を示す図である。 従来のファンクションブロック呼び出し処理およびファンクションブロック復帰処理を示すフローチャートである。
符号の説明
11、51 CPUモジュール
12、52 プログラムRAM
13、53 ユーザプログラム
14、54 システムプログラム
15a、15b、・・・、15o、55a、55b、・・・、55o プログラム
16a、16b、・・・、16n、56a、56b、・・・、56n ファンクションブロック
17a、17b、・・・、17m、57a、57b、・・・、57m ファンクションブロック呼び出し処理
18a、18b、・・・、18m、58a、58b、・・・、58m ファンクションブロック復帰処理
19、59 マイクロプロセッサ
20、60 データRAM
21、61 ユーザデータ領域
22、62 テンポラリデータ領域
24、25、64、65 ファンクションブロックワーク領域
26、66 空き領域
27、28 テンポラリサイズ
71 サポートサイズテーブル
72 テンポラリサイズテーブル領域
73 可変長対応ファンクションブロック呼び出し処理
74 可変長対応ファンクションブロック復帰処理
75 ユーザプログラム(ソース)
80 コンパイラ

Claims (3)

  1. ユーザプログラム上で呼び出されるファンクションブロックを記憶するファンクションブロック記憶手段と、
    前記ファンクションブロックの実行時に前記ファンクションブロックがワークメモリとして使用するテンポラリデータ記憶手段と、
    前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズを内部に保持し、前記テンポラリサイズに基づいて前記ファンクションブロックがワークメモリとして使用するサイズ分の領域を前記テンポラリデータ記憶手段上で確保するファンクションブロック呼び出し処理手段とを備え、前記ファンクションブロック呼び出し処理手段は、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズに応じて複数設けられていることを特徴とするプログラマブルコントローラ。
  2. 前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズを内部に保持し、前記テンポラリサイズに基づいて前記ファンクションブロックがワークメモリとして使用したサイズ分の領域を前記テンポラリデータ記憶手段上で開放するファンクションブロック復帰処理手段を備えることを特徴とする請求項1に記載のプログラマブルコントローラ。
  3. 前記ファンクションブロック復帰処理手段は、前記ファンクションブロックが前記ワークメモリとして使用する分のテンポラリサイズに応じて複数設けられていることを特徴とする請求項2に記載のプログラマブルコントローラ。
JP2007204367A 2007-03-19 2007-08-06 プログラマブルコントローラ Active JP4849033B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007204367A JP4849033B2 (ja) 2007-03-19 2007-08-06 プログラマブルコントローラ

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2007070478 2007-03-19
JP2007070478 2007-03-19
JP2007204367A JP4849033B2 (ja) 2007-03-19 2007-08-06 プログラマブルコントローラ

Publications (2)

Publication Number Publication Date
JP2008262529A JP2008262529A (ja) 2008-10-30
JP4849033B2 true JP4849033B2 (ja) 2011-12-28

Family

ID=39984935

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007204367A Active JP4849033B2 (ja) 2007-03-19 2007-08-06 プログラマブルコントローラ

Country Status (1)

Country Link
JP (1) JP4849033B2 (ja)

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2589791B2 (ja) * 1988-12-14 1997-03-12 日本たばこ産業株式会社 ループ制御装置
JPH07334214A (ja) * 1994-06-07 1995-12-22 Toshiba Corp プログラマブルコントローラ
JP3389592B2 (ja) * 1997-01-27 2003-03-24 オムロン株式会社 プログラマブルコントローラ
JP2000020297A (ja) * 1998-07-01 2000-01-21 Omron Corp 制御装置
JP2000284815A (ja) * 1999-03-30 2000-10-13 Fuji Electric Co Ltd プログラム作成装置
JP3844051B2 (ja) * 2001-07-10 2006-11-08 オムロン株式会社 コントローラ
JP4319082B2 (ja) * 2004-04-08 2009-08-26 三菱電機株式会社 プログラミングシステム
JP4760607B2 (ja) * 2006-08-10 2011-08-31 株式会社明電舎 プログラマブルコントローラ

Also Published As

Publication number Publication date
JP2008262529A (ja) 2008-10-30

Similar Documents

Publication Publication Date Title
CN109739508B (zh) 源代码编译方法、装置、系统及存储介质
CN108319499B (zh) 任务调度方法及装置
CN114970814A (zh) 神经网络计算图的处理方法及处理装置
CN114841323A (zh) 神经网络计算图的处理方法及处理装置
JP4849033B2 (ja) プログラマブルコントローラ
CN103488517A (zh) Php代码编译方法、php代码运行方法及装置
CN112925586A (zh) 一种小程序路由方法、装置、计算机设备及存储介质
CN102520976A (zh) 一种dsp程序的固化方法
CN104765634B (zh) 一种Linux系统内核新功能增加方法
JPH03229352A (ja) プログラム変更方法
CN102141938A (zh) 多线程系统中软件负荷的调整方法及装置
KR101331383B1 (ko) 데이터 처리 방법 및 장치
CN111596923B (zh) Haxe静态链接库构建方法、装置和电子设备
CN114218278A (zh) http接口的数据表字段查询方法及系统
CN114756229A (zh) 基于微前端的开发页面生成方法及其相关装置
KR20100099569A (ko) 실행 파일 생성 방법 및 그 방법을 이용하는 시스템 장치
CN112286894A (zh) 日志生成方法、装置以及可读存储介质
JP2017016503A (ja) コンパイラ、コンパイル装置及びコンパイル方法
CN105488169A (zh) 一种多进程文件转换方法及装置
JP2007280214A (ja) プログラマブルコントローラ
JP4449799B2 (ja) データ動的読み込み型テンプレート適用方法および装置
CN114035845A (zh) 固件快速rom化方法及装置
CN111984434B (zh) 基于安卓系统的跨进程数据读写方法、装置及存储介质
CN112988224B (zh) 微服务框架的接口文件生成方法、电子设备及存储介质
US20130246779A1 (en) Calling Firmware Runtime Services of Basic Input Output System

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20080919

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20080919

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080919

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110222

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110224

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110408

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20110422

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110920

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111003

R150 Certificate of patent or registration of utility model

Ref document number: 4849033

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141028

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250