(57)【特許請求の範囲】
【請求項１】
内蔵ＲＡＭを持つＭＰＵと、電断時にバッテリによってバックアップされる低速ＲＡＭと、電断時にバックアップされない高速ＲＡＭと、からなるプログラマブルコントローラの制御方法であって、
ソースプログラムおよび電断時に保持を必要とする保持変数を前記低速ＲＡＭに格納する工程と、
電源ＯＮ時に前記低速ＲＡＭ内のソースプログラムを実行形式であるオブジェクトプログラムに変換し、変換したオブジェクトプログラムを、電断時に保持を必要としない非保持変数とともに前記高速ＲＡＭまたは前記内蔵ＲＡＭに格納する工程と、
前記高速ＲＡＭまたは内蔵ＲＡＭ内のオブジェクトプログラムを読み出し実行する工程と、からなることを特徴とするプログラマブルコントローラの制御方法。
【請求項２】
前記保持変数および非保持変数を定義するシステム設定として入力する工程をさらに含み、
前記システム設定にしたがって前記保持変数および前記非保持変数を格納することを特徴とする請求項１に記載のプログラマブルコントローラの制御方法。
【請求項３】
前記オブジェクトプログラムおよび前記非保持変数を前記高速ＲＡＭおよび前記内蔵ＲＡＭのどちらかに格納するかをモード設定として入力する工程をさらに含み、
電源ＯＮ時に前記モード設定にしたがって前記オブジェクトプログラムおよび前記非保持変数を格納してなり、
前記モード設定は、前記オブジェクトプログラムの容量と前記内蔵ＲＡＭの容量の関係によって決定されることを特徴とする請求項１または２に記載のプログラマブルコントローラの制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、ユーザ作成のプログラムおよびこのプログラムの実行過程で使用されたり、生成されたりする変数を格納するメモリを有し、ユーザの目的に応じてプログラム実行速度を切り替え使用でき、また、プログラム実行結果によるデータを保持することのできるプログラマブルコントローラの制御方法に関する。
【０００２】
【従来の技術】
プログラマブルコントローラは、電源ユニット、ＣＰＵユニット、Ｉ／Ｏユニット等の多数のユニットで構成され、Ｉ／Ｏユニットの書き換え可能なメモリに、外部で組まれたユーザプログラム、例えば、ラダープログラムを書き込み、ユーザプログラムを実行するようになっている。
【０００３】
上記Ｉ／Ｏユニットには、多数の制御対象機器が接続されるが、この際接続される制御対象機器に応じて、Ｉ／Ｏユニットには、任意の動作モードが設定される。
【０００４】
具体的には、Ｉ／ＯユニットとＣＰＵユニット間のデータリンク機能、Ｉ／Ｏユニット側からＣＰＵユニットに対して任意の割り込みを発生させる機能、ＣＰＵユニット側と同期して動作する機能、ＣＰＵユニット側の故障を検出して、ＣＰＵユニットの故障時の処理をする機能、特殊入出力（パルス、アナログ、ＩＤ等）を扱う入出力ポートの制御機能などの動作モードが設定される。
【０００５】
これによって、この発明では、ユーザはＩ／Ｏユニットに対して演算処理のためのユーザプログラムを入力して、ユーザオリジナルのユニット動作モードを作り上げ、制御対象、制御方式に最適な状態にカスタマイズして使用できるようにする。
【０００６】
すなわち、Ｉ／Ｏユニットに取り込まれ実行されるプログラムは、ユーザがＩ／Ｏユニットで実行させたいプログラムで、ユーザが別途作成するカスタマイズされたプログラムである。このプログラムは、プログラマブルコントローラのＣＰＵユニットでなされる処理プログラム（システムプログラム、ユーザプログラム）とは独立した別のもので、Ｉ／Ｏユニット向けで独自のＩ／Ｏ制御ロジックや任意の演算処理などを行うプログラムである。外部ツールを用いて作成されるプログラムで、ユーザが新規作成または書き換え（変更または追加）でき、ユーザが自由にプログラムできるものである。
【０００７】
プログラマブルコントローラには、また、電源、ＣＰＵ、Ｉ／Ｏ等を一体にまとめた一体型のマイクロＰＬＣが知られているが、この発明のプログラマブルコントローラは、このマイクロＰＬＣにも勿論適用できるものである。また、上述の説明から理解できるように、プログラマブルなＩ／Ｏユニットにも適用できるものである。
【０００８】
プログラマブルコントローラにおいては、図７に示すように、例えば、ラダープログラムのようなソースプログラムと、これをコンパイルして実行形式に変換したオブジェクトプログラム（実行用プログラム）と、プログラム実行に使用する変数を、バッテリ１にバックアップされる共通の低速ＲＡＭ２に格納するようになっている。上記変数には、電断時等にバックアップを必要とする保持変数とバックアップを必要としない非保持変数とがある。この非保持変数とソースプログラムから容易にコンパイルできるオブジェクトプログラムとは、電断等の非常の場合は保持しなくてもよいので、バックアップを行わない方がバッテリ寿命が長くなって好ましい。しかし、低速ＲＡＭ２内のエリアを仕分けてこのような処理をするのは煩雑なので、低速ＲＡＭ２全体をバッテリ１でバックアップするのが普通である。
【０００９】
なお、図７において、３は、プログラム実行処理等を行うＭＰＵ、４は、システムプログラム等を格納したＲＯＭ、５は、プログラマブルコントローラ外部との入出力用のＩ／Ｏ、６は、低速ＲＡＭ２、ＭＰＵ３、ＲＯＭ４、Ｉ／Ｏ５を相互に接続するバスである。
【００１０】
【発明が解決しようとする課題】
ところで、近年は、プログラマブルコントローラの高速処理の要求が高まっている。しかし、高速処理には、次のような課題があった。
【００１１】
１  高速処理のためには、ＭＰＵ３に内蔵のＲＡＭにオブジェクトプログラムを展開して格納しておき、プログラムを実行するのが最も望ましいが、内蔵ＲＡＭの容量が小さく、ラダープログラムをソースとしたような容量の大きいプログラムは格納できない。
【００１２】
２  大きいプログラムを格納するために外部ＲＡＭを使用する場合は、プログラムの実行速度を上げるために、外部ＲＡＭとして高速タイプのＳＲＡＭが必要となる。しかし、この高速タイプのＳＲＡＭの記憶内容を電断時にバックアップすると、リテンション電流が大きくなり、バックアップ用のバッテリの消耗が速く、低速ＲＡＭを用いた場合ならば数年のバッテリのバックアップ維持期間があるのに対して、高速タイプＳＲＡＭを用いる場合はバッテリのバックアップ維持期間が数か月と短くなってしまう。
【００１３】
３  上記１および２の理由から、従来、図７のように、外部ＲＡＭとして低速ＲＡＭを採用するしかなかった。この場合は、バックアップ時のリテンション電流が小さく、バッテリの寿命が長い。しかし、プログラム実行速度の高速化を図ることはできない。
【００１４】
４  また、図７の場合、電断時に保持を必要とする保持変数と保持を必要としない非保持変数とを同一のＲＡＭの連続したエリアに混在させて格納しているため、電断時に保持変数エリアと非保持変数エリアとを分けて保持変数だけを保持することは困難である。
【００１５】
この発明は、上述の問題を解決し、ユーザプログラムとその変数を従来同様バッテリで長期間バックアップできて、しかも、プログラムの高速処理ができるプログラマブルコントローラの制御方法を提供するものである。
【００１６】
【課題を解決するための手段】
上述の目的を達成するために、この発明は、内蔵ＲＡＭを持つＭＰＵと、電断時にバッテリによってバックアップされる低速ＲＡＭと、電断時にバックアップされない高速ＲＡＭと、からなるプログラマブルコントローラの制御方法であって、ソースプログラムおよび電断時に保持を必要とする保持変数を前記低速ＲＡＭに格納する工程と、電源ＯＮ時に前記低速ＲＡＭ内のソースプログラムを実行形式であるオブジェクトプログラムに変換し、変換したオブジェクトプログラムを、電断時に保持を必要としない非保持変数とともに前記高速ＲＡＭまたは前記内蔵ＲＡＭに格納する工程と、前記高速ＲＡＭまたは内蔵ＲＡＭ内のオブジェクトプログラムを読み出し実行する工程と、からなることを特徴とする。
【００１７】
内蔵ＲＡＭへの格納は、容量は小さいが高速処理に最適であるから、一般に、プログラム実行中頻繁に使用される非保持変数や比較的小さいプログラムをここに格納することが好ましい。
【００１８】
保持変数エリアと非保持変数エリアとを区別することなく算出したオフセットアドレス（格納するメモリと関係なく最初の変数を原点として算出したアドレス）、にＲＡＭ毎のベースアドレスを加算して、低速ＲＡＭと高速処理用ＲＡＭとにともに保持変数のエリアと非保持変数エリアとを割り当てて使用すれば、ユーザは、格納場所を意識する必要がない。
【００１９】
更に、システム設定部に、オブジェクトプログラムの実行時に使用する変数として、保持変数または非保持変数のいずれかを選択設定したり、高速処理モードとノーマル処理モードとを選択設定するようにしてもよい。このようにすると、アプリケーションプログラムに応じてユーザが好適な処理速度を選択して実行することができる。
【００２０】
また、上記システム設定部が、高速処理モードとノーマル処理モードとを選択設定するようになっており、高速処理モードのときは上記内蔵ＲＡＭのオブジェクトプログラムを、ノーマル処理モードのときは上記高速ＲＡＭのオブジェクトプログラムをオブジェクトプログラムの実行時に使用するようにしてもよい。このようにすると、高速モードの中でも、外部高速ＲＡＭを使用する普通高速モードと、ＭＰＵ内蔵ＲＡＭを使用する超高速モードを選択できる。
【００２１】
使用するプログラムがコンパイラでない場合は、ソース、オブジェクトの区別が存在しないので、プログラムを低速ＲＡＭに格納してバックアップに備える。なお、この場合、処理速度を上げるため、高速処理用ＲＡＭにも同一のプログラムを格納して、高速処理用ＲＡＭ側のプログラムを用いて実行することになることは勿論である。
【００２３】
この発明の「プログラマブルコントローラ」には、マイクロプログラマブルコントローラ（マイクロＰＬＣ）やプログラマブルＩ／Ｏユニットを含む。
【００２４】
【発明の実施の形態】
この発明の実施の形態を、以下、図１〜図６を参照して説明する。
【００２５】
図１は、この発明の一実施の形態におけるプログラムおよびそのプログラムの変数の格納状態を示すブロック図である。図１において、既に説明した図７と同一の部分には、同一の符号を付して、その説明を省略する。７は、ＭＰＵ３に内蔵された内蔵ＲＡＭ、８は、高速処理用の高速ＲＡＭ、９は、処理モード、プログラムと変数の格納場所を設定するシステム設定部である。
【００２６】
ソースプログラム（ユーザ作成のラダープログラム）およびこのプログラム実行用の保持変数は低速ＲＡＭ２に格納され、上記ソースプログラムをコンパイルしたオブジェクトプログラムおよびプログラム実行用の非保持変数は高速ＲＡＭ８に格納されている。この高速ＲＡＭ８は、この実施の形態では、３２ｋＢまでメモリエリアが使用でき、オブジェクトは２ステート実行できる。なお、オブジェクトプログラムのうち、比較的小さく、高速処理を必要とするものは、高速ＲＡＭ８の代わりに内蔵ＲＡＭ７に格納される。また、プログラム実行中に生成されたり、初期値として設定した非保持変数のうち、再使用頻度の高いものは内蔵ＲＡＭ７に格納して、処理速度向上を図ることもできる。この内蔵ＲＡＭ７は、この実施の形態では、１２ｋＢまでメモリエリアが使用でき、オブジェクトは１ステート実行できる。
【００２７】
プログラムを実行するときは、ＭＰＵ３からバス６を介して高速ＲＡＭ８に格納されたオブジェクトプログラムを読み出し、ＭＰＵ３でプログラムが実行される。
【００２８】
電断時は、低速ＲＡＭ２の保持電源がバッテリ１に切り替わり、低速ＲＡＭ２の格納内容、すなわち、ソースプログラムと保持変数がバッテリ１により保持される。
【００２９】
［メモリエリアの割り当て］
プログラムとその変数は、このように各ＲＡＭ２、８、７に格納されるのであるが、次に、各ＲＡＭ２、８、７内へのプログラムとその変数のエリア割り付けの仕方を説明する。
【００３０】
ＲＯＭ４、低速ＲＡＭ２、高速ＲＡＭ８の各メモリのエリアのアドレス設定のために、図２に示すように、例えば、ＲＯＭ４はエリア１、高速ＲＡＭ８はエリア２、低速ＲＡＭ２はエリア３のように定めてあり、エリア１にはベースアドレスＨ’０００００、エリア２にはベースアドレスＨ’Ｘ００００、エリア３にはベースアドレスＨ’Ｙ００００のようにベースアドレスで区分けされ、エリア１には予めシステムプログラム等常駐のデータがエリア内に割り当てられて格納されている。エリア２およびエリア３には、図３に示すように、ユーザプログラムとその変数のエリアを割り当てる。この割り当ては、ユーザが使用するアプリケーションのユーザプログラムに応じて格納先をシステム設定部において設定できるようにしてある。
【００３１】
図３において、ユーザ作成のソースプログラム格納用のソースプログラムエリア２０、これをコンパイルしたオブジェクトプログラム格納用のオブジェクトプログラムエリア８０は、それぞれ低速ＲＡＭ２および高速ＲＡＭ８内の先頭からその容量分だけ割り当てられる。
【００３２】
すなわち、先ず、ユーザが作成するソースプログラムは、低速ＲＡＭのソースプログラムエリア２０に作成される。このソースプログラムはＭＰＵ３でコンパイルされ、そのオブジェクトプログラムが高速ＲＡＭのオブジェクトプログラムエリア８０に展開される。また、このコンパイルの過程でこのプログラムで使用される変数のオフセットアドレス（エリア１、２、３に関係なく最初の変数の第１ビットを原点とした相対アドレス）が算出される。
【００３３】
この変数には、既に説明したように、保持変数と非保持変数に区分けして使用する。この区分けは、後に説明するように、変数毎に予めシステム設定部９で設定しておく。
【００３４】
保持変数と非保持変数とを格納するための変数エリアは、それぞれの変数に必要な容量分だけ順次、低速ＲＡＭ２には２１、２２、‥‥、高速ＲＡＭ８には８１、８２、‥‥と割り当てられていく。より具体的に説明すれば、低速ＲＡＭ２では、ベースアドレスＨ’Ｙ００００にソースプログラムエリア２０の分を加算した実アドレスに最初の変数エリア２１を、更に変数エリア２１のオフセットアドレスを加算した実アドレスにその次の変数エリア２２を、‥‥というように、また、高速ＲＡＭ８では、ベースアドレスＨ’Ｘ００００にオブジェクトプログラムエリア８０の分を加算した実アドレスに最初の変数エリア８１を、更に変数エリア８１のオフセットアドレスを加算した実アドレスにその次の変数エリア８２を、‥‥というように変数エリアが割り当てられていく。
【００３５】
図４は、保持変数、非保持変数の実際に使用する変数エリアの割当てのフローを示す。保持変数、非保持変数の別は、予めシステム設定部９で設定しておき、このシステム設定部９の変数の保持、非保持の別を順次呼び出す（ステップ４００）。呼び出した設定値をステップ４０１で判定し、設定値が「保持」である場合は、ステップ４０２に進んで低速ＲＡＭ２のベースアドレスをセットし、設定値が「非保持」である場合は、ステップ４０３に進んで高速ＲＡＭ８のベースアドレスをセットする。
【００３６】
このように、保持変数と非保持変数とを区別することなく算出したオフセットアドレスと、ＲＡＭ２、８毎のベースアドレスＨ’Ｘ００００、Ｈ’Ｙ００００とを加算して、低速ＲＡＭ２と高速ＲＡＭ８とにともに保持変数のエリアと非保持変数エリアとを割り当て、これらのエリアにシステム設定部に設定された定義に応じて、低速ＲＡＭ２の保持変数のエリア２３、２５、‥‥と高速ＲＡＭ８の非保持変数エリア８１、８２、８４、８６、‥‥とにアクセスして、変数の書き込み、読み出しを行うことができるようにする。なお、低速ＲＡＭ２の非保持変数エリア２１、２２、２４、２６、‥‥と高速ＲＡＭ８の保持変数エリア８３、８５、‥‥は、「空き」領域となる。
【００３７】
［処理モードの設定］
図５は、システム設定部においてシステム設定をする設定画面の例を示し、通常の速度でプログラムを実行するノーマル処理モードと高速実行する高速処理モードとを設定したものである。図５では、ノーマル処理モードでは、４キロワードまでのメモリを、高速処理モードでは１キロワードまでのメモリを、それぞれ使用できることが備考欄に表示され、作業者は、この備考を参照しながら使用するプログラムが高速処理可能か否かを判断して、いずれかの処理を設定する。ここで、「高速処理モードで１キロワードまでのメモリ可」ということは、少なくともオブジェクトプログラムエリアが、望ましくは、これに加えて更に使用頻度の高い非保持変数エリアが、（ＭＰＵ内蔵ＲＡＭ７内で使用できる）１キロワード以下であれば高速処理モードを採用できる、ということを意味している。
【００３８】
図６は、図５の処理モードの設定状態に応じてオブジェクトプログラムがいずれかの高速処理用ＲＡＭに格納する処理を示すフローチャートである。システム設定部９で設定された処理モード（ステップ５００）は、ステップ５０１で判定され、処理モードが高速処理に設定されているときは、ステップ５０２へ進んでコンパイルされたオブジェクトプログラムの先頭アドレスと最終アドレスがＭＰＵ内蔵ＲＡＭ７にセットされ、処理モードがノーマル処理に設定されているときは、ステップ５０３へ進んでコンパイルされたオブジェクトプログラムの先頭アドレスと最終アドレスが高速ＲＡＭ８にセットされる。
【００３９】
システム設定部９では、更に、使用目的に応じて、オブジェクトプログラムの実行時に使用する変数として、保持変数または非保持変数を選択設定することもできる。保持変数を使用する場合は、非保持変数を使用する場合よりも処理速度は遅くなるが、実行時に使用する変数の電断時の保持ができる。
【００４０】
以上、システム設定部における設定による代表的な各メモリの使い方を整理すると、次のようになる。
【００４１】
（１）  ノーマル処理モード：  オブジェクトプログラムと非保持変数を高速ＲＡＭに格納。変数は、非保持変数／保持変数の両方または一方を使用。
【００４２】
（２）  高速処理モード：  オブジェクトプログラムを内蔵ＲＡＭに格納。変数は、内蔵ＲＡＭ／高速ＲＡＭの非保持変数の両方または一方を使用。
【００４３】
（３）  低速処理モード：  オブジェクトプログラムを高速処理用ＲＡＭに格納。変数は、保持変数を使用。
【００４４】
この発明は、上記（１）〜（３）の他、種々の変形が可能である。例えば、高速ＲＡＭとＭＰＵ内蔵ＲＡＭとの使い分け方として、サブルーチンプログラムを含む複数のプログラムを実行させる場合、プログラム実行中使用頻度が高くて比較的小さいプログラムと使用頻度が高い非保持変数とをＭＰＵ内蔵ＲＡＭに格納するようにシステム設定部で選択設定して、内蔵ＲＡＭのメモリを節約しながら高速処理を実現したり、保持変数と非保持変数の仕分け方として、保持が必要で、かつ、プログラム実行中使用頻度の高い変数を、低速ＲＡＭと高速処理用ＲＡＭとに重複して格納して、高速処理用ＲＡＭの保持変数を使用して高速処理しながら低速ＲＡＭの保持変数を電断時保持して、高速処理と保持とを両方実現したりすることもできる。
【００４５】
【発明の効果】
以上の説明から理解されるように、この発明によれば、バックアップに要する電流が小さい低速ＲＡＭに、ソースプログラムと電断時に保持を要する保持変数とを格納し、高速ＲＡＭに、保持を要しないオブジェクトプログラムと非保持変数を格納するようにしたから、プログラム実行速度を上げながら、バックアップ時のバッテリのリテンション電流が少なく、バックアップ用バッテリの寿命が長くなって、ソースプログラムと保持変数を長期間保持できる。
【００４６】
また、使用するアプリケーションのユーザプログラムに応じて個別に保持変数、非保持変数を定義したり、実行処理モードを指定するようにしたから、使用目的に応じて、プログラム実行速度を一層上げたり、プログラマブルコントローラが制御する工場内の機器の作動速度に合わせて適度の処理速度を選択したりすることができる。
【図面の簡単な説明】
【図１】この発明の一実施の形態におけるプログラムおよびデータの格納状態を示すブロック図。
【図２】図１におけるメモリマップを説明する説明図。
【図３】図１における高速ＲＡＭと低速ＲＡＭの内容を説明する説明図。
【図４】図１における変数メモリのアドレス設定処理を示すフローチャート。
【図５】この発明の一実施の形態におけるシステム設定例を示す説明図。
【図６】この発明の一実施の形態におけるオブジェクトプログラム格納メモリのアドレス設定処理を示すフローチャート。
【図７】従来のプログラマブルコントローラにおけるプログラムおよびデータの格納状態を示すブロック図。
【符号の説明】
１  バッテリ
２  低速ＲＡＭ
３  ＭＰＵ
４  ＲＯＭ
５  Ｉ／Ｏ
６  バス
７  内蔵ＲＡＭ（高速処理用ＲＡＭ）
８  高速ＲＡＭ（高速処理用ＲＡＭ）
９  システム設定部
２０  ソースプログラムエリア
２１、２２、‥‥  変数エリア
８０  オブジェクトプログラムエリア
８１、８２、‥‥  変数エリア
【図１】
0004348664.tif 000002
【図２】
0004348664.tif 000003
【図３】
0004348664.tif 000004
【図４】
0004348664.tif 000005
【図５】
0004348664.tif 000006
【図６】
0004348664.tif 000007
【図７】
0004348664.tif 000008