(57)【要約】【課題】プログラマブルコントローラのＰＯＵ切り替えやタスク切り替えの際のオーバーヘッド時間を低減し、高速なスキャンサイクルによるスキャン制御を可能にする。【解決手段】実施形態のプログラマブルコントローラは、タスク切り替えおよびＰＯＵ切り替えの管理およびシーケンスプログラムの実行を行う制御用プロセッサを有し、制御用プロセッサは、シーケンスプログラムが実行中の情報を格納する実行用レジスタ群と、タスク切り替えおよびＰＯＵ切り替えの際、保存する記憶内容が格納されている実行用レジスタ群内の複数のレジスタと対応して接続された複数のレジスタからなる保存用レジスタ群と、を具備する。そして、実施形態のプログラマブルコントローラは、タスク切り替えおよびＰＯＵ切り替えの際、保存用レジスタ群への記憶内容の保存および記憶内容の実行用レジスタ群への復帰を所定の命令にてそれぞれ行う。【選択図】図１
2017130039.tif 000002
【特許請求の範囲】
【請求項１】
タスク切り替えおよびＰＯＵ（Program  Organization  Unit）切り替えの管理およびシーケンスプログラムの実行を行う制御用プロセッサを有し、
前記制御用プロセッサは、
前記シーケンスプログラムが実行中の情報を格納する実行用レジスタ群と、
前記タスク切り替えおよび前記ＰＯＵ切り替えの際、保存する記憶内容が格納されている前記実行用レジスタ群内の複数のレジスタと対応して接続された複数のレジスタからなる保存用レジスタ群と、
を具備し、
前記タスク切り替えおよび前記ＰＯＵ切り替えの際、前記保存用レジスタ群への前記記憶内容の保存および前記記憶内容の前記実行用レジスタ群への復帰を所定の命令にてそれぞれ行う、
プログラマブルコントローラ。
【請求項２】
タスク切り替えおよびＰＯＵ（Program  Organization  Unit）切り替えの管理およびシーケンスプログラムの実行を行う制御用プロセッサを有し、
前記制御用プロセッサは、
前記シーケンスプログラムが実行中の情報を格納する実行用レジスタ群と、
前記タスク切り替えおよび前記ＰＯＵ切り替えの際、保存する記憶内容が格納されている前記実行用レジスタ群内の複数のレジスタと対応して接続された複数のメモリからなる保存用メモリ群と、
を具備し、
前記タスク切り替えおよび前記ＰＯＵ切り替えの際、前記保存用レジスタ群への前記記憶内容の保存および前記記憶内容の前記実行用レジスタ群への復帰を所定の命令を所定回数発行することによりそれぞれ行う、
プログラマブルコントローラ。
【請求項３】
前記制御用プロセッサは、
前記タスク切り替えおよび前記ＰＯＵ切り替えの際、保存する記憶内容が格納されている前記実行用レジスタ群内の複数のレジスタと対応して接続された複数のメモリからなる保存用メモリ群をさらに具備し、
前記タスク切り替えおよび前記ＰＯＵ切り替えの際に前記保存用レジスタ群を用いる場合、前記タスク切り替えおよび前記ＰＯＵ切り替えの際、前記保存用レジスタ群への前記記憶内容の保存および前記記憶内容の前記実行用レジスタ群への復帰を所定の命令にてそれぞれ行い、
前記タスク切り替えおよびＰＯＵ切り替えの際に前記保存用メモリ群を用いる場合、前記タスク切り替えおよび前記ＰＯＵ切り替えの際、前記保存用メモリ群への前記記憶内容の保存および前記記憶内容の前記実行用レジスタ群への復帰を所定の命令を所定回数発行することによりそれぞれ行う、
請求項１に記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、プログラマブルコントローラに関する。
【背景技術】
【０００２】
従来より、鉄鋼、製紙プラントや上下水道などの公共システム、自動車産業などでの産業用システムの制御に、プログラマブルコントローラが広く使用されている。このプログラマブルコントローラでは、定周期に実行する複数のスキャンタスク（例えば高速、中速、低速）や、外部イベントや割込などの要因により実行するイベント系タスク（例えばイベントタスク、割込タスク）など、複数種類のタスクがそれぞれの優先度に従って、マルチタスク実行される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平０９−０３４５１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術においては、ＰＯＵ（Program  Organization  Unit）切り替えおよびタスク切り替えの際のオーバーヘッド時間が大きい場合に、近年の高速化されたスキャンサイクルによるスキャン制御ができないという問題があった。
【０００５】
本発明が解決しようとする課題は、プログラマブルコントローラのＰＯＵ切り替えやタスク切り替えの際のオーバーヘッド時間を低減し、高速なスキャンサイクルによるスキャン制御を可能にするプログラマブルコントローラを提供することである。
【課題を解決するための手段】
【０００６】
実施形態のプログラマブルコントローラは、タスク切り替えおよびＰＯＵ（Program  Organization  Unit）切り替えの管理およびシーケンスプログラムの実行を行う制御用プロセッサを有する。制御用プロセッサは、シーケンスプログラムが実行中の情報を格納する実行用レジスタ群と、タスク切り替えおよびＰＯＵ切り替えの際、保存する記憶内容が格納されている実行用レジスタ群内の複数のレジスタと対応して接続された複数のレジスタからなる保存用レジスタ群と、を具備する。そして、実施形態のプログラマブルコントローラは、タスク切り替えおよびＰＯＵ切り替えの際、保存用レジスタ群への記憶内容の保存および記憶内容の実行用レジスタ群への復帰を所定の命令にてそれぞれ行う。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施形態のプログラマブルコントローラと、その周辺装置の要部構成の一例を示す図である。
【図２】図２は、第１の実施形態における制御用専用プロセッサ内の各構成要素を示す概略図である。
【図３】図３は、第１の実施形態における実行用レジスタ群内の実行用レジスタＫと、対応する保存用レジスタ群内の保存用レジスタＫの概略構成を代表して示した図である。
【図４】図４は、第１の実施形態における、ＰＯＵ切り替え、タスク切り替えの動作時の様子を説明する図である。
【図５】図５は、第１の実施形態におけるレジスタ保存の際の保存位置を説明する図である。
【図６】図６は、第２の実施形態のプログラマブルコントローラと、その周辺装置の要部構成の一例を示す図である。
【図７】図７は、第２の実施形態における制御用専用プロセッサ内の各構成要素を示す概略図である。
【図８Ａ】図８Ａは、第２の実施形態における実行用レジスタ群とその周辺構成、および、保存用メモリ群とその周辺構成を、メモリ１を代表例として例示した図である。
【図８Ｂ】図８Ｂは、第２の実施形態におけるメモリアドレスの構成例を示す図である。
【図９】図９は、第２の実施形態における連続転送の詳細について説明する図である。
【図１０】図１０は、第２の実施形態における、ＰＯＵ切り替え、タスク切り替えの動作時の様子を説明する図である。
【図１１】図１１は、第２の実施形態における、メモリ保存の際の保存位置を説明する図である。
【図１２】図１２は、第３の実施形態のプログラマブルコントローラと、その周辺装置の要部構成の一例を示す図である。
【図１３】図１３は、第３の実施形態における制御用専用プロセッサ内の各構成要素を示す概略図である。
【図１４】図１４は、一般的なプログラマブルコントローラについて説明する図である。
【発明を実施するための形態】
【０００８】
はじめに、後述する実施形態の理解のため、一般的なプログラマブルコントローラにおけるＰＯＵ切り替えやタスク切り替えに関する動作の概要について説明する。
【０００９】
プログラマブルコントローラは、ＩＥＣ６１１３１−３で定義されたＰＯＵ（Program  Organization  Unit）単位で処理を実行する。ＰＯＵは、プログラム、ユーザ定義ファンクションブロック、およびユーザ定義ファンクションに分類される。ユーザ定義ファンクションブロックやユーザ定義ファンクションはプログラム内で使用され、またユーザ定義ファンクションブロックおよびユーザ定義ファンクションはネストして使用することもできる。
【００１０】
このＰＯＵの実行では、プログラマブルコントローラは、プログラムからユーザ定義ファンクションブロックやユーザ定義ファンクションを呼び出す場合、あるいはユーザ定義ファンクションブロックやユーザ定義ファンクションから新たなユーザ定義ファンクションブロックやユーザ定義ファンクションを呼び出す場合に、現在実行しているＰＯＵの情報を実行用レジスタから一旦データメモリへ保存し、新たなＰＯＵの情報を実行用レジスタに設定した上で当該ＰＯＵを実行する。そしてこの新たなＰＯＵの実行が完了すると、データメモリに保存していた元のＰＯＵの情報を実行用レジスタに戻し、元のレジスタ状態として、元のＰＯＵを継続実行する。
【００１１】
また、マルチタスク実行で、現在実行しているタスクよりも優先度が高いタスクの実行要求を受けた場合は、現在実行中のタスクを一旦停止するために現在実行中のタスクの情報を実行用レジスタからデータメモリに保存し、優先度が高いタスクのための情報を実行用レジスタに設定してから当該タスクを実行する。そして新たに実行された優先度の高いタスクの実行が終了した場合は、一旦中断していたタスクに復帰するためにデータメモリからその記憶内容を実行用レジスタに戻して、中断していたタスクの実行を再開する。
【００１２】
ここで、図１４を用いて、一般的なプログラマブルコントローラについて説明する。図１４では、一般的なプログラマブルコントローラに備わる制御用専用プロセッサ１４３とデータメモリ１４１とを示している。
【００１３】
同図に示す制御用専用プロセッサ１４３内には、実行用レジスタ群１４４と実行中のタスク番号を管理するためのタスク番号用レジスタ１４５とタスク毎のＰＯＵのネスト状態（ネスト数）を示すネスト番号を管理するためのネスト番号用レジスタ１４６がある。この制御用専用プロセッサ１４３は、データメモリ１４１と、外部バス１４７で接続されている。データメモリ１４１には、その任意のメモリアドレスに、保存用エリア１４２として、保存すべき実行用レジスタ数（ｋ）×ＰＯＵネスト数（ｎ＋１）×タスク数（ｍ）分のメモリ領域がアサインされている。
【００１４】
ＰＯＵ切り替え時は、制御用専用プロセッサ１４３内で管理する現在のタスク番号とネスト番号で示されるデータメモリ１４１内の保存用エリア１４２の領域へ、実行用レジスタ群１４４内の保存すべき実行用レジスタの記憶内容を保存する。実行用レジスタ群１４４は、新たに実行するＰＯＵの情報で更新され、呼び出し元ＰＯＵから呼び出し先ＰＯＵへと切り替えるたびにネスト番号はインクリメントされる。一方、呼び出し先ＰＯＵから呼び出し元ＰＯＵへ戻る場合は、ネスト番号をデクリメントし、タスク番号とネスト番号で示されるデータメモリ１４１内の保存用エリア１４２からその記憶内容を実行用レジスタ群１４４へ戻す（復帰）。
【００１５】
上記の実行用レジスタ群１４４の記憶内容の保存、復帰は、外部バス１４７を介して行うため、その転送回数は保存・復帰する実行用レジスタ数によって決定され、転送時間は、保存すべき実行用レジスタ数×データメモリ１４１の１転送当たりのアクセス時間を要する。
【００１６】
同様にタスク切り替え時は、制御用専用プロセッサ１４３内で管理する現在のタスク番号とネスト番号で示されるデータメモリ１４１内の保存用エリア１４２の領域へ、実行用レジスタ群１４４内の保存すべき実行用レジスタの記憶内容を保存する。このとき、新たに実行するタスクの情報で実行用レジスタ群１４４は更新され、タスク番号用レジスタ１４５は新たに実行するタスク番号にセットされ、ネスト番号用レジスタ１４６の記憶内容はリセットされる。一方、新たに実行されたタスクから中断前のタスクへ戻す場合は、タスク番号を中断前のタスク番号に戻し、タスク番号用レジスタ１４５およびネスト番号用レジスタ１４６のタスク番号およびネスト番号で示されるデータメモリ１４１内の保存用エリア１４２から実行用レジスタ群１４４へ、保存されている記憶内容を戻す（復帰）。
【００１７】
上記の実行用レジスタ群１４４の記憶内容の保存、復帰は、前述のＰＯＵの情報の保存、復帰の場合と同様に、外部バス１４７を介して行うため、その転送回数は保存・復帰する実行用レジスタ数によって決定され、その転送時間は、保存すべき実行用レジスタ数×データメモリ１４１の１転送当たりのアクセス時間を要する。
【００１８】
上述した一般的なプログラマブルコントローラにおける動作は、バス幅やオーバーヘッド時間などデータ転送上の制約のため、ＰＯＵ切り替えやタスク切り替えを高速に行うことに問題があった。以下では、この問題を解決するプログラマブルコントローラの諸実施形態を、添付の図面を参照して説明する。
【００１９】
（第１の実施形態）
図１は、第１の実施形態のプログラマブルコントローラと、その周辺装置の要部構成の一例を示す図である。
【００２０】
図１において、管理プロセッサ１１は、プログラマブルコントローラ１０の中枢部分であり、プログラマブルコントローラ１０全体の管理制御を行う。バス１５は、管理プロセッサ１１と管理プロセッサ１１だけが管理する各要素（図１では、制御用専用プロセッサ１２、ワークメモリ１３、通信Ｉ／Ｆ（インタフェース）１４）とを接続するバスであり、アドレス信号、データ信号、および制御信号用の各信号線からなる。
【００２１】
ワークメモリ１３は、管理プロセッサ１１の作業領域用として用いるメモリである。通信Ｉ／Ｆ１４は、プログラマブルコントローラ１０と外部のモニタ装置２０などとをイーサネット（登録商標）等による通信媒体を介して接続するためのインタフェース回路である。
【００２２】
モニタ装置２０は、プログラマブルコントローラ１０で実行するシーケンスプログラムのモニタや、ユーザからプログラマブルコントローラ１０へ制御指令を行うためのマンマシンインタフェースである。
【００２３】
バス１６は、制御用専用プロセッサ（制御用プロセッサ）１２とこの制御用専用プロセッサ１２の管理下にあるプログラマブルコントローラ１０内の各要素（図１では、プログラムメモリ１７、データメモリ１８、および入出力Ｉ／Ｆ１９を接続するバスであり、アドレス信号、データ信号、および制御信号用の各信号線からなる。
【００２４】
プログラムメモリ１７はユーザが作成したシーケンスプログラムを格納するメモリである。データメモリ１８は、ユーザが設定する変数や動作制御のためのデータを格納するメモリである。入出力Ｉ／Ｆ１９はプログラマブルコントローラ１０と外部の制御対象（入力装置および出力装置）を接続するための入出力装置である。
【００２５】
制御用専用プロセッサ１２は、入出力Ｉ／Ｆ１９を介した入出力制御、タイマ更新、タスクスケジュールの管理、およびシーケンスプログラムの実行を行う。
【００２６】
続いて、本実施形態における制御用専用プロセッサ１２について、図２および図３を参照し具体的に説明する。
【００２７】
図２は、本実施形態における制御用専用プロセッサ１２内の各構成要素を示す概略図である。
【００２８】
図２に示す実行用レジスタ群１２１は、タスクスケジュールの管理のための情報、シーケンスプログラムが実行中の情報を格納し、タスク番号用レジスタ１２２は、現在実行中のタスクを識別するためのタスク番号を格納し、ネスト番号用レジスタ１２３は、現在実行中のＰＯＵのネスト状態（ネスト数）を示すネスト番号を格納する。実行用レジスタ群１２１の内部構成は任意であるが、例えば、独立した複数の実行用レジスタにより構成される。なお、図面において、タスク番号用レジスタ１２２およびネスト番号用レジスタ１２３を独立したレジスタとして記載しているが、実行用レジスタ群１２１に含めてもよい。
【００２９】
保存用レジスタ群１２５は、実行用レジスタ群１２１の記憶内容を保存格納するためのものである。ここで実行用レジスタ群１２１の記憶内容とは、具体的には、実行用レジスタ群１２１を構成する複数の実行用レジスタの内、保存（退避）が必要な情報が格納される実行用レジスタの記憶内容である（以下、同様）。また、図２に示す通り、保存用レジスタ群１２５内の各レジスタ１〜ｋの保存エリアは、タスク数（ｍ）×ネスト数（ｎ＋１）の二次元配列の構成であり、タスク番号とネスト番号から一意の保存エリア位置を特定し、一つの専用命令によって実行用レジスタ群１２１と保存用レジスタ群１２５との間で、保存が必要な全ての情報の保存、復帰を行う。なお、保存用レジスタ群１２５内のレジスタ１〜ｋは、下記のように、記憶している情報の保存（退避）が必要な実行用レジスタ群１２１内の各実行用レジスタと、対応するものがそれぞれ接続線１２４（図１）を通じて接続されている。また、本明細書においては、各タスク番号をタスク１、タスク２、…、タスクｍ、各ネスト番号をネスト１、ネスト２、…、ネストｎ、のように表記している。
【００３０】
図３は、実行用レジスタ群１２１内の実行用レジスタＫと、対応する保存用レジスタ群１２５内の保存用レジスタＫの概略構成を代表して示している。
【００３１】
保存用レジスタＫは、タスク１〜ｍ用およびネスト０〜ｎ用にタスク数（ｍ）×ネスト数（ｎ＋１）分の複数の保存エリアをもつ。ここで、ｎとｍの具体的な値は、例えば、想定されるネスト数およびタスク数の最大値を基に決定する。また、保存用レジスタＫは、タスク番号用レジスタ１２２およびネスト番号用レジスタ１２３に格納されているタスク番号とネスト番号に従って、これら複数の保存エリアの内、タスク番号とネスト番号で特定される保存エリアに、同図左側に示す「専用命令（レジスタ保存）」を入力するデマルチプレクサ（ＤＥＭＵＸ）群と、上記タスク番号とネスト番号に従って、複数の保存エリアの内、このタスク番号とネスト番号で特定される保存エリアから出力される保存情報を実行用レジスタＫに供給するマルチプレクサ（ＭＵＸ）群とを備える。
【００３２】
実行用レジスタＫに格納されている情報を保存用レジスタＫに保存する場合は、「専用命令（レジスタ保存）」が、デマルチプレクサによりタスク番号とネスト番号に従って選択された保存エリアに入力されることにより当該保存エリアが書き込み可能となって、この保存エリアに実行用レジスタＫから出力される情報が保存される。また、保存用レジスタＫに保存された情報を実行用レジスタＫに復帰させる場合は、「専用命令（レジスタ復帰）」が、実行用レジスタＫに入力されることにより当該実行用レジスタＫは書き込み可能となり、マルチプレクサによりタスク番号とネスト番号に従って選択された保存エリアから出力される保存情報が実行用レジスタＫに入力されて、当該保存情報が実行用レジスタＫに復帰する。なお、この例では、専用命令（レジスタ保存）および専用命令（レジスタ復帰）はそれぞれ、該当の保存エリアおよび実行用レジスタＫに対するライトコマンドとなる。
【００３３】
図４は、第１の実施形態における、ＰＯＵ切り替え、タスク切り替えの動作時の様子を説明する図である。なお、同図に示す右下向きの破線矢印で示す切り替え時は、実行用レジスタ群１２１から保存用レジスタ群１２５への専用命令（レジスタ保存）を発行後にネスト番号をインクリメントすることを表す。また、同図に示す右上向きの破線矢印で示す切り替え時は、ネスト番号をデクリメント後に保存用レジスタ群１２５から実行用レジスタ群１２１への専用命令（レジスタ復帰）を発行することを表す。また、同図に示す右上向きの実線矢印で示す切り替え時は、実行用レジスタ群１２１から保存用レジスタ群１２５への専用命令（レジスタ保存）を発行後に、新たなタスクのタスク番号、ネスト番号をセットすることを表す。また、同図に示す右下向きの実線矢印で示す切り替え時は、タスク番号、ネスト番号を復帰後に、保存用レジスタ群１２５から実行用レジスタ群１２１への専用命令（レジスタ復帰）を発行することを表す。
【００３４】
ところで、ユーザが作成したシーケンスプログラムは、ＰＯＵの一つであるプログラムで作成される。そして、このプログラムはタスクエントリーから呼び出される形態で登録され、タスクが実行される場合はタスクエントリーからプログラムが順次呼び出されることでその実行が行われる。
【００３５】
図４に示すような、タスクエントリーからプログラムを呼び出す場合（１）、またはプログラムからユーザ定義ファンクションブロック、ユーザ定義ファンクション（ユーザＦＢ／Ｆ）を呼び出す場合（３）、または、ユーザ定義ファンクションブロック、ユーザ定義ファンクションからユーザ定義ファンクションブロック、ユーザ定義ファンクションを呼び出す場合（５）のような、現在実行中のＰＯＵから新たなＰＯＵを実行する切り替えの場合は、現在実行中の実行用レジスタ群１２１の記憶内容を専用命令（レジスタ保存）によって保存用レジスタ群１２５へ保存する。この場合の保存用レジスタ群１２５における保存位置は、現在のタスク番号とネスト番号で示す箇所となる。例えば、タスク番号がタスク１でネスト番号がネスト１の場合、図５に示すように「タスク１」および「ネスト１」用の保存位置に情報が保存される。その後、読み出し先ＰＯＵ（新たなＰＯＵ）の情報を実行用レジスタ群１２１に設定し、ネスト番号をインクリメントする。
【００３６】
また、プログラムからタスクエントリーへ戻る場合（２）、またはユーザ定義ファンクションブロック、ユーザ定義ファンクション（ユーザＦＢ／Ｆ）からプログラムへ戻る場合（４）、またはユーザ定義ファンクションブロック、ユーザ定義ファンクションからユーザ定義ファンクションブロック、ユーザ定義ファンクションへ戻る場合（６）のような、呼び出し先ＰＯＵから呼び出し元ＰＯＵへの切り替えの場合は、ネスト番号をデクリメントし、現在実行中の実行用レジスタ群１２１の記憶内容を、専用命令（レジスタ復帰）によって保存用レジスタ群１２５からその記憶内容を復帰させることにより更新する。保存用レジスタ群１２５からの復帰位置は、現在のタスク番号とネスト番号で示す箇所からとなる。
【００３７】
また、タスクを切り替える場合（７）のような、現在実行中のＰＯＵから新たなタスクを実行する切り替えの場合は、現在実行中の実行用レジスタ群１２１の内容を専用命令（レジスタ保存）によって保存用レジスタ群１２５へ保存する。保存用レジスタ群１２５の保存位置は、現在のタスク番号とネスト番号で示す箇所となる。その後、新たなタスクの情報（例えば、タスクエントリー）を実行用レジスタ群１２１に設定する。また、タスク番号は新たなタスクのタスク番号とし、ネスト番号はリセットする。なお、図４では、Ｃ１のタイミングで、現在実行中のタスクＴ１＊（＊＝１、２、…、以下同様）から実行優先度が高いタスクＴ２＊（優先度：Ｔ２＊＞Ｔ１＊）への切り替え動作を例示している。
【００３８】
また、タスク実行完了により中断前のタスクへ戻す場合（８）のような、実行が完了したタスクから中断前のタスクのＰＯＵへの切り替えの場合は、タスク番号とネスト番号を中断前のタスク番号とネスト番号に戻し、そのネスト番号をデクリメントし、専用命令（レジスタ復帰）によって保存用レジスタ群１２５から保存されている記憶内容を実行用レジスタ群１２１に戻す（復帰）。このとき保存用レジスタ群１２５での復帰位置は、復元後のタスク番号とネスト番号で示す箇所からとなる。なお、図４では、Ｃ２のタイミングで、現在実行中のタスクＴ２＊の終了により、中断していたタスクＴ１＊への切り替え動作を例示している。同図に示す“Ｅ”は、タスクの終了を表している。
【００３９】
このように、第１の実施形態のプログラマブルコントローラ１０によれば、実行用レジスタ群１２１の記憶内容の保存が必要な各実行用レジスタと、対応する保存用レジスタ群１２５内の保存用レジスタとを接続する構成とし、ＰＯＵ切り替えやタスク切り替えの際の実行用レジスタ群１２１の記憶内容の保存（退避）を、１つの専用命令により一度に保存用レジスタ群１２５へ保存させ、また、１つの専用命令により一度に上記記憶内容を保存用レジスタ群１２５から実行用レジスタ群１２１に戻すようにしたので、切り替えの際のオーバーヘッド時間が低減し、高速なスキャンサイクルによるスキャン制御が可能となる。
【００４０】
（第２の実施形態）
図６は、第２の実施形態のプログラマブルコントローラ１０と、その周辺装置の要部構成の一例を示す図である。
【００４１】
図６において図１に示した第１の実施形態に示したものと異なる点は、制御用専用プロセッサ１２において、前述の保存用レジスタ群１２５に代えて保存用メモリ群１２７を設けた点と、下記のループ数を記憶するループ数用レジスタ１２６をさらに設けた点である。その他の構成は、第１の実施形態で説明したものと同様であり、共通する部分は、その説明を省略する。なお、図６において、ループ数用レジスタ１２６を独立したレジスタとして記載しているが、実行用レジスタ群１２１に含めてもよい。
【００４２】
図７は、本実施形態における制御用専用プロセッサ１２内の各構成要素を示す概略図である。
【００４３】
実行用レジスタ群１２１、タスク番号用レジスタ１２２、およびネスト番号用レジスタ１２３は、第１の実施形態で前述したとおりである。ループ数用レジスタ１２６は、ループ数を格納するものであり、このループ数用レジスタ１２６に設定するループ数は、実行用レジスタ群１２１から保存用メモリ群１２７へ、バースト転送などにより連続転送する回数を指定するものである。
【００４４】
図７に示す保存用メモリ群１２７は実行用レジスタ群１２１の記憶内容を保存格納するためのものである。なお、保存用メモリ群１２７内のメモリ１〜ｊは、記憶している情報の保存（退避）が必要な実行用レジスタ群１２１内の各実行用レジスタと、対応するものがそれぞれ接続されている。保存用メモリ群１２７の構成は、同図に示す通り、複数のレジスタをグループ（メモリ１、メモリ２、…、メモリｊなど）として扱い、その保存エリアがタスク数（ｍ）×ネスト数（ｎ＋１）×ループ数（ｉ）分の三次元配列の構成とし、タスク番号とネスト番号とループ数とから一意の保存レジスタエリア（レジスタａ１、レジスタａ２、…、レジスタｊｉ）を特定し、ループ数で指定する回数分（ｉ）の専用命令によって実行用レジスタ群１２１と保存用メモリ群１２７との間で、保存すべき情報の保存（退避）、復帰を行う。
【００４５】
図８Ａに、実行用レジスタ群１２１とその周辺構成、および、保存用メモリ群１２７とその周辺構成を、メモリ１を代表例として例示する。同図では、保存レジスタエリアを特定するためにアドレス生成部を設けている。このアドレス生成部には、タスク番号、ネスト番号、およびループ数が入力され、図８Ｂに示すようなタスク番号、ネスト番号、ループ数によって決定されるメモリアドレス（メモリ内のオフセットアドレス）を生成する。ループ数は、１転送毎にデクリメントするようにして、このメモリアドレスを更新する。実行用レジスタ群１２１の記憶内容を保存する場合は、専用命令（メモリ保存）により、実行用レジスタ群１２１から、マルチプレクサにより１回の転送分の記憶内容の出力が選択されその記憶内容がメモリ１に転送される。メモリ１から記憶内容を復帰させる場合は、専用命令（メモリ復帰）により、メモリ１からの１回の転送分の記憶内容の出力が、デマルチプレクサにより実行用レジスタ群１２１内の対応するレジスタ（グループ）の対応する部分に振り分けられ転送される。これらの連続転送の詳細について図９に示す。図９に示すように、実行用レジスタ群１２１のレジスタａ１〜ａ８の記憶内容を、保存用メモリ群１２７のメモリ１のタスク１用かつネスト０用の保存レジスタエリアに保存する場合、専用命令（メモリ保存）を８回繰り返すことにより、レジスタａ１からａ８までの記憶内容を全て転送する。
【００４６】
本実施形態は、実行用レジスタ群１２１から複数メモリ（メモリ１〜メモリｊ）に対して同時にアクセスし記憶内容の転送を行うため、データバスが見かけ上、メモリ数（ｊ）×レジスタビット幅であるように動作し、ＰＯＵ切り替えやタスク切り替えの際のオーバーヘッド時間が低減する。また、本実施形態は、レジスタスタック、インデックスレジスタのような連続したレジスタをもつ実行用レジスタ群１２１の記憶内容を保存・復帰する場合に有効な構成となっている。
【００４７】
図１０は、本実施形態における、ＰＯＵ切り替え、タスク切り替えの動作時の様子を説明する図である。なお、同図に示す右下向きの破線矢印で示す切り替え時は、実行用レジスタ群１２１から保存用メモリ群１２７への専用命令（メモリ保存）をループ数の回数分（ｉ）だけ発行後にネスト番号をインクリメントすることを表す。また、同図に示す右上向きの破線矢印で示す切り替え時は、ネスト番号をデクリメント後に保存用メモリ群１２７から実行用レジスタ群１２１への専用命令（メモリ復帰）をループ数の回数分（ｉ）だけ発行することを表す。また、同図に示す右上向きの実線矢印で示す切り替え時は、実行用レジスタ群１２１から保存用メモリ群１２７への専用命令（メモリ保存）をループ数の回数分（ｉ）だけ発行後に、新たなタスクのタスク番号、ネスト番号をセットすることを表す。また、同図に示す右下向きの実線矢印で示す切り替え時は、タスク番号、ネスト番号を復帰後に、保存用メモリ群１２７から実行用レジスタ群１２１への専用命令（メモリ復帰）をループ数の回数分（ｉ）だけ発行することを表す。
【００４８】
図１０に示すような、タスクエントリーからプログラムを呼び出す場合（１）、またはプログラムからユーザ定義ファンクションブロック、ユーザ定義ファンクション（ユーザＦＢ／Ｆ）を呼び出す場合（３）、または、ユーザ定義ファンクションブロック、ユーザ定義ファンクションからユーザ定義ファンクションブロック、ユーザ定義ファンクションを呼び出す場合（５）のような、現在実行中のＰＯＵから新たなＰＯＵを実行する切り替えの場合は、現在実行中の実行用レジスタ群１２１の記憶内容を、専用命令（メモリ保存）をループ数で指定する回数分（ｉ）だけ繰り返し発行することによって保存用メモリ群１２７へ保存する。この場合の保存用メモリ群１２７における保存位置は、現在のタスク番号とネスト番号とループ数で示す箇所となる。例えば、タスク番号がタスク１でネスト番号がネスト１の場合、図１１に示すように「タスク１」および「ネスト１」用のメモリ１〜メモリｊの保存位置に、ループ数＝１〜ｉのｉ回の転送により、実行用レジスタ群１２１の記憶内容がｉ個の保存レジスタエリアに順次保存される。その後、読み出し先ＰＯＵ（新たなＰＯＵ）の情報を実行用レジスタ群１２１に設定し、ネスト番号をインクリメントする。
【００４９】
また、プログラムからタスクエントリーへ戻る場合（２）、またはユーザ定義ファンクションブロック、ユーザ定義ファンクション（ユーザＦＢ／Ｆ）からプログラムへ戻る場合（４）、またはユーザ定義ファンクションブロック、ユーザ定義ファンクションからユーザ定義ファンクションブロック、ユーザ定義ファンクションへ戻る場合（６）のような、呼び出し先ＰＯＵから呼び出し元ＰＯＵへの切り替えの場合は、ネスト番号をデクリメントし、現在実行中の実行用レジスタ群１２１の内容を、専用命令（メモリ復帰）をループ数で指定する回数分（ｉ）だけ繰り返し発行することによって、保存用メモリ群１２７からその記憶内容を復帰させることにより更新する。保存用メモリ群１２７からのその復帰位置は、現在のタスク番号とネスト番号とループ数で示す箇所からとなる。
【００５０】
また、タスクを切り替える場合（７）のような現在実行中のＰＯＵから新たなタスクを実行する切り替えの場合は、現在実行中の実行用レジスタ群１２１の記憶内容を、専用命令（メモリ保存）をループ数で指定する回数分（ｉ）だけ繰り返すことによって保存用メモリ群１２７へ保存する。保存用メモリ群１２７での保存位置は、現在のタスク番号とネスト番号とループ数で示す箇所となる。その後、新たなタスクの情報を実行用レジスタ群１２１に設定する。また、タスク番号は新たなタスクのタスク番号とし、ネスト番号はリセットする。なお、図１０でも、前述の図４でのタスク切り替えと同様に、Ｃ１のタイミングで、現在実行中のタスクＴ１＊（＊＝１、２、…、以下同様）から実行優先度が高いタスクＴ２＊への切り替えを例示している。
【００５１】
また、タスク実行完了により中断前のタスクへ戻す場合（８）のような、実行が完了したタスクから中断前のタスクのＰＯＵへの切り替えの場合は、タスク番号とネスト番号を中断前のタスク番号とネスト番号に戻し、そのネスト番号をデクリメントし、専用命令（メモリ復帰）をループ数で指定する回数分（ｉ）だけ繰り返すことによって保存用メモリ群１２７から保存されている記憶内容を実行用レジスタ群１２１に戻す。保存用メモリ群１２７からのその復帰位置は、復元後のタスク番号とネスト番号とループ数で示す箇所からとなる。なお、図１０でも、前述の図４でのタスク復帰と同様に、Ｃ２のタイミングで、現在実行中のタスクＴ２＊の終了により、中断していたタスクＴ１＊への切り替えを例示している。同図に示す“Ｅ”は、タスクの終了を表している。
【００５２】
本実施形態のプログラマブルコントローラ１０によれば、実行用レジスタ群１２１の記憶内容の保存が必要な各レジスタと、保存用メモリ群１２７内の対応するメモリグループとを接続する構成とし、ＰＯＵ切り替えやタスク切り替えの際の実行用レジスタ群１２１の記憶内容の保存（退避）を、１つの専用命令を所定回数発行することにより保存用メモリ群１２７へと保存させ、また、１つの専用命令を所定回数発行することにより上記記憶内容を保存用メモリ群１２７から実行用レジスタ群１２１へ戻すようにしたので、前述のように、タスク切り替えやＰＯＵ切り替えの際のオーバーヘッド時間が低減し、高速なスキャンサイクルによるスキャン制御を可能にすることができる。また、本実施形態は、レジスタスタック、インデックスレジスタのような連続したレジスタをもつ実行用レジスタ群１２１の記憶内容を保存・復帰する場合に有効である。
【００５３】
（第３の実施形態）
図１２は、第３の実施形態のプログラマブルコントローラと、その周辺装置の要部構成の一例を示す図である。
【００５４】
図１２においいて図１に示した第１の実施形態に示したものと異なる点は、制御用専用プロセッサ１２において、第２の実施形態における保存用メモリ群１２７と、ループ数用レジスタ１２６をさらに設けた点である。その他の構成は、第１の実施形態で説明したものと同様であり、共通する部分は、その説明を省略する。
【００５５】
図１３は、本実施形態における制御用専用プロセッサ１２内の各構成要素を示す概略図である。
【００５６】
同図に示す実行用レジスタ群１２１、タスク番号用レジスタ１２２、ネスト番号用レジスタ１２３、ループ数用レジスタ１２６は、第１の実施形態および第２の実施形態で説明したとおりである。
【００５７】
保存用レジスタ群１２５の構成は第１の実施形態で説明した保存用レジスタ群１２５と同様であり、保存用メモリ群１２７の構成は第２の実施形態で説明した保存用メモリ１２７と同様となる。実行用レジスタ群１２１からの保存用レジスタ群１２５や、保存用メモリ群１２７への保存や、保存用レジスタ群１２５や、保存用メモリ群１２７から実行用レジスタ群１２１への復帰の動作についても同様である。本実施形態の構成は、独立したレジスタで構成された実行用レジスタ群１２１の記憶内容を保存・復帰する場合、およびレジスタスタック、インデックスレジスタのような連続したレジスタで構成された実行用レジスタ群１２１の記憶内容を保存・復帰する場合の両方で有効な構成となる。このように、本実施形態のプログラマブルコントローラ１０は、前述の第１の実施形態および第２の実施形態のプログラマブルコントローラ１０の両方の構成および機能を併せ持ち、保存用レジスタ群１２５と保存用メモリ群１２７の必要な方または両方を利用することが可能である。
【００５８】
よって、本実施形態のプログラマブルコントローラ１０によれば、第１の実施形態および第２の実施形態のプルグラマブルコントローラと同様、切り替えの際のオーバーヘッド時間が低減し、高速なスキャンサイクルによるスキャン制御を可能にすることができる。また、独立したレジスタで構成された実行用レジスタ群１２１の記憶内容を保存・復帰する場合、およびレジスタスタック、インデックスレジスタのような連続したレジスタで構成された実行用レジスタ群１２１の記憶内容を保存・復帰する場合の両方で有効である。
【００５９】
以上述べたように、第１から第３の実施形態によれば、プログラマブルコントローラにおけるＰＯＵ切り替えやタスク切り替えのためのオーバーヘッド時間を低減することができ、それにより高速なスキャンサイクルによるスキャン制御を可能なプログラマブルコントローラを実現することができる。
【００６０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６１】
１０  プログラマブルコントローラ
１１  管理プロセッサ
１２  制御用専用プロセッサ
１３  ワークメモリ
１４  通信Ｉ／Ｆ
２０  モニタ装置
１７  プログラムメモリ
１８  データメモリ
１９  入出力Ｉ／Ｆ
１２１  実行用レジスタ群
１２２  タスク番号用レジスタ
１２３  ネスト番号用レジスタ
１２５  保存用レジスタ群
１２６  ループ数用レジスタ
１２７  保存用メモリ群
１４１  データメモリ
１４２  保存用エリア
１４３  制御用専用プロセッサ
１４４  実行用レジスタ群
１４５  タスク番号用レジスタ
１４６  ネスト番号用レジスタ
【図１】
2017130039.tif 000003
【図２】
2017130039.tif 000004
【図３】
2017130039.tif 000005
【図４】
2017130039.tif 000006
【図５】
2017130039.tif 000007
【図６】
2017130039.tif 000008
【図７】
2017130039.tif 000009
【図８Ａ】
2017130039.tif 000010
【図８Ｂ】
2017130039.tif 000011
【図９】
2017130039.tif 000012
【図１０】
2017130039.tif 000013
【図１１】
2017130039.tif 000014
【図１２】
2017130039.tif 000015
【図１３】
2017130039.tif 000016
【図１４】
2017130039.tif 000017