米国特許情報 | 欧州特許情報 | 国際公開(PCT)情報 | Google の米国特許検索
 
     特許分類
A 農業
B 衣類
C 家具
D 医学
E スポ−ツ;娯楽
F 加工処理操作
G 机上付属具
H 装飾
I 車両
J 包装;運搬
L 化学;冶金
M 繊維;紙;印刷
N 固定構造物
O 機械工学
P 武器
Q 照明
R 測定; 光学
S 写真;映画
T 計算機;電気通信
U 核技術
V 電気素子
W 発電
X 楽器;音響


  ホーム -> 計算機;電気通信 -> オムロン株式会社

発明の名称 コントローラ
発行国 日本国特許庁(JP)
公報種別 公開特許公報(A)
公開番号 特開2003−22182(P2003−22182A)
公開日 平成15年1月24日(2003.1.24)
出願番号 特願2001−209227(P2001−209227)
出願日 平成13年7月10日(2001.7.10)
代理人 【識別番号】100092598
【弁理士】
【氏名又は名称】松井 伸一
【テーマコード(参考)】
5B033
5H215
5H220
【Fターム(参考)】
5B033 AA05 AA06 DA01 DA14 DA16 DA17 EA01 EA02 
5H215 BB07 BB10 CC07 CX04 GG04
5H220 CC07 CX04 DD01 JJ55 JJ57 JJ59
発明者 市村 勝彦 / 秋田 景
要約 課題
間接参照方式のメリット(小メモリ容量,容易な編集)を発揮しつつ、演算処理の高速化を図ることができコントローラを提供すること
解決手段
ユーザプログラムが格納されたユーザメモリ20と、ユーザメモリにアクセスし、ユーザプログラムで規定される命令を読み出すとともに、命令を解読し、演算実行するASIC10と、演算実行する際に使用されるデータメモリ21とを備え、データメモリには、構造化されたデータが格納されるとともに、そのデータメモリへのアクセスが、予め設定した基底アドレスからのオフセットにより実行可能とする。ASIC内に基底アドレスを格納した基底アドレスレジスタ18を設け、命令解読部13にて命令を解読する際に基底アドレスレジスタにアクセスし、その命令に対応する基底アドレスを取得し、その取得した基底アドレスと解読した命令に基づいて演算部14にて演算実行をする。
特許請求の範囲
【請求項1】 プログラムが格納されたユーザメモリと、前記ユーザメモリにアクセスし、前記プログラムで規定される命令を読み出すとともに、命令を解読し、演算実行する演算制御部と、その演算制御部に接続され、前記演算実行する際に使用されるデータメモリとを備えたコントローラであって、前記データメモリには、構造化されたデータが格納されるとともに、そのデータメモリへのアクセスが、予め設定した基底アドレスからのオフセットにより実行可能とし、前記演算制御部内に前記基底アドレスを格納した基底アドレスレジスタを設け、前記命令を解読する際に前記基底アドレスレジスタにアクセスし、その命令に対応する前記基底アドレスを取得し、その取得した基底アドレスと解読した命令に基づいて前記演算実行をするようにしたことを特徴とするコントローラ。
【請求項2】 前記プログラムは、呼び出す関数と使用するデータ領域の指定を行う関数呼び出し処理と、その呼び出し処理の次の命令へ復帰する復帰処理を行う専用命令を備えたことを特徴とする請求項1に記載のコントローラ。
【請求項3】 前記関数呼び出し処理における関数並びにデータ領域の指定は、テーブル参照による間接指定としたことを特徴とする請求項2に記載のコントローラ。
【請求項4】 前記データメモリは、データ種別毎にメモリマップが構成され、前記基底アドレスレジスタは、前記データ種別毎にそれぞれ設定されることを特徴とする請求項1から3のいずれか1項に記載のコントローラ。
発明の詳細な説明
【0001】
【発明の属する技術分野】この発明は、コントローラに関するものである。
【0002】
【発明の背景】PLCなどのコントローラの場合、ユーザプログラムは1つのプログラムの固まりとしてユーザメモリに格納されている。同様に、ユーザプログラムの演算実行中に参照するデータも、データメモリやレジスタに格納される。そして、ユーザプログラムが係るデータが格納されるデータ領域に対してアクセスする場合、プログラム中で固定アドレスを記述することにより、当該メモリ領域(データ領域)をアクセスし、データの読み書きをするようにしている。
【0003】そして、ユーザプログラムの構造化は、同一のデータ領域に対する同一処理の繰り返し,呼び出し/復帰処理の単位で行われている。従って、同一機能を実現するプログラムであっても、アクセス対象のデータ領域が異なる場合には、対象データ領域毎にプログラムを作成する必要がある。
【0004】一例を示すと、「ADD Xch,Ych,Zch」(XchのデータにYchのデータを加算し、求めた結果をZchに格納する)というプログラムを実行する場合に、アクセス先のアドレス(X,Y,Z)が(100,101,102)と(200,201,202)とすると、図1(a),(b)に示すように、参照先のアドレスを直接プログラムに記述した2つのプログラムを用意する必要がある。
【0005】従って、同じ処理内容を複数作成し、ユーザメモリに登録する必要があるので、演算対象の命令も増え、必要とするユーザメモリの容量が大きくなる。さらに、プログラムの機能を変更する場合には、対応する全てのプログラムを変更する必要がある。すなわち、例えば図1に示すプログラムにおける加算処理を乗算処理に変更する場合、プログラム1とプログラム2を、それぞれ変更する必要がある。従って、同一機能のプログラムの数が多くなるほど、修正するプログラム数が多くなり、その修正処理が煩雑となる。さらに、プログラムの一部を変更した場合でも、コンパイルや更新処理はプログラム単位で行われ、しかも、PLCなどの場合、起動中にプログラムの変更を行うことが多いため、複数プログラムに及ぶ変更は、更新データ量が多く、負荷が高くなるという問題を有する。
【0006】なお、図1に示したプログラムの場合、プログラム中に固定アドレスを記述した直接参照方式であるので、図2に示すように、各演算命令を実行する際に処理対象のアドレスを読み出す処理は不要となり、データ領域に対して読み出し或いは書き込みを行えば良いので、処理速度は速くなるという利点はある。
【0007】一方、アクセス対象のデータ領域が異なる場合であっても、データ参照を間接参照とすることにより、同一のプログラムで対応することができる(間接参照方式)。この間接参照方式を用いて、図1に示したプログラムを表記すると、図3に示すようになる。
【0008】ここで、図3(c)に示すプログラムが、図1に示した「ADD Xch,Ych,Zch」(XchのデータにYchのデータを加算し、求めた結果をZchに格納する)というプログラムに対応するものである。より具体的には、図3(c)中の3ライン目までが、実際の演算処理に対応する。そして、この例では、「Func_add」という関数名で規定される。
【0009】この「Func_add」という関数は、データ領域指定ポインタ(PTR,PTR+1)で指定される領域のデータを読み出し、読み出した2つのデータを加算し、その加算結果を(PTR+2)で指定される領域に格納する。そして、係る関数の演算処理を実行後、後述するように、呼び出し処理の次の命令へジャンプする。
【0010】ここで、「@(PTR)」は、「PTRに格納されているデータ」をアドレスとして真のデータを参照することを示す。このように、演算処理のプログラム中には、具体的な固定アドレスを記述しないことにより、例えば、この加算処理を乗算処理に変更する場合には、関数「Func_add」のプログラムを修正するだけで済むため、更新が容易に行える。つまり、プログラムを実行させながら修正するオンライン編集を高速に行うことができる。
【0011】但し、このようにプログラム中に固定アドレスが規定されていないため、実際にデータをアクセスするためには、PTRに代入する値(ポインタ)を指定する必要がある。それが図3(a),(b)で示すProgram1,2である。このプログラムの内容を図3(a)を用いて説明すると、まず、「MOV NPC,@STK」にて、戻り番地(NPC:ネクストポインタカウンタ)をSTKで指定された領域に退避する。次に、「MOV PTR,@(STK+1)」にて、データ領域指定ポインタ(PTR)を、(STK+1)データで指定された領域に退避する。更に、「ADD STK,2,STK」にて、STKに2を加算した値を新たなSTKとする。つまり、戻り番地格納領域STKを更新する。「MOV 0100,PTR」で、データ領域指定ポインタを設定する。つまり、固定アドレス「0100」をデータ領域指定ポインタとする。そして、「JMPfunc_add」により、関数へジャンプする。
【0012】このProgram1からのジャンプにより、図3(c)に示す関数が読み出されると、PTRは0100であるので、固定アドレス0100,0101のデータを読み出し、0102に格納する処理を実行する。
【0013】次に、「SUB STK,2,STK」により、退避領域ポインタの更新を行う。つまり、現在のSTKから2を引いた値を新たなSTKとする。これにより、STKの値は、Program1の1ライン目の実行時の値に戻る。そして、「MOV @(STK+1),PTR」を実行することにより、ポインタの復元をする。つまり、Program1の2ライン目の実行により退避したデータ領域指定ポインタPTRに復元する。そして、「JMP @STK」により、呼び出し処理の次命令へジャンプする。つまり、Program1の1ライン目の実行によって退避した戻り番地ヘ飛ぶ。
【0014】これにより、ユーザプログラム中のProgram1を実行し、関数を読み出して所定の加算処理(関数Func_add)を実行し、演算結果を格納した後、ユーザプログラムにおけるProgram1の次のプロクラムの実行に移行する。Program2についても同様の動作が行われる。
【0015】このように、演算処理のプログラムを共通化したものの、具体的なデータメモリ中のアドレスを特定する(ポインタを用いて)ために、命令数が増大する。すなわち、図3に示した間接参照方式によるユーザプログラムの場合、図4に示すように、演算命令数も18(演算対象の2に対して16命令追加)となり、ユーザメモリ容量にも影響を与える(直接参照方式に比べると、メモリ容量は少なくて済む)。
【0016】また、間接参照を用いるため、図5に示すように、@(PTR),@(PTR+1),@(PTR+2)に付いてアドレス読み出しが必要となり、ポインタ操作などのオーバーヘッド処理が増加するとともにメモリ参照回数が増加するので実行速度が低下する。特に、演算処理の中で、外部メモリであるデータメモリの読み出しは、パイプライン処理の中でも時間がかかるもので、この時間をできるだけ短縮するのが、高速化のための重要な要素の1つである。
【0017】一方、図6に示すように、PLCなどで使用されるデータメモリに対するアクセス方法としては、1ビット単位でアクセスするものと、1チャネル(1ch:8ビット,16ビットなど)単位でアクセスするものがある。さらに、書き込むデータとしても、キャッシュのように一時的に記憶するものもあれば、電断時にあっても保持する必要があるものがある。何れの場合も、データメモリ内のアドレスを指定することになるが、アドレス指定の容易性から、ビットアクセス領域,チャネルアクセス領域並びに電断時保持領域のように、メモリの特性/利用方法によって各領域ごとに区分けされてメモリマップが構成されている。
【0018】このとき、ある処理として、ビットアクセス領域は1ch(実際に必要なのは、16ビット中のある1ビットであるか、アクセスは全体),チャネルアクセス領域は1chで、電断時保持領域は2chがそれぞれ割り当たられたものとする。すると、図6(a)中左側に示すように、Program1では、ビットアクセス領域に対しては、「PTR」,チャネルアクセス領域に対しては「PTR+4」,並びに電断時保持領域に対しては「PTR+10」とすることにより、データ領域にアクセスできる。
【0019】この場合に、各領域で隙間なく先頭からデータを格納したとすると、PTRがビットアクセス領域の2番目のチャネルのビットを指した場合、PTR+4より求められるチャネルアクセス領域のアクセス先も当該領域の2チャネル目となるので問題がないが、電断時保持領域に対しては、PTR+10より求められるアクセス先は、当該領域の2チャネル目となり、正しいデータをアクセスできない。
【0020】そこで、図6(b)に示すように、最大データ個数(図示の場合2)に併せて他の領域も格納するデータ領域を設定する必要がある。そのため、図示の如く空き領域を生じてしまう。従って、データメモリを効率良く使用することができないという問題を有する。
【0021】この発明は、ユーザメモリのメモリ容量を小さくしつつ演算処理の高速化を図ることができ、プログラムの編集も容易に行うことのできるコントローラを提供することを目的とする。
【0022】
【課題を解決するための手段】この発明によるコントローラは、プログラムが格納されたユーザメモリと、前記ユーザメモリにアクセスし、前記プログラムで規定される命令を読み出すとともに、命令を解読し、演算実行する演算制御部と、その演算制御部に接続され、前記演算実行する際に使用されるデータメモリとを備えたコントローラである。そして、前記データメモリには、構造化されたデータが格納されるとともに、そのデータメモリへのアクセスが、予め設定した基底アドレスからのオフセットにより実行可能にし、前記演算制御部内に前記基底アドレスを格納した基底アドレスレジスタを設けた。前記命令を解読する際に前記基底アドレスレジスタにアクセスし、その命令に対応する前記基底アドレスを取得し、その取得した基底アドレスと解読した命令に基づいて前記演算実行をするように構成した。
【0023】演算実行する際に参照するデータメモリのデータ領域は、基底アドレスからのオフセットにより規定され、その際にメモリアクセスが行われる。従来の間接参照方式の場合、データ領域にアクセスする前に、参照するデータ領域がどこかを特定するためにデータメモリ等に対してメモリアクセスを行うことを演算実行処理の中で行っていたが、本発明では、演算実行する前の命令の解読の際に、演算制御部内の基底アドレスレジスタを参照して基底アドレスを取得できるので、演算実行の際には既にデータ領域が認識されている。そして、基底アドレスの取得は、データメモリに対するメモリアクセスと違い、瞬時に行える。よって、演算実行の際のメモリアクセス回数が削減でき、高速演算処理が可能となる。
【0024】従って、間接参照方式のデメリットが解消されるので、ユーザメモリに格納するプログラムを間接参照方式で記述することにより、編集の容易性やユーザメモリのメモリ容量の縮小化などのメリットを受けつつ、演算処理の高速化が図れる。
【0025】前記プログラムは、呼び出す関数と使用するデータ領域の指定を行う関数呼び出し処理と、その呼び出し処理の次の命令へ復帰する復帰処理を行う専用命令を備えるよい。関数呼び出し処理を行う専用命令は、実施の形態では「F_CALL命令」に対応し、復帰処理を行う専用命令は、実施の形態では「F_RET命令」に対応する。
【0026】このように専用命令をも受けることにより、プログラム中の命令数が削減され、ユーザメモリのメモリ容量のさらなる縮小化が図れる。もちろん、係る専用命令を用いずにプログラムを作成しても良い。
【0027】さらに、前記関数呼び出し処理における関数並びにデータ領域の指定は、テーブル参照による間接指定とすると好ましい。この発明は、第2の実施の形態により実現されている。このようにすると、利用する関数やデータ領域を変更する場合でも、プログラム自体を修正することなく、間接指定するためのテーブルを修正するだけでよいので、変更する際の効率が更に増す。もちろん、本発明は、第1の実施の形態のように、間接指定をしないものでも良い。
【0028】更に、前記データメモリは、データ種別毎にメモリマップが構成され、前記基底アドレスレジスタは、前記データ種別毎にそれぞれ設定されるようにすることもできる。この発明は、第3の実施の形態で実現されている。このように、データ種別毎に基底アドレスを設定することにより、各データ種別のメモリ領域に対し、効率良くデータを格納することができる。
【0029】
【発明の実施の形態】図7は、本発明に係るコントローラであるPLCの第1の実施の形態を示している。同図に示すように、ASIC10の外部に、ユーザプログラムが格納されたユーザメモリ20と、演算実行に使用するデータを格納する外部メモリとしてのデータメモリやレジスタ(以下、単に「データメモリ21」と称する)が接続される。データメモリ21は、必要に応じてバッテリーが接続されたものを用意し、PLCの主電源が切断されたとしても、そのバッテリーからの電力供給を受け、格納されたデータを保持する。
【0030】ASIC10は、ユーザメモリコントローラ11を介して、ユーザメモリ20をアクセスし、そのユーザメモリ20に格納されたユーザ作成のユーザプログラムを読み出し、命令読出部12に与える。命令読出部12は、ユーザプログラム中の命令コードの読み出しを制御し、読み出した命令コードを順次次段の命令解読部13に与える。
【0031】命令解読部13では、与えられた命令コードを解釈し、データメモリ21(レジスタを含む)へアクセスが必要な場合には、データ読出部17に処理を依頼し、係る依頼をした場合、データ読出部17からのデータを取得後、必要なデータを揃えて演算部14に渡す。もちろん、係るデータ取得が必要のない場合には、そのまま演算部14に処理を依頼する。
【0032】データ読出部17は、命令解読部13からの依頼に基づき、データメモリコントローラ16を介してデータメモリ21にアクセスし、所望のデータ領域に格納されたデータを読み出し、命令解読部13に渡す。
【0033】一方、演算部14は、入力されたデータに対し、規定された演算処理を行い、内容状態の交信を行ったり、データ書込部15へデータ出力を依頼する。このデータ出力の依頼を受けたデータ書込部15は、データメモリコントローラ16を介してデータメモリ21の所望のデータ領域に対してデータを書き込む。なお、上記した構成は、パイプライン構造のPLCと基本的に従来と同様であるので、その詳細な説明を省略する。
【0034】本実施の形態も、間接参照方式をとり、間接参照方式の利点であるオンライン編集速度の高速化を維持しつつ、実行速度の高速化並びにユーザメモリサイズの縮小化を図るようにしている。
【0035】まず、本形態では、基底アドレスレジスタ18を設けている。この基底アドレスレジスタ18は、間接参照で指定される基底アドレス(従来例で示したデータ領域指定ポインタに対応するもの:PTR)を格納するレジスタであり、命令解読部13は、基底アドレスレジスタ18を参照することにより、アクセス先のデータメモリ21中のアドレスを認識する。なお、従来の基底アドレスは、データメモリ21に格納されており、データ読出部17に取得依頼をし、外部メモリに対するアクセスを行い取得していたが、本形態では、内部処理により瞬時に取得できる。
【0036】さらに、本形態では、構造化命令として、プログラム実行中のポインタ操作と関数の呼び出し処理を行う専用命令(F_CALL命令)と、関数実行中のポインタの操作と復帰処理を行う専用命令(F_RET命令)を追加し、基底アドレスレジスタの更新は、上記専用命令のみにしたため、ハザードが発生することが無くなる。これにともない、ハザード検知回路が不要となる。よって、構造簡易化する。
【0037】ここで、F_CALL命令は、「F_CALL 引数1,引数2」で記述される命令で、図8(a)に示すように「復帰処理に必要なデータの待避処理」,「演算準備処理」,「演算処理起動処理」を順次実行する。ここで、「NPC」は、「ネクストポインタカウンタ」であり、この命令が実行された後に行う次の命令の格納先を示すポインタカウンタである。また、「CPC」は、「カレントポインタカウンタ」であり、現在の命令のポインタカウンタである。
【0038】また、F_RET命令は、「F_RET (引数無し)」で記述される命令で、具体的な処理は図8(b)に示すように、待避データの復元処理を実行するものである。
【0039】これら2つの専用命令を用いて、従来の間接参照方式の具体例として図3に示したプログラム構造を記述すると、本形態では図9に示すようになる。つまり、各Program1,2では、F_CALL命令の引数1として呼び出す関数である「func_add」(ユーザメモリにおけるプロクラム格納領域のアドレス)を、引数2としてアクセスするデータ領域(PTR)を記述する。
【0040】これにより、例えばProgram1を実行すると、F_CALL命令により、図8(a)に示す処理を実行し、復帰処理に必要なデータを待避するとともに、演算準備,起動し、Func_addを演算実行する。その後、F_RET命令に従い、呼び出し処理の次命令(NPC出指定される命令)に復帰する。
【0041】読み出し並びに復帰のための専用命令を生成したため、実行性能は、図10,図11に示すように従来の間接参照方式に比べて向上する。すなわち、図10に示すように、演算対象の2命令に加え、非演算対象であるF_CALLとF_RETがそれぞれ追加され、合計4命令の追加となり、全体で6命令となる。これは、図4に示す従来例の18命令に比べて命令数が削減でき、ユーザメモリ20のメモリ容量も小さくて済む。
【0042】また、基底アドレスを追加したため、図12に示すように命令解読処理の際にアドレスを読み込むので、演算命令(関数Func_add)を実行する際に間接参照のためのメモリ,レジスタを参照する必要が無くなる。つまり、図11に示すように、@(PTR),@(PTR+1),@(PTR+2)のいずれの処理をする際にも、アドレス呼出処理は不要となり、メモリ参照回数は、2回のデータ読み出しと、演算結果を格納する1回のデータ書き込みの合計3回となる。つまり、直接参照方式と同様となり、高速化が図れる。
【0043】なお、従来の間接参照方式における手順と、本実施の形態の間接参照方式とを対比すると、図12(a)に示すように、従来方式によれば、間接参照により特定されるべき実際のデータメモリ21におけるデータ領域を知得するために、演算実行中にメモリ,レジスタを参照しアドレスを読み出す処理を実行したが、図12(b)に示すように、本実施の形態によれば、アドレス読み出しは、命令解読処理の際に基底アドレスレジスタ18を参照して行うので、演算命令の実行の際は、上記アドレス読み出しにより取得したアドレスに基づき、データメモリ21に対してアクセスしてデータを読み出すデータリード処理と、その読み出したデータに基づき演算を行う演算実行処理を適宜繰り返し行い、演算結果を所定のデータ領域に書き込むデータライト処理を行う。つまり、この演算命令の実行の際には、間接参照のためのメモリ,レジスタ参照は不要となる。
【0044】次に、本実施の形態におけるより具体的な演算実行例、つまり、演算命令を実際に行った場合のポインタその他の状態(値)の変位の一例として、ネストを持つプログラムを例に説明する。関数FuncAdd4to1が図13(a)のラダー図で示すプログラムのようになっており、係る関数を読み出して実行するプログラムの一例としては、図13(b)に示すように記述することができる。この場合において、各命令のポインタカウンタ(PC)は、左欄外に記載した値としている。
【0045】上記した図13(b)に示すプログラムを1ライン目から順番に実行すると、対象となるCPC,STK,NPC,PRTの各値や、データメモリ21のデータは、図14,図15に示すように変位する。なお、図において、T0は、PC=1命令を実行する前の状態を示しており、PC=1の命令を実行した結果のポインタなどの変化はT1に記述している。更に、図中の網掛け部分は、F_CALL命令によって退避され、また、F_RET命令によって復元されデータを示している。更に、二重下線は、F_CALL命令によって引数から設定されるデータを示している。
【0046】まず1ライン目の「F_CALL FuncAdd4to1,100」を実行する場合、現命令のPCは1であり、命令文は1ラインであるので、次命令のPCは2となる。さらに、データ領域は100ch(100から103にはAからDが格納),退避・復元データ領域は1000chからメモリ割付がされているとすると、このFCAL(A)の実行により、CPC=1,STK=1000,NPC=2,PTR=0となる。また、退避処理を実行し、戻り番地NPCとデータ領域指定ポインタPTRの値を、それぞれ退避・復元データ領域であるSTK(=1000)とSTK+1(=1001)に格納する。
【0047】そして、関数FuncAdd4to1が呼び出され(起動され)、実行される。つまり、まず、PC=10のFCAL■を実行する。FCAL■は、引数1=関数FuncAdd2to1,引数2=OPR+2のF_CALL命令であるので、所定の退避処理を実行する。すなわち、格納領域ポインタを現在のSTK(=1000)に2を加えた値(1002)を新たなSTKとする。また、今回の演算処理(T1)は、CPC=10であり、次命令のPCは11であり、NPC=11となり、PTRは100となる。なお、PTR=100は、基底アドレスレジスタ18をアクセスし、基底アドレスが100であることを予め取得している。そして、戻り番地NPCとデータ領域指定ポインタPTRの値(11,100)を、それぞれ退避・復元データ領域であるSTK(=1002)とSTK+1(=1003)に格納する。
【0048】そして、FuncAdd2to1が起動され、PC=50を実行し、データ領域のOPR(この場合102)と、OPR+1(この場合103)の値(C,d)を読み出し、それらを加算して得られた値E=C+DをOPR+2(この場合104)に格納する。
【0049】次いで、F_RET命令により、退避データの復元をする。つまり、T3に示すように、@STK(この場合1002ch)に格納されていたデータ(11)が次のCPCとなり、@(STK+1)(この場合1003ch)に格納されていたデータ100が、PTRにセットされる。また、STKは1002であり、NPCは12となる。以下、順次退避処理と復元処理を適宜行いながら命令を実行し、PC=14のF_RET命令により、最終的にPC1の命令が完了し、PC=2の処理に移行する。
【0050】上記したように、本実施の形態では、複数のプログラムが、同一の関数を呼び出して実行するようにしたため、関数の演算処理内容を変更する場合には、当該関数部分のみの変更で対応できる。そして、更新に必要なデータ量も、プログラム全体でなく、小さな関数単位で変更可能なため、負荷が小さくて済む。
【0051】さらに、F_CALL命令は、引数として関数部が格納されているユーザメモリのアドレスと、データメモリのアドレスを必要としている。そこで、係る関数やデータ領域を変更する場合の効率化を図るため、F_CALL命令にテーブル参照処理を追加すると良い。これが第2の実施の形態である。
【0052】すなわち、F_CALL命令の処理として、図16に示すように、復帰処理に必要なデータの退避を行った後、演算準備処理の前にテーブル参照処理を行うようにする。このテーブル参照処理は、引数データからテーブル参照用アドレスを取得または作成し、関数格納領域のユーザメモリアドレスと、参照するデータ領域のデータメモリアドレスを取得する。これは、例えば、プログラム上では、テーブル参照アドレスの直接記述することにより対応できる。なお、その他の処理ステップは、図8(a)に示したものと同様である。
【0053】このように、テーブル参照方式にすると、プログラムの検索が不要となり、テーブル内のデータを編集するのみで対応できるので、短時間で編集処理が完了する。
【0054】以下、係る効果を具体例をもって説明する。まず、効果を検証するためのサンプルプログラムとして図17に示すものを想定する。ここで、各ファンクションブロックの入出力に付記した3桁の数字が、使用するデータメモリのアドレスである。
【0055】そして、編集内容として、図18に示すようにしたとする。つまり、編集内容1(No.1)のように、Func_Add■の利用データ領域「100,101,102」を「400,401,402」に変更する場合には、既存方式(テーブル参照をしない第1の実施の形態)の場合には、プログラムの編集をすることになるが、テーブル参照方式では、データテーブルの編集を行うだけで済む(具体例は後述する)。
【0056】同様に、編集内容2(No.2)のように、利用するファンクションブロックの内容(実際の関数の内容)を「OUT=IN1+IN2」を「OUT=IN1−IN2」に変更する場合には、既存方式(テーブル参照をしない第1の実施の形態)の場合には、プログラムの編集をすることになるが、テーブル参照方式では、ファンクションテーブルの編集を行うだけで済む(具体例は後述する)。
【0057】すなわち、既存方式の場合の変更は、図19に示すように、編集内容1については、プログラム中に記述された「100」,「101」,「102」の各アドレス値を「400」,「401」,「402」の各値に変更する処理を行う。また、編集内容2については、加算処理から減算処理になるので、プログラム中の「Func_Add」を「Func_Sub」に変更し、Func_Addの実際の演算内容をFunc_Subの内容に変更するか、新たに減算処理のFunc_Subのプログラムを追加する必要がある。
【0058】これに対し、テーブル参照方式によれば、図20に示すようにプログラム中には、元々具体的なアドレスが記述されておらず、Data1,Data2,FuncAddなどの論理名で記述されているので、編集内容1,2となってもプログラムに対する変更は不要となる。
【0059】そして、各論理名の参照用アドレスが、図21に示すデータテーブル,ファンクションテーブルのように規定されているとすると、編集内容1へ対応するためには、例えばData1に関連付けられたデータ(データメモリのアドレス)を「100」から「400」に更新することにより実行できる。また、編集内容2への対応は、FuncAddに関連付けられたデータ(ユーザメモリの対応する関数プログラムが格納されたアドレス)を、現在の「100」から減算処理のプログラムが格納されている「200」に変更するだけで済む。なお、その他の構成並びに作用効果は、上記した第1の実施の形態と同様であるのでその詳細な説明を省略する。
【0060】上記した各実施の形態では、いずれも、基底アドレス(PTR)が1つのものを前提としたが、本発明はこれに限ることはなく、基底アドレスを複数用いることができる。これが第3の実施の形態である。
【0061】すなわち、図22に示すようにデータメモリ21には、ビットアクセス領域,チャネルアクセス領域,バッテリーバックアップされる電断時保持領域がそれぞれ割り当てられる場合において、各データ種別に応じて基底アドレスレジスタ(PTR_1,PTR_2,PTR_3)を用意する。
【0062】すると、ある関数が利用するデータ領域が、ビットアクセス領域が1ch:16ビット,チャネルアクセス領域が1ch,電断時保持領域が2chを割り当てた場合でも、個々のポインタへのオフセットを、+0,+0,+0から+1で指定可能となるので、各アクセス領域ごとにデータを詰めて格納することができ、空き領域を生じることなくメモリの使用効率を高めることができる。
【0063】なお、このように基底アドレスレジスタを複数設定する以外の構成並びに作用効果は、上記した各実施の形態と同様であるので、各部についての詳細な説明を省略する。
【0064】
【発明の効果】以上のように、この発明では、データメモリをアクセスする際の基準値ともなる基底アドレス(各データ領域は、この基底アドレスからのオフセットにより特定)を、演算制御部内に設けたため、内部参照で高速に取得できるようになる。よって、処理時間のかかるメモリアクセス回数が削減され、演算処理の高速化を図ることができる。もちろん、プログラムを間接参照方式で記述することにより、ユーザメモリのメモリ容量を小さくしつつ、プログラムの編集も容易に行うことができる。




 

 


     NEWS
会社検索順位 特許の出願数の順位が発表

URL変更
平成6年
平成7年
平成8年
平成9年
平成10年
平成11年
平成12年
平成13年


 
   お問い合わせ info@patentjp.com patentjp.com   Copyright 2007-2013