【実施例1】
【0013】
図1は、本発明の実施例に係るPLCの構成図である。
【0014】
このPLCのCPUモジュール1は、シーケンスプログラムの演算を行うMPU11a、パソコン等の周辺機器と通信するための通信ポート12、シーケンスプログラムやシステムプログラムを格納するためのROM13a、シーケンスプログラムの演算に使用するデータを格納するRAM14a、RAM14aとIOバス3に接続されるIOモジュールとのデータ転送を行うDMAC15a、IOバス3とのインタフェースであるアドレス出力部およびデータ入出力部を持つBUSコントローラM16(Mは「マスタ」を表す)、から構成される。
【0015】
CPUモジュール1は、IOスロット0、IOスロット1、・・・IOスロットnに、どのようなIOモジュールが実装されているのか、あらかじめ把握する必要がある。通常はIOモジュール側において、ステータス情報として入出力タイプやデータサイズといった情報をCPUモジュール1から認識できるようにする。
【0016】
IOモジュール2には、デジタル信号やアナログ信号用のIOモジュール(入力モジュール202や出力モジュール203)の他に、バスキャプチャ機能付きモジュール201がある。
3は、IOバスを示し、アドレス/データ信号21が流れる。22は、スロット0から任意のnを選択するスロットn選択信号を示し、スロットn選択信号は、IOスロットnに実装したIOモジュールのみに信号を送る構成である。23は、リードストローブ信号を示す。24は、ライトストローブ信号を示す。
【0017】
CPUモジュール1は、IOバス3を介して各IOスロットにアクセスする。該IOバス3のアドレス、データの他に、スロットを選択するためのスロット選択信号22やリードストローブ信号23、ライトストローブ信号24が必要である。スロット選択信号22は個々のスロット毎にCPUモジュール1から出力されるものであるが、アドレスをデコードしてCPUモジュール1がスロット選択信号22を出力する。
【0018】
バスキャプチャ機能付きモジュール201は、シーケンスプログラムの演算を行うMPU11b、シーケンスプログラムやシステムプログラムを格納するためのROM13b、シーケンスプログラムの演算に使用するデータを格納するRAM14b、IOバス3とのインタフェースであるアドレス出力部およびデータ入出力部を持つBUSコントローラS17(Sは「スレーブ」を表す)、から構成される。
【0019】
図2は、このIOバス3上でのCPUモジュール1のリードアクセスとライトアクセスを示すタイムチャートである。リードアクセスの際には、IOスロットnの入力モジュールを選択するスロットn選択信号22がhighレベルからlowレベルに変化するタイミングで、アドレス/データ信号21にはアドレスがIOバス3に流れる。リードストローブ信号23がhighレベルからlowレベルに変化するタイミングで、IOスロットnの入力モジュールからリードデータが、IOバス3に流れる。
【0020】
ライトアクセスの際には、IOスロットnの出力モジュールを選択するスロットn選択信号22が、highレベルからlowレベルに変化するタイミングで、アドレス/データ信号21にはアドレスがIOバス3に流れる。ライトストローブ信号24が、highレベルからlowレベルに変化するタイミングで、IOスロットnの出力モジュールからのライトデータが、IOバス3に流れる。
【0021】
CPUモジュール1は、このリード/ライトアクセスをIOスロットに実装されているIOモジュールに対して行う。
図3に示すように、まずは入力モジュールからデータを取り込む入力リフレッシュを行い、そのデータにてユーザプログラムの実行を行った後、出力モジュールに対する出力リフレッシュを行う。これをスキャンと称し、サイクリックに行いPLCとしての制御を行う。
【0022】
ここで、
図1に示す構成で、IOリフレッシュを行う際に、IOスロット0にバスキャプチャ機能付きモジュール201が実装されている場合の動作について説明する。CPUモジュール1がIOスロット1の入力モジュールに対する入力リフレッシュを行う際には、スロット選択信号はスロット1用の信号のみアサートされ、他のスロットに対するスロット選択信号はアサートされない。
【0023】
これはCPUモジュール1がアドレスに含まれるスロットアドレスをデコードすることによって、複数のスロット選択信号か一意に決まるスロット選択信号のみをアサートすることができるものである。よって他のスロットの入力モジュールがデータを出力することはない。
【0024】
図4は、バスキャプチャ機能付きモジュール201のBUSコントローラS17の機能を説明する図である。バスキャプチャ部42は、常に、IOバス3を流れるアドレス/データ信号21を見ており、IOスロット1のアドレスに対するCPUモジュール1のアクセスを認識した際に、データ授受対象スロットテーブル41のSlot1が”要”となっていることを認識可能であり、そのリードアクセス時のデータを取得することが可能となる。
【0025】
データ授受対象スロットテーブル41は、BUSコントローラS17のメモリなどに格納する。
【0026】
IOスロット1に対するリードアクセス実行時に、バスキャプチャ部42にて、IOバス3上のアドレス/データ信号21のアドレスに含まれるスロットアドレスをデコードし、他のスロットに対するアクセスであることを認識可能である。たとえば、通常のIOモジュールがSlot0に実装されている場合は、IOモジュール2は、Slot1のスロット選択信号は見ることはできない。一方、バスキャプチャ機能付きモジュール201では、アドレス信号に含まれるスロットアドレスをデコードし、Slot1へのアクセスであると判定する。
【0027】
よって、予め設定されたデータ授受対象スロットテーブル41に対するアクセスがあった場合にはそのリードデータを直接取り込むことが出来る。
【0028】
このデータ授受対象スロットテーブルの情報は、PC上のプログラミングツールからIOモジュールの割付を行う際に、バスキャプチャ機能付きモジュール201が使用する入力モジュールの有無、スロット位置を指定し、プログラムを、CPUモジュール1へ転送後、CPUモジュール1から該バスキャプチャ機能付きモジュール201に必要な情報を転送することで入手することが出来る。
【0029】
実施例1では、バスキャプチャ機能付きモジュール201がリードもしくはライトできるスロットを示すデータ授受対象スロットテーブル41の設定に基づいて、IOバス3からリードアクセス時のデータを取得することが可能となる。
【0030】
従って、スロット1の入力データをCPUモジュール1が取込み、その後スロット0のバスキャプチャ機能付きモジュール201に、該入力データを渡す必要がなくなり、より高速に入力データを取り込むことが可能である。
【0031】
図4に示す双方向バッファ43は、バスキャプチャ部42もしくは通常アクセスバス制御部44からのイネーブル信号に基づいて、BUSコントローラS17の内部バス45からIOバス3にデータを出力する。また、双方向バッファ43は、バスキャプチャ部42もしくは、通常アクセスバス制御部44からのイネーブル信号に基づいて、IOバス3からデータをBUSコントローラS17に入力することができる。
【0032】
通常アクセスバス制御部44は、自らの選択信号であるスロット0の選択信号については、データを取り込むとともに、出力するためのイネーブルの信号を、双方向バッファ43に出力する。たとえば、バスキャプチャ機能付きモジュール201が、スロット0に実装されている場合は、バスキャプチャ部42は、スロット1のスロット選択信号は見ることができないが、アドレス信号に含まれるスロットアドレスをデコードし、スロット1へのアクセスであることが判り、スロット1のデータを授受できるように双方向バッファ43にイネーブル信号を出力する。
【0033】
一般に、IOモジュールである高機能モジュールにおいては、外部入力信号のON/OFF情報をトリガにモジュール内部の動作を制御する。そこで、入力信号からの応答を高速化するため、そのモジュール自体で入力信号を取り込む機能も持たせることができる。
【0034】
その場合は、物理的に入力可能な点数には制約が出てきてしまう。そのため外部入力信号を取り込み、その入力を元に制御を行う高機能モジュールは、CPUモジュールから該入力データを渡してもらう必要があった。
【0035】
図5は、CPUモジュールから高機能モジュールが該入力データを渡してもらう場合の外部入力の取込みタイミングとリフレッシュの関係を示すタイムチャートである。実際の入力信号の変化がA点であったとすると、その後のCPUモジュールの入力リフレッシュがB点で行われ、そのデータが高機能モジュールに渡るのはCPUモジュールが出力リフレッシュを行ったC点ということになる。
【0036】
図5の中で外部入力信号のON/OFF(A点)は、CPUモジュールが入力リフレッシュ(B点)を実行した時点で、CPUモジュールで認識できる。この入力リフレッシュは、
図3に示すように、サイクリックに行われる。
【0037】
実施例1によれば、バスキャプチャ機能付きモジュール201へのデータの取り込みは、B点で行われるため、外部入力からの高速な応答をすることができる。
【実施例2】
【0038】
実施例1では、入力モジュールからバスキャプチャ機能付きモジュール201へデータを取り込む場合の実施例を説明した。実施例2では、バスキャプチャ機能付きモジュール201で、演算負荷を分散させる場合を、
図6を用いて説明する。
【0039】
ここで、CPUモジュール1では、スロット1の入力モジュール202、スロット2の出力モジュール203を対象とした演算を行い、スロット0のバスキャプチャ機能付きモジュール201では、スロット3の入力モジュール204、スロット4の出力モジュール205を対象として演算を行うものとする。
【0040】
これらは予めユーザがスロット0のバスキャプチャ機能付きモジュール201に対してデータ授受対象スロットテーブル41の情報を設定することで、バスキャプチャ機能付きモジュール201が、Slot”要”に対応する入出力モジュールでの入力リフレッシュや出力リフレッシュのタイミングを、認識可能となる。
【0041】
図7に示すように、スロット1の入力モジュール202と、スロット2の出力モジュール203に対するIOリフレッシュはCPUモジュール1が行う。一方、バスキャプチャ機能付きモジュール(高機能モジュール)201は、バスキャプチャ部42によりスロット3からのリードアクセス、スロット4へのライトアクセスを認識可能であり、スロット3からのリードデータを取込み、ユーザユーザプログラムを実行し、スロット4へ演算結果を出力することが可能である。
【0042】
図8に、スロット4に対するCPUモジュール1側のライトアクセス時のタイムチャートを示す。
【0043】
ライトアクセスの際には、IOスロットnを選択するスロットn選択信号22が、highレベルからlowレベルに変化するタイミングで、アドレス/データ信号21にはアドレスがIOバス3に流れる。ライトストローブ信号24が、highレベルからlowレベルに変化するタイミングで、バスキャプチャ機能付きモジュール201が演算した結果のデータが、IOバス3を経由してIOスロットnの出力モジュールに、ライトデータとして流れる。
【0044】
スロット4は、CPUモジュール1側のユーザプログラムによる演算対象としないため、アドレスのみを出力し、データは、ハイインピーダンス(Hi−Z)状態とする。これで、このタイミング時にバスキャプチャ機能付きモジュール201が、演算結果をスロット4に出力することが出来る。
【0045】
IOリフレッシュのタイミングは、バスマスタであるCPUモジュール1が、トリガとなり、バススレーブであるバスキャプチャ機能付きモジュール201は、そのタイミングに従うこととなる。
【0046】
実施例2によれば、CPUモジュール1のIOリフレッシュに同期して、一部のIOモジュール2の入出力データを使用した制御を、バスキャプチャ機能付きモジュール201が、CPUモジュール1と分担して演算負荷を分散させることも可能となる。
よって、容易に、CPUモジュールと同期を行いつつ負荷分散を行うことが可能である。