PLCには、電源供給部、入出力処理部、演算処理部、各種の特殊演算処理部等々と言った様々な装置構成要素を1つのハウジングに全て収容してなるオールインワン型のものと、それらの処理部のそれぞれを別々のハウジングに収容してなるビルディングブロック型のものとが存在する。
演算処理部の一例として、ビルディングブロック型PLCのCPUユニットが図9に示されている。このCPUユニット1は、所謂バックプレーン上に敷設された内部バス10を介して、図示しない、電源ユニット、入出力ユニット、その他の特殊演算ユニット等々と接続されるものである。
同図に示されるように、CPUユニット1内には、ユーザプログラムメモリ(UM)11、入出力メモリ(IOM)12、データ格納用不揮発性メモリ13、専用IC14、マイクロプロセッサ(MPU)15、システムプログラムメモリ(ROM)16、及びワークメモリ(ワークRAM)17が含まれている。
ユーザプログラムメモリ11には、所望の制御仕様に対応する1若しくは2以上のサイクル実行タスクとして実行されるユーザプログラムと、1若しくは2以上の割込実行タスクとして実行されるユーザプログラムとが、所定のユーザプログラム言語で記述され専用IC14で実行可能な状態で格納されている。
入出力メモリ12には、入力データ領域と出力データ領域とが設けられており、入力データ領域には図示しない外部入力端子列の入力信号に対応する入力データが格納され、出力データ領域には図示しない外部出力端子列の出力信号に対応する出力データとが格納される。
データ格納用不揮発性メモリ13には、演算処理等に必要な各種の設定データのほか、異常通知の設定、異常ステータス等々が格納されている。
専用IC14は、所定のユーザプログラム言語にて記述されたユーザプログラムを実行するプログラム実行機能が組み込まれたものである。
マイクロプロセッサ15は、マイクロプロセッサ言語で記述された各種のシステムプログラムを実行することにより、PLCとしての各種の機能を実現するものである。それらの機能の代表的なものとしては、図示しない入出力ユニットの外部入力端子列から入力回路を介して入力データを読み込んで、入出力メモリ12の入力データ領域に書き込む入力更新処理と、入出力メモリ12の出力データ領域に格納された出力データを図示しない入出力ユニットの出力回路を介して外部出力端子列から外部へと送出する出力更新処理と、専用IC14の介在の下に、ユーザプログラムメモリ11からユーザプログラムを構成する各命令語を順次に読み出して実行する命令実行処理と、他のPLC、リモート入出力ターミナル、又はプログラム開発支援装置(ツール装置)等との間で通信を介してデータのやり取りを行う周辺サービス処理等を挙げることができる。
マイクロプロセッサ15は、入力更新処理、出力更新処理、命令実行処理、周辺サービス処理等を繰り返し実行するように制御することでユーザプログラムに従って制御対象を制御する。この繰り返し実行する際の一回の繰り返しに要する時間をサイクルタイムと呼ぶ。
システムプログラムメモリ16には、マイクロプロセッサ15が上記の各機能(入力更新処理、出力更新処理、命令実行処理、周辺サービス処理等)を実現するのに必要なシステムプログラムが、所定のマイクロプロセッサ言語にて記述されマイクロプロセッサ15で実行可能な状態で格納されている。
ワークメモリ17は、マイクロプロセッサ15がシステムプログラムメモリ16からシステムプログラムを読み出して実行する際のワークエリアとして使用される。
上述のPLCは、I/O割込、電断割込、定時割込等々のように、様々な割込要因を受け付け可能とされており、それらの割込要因が受け付けられたときには、所定の動作手順にしたがって割込処理が実行される。
従来のCPUユニットにおける割込処理の動作手順を示すフローチャートが図10示されている。同図に示されるように、割込処理の全体は、MPU処理(MPUによって実行される処理という意味)に委ねられる前段処理A(ステップ201〜203)と、専用IC処理(専用ICによって実行される処理という意味)に委ねられる本体処理B(ステップ204)と、MPU処理に委ねられる後段処理C(ステップ205〜207)とから構成されている。
なお、この例にあっては、前段処理Aには、割込禁止処理(ステップ201)、レジスタ退避処理(ステップ202)、及び割込みプログラム実行前処理(ステップ203)が含まれている。また、後段処理Cには、割込みプログラム実行後処理(ステップ205)、レジスタ復元処理(ステップ206)、及び割込み解除処理(ステップ207)が含まれている。
より具体的には、図9に示されるように、I/O割込信号や電断割込信号(IT1)は内部バスに含まれる割込ラインを介して専用IC14により受け付けられる。すると、専用IC14では、前段処理A(ステップ201〜203)の実行をマイクロプロセッサ15に委ねるために、それらの割込信号をマイクロプロセッサ15の割込入力端子へと受け流す。前段処理A(ステップ201〜203)の実行が完了すると、マイクロプロセッサ15は、本体処理B(ステップ204)の実行を専用IC14に委ねるべく、プログラム実行権を専用IC14に渡す。専用IC14は、本体処理B(ステップ204)の実行が完了すると、後段処理C(ステップ205〜207)の実行を再びマイクロプロセッサに15に委ねるべく、プログラム実行権をマイクロプロセッサ15に渡す。
このようにして、図10のフローチャートに示される一連の処理が実行される結果、図11に示されるように、常時は、ユーザプログラムUP1−1,UP1−2をそれぞれサイクル実行タスク(サイクリックに実行されるタスクの意味)として実行しつつも、I/O割込、定時割込、電断割込が発生したときには、そのときサイクル実行タスクとして実行中のユーザプログラムUP1−2を実行中断し、その代わりに、ユーザプログラムUP2を割込実行タスク(割込処理にて実行されるタスクの意味)として実行すると共に、ユーザプログラムUP2の実行が完了するのを待って、割込前にサイクル実行タスクとして実行されていたユーザプログラムUP1−2に復帰すると言った一連の動作が自動的に実行されるのである。このように、ユーザの作成する制御プログラムであるユーザプログラムは、上述のサイクル実行タスクとして、又は上述の割込実行タスクとして実行されることとなる。
ところで、上述のサイクル実行タスクとして実行されるユーザプログラムUP1−1,UP1−2と割込実行タスクとして実行されるユーザプログラムUP2とでは、プログラムの実行中に操作する演算用レジスタ群は両ユーザプログラム間で一部重複するのが通例である。
したがって、サイクル実行タスクとして実行されるあるユーザプログラムから割込実行タスクとして実行されるあるユーザプログラムへと実行対象プログラムを切り替えたり、逆に、割込実行タスクとして実行されるあるユーザプログラムからサイクル実行タスクとして実行されるあるユーザプログラムへと実行対象プログラムを切り替える際には、その切り替えの前後において、両プログラム間で共用するレジスタ群のデータ(記憶内容)をそのまま引き継ぐことはできない。
このように、互いに独立しかつ演算用レジスタを一部供用する2以上のプログラム間で、実行対象プログラムの相互切替が必要な場合、パソコン等の大容量メモリを保有する情報処理装置の分野においては、一般に「バンク」と称されるメモリ領域を各プログラム別に割り当てると共にこれに各プログラム毎に必要なレジスタ群を配置し、実行対象プログラムの切替が必要な場合には、バンク単位でレジスタ群を一括して切り替えると言った手法(以下、「バンク切り替え手法」と言う)が採用されている。
このようなバンク切り替え手法によれば、互いに独立しかつ演算用レジスタを一部供用する2以上のプログラム間で、実行対象プログラムの相互切替を行う場合、バンク単位でレジスタ群を一括して切り替えることから、プログラム間における実行の移行を瞬時に行うことができると言う利点がある。
しかし、PLCのように、比較的に小容量のメモリしか保有できない制御装置にあっては、上述のパソコン等の大容量メモリを保有する情報処理装置の場合とは異なり、各ユーザプログラム毎にレジスタ群配置用のバンクを割り当てることは困難であるから、実行対象プログラムの切り替えに際してバンク切り替え手法を採用することはできない。
そのため、従来、PLCにおいて、サイクル実行タスクとなるユーザプログラムと割込実行タスクとなるユーザプログラムとの間で、実行対象プログラムを切り替える場合には、演算用レジスタ群それ自体は共用しつつも、それらレジスタ群のデータ(記憶内容)については、所定の記憶領域(スタック)に退避又は所定の記憶領域(スタック)から復元すると言った手法(以下、「ネスティング手法」と言う)が採用されている(例えば、特許文献1参照)。図10の例にあっては、前段処理を構成するレジスタ退避処理(ステップ202)及び後段処理を構成するレジスタ復元処理(ステップ206)が、ネスティング手法を実現するための処理に相当する。
このようなネスティング手法を採用したPLCによれば、比較的に小容量のメモリしか保有できなくとも、プログラム間でのデータ干渉を回避しつつ、実行対象プログラムの切り替えを円滑に行わせることができる。
特開平4−205031号公報
サイクル実行タスクとなるユーザプログラムと割込実行タスクとなるユーザプログラムとの間で、実行対象プログラムを切り替えるに際して、ネスティング手法を採用する従来のPLCにあっては、システム中の全ての演算用レジスタ或いは複数のユーザプログラム間で共用する可能性がある全ての演算用レジスタについて、レジスタ退避処理及びレジスタ復元処理を実行するように仕組まれている。
しかしながら、このような従来のPLCにあっては、複数のユーザプログラム間で共用する可能性がある全ての演算用レジスタだけでも、少なくとも百数十個にも及ぶため、レジスタ退避処理及びレジスタ復元処理にかなりの時間がかかり、その分だけ割込開始から割込復帰に至る所要時間が長大化してしまう。その結果、割込実行タスクを実行するための割込処理によるサイクル実行タスク側の受ける影響が大きいと言う問題点が指摘されている。
ここで、サイクル実行タスク側の受ける影響とは、サイクルタイムが伸びることにより入力更新処理の遅れによる入力データの取りこぼしや、出力データの出力遅れ等が発生することによりサイクル実行タスクの実行精度が悪くなるということである。
この発明は、このような従来の問題点に着目してなされたものであり、その目的とするところは、割込開始から割込復帰に至る所要時間をできるだけ短縮することが可能な割込機能を備えたPLCを提供することにある。
この発明のさらに他の目的並びに作用効果については、明細書の以下の記述を参照することにより、当業者であれば容易に理解されるであろう。
上述の技術的課題は、以下の構成を有する割込機能を有するPLCにより解決することができると考えられる。
すなわち、この割込機能を有するPLCは、割込実行タスクとして実行されるユーザプログラムの実行前には、演算用のレジスタに格納されたデータを所定のメモリ領域に退避操作するレジスタ退避処理を少なくとも含む前段処理が実行され、また割込実行タスクとして実行されるユーザプログラムの実行後には、所定のメモリ領域に退避されているデータを元に戻すことにより、演算用レジスタの内容を復元操作するレジスタ復元処理を少なくとも含む後段処理が実行されるようになっている。
加えて、このPLCには、レジスタ退避処理にて退避操作されかつレジスタ復元処理にて復元操作されるべきデータの格納されたレジスタを任意に指定するための操作対象レジスタ指定手段と、割込用のユーザプログラムの実行に際しては、操作対象レジスタ指定手段により指定された演算用レジスタに関してのみ、レジスタ退避処理及びレジスタ復元処理を実行する退避・復元実行手段とが設けられている。
このような構成よりなるPLCによれば、割込用のユーザプログラムの実行に際しては、操作対象レジスタ指定手段により指定された演算用レジスタに関してのみ、レジスタ退避処理及びレジスタ復元処理が実行されるから、割込処理によって実際に操作される演算用レジスタのみを操作対象レジスタ指定手段により予め指定しておきさえすれば、レジスタ退避処理及びレジスタ復元処理の所要時間を最小化して、割込開始から割込復帰に至る所要時間をできるだけ短縮することができる。
本発明に係るPLCの好ましい実施の形態においては、操作対象レジスタ指定手段が、操作対象となるレジスタを指定するためのデータを予め登録するための操作対象登録レジスタを含み、かつ退避・復元実行手段が、操作対象登録レジスタに登録されたデータで指定される演算用レジスタに関してのみ、レジスタ退避処理及びレジスタ復元処理を実行する、ように構成される。
このような構成によれば、割込処理によって実際に操作される演算用レジスタのみを操作対象登録レジスタに登録しておきさえすれば、特に、ユーザプロクラム中において特別な指示を与えずとも、割込要因が発生すれば、操作対象として登録されたレジスタについてのみ、レジスタ退避処理及びレジスタ復元処理が実行されるから、登録対象となる操作対象レジスタの選定さえ確実でありさえすれば、割込開始から割込復帰に至る所要時間を最短とすることも可能となる。
このとき、退避・復元実行手段が、所定の命令コードが割り当てられた退避操作命令と、ユーザプログラム中において、退避操作命令が解読されるのに応答して、操作対象登録レジスタに登録されたデータで指定される演算用レジスタに関してのみ、レジスタ退避処理を実行する退避操作命令実行手段と、所定の命令コードが割り当てられた復元操作命令と、ユーザプログラム中において、復元操作命令が解読されるのに応答して、操作対象登録レジスタに登録されたデータで指定される演算用レジスタに関してのみ、レジスタ復元処理を実行する復元操作命令実行手段とを含む、ように構成してもよい。
このような構成によれば、退避操作命令及び復元操作命令をユーザプログラム中の適切な位置に配置することにより、操作対象登録レジスタに登録された演算用レジスタに関する退避タイミングや復元タイミング等をその時々の制御状況と任意に関連づけることができるため、この機能を利用すれば、割込処理の所要時間が問題とされない状況にあっては、例えば従前通りに大多数のレジスタに関して退避操作乃至復元操作を行わせつつも、特に、割込処理の所要時間が問題とされる状況についてのみ、退避操作命令及び復元操作命令をユーザプログラム中の適切な位置に配置することにより、退避操作及び復元操作される演算用レジスタを操作対象登録レジスタに登録されたものに限定することで、割込処理の所要時間を最小化することができる。
本発明に係るPLCの好ましい他の実施の形態においては、操作対象レジスタ指定手段が、所定の命令コードが割り当てられ、かつそのオペランドには、レジスタ退避処理にて退避操作されるべき演算用レジスタを指定するためのデータかが記述される操作対象指定付の退避操作命令と、所定の命令コードが割り当てられ、かつそのオペランドには、レジスタ退避処理にて退避操作されるべき演算用レジスタを指定するためのデータが記述される操作対象指定付の退避操作命令とを含み、かつ退避・復元実行手段が、ユーザプログラム中において、操作対象指定付の退避操作命令が解読されるのに応答して、その命令のオペランドに記述されたデータで指定される演算用レジスタに関してのみ、レジスタ退避処理を実行する退避操作命令実行手段と、ユーザプログラム中において、操作対象指定付の復元操作命令が解読されるのに応答して、その命令のオペランドに記述されたデータで指定される演算用レジスタに関してのみ、レジスタ復元処理を実行する復元操作命令実行手段とを含む、ように構成される。
このような構成によれば、操作対象指定付の退避操作命令及び操作対象指定付の復元操作命令をユーザプログラム中の適切な位置に配置することにより、退避タイミングや復元タイミング等をその時々の制御状況と任意に関連づけることができることに加え、退避命令及び復元命令それ自体で、退避操作又は復元操作されるべきレジスタを指定できるため、この機能を利用すれば、例えば、退避と復元とで対をなす操作命令対を各割込要因別に設けると共に、それらに付記される操作対象レジスタの内容を異ならせることで、割込要因の種別に拘わらず、退避操作及び復元操作される演算用レジスタの個数を必要最小限に止めて、個々の割込要因に対応する割込処理のそれぞれについて、その開始から復帰に至る所要時間を最小とすることもできる。
本発明によれば、割込実行タスクとして実行されるユーザプログラムの実行に際しては、操作対象レジスタ指定手段により指定された演算用レジスタに関してのみ、レジスタ退避処理及びレジスタ復元処理が実行されるから、割込処理によって実際に操作される演算用レジスタのみを操作対象レジスタ指定手段により予め指定しておきさえすれば、レジスタ退避処理及びレジスタ復元処理の所要時間を最小化して、割込開始から割込復帰に至る所要時間をできるだけ短縮することができる。
以下に、この発明に係る割込機能を有するPLCの好適な実施の一形態を添付図面を参照しながら詳細に説明する。
本発明に係るPLCのCPUユニットのハードウェア構成図が図1に示されている。同図に示されるように、このCPUユニット1は、従来例と同様に、ユーザプログラムメモリ(UM)11、入出力メモリ(IOM)12、データ格納用不揮発性メモリ13、専用IC14、マイクロプロセッサ(MPU)15、システムプログラムメモリ(ROM)16、及びワークメモリ(ワークRAM)17を含んで構成される。
ユーザプログラムメモリ11には、所望の制御仕様に対応する1若しくは2以上のサイクル実行タスクとして実行されるユーザプログラムと、1若しくは2以上の割込実行タスクとして実行されるユーザプログラムとが、所定のユーザプログラム言語で記述された状態で格納されている。なお、ユーザプログラムメモリ11には、後述するように、専用IC14が前段処理A及び後段処理Cをそれぞれ実行するためのユーザプログラムについても格納されている。
データ格納用不揮発性メモリ13には、演算処理などに必要な各種の設定データの他、異常通知の設定、異常ステータス等々が格納されている。
専用IC14は、所定のユーザプログラム言語にて記述されたユーザプログラムを実行するプログラム実行機能が組み込まれたものである。このプログラム実行機能によって、ユーザプログラムメモリ11に格納された各種のユーザプログラムを実行することによって、前述のサイクル実行タスク及び割込実行タスクの各機能が実現される。加えて、この例にあっては、前述の前段処理A及び後段処理Cについては、従来のようにマイクロプロセッサではなくて、専用ICによって実現されるように構成されている。
マイクロプロセッサ15は、プロセッサ言語で記述された各種のシステムプログラムを実行することにより、PLCとしての各種の機能を実現するものである。それらの機能の代表的なものとしては、図示しない入出力ユニットの外部入力端子列から入力回路を介して入力データを読み込んで、入出力メモリ12の入力データ領域に書き込む入力更新処理と、入出力メモリ12の出力データ領域に格納された出力データを図示しない入出力ユニットの出力回路を介して外部出力端子列から外部へと送出する出力更新処理と、プログラム実行権を専用IC14へと委ねることによって、ユーザプログラムを構成する各命令語を専用IC14に実行させる命令実行処理と、他のPLC、リモート入出力ターミナル、またはプログラム開発支援装置(ツール装置などとも言う)などとの間で通信を介してデータのやり取りを行う周辺サービス処理などを挙げることができる。マイクロプロセッサ15は、入力更新処理、出力更新処理、命令実行処理、周辺サービス処理等を繰り返し実行するように制御することでユーザプログラムに従って制御対象を制御する。
システムプログラムメモリ16には、マイクロプロセッサ15が上記の各処理(入力更新処理、出力更新処理、命令実行処理、周辺サービス処理など)を実行するのに必要なシステムプログラムが、所定のマイクロプロセッサ言語にて記述された状態で格納されている。
ワークメモリ17は、マイクロプロセッサ15がシステムプログラムメモリ16からシステムプログラムを読み出して実行する際のワークエリアとして使用される。
上述のPLC(CPUユニット1)は、I/O割込、電断割込、定時割込等々のように、様々な割込要因を受け付け可能とされており、それらの割込要因が受け付けられたときには、所定の動作手順に従って割込処理が実行される。
本発明に係るPLCのCPUユニットにおける割込処理の動作手順を示すフローチャートが図2に示されている。同図に示されるように、割込処理の全体は、前段処理A(ステップ101〜103)と、本体処理B(ステップ104)と、後段処理C(ステップ105〜107)とから構成されている。そして、特にこの例にあっては、それらの処理A〜Cは、いずれも専用IC処理に委ねられている。
なお、この例にあっては、前段処理Aには、割込禁止処理(ステップ101)、レジスタ退避処理(ステップ102)、及び割込プログラム実行前処理(ステップ103)が含まれている。
本体処理Bは、割込実行タスクを実現するための要部となるべきものであり、その時々の割込要因に対応する割込実行タスク用のユーザプログラムを実行する割込プログラム実行処理(ステップ104)により構成されている。
後段処理Cには、割込プログラム実行後処理(ステップ105)、レジスタ復元処理(ステップ106)、及び割込禁止解除処理(ステップ107)が含まれている。
そして、上述の各処理の中で、前段処理Aに含まれるレジスタ退避処理(ステップ102)と後段処理Cに含まれるレジスタ復元処理(ステップ106)によって、本発明の要部であるところの「退避・復元実行手段」の機能が実現されることとなる。
より具体的には、図1に戻って、I/O割込信号や電断割込信号(IT1)は、内部バス10に含まれる割込ラインを介して専用IC14により受け付けられる。すると専用IC14では、ユーザプログラムメモリ(UM)11から該当するプログラムを読み出して実行することによって、前段処理A(ステップ101〜103)、本体処理B(ステップ104)、及び後段処理C(ステップ105〜107)を順次に実行するのである。
次に、本発明の要部であるところの「操作対象レジスタ指定手段」及び「退避・復元実行手段」について説明する。先に述べたように、このCPUユニット1には、レジスタ退避処理(ステップ102)にて退避操作され、かつレジスタ復元処理(ステップ106)にて復元操作されるべきデータの格納された演算用レジスタを任意に指定するための「操作対象レジスタ指定手段」と、専用IC14による割込用のユーザプログラムの実行に際しては、操作対象レジスタ指定手段により指定された演算用レジスタに関してのみ、レジスタ退避処理(ステップ102)及びレジスタ復元処理(ステップ106)を実行する「退避・復元実行手段」とが設けられている。これらの手段(「操作対象レジスタ指定手段」及び「退避・復元実行手段」)の各機能は、具体的には、様々な方式により実現することができる。以下の説明では、第1方式〜第3方式からなる3つの方式が示されている。
第1方式における退避/復元動作の説明図(その1)が図3に、同説明図(その2)が図4にそれぞれ示されている。
この第1方式を実現するためには、図6に示される操作対象登録レジスタが用意される。この操作対象登録レジスタをどこに用意するかについては、システムの設計事項であって、例えば、専用IC14に設けることができる。
図6に示されるように、この操作対象登録レジスタ(RG)は16ビットのレジスタで構成した場合の例を示している。ビット0をレジスタA指定エリア、ビット1をレジスタB指定エリア、ビット2をレジスタC指定エリア、ビット3をレジスタD指定エリア、ビット4をレジスタE指定エリア、ビット5をレジスタF指定エリアというように16個のビットに16個のレジスタ指定エリアが割り付けらている。レジスタ指定エリアの値が「1」の場合は当該エリアに対応するレジスタの内容(データ)を退避/復元が必要であることを示している。また、レジスタ指定エリアの値が「0」の場合は当該エリアに対応するレジスタの内容(データ)の退避/復元が不要であることを示している。この例では、ビット0とビット1が「1」であり、その他は「0」となっており、レジスタAとレジスタBは退避/復元が必要なレジスタであることを示している。このレジスタ指定エリアの値を「0」または「1」に設定するためには、例えば、図示しないプログラム開発支援装置をCPUユニットに接続し、プログラム開発支援装置からの指示にしたがってCPUユニット内の専用IC14に設けた操作対象登録レジスタ(RG)に所定の値を書き込むように構成すれば良い。なお、この例では、操作対象登録レジスタ(RG)を16ビットのレジスタで構成したため、退避/復元の操作対象として指定可能なレジスタは16個までである。全ての演算用レジスタを退避/復元の操作対象とするためには、全ての演算用レジスタの個数分のビット数を割り付け可能なように操作対象登録レジスタ(RG)を構成すれば良い。例えば、16ビットのレジスタを複数用いて構成しても良いし、あるいは、32ビットのレジスタを複数用いて構成しても良い。
一方、図2のフローチャートに示されるレジスタ退避処理(ステップ102)及びレジスタ復元処理(ステップ106)においては、図6に示される操作対象登録レジスタ(RG)のレジスタ指定エリアの値が「1」であるレジスタのみを、退避処理及び復元処理する機能が組み込まれている。これらの選択的な退避処理及び復元処理を実現するためには、そのような処理手順を実現するためのユーザプログラムを、ユーザプログラムメモリ(UM)11内の所定エリアに、メーカー側あるいはベンダー側などにおいて予め格納しておけばよいであろう。
図3には、図6において操作対象登録レジスタ(RG)のビット0からビット5までのレジスタ指定エリアが「1」の場合の例を示している。具体的には、ビット0に対応するレジスタAからビット5に対応するレジスタFまでの6個のレジスタが退避/復元が必要なレジスタとして指定された場合における退避/復元動作が示されている。
同図(a)に示されるように、退避時の動作にあっては、登録されたレジスタ(レジスタA〜レジスタF)に関して、それらのレジスタに格納されたデータは、入出力メモリ(IOM)12内に設けられたスタック領域(MA)へと格納(プッシュ)される。また、同図(b)に示されるように、復元時の動作にあっては、登録されたレジスタ(レジスタA〜レジスタF)に関して、入出力メモリ(IOM)12内に設けられたスタック領域(MA)から各データの読出(ポップ)が行われ、それぞれ読み出されたデータは元のレジスタ(レジスタA〜レジスタF)へと格納され、復元動作が完了する。
図4には、図6において操作対象登録レジスタ(RG)のビット0、ビット2およびビット4のレジスタ指定エリアが「1」であり、その他のレジスタ指定エリアは「0」の場合の例を示している。具体的には、ビット0に対応するレジスタA、ビット2に対応するレジスタC、およびレジスタ4に対応するレジスタEの3個のレジスタが退避/復元が必要なレジスタとして指定された場合における退避/復元動作が示されている。
同図(a)に示されるように、退避時の動作にあっては、レジスタA、レジスタC、レジスタEの格納データのみが、スタック領域(MA)へと格納(プッシュ)されて、退避動作が完了する。この場合、レジスタB、レジスタD、レジスタFに格納される各データは退避されずにそのままの状態に維持される。また、同図(b)に示されるように、復元時の動作にあっては、スタック領域(MA)から該当するデータの読出(ポップ)が行われ、読み出された各データはそれぞれ該当するレジスタ(レジスタA、レジスタC、レジスタE)へと戻され、復元動作が完了する。
このように、この第1方式によれば、操作対象登録レジスタRGに予め退避/復元が必要なレジスタ(操作対象レジスタ)に該当するビット位置の値を「1」に設定することにより、選択的な退避/復元動作を実現することができる。従って、割込処理によって実際に操作される演算用レジスタのみを操作対象登録レジスタに予め操作対象レジスタとして登録しておきさえすれば、特に、ユーザプログラム中において特別な指示を与えずとも、割込要因が発生すれば、操作対象レジスタとして登録されたレジスタについてのみレジスタ退避処理(ステップ102)及びレジスタ復元処理(ステップ106)が実行されるから、登録対象となる操作対象レジスタの選定さえ確実でありさえすれば、割込開始から割込復帰に至る所要時間を最短とすることも可能となる。
第2方式における退避/復元動作の説明図が図5に示されている。第1方式にあっては、操作対象登録レジスタRGに操作対象レジスタとして登録されたレジスタについては、無条件で、退避処理及び復元処理が実行されたが、この第2方式においては、退避操作命令OP11及び復元操作命令OP12を新たに定義すると共に、これらの命令OP11,OP12が実行されたときに限り、操作対象登録レジスタRGの登録内容に基づく選択的な退避処理及び復元処理が実行されるようにしている。
このような退避操作命令OP11及び復元操作命令OP12を定義するためには、それらの命令に対応する実行プログラムが、ユーザプログラム言語で記述された状態において、ユーザプログラムメモリ(UM)11に格納される。これらの命令実行プログラムについては、メーカー側あるいはベンダー側において、予めユーザプログラムメモリ(UM)11の所定領域にインストールしておくことが考えられる。また、ユーザ側にあっては、これらの退避操作命令OP11及び復元操作命令OP12を、希望の条件で実行されるように任意のプログラム位置に挿入することによって、前述した選択的な退避処理及び復元処理を実現することができる。
すなわち、同図(a)に示されるように、退避時の動作にあっては、所定の入力条件(図では、ラダー図上の入力接点記号で示す)が成立すると共に、退避操作命令OP11が専用IC14によって解読実行され、その結果、予め操作対象レジスタとして登録されたレジスタ(レジスタA、レジスタC、レジスタE)のみが、スタック領域(MA)へと格納(プッシュ)される。また、同図(b)に示されるように、所定の入力条件(図ではラダー図上の入力接点記号で示す)が成立すると共に、復元操作命令OP12が専用IC14によって実行され、その結果、スタック領域(MA)からデータの読出(ポップ)が行われ、こうして読み出された各データは、それぞれ該当する元のレジスタ(レジスタA、レジスタC、レジスタE)に戻され、復元動作が完了する。
このように、この第2方式によれば、ユーザプログラム中に記述された退避操作命令OP11及び復元操作命令OP12が解読実行されたときに限り、操作対象登録レジスタRGの登録内容に基づく選択的な退避処理及び復元処理が実行されるから、例えば、これらの命令OP11,OP12が実行されない時には、従前通りに、全てのレジスタ(レジスタA〜レジスタF)に関して、退避処理及び復元処理が実行されるようにしておき、退避操作命令OP11及び復元操作命令OP12が解読実行された時に限って、操作対象登録レジスタRGの登録内容に基づく選択的な退避処理及び復元処理が実行されるようにすれば、使用される割込プログラムの種類や性質に応じて、あるいはその時々の制御状態に応じて、操作対象レジスタの数を必要最小限に留め、これにより、より柔軟性をもって、割込開始から割込復帰に至る所要時間を最短とすることが可能となる。
なお、以上説明した第1方式及び第2方式においては、全ての割込要因に関して、操作対象登録レジスタRGについては共通として話を進めてきたが、割込要因別に専用の操作対象登録レジスタRGを設けると共に、各割込要因が発生するごとに、該当する操作対象登録レジスタを参照するようにすれば、各割込要因ごとに、操作されるべきレジスタ数をきめ細かく調整できるから、個々の割込要因に合わせて操作対象レジスタ数を必要最小限に留めることによって、退避処理及び復元処理における無駄時間を削減して、割込開始から割込復帰に至る所要時間を割込要因ごとに最短とすることも可能となる。
第3方式における退避/復元動作の説明図が図7に、退避/復元命令の説明図が図8にそれぞれ示されている。
図7に示されるように、この第3方式にあっては、操作対象指定付の退避操作命令OP21及び操作対象指定付の復元操作命令OP22を新たに定義すると共に、これらの命令OP21,OP22が実行された時に限り、それらの命令のオペランドで指定されたレジスタに関してのみ、選択的な退避処理及び復元処理が実行されるようにしている。すなわち、前述の第1方式及び第2方式においては、操作対象となるレジスタの指定は、図示しないプログラム開発支援装置をCPUユニットに接続し、プログラム開発支援装置からの指示にしたがってCPUユニット内の専用IC14に設けた操作対象登録レジスタ(RG)に所定の値を書き込むように構成することで可能とした。この第3方式においては、操作対象となるレジスタの指定は、命令実行時に命令のオペランドで指定されたレジスタに基づいて行われるのである。
図8に示されるように、この操作対象指定付の命令OP21,OP22は、同図(a)に示されるように、命令コードと、第1オペランドと、第2オペランドとから構成される。命令コードは、その命令語が退避操作命令であることを示すコード(この例では、“EVRG”)からなる。第1オペランドには、操作対象レジスタを指定する。その指定方法の一例が同図(b)に示されている。この例では、操作対象登録レジスタ(RG)を16ビットのレジスタで構成している。ビット0をレジスタA指定エリア、ビット1をレジスタB指定エリア、ビット2をレジスタC指定エリア、ビット3をレジスタD指定エリア、ビット4をレジスタE指定エリア、ビット5をレジスタF指定エリアというように16個のビットに16個のレジスタ指定エリアが割り付けられている。レジスタ指定エリアの値が「1」の場合は当該エリアに対応するレジスタを退避対象とする。また、レジスタ指定エリアの値が「0」の場合は当該エリアに対応するレジスタを退避対象としない。同図(b)の例では、レジスタBとレジスタFの2つのレジスタを退避対象とし、その他のレジスタは退避対象としないことを示している。この例の場合、ビット0をLSB(Least Significant Bit)とすると、16ビットレジスタのビット列の内容を数値で表現すると0x0022(16進数)となる。したがって、レジスタBとレジスタFの2つのレジスタのみを退避対象とする場合は、退避操作命令EVRGの第1オペランドには数値として0x0022(16進数)を指定することになる。
一方、第2オペランドには、スタック領域(MA)の格納位置を示すスタックポインタアドレスが記述され、このスタックポインタアドレスに従って、スタック領域(MA)に関するデータ格納(プッシュ)及びデータ読み出し(ポップ)のための制御が実行される。図8(a)の例では、スタックポインタアドレスとしてスタック領域(MA)の先頭番地(0000)をあらわすMA0000が指定されている。なお、復元操作命令については図示していないが、退避操作命令と同様の命令フォーマットで構成すれば良い。例えば、その命令語が復元操作命令であることを示すコードとして“RTRG”を用い、第1オペランドには復元対象となる操作対象レジスタを指定し、第2オペランドには復元対象となるデータが格納されているスタックポインタアドレスを指定するように構成すれば良い。
再び、図7に戻って、同図(a)に示されるように、退避時の動作にあっては、以上説明した操作対象指定付の退避操作命令OP21が解読実行されると、いま仮に、図8(a)に示されるように、第1オペランドに0x0022が記述されていれば、その値に対応するビット列(0000 0000 0010 0010)で「1」に対応するレジスタ(レジスタB、レジスタF)に関してのみ、スタック領域(MA)へとデータは格納(プッシュ)されて、退避動作が完了する。一方、同図(b)に示されるように、復元時の動作にあっては、操作対象指定付の復元操作命令OP22が解読実行されると、その第1オペランドで指定されたレジスタB及びレジスタFに関してのみ、スタック領域(MA)からデータの読出(ポップ)が行われ、読み出されたデータは元のレジスタ(レジスタB、レジスタF)に格納されて、復元動作が完了する。
このように、この第3方式によれば、操作対象指定付の退避操作命令OP21及び操作対象指定付の復元操作命令OP22をユーザプログラム中の適切な位置に配置することにより、退避タイミングや復元タイミングなどをその時々の制御状況と任意に関連づけることができることに加え、退避命令及び復元命令それ自体で、退避操作又は復元操作されるべきレジスタを指定できるため、この機能を利用すれば、例えば、退避と復元とで対をなす操作命令対を各割込要因別に設けると共に、それらに付記される操作対象命令の内容を異ならせることで、割込要因の種別に拘わらず、退避操作及び復元操作される演算用レジスタの個数を必要最小限に留めて、個々の割込要因に対応する割込処理のそれぞれについて、その開始から復帰に至る所要時間を最小とすることもできる。
なお、以上説明した実施の形態では、CPUユニットにおける割込処理の動作手順として図2のように前段処理A、本体処理B、後段処理Cを専用IC処理とする例で示した。しかし、本発明は、これに限ることなく、前段処理A、本体処理B、後段処理Cを全てマイクロプロセッサ(MPU)で実行するように構成した場合にも適用できる。また、本発明は、前段処理Aと後段処理Cをマイクロプロセッサ(MPU)で実行させ、本体処理Bを専用ICで実行するように構成した場合にも適用できる。