JP3844051B2 - コントローラ - Google Patents
コントローラ Download PDFInfo
- Publication number
- JP3844051B2 JP3844051B2 JP2001209227A JP2001209227A JP3844051B2 JP 3844051 B2 JP3844051 B2 JP 3844051B2 JP 2001209227 A JP2001209227 A JP 2001209227A JP 2001209227 A JP2001209227 A JP 2001209227A JP 3844051 B2 JP3844051 B2 JP 3844051B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- instruction
- program
- memory
- base address
- 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.)
- Expired - Lifetime
Links
Images
Landscapes
- Control By Computers (AREA)
- Programmable Controllers (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Description
【発明の属する技術分野】
この発明は、コントローラに関するものである。
【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」をデータ領域指定ポインタとする。そして、「JMP
func_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】
さらに、前記関数呼び出し処理における関数並びにデータ領域の指定は、テーブル参照による間接指定としたため、利用する関数やデータ領域を変更する場合でも、プログラム自体を修正することなく、間接指定するためのテーブルを修正するだけでよいので、変更する際の効率が更に増す。
【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,PTRの各値や、データメモリ21のデータは、図14,図15に示すように変位する。なお、図において、T0は、PC=1命令を実行する前の状態を示しており、PC=1の命令を実行した結果のポインタなどの変化はT1に記述している。更に、図中の網掛け部分は、F_CALL命令によって退避され、また、F_RET命令によって復元されデータを示している。更に、二重下線は、F_CALL命令によって引数から設定されるデータを示している。
【0046】
まず1ライン目の「F_CAL FuncAdd4to1,@OPR」の第2引数OPRの引数として100chのアドレスを指定して実行する場合、現命令の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(1)を実行する。FCAL(1)は、引数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▲1▼の利用データ領域「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】
【発明の効果】
以上のように、この発明では、データメモリをアクセスする際の基準値ともなる基底アドレス(各データ領域は、この基底アドレスからのオフセットにより特定)を、演算制御部内に設けたため、内部参照で高速に取得できるようになる。よって、処理時間のかかるメモリアクセス回数が削減され、演算処理の高速化を図ることができる。もちろん、プログラムを間接参照方式で記述することにより、ユーザメモリのメモリ容量を小さくしつつ、プログラムの編集も容易に行うことができる。
【図面の簡単な説明】
【図1】従来の直接参照方式によるプログラムの一例を示す図である。
【図2】そのプログラムを実行した場合の演算命令のメモリ参照回数を示す図である。
【図3】従来の間接参照方式によるプログラムの一例を示す図である。
【図4】そのプログラムを実行した場合の演算命令数を示す図である。
【図5】そのプログラムを実行した場合の演算命令のメモリ参照回数を示す図である。
【図6】各データ領域のアクセス先を1つのデータ領域指定ポインタPTRからのオフセットで指定する場合の問題点を説明する図である。
【図7】本発明の第1の実施の形態を示すブロック図である。
【図8】本発明で使用する専用命令の一例を示す図である。
【図9】上記専用命令を使用して記述したユーザプログラムの一例を示す図である。
【図10】そのプログラムを実行した場合の演算命令数を示す図である。
【図11】そのプログラムを実行した場合の演算命令のメモリ参照回数を示す図である。
【図12】(a)は、従来の装置におけるパイプライン処理手順の一例を示す図である。(b)は、本実施の形態の装置におけるパイプライン処理手順の一例を示す図である。
【図13】動作状況の変化を説明するためのサンプルプログラムを示す図である。
【図14】演算実行に伴う動作状況の変化を説明するための図(その1)である。
【図15】演算実行に伴う動作状況の変化を説明するための図(その2)である。
【図16】本発明の第2の実施の形態の要部を示す図である。
【図17】効果を実証するためのサンプルプログラムを示す図である。
【図18】編集内容を示す図である。
【図19】既存方式(第1の実施の形態)における修正手順の一例を示す図である。
【図20】第2の実施の形態における修正手順の一例を示す図である。
【図21】第2の実施の形態における修正手順の一例を示す図である。
【図22】本発明の第3の実施の形態の要部を示す図である。
【符号の説明】
10 ASIC
11 ユーザメモリコントローラ
12 命令読出部
13 命令解読部
14 演算部
15 データ書込部
16 データメモリコントローラ
17 データ読出部
18 基底アドレスレジスタ
20 ユーザメモリ
21 データメモリ
Claims (2)
- プログラムが格納されたユーザメモリと、
前記ユーザメモリにアクセスし、前記プログラムで規定される命令を読み出すとともに、命令を解読し、演算実行する演算制御部と、
その演算制御部に接続され、前記演算実行する際に使用されるデータメモリとを備えたコントローラであって、
前記データメモリには、構造化されたデータが格納されるとともに、そのデータメモリへのアクセスが、予め設定した基底アドレスからのオフセットにより実行可能とし、
前記演算制御部内に前記基底アドレスを格納した基底アドレスレジスタを設け、
前記命令を解読する際に前記基底アドレスレジスタにアクセスし、その命令に対応する前記基底アドレスを取得し、その取得した基底アドレスと解読した命令に基づいて前記演算実行をするようにし、
前記プログラムは、呼び出す関数の指定と、前記基底アドレスによって使用するデータ領域の指定と、を行う関数呼び出し処理と、その呼び出し処理の次の命令へ復帰する復帰処理を行う専用命令を備え、
前記関数呼び出し処理における関数並びにデータ領域の指定は、テーブル参照による間接指定とした
ことを特徴とするコントローラ。 - 前記データメモリは、データ種別毎にメモリマップが構成され、
前記基底アドレスレジスタは、前記データ種別毎にそれぞれ設定されることを特徴とする請求項1に記載のコントローラ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001209227A JP3844051B2 (ja) | 2001-07-10 | 2001-07-10 | コントローラ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001209227A JP3844051B2 (ja) | 2001-07-10 | 2001-07-10 | コントローラ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003022182A JP2003022182A (ja) | 2003-01-24 |
JP3844051B2 true JP3844051B2 (ja) | 2006-11-08 |
Family
ID=19044912
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001209227A Expired - Lifetime JP3844051B2 (ja) | 2001-07-10 | 2001-07-10 | コントローラ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3844051B2 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE112007000543T5 (de) | 2006-03-07 | 2009-03-26 | Kabushiki Kaisha Yaskawa Denki, Kitakyushu-Shi | Programmiereinrichtung und automatisches Datenstruktur-Identifizierungsverfahren |
JP4849033B2 (ja) * | 2007-03-19 | 2011-12-28 | 富士電機株式会社 | プログラマブルコントローラ |
JP5790128B2 (ja) * | 2011-04-28 | 2015-10-07 | 富士電機株式会社 | プログラマブルコントローラ・システム、その支援装置 |
JP6757385B2 (ja) | 2018-10-23 | 2020-09-16 | 株式会社キーエンス | プログラマブルロジックコントローラおよびメインユニット |
JP6827089B2 (ja) * | 2019-10-09 | 2021-02-10 | 株式会社ユニバーサルエンターテインメント | 遊技機 |
JP6827093B2 (ja) * | 2019-10-23 | 2021-02-10 | 株式会社ユニバーサルエンターテインメント | 遊技機 |
-
2001
- 2001-07-10 JP JP2001209227A patent/JP3844051B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JP2003022182A (ja) | 2003-01-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2810675B2 (ja) | デバック方式 | |
US9495136B2 (en) | Using aliasing information for dynamic binary optimization | |
US20050028148A1 (en) | Method for dynamic recompilation of a program | |
US6330691B1 (en) | Use of dynamic translation to provide breakpoints in non-writeable object code | |
JP3844051B2 (ja) | コントローラ | |
CN112596918A (zh) | 系统内各程序间共享变量的方法及存储装置 | |
Karacali et al. | Full efficient NVM usage for MCU | |
JP3461185B2 (ja) | ロードモジュールへのソースコード行番号登録方法および装置 | |
JPH0410081B2 (ja) | ||
KR100970933B1 (ko) | 오퍼레이팅 시스템의 고속 부팅장치 및 방법 | |
JP2002278774A (ja) | プロセッサ内の機能単位の制御時に命令語を生成する方法と装置 | |
JP2000242524A (ja) | プロセッサのソフトウエアシミュレータ | |
JP3492207B2 (ja) | 組み込みソフトウェアの動的解析方法 | |
JP2573391B2 (ja) | プログラマブルコントローラ | |
JPH11259308A (ja) | プログラマブルコントローラ | |
JP2001236247A (ja) | ソフトウェアシミュレータおよびシミュレーション処理方法 | |
JP2004013506A (ja) | プロセッサのダウンロード装置及びその制御方法 | |
JPS63276629A (ja) | ファイル内レコ−ドのソ−ト方式 | |
JPH10240627A (ja) | セクタ管理方法及び装置 | |
JPH0553827A (ja) | ダイナミツクリンク最適化方式 | |
JPH09244918A (ja) | デバッガ付きインタプリタへの機能付加方式 | |
JPS61267135A (ja) | デ−タ処理装置 | |
JPH04280328A (ja) | プログラム実行アドレストレース方法 | |
JPS5968067A (ja) | 走行ステツプ数指定処理方式 | |
JPH1195999A (ja) | 電子計算機 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050901 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060502 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060703 |
|
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: 20060726 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060808 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 3844051 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100825 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100825 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110825 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110825 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120825 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130825 Year of fee payment: 7 |
|
EXPY | Cancellation because of completion of term |