(57)【特許請求の範囲】
【請求項１】
スキャンサイクルによりプログラムを繰り返し実行して制御を行う制御装置において、
外部からの命令を受けるための少なくとも１つ以上のポート、
１スキャンサイクル内において、前記ポートを介して与えられた命令を、与えられた順序とともに記憶する外部命令記憶手段、
１スキャンサイクル終了の際に、外部命令記憶手段に記憶された命令を、与えられた順序に従って実行する外部命令実行手段、を備え、
各ポートごとに、１スキャンサイクル内において受け取り可能な命令数を定めておき、
１スキャンサイクル内に、１つのポートに対し、当該受け取り可能な命令数を超える命令が与えられた場合、当該命令が受け取り不可である旨を返送する、
ことを特徴とする制御装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明は、プログラマブルコントローラのような制御装置に関する。
【０００２】
【従来の技術】
プログラマブルコントローラは、複数の命令を順次実行し、全ての命令を実行し終えると、再び最初の命令に戻って実行を繰り返す。このようにして、外部および内部リレー、スイッチ等の状態に従った、リアルタイムに近い制御を行うことができる。なお、この１サイクルの命令実行は、スキャンサイクルと呼ばれている。
【０００３】
ところで、近年、外部のコンピュータ、表示器等の周辺機器からの命令も実行可能であるプログラマブルコントローラ２が実用化されている。そのシステム構成を図９に示す。プログラマブルコントローラ２には、押しボタンスイッチ、リミットスイッチ等の入力デバイス４、電磁開閉器、リレー等の出力デバイス６が接続されている。プログラマブルコントローラ２は、入力デバイス４の状態をメモリに反映し、このメモリの状態に基づいて出力デバイス６の状態を制御する。
【０００４】
また、プログラマブルコントローラ２には、コンピュータ、表示器等の周辺機器８も接続されている。周辺機器８は、プログラマブルコントローラ２に対して、たとえば、メモリの状態を変更する書込命令を与える。スキャンサイクル内において、これを受けたプログラマブルコントローラ２は、この書込命令をメモリに記憶する。その後、スキャンサイクル終了時に、メモリに記録しておいた書込命令を実行する。
【０００５】
これにより、入力デバイス４の実際の状態にかかわらず、当該入力デバイス４が所定の状態にあるものとして、プログラマブルコントローラ２を動作させることができる。
【０００６】
【発明が解決しようとする課題】
しかしながら、上記のような従来の制御装置には、次のような問題点があった。
【０００７】
第一に、従来の制御装置は、外部からの命令を、１スキャンサイクル内に１つしか受け取れないようになっていた。仮に、１スキャンサイクル内に二以上の命令が与えられると、二番目以降に与えられた命令は実行されず、無視されることとなっていた。したがって、複数の命令によって構成されるジョブを行うためには、少なくとも、当該命令の数と同じだけの数のスキャンサイクル分の時間を要していた。つまり、外部からの命令の実行が迅速ではなっかった。
【０００８】
第二に、従来の制御装置は、複数の周辺機器からの命令を受けて、これを適切に実行することはできなかった。
【０００９】
この発明は上記のような問題点を解決して、１スキャンサイクル内に複数の外部からの命令を受けて実行可能な制御装置、および接続された複数の周辺機器からの命令を受けて適切に実行することができる制御装置を提供することを目的とする。
【００１２】
【課題を解決するための手段】
この発明の制御装置は、各ポートごとに、１スキャンサイクル内において受け取り可能な命令数を定めておき、１スキャンサイクル内に、１つのポートに対し、当該受け取り可能な命令数を超える命令が与えられた場合、当該命令が受け取り不可である旨を返送することを特徴としている。
【００１５】
【発明の効果】
この発明の制御装置は、各ポートごとに、１スキャンサイクル内において受け取り可能な命令数を定めておき、１スキャンサイクル内に、１つのポートに対し、当該受け取り可能な命令数を超える命令が与えられた場合、当該命令が受け取り不可である旨を返送することを特徴としている。これにより、命令を与えた外部機器は、後のスキャンサイクルにおいて、再び当該命令を与えて、確実に命令を実行させることができる。また、１つのポートによって、外部命令の実行が占有され、他のポートとの命令実行のバランスを欠く事態を回避することができる。
【００１６】
【発明の実施の形態】
図１に、この発明の一実施形態によるプログラマブルコントローラの構成を示す。ＣＰＵ１０には、システムプログラムメモリ１２、シーケンスプログラムメモリ１４、補助メモリ１６、Ｉ／Ｏインターフェース１８、ポートＰ1、Ｐ2・・・Ｐnが接続されている。Ｉ／Ｏインターフェース１８には、入力リレー、出力リレー、スイッチ等のデバイスが接続されている。
【００１７】
ポートＰ1〜Ｐnには、それぞれ、外部から命令を与えるコンピュータ、表示器等の周辺機器が接続される。
【００１８】
シーケンスプログラムメモリ１４内には、これらの外部デバイスの状態に対応した記憶状態を保持する記憶部が設けられている。また、この記憶部には、内部リレーの状態を示す箇所も設けられている。さらに、シーケンスプログラムメモリ１４には、ユーザの作成したシーケンスプログラムが格納される。
【００１９】
システムプログラムメモリ１２には、このプログラマブルコントローラの基本的動作を制御するシステムプログラムが格納されている。
【００２０】
外部命令記憶手段である補助メモリ１６は、各ポートＰ1〜Ｐnからの命令を記憶する。
【００２１】
以下、このシーケンスコントローラに、ポートＰ1、ポートＰ2を介して、図２に示すような外部命令が与えられた場合を例にとって説明する。図３Ａに、外部命令のフォーマットを示す。先頭のヘッダに続いて、操作種別、対象デバイス、データ、ターミネータが与えられる。ヘッダは開始を、ターミネータは終了を示す。操作種別は、データクリア、書込等の操作の種類を示す。対象デバイスは、その操作を行う対象となるデバイス（入力、出力、内部リレー、データレジスタ等）を示す。データは、操作を行うデータを示す。
【００２２】
例えば、一括データクリア命令は、図３Ｂに示すような構成を有している。データクリア命令の場合には、操作を行うデータは不要である。また、スタートコントロールリレーＯＮ命令は、図３Ｃに示すような構成を有している。対象デバイスは、その種類（ｍ、内部リレー）と対応するメモリ１４内のアドレス（３００）とによって指定されている。
【００２３】
図４に、メモリ１２に格納されたシステムプログラムのフローチャートを示す。まず、ステップＳ１において、出力デバイス（インターフェース１８に接続された出力リレー等）に対応したメモリ１４のアドレスの内容を読み出して、この内容に基づいて出力デバイスを制御する。
【００２４】
次に、入力デバイス（インターフェース１８に接続されたスイッチ等）の状態を得て、この状態に応じて対応するメモリ１４のアドレスの内容を書き換える（ステップＳ２）。
【００２５】
その後、メモリ１４に格納されたユーザプログラムの最初のステップを実行する（ステップＳ３）。これが終わると、次のステップを実行する（ステップＳ４）。これを繰り返して、ユーザプログラムの最後のステップまで実行する（ステップＳ５）。
【００２６】
なお、上記のステップＳ１〜Ｓ５の実行中に、いずれかのポートＰ1〜Ｐnから図２に示すように外部命令が与えられると、割り込み処理によってこの外部命令を補助メモリ１６に格納する。
【００２７】
このようにしてユーザプログラムを実行し終えると、補助メモリ１６に記憶された命令を実行する（ステップＳ６）。これにより、外部から与えられた命令を、１スキャンサイクルの最後において実行することができる。
【００２８】
補助メモリ１６に記憶された命令を実行すると（つまり、１スキャンサイクルが終了すると）、再び、ステップＳ1以下の実行を繰り返す。
【００２９】
図５に、外部命令を補助メモリ１６へ記憶する割り込み処理のフローチャートを示す。まず、ステップＳ１０において、外部命令の与えられたポートにつき、今まで与えられた命令数ｍ
を取得する。補助メモリ１６には、図６に示すようなデータ構造にて、各ポートＰ1〜Ｐnからの命令を記憶するようになっている。したがって、当該ポートに関して、今までに与えられた命令数ｍを容易に取得することができる。
【００３０】
図２に示すように外部命令が与えられた場合には、まず、ポートＰ1に与えられた一括データクリア命令によって、図５の割り込み処理が実行される。なお、外部命令が完全に与えられ終わった時間の早い順（ｔ１，ｔ２，ｔ３の順）に、割り込み処理が行われる。このスキャンサイクルが始まって、ポートＰ1に与えられた命令は今までなかったので、取得される命令数ｍは０である。
【００３１】
次に、ステップＳ１１において、このポートＰ1の命令数ｍが、最大命令可能数より小さいか否かを判断する。小さければ、全ポートを通じての命令総数ｋ（各ポートの命令数ｍの合計）を１つインクリメントする（ステップＳ１２）。この命令総数ｋは、図６の補助メモリに記憶される。ここでは、命令総数ｋは１となる。
【００３２】
次に、命令総数ｋを、当該命令の順序とする（ステップＳ１３）。この命令が与えられた順序も、補助メモリに記憶される（図６参照）。続いて、当該ポート（ここではポートＰ1）の命令数ｍを１つインクリメントする（ステップＳ１４）。この命令数は、補助メモリに記録される（図６参照）。ここでは、命令数ｍは１となり、ポートＰ1からの命令数ｍとして記憶される。
【００３３】
次に、外部命令の解釈を行い、書込データとアドレスを得る（ステップＳ１５）。一括データクリア命令は、図３Ｂのようなフォーマットを有している。この命令を解釈して、どのアドレス（つまりデバイス）に、何れのデータを書き込めばよいのかを決定する。つまり、外部命令が、メモリ１４の何れのアドレスに対して、どのようなデータを書き込むことを要求しているのかを解釈する。たとえば、図３Ｂの一括データクリア命令であれば、対象アドレスは、入力デバイス、出力デバイス、内部デバイス（内部リレー等）に対応する全てのアドレスとなる。また、書込データは”０”となる。このようにして得られたアドレスと書込データは、補助メモリに記憶される（図６参照）。
【００３４】
上記と同じようにして、図２のスタートコントロールＯＦＦ命令、スタートコントロールＯＮ命令についても、図５の割り込み処理が行われる。
【００３５】
なお、図５のステップＳ１１において、命令数ｍが、当該ポートが受け取ることの可能な命令数（最大命令可能数）と等しくなると、当該命令を受け取ることができない旨を、ポートを介して返送する（ステップＳ１６）。また、最大命令可能数は、予め設定しておく。このようにして、１つのポートによって、外部命令の実行が占有され、他のポートとの命令実行のバランスを欠く事態を回避することができる。
【００３６】
上記のようにして、補助メモリ１６（命令記憶部）には、図６に示すように、全ポートからの命令総数ｋ、各ポートの命令情報が記憶される。各ポートの命令情報には、全ポートを通しての命令が与えられた順序、命令の内容（書込データ、アドレス）が記憶される。
【００３７】
図７に、図２のように外部命令が与えられた場合に、補助メモリに記憶される具体的な内容を示す。この実施形態では、外部命令を解釈してアドレスと書込データを記憶するようにしているが、外部命令をそのまま記憶するようにしてもよい。
【００３８】
次に、このようにして記憶された外部命令の実行（図４のステップＳ６）について説明する。そのフローチャートを図８に示す。ここでは、図７のように外部命令が記憶されているものとして説明する。
【００３９】
まず、ステップＳ２０、Ｓ２１において、処理用カウンタｑを１とし、ポートカウンタｎを１とする。次に、命令カウンタｊを０とする（ステップＳ２２）。
次に、ポートカウンタｎによって示されるポートにつき、記憶されている命令数ｍと最初に記憶されている命令の順序を取得する（ステップＳ２３）。ここでは、命令数ｍ＝２、順序＝１を取得する。ステップＳ２４では、命令カウンタｊが命令数ｍと等しくなったかどうかを判断する。ここでは、ｊ＝０、ｍ＝２であり、等しくなっていないから、ステップＳ２５に進む。ステップＳ２５では、命令カウンタｊを１つインクリメントする。これにより、ｊ＝１となる。
【００４０】
次に、取得した順序が処理用カウンタｑと等しいか否かを判断する（ステップＳ２６）。ここでは、順序＝１、ｑ＝１であって等しいので、順序＝”１”が付されて記録されていた当該命令を実行する（ステップＳ２７）。つまり、全アドレスに対してデータ”０”の書込が行われ、一括データクリア命令が実行される。
【００４１】
その後、ｑが全ポートからの命令総数ｋに等しくなったか否かを判断し、等しければこの処理を終了する（ステップＳ２８）。ここでは、ｋ＝３、ｑ＝１であるから、ステップＳ２８において、ｑを１つインクリメントする（ステップＳ２９）。これによりｑ＝２となり、再び、ステップＳ２２以下を実行する。これにより、２番目の順序が付されている命令の実行を行う。
【００４２】
まず、命令カウンタｊを０にする（ステップＳ２２）。次に、命令数ｍと順序を取得する（ステップＳ２３）。今、ポートカウンタｎ＝１であるから、命令数ｍ＝２、順序＝１が取得される。さらに、ステップＳ２４において、命令カウンタｊが命令数ｍに等しくなったか否かを判断する。ここでは、命令カウンタｊ＝０、命令数ｍ＝２であるから、ステップＳ２５に進んで、命令カウンタｊを１つインクリメントする。これにより、命令カウンタｊ＝１となる。
【００４３】
次に、処理用カウンタｑが順序に等しいか否かを判断する（ステップＳ２６）。ここでは、ｑ＝２、順序＝１であるから、ステップＳ２３に戻る。
【００４４】
ステップＳ２３では、次に記憶されている命令について、その順序を取得する。ここでは、順序＝３が取得される（図７参照）。以下、ステップＳ２４、ステップＳ２５、ステップＳ２６順に実行される。ステップＳ２６においては、ｑ＝２、順序＝３であるから、さらに再び、ステップＳ２３に戻る。そして、ステップＳ２４において、命令カウンタｊ（＝２）と命令数ｍ（＝２）が等しくなるので、ステップＳ３０に進む。
【００４５】
ステップＳ３０においては、ポートカウンタｎがポート総数（ここでは２とする）に等しくなったか否かを判断する。ここでは、ポートカウンタｎ＝１、ポート総数＝２であるから、ステップＳ３１に進む。ステップＳ３１では、ポートカウンタｎを１つインクリメントする。その後、ステップＳ２２以下を実行する。このようにして、ポートＰ2についても同じように処理を行う。その結果、ステップＳ２６において、処理用カウンタｑ＝２、順序＝２となって、ステップＳ２７により、図７のスタートコントロールリレーＯＦＦ命令が実行される。つまり、アドレス３００に対して、データ”０”が書き込まれる。
【００４６】
その後、処理用カウンタｑ＝３として、同様の処理が行われ、図７のスタートコントロールＯＮ命令が実行される。つまり、アドレス３００に対して、データ”１”が書き込まれる。
【００４７】
以上のようにして、与えられた順序どおり、外部命令を実行することができる。特に、図２のように、ＯＦＦ命令とＯＮ命令が与えられた場合には、その実行順序が重要である。なぜなら、この順序が逆になると、最終的なリレーのＯＮ、ＯＦＦが変わってしまうからである。この点、上記実施形態によれば、命令が与えられた順に実行され、適正な処理が可能である。
【００４８】
なお、上記の実施形態においては、複数のポートＰ1〜Ｐnを有する場合について説明したが、１つのポートを有する場合であっても適用することができる。この場合、１スキャンサイクル内に複数の命令が１つのポートから与えられても、それらの命令を与えられた順に実行することができる。
【００４９】
また、上記実施形態では、各ポートごとにまとめて命令を記憶するようにしている。これは、ポート単位で処理をまとめた方がプログラムを簡素化することができるからである。しかし、場合によっては、命令が与えられた順序に従って、ポート番号を付して、命令を記憶するようにしてもよい。
【００５０】
なお、上記実施形態においては、外部命令として書込を行う命令を示したが、１スキャンサイクルエンド処理を行う外部命令も対象とすることができる。
【図面の簡単な説明】
【図１】この発明の一実施形態によるプログラマブルコントローラの構成を示す図である。
【図２】ポートに与えられる外部命令のタイミングを示す図である。
【図３】外部命令のフォーマット及び、例を示す図である。
【図４】システムプログラムの処理を示すフローチャートである。
【図５】外部命令を受けたときの処理を示すフローチャートである。
【図６】補助メモリに記憶されるデータ（外部命令）のデータ構造を示す図である。
【図７】補助メモリに記憶される外部命令のデータ例を示す図である。
【図８】補助メモリに記憶された命令の実行処理を示すフローチャートである。
【図９】従来のプログラマブルコントローラを示す図である。
【符号の説明】
Ｐ1〜Ｐn・・・ポート
１０・・・ＣＰＵ
１２・・・システムプログラムメモリ
１４・・・シーケンスプログラムメモリ
１６・・・補助メモリ
１８・・・Ｉ／Ｏインターフェース
【図１】
0004037941.tif 000002
【図２】
0004037941.tif 000003
【図３】
0004037941.tif 000004
【図４】
0004037941.tif 000005
【図５】
0004037941.tif 000006
【図６】
0004037941.tif 000007
【図７】
0004037941.tif 000008
【図８】
0004037941.tif 000009
【図９】
0004037941.tif 000010