(57)【特許請求の範囲】
【請求項１】
機械を作動させるプログラマブル・コントローラ（１０）であって、
複数の梯子論理命令を有する梯子論理制御プログラムを格納する第１の格納手段（３６、５４）と、
梯子論理命令を実行する梯子論理プロセッサ（３９）と、
梯子論理プロセッサ（３９）が実行できない梯子論理命令を実行するマイクロプロセッサ（４１）とを含み、
梯子論理制御プログラムの梯子論理命令の少なくとも１つは、梯子論理プロセッサ（３９）により実行可能となるユーザが定義可能なマクロ命令（６０）であると共に、
マクロ命令（６０）は、
一組の梯子論理命令として書かれたマクロ命令ルーチン（６２、６３、６４、６５）と、
マクロ命令（６０）により指定されたマクロ命令ルーチン（６２、６３、６４、６５）により処理される梯子論理制御プログラムから要求されたすべてのデータを含むデータ・ファイル群の特定ファイルと、
マクロ命令（６０）の実行により生じた結果を格納する格納場所と、
を指定することを特徴とし、
プログラマブル・コントローラ（１０）は、さらに、
特定ファイルおよびマクロ命令（６０）の実行で生じた結果を格納する第２の格納手段（３６、５１）と、
マクロ命令の実行に応答して梯子論理プロセッサ（３９）によって実行される複数の梯子論理命令を有するマクロ命令ルーチンを格納する第３の格納手段（３６、５５）と、
データおよびプログラム命令の交換をおこなうために、梯子論理プロセッサ（３９）と、マイクロプロセッサ（４１）と、第１の格納手段（３６、５４）と、第２の格納手段（３６、５１）および第３の格納手段（３６、５５）とを接続する手段とを含み、
これによって、梯子論理プロセッサ（３９）は、マクロ命令（６０）により処理されるデータを含む特定ファイルのデータを使用して第３の格納手段（３６、５５）に格納されたマクロ命令ルーチン（６２、６３、６４、６５）を実行し、かつ、結果をマクロ命令（６０）の実行により生じた結果を格納する格納場所に格納することによりマクロ命令（６０）に応答することを特徴とするプログラマブル・コントローラ。
【請求項２】
請求項１記載のコントローラであって、前記第３の格納手段（３６、５５）は、
複数のマクロ命令ルーチン（６２、６３、６４、６５）を含むライブラリ・ファイル（５５）を格納する格納場所と、
複数のマクロ命令ルーチンのそれぞれに対するマクロ命令ルーチン（６２、６３、６４、６５）の指定および複数のマクロ命令ルーチン（６２、６３、６４、６５）のそれぞれに対する開始位置のアドレスを含むディレクトリ（６１）を格納する格納場所と、
を含むプログラマブル・コントローラ。
【請求項３】
請求項２記載のコントローラであって、前記梯子論理プロセッサ（３９）は、第３の格納手段（３６、５５）からマクロ命令ルーチン（６２、６３、６４、６５）に関する開始アドレスを読み出すことによりマクロ命令（６０）で指定されたマクロ命令ルーチン（６２、６３、６４、６５）に応答するプログラマブル・コントローラ。
【請求項４】
請求項１から３のいずれかに記載のコントローラであって、前記マクロ命令（６０）は、さらに、制御ファイルを指定し、当該制御ファイルを格納する格納手段（３６、５２）が提供されるプログラマブル・コントローラ。
【請求項５】
請求項４記載のコントローラであって、前記制御ファイルは、マクロ命令（６０）により処理されるデータを含むファイルのデータ量の指定を含むプログラマブル・コントローラ。
【請求項６】
請求項５記載のコントローラであって、前記制御ファイルは、さらに、マクロ命令（６０）により処理されるデータを含むファイルのいずれのデータがマクロ命令ルーチン（６２、６３、６４、６５）により処理されたかの指定を含むプログラマブル・コントローラ。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は産業設備を作動させるプログラマブル・コントローラに関し、より正確には、該設備の作動を決定する梯子型論理制御プログラムを実行するプロセッサ、に関する。
【０００２】
【従来の技術】
プログラマブル・コントローラは、内蔵プログラムに従って各種の組立ラインおよび工作機械のような各種製造設備の運転を制御する産業用コンピュータの一形式である。プログラムは、一連のプロセス制御命令により構成されており、これらの命令が読み出せれて実行されると、被制御設備上の選択された感知装置の状態を検査し、そして、１つまたはそれ以上の検査された感知装置の状態にしたがって選択された駆動装置に対する電流の供給あるいは切断を行う。
【０００３】
【発明が解決しようとする課題】
多数の感知装置および駆動装置の状態は、制御プログラムの命令によって操作される１ビットのデータによって表される。位置センサのような他の感知装置は被制御設備の状態を表す複数ビットのデータを与える。これら後者の装置に対しては、感知装置および駆動装置の状態を表す複数バイトもしくは複数ワードのデータを操作する命令が与えられる。ここで使用される単語、「バイト」は８ビットのデータを、また「ワード」は１６ビット、あるいは２バイトのデータを表す。このほかのプログラム命令は、算術演算、タイミングと計数機能、並びに複雑な統計データを報告する演算を実行する。これらの命令はその産業の中ではまったく標準化されていて、プロセス制御技術者により容易に理解される梯子型論理図(ladder logic diagram)の各種要素に直接的関連付けがなされている。このようなプログラマブル・コントローラの命令により構成される梯子型論理制御プログラムを開発しかつ編集するユーザーを支援するため、米国特許第３，８０８，６１２号、第３，８１３，６４９号および第４，０７０，７０２号に説明されているようなプログラム・パネルが開発されている。
【０００４】
より複雑な製造プロセスを制御する要求が強まってきたことに伴い、プログラマブル・コントローラとその命令の集合はより精妙なものとなった。命令を実行するプロセッサ・モジュールは２つの異なるプロセッサ回路、すなわち、１ビットの入出力データを処理するブール代数プロセッサとより複雑な算術演算や論理演算を行うマイクロコンピュータとに分割されるようになった。ブール代数プロセッサは梯子型論理命令集合の部分集合を直接実行する。マイクロコンピュータは、梯子型論理プログラム命令の残りの部分により定義された機能をおこなうため、１連の機械語ルーチンが含まれている解釈プログラム（interpreter program ）を実行する。この型式のプログラマブル・コントローラの例は米国特許第４，１６５，５３４号に説明されている。
【０００５】
【発明が解決しようとする課題】
このようなプログラマブル・コントローラの進歩によって、梯子型論理サブルーチンを呼び出す能力を備えた梯子型論理メインプログラムら提供されることになった。サブルーチンは、命令ブロックを挿入することにより梯子型論理図の中での指定されたが、この命令ブロックは固定長の命令コード（たとえばＪＳＲ）を持ち、サブルーチンの命令を含んだ独特なプログラム・ファイルを指定していた。梯子型論理メインプログラムからサブルーチンにデータを渡すため、プログラマはサブルーチン命令ブロックの中で各データ項目を指定しなければならない。メインプログラムからサブルーチンが呼ばれる都度、パラメータは１つづつ順番にサブルーチンのパラメータリストに複写された。同じ様な定義と複写処理がサブルーチンの実行結果を梯子型論理メインプログラムに転送するために必要となる。この２重の複写処理にかなりの時間が浪費されていた。
【０００６】
以前は、各サブルーチンは個別プログラム・ファイルとして、プログラマブル・コントローラの中に格納されていた。たいていのプログラマブル・コントローラには、格納し、かつ、アクセスできるプログラム・ファイルの数に限度がある。この結果、多数のサブルーチンを使うと、別のルーチンに使用できるプログラム・ファイルの数が減少することになる。
【０００７】
また、特定用途向機能と、特定産業および一定型式の産業設備に対する梯子型論理命令を提供する要求が高まってきた。独自の要求に合わせてプロセッサハードウエアを再設計することは費用も時間もかかることである。したがって、プログラマブル・コントローラ市場の各セグメントに対して特殊な梯子型論理命令をつくることは実際的ではない場合が多い。この要求を満たすため、米国特許第４，３０２，８２０号に説明されているように、機械語で書かれた特定用途アプリケーション・ルーチンを実行するプログラマブル・コントローラが開発された。この技術は、従来のプログラマブル・コントローラに特定用途向きで、かつ複雑な機能性を与えるため効果的に使用できるけれども、梯子型論理プロセッサからマイクロコンピュータへ制御を渡さなくてはならなかったので、機械語プログラムを実行するときの遷移時間にかなり長い処理時間がかかっていた。その上、機械語で書かなければならない特定用途向アプリケーション・ルーチンを準備することは、梯子型論理図のプログラミングに慣れていたエンドユーザにとっては困ることであった。
【０００８】
【課題を解決する手段】
プログラマブル・コントローラには、一つのプロセッサー・モジュールに電気的に接続された複数の入出力モジュールが含まれ、このプロセッサ・モジュールは内蔵制御プログラムを反復して実行する。入出力モジュールはプログラマブル・コントローラにより運転される機械の感知装置および駆動装置にインターフェースする。プロセッサー・モジュールには、好適に梯子型論理プロセッサとマイクロコンピュータが含まれており、これらのプロセッサは協同動作して、選択された感知装置の状態を検査し、機械上の駆動装置の状態を制御する。梯子型論理プロセッサはビット型命令（bit oriented instructions ）を実行するが、より複雑な梯子型論理命令はマイクロプロセッサにより処理される。
【０００９】
制御プログラム命令の集合にはマクロ命令が含まれており、このマクロ命令によって梯子型論理命令で書かれたマクロルーチンが実行する動作が定義される。マクロ命令は１つの命令コードと、このマクロ命令により実行されるデータが含まれた第１のファイルおよびマクロ命令が実行されて生じる結果を格納する格納場所を指定する。実行する機能により要求されると、マクロ命令は当該機能のデータを含んだ第２のファイルを指定する。第１のファイルおよび第２のファイルはメモリの１つのセクションに格納される。第２のメモリセクションには複数の梯子型論理命令を備えたマクロ命令ルーチンが含まれるが、このマクロ命令ルーチンは、マクロ命令の実行に応答して梯子型論理プロセッサにより実行されるのが普通である。マクロ命令ルーチンの実行中に、梯子型論理プロセッサは第１のファイルから必要なデータを取得する。ルーチンが完了するとき、処理の結果は該マクロ命令の中で指定されている場所に格納される。
【００１０】
好適実施例におけるプログラマブル・コントローラは多数のマクロ命令を実行する能力を備えている。マクロ命令用梯子型論理ルーチンは、第２のメモリセクションの共通ライブラリ・ファイルの中に格納される。各命令コードに対する各マクロ命令に対して、独特な命令コードと各マクロ命令の開始アドレスを示すディレクトリが第２のメモリセクションに用意されている。このディレクトリにより、マクロ命令によって呼び出された命令を実行するために適切なルーチンにアクセスすることが容易になる。
【００１１】
本発明の目的は、プログラマブル・コントローラによって実行可能なプログラミング命令の集合に対して特定用途向命令を追加することができる仕組みを提供することである。
【００１２】
本発明のもう１つの目的は、マクロ命令を定義すれば、１連の梯子型論理命令として書かれたルーチンを呼び出すことによって実行される複雑な命令を既定することができるようにすることである。
【００１３】
【実施例】
図１を参照すると、参照番号１０のプログラマブル・コントローラ・システムは一般的に、主装置ラック１２と、ラック１４のような、シリアルＩ／Ｏネットワーク１５により相互接続される一連のリモート入出力（Ｉ／Ｏ）ラックにより構成されている。インテリジェント端末装置１１はユーザがコントローラ１０のプログラミングをすることと、その動作を監視することができるようにするための装置である。
【００１４】
主ラック１２は、電力供給装置１６、プロセッサ・モジュール２０および複数の入出力（Ｉ／Ｏ）インターフェース・モジュール１８を収容している。プロセッサ・モジュール２０はユーザが定義した制御プログラムを実行する。この制御プログラムは被制御設備上の感知装置からの入力信号に応答して、同じ被制御設備上の駆動装置に信号を出力する。感知信号および駆動信号は入出力インターフェース・モジュール１８を介してラック１２に結合される。主ラック内の各種モジュール１８および２０はバックプレーンの導線により電気的に相互に接続され、モジュール間でデータ信号および制御信号を交換可能としている。
【００１５】
プロセッサ・モジュール２０は、ケーブル１３によって本モジュールのフロントパネル上のシリアル・ポート・コネクタに接続される端末装置１１を介して、プログラムの命令を受信する。シリアルＩ／Ｏネットワーク１５はプロセッサ・モジュール２０のフロントパネル上の第２のコネクタおよびリモートＩ／Ｏラック１４のアダプタモジュール１９に結合され、これによりプロセッサ・モジュール２０は、リモートＩ／Ｏラック内の別のグループの入出力モジュール１８’とデータを交換できることになる。これとは別に、ローカルエリアネットワークがプロセッサ・モジュール２０のフロントパネル上のコネクタの１つに結合され、ホストコンピュータおよび該ネットワークに結合されている他のプログラマブル・コントローラとの通信を可能としている。
【００１６】
Ａ．プロセッサ・モジュール
図２を参照すると、プロセッサ・モジュール２０は、ユーザの制御プログラム実行用の汎用プロセッサ・セクション４０と、ケーブル１３およびシリアルＩ／Ｏネットワーク１５上のデータの交換を処理するための通信プロセッサセクション２１を含んでいる。またプロセッサ・モジュール２０は、これらのセクション２１、４０を別のデータ処理要素およびデータ格納要素に接続する１組の共用バス３３−３５を有している。
【００１７】
通信プロセッサセクション２１はローカル・アドレス・バス２３および１６ビット幅のローカル・データ・バス２４の周囲に形成されている。これらのバスに結合されている第１のマイクロプロセッサ２２には、たとえば、モトローラ社製のモデル６８０００マイクロプロセッサを使用することができる。第１のマイクロプロセッサ２２は、第１の読み出し専用メモリ（ＲＯＭ）２６内に内蔵されているプログラムを実行し、第１のランダム・アクセス・メモリ（ＲＡＭ）２７をデータの一時格納用に利用する。マスタークロック回路２８は、通信プロセッサセクション２１の要素に特定のタイミング信号を供給するばかりでなく、プロセッサ・モジュール２０内の他の要素に対して使用されるシステム・クロック信号を供給する。
【００１８】
第１のマイクロプロセッサ２２に割り当てられた主要機能は、プログラミング用端末装置１１およびシリアルＩ／Ｏネットワーク１５との通信の制御である。ネットワーク・インターフェース回路２９は、プロセッサ・モジュール２０内で使用されるパラレル・データと、端末ケーブル１３およびシリアルＩ／Ｏネットワーク１５上でデータの交換に使用されるシリアル・フォーマットとの間のデータを変換する。
【００１９】
また通信プロセッサ・セクション２１のローカル・バス２３−２５はコネクタ３７へ結合される。本明細書中ではファンクション・カード３０と呼ばれている、着脱可能な印刷回路基板は、図１に示すように、プロセッサ・モジュール２０の前面パネルの開口部を介して延長し、バス・コネクタ３７と噛み合うコネクタを有している。ファンクション・カード３０は種々の形態をとることができる。即ち、そのひとつは、機械の制御プログラムを保管するメモリを持つことである。インテリジェント・ファンクション・カードには別のマイクロプロセッサが含まれているが、このマイクロプロセッサは、該カードに接続される広域ネットワークにおける通信処理のような特殊なデータ処理タスクにのみ使われる。
【００２０】
通信プロセッサ・セクション２１は、一組の３状態（tri-state ）アドレス・ゲート３１および一組の双方向３状態データ・ゲート３２を介して他のプロセッサ・モジュールの要素に接続される。特にゲート３１は、ローカル・アドレス・バス２３をモジュールの共用アドレス・バス３３に結合し、データ・ゲート３２はローカル・データ・バス２４を１６ビット幅の共用データ・バス３４に結合する。一組の制御線３５はプロセッサー・モジュールの要素間を延びており、以下単に制御バスと呼称される。
【００２１】
このバスが結合されると、第一マイクロプロセッサ２２は、共用アドレス・バス３３および共用データ・バス３４に結合されている共用システムＲＡＭ３６に対し読み出しおよび書き込みを行うことができる。共用システムＲＡＭ３６内のデータ構造は図３に図示されるとおりである。共用システムＲＡＭの格納位置のブロックには、プロセッサー・モジュール２０用のデータ・テーブル５０、５１がある。第一のデータ・テーブル５０には、プログラマブル・コントローラ１０が制御する設備上の感知装置の状態を表す入力データと、駆動装置の状態を表す出力データとが格納される。主ラック１２、リモート・ラック１４の入力形Ｉ／Ｏモジュール１８からのデータは、構造化された方法でテーブル５０の第１のセクションに格納される。後で説明するように、格納場所５１の別のブロックには１群のデータ・ファイルが保持されており、このデータ・ファイルのそれぞれには、梯子型論理メイン制御プログラムとマクロ命令ルーチンとの間で交換せれるデータのテーブルが含まれている。
【００２２】
共用システムＲＡＭ３６の次のセクション５２にはプログラマブル・コントローラ１０とその要素に関する情報が含まれる。またこのセクション５２はマクロ命令ルーチン１つづつの制御ファイルを保持しているが、その詳細は後で説明する。共用システムＲＡＭ３６のこのセクションには、必要に応じて追加データテーブルが格納される。
【００２３】
共用システムＲＡＭ３６の一部には、ユーザによって定義され、プロセッサ・モジュールによって実行されるプログラムが格納されるが、この部分はいくつかのプログラム・ファイル５４−５６に分割される。メこの部分のモリの格納場所の第１のグループは、各プログラムを位置づけするためのディレクトリ５３である。梯子型論理メイン制御プログラムは１つのファイル５４に格納され、１つまたはそれ以上のプログラム・ファイル５５にはメインプログラムの中で使用されるマクロ命令用の梯子型論理ルーチンが含まれる。本発明の好適実施例に於いては、いくつかのマクロ命令に対するルーチンは共通ライブラリ・ファイル５５の中に格納される。メモリセクション５６に含まれる別のプログラム・ファイルには、ホストコンピュータに対して報告書を作成して送るような、バックグラウンドタスク用プログラムが保持される。割り込みルーチンもセクション５６に格納される。
【００２４】
ユーザプログラムによって使用される格納場所の後にあるセクションは空きメモリ場所（free memory location）５７である。共用システムＲＡＭ３６の別のセクションはＩ／Ｏ強制データテーブル（I/O force data table）５８であって、特定の感知装置あるいは駆動装置からの制御データを強制的に所定の論理状態にするため、従来のプログラマブル・コントローラで使用されているテーブルと同じである。共用システムＲＡＭ３６の高アドレスにある最終のメモリ・セクション５９には、システム、プロセッサ・モジュールおよびマイクロプロセッサレベルの構成データが格納される。たとえば、この構成データには、Ｉ／Ｏポートのパラメータや外部との通信用プロトコルデータはもちろん、ラック１２、１４の各Ｉ／Ｏモジュール１８に関する数、場所および型式も定義されている。共用システムＲＡＭ３６のセクションの構造は厳密なものではなく図３に示す構造と異なってもよい。
【００２５】
再び図２を参照すると、Ｉ／Ｏラック・インターフェース回路３８は、共用アドレス・バス３３および共用データ・バス３４と、主ラック１２のバックプレーンに接続されている。このインターフェース回路は、センサーからのデータを収集するため、主ラックのＩ／Ｏモジュール１８を定期的に走査し、駆動装置に対して出力データを送る。この走査は、各Ｉ／Ｏモジュール１８に対して制御信号を順次連続して送ることにより行われ、以前のプログラマブル・コントローラで使用されているのと同様な方法である。これらの制御信号によって、入力形モジュールはバックプレーンにセンサー・データを送り、出力形モジュールはプロセッサ・モジュール２０により送られるデータを格納する。主ラック１２のＩ／Ｏモジュール１８により交換されるデータは、共用システムＲＡＭ３６のＩ／Ｏデータ・テーブルに格納される。
【００２６】
また梯子型論理プロセッサ３９は共用アドレス・バス３３および共用データ・バス３４とに接続されている。梯子型論理制御プログラムに対する命令の大部分は１ビットあるいは１ワードのデータに基づいて実行される。梯子型論理プロセッサ３９は梯子型論理命令の部分集合を実行するように設計されてきている。このことは単にこれらの命令を効率的に実行するばかりでなく、制御プログラムと同時にバックグラウンド・タスクや通信タスクを実行するために、モジュール２０内のマイクロプロセッサを解放することになる。
【００２７】
Ｉ／Ｏモジュールへの瞬時アクセス、Ｉ／Ｏモジュールに対するデータのブロック転送、さらに複雑な数学的演算や論理演算など一定の機能については、梯子型論理プロセッサ３９は実行できない。これらの複雑な制御プログラム機能は汎用マイクロプロセッサ４０によって実行される。プロセッサ・モジュール２０のこの部分には、別のローカル・アドレス・バス４２およびローカル・データ・バス４３にそれぞれ接続されている第２のマイクロプロセッサ４１が含まれている。ローカル・アドレス・バス４２およびローカル・データ・バス４３の対によって、第２のマイクロプロセッサ４１は第２のＲＯＭ４４と第２のランダム・アクセス・メモリＭ４４に結合される。ＲＯＭ４４にはファームウエアが格納され、前記複雑な梯子型論理演算を実行するため、このファームウエアは第２のマイクロプロセッサ４１によって実行される。
【００２８】
タイミング回路４７は、システム・クロック信号を受信し、第２マイクロプロセッサ４１、メモリ４４、４５に必要なタイミング信号および制御信号をつくり出す。一対の送信用ゲート４８、４９により、汎用プロセッサ・セクション４０のローカル・アドレス・バス４２およびローカル・データ・バス４３は、共用アドレス・バス３３および共用データ・バス３４から分離されている。これらのゲート４８、４９が、第２マイクロプロセッサ４１からのコマンドに応答して導通となると、ローカル・バス４２、４３は共用バス３３、３４と電気的に接続される。第２マイクロプロセッサ４１が梯子型論理プロセッサ３９内のアービトレーション回路  によって共用バス３３、３４へのアクセスが許可された場合にのみ、ゲート４８、４９を導通とする動作が行われる。
【００２９】
Ｂ．制御プログラム
ユーザは端末装置１１を介してプログラマブル・コントローラ１０のプログラムを作成するが、この端末装置はパーソナルコンピュータであって、梯子型論理制御プログラムを書くためエディタプログラムを実行する。被制御設備を動作させる制御プログラムは端末装置のキーボードから入力され、端末装置の画面に表示される梯子図ができあがるが、これは従来のプログラマブル・コントローラについて適用された方法とまったく同じである。ついでエディタプログラムはこの梯子図を、プロセッサ・モジュール２０によって実行される命令コード（オペコード）およびオペランドアドレスに変換する。変換されたプログラムは、端末装置１１からプロセッサ・モジュール２０に転送される。図２を参照すると、通信プロセッサ２１は、このプログラムを受信して共用システムＲＡＭ３６のセクション５４に格納する。
【００３０】
制御プログラムには、被制御設備上のリミットスイッチから受信される入力データなど１ビットの入力データにもとづいて演算する命令が含まれている。以前に説明した通り、これらの命令は梯子型論理プロセッサによって実行されるが、梯子型論理プロセッサはこのような命令に特定して設計されているため、非常に効率的かつ迅速に実行する。梯子型論理プロセッサ３９が実行できない命令に遭遇すると、梯子型論理プロセッサ３９は汎用プロセッサ４０の第２のマイクロプロセッサ４１に通報する。これらのより複雑な命令は第２のＲＯＭ４４に格納されている解釈プログラムによって処理され、第２のマイクロプロセッサによって実行される。解釈プログラムは機械語ルーチンの集合であって、これらの機械語ルーチンは、より複雑な制御プログラム命令によって指定される各機能を実行する。汎用プロセッサ４０がより複雑な命令の実行を終了すると、この通知を受けた梯子型論理プロセッサ３９は、制御プログラムの次の命令を読み出す。このようにプログラムの実行責任を分担することはプログラマブル・コントローラの設計者には周知であり、詳細に説明することは不必要である。
【００３１】
またプロセッサ・モジュールは、第２のマイクロプロセッサ４１のために機械語命令で書かれた特定用途向アプリケーション・ルーチンを実行することもできる。このルーチンは、共用システムＲＡＭ３６のセクション５６の中の別のプログラム・ファイルに格納されている。特定のユーザあるいは産業に独特かつ複雑な制御タスクがあると、そのタスクを制御するように特定用途向アプリケーション・ルーチンを書くことができる。梯子型論理メイン制御プログラムの横棒からこのルーチンが「呼び出される」と、梯子型論理プロセッサ３９はプログラムの実行責任を汎用プロセッサ４０に転送する。しかし、第２のＲＯＭ４４の中のプロセッサ・ファームウエアが前記横棒を解釈する代わりに、第２のマイクロプロセッサ４１がこの特定用途向アプリケーション・ルーチン、すなわち、機械語命令で書かれ、共用システムＲＡＭ３６の中に格納されているこのルーチンを実行する。米国特許第４，３０２，８２０号にはこの基本的な処理についての説明があるが、それによると、梯子型論理制御プログラムと機械語の特定用途向アプリケーション・ルーチンとの双方が同一プロセッサ・モジュールにより実行される。米国特許第５，０４２，００２号は特定用途向アプリケーション・ルーチンを使用することに関連しているが、このアプリケーション・ルーチンによると、プログラマブル・コントローラはシーケンサ型制御システムとして稼働する。
【００３２】
Ｃ．マクロ命令
前に説明した命令に加えて、プロセッサ・モジュール２０は、プログラマブル・コントローラの製造業者あるいはエンドユーザによって定義される梯子型論理マクロ命令を実行することができる。マクロ命令によって定義される機能を実行するルーチンが梯子型論理で書かれている以上、全てではないとしても大部分の命令は梯子型論理プロセッサ３９により実行される。これは実行時間を短くすると共に、以前ならば梯子型論理プログラム・ファイルと機械語プログラム・ファイルとの間の転送中に失われるオーバヘッド時間を排除することになる。後で説明するように、マクロ命令の実行は梯子型論理のサブルーチンの実行とは異なり、メインプログラムとマクロルーチンとの間でデータの値自体が個々に交換されるのではない。その代わりに、必要なデータを全て含んでいるファイルのアドレスを梯子型論理メインプログラムから転送することによって、データが交換されるのである。またサブルーチンの終了した時、そのファイルに処理の結果を含めることができる。データの各項目の代わりにファイルアドレスを交換することはプログラムの実行速度を早くする。
【００３３】
図４に示すように、マクロ命令は梯子型論理メイン制御プログラムの中の梯子の横棒で定義される。データの項目数の平均を計算する代表的な命令をとりあげて、梯子型論理マクロ命令の考えを説明しよう。マクロ命令の横棒は常に実行されるから、それには入力動作は含まれておらず、ボックス６０で定義される出力動作だけが含まれている。このボックスの中にある「平均」というワードはプログラマがその特定のマクロ命令に割り当てた名前である。マクロ命令ボックス６０の中の次の項目は、共用システムＲＡＭ３６の中のデータ・ファイルの「あて先」アドレスであって、このデータ・ファイルに処理の結果が入ることになっている。「データ・ファイル」と指定されているエントリは、このマクロ命令により演算されるデータ項目が含まれるメモリのファイルのアドレスを識別するが、この例ではこのアドレスは平均されるデータである。「長さ」パラメータは平均するデータ項目の数（ととえば３０）を指定する。
【００３４】
また梯子図ボックス６０は「制御ファイル」を指定するが、状態ビットと、後で説明するプロセス制御ビットとがこのファイルに含まれる。このマクロ命令の最終のパラメータは、処理された最終データ項目の「データ・ファイル」の中の「位置」を示す。割り込みルーチンのような優先順位の高いタスクからこの処理に割り込みがかけられたとき、この表示を便利に使用できる。優先順位の高いタスクが完了すると、この「位置」表示により、当該マクロ命令ルーチンは次の未処理データ項目と共に再開することができる。算術あふれが生じると、「位置」表示によりらエラーを起こしたデータ項目が指定されるので、プログラムのデバッグが容易になる。「位置」パラメータおよび「長さ」パラメータは横棒ボックス６０で指定された「制御ファイル」のフィールドに格納される。このファイルのデータ構造を図５に示す。制御ファイルを別の構成にすると、別の型のマクロ機能に使用できる。たとえば、比例積分微分制御用関数（ＰＩＤ：proportionalintegral derivative function）を演算するマクロ命令をつくることもできるであろう。この場合、ＰＩＤのパラメータは制御ファイルの中に格納される。
【００３５】
端末装置１１のプログラム開発ソフトウエアにより、梯子図がプロセッサ・モジュール２０により実行される命令に翻訳されると、プログラムの中で使用されるマクロ命令の名前に独特な命令コード（オペコード）が割り当てられる。命令ボックス６０の中のオペコードおよび他の情報は梯子型論理命令を形成するために使用される。たとえば、図４に示す梯子の横棒は「平均オペコード  Ｎ７：０＃Ｎ１０：０  Ｒ６：０、」となる。このマクロ命令は「平均」と名付けたマクロのオペコードを指定しており、あて先、データ・ファイルおよび制御ファイルのアドレスはマクロ命令ルーチンによって使用される。記号「＃」がつけられたアドレスは、指定したマクロデータ・ファイル５１の第１のアドレスの相対アドレスであることを示している。記号「＃」のついていない他のアドレスは絶対アドレスである。
【００３６】
各種ルーチンは個別のファイルに格納されることがあるにしても、複数のマクロ命令に対するオペコードのルーチンが１つのライブラリ・ファイルに格納されるということは、本プログラマブル・コントローラ１０の利点の１つである。マクロ命令ルーチン・ライブラリ・ファイル５５は図６のメモリマップ図に示されている。各マクロ命令に対するルーチンはライブラリ・ファイル５５の隣接するセクション６２−６５に格納される。各マクロルーチンの最終梯子型論理命令は当該ルーチンの終了を指定しているので、ライブラリの次のルーチンが続けて実行されることはない。
【００３７】
図７を参照すると、共用システムＲＡＭの中のプログラムディレクトリ５３の１つは、マクロ命令ルーチンのインデックスとなっている。したがって、このディレクトリ６１の中にはライブラリ・ファイル５５に格納されているルーチンのそれぞれに対するエントリがある。所定のマクロ命令ルーチンに対するディレクトリ・エントリには、そのオペコードと、マクロ命令ライブラリ５５の中のアドレスとが含まれており、ライブラリ５５にはおそのルーチンの第１の命令が格納されている。
【００３８】
ユーザが定義した制御プログラムを実行している間、梯子型論理プロセッサ３９は、新しい命令を読み出す都度、その新しい命令のオペコードが含まれているエントリを見つけるため、共用システムＲＡＭの中に格納されている命令マップテーブルを探索する。命令マップテーブルはオペコードの実行の仕方を特定する。各マクロ命令に対して、命令マップテーブルは梯子型論理プロセッサ３９がマクロ処理ルーチンを実行しなければならないことを指定する。マクロ処理ルーチンは、梯子型論理メインプログラムの実行中に使用されたプロセッサのレジスタの以前の内容を退避させる。ついで当該マクロ命令のオペコードのエントリの位置を求めるため、マクロ・ディレクトリ６１が梯子型論理プロセッサ３９によって走査される。エントリが判ると、梯子型論理プロセッサ３９はディレクトリのオペコードに関するマクロルーチンのアドレスを取得する。たとえば、マクロ命令にオペコードＬ＋１が含まれているとすれば、このライブラリの中の該当するルーチンのアドレスはＸである。
【００３９】
マクロ・ディレクトリ６１からのアドレスは、共用システムＲＡＭ３６の中のライブラリ・ファイル５５の当該マクロルーチンをアクセスするために使用される。以前に説明した通り、マクロルーチンは梯子型論理命令の集合であって、これらの命令は梯子型論理プロセッサ３９によって全て実行されるのが普通である。この梯子型論理命令の実行は梯子型論理プロセッサによって開始され、該プロセッサは、アドレスＸにある、指定されたマクロルーチンの第１の梯子型論理命令を取得する。梯子型論理メインプログラムの実行と同じ方法で当該マクロルーチンの実行が続く。マクロルーチンがデータを要求すると、このデータを要求する命令を実行している梯子型論理プロセッサ３９あるいは第２のマイクロプロセッサ４１は、どちらもデータ・ファイルの中の適切なエントリからこのデータを取得する。このデータ・ファイルは、たとえば図４の「平均」マクロ命令のアドレス＃Ｎ１０：０にあり、当該ルーチンをコールしたマクロ命令の中で識別される。
【００４０】
独自のデータ・ファイル、あて先および制御ファイルを指定すると、各場所に指定されている異なるファイルを備えた梯子型論理メインプログラムのいくつかの場所で、同一マクロルーチンが使用できることになる。たとえば、いくつかのグループのデータの平均を計算するために「平均」マクロ命令を使用することができる。ルーチンが使用される都度、異なる制御ファイルが指定されることになり、関連する制御ファイルの中の「長さ」パラメータを指定することにより、いろいろな量のデータの平均をとることが可能となる。
【００４１】
指定されたデータ・ファイルの各項目が読み出され処理されるのに伴い、梯子型論理プロセッサ３９は、関連する制御ファイルの中の「位置」パラメータを増分する。何らかの理由で割り込みを受けると、処理が行われている場所ばかりでなく中間の処理値の退避もおこなわれる。この退避動作のおかげで、その処理が中断した場所で当該マクロルーチンの実行を連続して再開することが可能となる。
【００４２】
処理が完了すると、梯子型論理プロセッサ３９は、マクロ命令の中で指定されている「あて先」アドレス（たとえばＮ７：０）に結果を格納する。このアドレスは１つのアドレス位置か、あるいは、処理の結果がいくつかのデータ項目である場合は１連の格納場所の第１のアドレスである。マクロルーチンの最後の命令の指定は、プログラムの実行が梯子型論理メインプログラムに戻ることになっている。梯子型論理プロセッサがその命令に遭遇すると、その各種レジスタはマクロルーチンが開始されたときに退避された値に戻る。この動作によって、当該マクロ命令を含んでいる横棒の次の横棒で、梯子型論理メインプログラムが再開できることになる。梯子型論理メインプログラムの他のすべての命令は「あて先」アドレスにアクセスすることによって、マクロルーチン処理の結果を読み出す。
【００４３】
マクロ命令が１項目のデータに基づいて演算し、その演算を比較的迅速に実行するとすれば、制御ファイルは必要ないかも知れない。たとえば、ある角度の正弦を求めるような、三角関数を実行するマクロ命令は制御ファイルを必要としない。
【図面の簡単な説明】
【図１】本発明を使用したプログラマブル・コントローラの外観図。
【図２】図１のコントローラの一部を形成する、プロセッサ・モジュールの機能ブロック図。
【図３】プロセッサ・モジュール内の共用システム・ランダム・アクセス・メモリのメモリマップを示す図。
【図４】本発明によるマクロ命令を含んだ梯子型論理制御プログラムの横木（rung）を示す図。
【図５】マクロ命令によって使用される制御ファイルの内容を示す図。
【図６】共用システム・ランダム・アクセス・メモリ内のマクロ命令ルーチン・ライブラリのメモリマップを示す図。
【図７】本システムによって使用されるマクロ命令ディレクトリを示す図。
【符号の説明】
１０  プログラマブル・コントローラ・システム
１１  オペレータ端末装置
１２  主装置ラック
１３  ケーブル
１４  リモートＩ／Ｏラック
１５  Ｉ／Ｏネットワーク
１６    電力供給装置
１８  入出力インターフェース・モジュール
１８’入出力インターフェース・モジュール
１９  アダプタ・モジュール
２０  プロセッサ・モジュール
２１  通信プロセッサ
２２  第１のマイクロプロセッサ
２３  ローカル・アドレス・バス
２４  ローカル・データ・バス
２５  制御線
２６  第１のＲＯＭ
２７  第１のＲＡＭ
２８  マスター・クロック
２９  ネットワーク・インターフェース
３０  ファンクション・カード
３１  ３状態アドレス・ゲート
３２  ３状態・双方向データ・ゲート
３３  共用アドレス・バス
３４  共用データ・バス
３５  制御線
３６  共用システムＲＡＭ
３８  Ｉ／Ｏラック・インターフェース回路
３９  梯子型論理プロセッサ
４０  汎用プロセッサ
４１  第２のマイクロプロセッサ
４２  ローカル・アドレス・バス
４３  ローカル・データ・バス
４４  第２のＲＯＭ
４５  第２のＲＡＭ
４７  タイミング回路
４８  ３状態アドレス・ゲート
４９  ３状態・双方向データ・ゲート
５０  データ・テーブル
５２  システム・ステータスおよび制御ファイル
５３  プログラム・ディレクトリ
５４  梯子型論理メイン制御プログラム
５５  マクロ命令ルーチン・ライブラリ
５６  その他のプログラム・ファイル
５７  空きメモリ
５８  Ｉ／Ｏ強制データ
５９  構成データ
６０  梯子図命令ボックス
６１  マクロ・ディレクトリ
６２  オペコードＬ  に対するマクロルーチン
６３  オペコードＬ＋１  に対するマクロルーチン
６４  オペコードＬ＋２  に対するマクロルーチン
６５  オペコードＬ＋Ｍ  に対するマクロルーチン
【図１】
0003982716.tif 000002
【図２】
0003982716.tif 000003
【図３】
0003982716.tif 000004
【図４】
0003982716.tif 000005
【図５】
0003982716.tif 000006
【図６】
0003982716.tif 000007
【図７】
0003982716.tif 000008