【実施例】
【0013】
図1は、本発明の実施例に係るPLCの構成図である。
このPLCのCPUスロットに搭載したCPUモジュール1は、シーケンスプログラムの演算を行うMPU11、パソコン等の周辺機器と通信するための通信ポート12、シーケンスプログラムやシステムプログラムを格納するためのROM13、シーケンスプログラムの演算に使用するデータを格納するRAM14、該RAM14と外部バス5に接続されるIOモジュールとのデータ転送を行うDMAC15、外部バス3とのインタフェースであるアドレス出力部およびデータ入出力部を持つBUSコントローラM16(Mは「マスタ」を表す)、から構成される。また、CPUモジュール1は、後述するIOモジュールに対する高速連続アクセスのために、連続アクセス数をカウントするカウンタを設ける。このカウンタは、ハード的にまたはソフト的に構成することができるものである。そのため、
図1のCPUモジュール1内には図示をしていない。
【0014】
CPUモジュール1は、IOスロット0、IOスロット1、・・・IOスロットnに、どのようなIOモジュールが接続されているのか、あらかじめ把握する必要がある。通常は、IOモジュール側において、ステータス情報として入出力タイプやデータサイズといった情報をCPUモジュール1から認識できるようにする。このステータス情報に、高速連続アクセス対応可否の情報を設けることにより、CPUモジュール1から高速連続アクセス対応可能なIOモジュールがどのIOスロットに実装されているか判断可能となる。
【0015】
外部IOモジュールには、デジタル信号やアナログ信号用のIOモジュール(入力モジュールや出力モジュール)の他に、通信モジュール2がある。この通信モジュール2は、モジュール内部に例えば2ポートRAM21を備え、CPUモジュール1と通信モジュール2の通信ポートに接続される外部通信機器とのデータを、この2ポートRAM21を介して転送する。その際のCPUモジュール1側からのアクセス時に、通信モジュール2は、外部バス3を介して取得したアドレスにより内部の2ポートRAM21にアクセスするか、または、そのアドレスに対してCPUモジュールから送られる連続アクセス数分のインクリメントまたはデクリメントしたアドレスを送出して内部の2ポートRAM21にアクセスする。このアクセスを可能にするために、通信モジュール2は、BUSコントローラS22(Sは「スレーブ」を表す)を備える。アドレスは番地ともいう。
【0016】
外部バス3は、CPUモジュール1およびIOスロット0〜nに接続された各種IOモジュールをつなぎ、アドレス、データおよび制御情報をやり取りする。本実施例では、この外部バス3として、アドレスとデータで共用するマルチプレクスバスを用いている。なお、
図1では、外部バス3を構成する信号線の内、後述するモード信号(mode_n)およびストローブ信号(strobe_n)のための信号線を分離した形で示している。
本発明は、外部バスをこのマルチプレクスバスに限定するものではなく、セパレート型のバス形態であってもよい。ただし、マルチプレクスバスは、セパレート型のバスと比べ必要となる信号線を減らしピン数を低減することができる。
【0017】
図2は、通信モジュール2が備えるBUSコントローラS22の内部ブロックの構成図である。外部バス3とのインタフェースであるBUSコントローラS22は、アドレスを記憶するフリップフロップ(FF)31、このフリップフロップ(FF)が出力するアドレスをインクリメントまたはデクリメントする増減カウンタ32およびアドレス選択用のセレクタ33から構成される。外部バス3は、マルチプレクスバスであることから、この外部バス3からの入力データの内、データについてはそのまま2ポートRAMの方へ送り、アドレスについてはセレクタ33へ送られる。なお、
図2では、モード信号(mode_n)およびストローブ信号(strobe_n)のための信号線は省略している。
【0018】
フリップフロップ(FF)31は、その入力として、CPUモジュール1から外部バス3を介して入力されるアドレス、またはフリップフロップ(FF)31自身が記憶しているアドレスを増減カウンタ32によりインクリメントまたはデクリメントしたアドレスをセレクタ33により選択する。すなわち、フリップフロップ(FF)31は、通常アクセス時には、外部バス3からのアドレスが選択されて記憶/出力することとなり、高速連続アクセス時には、上記インクリメントまたはデクリメントしたアドレスが選択されて順次記憶/出力することとなる。このセレクタ33による選択には、後述するモード信号(mode_n)が使用される。また、増減カウンタ32がインクリメントするかデクリメントするかには、後述するモード信号(mode_n)およびストローブ信号(strobe_n)が使用される。
【0019】
CPUモジュール1と通信モジュール2との間では、CPUモジュール1と通常のIOモジュールが扱うデータ量よりもはるかに大量のデータを扱う。そこで、両者におけるデータアクセスの違いを、タイムチャートを使って説明する。
【0020】
先ず、
図3および
図4は、CPUモジュール1が通常のIOモジュールに対するリフレッシュ処理を行う場合のタイムチャートである。
図3がライト時、
図4がリード時である。
外部バス3は、アドレスとデータで共用するマルチプレクスバスであり、やり取りを行う信号は、各スロットの選択信号(cs_n)、アドレスストローブ信号(as_n)、データストローブ信号(wr_n/rd_n)および16ビットのアドレス/データ信号(ad[15:0])から構成される。
【0021】
例えば、32点(ビット)の出力モジュールに対するリフレッシュ処理は、
図3に示すライトアクセスを2回行うことになる。また、8チャネルのアナログ入力モジュールに対するリフレッシュ処理は、1チャネルが16ビットであることから、
図4に示すリードアクセスを8回行うことになる。
【0022】
次に、
図5および
図6は、CPUモジュール1と通信モジュール2との間で高速連続アクセスを行う場合のタイムチャートである。
図5がライト時、
図6がリード時である。
CPUモジュール1は、通信モジュール2に対して、アクセスするアドレス空間のアドレス(ADR)を指定する(任意アドレスの指定)と共に、通常アクセスか高速連続アクセスかを識別するためのモード信号(mode_n)をアドレス出力と同じタイミングで出力する。通信モジュール2側は、アドレスストローブ信号(as_n)の立ち上がり時に、モード信号(mode_n)のレベルによって、通常アクセスまたは高速連続アクセスのどちらでCPUモジュール1がアクセスしているのか判断する(
図5および
図6では、モード信号(mode_n)のLレベルの時が高速連続アクセスである)。
【0023】
高速連続アクセスのデータサイクル時には、ストローブ信号(strobe_n)のレベル変化に応じて通信モジュール内部のアドレスを更新する。すなわち、ストローブ信号(strobe_n)のレベル変化開始時点(LレベルからHレベルへの立ち上がり時)のモード信号(mode_n)のレベルにより、インクリメントまたはデクリメントが選択される(
図5および
図6では、ストローブ信号(strobe_n)のLレベルからHレベル変化開始時に、モード信号(mode_n)が、Lレベルであればインクリメント、Hレベルであればデクリメント)。
【0024】
そして、CPUモジュール1は、高速連続アクセスに係る連続アクセス数(連続するアドレス空間)を指定する。CPUモジュール1は、内部に設けたカウンタを用いて、通信モジュール2に対して、連続したアドレス空間に対応する連続アクセス数分パルス化したストローブ信号(strobe_n)を送信する。通信モジュール2が備えるBUSコントローラS22の増減カウンタ32は、このパルス化したストローブ信号を受けて、指定された任意アドレスからこの連続アクセス数分インクリメントまたはデクリメントすることになる。
【0025】
また、CPUモジュール1が、高速連続アクセスに対応していない従来のCPUモジュールであって、高速連続アクセス対応のIOモジュールとの組み合わせであった場合でも、通常アクセスに必要な制御信号(cs_n、as_n、wr_nおよびrd_n)の出力方法は互換性があるので、通常アクセスは可能である。
【0026】
本実施例では、高速連続アクセス対応のモジュールとして、通信モジュール2を示しているが、これは通信モジュールに限ったことではない。さらに、通信モジュール2は、内部に2ポートRAMを備えているが、実際には、2ポートRAMではなく、1ポートRAMに対して調停回路(アービタ)を付加したものであってもよい。
【0027】
図7は、PLCの動作を示すフローチャートである。PLCは、通常、データの入力に係る入力リフレッシュ、入力データに基づくシーケンス演算および演算結果に伴うデータの出力に係る出力リフレッシュの一連の処理フローを、電源オフのような停止操作が発生するまでの間、サイクリックに実行するものである。そして、IOリフレッシュ(入力リフレッシュ+出力リフレッシュ)およびシーケンス演算の実行による一連のサイクリック処理に掛かる時間を「スキャンタイム」と呼んでいる。そうすると、シーケンス演算の実行時間が一定であれば、スキャンタイムはIOリフレッシュに掛かる時間に左右されることになる。
【0028】
次に、上記フローチャートに従い、高速連続アクセスの有無によりどの程度サイクリックな演算性能、すなわちスキャンタイムに差異がでるのかを説明する。ここで、PLCの構成例としては、
図1に示す通り、IOスロット0に、8,192ワードのデータを扱う通信モジュール、IOスロット1に、1ワードのデータを扱う入力モジュール、IOスロット2に、1ワードのデータを扱う出力モジュール、が実装されているものとする。また、IOアクセスの単位時間を“1μsec”として、
図7のフローチャートが示す、一連のサイクリック処理に掛かるスキャンタイムを算出する。
【0029】
図3および
図4に示す通常のIOモジュールに対するアクセスを、通信モジュールに対して行った場合を想定する。通信モジュールは最大で8,192ワードのデータを扱うことから、入力リフレッシュおよび出力リフレッシュを通常のIOアクセスで行うと、IOリフレッシュは、最大で“8,194μsec”(約8msec)の時間を要することとなる。また、シーケンス演算に要する時間は、ユーザが作成するシーケンスプログラムの容量に依存するところ、通常の目安として“1msec(=1,000μsec)”である。そうすると、スキャンタイムは、最大“9,194μsec”で、9msec程度となる。
【0030】
一方、通信モジュールに対するIOリフレッシュを、
図5および
図6に示す高速連続アクセスで行う場合、通信モジュール内部ではアドレスを更新するだけの処理となる。そうすると、CPUモジュール1から順次アドレスを取得するよりも高速にアドレス更新が可能である。通信モジュール内部でのアドレス更新時間は、通常120nsec程度であるので、“0.1μsec”とすると、通信モジュールのIOリフレッシュに要する時間は、最大“819μsec”程度と捉えることができる。これに、入力モジュールおよび出力モジュールとしての通常のIOアクセス分(2μsec)を加えて、IOリフレッシュとしては、最大“821μsec”となる。更に、シーケンス演算時間(1msec)を加えたスキャンタイムは、最大“1,821μsec”となる。すなわち、上記の通常のIOアクセスの場合のスキャンタイムと比べて約5倍の性能アップとなることが判る(ここで、上記アドレス更新時間を“0.12μsec”として算出した場合でも、通信モジュール内で最大“983μsec”、通常のIOアクセス分とシーケンス演算時間を加えたスキャンタイムは、最大“1,985μsec”となり、4.6倍の性能アップとなる)。
【0031】
データ通信の際には、番地の指定を1度行い、指定された番地にデータ通信を行った後には、指定番地以降または以前の番地に対して、リードまたはライトの順次データ通信ができるため、この順次データ通信を行う際に、番地の指定を行わなくてよいこととなる。
これにより、番地指定の通信に要する時間を減らすことが可能となる。
つまり、一の通信モジュールが通信を開始する際に、データ通信を行う前にデータ通信をする番地の指定を行った後は、一と他の通信モジュールは、それぞれ順次データ通信することを設定またはその情報を有しているため、データ通信を繰り返し行うこととなる。
例えば、指定番地nを指定する通信を行い、指定番地nのデータ通信後には、番地n+1、n+2・・・またはn−1、n−2・・・に対しては、番地を指定する通信が不要となるため、全体のデータ通信速度を向上させることが可能となる。なお、便宜上n+1,n+2・・・等と記載したが、データ通信するバス数等に応じて指定番地以降または以前の番地は適宜変更されるため、一般化すると順次データ通信が行われる番地は、n+m、n+2mとなる。
【0032】
以上のように、本実施例においては、CPUモジュールのIOリフレッシュ処理において、連続したエリア(アドレス空間)に対するアクセスを上記の高速連続アクセスとすることにより、大幅に処理時間を高速化することが可能となる。
すなわち、連続したアドレス空間に対するCPUモジュールからのバスアクセスを1回の任意アドレスの指定出力後に、テータストローブ信号をアクセスサイズ分トグルすることによりリードまたはライトが可能となり、高速にデータ転送が行える。
また、データ転送を高速に行うことで、CPUモジュールでの演算周期が速くなり、外部機器に対する制御を高速に処理実行することが可能となる。
【0033】
なお、本発明は、上記の実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記の実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。