(57)【特許請求の範囲】
【請求項１】
メインプロセッサを有するＣＰＵモジュールと、該ＣＰＵモジュールにそれぞれ外部バスで接続される入力モジュールと出力モジュールとを備えたプログラマブルコントローラであって、
前記ＣＰＵモジュール、入力モジュール、出力モジュール及び高機能モジュールをベースのスロットに装着し、
前記外部バスを介して、前記ＣＰＵモジュールと該ＣＰＵモジュール以外のモジュールとの間でデータのやり取りを行い、
必要に応じて増設用ベースを少なくとも１つ以上設けることが可能で、
前記ＣＰＵモジュールは、前記外部バスのアクセス時間を管理するカウンタを有するバスコントローラを備え、
該バスコントローラは、
内部状態を示す内部ステートと、
該内部ステートの状態を参照し、前記外部バスとのインタフェースを行なう外部バスＩＦ部と、
前記内部ステートの状態を参照し、ローカルバスとのインタフェースを行なうローカルバスＩＦ部と、
アクセスのための待ち時間を設定するためのウェイト数をカウントするウェイトカウンタと、
前記メインプロセッサにより設定されたウェイト数が格納されるとともにバスコントローラからのデータの参照が可能なウェイト数設定レジスタと、
該ウェイトカウンタの値とウェイト数設定レジスタの値を比較し、該比較結果を前記内部ステートに反映させる比較器と、から構成されることを特徴とするプログラマブルコントローラ。
【請求項２】
前記ＣＰＵモジュールと前記入力モジュールと前記出力モジュールとが実装されるベースを備え、
前記メインプロセッサは、前記カウンタの設定値を前記ベースに実装されているモジュールの数から算出することを特徴とする請求項１記載のプログラマブルコントローラ。
【請求項３】
少なくとも前記入力モジュールおよび前記出力モジュールとが実装されて前記ＣＰＵモジュールと前記外部バスを介して接続されるベースを１つ以上備え、
前記メインプロセッサは、前記カウンタの設定値を前記ベースの数から算出することを特徴とする請求項１記載のプログラマブルコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラマブルコントローラの外部バスアクセス時間の制御方法に関し、特に外部バスに接続されたＩＯモジュール等の接続負荷により外部バスアクセス時間を可変にするプログラマブルコントローラに関する。
【０００２】
【従来の技術】
従来、プログラマブルコントローラの外部ＩＯアクセス時間は、プログラマブルコントローラに実装可能なＩＯモジュールの最大構成を想定し、その構成で十分にアクセス可能な時間を固定値として設定していた。
【０００３】
また、最近のプログラマブルコントローラには入力モジュール、出力モジュールに加え、高機能モジュールと呼ばれるモジュールが用いられることがある。この高機能モジュールには他のプログラマブルコントローラとの通信を行なうリンクモジュールや、モータの位置制御を行なう位置決めモジュール等、そのモジュールで特定の処理を行なうモジュールが含まれる。この高機能モジュールはＣＰＵモジュールからのアクセスが可能なだけでなく、負荷を制御するためのマイコンからもアクセスが可能となるように共有メモリを有している。
高機能モジュールの一つとしてリンクモジュールの構成の例を図１１に示す。リンクモジュールは通信ＩＦ部６４と、外部バスＩＦ部６２と、ＭＰＵ６０と、共有メモリ６６とを備え、外部バスＩＦ部６２とＭＰＵ６０と共有メモリ６６との間はバス６５で接続され、通信ＩＦ部６４とＭＰＵ６０との間はバス６３で接続されている。
リンクモジュールのＭＰＵ６０が他のプログラマブルコントローラに実装されているリンクモジュール（図示せず）と通信ＩＦ部６４を介しデータを送受信し、共有メモリ６６にお互いのデータを格納する。送受信処理はリンクモジュール自体が常時行なっており、ＣＰＵモジュール１０は外部バス４および外部バスＩＦ部６２を介してこの共有メモリ６６をアクセスすることで他のプログラマブルコントローラの最新のデータを参照できる。また、ＭＰＵ６０はその内部のメモリ（図示せず）にのモジュールが何であるかを知らせるモジュール情報を格納しており、この場合はモジュールがリンクモジュールであることを示すコードが格納される。また、高機能モジュールがリモートモジュールである場合はリモートモジュールであることを示すコードが格納されている。
【０００４】
この高機能モジュールは更に、ＣＰＵモジュールから共有メモリへのアクセス時に競合が発生した場合、高機能モジュール側からＢＵＳＹを出力する手段と、ＢＵＳＹが解除されるまでアクセスを延ばす手段とを設けていた。
【０００５】
【発明が解決しようとする課題】
上記、従来の技術では高機能モジュールに対するアクセスに関しては高機能モジュール側からＢＵＳＹ＿Ｎを出力するため、その期間アクセスを延ばすことが出来るが、通常のＩＯモジュールの場合その手段がないため、最大構成を想定した固定のアクセス時間でアクセスしていた。そのため、実装するモジュールの数が少ない場合でも必要以上のアクセス時間がかかり、ＣＰＵの処理時間が低下する。
【０００６】
本発明の目的は、実装されているモジュールの負荷（数）を認識し、その負荷に応じた最適なアクセス時間で外部ＩＯへアクセス可能なプログラマブルコントローラを提供することを目的としている。
【０００７】
【課題を解決するための手段】
上記目的を達成するために、メインプロセッサを有するＣＰＵモジュールと、該ＣＰＵモジュールにそれぞれ外部バスで接続される入力モジュールと出力モジュールとを備えたプログラマブルコントローラであって、前記ＣＰＵモジュール、入力モジュール、出力モジュール及び高機能モジュールをベースのスロットに装着し、前記外部バスを介して、前記ＣＰＵモジュールと該ＣＰＵモジュール以外のモジュールとの間でデータのやり取りを行い、必要に応じて増設用ベースを少なくとも１つ以上設けることが可能で、前記ＣＰＵモジュールは、前記外部バスのアクセス時間を管理するカウンタを有するバスコントローラを備え、該バスコントローラは、内部状態を示す内部ステートと、該内部ステートの状態を参照し、前記外部バスとのインタフェースを行なう外部バスＩＦ部と、前記内部ステートの状態を参照し、ローカルバスとのインタフェースを行なうローカルバスＩＦ部と、アクセスのための待ち時間を設定するためのウェイト数をカウントするウェイトカウンタと、前記メインプロセッサにより設定されたウェイト数が格納されるとともにバスコントローラからのデータの参照が可能なウェイト数設定レジスタと、該ウェイトカウンタの値とウェイト数設定レジスタの値を比較し、該比較結果を前記内部ステートに反映させる比較器と、から構成されることを特徴とする。
また、前記ＣＰＵモジュールと前記入力モジュールと前記出力モジュールとが実装されるベースを備え、前記メインプロセッサは、前記カウンタの設定値を前記ベースに実装されているモジュールの数から算出することを特徴とする。
さらに、少なくとも前記入力モジュールおよび前記出力モジュールとが実装されて前記ＣＰＵモジュールと前記外部バスを介して接続されるベースを１つ以上備え、前記メインプロセッサは、前記カウンタの設定値を前記ベースの数から算出することを特徴とする。
【０００８】
【発明の実施の形態】
以下、本発明の実施例を図１〜図８を用いて詳細に説明する。
本実施例のプログラマブルコントローラは、図２に示されるようにＣＰＵモジュール１０とこのＣＰＵモジュール１０にそれぞれ外部バス４で接続される入力モジュール１１、１２と出力モジュール１３、１４とを備えたプログラマブルコントローラである。本実施例ではさらに高機能モジュール１５、１６と、図示していないが電源モジュールがＣＰＵモジュール１０にそれぞれ外部バス４を介して接続される。高機能モジュール１５、１６は例えば図１１に示されるようなリンクモジュールが用いられる。これらのＣＰＵモジュール１０、入力モジュール１１、１２、出力モジュール１３、１４、高機能モジュール１５、１６および電源モジュールはベース１７上のスロットに装着され、外部バス４を介してＣＰＵモジュール１０と他の入力モジュール１１、１２、出力モジュール１３、１４、高機能モジュール１５、１６との間でのデータのやりとりが可能となる。
入力モジュール、出力モジュール、高機能モジュール等の数が多い場合には、必要に応じて増設用のベース１８、１９を増設ケーブル４０を介して接続する。増設用のベース１８、１９は少なくとも一つ以上設けられ、ベース１８、１９上の外部バス４１、４２にこれらの入力モジュール、出力モジュール、高機能モジュール等を接続することにより実装できるモジュールの数を最大構成まで増設可能である。
【０００９】
入力モジュール１１、１２の構成例を図９に示す。入力モジュール１１、１２は外部バス４に接続される外部バスＩＦ部５２と、ステータスレジスタ５０と、セレクタ５６を内部に備え、外部には端子台５４が設けられる。ステータスレジスタ５０は１６ビットのレジスタで内部には図１０に示すようにモジュール情報、入出力点数の情報が格納される。モジュール情報はそのモジュールが何であるかを知らせる情報で、入力モジュールの場合は入力モジュールであることを示すコードが格納される。同様に、モジュールが出力モジュールの場合は出力モジュールであることを示すコードがそれぞれ格納される。セレクタ５６はバス５１、５３、５５を介してそれぞれステータスレジスタ５０、外部バスＩＦ部５２、端子台５４に接続される。また、セレクタ５６にはコントロール信号線５７からコントロール信号が供給されて外部バスＩＦ部５２を端子台５４またはステータスレジスタ５０に選択的に接続する。
【００１０】
図３に示すように、ＣＰＵモジュール１０はメインプロセッサとしてのＭＰＵ１と、外部バス４へのアクセスを行なうバスコントローラ３と、システムプログラムが格納されるシステムメモリ５と、ユーザプログラムが格納されるプログラムメモリ６と、内部データが格納されるデータメモリ７とＭＰＵ１及びバスコントローラ３にクロックを供給する発振器８から構成される。ＭＰＵ１はローカルバス２を介してバスコントローラ３と、システムメモリ５と、プログラムメモリ６とに接続される。
図１に示すように、バスコントローラ３は内部状態を示す内部ステート３０と、内部ステート３０の状態を参照し外部バス４とのインタフェースを行なう外部バスＩＦ部３１と、内部ステート３０の状態を参照しローカルバス２とのインタフェースを行なうローカルバスＩＦ部３２と、アクセスのための待ち時間を設定するためのウェイト（ｗａｉｔ）数をカウントするウェイトカウンタ３３と、ＭＰＵ１により設定されたウエイト数が格納されるとともにバスコントローラ３からはこのデータの参照のみが可能なウェイト数設定レジスタ３４と、ウェイトカウンタ３３の値とウェイト数設定レジスタ３４の値を常時比較し、比較結果を内部ステート３０に反映させる比較器３５から構成される。
バスコントローラ３はＭＰＵ１と外部バス４とのインターフェースを行い、ＭＰＵ１からのアクセスに対し外部バス４のアクセスタイミングを制御する。ＭＰＵ１はこのアクセス時間からバスコントローラ３内のウェイト数設定レジスタ３４に格納すべき設定値を算出し、この設定値をウエイト数設定レジスタ３４に格納する。
バスコントローラ３は外部バス４へアクセスする時、あるタイミングで内部に設けられるウェイトカウンタ３３を１ずつカウントアップしそのカウント値がウェイト数設定レジスタ３４に格納されているウェイト数になるまで外部バス４の状態を保持する。これにより外部バス４に実装されている入力モジュール１１、１２、出力モジュール１３、１４等の負荷に対し最適なアクセス時間を算出しアクセス可能となる。すなわち、バスコントローラ３はウェイトカウンタ３３により外部バス４のアクセス時間を管理する機能を有する。
【００１１】
図４に実装ＩＯテーブルの内容を示す。この実装ＩＯテーブルはモジュールが実装可能な各スロットに対しどのモジュールが実装されているかを認識するためのテーブルである。設定方法はユーザがプログラマブルコントローラを起動前に実装ＩＯテーブルに設定するか、あるいはＭＰＵ１がウェイト数設定レジスタにベースに設けられているスロットの数を最大値としてデフォルトで設定後各スロットにアクセスして装着されたモジュールの数を調べてデフォルトの値を補正してテーブルに設定する。デフォルト値を正式な値に補正するには、１つの方法としては各モジュールにあるモジュール毎の固有情報が格納されているステータスレジスタ５０からそのモジュールが何であるかを示すモジュール情報を読み出してどのモジュールがいくつあるかを算出して設定する方法があり、他の方法として各スロットにアクセスして応答の有無でモジュールの有無を判別して応答の数を計数することによりモジュールの数を算出して設定する方法がある。上記のようにユーザがプログラマブルコントローラを起動前に実装ＩＯテーブルに設定しない場合には、ＭＰＵ１はプログラムメモリ６に格納されているユーザプログラムを実行する前に図４に示す実装ＩＯテーブルを作成する。これをもとに図５に示すウェイト数設定テーブルを参照し、バスコントローラ３内のウェイト数設定レジスタ３４に格納する。ウェイト数設定テーブルは図５（ａ）に示すように実装されるモジュールの数（この場合は実装数５毎に区切っている）により参照するテーブルを変更する方法や、増設ベースが接続されるとバスコントローラ３の出力負荷が増加するため、図５（ｂ）に示すように増設ベースの有無により参照するテーブルを変更する方法、あるいは上記２つの方法を組み合わせた方法等がある。
上記のようにメインプロセッサＭＰＵ１は外部バス４に実装されているモジュールの数を認識し、それに従って外部バス４のアクセス時間の算出を行う。すなわち、ＭＰＵ１はウエイトカウンタ３３の設定値をバスコントローラからの出力負荷である外部バス４に実装されているモジュールの数から算出する。
【００１２】
バスコントローラ３は内部ステートでローカルバス２側のインタフェース及び外部バス４側のインタフェースが定義され、各バスの詳細な信号は明記しないがこの内部ステート３０のデコードで作成される。内部ステート３０にはバスコントローラ３が何もアクセスを行なわない“Ｉｄｌｅ”と、バスコントローラ３が外部バス４へのアクセスを行なう“Ｓｔ１”，“Ｓｔ２“，”Ｓｔ３“，”Ｓｔ４“，”Ｓｔｗ“からなる。”Ｓｔ２“から”Ｓｔ３“の間に”Ｓｔｗ“が挿入される。“Ｓｔｗ”の挿入条件はウェイトカウンタ３３とウェイト数設定レジスタ３４の値を比較器３５で比較した結果出力されるＣＭＰ＿ＲＤＹが“０”か、アクセス先のモジュールから出力されるＢＵＳＹ＿Ｎが“０”の時に挿入され、ＣＭＰ＿ＲＤＹ及びＢＵＳＹ＿Ｎが“１”になるまでその状態を保持する。同じように外部バス４の状態も保持したままとなる。尚、内部ステート３０の状態は説明のため６種のステートに分類しているが、バスのアクセスに合せて更に分類しても構わない。
【００１３】
まず、ウェイト数を設定しない場合の外部バス４へのアクセスタイミングを図６に示す。ＭＰＵ１がローカルバス２、バスコントローラ３を介し入力モジュール１１、１２へのアクセスを開始すると、バスコントローラ３の内部ステート３０は次のクロックの立ち上がりから“Ｓｔ１”となりバスコントローラ３が外部バス４へのアクセスを開始する。同時にバスコントローラ３はＭＰＵ１に対しアクセスをウェイトさせるためのＷＡＩＴ＿Ｎを“０”にする。これにより内部ステート３０は次のクロックの立ち上がりで“Ｓｔ２”に遷移し、その次のクロックの立ち上がりでＢＵＳＹ＿Ｎ，ＣＭＰ＿ＲＤＹ共“１”であるため“Ｓｔ３”に遷移する。同時にバスコントローラ３はＷＡＩＴ＿Ｎを“１”とし、ＭＰＵ１に対しアクセスの終了を知らせる。以降クロックの立ち上がりが来るたびに内部ステートが“Ｓｔ４”から“Ｉｄｌｅ”になる。同時にローカルバス２もアクセスが終了する。次に高機能モジュール１５、１６の共有メモリアクセスを実行する。本アクセスも入力モジュールの場合と同様に“Ｓｔ１”から外部アクセスを開始し、“Ｓｔ２”の時点でＢＵＳＹ＿Ｎが“０”であるため“Ｓｔｗ”に遷移する。以降ＢＵＳＹ＿Ｎが“１”になるまで“Ｓｔｗ”を保持し、その後“Ｓｔ３”，“Ｓｔ４”と遷移し外部バスアクセスを終了する。
【００１４】
次にウェイト数設定レジスタに設定値“４”が設定されている場合の入力モジュール１１、１２へのアクセスのタイミングを図７に示す。ＭＰＵ１がローカルバス２、バスコントローラ３を介し入力モジュール１１、１２へのアクセスを開始すると、バスコントローラ３の内部ステート３０は次のクロックの立ち上がりから“Ｓｔ１”となりバスコントローラ３が外部バス４へのアクセスを開始する。内部ステート３０が“Ｓｔ２”となった時点でＣＭＰ＿ＲＤＹが“０”であるため、“Ｓｔｗ”へと遷移しウェイトカウンタ３３をクロックの立ち上がり毎に更新する。その後ＣＭＰ＿ＲＤＹが“１”になったらウエイトカウンタ３３の更新はやめ、内部ステート３０は“Ｓｔ３”に遷移する。ウエイトカウンタ３３のリセットは電源立上げ時及び外部バス４へのアクセス終了時に行われる。
【００１５】
次にウェイト数設定レジスタ３４に設定値“４”が設定されている場合の高機能モジュール１５、１６へのアクセスのタイミングを図８に示す。ＭＰＵ１がローカルバス２を介しバスコントローラ３に対し高機能モジュール１５、１６へのアクセスを開始すると、バスコントローラ３の内部ステート３０は次のクロックの立ち上がりから“Ｓｔ１”となりバスコントローラ３が外部バス４へのアクセスを開始する。内部ステート３０が“Ｓｔ２”となった時点でＣＭＰ＿ＲＤＹが“０”であるため、“Ｓｔｗ”へと遷移しウェイトカウンタ３３をクロックの立ち上がり毎に更新する。その後ＣＭＰ＿ＲＤＹが“１”になったらウエイトカウンタ３３の更新はやめる。一方ＢＵＳＹ＿Ｎがまだ“０”であるため、内部ステート３０は“Ｓｔｗ”を保持し、“１”となった時点で“Ｓｔ３”に遷移する。その後クロックの立ち上がり毎に“Ｓｔ４”，“Ｉｄｌｅ”と遷移し、ウェイトカウンタ３３もクリアされる。
【００１６】
本実施例によれば，実装されるＩＯモジュール等の負荷(数)によって最適なウェイト数を算出し、これに従ってアクセス時間が決定されるためプログラマブルコントローラの全体性能が向上する。
【００１７】
【発明の効果】
本発明によれば、実装されているモジュールの負荷（数）を認識し、その負荷に応じた最適なアクセス時間で外部ＩＯへアクセス可能なプログラマブルコントローラを得ることができる。
【図面の簡単な説明】
【図１】本発明の一実施例におけるプログラマブルコントローラのバスコントローラの構成を示すブロック図である。
【図２】本発明の一実施例におけるプログラマブルコントローラの構成を示すブロック図である。
【図３】本発明の一実施例におけるプログラマブルコントローラのＣＰＵモジュールの構成を示すブロック図である。
【図４】本発明の一実施例におけるプログラマブルコントローラの実装ＩＯテーブルを示す図である。
【図５】本発明の一実施例におけるプログラマブルコントローラのウェイト数設定テーブルを示す図で、同図（ａ）は実装されるモジュールの数毎に設定値を区切った例を示す図、同図（ｂ）は増設ベースの数毎に設定値を区切った例を示す図である。
【図６】本発明の一実施例におけるプログラマブルコントローラのウェイト数を設定しない場合の外部バスアクセスタイミングを示す図である。
【図７】本発明の一実施例におけるプログラマブルコントローラのウェイト数設定レジスタに設定値“４”が設定されている場合の入出力モジュールアクセスのタイミングを示す図である。
【図８】本発明の一実施例におけるプログラマブルコントローラのウェイト数設定レジスタに設定値“４”が設定されている場合の高機能モジュールアクセスのタイミングを示す図である。
【図９】本発明の一実施例におけるプログラマブルコントローラの入力モジュールの構成を示すブロック図である。
【図１０】本発明の一実施例におけるプログラマブルコントローラの入力モジュールのステータスレジスタを示す図である。
【図１１】本発明の一実施例におけるプログラマブルコントローラの高機能モジュールの一種であるリンクモジュールの構成を示すブロック図である。
【符号の説明】
１：メインプロセッサ、２：ローカルバス、３：バスコントローラ、
４：外部バス、５：システムメモリ、６プログラムメモリ、
７：データメモリ、８：発振器、１０：ＣＰＵモジュール、
１１、１２：入力モジュール、１３、１４：出力モジュール、
１５、１６：高機能モジュール、１７、１８、１９：ベース、
３０：内部ステート、３１：外部バスＩＦ部、３２：ローカルバスＩＦ部、
３３：ウエイトカウンタ、３４：ウエイト数設定レジスタ、３５：比較器、
５０：ステータスレジスタ、６６：共有メモリ。
【図１】
0003930964.tif 000002
【図２】
0003930964.tif 000003
【図３】
0003930964.tif 000004
【図４】
0003930964.tif 000005
【図５】
0003930964.tif 000006
【図６】
0003930964.tif 000007
【図７】
0003930964.tif 000008
【図８】
0003930964.tif 000009
【図９】
0003930964.tif 000010
【図１０】
0003930964.tif 000011
【図１１】
0003930964.tif 000012