(57)【特許請求の範囲】
【請求項１】
シーケンスプログラムメモリに記憶されているシーケンスプログラムを実行するシーケンス演算装置と、制御に使用する変数等のデータを記憶するデータメモリとを備えて構成されるプログラマブルコントローラにおいて、
１台の前記シーケンス演算装置が使用する前記データメモリの割付構成として、前記シーケンスプログラムを構成するタスクおよび当該タスク内のプログラム毎に、前記シーケンスプログラムのコンパイラが独立したデータ領域を割り当てるようにしたことを特徴とするプログラマブルコントローラ。
【請求項２】
コントローラ全体の実行制御を行なう中央演算処理装置と、前記中央演算処理装置が実行するプログラムを記憶しているプログラムメモリと、シーケンスプログラムメモリに記憶されているシーケンスプログラムを実行するシーケンス演算装置と、制御に使用する変数等のデータを記憶するデータメモリとを備えて構成されるプログラマブルコントローラにおいて、
１台の前記シーケンス演算装置が使用する前記データメモリの割付構成として、前記シーケンスプログラムを構成するタスクおよび当該タスク内のプログラム毎に、前記シーケンスプログラムのコンパイラが独立したデータ領域を割り当てるようにしたことを特徴とするプログラマブルコントローラ。
【請求項３】
前記請求項１または請求項２に記載のプログラマブルコントローラにおいて、
前記プログラムに固有な変数をアクセスする際に、当該プログラムに固有のベースアドレスおよびオペランドアドレスとを加算して目的のメモリアドレスを生成することを特徴とするプログラマブルコントローラ。
【請求項４】
前記請求項１または請求項２に記載のプログラマブルコントローラにおいて、前記シーケンス演算装置に、前記プログラムに固有な変数をアクセスする際にベースとなるベースアドレスを記憶するベースアドレスレジスタを備え、前記プログラムを切り替える際に所定の命令によって前記ベースアドレスレジスタの内容を変更するようにしたことを特徴とするプログラマブルコントローラ。
【請求項５】
前記請求項４に記載のプログラマブルコントローラにおいて、前記ベースアドレスレジスタに、前記タスクが占用するデータ領域を示すアドレスを格納するタスクベースアドレス設定命令を設け、前記タスクを切り替える際に前記タスクベースアドレス設定命令を実行することにより、前記プログラムが使用するデータ領域を指定するようにしたことを特徴とするプログラマブルコントローラ。
【請求項６】
前記請求項４に記載のプログラマブルコントローラにおいて、あるプログラムから他のプログラムを呼び出す際に、呼び出されるプログラムが占用するデータ領域のアドレスを、プログラム呼び出し命令によって前記ベースアドレスレジスタに設定することにより、前記呼び出されたプログラムが専用のデータ領域を使用するようにしたことを特徴とするプログラマブルコントローラ。
【請求項７】
前記請求項１または請求項２に記載のプログラマブルコントローラにおいて、前記シーケンス演算装置に、前記プログラムに固有な変数をアクセスする際にベースとなるベースアドレスを記憶するベースアドレスレジスタと、前記プログラムに固有な変数領域の大きさを記憶するデータ範囲レジスタとを備え、あるプログラムから他のプログラムを呼び出す際に、呼び出されるプログラムが占用するデータ領域の先頭アドレスおよびデータ量を、プログラム呼び出し命令によって前記ベースアドレスレジスタおよびデータ範囲レジスタに設定することにより、前記呼び出されたプログラムの専用データ領域外へのアクセスを検出するようにしたことを特徴とするプログラマブルコントローラ。
【請求項８】
前記請求項１または請求項２に記載のプログラマブルコントローラにおいて、前記シーケンス演算装置に、前記プログラムに固有な変数をアクセスする際にベースとなるベースアドレスを記憶するベースアドレスレジスタと、前記プログラムに固有な変数領域の大きさを記憶するデータ範囲レジスタとを備え、前記タスクを切り替える際に、当該タスクに固有な一時使用データ領域の先頭アドレスおよびデータ量を、専用のタスク切替命令によって一時使用データ用の前記ベースアドレスレジスタおよびデータ範囲レジスタに設定することにより、前記呼び出されたプログラムが使用するデータが専用のデータ領域を使用すると共に、前記専用データ領域外へのアクセスを検出するようにしたことを特徴とするプログラマブルコントローラ。
【請求項９】
前記請求項１または請求項２に記載のプログラマブルコントローラにおいて、前記プログラムが使用する固有のデータ量をコンパイラに指示するように、前記プログラムに固有なデータ量をプログラム呼び出し命令の中に格納するようにしたことを特徴とするプログラマブルコントローラ。
【請求項１０】
前記請求項１または請求項２に記載のプログラマブルコントローラにおいて、前記プログラムを呼び出す際に、当該プログラムに付したプログラム番号によって前記プログラムの開始アドレスを指定すると共に、前記プログラム内から当該プログラム内でのみ使用される専用のプログラムを呼び出す際には、呼び出しアドレスからの相対アドレスによってプログラムを呼び出すようにしたことを特徴とするプログラマブルコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば鉄鋼、製紙プラントや上下水道等の公共システム、自動車産業等の産業用システムの制御に広く用いられるプログラマブルコントローラ（一般に、ＰＬＣと称している）に係り、特にタスクおよびプログラム毎に独立したローカル変数領域を確保できるようにしたプログラマブルコントローラに関するものである。
【０００２】
【従来の技術】
従来から、プログラマブルコントローラにおいては、演算の対象としてレジスタを使用していることが多い。これは、いわゆるグローバル変数であるので、どんなプログラムからでもアクセスが可能であり、レジスタの重複使用による制限等を受け、プログラムのバグを発生させる原因ともなっている。
【０００３】
【発明が解決しようとする課題】
このため、最近では、ローカル変数を使用可能なプログラマブルコントローラの実現が強く望まれてきているが、ハードウェアレベルで実現したプログラマブルコントローラは存在しないのが実状である。
【０００４】
本発明の目的は、タスクおよびプログラム毎に独立したローカル変数領域を確保できるようにして、レジスタの重複使用による制限他を受けることなく、タスクおよびプログラム毎に自由に変数を定義して使用することが可能なプログラマブルコントローラを提供することにある。
【０００５】
【課題を解決するための手段】
上記の目的を達成するために、請求項１の発明では、シーケンスプログラムメモリに記憶されているシーケンスプログラムを実行するシーケンス演算装置と、制御に使用する変数等のデータを記憶するデータメモリとを備えて構成されるプログラマブルコントローラにおいて、１台の前記シーケンス演算装置が使用するデータメモリの割付構成として、シーケンスプログラムを構成するタスクおよび当該タスク内のプログラム毎に、前記シーケンスプログラムのコンパイラが独立したデータ領域を割り当てるようにしている。
【０００６】
また、請求項２の発明では、コントローラ全体の実行制御を行なう中央演算処理装置と、中央演算処理装置が実行するプログラムを記憶しているプログラムメモリと、シーケンスプログラムメモリに記憶されているシーケンスプログラムを実行するシーケンス演算装置と、制御に使用する変数等のデータを記憶するデータメモリとを備えて構成されるプログラマブルコントローラにおいて、１台の前記シーケンス演算装置が使用するデータメモリの割付構成として、シーケンスプログラムを構成するタスクおよび当該タスク内のプログラム毎に、前記シーケンスプログラムのコンパイラが独立したデータ領域を割り当てるようにしている。
【０００７】
従って、請求項１または請求項２の発明のプログラマブルコントローラにおいては、１台の前記シーケンス演算装置に対してタスクおよびプログラム毎に、独立したデータ領域を割り当てることにより、タスクおよびプログラム毎に前記シーケンスプログラムのコンパイラが独立したローカル変数領域を確保できるため、従来のようにレジスタの重複使用による制限他を受けることなく、タスクおよびプログラム毎に自由に変数を定義して使用することができる。
【０００８】
一方、請求項３の発明では、上記請求項１または請求項２の発明のプログラマブル コントローラにおいて、プログラムに固有な変数をアクセスする際に、当該プログラムに固有のベースアドレスを基準にして変数をアクセスするようにしている。
【０００９】
従って、請求項３の発明のプログラマブル コントローラにおいては、プログラムに固有なベースアドレスおよびオペランドアドレスとを加算して目的のメモリアドレスを生成することにより、プログラムに固有な変数をアクセスすることができる。
【００１０】
また、請求項４の発明では、上記請求項１または請求項２の発明のプログラマブルコントローラにおいて、シーケンス演算装置に、プログラムに固有な変数をアクセスする際にベースとなるベースアドレスを記憶するベースアドレスレジスタを備え、プログラムを切り替える際に所定の命令によってベースアドレスレジスタの内容を変更するようにしている。
【００１１】
従って、請求項４の発明のプログラマブルコントローラにおいては、プログラム毎の変数をアクセスする際のベースアドレスを記憶するベースレジスタを設けることにより、プログラムを切り替える際にベースアドレスレジスタの内容を変更することで、プログラムに固有な変数をアクセスすることができる。
【００１２】
一方、請求項５の発明では、上記請求項４の発明のプログラマブルコントローラにおいて、ベースアドレスレジスタに、タスクが占用するデータ領域を示すアドレスを格納するタスクベースアドレス設定命令を設け、タスクを切り替える際にタスクベースアドレス設定命令を実行することにより、プログラムが使用するデータ領域を指定するようにしている。
【００１３】
従って、請求項５の発明のプログラマブルコントローラにおいては、タスクを切り替える際にタスクベースアドレス設定命令を実行することにより、ベースアドレスレジスタにタスクが占用するデータ領域を示すアドレスを格納させることができるため、タスク毎に占用するデータ領域を指定することができる。
【００１４】
また、請求項６の発明では、上記請求項４の発明のプログラマブルコントローラにおいて、あるプログラムから他のプログラムを呼び出す際に、呼び出されるプログラムが占用するデータ領域のアドレスを、プログラム呼び出し命令によってベースアドレスレジスタに設定することにより、呼び出されたプログラムが専用のデータ領域を使用するようにしている。
【００１５】
従って、請求項６の発明のプログラマブルコントローラにおいては、あるプログラムから他のプログラムを呼び出す際に、ベースアドレスレジスタに現在設定されている値を基準にして、呼び出されるプログラムが占用するローカル変数領域の大きさを反映してベースアドレスレジスタを変更することにより、あるプログラムから呼び出された別のプログラムも専用のデータ領域を使用することができ、また上位のプログラムが使用しているローカル変数領域と連続しかつ下位領域となる領域を占用することができる。
【００１６】
さらに、請求項７の発明では、上記請求項１または請求項２の発明のプログラマブルコントローラにおいて、シーケンス演算装置に、プログラムに固有な変数をアクセスする際にベースとなるベースアドレスを記憶するベースアドレスレジスタと、プログラムに固有な変数領域の大きさを記憶するデータ範囲レジスタとを備え、あるプログラムから他のプログラムを呼び出す際に、呼び出されるプログラムが占用するデータ領域の先頭アドレスおよびデータ量を、プログラム呼び出し命令によってベースアドレスレジスタおよびデータ範囲レジスタに設定することにより、呼び出されたプログラムの専用データ領域外へのアクセスを検出するようにしている。
【００１７】
従って、請求項７の発明のプログラマブルコントローラにおいては、プログラム呼び出し命令が、呼び出されるプログラムが使用するローカル変数領域の範囲をデータ範囲レジスタに設定することにより、データ範囲レジスタにプログラム固有のデータ領域を記憶させることができるため、プログラムが他のプログラムのデータ領域をアクセスしないように監視する、すなわち呼び出されたプログラムが専用のデータ領域外のデータをアクセスしないように制御することができる。
【００１８】
一方、請求項８の発明では、上記請求項１または請求項２の発明のプログラマブルコントローラにおいて、シーケンス演算装置に、プログラムに固有な変数をアクセスする際にベースとなるベースアドレスを記憶するベースアドレスレジスタと、プログラムに固有な変数領域の大きさを記憶するデータ範囲レジスタとを備え、タスクを切り替える際に、当該タスクに固有な一時使用データ領域の先頭アドレスおよびデータ量を、専用のタスク切替命令によって一時使用データ用のベースアドレスレジスタおよびデータ範囲レジスタに設定することにより、呼び出されたプログラムが使用するデータが専用のデータ領域を使用すると共に、専用データ領域外へのアクセスを検出するようにしている。
【００１９】
従って、請求項８の発明のプログラマブルコントローラにおいては、タスクを切り替える際に、専用のタスク切替命令が一時使用データ用ベースアドレスレジスタおよび一時使用のデータ範囲レジスタを設定することにより、タスク毎に独立した一時使用データ領域を使用することができ、またデータ範囲を監視することにより、専用の一時使用データ領域外へのアクセスを禁止することができる。
【００２０】
また、請求項９の発明では、上記請求項１または請求項２の発明のプログラマブルコントローラにおいて、プログラムが使用する固有のデータ量をコンパイラに指示するように、プログラムに固有なデータ量をプログラム呼び出し命令の中に格納するようにしている。
【００２１】
従って、請求項９の発明のプログラマブルコントローラにおいては、プログラムが使用するローカル変数のデータ量をプログラム呼び出し命令に含めるようにすることにより、コンパイラがあるプログラムおよび下流のプログラム全体で使用するローカル変数領域を求めることが容易になる。
【００２２】
さらに、請求項１０の発明では、上記請求項１または請求項２の発明のプログラマブルコントローラにおいて、プログラムを呼び出す際に、当該プログラムに付したプログラム番号によってプログラムの開始アドレスを指定すると共に、プログラム内から当該プログラム内でのみ使用される専用のプログラムを呼び出す際には、呼び出しアドレスからの相対アドレスによってプログラムを呼び出すようにしている。
【００２３】
従って、請求項１０の発明のプログラマブルコントローラにおいては、プログラムをプログラムに付された固有の番号によって管理することにより、先頭アドレスや使用データ量等の関連するデータをプログラム呼び出し命令に含めることが必要なくなるため、少ないプログラムコード量でプログラムを構成することができる。また、あるプログラム内でだけ使用されるプログラムを呼び出す際には、プログラム番号ではなく、相対アドレスを使用して呼び出すことにより、プログラムの呼出しを高速に実行することができる。
【００２４】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【００２５】
（第１の実施の形態）
図１は、本発明によるプログラマブルコントローラの要部構成例を示すブロック図である。
【００２６】
すなわち、本発明のプログラマブルコントローラは、図１に示すように、中央演算処理装置（以下、ＣＰＵと称する）１は、プログラムメモリ２と、ワークメモリ３と、シーケンス演算装置４と、シーケンスプログラムメモリ５と、データメモリ６と、マイコンバス７と、通信インタフェース８と、Ｉ／Ｏ９と、モニタ装置２０とから構成している。
【００２７】
ＣＰＵ１は、本プログラマブルコントローラの中枢部分であり、コントローラ全体の実行制御を行なうものである。
【００２８】
プログラムメモリ２は、ＣＰＵ１が実行するプログラムを記憶しているメモリであり、例えばＯＳや制御プログラムを記憶している。
【００２９】
ワークメモリ３は、ＣＰＵ１が全体制御を実行する時に作業領域として使用するメモリである。
【００３０】
シーケンス演算装置４は、シーケンスプログラムメモリ５に記憶されているシーケンスプログラムを実行するプロセッサである。
【００３１】
シーケンスプログラムメモリ５は、ユーザが作成したシーケンスプログラムを記憶するメモリである。
【００３２】
データメモリ６は、ユーザが使用する制御に使用する変数等のデータを記憶するメモリである。
【００３３】
マイコンバス７は、本プログラマブルコントローラ内の要素をＣＰＵ１やシーケンス演算装置４と接続するためのバスであり、アドレスバス、データバス、制御バスの総体である。
【００３４】
通信インタフェース８は、本プログラマブルコントローラとモニタ装置２０等とを通信媒体を介して接続するためのインタフェース回路である。
【００３５】
Ｉ／Ｏ９は、本プログラマブルコントローラと外部の制御対象とを接続するための入出力装置である。
【００３６】
モニタ装置２０は、本プログラマブルコントローラのシーケンスプログラムの実行状態を監視したり、シーケンスプログラムの作成・修正に使用されるものである。
【００３７】
本実施の形態のプログラマブルコントローラでは、例えば図２に概念図を示すようなシーケンスプログラムを扱う。
【００３８】
図２において、シーケンスプログラムは、２個のタスクＡ，Ｂから構成されている。
【００３９】
タスクＡは、プログラムＡ１が、その中からプログラムＢ１とＣ１を呼び出している。また、プログラムＣ１は、プログラムＢ２を呼び出している。
【００４０】
ここで、プログラムＢ１とプログラムＢ２は、同じオブジェクトプログラムを使用するプログラムであり、扱う変数だけが異なるプログラムである。
【００４１】
一方、同様に、タスクＢは、プログラムＡ２が、その中からプログラムＢ３とプログラムＣ２を呼び出している。
【００４２】
ここで、プログラムＡ２は、プログラムＡ１と同じオブジェクトプログラムを使用するプログラムであり、プログラムＢ３，Ｃ２は、それぞれプログラムＢ１，Ｃ１と同じオブジェクトプログラムを使用するプログラムである。
【００４３】
このように、同一のオブジェクトプログラムを使用しながら、扱う変数だけを変更してプログラムを構成すると、プログラムメモリ２の容量を節約することができる。
【００４４】
本実施の形態のプログラマブルコントローラでは、前記図１におけるデータメモリ６の割付構成として、例えば図３に示すように、シーケンスプログラムを構成する各タスクおよびこのタスク内の各プログラム毎に、独立したデータ領域を割り当てるように構成している。
【００４５】
ここで、この独立したデータ領域の割り当ては、本実施の形態では、ＣＰＵ１で行なう、すなわちコンパイラをＣＰＵ１で走らせるようにしている。
【００４６】
図３において、タスクＡとタスクＢが使用するデータ領域は独立しており、さらに呼び出される側のプログラム（以下、下位のプログラムと称する）のデータ領域は、呼び出す側のプログラム（以下、上位のプログラムと称する）のデータ領域に続く領域に確保している。
【００４７】
従って、本実施の形態のプログラマブルコントローラにおいては、各タスクおよび各プログラム毎に、独立したデータ領域を使用することができる。
【００４８】
以上のように、本実施の形態のプログラマブルコントローラでは、タスクおよびプログラム毎に、独立したデータ領域を割り当てるようにしているので、タスクおよびプログラム毎に独立したローカル変数領域を確保できるため、従来のようにレジスタの重複使用による制限他を受けることなく、タスクおよびプログラム毎に自由に変数を定義して使用することが可能となる。
【００４９】
（第２の実施の形態）
図４は、本実施の形態によるプログラマブルコントローラにおけるシーケンス演算装置４の構成例を示すブロック図である。。
【００５０】
すなわち、シーケンス演算装置４は、図４に示すように、シーケンス演算回路４−１と、命令レジスタ４−２と、ベースアドレスレジスタ４−３と、アドレス範囲レジスタ４−４と、ＭＵＸ４−５と、加算器４−６と、メモリアドレスレジスタ４−７と、バスＩ／Ｆ４−８と、テンボラリメモリアドレスレジスタ４−９と、テンポラリメモリアドレス範囲レジスタ４−１０と、ＭＵＸ４−１１と、比較回路４−１２とから構成している。
【００５１】
シーケンス演算回路４−１は、シーケンスプログラムメモリ５からシーケンスプログラムを順次読み出して処理する回路である。
【００５２】
命令レジスタ４−２は、シーケンス演算回路４−１により読み出されたシーケンス命令を一時記憶しておくレジスタである。
【００５３】
なお、この命令レジスタ４−２には、シーケンス命令のオペランドアドレスも含まれている。
【００５４】
ベースアドレスレジスタ４−３は、プログラム中でデータメモリ６をアクセスする場合に、データメモリ６のアドレス計算の基礎となるアドレスを記憶しているレジスタであり、後述するように、タスクおよびプログラムの切替時に内容が変更される。
【００５５】
アドレス範囲レジスタ４−４は、現在実行されているプログラムが使用するデータメモリ６の先頭アドレスおよび末尾アドレスを記憶しているレジスタであり、データメモリ６をアクセスする際にそのアドレスが適正かどうかを判定するのに使用される。
【００５６】
ＭＵＸ４−５およびＭＵＸ４−１１は、マルチプレクサである。
【００５７】
加算器４−６は、ベースアドレスレジスタ４−３に記憶されているベースアドレスと、命令レジスタ４−２に記憶されているオペランドアドレスとを加算して、目的のメモリアドレスを生成する。
【００５８】
メモリアドレスレジスタ４−７は、アクセス対象のメモリアドレスを記憶するレジスタである。
【００５９】
バスＩ／Ｆ４−８は、マイコンバス７とシーケンス演算装置４内のバスとを接続するためのＩ／Ｆである。
【００６０】
テンボラリメモリアドレスレジスタ４−９は、一時使用メモリ（以下、テンボラリメモリと称する）のベースアドレスを記憶するレジスタであり、タスク切替時に内容が変更される。
【００６１】
テンポラリメモリアドレス範囲レジスタ４−１０は、現在実行されているタスクが使用するテンボラリメモリの先頭アドレスおよび末尾アドレスを記憶しているレジスタであり、テンボラリメモリをアクセスする際にそのアドレスが適正かどうかを判定するのに使用される。
【００６２】
比較回路４−１２は、アクセスされるメモリアドレスが現在実行中のタスクまたはプログラムが正常なアドレス範囲内かどうかを判定するために、メモリアドレスレジスタ４−７の内容とアドレス範囲レジスタ４−４，４−１０の内容とを比較するために使用される。
【００６３】
そして、メモリアドレスレジスタ４−７の内容がアドレス範囲外である時に、比較回路４−１２からシーケンス演算回路４−１にエラー信号を出力する。
【００６４】
本実施の形態のプログラマブルコントローラでは、プログラムに固有な変数をアクセスする際に、このプログラムに固有のベースアドレスを基準にして変数をアクセスするように構成している。
【００６５】
具体的には、プログラムに固有な変数をアクセスする際に、プログラム実行前に前記ベースアドレスレジスタ４−３にこのプログラムが使用するデータメモリ６のベースアドレスを記憶しておき、データメモリ６をアクセスする際には、オペランドアドレスにこのベースアドレスを加算して実際のメモリアドレスを作成するように構成している。
【００６６】
従って、本実施の形態のプログラマブルコントローラにおいては、プログラム毎に独立したデータ領域を使用することができる。
【００６７】
以上のように、本実施の形態のプログラマブルコントローラでは、プログラムに固有なベースアドレスを基準にして変数をアクセスするようにしているので、プログラムを切り替える際にベースアドレスを変更することで、プログラムに固有な変数をアクセスすることが可能となる。
【００６８】
（第３の実施の形態）
本実施の形態のプログラマブルコントローラでは、前記図４に示したように、シーケンス演算装置４に、メモリアドレスの計算の基礎となる、すなわちプログラムに固有な変数をアクセスする際にベースとなるベースアドレスを記憶するベースアドレスレジスタ４−３を備えて、プログラムを切り替える際に後述する命令によってベースアドレスレジスタ４−３の内容を変更するように構成している。
【００６９】
従って、本実施の形態のプログラマブルコントローラにおいては、例えば図５に概念図を示すように、プログラムＢ１とプログラムＢ３が同じオブジェクトプログラムを使用している時、プログラムが異なっていれば使用しているベースアドレスが異なることから、それぞれのプログラムの中で変数Ｘをアクセスする際には、同じオフセットを使用して異なる変数にアクセスすることができる。
【００７０】
これにより、従来のプログラマブルコントローラのように、固定アドレスを使用するレジスタやデバイスといったグローバルな資源を演算対象にするのではなく、プログラム毎に独立したローカルな変数を使用することができる。
【００７１】
以上のように、本実施の形態のプログラマブルコントローラでは、プログラム毎の変数をアクセスする際のベースアドレスを記憶するベースレジスタ４−３を設けるようにしているので、プログラムを切り替える際にベースアドレスレジスタ４−３の内容を変更することで、プログラムに固有な変数をアクセスすることが可能となる。
【００７２】
（第４の実施の形態）
本実施の形態のプログラマブルコントローラでは、タスクが占用するデータ領域を示すアドレスを格納する、例えば図６に示すような構成のタスクベースアドレス設定（以下、ＡＳＳＩＧＮと称する）命令を、前記ベースアドレスレジスタ４−３に設け、タスクを切り替える際にこのＡＳＳＩＧＮ命令を実行することにより、プログラムが使用するデータ領域を指定するように構成している。
【００７３】
このＡＳＳＩＧＮ命令は、オペランドとしてタスク番号を使用し、データメモリ６またはワークメモリ３に置かれた、例えば図７に概念図を示すようなタスクベースアドレステーブルから、指定されたタスク番号に対応するベースアドレスを読み出して、ベースアドレスレジスタ４−３に記憶する働きをする。
【００７４】
従って、本実施の形態のプログラマブルコントローラにおいては、このＡＳＳＩＧＮ命令を、例えば図８に示すようなプログラム例のように、タスクの開始時に実行することにより、各タスクで使用するデータメモリ６を設定することができる。
【００７５】
図８に示すプログラムは、タスク番号１のプログラムＡ１を実行するという意味であり、機械語表現では、ＡＳＳＩＧＮ命令の後にプログラム呼び出し命令が置かれている。
【００７６】
ベースアドレステ−ブル４−３の内容は、プログラム実行前にはモニタ装置２０からダウンロードが可能であり、プログラム実行開始後の変更に対しては、ＣＰＵ１またはシーケンス演算装置４から変更が可能である。
【００７７】
以上のように、本実施の形態のプログラマブルコントローラでは、タスクを切り替える際にＡＳＳＩＧＮ命令を実行するようにしているので、ベースアドレスレジスタ４−３にタスクが占用するデータ領域を示すアドレスを格納させることができるため、タスク毎に占用するデータ領域を指定することが可能となる。
【００７８】
（第５の実施の形態）
本実施の形態のプログラマブルコントローラでは、あるプログラムから他のプログラムを呼び出す際に、呼び出されるプログラムが占用するデータ領域のアドレスを、プログラム呼び出し（以下、ＰＲＯＧＲＡＭと称する）命令によってベースアドレスレジスタ４−３に設定することにより、呼び出されたプログラムが専用のデータ領域を使用するように構成している。
【００７９】
すなわち、前記第４の実施の形態では、タスク切替時のベースアドレスはＡＳＳＩＧＮ命令で設定することで説明したが、本実施の形態では、プログラム切替時のベースアドレス変更はＰＲＯＧＲＡＭ命令で実行する。
【００８０】
従って、本実施の形態のプログラマブルコントローラにおいては、例えば図９に概念図を示すように、プログラムＡ１からプログラムＢ１を呼び出す場合を例にとると、プログラムＡ１とプログラムＢ１のデータメモリ６の配置は、前記図３に示したような関係になっている。
【００８１】
プログラムＡ１は、タスクＡで設定されたベースアドレスを使用しているが、プログラムＢ１の呼び出し時には、それをプログラムＢ１のオフセット分（図３では▲１▼で示す）だけずらす必要がある。
【００８２】
この変更は、例えば図１０に示すようなＰＲＯＧＲＡＭ命令が実行する。
【００８３】
ＰＲＯＧＲＡＭ命令は、呼び出されるプログラムが使用するデータ量（ワード数）とプログラム番号をオペランドとして持っている。
【００８４】
また、ＰＲＯＧＲＡＭ命令には、補助命令Ｐ ＯＦＦが付属しており、このＰＲＯＧＲＡＭ命令が設定するオフセットアドレスを記憶している。
【００８５】
ＰＲＯＧＲＡＭ命令は、現在のベースアドレスレジスタ４−３の内容をセーブした後、現在値に上記のオフセット値を加えた値を、新規なベースアドレスとしてベースアドレスレジスタ４−３に記憶する。
【００８６】
プログラム実行完了時には、セーブしておいたベースアドレスを、再びベースアドレスレジスタ４−３にセットする。
【００８７】
タスク内でプログラムを呼び出す場合には、上記のように上位のプログラムのベースアドレスからのオフセットアドレスを使用してベースアドレスレジスタ４−３の内容を書き替えていくことにより、プログラム毎に独立したデータ領域を確保できることになる。
【００８８】
なお、ここでは、便宜上ＰＲＯＧＲＡＭ命令と補助命令で構成したが、プログラムメモリ２の語長が許せば１個の命令で構成可能であることは言うまでもない以上のように、本実施の形態のプログラマブルコントローラでは、あるプログラムから他のプログラムを呼び出す際に、ベースアドレスレジスタ４−３に現在設定されている値を基準にして、呼び出されるプログラムが占用するローカル変数領域の大きさを反映してベースアドレスレジスタ４−３を変更するようにしているので、あるプログラムから呼び出された別のプログラムも専用のデータ領域を使用することが可能となり、また上位のプログラムが使用しているローカル変数領域と連続しかつ下位領域となる領域を占用することが可能となる。
【００８９】
（第６の実施の形態）
本実施の形態のプログラマブルコントローラでは、前記図４に示したように、シーケンス演算装置４に、メモリアドレスの計算の基礎となる、すなわちプログラムに固有な変数をアクセスする際にベースとなるベースアドレスを記憶するベースアドレスレジスタ４−３と、プログラムに固有な変数領域の大きさを記憶するデータ範囲レジスタであるアドレス範囲レジスタ４−４およびテンポラリメモリアドレス範囲レジスタ４−１０とを備え、あるプログラムから他のプログラムを呼び出す際に、呼び出されるプログラムが占用するデータ領域の先頭アドレスおよびデータ量を、ＰＲＯＧＲＡＭ命令によってベースアドレスレジスタ４−３とデータ範囲レジスタであるアドレス範囲レジスタ４−４およびテンポラリメモリアドレス範囲レジスタ４−１０とに設定することにより、呼び出されたプログラムの専用データ領域外へのアクセスを検出するように構成している。
【００９０】
すなわち、前記第５の実施の形態では、ＰＲＯＧＲＡＭ命令によってプログラム切替時のベースアドレス変更で実行することで説明したが、本実施の形態では、ＰＲＯＧＲＡＭ命令によって、ベースアドレスレジスタ４−３の内容の変更だけでなく、アドレス範囲レジスタ４−４およびテンポラリメモリアドレス範囲レジスタ４−１０の変更も実行する。
【００９１】
従って、本実施の形態のプログラマブルコントローラにおいては、例えば図１０に示すようなＰＲＯＧＲＡＭ命令が実行されると、例えば図１１に概念図を示すようなデータメモリ範囲テーブルから、オペランドに指定されたプログラム番号のプログラムが使用するデータメモリ６の先頭アドレスおよび末尾アドレスを読み出して、アドレス範囲レジスタ４−４に記憶する。
【００９２】
これらのアドレスは、前述したように、メモリアクセスの度にメモリアドレスレジスタ４−７の内容と比較回路４ー１２で比較され、プログラムが固有のデータ領域外のデータを参照していないかどうかが調ベられる。
【００９３】
もし、固有のデータ領域外のアドレスをアクセスしようとした場合には、前述したように、比較回路４ー１２からシーケンス演算回路４−１にエラー信号が送られて、メモリアクセスを無効にすることができる。
【００９４】
以上のように、本実施の形態のプログラマブルコントローラでは、ＰＲＯＧＲＡＭ命令が、呼び出されるプログラムが使用するローカル変数領域の範囲をデータ範囲レジスタであるアドレス範囲レジスタ４−４およびテンポラリメモリアドレス範囲レジスタ４−１０に設定するようにしているので、アドレス範囲レジスタ４−４およびテンポラリメモリアドレス範囲レジスタ４−１０にプログラム固有のデータ領域を記憶させることができるため、プログラムが他のプログラムのデータ領域をアクセスしないように監視する、すなわち呼び出されたプログラムが専用のデータ領域外のデータをアクセスしないように制御することが可能となる。
【００９５】
（第７の実施の形態）
本実施の形態のプログラマブルコントローラでは、タスク毎に独立したテンポラリメモリを使用するように構成している。
【００９６】
具体的には、前記図４に示したように、シーケンス演算装置４に、メモリアドレスの計算の基礎となる、すなわちプログラムに固有な変数をアクセスする際にベースとなるベースアドレスを記憶するベースアドレスレジスタ４−３と、プログラムに固有な変数領域の大きさを記憶するデータ範囲レジスタであるテンポラリメモリアドレスレジスタ４−９とを備え、タスクを切り替える際に、このタスクに固有な一時使用データ領域の先頭アドレスおよびデータ量を、専用のタスク切替命令（ＡＳＳＩＧＮ命令）によって一時使用データ用のベースアドレスレジスタ４−３およびテンポラリメモリアドレスレジスタ４−９に設定することにより、呼び出されたプログラムが使用するデータが専用のデータ領域を使用すると共に、専用データ領域外へのアクセスを検出するように構成している。
【００９７】
ここで、テンポラリメモリは、プログラム間でのデータの授受他に使用するので、タスク毎に独立していることが好ましい。
【００９８】
従って、本実施の形態のプログラマブルコントローラにおいては、前述のＡＳＳＩＧＮ命令が実行された際に、ベースアドレスの変更と同時に、テンボラリメモリのベースアドレス変更およびアドレス範囲変更も実行して、例えば図１２に概念図を示すように、タスクＡとタスクＢとで独立した一時使用メモリを使用することができる。
【００９９】
すなわち、図７に示すようなタスクベースアドレステーブルには、対応するテンポラリメモリの先頭アドレスおよび末尾アドレスも同時に記憶されており、ＡＳＳＩＧＮ命令がこれを読み出して、それらをテンポラリメモリアドレスレジスタ４−９およびテンポラリアドレス範囲レジスタ４ー１０に記憶する。
【０１００】
なお、メモリアドレスの計算方法、およびアドレス範囲の正当性検証の方法については、前述したデータメモリ６の場合と同様である。
【０１０１】
以上のように、本実施の形態のプログラマブルコントローラでは、タスクを切り替える際に、このタスクに固有な一時使用データ領域の先頭アドレスおよびデータ量を、専用のタスク切替命令（ＡＳＳＩＧＮ命令）が一時使用データ用のベースアドレスレジスタ４−３、テンポラリメモリアドレスレジスタ４−９およびテンポラリアドレス範囲レジスタ４ー１０を設定するようにしているので、タスク毎に独立した一時使用データ領域を使用することが可能となり、またデータ範囲を監視することにより、専用の一時使用データ領域外へのアクセスを禁止することが可能となる。
【０１０２】
（第８の実施の形態）
本実施の形態のプログラマブルコントローラでは、各プログラムが使用する固有のデータ量をコンパイラに指示するように、プログラムに固有なデータ量を前記ＰＲＯＧＲＡＭ命令の中に格納するように構成している。
【０１０３】
従って、本実施の形態のプログラマブルコントローラにおいては、プログラムに固有なデータ量は、シーケンスプログラムをコンパイルする際に計算して求められ、例えば図１０に概念図を示すように、ＰＲＯＧＲＡＭ命令のオペランドの一部として記憶しておく。
【０１０４】
こうすることにより、プログラムを次々にネストしながら呼び出す際に、データメモリ６のベースアドレスの変更量を容易に計算することができる。
【０１０５】
また、シーケンスプログラムのコンパイラは、ＰＲＯＧＲＡＭ命令に付属させる補助命令のオペランドとなるオフセット値を求める際に、上位のプログラムから目的のプログラムまでのＰＲＯＧＲＡＭ命令に含まれるデータ量を加算していくだけで、ベースアドレスの変更量を求めることができる。
【０１０６】
これは、オンラインでのプログラム変更のように、プログラムのコンパイル時間を短縮したい場合に特に有効である。
【０１０７】
以上のように、本実施の形態のプログラマブルコントローラでは、プログラムが使用するローカル変数のデータ量をＰＲＯＧＲＡＭ命令に含めるようにしているので、コンパイラがあるプログラムおよび下流のプログラム全体で使用するローカル変数領域を容易に求めることが可能となる。
【０１０８】
（第９の実施の形態）
本実施の形態のプログラマブルコントローラでは、プログラムを呼び出す際に、このプログラムに付したプログラム番号によってプログラムの開始アドレスを指定すると共に、プログラム内からこのプログラム内でのみ使用される専用のプログラムを呼び出す際には、呼び出しアドレスからの相対アドレスによってプログラムを呼び出すように構成している。
【０１０９】
すなわち、前記各実施の形態では、プログラムを呼び出す際に、プログラム番号をよりどころにして対象となるプログラムのアドレスを求めることで説明したが、本実施の形態では、これ以外に、相対アドレスを使用した呼び出し命令も用意している。
【０１１０】
例えば、図１３に概念図を示すようなＰＲＯＧＲＡＭ命令の上段の命令は、前記図１０に示したものと同一であるが、下段の命令はプログラムのプログラム番号ではなく、呼び出しアドレスからの相対アドレスを使用して呼び出す。
【０１１１】
この場合、プログラム番号での呼び出しは、他のプログラムやタスクでプログラムを共用する時には有用であるが、呼び出し時間がかかるという問題点がある。
【０１１２】
この点、本実施の形態のプログラマブルコントローラにおいては、あるプログラムの下位でだけ使用されるプログラムについては、上記相対アドレスによる呼び出しを使用できるようにして、呼び出し時間の短縮を図ることができる。
【０１１３】
以上のように、本実施の形態のプログラマブルコントローラでは、プログラムをプログラムに付された固有の番号によって管理するようにしているので、先頭アドレスや使用データ量等の関連するデータをＰＲＯＧＲＡＭ命令に含めることが必要なくなるため、少ないプログラムコード量でプログラムを構成することが可能となる。
【０１１４】
また、あるプログラム内でだけ使用されるプログラムを呼び出す際には、プログラム番号ではなく、相対アドレスを使用して呼び出すことにより、プログラムの呼出しを高速に実行することが可能となる。
【０１１５】
（その他の実施の形態）
（ａ）上記実施の形態では、独立したデータ領域の割り当てを、ＣＰＵ１で行なう、すなわちコンパイラをＣＰＵ１で走らせる場合について説明したが、これに限らず、独立したデータ領域の割り当てを、モニタ装置２０で行なう、すなわちコンパイラをモニタ装置２０で走らせるようにすることも可能である。
【０１１６】
（ｂ）上記実施の形態では、ＣＰＵ１とシーケンス演算装置４とをそれぞれ別々に備える場合について説明したが、これに限らず、ＣＰＵ１とシーケンス演算装置４とを一体として備えるようにすることも可能である。
【０１１７】
【発明の効果】
以上説明したように、本発明のプログラマブルコントローラによれば、タスクおよびプログラム毎に、独立したデータ領域を割り当てるようにしているので、タスクおよびプログラム毎に独立したローカル変数領域を確保できるため、従来のようにレジスタの重複使用による制限他を受けることなく、タスクおよびプログラム毎に自由に変数を定義して使用することが可能となる。
【０１１８】
また、タスクの切替時やプログラムの切替時には、専用の命令によって、各タスクやプログラムが使用するデータメモリのベースアドレスを自動的に設定するようにしているので、タスクまたはプログラム毎に独立したデータ領域を使用することができ、各変数はベースアドレスらのオフセットによって指定されるため、ローカル変数を実現することが可能となる。
【０１１９】
さらに、データアクセスの際に、メモリ領域の正当性も同時に検証するようにしているので、他のプログラムが使用している領域を誤ってアクセスすることを防止することが可能となる。なお、かかる機能は、ローカル変数についてのみでなく、テンポラリデータについても実現することが可能となる。
【０１２０】
さらにまた、プログラムを呼び出すために、プログラム番号による方法と、相対アドレスによる方法とを併用するようにしているので、プログラムの呼び出し時間の短縮化を図ることが可能となる。
【図面の簡単な説明】
【図１】本発明によるプログラマブルコントローラの要部構成例を示すブロック図。
【図２】本発明の第１の実施の形態によるプログラマブルコントローラにおけるタスクとプログラムの構成例を示す概念図。
【図３】同第１の実施の形態によるプログラマブルコントローラにおけるタスク内のプログラムが使用するデータメモリの構成例を示す概念図。
【図４】本発明の第２の実施の形態によるプログラマブルコントローラにおけるシーケンス演算装置の要部構成例を示すブロック図。
【図５】本発明の第３の実施の形態によるプログラマブルコントローラにおけるプログラム内の変数のアクセス方法を説明するための概念図。
【図６】本発明の第４の実施の形態によるプログラマブルコントローラにおけるタスク切替命令の構成例を示す概念図。
【図７】同第４の実施の形態によるプログラマブルコントローラにおけるタスクベースアドレステーブルの構成例を示す概念図。
【図８】同第４の実施の形態によるプログラマブルコントローラにおけるタスク切替命令のプログラム例を示す図。
【図９】本発明の第５の実施の形態によるプログラマブルコントローラにおけるプログラムの呼び出し例を説明するための概念図。
【図１０】本発明の第５、第６および第８の各実施の形態によるプログラマブルコントローラにおけるプログラム切替命令の構成例を示す概念図。
【図１１】同第６の実施の形態によるプログラマブルコントローラにおけるデータメモリ範囲テーブルの構成例を示す概念図。
【図１２】本発明の第７の実施の形態によるプログラマブルコントローラにおけるテンポラリメモリの構成例を示す概念図。
【図１３】本発明の第９の実施の形態によるプログラマブルコントローラにおける相対アドレスによるプログラム呼出し命令の構成例を示す概念図。
【符号の説明】
１…ＣＰＵ
２…プログラムメモリ
３…ワークメモリ
４…シーケンス演算装置
５…シーケンスプログラムメモリ
６…データメモリ
７…マイコンバス
８…通信インタフェース
９…Ｉ／Ｏ
２０…モニタ装置。
【図１】
0003691986.tif 000002
【図２】
0003691986.tif 000003
【図３】
0003691986.tif 000004
【図４】
0003691986.tif 000005
【図５】
0003691986.tif 000006
【図６】
0003691986.tif 000007
【図７】
0003691986.tif 000008
【図８】
0003691986.tif 000009
【図９】
0003691986.tif 000010
【図１０】
0003691986.tif 000011
【図１１】
0003691986.tif 000012
【図１２】
0003691986.tif 000013
【図１３】
0003691986.tif 000014