(57)【特許請求の範囲】
【請求項１】
記憶手段にあらかじめ格納されたシーケンスプログラムを実行して外部機器を制御するプログラマブルコントローラにおいて、記憶手段の少なくとも一部であるユーザ領域のアドレス空間内で使用目的の割り当てを変更可能とするアドレス変更手段を備え、アドレス変更手段は、プログラムカウンタにより与えられた第１のアドレスを変更するための設定値を格納するベースレジスタと、ベースレジスタに格納された設定値を用いて生成した加算値を第１のアドレスに加算する加算器と、加算器の出力値を初期値とし記憶手段をアクセスする第２のアドレスをプログラムカウンタに同期してプログラムカウンタとは別に発生するアドレス発生手段とを備えることを特徴とするプログラマブルコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、記憶手段に格納されたシーケンスプログラムを実行して外部機器を制御するプログラマブルコントローラに関するものである。
【０００２】
【従来の技術】
従来より、各種機器の制御にプログラマブルコントローラが広く用いられている。プログラマブルコントローラは、記憶手段としてのメモリにシーケンスプログラムを格納しておき、このシーケンスプログラムを演算手段であるプロセッサにより実行して各種機器を制御する。しかして、メモリには、シーケンスプログラムを格納するプログラム領域のほか、機器の動作に応じて発生する入力データや機器の動作を指示する出力データを格納するためのデータ領域と、シーケンスプログラムの実行中に発生する各種データを一時的に格納するワーク領域とが必要になる。従来より提供されているプログラマブルコントローラでは、プログラム領域、データ領域、ワーク領域は、プログラマブルコントローラの仕様に応じてメモリ内での位置および容量が固定的に割り当てられている。したがって、シーケンスプログラムの規模はプログラム領域のサイズにより規制され、入出力数はデータ領域のサイズにより規制されることになる。
【０００３】
【発明が解決しようとする課題】
上述のように、従来より提供されているプログラマブルコントローラでは、メモリのアドレス空間における各領域の割り付けを設計時にハードウェアとして固定しているものであるから、扱うことのできるシーケンスプログラムの容量や入出力点数などのメモリ容量に依存するプログラマブルコントローラの仕様は、機種ごとに固定的に定められている。その結果、シーケンスプログラムや入出力点数を変更することが必要になったときには、仕様の異なるプログラマブルコントローラを用いなければ所望の制御システムを構築することができなくなることがある。
【０００４】
また、機種ごとに各領域の割り付けを固定的に行なうと、プログラマブルコントローラを多品種に展開しようとするときに、開発工数が増えるという問題が生じる。
本発明は上記事由に鑑みて為されたものであり、その目的は、記憶手段の各領域の割り付けを変更可能として構成を変更することなく多品種に展開可能としたプログラマブルコントローラを提供することにある。
【０００５】
【課題を解決するための手段】
請求項１の発明は、記憶手段にあらかじめ格納されたシーケンスプログラムを実行して外部機器を制御するプログラマブルコントローラにおいて、記憶手段の少なくとも一部であるユーザ領域のアドレス空間内で使用目的の割り当てを変更可能とするアドレス変更手段を備え、アドレス変更手段が、プログラムカウンタにより与えられた第１のアドレスを変更するための設定値を格納するベースレジスタと、ベースレジスタに格納された設定値を用いて生成した加算値を第１のアドレスに加算する加算器と、加算器の出力値を初期値とし記憶手段をアクセスする第２のアドレスをプログラムカウンタに同期してプログラムカウンタとは別に発生するアドレス発生手段とを備えるものである。
【００１０】
【発明の実施の形態】
（基本構成）
以下に示すプログラマブルコントローラは、図２に示すように、２種類のプロセッサ１、２を備える。一方のプロセッサ１は、ビット演算を主体とする基本命令（論理積、論理和など）および複数ビットの演算を行なう応用命令（データの転送、データの四則演算、データ形式の変換、データの比較など）を処理する専用プロセッサであり、他方のプロセッサ２は、入出力部４に接続される周辺機器の制御や通信の制御などを行なう汎用プロセッサである。以下では、専用プロセッサ１をＢＰＵ、汎用プロセッサ２をＭＰＵと略称する。ＢＰＵ１とＭＰＵ２とはアドレスバスＡＤ、データバスＤＴ、各種信号線（読出信号、書込信号、チップセレクト信号）を介して接続されている。図２において、ＲＤは読出信号に対応する端子、ＷＤは書込信号に対応する端子、ＣＳ１，ＣＳ２はチップセレクト信号に対応する端子である。また、ＢＰＵ１およびＭＰＵ２は、メモリ３を共有するとともに、外部機器や周辺機器が接続される入出力部４にも接続される。ここに、入出力部４は、制御対象となる外部機器および制御に必要なセンサやスイッチを接続する部分と、プログラム支援装置やネットワーク接続用のインタフェースとを含む。
【００１１】
ここに、ＢＰＵ１およびＭＰＵ２を設けているのは、制御対象である外部機器が複雑化するとともに高速化するにつれて、より多数の入出力信号を高速に処理することが要求されているからである。つまり、ビット処理を主とする基本命令処理と、複数ビットの応用命令処理を行なうことのできるＢＰＵ１により高速化を実現し、通信処理・周辺処理の一部などを行なうＭＰＵ２と組み合わせてプログラマブルコントローラを構成しているのである。このＢＰＵ１とＭＰＵ２とはメモリ３を共有しており、基本命令処理・応用命令処理・通信処理・周辺処理を行なう際に、メモリ３内の必要なデータを参照したり更新したりする。
【００１２】
メモリ３や入出力部４にはアドレスが割り当てられ、ＢＰＵ１およびＭＰＵ２はアドレスを用いてメモリ３や入出力部４との間でデータを授受する。メモリ３には、図３（ａ）のように、システムプログラムを格納したシステム領域Ｄｓとユーザにより使用されるユーザ領域Ｄｕが設けられ、ユーザ領域Ｄｕには、シーケンスプログラムを格納するプログラム領域Ｄｐ、入出力部４とＢＰＵ１やＭＰＵ２との間でデータを授受するために用いるデータ領域Ｄｄ、シーケンスプログラムの実行中に発生するデータを一時的に記憶するワーク領域Ｄｗが割り当てられる。本例では、ユーザ領域Ｄｕ内での各領域の割り付け（つまり、使用目的に応じた割り付け）が変更可能になっている。ここに、ＭＰＵ２はプログラムによってアドレスの割り付け（つまり、各領域が占めるアドレス空間）を変更し、ＢＰＵ１はメモリ３をアクセスする際のアドレスをＭＰＵ２でのアドレスの割り付けに対応するように計算する回路を備える。
【００１３】
本例では、ＢＰＵ１は、メモリ３をアクセスするためのアドレスを生成する際に、図１（ａ）に示す回路を通してアドレスを求める。図１（ａ）に示す回路は、アドレス割り付け用の設定値が格納するためのベースレジスタ５と、シーケンスプログラムにより与えられるアドレスＡ１にベースレジスタ５に格納された設定値を加算する加算器６とをアドレス変更手段として備える。ベースレジスタ５にはＭＰＵ２を介して設定値が与えられる。
【００１４】
いま、アドレスＡ１を２０ビット、ベースレジスタ５に格納された設定値Ｘ１を８ビットとする。設定値Ｘ１は２０ビットのアドレスのうちの上位８ビットを示すものであり、上位８ビットを設定値で与え下位１２ビットを０とした値が加算器６に入力される。したがって、加算器６では図１（ｂ）のような演算が行なわれ、加算器６からは新たなアドレスＡ２が出力される。このような演算によりアドレスＡ２を求めるようにすれば、ベースレジスタ５に格納される設定値Ｘ１に１を加算することでアドレスＡ２に４０９６を加算したことになる。つまり、設定値Ｘ１の変更によって元のアドレスＡ１を４０９６番地単位で変更することが可能になる。ユーザ領域Ｄｕには、図３（ａ）のように、プログラム領域Ｄｐ、データ領域Ｄｄ、ワーク領域Ｄｗがあるから、べースレジスタ５としては、各領域Ｄｐ，Ｄｄ，Ｄｗの先頭アドレスをそれぞれ格納するものが設けられる。ここに、図３（ａ）に示すメモリマップは下側がアドレスの上位側を示す。
【００１５】
しかして、基本命令や応用命令を処理するＢＰＵ１においてアドレスを４０９６番地単位で変更することができるから、メモリ３における各領域のマッピングを変更することが可能になる。つまり、図３（ａ）に示すように、ユーザ領域Ｄｕのうちの一部が未使用となるように各領域Ｄｐ，Ｄｄ，Ｄｗの先頭アドレスを設定したり、あるいは図３（ｂ）に示すように、ユーザ領域Ｄｕをすべて使用するように各領域Ｄｐ，Ｄｄ，Ｄｗの先頭アドレスを設定したりすることができる。このように、ベースレジスタ５に格納する設定値Ｘ１を変更すれば、ユーザ領域Ｄｕの範囲内で各領域Ｄｐ，Ｄｄ，Ｄｗの割り当てが変更可能になる。
【００１６】
（参考例１）
基本構成ではベースレジスタ５に８ビットの設定値を格納してあり、メモリ３をアクセスする際のアドレスを４０９６番地単位で変更することが可能であったが、本例ではさらに小さい単位でアドレスを変更することが可能な構成を示す。
【００１７】
つまり、ＢＰＵ１においてアドレスを計算する回路として、図４（ａ）に示すように、基本構成の構成に加えて、サブベースレジスタ７と加算器８とを付加したものである。つまり、アドレス変更手段が、ベースレジスタ５とサブベースレジスタ７と加算器６，８とにより構成される。サブベースレジスタ７は８ビットの設定値を格納するレジスタであって、この８ビットを上位とし下位に６ビットを付加した１４ビット長のデータが生成される。加算器８はベースレジスタ５の設定値に下位１２ビットの０を付加した２０ビットの値と、サブベースレジスタ７の設定値に下位６ビットの０を付加した１４ビットの値とを加算する。このようにして求めた加算器８の出力値を加算器６においてアドレスＡ１に加算することによってアドレスＡ２を求めるのである。このようなサブアドレスレジスタ７を設ければ、その設定値に１を加算したときにはアドレスＡ２に６４が加算されるから、６４番地単位でアドレスを変更することが可能になる。ベースレジスタ５の設定値Ｘ１とサブベースレジスタ７の設定値Ｘ２とを用いてアドレスＡ１をアドレスＡ２に変更する演算を図４（ｂ）に示す。
【００１８】
上述の構成を用いることによって、図５のようにメモリ３をマッピングすることが可能になる。図示例では、ユーザ領域Ｄｕにおけるプログラム領域Ｐｐとデータ領域Ｄｄとワーク領域Ｄｗとの先頭アドレスをベースレジスタ５の設定値Ｘ１として与えており、サブベースレジスタ７の設定値Ｘ２によってデータ領域Ｄｕをさらに細分し、領域ＤＡ，ＤＢ，……を設定している。
【００１９】
本例ではサブベースレジスタ７を設けたことによって、メモリ３をアクセスするアドレスＡ２を６４番地単位で変更することができるから、基本構成よりも、メモリ３の利用効率が高くなる（つまり、各領域Ｄｐ，Ｄｄ，Ｄｗ内での未使用になる領域を少なくすることができる）。
なお、ベースレジスタ５の設定値Ｘ１を１４ビット長としても６４番地単位でアドレスＡ２を変更することが可能であるが、一般に、１４ビット長のレジスタは２個の８ビット長のレジスタと加算器とを合計したものよりも回路規模が大きくなるから、本例の構成のほうが低コストで提供できる。
【００２０】
（実施形態）
ところで、基本構成においてプログラム領域Ｄｐのアドレスを、ベースレジスタ５に格納された設定値Ｘ１により変更するとすれば、図６（ａ）に示すように、元のアドレスＡ１はプログラムカウンタ９から与えられることになる。ここで、図示例ではプログラムカウンタ９の出力は１６ビット長としている。ベースレジスタ５の設定値Ｘ１はプログラム領域Ｄｐの先頭番地でありプログラマブルコントローラが命令を処理している間には固定されており、プログラムカウンタ９から出力されるアドレスＡ１は命令の実行に伴って更新される。したがって、シーケンスプログラムの実行に伴ってアドレスＡ２は順次更新される。
【００２１】
このように基本構成では、加算器６から出力されるアドレスＡ２がプログラムカウンタ９とベースレジスタ５の設定値Ｘ１との加算値であるから、図６（ｂ）に示すように、プログラムカウンタ９でアドレスＡ１が確定した後に加算器６からのアドレスＡ２が確定するまでに、加算演算を行なうことによる遅延時間Ｔｄが生じる。
【００２２】
プログラマブルコントローラ全体の動作が比較的遅ければ、遅延時間Ｔｄが生じても問題にならない。一方、高速な処理が必要な場合に、メモリ３のアクセス時間については要求速度を満たすことができるにもかかわらず、アドレスＡ２の確定に要する時間が遅延時間Ｔｄを含んでいることで全体として要求速度を満たせなくなる場合がある。つまり、遅延時間Ｔｄが処理速度の向上に対するボトルネックになる。逆に言えば、遅延時間Ｔｄが生じる分だけ命令の実行が遅れるから、遅延を少なくするために、より高速な高価なメモリ３が必要になる。
【００２３】
そこで、本実施形態では図７（ａ）の回路構成を採用している。すなわち、プログラムカウンタ９には、次に実行する命令を格納したアドレスＡ１とプログラムカウンタ９の出力値に１を加算する加算演算器１２の出力とをプログラムカウンタ９に選択的に入力させるマルチプレクサ１１が接続され、図６に示した構成と同様に、プログラムカウンタ９の出力値はベースレジスタ５の設定値Ｘ１に０を付与した値と加算器６において加算される。
【００２４】
加算器６の出力は、そのままアドレスＡ２として用いられるのではなく、マルチプレクサ１３に入力される。マルチプレクサ１３は加算器６の出力と、後述する加算演算器１４の出力とを選択するものであって、マルチプレクサ１３の出力はレジスタ１５に書き込まれる。このレジスタ１５の出力値がアドレスＡ２として用いられるのであり、またレジスタ１５の出力値は加算演算器１４にも入力されて１が加算される。ベースレジスタ５、プログラムカウンタ９、レジスタ１５はクロック信号ＣＫに同期して動作し、マルチプレクサ１１，１３はＢＰＵ１の動作に伴って発生する選択信号により出力を選択する。つまり、マルチプレクサ１３と加算演算器１４とレジスタ１５とは、プログラムカウンタ９とは同期しているが、別にアドレスを発生するアドレス発生手段として機能する。
【００２５】
しかして、図７（ｂ）に示すように、ＢＰＵ１が停止しているときに、次に実行する命令を示すアドレスＡ１の初期値Ｃ０がプログラムカウンタ９に書き込まれる。その後、ＭＰＵ２から起動要求がＢＰＵ１に与えられると、ＢＰＵ１がバス（アドレスバスＡＤおよびデータバスＤＴ）の制御権を獲得して命令の実行を開始する。また、ＢＰＵ１の起動中に、プログラムカウンタ９とは別に設けたレジスタ１５に初期値が設定される。レジスタ１５の初期値は、プログラムカウンタ９の出力値にベースレジスタ５の設定値Ｘ１を加算したものであって、加算器６およびマルチプレクサ１３を通してレジスタ１５に与えられる。要するに、マルチプレクサ１１はＢＰＵ１の停止時にアドレスＡ１の初期値Ｃ０をプログラムカウンタ９に与え、マルチプレクサ１３はＢＰＵ１の起動時に加算器６の出力をレジスタ１５に与える。
【００２６】
ＢＰＵ１の動作中には命令実行に伴ってプログラムカウンタ９の出力値が順次更新されるが、このとき同時にレジスタ１５の出力値も順次更新する。一般的にはプログラムカウンタ９とレジスタ１５との出力値は実行する命令に応じて変化するが、ここでは説明を簡単にするために加算演算器１２，１４において１ずつ加算する例を示す。実行する命令に応じて出力値を変化させるときには、加算演算器１２，１４に命令ごとの値を入力すればよい。
【００２７】
上述の構成では、ベースレジスタ５の設定値Ｘ１を加算器６でアドレスＡ１に加算するのは、レジスタ１５に初期値を設定するときの１度だけであり、その後はプログラムカウンタ９とレジスタ１５とを同じクロック信号ＣＫで駆動して出力値を同時に更新するのであって、レジスタ１５の出力値であるアドレスＡ２が変化するタイミングを、プログラムカウンタ９の出力値が変化するタイミングと一致させることができる。つまり、プログラムカウンタ９によるアドレスＡ１の確定からレジスタ１５によるアドレスＡ２の確定までに遅延時間が発生せず、高速な処理が要求される場合でもメモリ３のアクセス時間に余裕ができることになる。つまり、比較的低速な低価格のメモリ３を用いても高速な処理に対応することが可能になる。
【００２８】
（参考例２）
本例では、アドレス修飾を行なった命令を含むシーケンスプログラムを実行することができる回路構成を示す。本例におけるアドレス修飾はインデックスレジスタ修飾であって、図８に示すように、図４（ａ）に示した参考例１の構成に加えてアドレス修飾のためのインデックスレジスタ１６と、インデックスレジスタ１６の格納値を元のアドレスＡ１に符号付き加算する加算器１７とをアドレス修飾手段として備えている。インデックスレジスタ１６は１２ビット長のデータを格納し、また、アドレスＡ１は８ビット長で与えられる。アドレスＡ１は上位４ビットに０が付加されて１２ビット長で加算器１７に入力される。また、参考例２と同様いベースレジスタ５およびサブベースレジスタ７を備え、それぞれ８ビット長のデータを格納している。
【００２９】
ベースレジスタ５に格納されたデータは下位１２ビットに０が付加されて２０ビット長のデータとして加算器８に入力され、サブベースレジスタ７に格納されたデータは下位６ビットに０が付加されて１４ビット長のデータとして加算器８に入力される。加算器８ではベースレジスタ５およびサブベースレジスタ７に格納されたデータに基づいて入力されたデータを加算し、２０ビット長のデータを出力する。この加算器８の出力値が加算器５において加算器１７の出力値と加算され、加算器５の出力値がアドレスＡ２として用いられるのである。
【００３０】
上述の構成によるアドレスＡ１とアドレスＡ２との関係を図９に示す。上述のようにアドレス修飾を可能にした場合にはデータ構造として配列を容易に実現することができる。つまり、アドレスＡ１を命令語の中で即値で与えておき、データ領域Ｄｄの特定の番地を示すようにする。ここで、インデックスレジスタ１６の格納値を０から適当な数まで１づつ加算したとすれば、アドレスＡ１で示す番地を先頭にした配列が実現されるのである。
【００３１】
アドレス修飾機能は上述のように利便性の高い機能ではあるが、その反面、インデックスレジスタ１６にユーザが自由に値を設定することができるから、誤設定の場合にメモリ３の予期しない番地をアクセスすることになり、無関係なデータを読み書きしたり、場合によってはプログラムを破壊したりするというトラブルが発生する可能性がある。そこで、アドレス修飾してメモリ３にアクセスする場合には最終的なアドレスが妥当なものであるかを逐次検証しながらシーケンスプログラムを実行するインデックスチェックモードを設けることが考えられるが、ユーザがこのモードを必ず使用するという保証はない。
【００３２】
そこで、インデックスチェックモードを使用していないときに誤ったアドレス修飾をしてしまった場合でもプログラム白身を破壊するという最悪の事態を回避するために、上記構成を採用し、アドレス修飾の演算に用いるデータ（つまり、インデックスレジスタ１６のデータ）のビット幅をメモリ３のアドレスのビット幅よりも小さくし、プログラム領域Ｄｐをデータ領域Ｄｄよりも下位アドレスになるように設定している。
【００３３】
この点について説明する。本例では、図９に示すように、まずインデックスレジスタ１６に格納されたデータＸ３のビット長の加算を行なうので、誤ったアドレス修飾により予期しない値になりオーバーフローやアンダーフローが発生したとしても、１２ビット長のデータで表現できる値に収まることになる。つまり、符号なし１０進数で表すと０〜４０９５の範囲に収まる。この結果とべースレジスタ５、サブベースレジスタ７の加算の結果とを足し合わせてアドレスＡ２を求めるので、誤ったアドレス修飾をした場合にも最終的なアドレスＡ２の値は、べースレジスタ５、サブベースレジスタ７の加算の結果から上位側に４０９６番地までの範囲に含まれることになる。ここで、ベースレジスタ５にデータを設定する際に「プログラム領域Ｄｐの先頭番地を示す値は、データ領域Ｄｄの先頭番地を示す値よりも小さくする」という制限を与えておくことによって、誤ったアドレス修飾によりメモリ３のプログラム領域Ｄｐにアクセスすることがなく、プログラム自身を破壊してしまうトラブルを未然に防ぐことができる。
【００３４】
具体例で説明すると、たとえばデータ領域Ｄｄにおいてサブベースレジスタ７のデータにより割り付けた領域ＤＢでアドレス修飾を行なった場合に図１０に示すように領域ＤＢの先頭番地から上位側の４０９６番地分がアドレス修飾によりアクセスできる範囲になり、この範囲はプログラム領域Ｄｐと重なることはないから、プログラムの破壊を防ぐことができる。他の構成および動作は参考例１と同様である。
【００３５】
【発明の効果】
請求項１の発明は、記憶手段にあらかじめ格納されたシーケンスプログラムを実行して外部機器を制御するプログラマブルコントローラにおいて、記憶手段の少なくとも一部であるユーザ領域のアドレス空間内で使用目的の割り当てを変更可能とするアドレス変更手段を備え、アドレス変更手段が、プログラムカウンタにより与えられた第１のアドレスを変更するための設定値を格納するベースレジスタと、ベースレジスタに格納された設定値を用いて生成した加算値を第１のアドレスに加算する加算器と、加算器の出力値を初期値とし記憶手段をアクセスする第２のアドレスをプログラムカウンタに同期してプログラムカウンタとは別に発生するアドレス発生手段とを備えるものであり、記憶手段のうちのユーザ領域の使用目的の割り当てが変更可能になり、ユーザプログラムの容量や入出力点数の変更、あるいは共通の構成での多品種展開に容易に対応することができるという利点がある。
【００３８】
しかも、プログラムカウンタの出力値に各種演算を行なって記憶手段をアクセスするためのアドレスを生成するのではなく、記憶手段をアクセスするためのアドレスの初期値のみをプログラムカウンタの出力値に基づいて設定し、以後はプログラムカウンタとは別にプログラムカウンタに同期させてアドレスを発生させるから、記憶手段のアドレスの生成に遅延時間が発生することがないという利点がある。
【図面の簡単な説明】
【図１】  基本構成を示し、（ａ）は要部回路図、（ｂ）は動作説明図である。
【図２】  同上を用いるプログラマブルコントローラのブロック図である。
【図３】  同上の動作説明図である。
【図４】  参考例１を示し、（ａ）は要部回路図、（ｂ）は動作説明図である。
【図５】  同上の動作説明図である。
【図６】  実施形態に対する比較例を示し、（ａ）は要部回路図、（ｂ）は動作説明図である。
【図７】  実施形態を示し、（ａ）は要部回路図、（ｂ）は動作説明図である。
【図８】  参考例２を示す回路図である。
【図９】  同上の動作説明図である。
【図１０】  同上の動作説明図である。
【符号の説明】
１  専用プロセッサ
２  汎用プロセッサ
３  メモリ
４  入出力部
５  ベースレジスタ
６  加算器
７  サブベースレジスタ
８  加算器
９  プログラムカウンタ
１１  マルチプレクサ
１２  加算演算器
１３  マルチプレクサ
１４  加算演算器
１５  レジスタ
１６  インデックスレジスタ
１７  加算器
Ｄｄ  データ領域
Ｄｐ  プログラム領域
Ｄｓ  システム領域
Ｄｕ  ユーザ領域
Ｄｗ  ワーク領域
【図１】
0003704927.tif 000002
【図２】
0003704927.tif 000003
【図３】
0003704927.tif 000004
【図４】
0003704927.tif 000005
【図５】
0003704927.tif 000006
【図６】
0003704927.tif 000007
【図７】
0003704927.tif 000008
【図８】
0003704927.tif 000009
【図９】
0003704927.tif 000010
【図１０】
0003704927.tif 000011