(第1の実施形態)
以下、本発明の第1の実施形態を図面に基づいて説明する。図1は、第1の実施形態による中継器における通信ログ管理システム(以下、単に通信ログ管理システムという)の全体構成例を示す図である。本実施形態の通信ログ管理システムは、ホスト装置100と、中継器200と、周辺装置300とを備えて構成される。本実施形態の通信ログ管理システムは、ホスト装置100と周辺装置300との間に中継器200を接続してデータ通信を行うシステムにおいて、中継器200における通信ログを管理するものである。
ホスト装置100は、周辺装置300に対して動作実行命令等のデータを送信することにより、周辺装置300の動作を制御する機能を備えたものである。ホスト装置100としては、例えば、スマートフォン、タブレット端末、POS(Point of sales)端末などを用いることが可能である。ホスト装置100は、LANインタフェースを有する一方、RS-232C等のシリアルインタフェースは有していない。そのため、ホスト装置100と中継器200との間は、有線または無線のLANにより接続される。
周辺装置300は、ホスト装置100から中継器200を介して送られてくる動作実行命令に従って所定の動作を実行する機能を備えたものである。例えば、ホスト装置100がPOS端末である場合に用い得る周辺装置300としては、自動釣銭機、クレジット決済端末、プリンタなどがある。この場合における自動釣銭機は、ホスト装置100から送られてくる動作実行命令に従って、例えば現金の払い出しに関する動作を実行する。また、クレジット決済端末は、ホスト装置100から送られてくる動作実行命令に従って、例えば決済金額の設定に関する動作を実行する。また、プリンタは、ホスト装置100から送られてくる動作実行命令に従って、例えば印字、ファームウェア更新、ステータス情報の送信などの動作を実行する。周辺装置300は、RS-232C等のシリアルインタフェースを有する一方、LANインタフェースは有していない。そのため、周辺装置300と中継器200との間は、シリアル通信ケーブルにより接続される。
中継器200は、ホスト装置100と周辺装置300との間の通信を中継するものである。すなわち、中継器200は、ホスト装置100から受信するLAN通信信号をシリアル通信信号に変換して周辺装置300に送信する。また、中継器200は、周辺装置300から受信するシリアル通信信号をLAN通信信号に変換してホスト装置100に送信する。ホスト装置100から中継器200を介して周辺装置300に送信される通信信号は、上述の動作実行命令等のデータを含む。一方、周辺装置300から中継器200を介してホスト装置100に送信される通信信号は、動作実行命令に基づく動作実行の結果を示す動作状況情報等のデータを含む。
図2は、本実施形態による通信ログ管理システムの主要要素であるホスト装置100および中継器200のハードウェア構成例を示す図である。
図2に示すように、ホスト装置100は、そのハードウェア構成として、CPU101、LANインタフェース(I/F)102、タッチパネル等の入力部103、液晶ディスプレイ等の表示部104、ROM105、RAM106および補助記憶装置107を備えている。CPU101は、ROM105または補助記憶装置107に記憶されたプログラムに従って、ホスト装置100の動作を制御する。特に、CPU101は、LANインタフェース102を介して中継器200との間で相互にデータ通信を行う。
中継器200は、そのハードウェア構成として、CPU201、LANインタフェース(I/F)202、シリアルインタフェース(I/F)203、ROM204、RAM205および補助記憶装置206を備えている。CPU201は、ROM204または補助記憶装置206に記憶されたプログラムに従って、中継器200の動作を制御する。特に、CPU201は、LANインタフェース202を介してホスト装置100との間で相互にデータ通信を行うとともに、シリアルインタフェース203を介して周辺装置300との間で相互にデータ通信を行う。
図3は、第1の実施形態によるホスト装置100および中継器200の機能構成例を示すブロック図である。図3に示すように、ホスト装置100は、その機能構成として、データ送信部11、送信成否情報受信部12、動作状況情報取得部13および通信ログ取得部14を備えている。これらの各機能ブロック11~14は、実際には図2に示したCPU101、ROM105、RAM106などを含むマイコンを備えて構成され、ROM105または補助記憶装置107に記憶されたプログラムが動作することによって実現される。
また、中継器200は、その機能構成として、データ受信部21、データ転送部22、送信成否情報返信部23、通信ログ記憶部24、動作状況情報受信部25、動作状況情報記憶部26、動作状況情報返信部27および通信ログ返信部28を備えている。これらの各機能ブロック21~28は、実際には図2に示したCPU201、ROM204、RAM205などを含むマイコンを備えて構成され、ROM204または補助記憶装置206に記憶されたプログラムが動作することによって実現される。
ホスト装置100のデータ送信部11は、周辺装置300宛てのデータをLAN通信により中継器200に送信する。周辺装置300宛てのデータは、例えば周辺装置300における所定の動作の実行を指示するための動作実行命令である。ホスト装置100から中継器200にデータ(動作実行命令)を送信する際には、データ送信部11は、中継器200から周辺装置300にデータを転送することを指示する転送命令を送信する。この転送命令には、データ転送の指示と、送信するデータの内容(動作実行命令)とが含まれる。なお、以下では説明を簡略化するため、単に、ホスト装置100から中継器200に対してデータ(動作実行命令)を送信するといい、中継器200から周辺装置300に対してデータ(動作実行命令)を転送(または送信)するという。
中継器200のデータ受信部21は、ホスト装置100から周辺装置300宛てのデータをLAN通信のプロトコル(第1の通信プロトコルの一例)に則り受信する。データ転送部22は、データ受信部21により受信されたデータを周辺装置300にシリアル通信のプロトコル(第2の通信プロトコルの一例)に則り送信(転送)する。送信成否情報返信部23は、ホスト装置100から送信されたデータに対する応答として、周辺装置300に対するデータ送信(転送)の成否(データ送信が完了したか否か)を示す送信成否情報をホスト装置100に返信する。この送信成否情報は、後述するように、通信ログ記憶部24に記憶されている。
送信成否情報返信部23は、中継器200から周辺装置300に対してデータを送信できた場合、ホスト装置100に対して「送信完了」の送信成否情報を返信する。一方、中継器200から周辺装置300に対してデータを送信できなかった場合、送信成否情報返信部23は、ホスト装置100に対して「送信不能」の送信成否情報を返信する。中継器200から周辺装置300にデータを送信できない場合とは、例えば、中継器200と周辺装置300との間のシリアル通信ケーブルが良好に接続されていない場合や、周辺装置300の電源が入っていない場合などによる通信障害や周辺装置300にエラーやバッファフルなどの障害が生じている状態が考えられる。
通信ログ記憶部24は、送信成否情報を通信ログとして記憶する。通信ログ記憶部24は、ホスト装置100と中継器200との間の通信障害の有無によらず、データ受信部21が次のデータを受信してデータ転送部22がそのデータを周辺装置300に送信しようとしたことの成否が確認されるまで、今回のデータに関する送信成否情報を通信ログとして記憶する。そして、データ転送部22による周辺装置300に対する次のデータの送信の成否が確認されたときに、当該次のデータに関する送信成否情報によって今回のデータに関する送信成否情報を上書きすることにより、通信ログを更新する。すなわち、通信ログ記憶部24は、データ転送部22が周辺装置300に次のデータを送信しようとし、その送信が完了したこと、もしくは送信できずタイムアウトしたことを把握したタイミングで、当該次のデータに関する送信成否情報によって今回のデータに関する送信成否情報を上書きする。
動作状況情報受信部25は、データ転送部22がデータ(動作実行命令)を周辺装置300に送信したことに対する応答として、周辺装置300から送信されてくる動作状況情報を受信する。すなわち、周辺装置300は、中継器200から動作実行命令を受信すると、その動作実行命令に従って所定の動作を実行する。このとき、周辺装置300が動作実行を正常に終了できた場合、周辺装置300は中継器200に対して「動作実行成功」を意味するAck信号を送信する。一方、何らかの理由によって周辺装置300が動作実行を正常に終了できなかった場合、周辺装置300は中継器200に対して「動作実行失敗」を意味するステータス情報を送信する。ステータス情報は、動作実行が失敗した理由に関する情報を含む。動作状況情報受信部25は、Ack信号またはステータス情報の何れかを動作状況情報として受信する。
動作状況情報記憶部26は、動作状況情報受信部25により受信された動作状況情報を記憶する。動作状況情報返信部27は、ホスト装置100からの要求に応じて、動作状況情報記憶部26に記憶されている動作状況情報を返信する。動作状況情報記憶部26は、動作状況情報返信部27がホスト装置100に対して動作状況情報を返信した時点で当該動作状況情報を削除する。このため、ホスト装置100と中継器200との間に通信障害が発生していない場合は、動作状況情報記憶部26に記憶された動作状況情報は短時間のうちにホスト装置100に送信され、削除される。一方、ホスト装置100と中継器200との間に通信障害が発生している場合は、その通信障害が復旧して動作状況情報返信部27が動作状況情報をホスト装置100に送信するまで、動作状況情報は動作状況情報記憶部26に継続して記憶される。
ホスト装置100の送信成否情報受信部12は、データ送信部11がデータ(動作実行命令)を中継器200に送信したことに対する応答として、中継器の送信成否情報返信部23から送信されてくる送信成否情報を受信する。ホスト装置100では、この送信成否情報を中継器200から受信することにより、中継器200から周辺装置300に対してデータが送信されたか否かを認識することが可能となる。
動作状況情報取得部13は、中継器200から周辺装置300に対するデータ送信が完了したことを送信成否情報により確認した場合に、動作状況情報の取得を中継器200に要求し、その応答として中継器200の動作状況情報返信部27から送信されてくる動作状況情報を取得する。ホスト装置100では、この動作状況情報を中継器200から取得することにより、ホスト装置100から中継器200を介して周辺装置300に送信した動作実行命令に基づく動作が周辺装置300において完了したか否か、完了していない場合はその理由を認識することが可能となる。
なお、動作状況情報取得部13が動作状況情報の取得を中継器200に要求した時点で、周辺装置300の動作がまだ完了していない場合がある。この場合、中継器200の動作状況情報記憶部26には動作状況情報が記憶されていない。この場合、動作状況情報返信部27は、動作状況情報取得部13からの要求に対して「受信データなし」の応答を返信する。動作状況情報取得部13は、「受信データなし」の応答を取得した場合、動作状況情報の取得を中継器200に再度要求する。以降、中継器200から動作状況情報を受信するまで以上のような動作を繰り返す。
ホスト装置100と中継器200との間に通信障害が発生していない場合は、以上の動作によって、ホスト装置100による動作実行命令の送信から動作状況情報の取得までの一連の処理を問題なく実行することが可能である。一方、ホスト装置100と中継器200との間に通信障害が発生すると、以上の一連の処理が完了しない。例えば、ホスト装置100から中継器200に動作実行命令を送信する際に通信障害が発生している場合は、この間ではLAN通信を行っているために、ホスト装置100は自身が送信した動作実行命令が中継器200に届いていないと判断することができる。この場合、ホスト装置100のデータ送信部11は、動作実行命令を再送するなどの対応をとることができる。
これに対し、ホスト装置100から中継器200に動作実行命令を送信し終わった後にホスト装置100と中継器200との間で通信障害が発生した場合、ホスト装置100は自身が送信した動作実行命令が中継器200に届いていることを確認できているが、中継器200から送信成否情報を取得することができない。そのため、ホスト装置100では、中継器200が周辺装置300に動作実行命令を送り終えたかどうかを判断することができない。この場合、中継器200が周辺装置300に動作実行命令を送り終えたかどうかが不明であるため、ホスト装置100は、中継器200に動作実行命令を再送するといった対応をとることができない。
このような問題に対応するため、第1の実施形態では、ホスト装置100に通信ログ取得部14を設けるとともに、中継器200に通信ログ記憶部24および通信ログ返信部28を設けている。ホスト装置100の通信ログ取得部14は、通信ログの取得を中継器200に要求し、その応答として中継器200から通信ログとして送信されてくる送信成否情報を取得する。中継器200の通信ログ返信部28は、ホスト装置100からの要求に応じて、通信ログ記憶部24に記憶されている送信成否情報を通信ログとして返信する。
通信ログ取得部14は、次の2つのタイミングで通信ログの取得を要求する。第1のタイミングは、データ送信部11がデータを送信する直前である。上述したように、中継器200の通信ログ記憶部24に記憶される送信成否情報は、データ受信部21がホスト装置100からデータを受信してデータ転送部22がそのデータを周辺装置300に送信しようとしたことの成否が確認される毎に更新される。従って、データ送信部11が今回のデータを送信する直前のタイミングでは、通信ログ記憶部24には、前回のデータ送信時に更新された送信成否情報が記憶されている。これにより、通信ログ取得部14が第1のタイミングで通信ログの取得を要求することにより、前回のデータ送信時に中継器200から周辺装置300にデータが送信されたか否かを示す送信成否情報を取得することができる。
第2のタイミングは、データ送信部11が送信したデータが中継器200に届いたことを確認した後、その応答として送信成否情報が返信されてこない場合、すなわち、データ送信部11が中継器200にデータを送信してから、送信成否情報を受信することなく所定のタイムアウト時間が経過したタイミングである。この場合は、ホスト装置100から中継器200に動作実行命令を送信し終わった後に、ホスト装置100と中継器200との間に通信障害が発生している可能性がある。よって、通信ログ取得部14は、今回のデータ送信に関する通信ログとして通信ログ記憶部24に記憶されている送信成否情報を取得するために、通信ログの取得を中継器200に要求する。
なお、第2のタイミングは、ホスト装置100と中継器200との間に通信障害が発生している状況であるため、通信ログ取得部14が通信ログの取得要求を中継器200に再送しても、それが中継器200に届かない。この場合、ホスト装置100は、自身が送信した通信ログの取得要求が中継器200に届いていないと判断することができるので、通信ログの取得要求を再送する。発生している通信障害が一時的なものであれば、通信障害の復旧後に送信された通信ログの取得要求が中継器200で受信される。これにより、今回のデータ送信に関する通信ログとして通信ログ記憶部24に記憶されている送信成否情報が、通信ログ返信部28によって中継器200から返信されてくる。
ホスト装置100では、第2のタイミングで通信ログ取得部14により取得された送信成否情報により、中継器200から周辺装置300に対するデータ送信が完了していないことが確認された場合には、データ送信部11によるデータ送信を再実行する。一方、第2のタイミングで通信ログ取得部14により取得された送信成否情報により、中継器200から周辺装置300に対するデータ送信が完了したことが確認された場合には、動作状況情報取得部13による動作状況情報の取得を実行する。
図4~図6は、以上のように構成した第1の実施形態による通信ログ管理システムの動作例を示すフローチャートである。図4~図6に示すフローチャートは何れも、ホスト装置100において、周辺装置300の動作実行を指示する操作が入力部103に対して行われたときに開始する。
図4は、ホスト装置100と中継器200との間に通信障害が発生していない場合の基本動作を示すものである。図4において、まず、ホスト装置100の通信ログ取得部14は、通信ログの取得を中継器200に要求する(ステップS1)。この要求に応じて、中継器200の通信ログ返信部28は、通信ログ記憶部24に記憶されている送信成否情報(前回のデータ送信に関するもの)を通信ログとしてホスト装置100に返信する(ステップS2)。
ここで受信する送信成否情報は、上述したように、データ送信部11が中継器200にデータを前回送信したときに、中継器200から周辺装置300に対するデータ転送が完了したか否かを示す通信ログである。ここでは、「送信完了」を示す送信成否情報の受信により、前回はデータ転送が完了したことをホスト装置100にて確認したものとする(ステップS3)。
なお、この時点で「送信不能」を示す送信成否情報を受信した場合は、前回のデータ送信時に中継器200と周辺装置300との間に通信障害などの障害が発生していて、データの転送が完了しないまま動作が終了している可能性がある。そこで、ホスト装置100はエラーメッセージを表示部104に表示して、中継器200と周辺装置300との間における通信障害の状態を確認することをユーザに促すようにしてもよい。
上記ステップS3で、前回のデータ送信に関する送信成否情報が「送信完了」であることを確認した後、ホスト装置100のデータ送信部11は、周辺装置300宛ての動作実行命令を中継器200に送信する(ステップS4)。中継器200のデータ受信部21は、ホスト装置100から送信された動作実行命令を受信する。また、データ転送部22は、当該受信した動作実行命令を周辺装置300に送信する(ステップS5)。
次いで、中継器200の通信ログ記憶部24は、周辺装置300に対するデータ送信が完了したことを示す「送信完了」の送信成否情報を今回の通信ログとして記憶する(ステップS6)。そして、送信成否情報返信部23は、通信ログ記憶部24に記憶された「送信完了」の送信成否情報をホスト装置100に返信する(ステップS7)。
上記ステップS5で中継器200から送信された動作実行命令を受信した周辺装置300では、当該動作実行命令に基づく動作を実行する(ステップS8)。そして、周辺装置300は、その動作実行を正常に終了できたか否かに応じて、Ack信号またはステータス情報の何れかの動作状況情報を中継器200に送信する(ステップS9)。中継器200の動作状況情報受信部25は、周辺装置300から送られてくる動作状況情報を受信する。そして、動作状況情報記憶部26は、動作状況情報受信部25により受信された動作状況情報を記憶する(ステップS10)。
ホスト装置100の動作状況情報取得部13は、上記ステップS7で送信成否情報受信部12が取得した送信成否情報により、中継器200から周辺装置300に対するデータ送信が完了したことを確認した場合、動作状況情報の取得を中継器200に要求する(ステップS11)。動作状況情報返信部27は、ホスト装置100からの要求に応じて、上記ステップS10で動作状況情報記憶部26に記憶された動作状況情報をホスト装置100に送信する(ステップS12)。この動作状況情報の送信後に、動作状況情報記憶部26は、記憶されている動作状況情報を削除する(ステップS13)。
なお、図4のフローチャートでは、ステップS11で動作状況情報取得部13が動作状況情報の取得要求を中継器200に送信する前までに、周辺装置300での動作実行が終了し、動作状況情報記憶部26に動作状況情報が記憶されている例を示している。これに対し、ステップS11で動作状況情報取得部13が動作状況情報の取得要求を中継器200に送信する前までに周辺装置300での動作実行が終了していない場合は、上述のように、動作状況情報返信部27は「受信データなし」の動作状況情報をホスト装置100に送信する。これを受けて動作状況情報取得部13は、Ack信号またはステータス情報の動作状況情報を取得するまで、動作状況情報の取得要求を中継器200に繰り返し送信する。
図5は、ホスト装置100から中継器200に動作実行命令を送信し終わった後にホスト装置100と中継器200の間で通信障害が発生した場合の動作例を示すフローチャートである。図5の例では、中継器200と周辺装置300との間に通信障害は発生していない場合の動作を示している。なお、図5において、図4に示した処理と同様の内容の処理には同じステップ番号を付している。以下、図4と相違する部分を中心に動作を説明する。
図5において、ステップS1~S10の処理は、図4と同様である。ただし、ステップS4でホスト装置100から中継器200に動作実行命令を送信し終わった後に、ホスト装置100と中継器200との間に通信障害が発生したため、ステップS7で中継器200の送信成否情報返信部23が送信した送信成否情報は、ホスト装置100の送信成否情報受信部12で受信されない。
この場合、ステップS4でデータ送信部11が中継器200に動作実行命令を送信してから、送信成否情報を受信することなく所定のタイムアウト時間が経過するので、タイムアウト時間が経過したタイミングで、通信ログ取得部14は通信ログの取得を中継器200に要求する(ステップS14)。この通信ログの取得要求は、ホスト装置100と中継器200との間の一時的な通信障害が復旧するまで繰り返される。
通信障害の復旧後に、中継器200の通信ログ返信部28が通信ログの取得要求を受信すると、通信ログ返信部28は、ステップS6で通信ログ記憶部24に記憶された送信成否情報をホスト装置100に返信する(ステップS15)。図5の例では、中継器200との周辺装置300との間に通信障害は発生していなので、通信ログ記憶部24には「送信完了」の送信成否情報が記憶されている。よって、通信ログ返信部28は、この「送信完了」の送信成否情報をホスト装置100に返信する。
ホスト装置100では、通信ログ取得部14により取得された「送信完了」の送信成否情報により、ステップS4でホスト装置100から中継器200に送信された動作実行命令が周辺装置300に転送されていることを確認する(ステップS16)。この場合、動作実行命令を再度送信することは不要であるため、ステップS11に進んで動作状況情報取得部13による動作状況情報の取得要求を実行する。以下、ステップS11~S13の処理は、図4と同様である。
図6も、ホスト装置100から中継器200に動作実行命令を送信し終わった後に通信障害が発生した場合の動作例を示すフローチャートである。ただし、図6の例では、中継器200と周辺装置300との間にも通信障害が発生している場合の動作を示している。なお、図6において、図4および図5に示した処理と同様の内容の処理には同じステップ番号を付している。また、図6において、同じステップ番号で「’」の記号を付したものは、同じ処理が再実行されたことを意味している。以下、図4および図5と相違する部分を中心に動作を説明する。
図6において、ステップS1~S10の処理は、図4と同様である。ただし、中継器200と周辺装置300との間に通信障害が発生しているため、ステップS5で中継器200のデータ転送部22が送信した動作実行命令は、周辺装置300で受信されない。このため、中継器200と周辺装置300との間の通信障害が復旧して、ステップS5’で中継器200から再送された動作実行命令が周辺装置300で受信されるまでの間、ステップS8における周辺装置300での動作実行の開始が遅延している。また、ステップS6では、ホスト装置100から受信した動作実行命令が破棄されるとともに、「送信不能」の送信成否情報が通信ログ記憶部24に記憶され、ステップS7ではその「送信不能」の送信成否情報がホスト装置100に送信されている。
また、図6の例では、ステップS4でホスト装置100から中継器200に動作実行命令を送信し終わった後に、ホスト装置100と中継器200との間に通信障害が発生したため、ステップS7で中継器200の送信成否情報返信部23が送信した「送信不能」の送信成否情報は、ホスト装置100の送信成否情報受信部12で受信されない。このため、図6の例でも図5に示したステップS14~S16と同様の処理を実行することにより、通信ログ取得部14が中継器200から送信成否情報の通信ログを取得する。図6の例で取得される送信成否情報は、「送信不能」を示すものである。
ホスト装置100では、通信ログ取得部14により取得された「送信不能」の送信成否情報により、ステップS4でホスト装置100から中継器200に送信された動作実行命令が周辺装置300に転送されていないことを確認する(ステップS16)。この場合、データ送信部11は、中継器200に対する動作実行命令の送信を再実行する(ステップS4’)。以下、ステップS4’~S7’において、上記ステップS4~S7と同様の処理が再実行される。このとき、中継器200と周辺装置300との間の通信障害が復旧しているので、ステップS7’で送信成否情報返信部23が送信する送信成否情報は、「送信完了」を示すものに変わっている。以下、ステップS8~S13の処理は、図4と同様である。
以上詳しく説明したように、第1の実施形態では、ホスト装置100に通信ログ取得部14を設けるとともに、中継器200に通信ログ記憶部24および通信ログ返信部28を設け、中継器200から周辺装置300に対するデータ送信の成否を示す送信成否情報を通信ログとして通信ログ記憶部24に記憶し、ホスト装置100の通信ログ取得部14からの要求に応じて当該通信ログを通信ログ返信部28が返信するようにしている。
このように構成した第1の実施形態によれば、ホスト装置100と中継器200との間に通信障害が発生していない場合には、ホスト装置100から中継器200にデータを送信した後に中継器200から返信されてくる送信成否情報に基づいて、中継器200から周辺装置300にデータを送信し終わったか否かを確認することができる。一方、ホスト装置100から中継器200にデータを送信し終わった後にホスト装置100と中継器200との間に通信障害が発生した場合でも、その通信障害の復旧後に、中継器200において通信ログとして記憶しておいた送信成否情報をホスト装置100が中継器200から取得することができるので、通信障害が発生する前にホスト装置100から中継器200に送信したデータを中継器200が周辺装置300に送り終えていたかどうかをホスト装置100にて判断することができる。これにより、ホスト装置100では、データを再送信するか、動作状況情報の取得を要求するか、どちらかを選択して適切な処理を実行することができる。
また、上記第1の実施形態では、データ受信部21がホスト装置100からデータを受信してデータ転送部22がそのデータを周辺装置300に送信しようとしたことの成否が確認されるタイミング毎に通信ログ記憶部24の通信ログ(送信成否情報)を上書きし、上書きの都度ホスト装置100が通信ログを取得できるようにしている。このため、過去の複数回にわたるデータ送信に関する送信成否情報を蓄積していく必要がなく、最新の送信成否情報のみを記憶すればよいので、中継器200に必要とされるメモリ容量を少なくすることができる。
また、上記第1の実施形態では、中継器200はホスト装置100からの要求に応じて通信ログを返信しているため、ホスト装置100がクライアントで中継器200がサーバの関係となる。要求なく中継器200から通信ログを送信するためには、ホスト装置100にさらにサーバ機能を持たせ中継器200がクライアントとなるか、あるいは中継器200に対してサーバの関係となる新たな装置を設ける必要がある。このように、中継器200が通信ログを自発的に送信する構成ではないため、システムを簡易化できる。
また、上記第1の実施形態によれば、中継器200から周辺装置300に対するデータ送信の成否を示す送信成否情報と、周辺装置300における動作実行の結果を示す動作状況情報とを、ホスト装置100と中継器200との間の通信障害の有無に関わらずホスト装置100で取得することができる。そのため、ホスト装置100は、ホスト装置100からの動作実行命令が周辺装置300に送信され実行されたか否か、および、実行されなかった場合には、原因となる問題の発生箇所(中継器200と周辺装置300との間の通信障害か、周辺装置300自体に問題が生じたか)を把握することができる。
(第2の実施形態)
次に、本発明の第2の実施形態を図面に基づいて説明する。第2の実施形態による通信ログ管理システムの全体構成は、図1と同様である。ただし、ホスト装置100に代えてこれとは機能が一部異なるホスト装置100’を用いるとともに、中継器200に代えてこれとは機能が一部異なる中継器200’を用いる。第2の実施形態は、第1の実施形態で説明した通信ログに加えて第2の通信ログを中継器200’に記憶し、この第2の通信ログもホスト装置100’にて取得できるようにしたものである。
図7は、第2の実施形態によるホスト装置100’および中継器200’の機能構成例を示すブロック図である。なお、この図7において、図3に示した符号と同一の符号を付したものは同一の機能を有するものであるので、ここでは重複する説明を省略する。図7に示すように、ホスト装置100’は、通信ログ取得部14に代えて通信ログ取得部14’を備えている。また、中継器200’は、通信ログ返信部28に代えて通信ログ返信部28’を備えるとともに、第2の通信ログ記憶部29を更に備えている。
中継器200’の第2の通信ログ記憶部29は、動作状況情報受信部25が動作状況情報を周辺装置300から受信したか否か(動作状況情報記憶部26に動作状況情報が記憶されているか否か)を示す受信有無情報を第2の通信ログとして記憶する。上述したように、周辺装置300では、中継器200’から動作実行命令を受信すると、その動作実行命令に従って所定の動作を実行する。そして、その動作を正常に終了できたか否かに応じて、Ack信号またはステータス情報を動作状況情報として送信する。動作状況情報受信部25は、この動作状況情報を受信する。
周辺装置300が中継器200’から動作実行命令を受信していない状況では、動作状況情報記憶部26に動作状況情報は記憶されていない。この場合、第2の通信ログ記憶部29は、「受信データなし」を示す受信有無情報を第2の通信ログとして記憶する。また、周辺装置300が動作実行命令を受信して動作実行を開始したが、その動作実行がまだ完了しない状況でも、動作状況情報受信部25が周辺装置300から動作状況情報を受信していないため、動作状況情報記憶部26に動作状況情報は記憶されていない。この場合も、第2の通信ログ記憶部29は、「受信データなし」を示す受信有無情報を第2の通信ログとして記憶する。
これに対して、周辺装置300の動作実行が終了し、動作状況情報受信部25が周辺装置300から動作状況情報を受信して動作状況情報記憶部26に記憶させると、第2の通信ログ記憶部29は、「受信データあり」を示す受信有無情報を第2の通信ログとして記憶する。その後、動作状況情報記憶部26に記憶された動作状況情報を動作状況情報返信部27がホスト装置100’に送信すると、動作状況情報記憶部26に記憶されている動作状況情報が削除される。この時点で第2の通信ログ記憶部29は、第2の通信ログの受信有無情報を「受信データあり」から「受信データなし」に更新する。
通信ログ返信部28’は、ホスト装置100’からの要求に応じて、通信ログ記憶部24に記憶されている通信ログ(送信成否情報)および第2の通信ログ記憶部29に記憶されている第2の通信ログ(受信有無情報)をホスト装置100’に返信する。ホスト装置100’の通信ログ取得部14’は、通信ログの取得を中継器200’に要求し、その応答として中継器200’から送信されてくる送信成否情報および受信有無情報を取得する。
ホスト装置100’では、第2のタイミングで通信ログ取得部14’により取得された送信成否情報および受信有無情報により、中継器200’から周辺装置300に対するデータ送信が完了しておらず、かつ、周辺装置300から中継器200’に対する動作状況情報の受信がない(動作状況情報記憶部26に動作状況情報が記憶されていない)ことが確認された場合には、データ送信部11によるデータ送信を実行する。一方、中継器200’から周辺装置300に対するデータ送信が完了し、かつ、受信有無情報により動作状況情報の受信があることが確認された場合には、動作状況情報取得部13による動作状況情報の取得を実行する。
図8~図10は、以上のように構成した第2の実施形態による通信ログ管理システムの動作例を示すフローチャートである。なお、図8~図10は、それぞれ図4~図6に対応するものである。すなわち、図8は、ホスト装置100’と中継器200’との間に通信障害が発生していない場合の基本動作を示し、図9は、ホスト装置100’と中継器200’との間にのみ通信障害が発生している場合の動作を示し、図10は、ホスト装置100’と中継器200’との間および中継器200’と周辺装置300との間に通信障害が発生している場合の動作を示す。
図8~図10では、ステップ番号の符号として「P」を用いるが、図4~図6において「S」の符号で示すステップ番号と同じ番号を付した処理は互いに同様の処理であることを意味する。また、図8~図10においても、同じステップ番号で「’」の記号を付したものは、同じ処理が再実行されたことを意味している。図8~図10において、「ログ1」と記載しているのは送信成否情報を意味し、「ログ2」と記載しているのは受信有無情報を意味する。図8~図10に示すフローチャートは何れも、ホスト装置100’において、周辺装置300の動作実行を指示する操作が入力部103に対して行われたときに開始する。以下、第1の実施形態と相違する部分を中心に動作を説明する。
まず、図8のフローチャートについて説明する。ここでは、図4と相違する部分を中心に説明する。図8において、ステップP2で中継器200’の通信ログ返信部28’は、ホスト装置100’の通信ログ取得部14’からの要求に応じて、通信ログ記憶部24に記憶されている送信成否情報(前回のデータ送信に関するもの)および第2の通信ログ記憶部29に記憶されている受信有無情報(前回のデータ送信に関するもの)をホスト装置100’に返信する。
通信障害がなく前回のデータ送信が完了し、ホスト装置100’による動作状況情報の取得まで終わっている場合、送信成否情報は「送信完了」、受信有無情報は「受信データなし」となっている。ここで、「送信完了」を示す送信成否情報および「受信データなし」を示す受信有無情報の受信により、前回のデータ送信および周辺装置300での動作実行が完了していることをホスト装置100’にて確認すると(ステップP3)、処理はステップP4以降へと進む。ステップP4~P13の処理は、図4に示したステップS4~S10の処理と同様である。
第2の実施形態では、ステップP10の後にステップP21の処理が、ステップP13の後にステップP22の処理がそれぞれ挿入されている。ステップP21において、第2の通信ログ記憶部29は、ステップP9で動作状況情報受信部25が周辺装置300から動作状況情報を受信しステップS10で動作状況情報記憶部26が動作状況情報を記憶したことを受けて、第2の通信ログとして「受信データあり」の受信有無情報を記憶する。また、ステップP22において、第2の通信ログ記憶部29は、ステップP13で動作状況情報記憶部26が動作状況情報を削除したことを受けて、第2の通信ログとしての受信有無情報を「受信データなし」に変更する。
次に、図9のフローチャートについて説明する。ここでは、図5と相違する部分を中心に説明する。図9において、ステップP1~P16(ステップP2,P15,P16を除く)の処理は、図5のステップS1~S16(ステップS2,S15,S16を除く)の処理と同様である。また、ステップP10の後にステップP21の処理が、ステップP13の後にステップP22の処理がそれぞれ挿入される点は、図8と同様である。
図9に示すステップP2の処理は、図8のステップP2の処理と同様である。すなわち、中継器200’の通信ログ返信部28’は、第1のタイミングでホスト装置100’の通信ログ取得部14’から送信される要求に応じて、前回のデータ送信に関する送信成否情報(「送信完了」を示す通信ログ)および受信有無情報(「受信データなし」を示す第2の通信ログ)をホスト装置100’に返信する。
また、ステップP15において、中継器200’の通信ログ返信部28’は、第2のタイミングでホスト装置100’の通信ログ取得部14’から送信される要求に応じて、今回のデータ送信に関する送信成否情報(「送信完了」を示す通信ログ)および受信有無情報(「受信データあり」を示す第2の通信ログ)をホスト装置100’に返信する。ここで、送信成否情報が「送信完了」、受信有無情報が「受信データあり」となっているのは、ホスト装置100’から中継器200’を介して周辺装置300に送信された動作実行命令に応じて周辺装置300が動作を実行し、動作状況情報が周辺装置300から中継器200’に送信されて動作状況情報記憶部26に記憶されているからである。
この場合、ホスト装置100’では、「送信完了」の送信成否情報および「受信データあり」の受信有無情報により、中継器200’から周辺装置300に対するデータ送信が完了していて、かつ、周辺装置300から中継器200’に対する動作状況情報の受信があることを確認すると(ステップP16)、処理はステップP11以降へと進む。ステップP11~P13,P22の処理は、図8に示したステップP11~P13,P22の処理と同様である。
次に、図10のフローチャートについて説明する。ここでは、図6と相違する部分を中心に説明する。図10において、ステップP1~P16(ステップP2,P15,P16を除く)の処理は、図6のステップS1~S16(ステップS2,S15,S16を除く)の処理と同様である。また、ステップP10の後にステップP21の処理が、ステップP13の後にステップP22の処理がそれぞれ挿入される点は、図8と同様である。
図10に示すステップP2の処理は、図8のステップP2の処理と同様である。すなわち、中継器200’の通信ログ返信部28’は、第1のタイミングでホスト装置100’の通信ログ取得部14’から送信される要求に応じて、前回のデータ送信に関する送信成否情報(「送信完了」を示す通信ログ)および受信有無情報(「受信データなし」を示す第2の通信ログ)をホスト装置100’に返信する。
また、ステップP15において、中継器200’の通信ログ返信部28’は、第2のタイミングでホスト装置100’の通信ログ取得部14’から送信される要求に応じて、今回のデータ送信に関する送信成否情報(「送信不能」を示す通信ログ)および受信有無情報(「受信データなし」を示す第2の通信ログ)をホスト装置100’に返信する。ここで、送信成否情報が「送信不能」、受信有無情報が「受信データなし」となっているのは、ホスト装置100’から中継器200’に送信した動作実行命令を周辺装置300に送信することができず、動作実行命令に応じた動作が周辺装置300にて実行されていないからである。
この場合、ホスト装置100’では、「送信不能」の送信成否情報および「受信データなし」の受信有無情報により、中継器200’から周辺装置300に対するデータ送信が完了しておらず、かつ、周辺装置300から中継器200’に対する動作状況情報の受信がないことを確認すると(ステップP16)、処理はステップP4’以降へと進む。ステップP4’~P13,P21,P22の処理は、図6に示したステップS4’~S13および図8に示したステップP21,P22の処理と同様である。
以上詳しく説明したように、第2の実施形態では、ホスト装置100’に通信ログ取得部14’を設けるとともに、中継器200’に通信ログ記憶部24、第2の通信ログ記憶部29および通信ログ返信部28’を設け、中継器200’から周辺装置300に対するデータ送信の成否を示す送信成否情報と、周辺装置300からの動作状況情報の受信の有無を示す受信有無情報とを通信ログ記憶部24および第2の通信ログ記憶部29に記憶し、ホスト装置100’の通信ログ取得部14’からの要求に応じて当該送信成否情報および受信有無情報を通信ログ返信部28’が返信するようにしている。
上述した第1の実施形態では、通信ログ取得部14が通信ログとして中継器200から取得した送信成否情報が「送信完了」を示しているか「送信不能」を示しているかに応じて、動作状況情報取得部13による動作状況情報の取得から処理を続行するか、データ送信部11によるデータ送信から再実行するかを決めていた。この場合、送信成否情報が「送信完了」であることを確認して、動作状況情報取得部13が動作状況情報の取得を中継器200に要求していた。すなわち、中継器200が周辺装置300から実際に動作状況情報を受信済みであるかどうかが不明な状態で、動作状況情報の取得を中継器200に要求していた。
これに対し、上記のように構成した第2の実施形態によれば、通信ログ取得部14’により中継器200’から取得された受信有無情報が「受信データあり」となっていることを確認して、動作状況情報取得部13が動作状況情報の取得を中継器200’に要求している。これにより、中継器200’に動作状況情報が記録されているかどうかが不明な状態で動作状況情報の取得を中継器200’に要求することをなくすことができる。その他、第2の実施形態においても第1の実施形態と同様の効果を奏することが可能である。
なお、ホスト装置100’から中継器200’に動作実行命令を送信し、その応答としてホスト装置100’が中継器200’から送信成否情報を受信するまでは通信障害がなく、ホスト装置100’から中継器200’に動作状況情報の取得要求を送信した後に、ホスト装置100’と中継器200’との間に通信障害が発生することもあり得る。図11は、この場合の動作を示すフローチャートである。
図11において、ステップP1~P12,P21の処理は、図8と同様である。ただし、ステップP11でホスト装置100’から中継器200’に動作状況情報の取得を要求し終わった後に、ホスト装置100’と中継器200’との間に通信障害が発生したため、ステップP12で中継器200’の動作状況情報返信部27が送信した動作状況情報は、ホスト装置100’の動作状況情報取得部13で受信されない。この場合は、この時点からステップP14以降の処理が実行される。ステップP14以降の処理は、図9と同様である。
なお、ここでは、第2の実施形態による通信ログ管理システムにおいて、ホスト装置100’から中継器200’に動作状況情報の取得を要求し終わった後に通信障害が発生した場合の動作例を示したが、第1の実施形態による通信ログ管理システムにおいて、ホスト装置100から中継器200に動作状況情報の取得を要求し終わった後に通信障害が発生した場合にも同様に適用することが可能である。
上記第1および第2の実施形態では、データ送信部11によるデータ送信の直前である第1のタイミングと、データ送信部11が中継器200にデータを送信してから送信成否情報を受信することなくタイムアウト時間が経過した第2のタイミング(図11の場合は、動作状況情報取得部13が中継器200’に動作状況情報の取得要求を送信してから動作状況情報を受信することなくタイムアウト時間が経過したタイミング)とにおいて通信ログ(第2の実施形態の場合は第2の通信ログを含む)の取得を要求する例について説明したが、第2のタイミングのみとしてもよい。また、第1のタイミングおよび第2のタイミングに加えて、任意のタイミングで通信ログの取得を要求するようにしてもよい。
また、上記第1および第2の実施形態では、データ受信部21がホスト装置100,100’からデータを受信してデータ転送部22がそのデータを周辺装置300に送信しようとしたことの成否が確認されるタイミング毎に通信ログ記憶部24の通信ログ(送信成否情報)を上書きする例について説明したが、本発明はこれに限定されない。例えば、第2の通信ログ記憶部29に記憶する第2の通信ログ(受信有無情報)と同様に、中継器200,200’からホスト装置100,100’に送信成否情報を送信した時点で削除するようにしてもよい。
ただし、上記実施形態のように構成することにより、通信ログ記憶部24から送信成否情報をわざわざ削除する処理を省くことでき、処理負荷を軽減できる点で好ましい。また、中継器200,200’からホスト装置100,100’に対する送信成否情報の送信が完了したか否かを確認して削除することが好ましいが、この確認を確実に行うことができない場合もあるため、送信成否情報返信部23が送信成否情報をホスト装置100,100’に送信する都度削除するのではなく、データ受信部21が次のデータを受信してデータ転送部22がそのデータを周辺装置300に送信しようとしたことの成否が確認されたときに生成される送信成否情報で上書きするのが好ましい。
また、ホスト装置100,100’と中継器200,200’とがWebSocketと呼ばれる技術を使ってデータ通信を行っている場合も、上記第1および第2の実施形態を適用することが可能である。WebSocketは、ウェブアプリケーションにおいて双方向通信を実現するための技術規格である。WebSocketによるデータ通信では、最初に接続を確立するために、クライアント側がまずハンドシェイク要求を送り、サーバ側はハンドシェイク応答を返す。接続が確立されるまではクライアント-サーバの関係があるが、接続が確立された後は双方向通信が可能となる。このようなWebSocketを使ってホスト装置100,100’と中継器200,200’とがデータ通信を行っている場合にも、本実施形態のように中継器200,200’に通信ログを記憶することで、通信途中に障害が発生した場合においても、次回接続時に通信ログを確認することにより、直前の通信が成立したか否かを判断することが可能である。
また、上記第2の実施形態において、送信成否情報および受信有無情報に加え、ホスト装置100’から中継器200’に送信された動作実行命令の受信の有無を示す「送信データ有無情報」を第3の通信ログとして中継器200’に記憶するようにしてもよい。この場合、図8に示すフローチャートにおいて、中継器200’のデータ受信部21がホスト装置100’から動作実行命令を受信すると(ステップP4)、「送信データあり」を示す送信データ有無情報を中継器200’に記憶する。その後、動作実行命令が周辺装置300に送信され(ステップP5)、その送信が完了すると、ステップP6のタイミングで送信データ有無情報を「送信データなし」に書き換える。ステップP5において中継器200’から周辺装置300に動作実行命令を送信できなかった場合は、中継器200’はその動作実行命令を破棄し、ステップP6のタイミングで送信データ有無情報を「送信データなし」に書き換える。ステップP2では、送信成否情報および受信有無情報に送信データ有無情報を加えた3つの通信ログを中継器200’からホスト装置100’に返信する。
このように送信データ有無情報を第3の通信ログとして併用することにより、送信データの流れをホスト装置100’にてより詳細に把握することが可能となる。
また、上記第1および第2の実施形態では、第1の通信プロトコルの例としてLAN通信のプロトコル、第2の通信プロトコルの例としてシリアル通信のプロトコルを挙げて説明したが、本発明はこれに限定されない。すなわち、ホスト装置100,100’と周辺装置300との間で異なるプロトコルの通信を仲介する中継器を持つシステムであれば、本発明を適用することが可能である。例えば、第2の通信プロトコルの別の例として、有線または無線によるUSB(Universal Serial Bus)やBluetooth(登録商標)などを用いてもよい。
その他、上記第1および第2の実施形態は、何れも本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその要旨、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。