(57)【特許請求の範囲】
【請求項１】
上位機器から受信した上位通信コマンドに応じて下位機器に下位通信コマンドを送信し、前記下位機器から返送された下位通信レスポンスに応じて前記上位機器に上位通信レスポンスを返送する通信装置において、
前記下位通信レスポンスのデータを蓄積する下位通信データバッファと、
アクセス先が同一の前記上位通信コマンドを複数回受信したとき、これと同一の上位通信コマンドを次回受信するまでに前記下位通信レスポンスのデータをあらかじめ取得できるように、前記アクセス先が同一の上位通信コマンドの受信タイミングに基づいて前記下位通信コマンドの発行時刻を決定し、決定した発行時刻に達したとき前記下位通信コマンドを前記下位機器に送信し、この下位通信コマンドに応じて前記下位機器から送信された前記下位通信レスポンスのデータを前記下位通信データバッファに格納し、前記アクセス先が同一の上位通信コマンドを次に受信したとき、前記下位通信データバッファから読み出したデータに基づいて前記上位通信レスポンスを前記上位機器に返送する通信処理手段とを有することを特徴とする通信装置。
【請求項２】
請求項１記載の通信装置において、
前記通信処理手段は、前記上位通信コマンドの前回の受信時刻からこれと同一の上位通信コマンドの最新の受信時刻までの時間間隔と、前記上位通信コマンドの最新の受信時刻と、前記下位通信コマンドの最新の送信時刻からこの下位通信コマンドに応じた前記下位通信レスポンスを受信するまでのレスポンス時間とに基づいて、前記発行時刻を決定することを特徴とする通信装置。
【請求項３】
請求項２記載の通信装置において、
前記通信処理手段は、上位通信処理手段と下位通信処理手段とからなり、
前記上位通信処理手段は、前記上位機器から前記上位通信コマンドを受信して前記最新の受信時刻と前記時間間隔とを計測し、前記アクセス先が同一の上位通信コマンドの３回目以降の受信の際、前記下位通信データバッファからデータを読み出して前記上位通信レスポンスを作成し、この上位通信レスポンスを前記上位機器に返送し、
前記下位通信処理手段は、前記時間間隔と前記最新の受信時刻と前記レスポンス時間とに基づいて前記下位通信コマンドの発行時刻を決定し、決定した発行時刻に達したとき前記下位通信コマンドを作成して前記下位機器に送信し、この下位通信コマンドに応じて前記下位機器から送信された前記下位通信レスポンスのデータを前記下位通信データバッファに格納することを特徴とする通信装置。
【請求項４】
請求項３記載の通信装置において、
前記通信装置は、第１の下位通信テーブルと第２の下位通信テーブルを有し、前記下位通信データバッファは、第１の下位通信データバッファと第２の下位通信データバッファとからなり、
前記下位通信処理手段は、第１、第２の下位通信テーブルのうちいずれか一方を実行用として他方を編集用とすると共に、第１、第２の下位通信データバッファのうちいずれか一方を実行用として他方を編集用とし、前記実行用下位通信テーブルに記録された前記発行時刻に達したとき、前記下位通信コマンドを送信して、前記下位通信レスポンスのデータを前記実行用下位通信データバッファに格納し、前記発行時刻に達した前記下位通信コマンドを全て送信し終えたとき、前記発行時刻の決定を行って、決定した発行時刻を前記編集用下位通信テーブルに記録すると共に、前記実行用下位通信データバッファに格納されたデータを前記編集用下位通信データバッファにコピーし、前記編集用下位通信テーブルと前記編集用下位通信データバッファとを実行用に切り替えることを特徴とする通信装置。
【請求項５】
請求項１記載の通信装置において、
前記通信処理手段は、前記アクセス先が同一の上位通信コマンドに対して、アクセス先が連続または重複する上位通信コマンドを受信したとき、これらの上位通信コマンドを１つにまとめた上で、前記下位通信コマンドの発行時刻を決定することを特徴とする通信装置。
【請求項６】
請求項１記載の通信装置において、
前記通信処理手段は、前記アクセス先が同一の上位通信コマンドの最新の受信時刻が現時刻から所定時間以上前の場合、この上位通信コマンドのバッファリング有効フラグを０に初期化することを特徴とする通信装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ等の上位機器と計測機器等の下位機器との間で通信プロトコル変換を行う通信装置に関するものである。
【０００２】
【従来の技術】
従来より、コンピュータ等の上位機器と計測機器等の下位機器との間で通信プロトコル変換を行う通信装置（以下、ゲートウェイと呼ぶ）を用いる通信システムが知られている。図１は本発明の実施の形態となる通信システムの構成を示すブロック図であるが、この図１を用いて従来の通信システムを説明する。
【０００３】
上位機器２は、上位通信ネットワーク５を介してゲートウェイ３に上位通信コマンドを送信し、ゲートウェイ３は、受信した上位通信コマンドを下位通信コマンドに変換し、下位通信ネットワーク４を介して下位機器１に送信する。下位通信コマンドを受信した下位機器１は、下位通信ネットワーク４を介してゲートウェイ３に下位通信レスポンスを送信し、ゲートウェイ３は、受信した下位通信レスポンスを上位通信レスポンスに変換し、上位通信ネットワーク５を介して上位機器２に送信する。
【０００４】
図１０（ａ）に上位通信コマンドの１例を示し、図１０（ｂ）に下位通信コマンドの１例を示す。図１０において、ＳＴＸはコマンドの始まりを示すコントロールコード、ＥＴＸはコマンド部の終わりを示すコントロールコード、ＣＲ，ＬＦはコマンドの終わりを示すコントロールコードである。上位通信コマンドの場合、宛先ＡＤＲＳにはゲートウェイ３のアドレスが設定され、サブＡＤＲＳには下位機器１のアドレスが設定される。下位通信コマンドの場合、宛先ＡＤＲＳには上位通信コマンドのサブＡＤＲＳからコピーした下位機器１のアドレスが設定される。コマンド部には、下位機器１への要求を示すコードあるいば番号等が設定される。さらに、読出コマンドの場合、コマンド部には、下位機器１のバッファ領域を指定する読出アドレスと、読み出すべきデータの長さを指定するレングスが格納される。
【０００５】
従来、ゲートウェイ３では、ダイレクト通信方法とバッファリング通信方法が用意されている。
ダイレクト通信方法は、上述した通信方法であり、上位通信コマンドでサブＡＤＲＳが設定されている場合、このサブＡＤＲＳを下位通信コマンドの宛先ＡＤＲＳにコピーして下位機器１に送信し、下位機器１からの下位通信レスポンスを上位通信レスポンスに変換して上位機器２に返送する。
【０００６】
一方、バッファリング通信において、ゲートウェイ３は、上位機器２が読出コマンドを用いて要求するデータを下位機器１から予め読み出してバッファに蓄積しておき、上位機器２からの読出コマンドを受信したとき、下位機器１との通信を行うことなく、予め読み出しておいたデータを即時に上位通信レスポンスとして返送する。このようなバッファリング通信では、上位通信コマンドを送信してから上位通信レスポンスを受信するまでの応答時間において、ゲートウェイ３と下位機器１との通信時間分に相当する時間を短縮することができるので、通信速度を向上させることができる。
【０００７】
【発明が解決しようとする課題】
以上のようにゲートウェイを用いた通信システムでは、ダイレクト通信方法とバッファリング通信方法が用意されている。
しかしながら、ダイレクト通信方法では、上位機器２が上位通信コマンドを送信してから上位通信レスポンスを受信するまでの応答時間にゲートウェイ３と下位機器１との通信時間が含まれるため、上位機器２が上位通信コマンドを送信してから上位通信レスポンスを受信するまでに時間がかかるという問題があった。
【０００８】
これに対して、バッファリング通信方法では、ダイレクト通信方法よりも通信効率を向上させることができる。しかし、バッファリング通信方法では、上位機器２からゲートウェイ３に対して手動でバッファ領域を設定する必要があり、またバッファリング通信を行うための上位通信コマンドを用意する必要がある。したがって、このような機能を実現するための設定プログラムが上位機器２に必要となり、このプログラム作成に手間がかかるという問題があった。また、バッファリングも、すべて定周期で行うため、無駄な通信が発生して、ダイレクト通信に遅れが生じるという問題点があった。
本発明は、上記課題を解決するためになされたもので、バッファリング通信に要する手間を削減すると共に、効率のよい通信を行うことができる通信装置を提供することを目的とする。
【０００９】
【課題を解決するための手段】
本発明は、上位機器（２）から受信した上位通信コマンドに応じて下位機器（１）に下位通信コマンドを送信し、前記下位機器から返送された下位通信レスポンスに応じて前記上位機器に上位通信レスポンスを返送する通信装置（３）において、前記下位通信レスポンスのデータを蓄積する下位通信データバッファ（３７，３８）と、アクセス先が同一の前記上位通信コマンドを複数回受信したとき、これと同一の上位通信コマンドを次回受信するまでに前記下位通信レスポンスのデータをあらかじめ取得できるように、前記アクセス先が同一の上位通信コマンドの受信タイミングに基づいて前記下位通信コマンドの発行時刻を決定し、決定した発行時刻に達したとき前記下位通信コマンドを前記下位機器に送信し、この下位通信コマンドに応じて前記下位機器から送信された前記下位通信レスポンスのデータを前記下位通信データバッファに格納し、前記アクセス先が同一の上位通信コマンドを次に受信したとき、前記下位通信データバッファから読み出したデータに基づいて前記上位通信レスポンスを前記上位機器に返送する通信処理手段（３１，３２）とを有するものである。
【００１０】
また、本発明の通信装置の１構成例において、前記通信処理手段は、前記上位通信コマンドの前回の受信時刻からこれと同一の上位通信コマンドの最新の受信時刻までの時間間隔と、前記上位通信コマンドの最新の受信時刻と、前記下位通信コマンドの最新の送信時刻からこの下位通信コマンドに応じた前記下位通信レスポンスを受信するまでのレスポンス時間とに基づいて、前記発行時刻を決定するものである。
また、本発明の通信装置の１構成例において、前記通信処理手段は、上位通信処理手段（３１）と下位通信処理手段（３２）とからなり、前記上位通信処理手段は、前記上位機器から前記上位通信コマンドを受信して前記最新の受信時刻と前記時間間隔とを計測し、前記アクセス先が同一の上位通信コマンドの３回目以降の受信の際、前記下位通信データバッファからデータを読み出して前記上位通信レスポンスを作成し、この上位通信レスポンスを前記上位機器に返送し、前記下位通信処理手段は、前記時間間隔と前記最新の受信時刻と前記レスポンス時間とに基づいて前記下位通信コマンドの発行時刻を決定し、決定した発行時刻に達したとき前記下位通信コマンドを作成して前記下位機器に送信し、この下位通信コマンドに応じて前記下位機器から送信された前記下位通信レスポンスのデータを前記下位通信データバッファに格納するものである。
【００１１】
また、本発明の通信装置の１構成例は、第１の下位通信テーブル（３５）と第２の下位通信テーブル（３６）を有し、前記下位通信データバッファは、第１の下位通信データバッファ（３７）と第２の下位通信データバッファ（３８）とからなり、前記下位通信処理手段は、第１、第２の下位通信テーブルのうちいずれか一方を実行用として他方を編集用とすると共に、第１、第２の下位通信データバッファのうちいずれか一方を実行用として他方を編集用とし、前記実行用下位通信テーブルに記録された前記発行時刻に達したとき、前記下位通信コマンドを送信して、前記下位通信レスポンスのデータを前記実行用下位通信データバッファに格納し、前記発行時刻に達した前記下位通信コマンドを全て送信し終えたとき、前記発行時刻の決定を行って、決定した発行時刻を前記編集用下位通信テーブルに記録すると共に、前記実行用下位通信データバッファに格納されたデータを前記編集用下位通信データバッファにコピーし、前記編集用下位通信テーブルと前記編集用下位通信データバッファとを実行用に切り替えるものである。
また、本発明の通信装置の１構成例において、前記通信処理手段は、前記アクセス先が同一の上位通信コマンドに対して、アクセス先が連続または重複する上位通信コマンドを受信したとき、これらの上位通信コマンドを１つにまとめた上で、前記下位通信コマンドの発行時刻を決定するものである。
また、本発明の通信装置の１構成例において、前記通信処理手段は、前記アクセス先が同一の上位通信コマンドの最新の受信時刻が現時刻から所定時間以上前の場合、この上位通信コマンドのバッファリング有効フラグを０に初期化するものである。
【００１２】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して詳細に説明する。図１は本発明の実施の形態となる通信システムの構成を示すブロック図である。
本実施の形態の通信システムは、例えば温度や圧力などのプロセス変数の測定・制御を行う計測機器等の下位機器１と、下位機器１に対して指令を発すると共に、下位機器１からデータを読み出すコンピュータ等の上位機器２と、下位機器１と上位機器２との間で通信プロトコル変換を行う通信装置であるゲートウェイ３と、下位機器１とゲートウェイ３とを接続する、例えばＲＳ−２３２ＣやＲＳ−４８５等の下位通信ネットワーク４と、上位機器２とゲートウェイ３とを接続する、例えばイーサネット等の上位通信ネットワーク５とを有している。
【００１３】
ゲートウェイ３は、上位通信ネットワーク５を介して上位機器２からの上位通信コマンドを受信し、上位機器２に上位通信レスポンスを送信する上位通信処理手段３１と、下位通信ネットワーク４を介して下位機器１に下位通信コマンドを送信し、下位機器１からの下位通信レスポンスを受信する下位通信処理手段３２と、上位通信コマンドに関する情報を記録するための上位通信テーブル３３と、下位機器１へのダイレクト通信によって取得したデータを格納するための上位通信データバッファ３４と、下位通信コマンドに関する情報を記録するための第１の下位通信テーブル３５及び第２の下位通信テーブル３６と、下位機器１へのスキャン通信によって取得したデータを格納するための第１の下位通信データバッファ３７及び第２の下位通信データバッファ３８とを有している。
【００１４】
次に、以上のような通信システムの動作を説明する。図２は上位通信処理手段３１の動作を示すフローチャート図、図３は上位通信テーブル３３及び上位通信データバッファ３４の構造を示す図である。
本実施の形態では、データの読出先を示す読出アドレス、読み出すべきデータの長さを示すレングスの少なくとも一方が異なる上位通信コマンド（読出コマンド）毎に上位通信テーブル３３に１つのレコード（テーブル３３の横１行）が生成される。
【００１５】
図３において、有効フラグは、初期値が「０」であり、読出アドレス及びレングスが同一の上位通信コマンド（読出コマンド）を２回以上受信した後に「１」となる。タイムスタンプは読出コマンドを受信した時刻、時間間隔は読出アドレス及びレングスが同一の読出コマンドを前回受信したときから次に受信するまでの経過時間、第１のレスポンス時間は下位機器１へのダイレクト通信を実行してから下位通信レスポンスを受信するまでの時間である。また、下位ポインタは、上位通信テーブル３３に記録されたレコードに対応する実行用下位通信テーブルのレコード番号を示す下位通信テーブルポインタである。そして、バッファポインタは、上位通信テーブル３３に記録されたレコードに基づいてダイレクト通信を実行したとき、下位機器１から受信したデータを格納した上位通信データバッファ３４のバッファ領域を示す上位通信バッファポインタである。
【００１６】
まず、上位通信処理手段３１は、上位通信ネットワーク５を介して上位機器２からの上位通信コマンドを受信する（図２ステップ１０１）。上位通信処理手段３１は、受信した上位通信コマンドが下位機器１からデータを読み出す読出コマンドで、かつこの読出コマンドに含まれる読出アドレス及びレングスが上位通信テーブル３３に記録されていない場合（ステップ１０２においてＮＯ）、この読出コマンドの読出アドレス及びレングスと、この読出コマンドを受信した時刻を示すタイムスタンプとを上位通信テーブル３３の未使用のレコード（ここでは、レコードＡとする）に書き込む（ステップ１０３）。このとき、上位通信処理手段３１は、レコードＡの有効フラグについては初期値「０」のままとする。
【００１７】
続いて、上位通信処理手段３１は、下位通信処理手段３２に対して下位機器１へのダイレクト通信を要求し、この要求に応じて下位通信処理手段３２は、下位機器１へのダイレクト通信を実行する（ステップ１０４）。すなわち、下位通信処理手段３２は、上位通信処理手段３１から渡された読出アドレス及びレングスに基づいて下位通信コマンド（読出コマンド）を作成し、この下位通信コマンドを下位通信ネットワーク４を介して読出先の下位機器１に送信する。
【００１８】
下位通信コマンドを受信した下位機器１は、下位通信コマンドで指定されたバッファ等のアドレスから指定されたレングスのデータを取り出し、このデータを含む下位通信レスポンスをゲートウェイ３に返信する。
この下位通信レスポンスを受信した下位通信処理手段３２は、受信した下位通信レスポンスから受信データを取り出して上位通信処理手段３１に渡す。
【００１９】
上位通信処理手段３１は、上位通信データバッファ３４にバッファ領域を設定して、このバッファ領域に下位通信処理手段３２から渡された受信データを格納し、この受信データの読み出しを要求した読出コマンドに対応する上位通信テーブル３３のレコードＡに、同受信データの格納先バッファ領域を示す上位通信バッファポインタを書き込む。さらに、上位通信処理手段３１は、同レコードＡに、下位機器１へのダイレクト通信（ステップ１０４）が実行されてから下位通信レスポンスを受け取るまでの時間である第１のレスポンス時間を書き込む（ステップ１０５）。
【００２０】
そして、上位通信処理手段３１は、前記受信データを含む上位通信レスポンスを作成して、この上位通信レスポンスを上位通信ネットワーク５を介して上位機器２に送信する（ステップ１０６）。
こうして、読出アドレスとレングスの少なくとも一方が異なる上位通信コマンド（読出コマンド）を新規に受信したときの処理が終了する。
【００２１】
次に、上位通信処理手段３１は、上位機器２から上位通信コマンドを受信したとき（ステップ１０１）、この上位通信コマンドが読出コマンドで、かつこの読出コマンドに含まれる読出アドレス及びレングスが上位通信テーブル３３のレコード（ここでは、レコードＢとする）に既に記録されている場合（ステップ１０２においてＹＥＳ）、このレコードＢに記録された有効フラグが「０」かどうかを調べる（ステップ１０７）。
【００２２】
レコードＢに記録された有効フラグが「０」の場合、上位通信処理手段３１は、この有効フラグを「１」に書き換えるとともに、読出アドレス及びレングスが今回と同一の読出コマンドを前回受信したときから今回受信するまでの経過時間を、同レコードＢの時間間隔として書き込む。経過時間は、今回の読出コマンドを受信した時間からレコードＢに記録されたタイムスタンプを減算することで求めることができる。さらに、上位通信処理手段３１は、レコードＢのタイムスタンプを今回の読出コマンドを受信した時刻に書き換える（ステップ１０８）。
【００２３】
続いて、上位通信処理手段３１は、下位通信処理手段３２に対して下位機器１へのダイレクト通信を要求し、この要求に応じて下位通信処理手段３２は、下位機器１へのダイレクト通信を実行する（ステップ１０４）。下位通信処理手段３２からの下位通信コマンドを受信した下位機器１は、前記と同様に、下位通信レスポンスをゲートウェイ３に返信する。ゲートウェイ３の下位通信処理手段３２は、受信した下位通信レスポンスから受信データを取り出して上位通信処理手段３１に渡す。
【００２４】
上位通信処理手段３１は、下位通信処理手段３２から渡された受信データを上位通信データバッファ３４に格納し、今回のデータ読み出しを要求した読出コマンドに対応する、テーブル３３のレコードＢの上位通信バッファポインタを今回の受信データの格納先バッファ領域を示す値に書き換える。さらに、上位通信処理手段３１は、同レコードＢに記録された第１のレスポンス時間と今回のデータ受信に要した第１のレスポンス時間を比較して、今回の第１のレスポンス時間の方が長い場合、レコードＢの第１のレスポンス時間を今回の第１のレスポンス時間に書き換える（ステップ１０５）。
【００２５】
そして、上位通信処理手段３１は、今回の受信データを含む上位通信レスポンスを作成して上位機器２に送信する（ステップ１０６）。
こうして、読出アドレス及びレングスが同一の上位通信コマンドを２回受信したときの処理が終了する。
【００２６】
次に、上位通信処理手段３１は、上位機器２から上位通信コマンドを受信したとき（ステップ１０１）、この上位通信コマンドが読出コマンドで、かつこの読出コマンドに含まれる読出アドレス及びレングスが上位通信テーブル３３のレコード（ここでは、レコードＣとする）に既に記録されている場合、このレコードＣに記録された有効フラグが「０」かどうかを調べる（ステップ１０７）。
【００２７】
レコードＣに記録された有効フラグが「１」の場合、上位通信処理手段３１は、レコードＣに記録された時間間隔を今回の時間間隔（読出アドレス及びレングスが今回と同一の読出コマンドを前回受信したときから今回受信するまでの経過時間）に書き換え、同レコードＣのタイムスタンプを今回の読出コマンドを受信した時刻に書き換える。さらに、上位通信処理手段３１は、実行用下位通信データバッファからデータを読み出す（ステップ１０９）。このデータ読み出しについては後述する。
【００２８】
そして、上位通信処理手段３１は、実行用下位通信データバッファから読み出したデータを含む上位通信レスポンスを作成して上位機器２に送信する（ステップ１１０）。
こうして、読出アドレス及びレングスが同一の上位通信コマンドを３回以上受信したときの処理が終了する。
【００２９】
次に、下位通信処理手段３２は、前述のように、上位通信処理手段３１からダイレクト通信の要求があったときにダイレクト通信を実行すると共に、以下のようなバックグランド処理を実行する。図４、図５、図６は下位通信処理手段３２の動作を示すフローチャート図、図７は実行用下位通信テーブル及び実行用下位通信データバッファの構造を示す図、図８は編集用下位通信テーブル及び編集用下位通信データバッファの構造を示す図である。
【００３０】
実行用下位通信テーブル及び実行用下位通信データバッファは、読出アドレス及びレングスが同一の上位通信コマンドを２回以上受信したとき、これと同一の上位通信コマンドを次回受信するまでに下位通信レスポンスのデータを予め取得するためのスキャン通信の実行に使用され、編集用下位通信テーブル及び編集用下位通信データバッファは、実行用下位通信テーブル及び実行用下位通信データバッファの作成の際に使用される。
【００３１】
第１、第２の下位通信テーブル３５，３６は、一方が実行用下位通信テーブルとして使用されている場合、もう一方が編集用下位通信テーブルとして使用される。同様に、第１、第２の下位通信データバッファ３７，３８は、一方が実行用下位通信データバッファとして使用されている場合、もう一方が編集用下位通信データバッファとして使用される。
【００３２】
図７、図８において、Ｎｏは実行用下位通信テーブル、編集用下位通信テーブルのレコード番号、コマンド発行時刻は下位機器１に対して下位通信コマンドを送信してスキャン通信を実行すべき時刻、第２のレスポンス時間は下位機器１へのスキャン通信を実行してから下位通信レスポンスを受信するまでの時間である。また、バッファポインタは、実行用下位通信テーブルに記録されたレコードに基づいてスキャン通信を実行したとき、下位機器１から受信したデータを格納した下位通信データバッファのバッファ領域を示す下位通信バッファポインタである。
【００３３】
まず、下位通信処理手段３２は、上位通信テーブル３３を常時監視して有効フラグが「１」のレコードを検索し（図４ステップ２０１）、有効フラグが「１」のレコードが存在する場合、このレコードに記録された読出コマンドの読出先領域が実行用下位通信テーブルに記録されているかどうかを判定する（ステップ２０２）。
【００３４】
データの読出先領域は、読出先領域の先頭番地を示す読出アドレスと領域の長さを示すレングスとによって規定される。したがって、下位通信処理手段３２は、有効フラグが「１」のレコードに記録された読出アドレス及びレングスと同じ値が実行用下位通信テーブルに記録されている場合、記録有りと判断する。
【００３５】
実行用下位通信テーブルに記録がない場合、下位通信処理手段３２は、上位通信テーブル３３から取り出した有効フラグが「１」のレコードに対して、読出先領域が連続または重複している、有効フラグが「１」のレコードが上位通信テーブル３３に存在するかどうかを判定する（ステップ２０３）。
【００３６】
読出先領域が連続または重複しているレコードが存在しない場合、下位通信処理手段３２は、上位通信テーブル３３から取り出した有効フラグが「１」のレコードの読出アドレス、レングス及び第２のレスポンス時間を編集用下位通信テーブルの未使用のレコード（ここでは、レコードＤとする）に書き込む（ステップ２０５）。
【００３７】
編集用下位通信テーブルに書き込むべき第２のレスポンス時間は、スキャン通信におけるレスポンス時間である。しかしながら、スキャン通信が実行されていない読出コマンド、すなわち読出アドレス及びレングスが実行用下位通信テーブルに記録されていない読出コマンドの場合、スキャン通信が実行されておらず、第２のレスポンス時間が未計測なので、上位通信テーブル３３に記録されたダイレクト通信における第１のレスポンス時間を第２のレスポンス時間として編集用下位通信テーブルに書き込む。
【００３８】
また、下位通信処理手段３２は、ステップ２０５において、コマンド発行時刻を編集用下位通信テーブルのレコードＤに書き込む。コマンド発行時刻は、上位通信テーブル３３から取り出した有効フラグが「１」のレコードに記録されたタイムスタンプと時間間隔とを加算することにより、このレコードに対応する読出コマンドの次回の受信時刻を求め、この受信時刻から編集用下位通信テーブルに記録した第２のレスポンス時間を減算することで求めることができる。
【００３９】
編集用下位通信テーブルの作成後、下位通信処理手段３２は、この編集用下位通信テーブルを新たに実行用下位通信テーブルとすると共に、編集用下位通信データバッファを新たに実行用下位通信データバッファとし、実行用下位通信テーブルのレコードＤの番号をこのレコードの作成元となった上位通信テーブル３３の対応するレコードに下位通信テーブルポインタとして書き込む（ステップ２０６）。なお、スキャン通信が未実行の場合、編集用下位通信データバッファにはデータが記録されていない。また、ステップ２０６において、実行用下位通信テーブルから編集用下位通信テーブルに変わったテーブルのデータは全て消去される。
【００４０】
一方、ステップ２０３において、読出先領域が連続または重複しているレコード（読出コマンド）が存在する場合、下位通信処理手段３２は、上位通信テーブル３３に記録された、読出先領域が連続または重複している複数の読出コマンドを１つにまとめる編集を行う（ステップ２０４）。編集後の読出アドレスとしては、連続または重複している読出先領域の先頭を示す読出アドレスを用いる。
【００４１】
例えば、図９（ａ）のように読出アドレスが０００１番地、００１１番地、００２１番地でレングスが１０の３つの読出コマンドを１つにまとめる場合、あるいは図９（ｂ）のように読出アドレスが０００１番地、００１０番地、００１９番地でレングスが１２の３つの読出コマンドを１つにまとめる場合、編集後の読出アドレスは０００１番地、編集後のレングスは３０となる。
【００４２】
続いて、下位通信処理手段３２は、編集後の読出アドレス及びレングスと、コマンド発行時刻と、第２のレスポンス時間とを編集用下位通信テーブルの未使用のレコード（ここでは、レコードＥとする）に書き込む（ステップ２０５）。
読出先領域が連続している複数の読出コマンドを１つにまとめた場合には、これら読出コマンドに対応する、上位通信テーブル３３の各第１のレスポンス時間を合計して編集後のレスポンス時間を計算し、このレスポンス時間を第２のレスポンス時間として編集用下位通信テーブルに書き込む。
【００４３】
また、読出先領域が重複している複数の読出コマンドを１つにまとめた場合には、これら読出コマンドに対応する、上位通信テーブル３３の各第１のレスポンス時間を合計した値をＴtotal 、編集後のレングスをＬtotal 、編集時に取り除いた重複箇所のレングスをＬとしたとき、例えばＴtotal −（Ｔtotal ×Ｌ／Ｌtotal ）によって編集後のレスポンス時間を計算し、このレスポンス時間を第２のレスポンス時間として編集用下位通信テーブルに書き込めばよい。
【００４４】
また、複数の読出コマンドを１つにまとめた場合、下位通信処理手段３２は、複数の読出コマンドのうち最も古いタイムスタンプと最も短い時間間隔と、編集後のレスポンス時間とを用いて、前述のようにコマンド発行時刻を計算する。
そして、下位通信処理手段３２は、作成した編集用下位通信テーブルを新たに実行用下位通信テーブルとすると共に、編集用下位通信データバッファを新たに実行用下位通信データバッファとし、実行用下位通信テーブルのレコードＥの番号をこのレコードの作成元となった上位通信テーブル３３の対応するレコードに下位通信テーブルポインタとして書き込む（ステップ２０６）。
【００４５】
次に、下位通信処理手段３２は、上位通信テーブル３３から取り出した有効フラグが「１」のレコードに記録された読出アドレス及びレングスが実行用下位通信テーブルに記録されている場合（ステップ２０２においてＹＥＳ）、この読出アドレス及びレングスと、実行用下位通信テーブルの対応するレコードに記録された第２のレスポンス時間と、コマンド発行時刻とを編集用下位通信テーブルの未使用のレコード（ここでは、レコードＦとする）に書き込む（ステップ２０７）。コマンド発行時刻の求め方は、前述のとおりである。
【００４６】
続いて、下位通信処理手段３２は、実行用下位通信テーブルの対応するレコードに記録された下位通信バッファポインタを参照して、このバッファポインタが示す実行用下位通信データバッファのバッファ領域からデータを取り出し、取り出したデータを編集用下位通信データバッファに格納し、この編集用下位通信データバッファのデータ格納先を示す下位通信バッファポインタを編集用下位通信テーブルのレコードＦに書き込む（ステップ２０８）。
【００４７】
そして、下位通信処理手段３２は、作成後の編集用下位通信テーブルを新たに実行用下位通信テーブルとすると共に、編集用下位通信データバッファを新たに実行用下位通信データバッファとし、実行用下位通信テーブルのレコードＦの番号をこのレコードの作成元となった上位通信テーブル３３の対応するレコードに下位通信テーブルポインタとして書き込む（ステップ２０６）。
【００４８】
上位通信テーブル３３に記録された有効フラグが「１」の全てのレコードについて処理が終了するまで（ステップ２０９においてＹＥＳ）、以上のようなステップ２０１〜２０８の処理を繰り返す。
次に、下位通信処理手段３２は、図４の処理と並行して、実行用下位通信テーブルを常時参照し、実行用下位通信テーブルに記録されたコマンド発行時刻に達したかどうかを判定する（図５ステップ３０１）。
【００４９】
下位通信処理手段３２は、現時刻が実行用下位通信テーブルに記録されたコマンド発行時刻に達した場合、下位機器１へのスキャン通信を実行する（ステップ３０２）。すなわち、下位通信処理手段３２は、現時刻と一致するコマンド発行時刻が記録された実行用下位通信テーブルのレコード（ここでは、レコードＧとする）から読出アドレス及びレングスを取り出して、この読出アドレス及びレングスを基に下位通信コマンド（読出コマンド）を作成し、作成した下位通信コマンドを下位通信ネットワーク４を介して読出先の下位機器１に送信する。
【００５０】
下位通信コマンドを受信した下位機器１は、下位通信コマンドで指定されたバッファ等のアドレスから指定されたレングスのデータを取り出し、このデータを含む下位通信レスポンスをゲートウェイ３に返信する。
ゲートウェイ３の下位通信処理手段３２は、下位機器１から下位通信レスポンスを受信すると（ステップ３０３）、実行用下位通信データバッファにバッファ領域を設定して、このバッファ領域に下位通信レスポンスから取り出した受信データを格納すると共に、この受信データの格納先バッファ領域を示す下位通信バッファポインタを、今回のスキャン通信の実行の契機となった実行用下位通信テーブルのレコードＧに書き込む（ステップ３０４）。
【００５１】
さらに、下位通信処理手段３２は、同レコードＧに、下位機器１へのスキャン通信（ステップ３０２）を実行してから受信データを受け取るまでの時間である第２のレスポンス時間を書き込む（ステップ３０５）。
コマンド発行時刻に達した下位通信コマンドを一通り送信して、図５の処理が終了した後、下位通信処理手段３２は、図４の処理に戻って、再び新たな下位通信テーブルを作成する。図４の処理で編集用下位通信テーブルを作成している間は、実行用下位通信テーブルを用いて図５で説明したスキャン通信を実行しているので、上位通信が途切れることはない。
【００５２】
次に、下位通信処理手段３２は、図４、図５の処理と並行して、上位通信テーブル３３に記録されたタイムスタンプを常時監視し、タイムスタンプが示す時刻から１０秒以上経過したレコードが存在するかどうかを判定する（図６ステップ４０１）。
【００５３】
タイムスタンプが示す時刻から１０秒以上経過したレコードが存在する場合、下位通信処理手段３２は、このレコードを上位通信テーブル３３から削除する（ステップ４０２）。このように、上位機器２から同じ読出アドレス及びレングスでアクセスがあっても、次回の通信までの時間間隔が長すぎるものについては上位通信テーブル３３から削除するので、スキャン通信が実行されることはない。
【００５４】
次に、図２のステップ１０９において、上位通信処理手段３１が実行用下位通信データバッファからデータを読み出す処理について説明する。
前述のように図４のステップ２０６において、下位通信処理手段３２は、実行用下位通信テーブルに作成したレコードの番号を、このレコードの作成元となった上位通信テーブル３３の対応するレコードに下位通信テーブルポインタとして書き込む。
【００５５】
したがって、上位通信処理手段３１は、前述のようにステップ１０９において上位通信テーブル３３のレコードＣを参照したとき、このレコードＣに記録されている下位通信テーブルポインタに基づいて、レコードＣに対応する実行用下位通信テーブルのレコードを参照する。そして、上位通信処理手段３１は、この実行用下位通信テーブルのレコードに記録されている下位通信バッファポインタを参照して、このバッファポインタが示す実行用下位通信データバッファのバッファ領域からデータを取り出す。こうして、実行用下位通信データバッファからデータを読み出すことができる。
【００５６】
なお、図４のステップ２０４の処理で読出コマンドが編集されている場合があり、この場合には上位通信テーブル３３のレコードＣに記録された読出先領域が実行用下位通信テーブルに記録された読出先領域の一部となるので、実行用下位通信データバッファから読み出したデータは、上位通信コマンド（レコードＣに記録された読出コマンド）が要求するデータよりも長い場合が有り得る。
【００５７】
そこで、上位通信処理手段３１は、上位通信テーブル３３のレコードＣに記録された読出アドレス及びレングスと、このレコードＣに対応する実行用下位通信テーブルに記録された読出アドレス及びレングスとを比較することにより、実行用下位通信データバッファのデータ中から上位通信コマンドが要求するデータだけを取り出して、取り出したデータから上位通信レスポンスを作成する（ステップ１１０）。
【００５８】
以上のように本実施の形態において、上位機器２は、ダイレクト通信とバッファリング通信を区別する必要がなく、ゲートウェイ３のバッファ領域を設定する必要もない。ゲートウェイ３は、上位通信コマンドの内容とその受信タイミングに基づいて、読出先領域とスキャン通信の最適な間隔を学習して、自動的にバッファ領域を設定し、上位機器２にレスポンスを早く返すようにする。
【００５９】
すなわち、上位機器２は、読出アドレスとレングスとを含む読出コマンドを発行するだけでよい。
ゲートウェイ３は、同一の読出先領域に対する読出コマンドを２回以上受信した場合、自動的にスキャン通信を開始する。したがって、同一の読出先領域に対する３回目以降の読出コマンドについては、ダイレクト通信を実行しないので、上位機器２にレスポンスを早く返すことができる。
【００６０】
さらに、スキャン通信の間隔は、上位通信コマンドの最新の時間間隔に基づいて動的に変化する。これにより、バッファ領域やスキャン周期を設定することなく、スキャン通信の周期を最適化でき、下位機器１へ流れる下位通信コマンドの数を減らすことができるので、下位通信コマンドの混雑によって書込コマンド等のダイレクト通信が待たされることが少なくなる。
また、上位機器２からの読出コマンドで読出先領域が連続しているものや重複しているものを１つのコマンドにまとめて下位機器１に送り出すので、下位通信コマンドの数をさらに減らすことができる。
【００６１】
なお、ゲートウェイ３は、演算装置、記憶装置及びインタフェースを備えたコンピュータとこれらのハードウェア資源を制御するプログラムによって実現することができる。
【００６２】
【発明の効果】
本発明によれば、アクセス先が同一の上位通信コマンドを複数回受信したとき、これと同一の上位通信コマンドを次回受信するまでに下位通信レスポンスのデータをあらかじめ取得できるように、アクセス先が同一の上位通信コマンドの受信タイミングに基づいて下位通信コマンドの発行時刻を決定し、決定した発行時刻に達したとき下位通信コマンドを下位機器に送信し、この下位通信コマンドに応じて下位機器から送信された下位通信レスポンスのデータを下位通信データバッファに格納し、アクセス先が同一の上位通信コマンドを次に受信したとき、下位通信データバッファから読み出したデータに基づいて上位通信レスポンスを上位機器に返送する通信処理手段を設けることにより、上位通信コマンドの内容とその受信タイミングに基づいて下位通信コマンドの発行時刻を決定し、下位通信データバッファに自動的にバッファ領域を設定して、このバッファ領域に下位通信レスポンスのデータを格納するので、上位機器からバッファ領域やスキャン周期を設定する必要がなくなり、バッファリング通信に要する手間を削減することができる。また、下位通信コマンドの発行時刻をアクセス先が同一の上位通信コマンドの受信タイミングに基づいて決定するので、スキャン通信の周期を最適化でき、下位機器へ流れる下位通信コマンドの数を減らすことができるので、下位通信コマンドの混雑によって書込コマンド等のダイレクト通信が大幅に遅れることがなくなる。
【００６３】
また、上位通信コマンドの前回の受信時刻からこれと同一の上位通信コマンドの最新の受信時刻までの時間間隔と、上位通信コマンドの最新の受信時刻と、下位通信コマンドの最新の送信時刻からこの下位通信コマンドに応じた下位通信レスポンスを受信するまでのレスポンス時間とに基づいて、通信処理手段が発行時刻を決定することにより、上位通信コマンドを一定周期で受信する限り、上位機器に返す上位通信レスポンスのデータは上位通信レスポンスの送信直前に下位機器から読み出した最新のデータとなるので、常に最新のデータを上位通信レスポンスとして返送することができ、上位通信レスポンスのデータの精度を上げることができる。
【００６４】
また、第１の下位通信テーブルと第２の下位通信テーブルを実行用として交互に使用すると共に、第１の下位通信データバッファと第２の下位通信データバッファを実行用に交互に使用することにより、発行時刻の決定と編集用下位通信テーブルの作成を行っている間は、実行用下位通信テーブルを用いて下位通信コマンドの送信を行っているので、上位通信レスポンスが途切れることがなく、また実行用下位通信データバッファに格納したデータを無駄にすることなく、使用することができる。
【００６５】
また、通信処理手段は、アクセス先が同一の上位通信コマンドに対して、アクセス先が連続または重複する上位通信コマンドを受信したとき、これらの上位通信コマンドを１つにまとめた上で、下位通信コマンドの発行時刻を決定するので、下位通信コマンドの数を減らすことができ、通信効率を向上させることができる。
【００６６】
また、アクセス先が同一の上位通信コマンドの最新の受信時刻が現時刻から所定時間以上前の場合、通信処理手段が、この上位通信コマンドのバッファリング有効フラグを０に初期化することにより、モニタリング領域の変更等の理由により上位機器２のアクセス先が変わった場合、最新の受信時刻から所定時間以上経過したときに、以前のアクセス先に対するスキャン通信を自動的に停止させるので、下位通信コマンドの無駄な送信を減らすことができる。
【図面の簡単な説明】
【図１】  本発明の実施の形態となる通信システムの構成を示すブロック図である。
【図２】  本発明の実施の形態における上位通信処理手段の動作を示すフローチャート図である。
【図３】  上位通信テーブル及び上位通信データバッファの構造を示す図である。
【図４】  本発明の実施の形態における下位通信処理手段の動作を示すフローチャート図である。
【図５】  本発明の実施の形態における下位通信処理手段の動作を示すフローチャート図である。
【図６】  本発明の実施の形態における下位通信処理手段の動作を示すフローチャート図である。
【図７】  実行用下位通信テーブル及び実行用下位通信データバッファの構造を示す図である。
【図８】  編集用下位通信テーブル及び編集用下位通信データバッファの構造を示す図である。
【図９】  コマンド編集の様子を示す説明図である。
【図１０】  上位通信コマンド及び下位通信コマンドの１例を示す図である。
【符号の説明】
１…下位機器、２…上位機器、３…ゲートウェイ、４…下位通信ネットワーク、５…上位通信ネットワーク、３１…上位通信処理手段、３２…下位通信処理手段、３３…上位通信テーブル、３４…上位通信データバッファ、３５…第１の下位通信テーブル、３６…第２の下位通信テーブル、３７…第１の下位通信データバッファ、３８…第２の下位通信データバッファ。
【図１】
0003813809.tif 000002
【図２】
0003813809.tif 000003
【図３】
0003813809.tif 000004
【図４】
0003813809.tif 000005
【図５】
0003813809.tif 000006
【図６】
0003813809.tif 000007
【図７】
0003813809.tif 000008
【図８】
0003813809.tif 000009
【図９】
0003813809.tif 000010
【図１０】
0003813809.tif 000011