(57)【要約】【課題】ＰＬＣ間を接続するネットワークにプロトコルアナライザを割り込ませることなく、かつ、容易にＰＬＣ間の通信内容を把握できるようにする。【解決手段】ＰＬＣ１ａとＰＬＣ１ｂとを接続するネットワークにプロトコルアナライザを接続する代わりに、プログラム作成支援装置１００をＰＬＣ１ａに接続し、プロトコルアナライザまたはデバック装置として動作させる。プログラム作成支援装置１００は、ＰＬＣ１ａとＰＬＣ１ｂとの間、または、ＰＬＣ１ａと被制御機器との間で送受信された通信データのフレーム構造をパターンマッチングによって解析して表示する。そのため、ＰＬＣ間を接続するネットワークにプロトコルアナライザを割り込ませることなく、かつ、容易にＰＬＣ−ＰＬＣ間やＰＬＣ−被制御機器間の通信内容を把握できるようになる。【選択図】図１
2014052671.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラマブルロジックコントローラが接続されたネットワークにおいて当該複数のプログラマブルロジックコントローラのうち第１のプログラマブルロジックコントローラと接続されたプログラム作成支援装置であって、
前記第１のプログラマブルロジックコントローラが第２のプログラマブルロジックコントローラまたは被制御機器との間で送信または受信した通信データをプログラム作成支援装置に転送するよう当該第１のプログラマブルロジックコントローラに要求するための要求信号を送信する通信データ要求部と、
前記要求信号を受信した前記第１のプログラマブルロジックコントローラが送信する前記通信データを受信する通信データ受信部と、
前記通信データを記憶する通信データ記憶部と、
前記通信データ記憶部に記憶されている前記通信データのフレーム構造をパターンマッチングによって解析する解析部と、
前記解析部によって得られた前記フレーム構造にしたがって前記通信データを表示する表示部と
を備えることを特徴とするプログラム作成支援装置。
【請求項２】
前記フレーム構造の先頭に配置される可能性があるマッチングデータを記憶したマッチングデータ記憶部をさらに備え、
前記解析部は、前記マッチングデータ記憶部に記憶されているマッチングデータと前記通信データとを比較して、前記フレーム構造の先頭を特定することを特徴とする請求項１に記載のプログラム作成支援装置。
【請求項３】
前記フレーム構造を構成している複数の情報要素のそれぞれの意味を示す解説情報を記憶した解説情報記憶部と、
前記解析部によって取得された前記フレーム構造にしたがって、前記通信データに含まれている情報要素と、前記解説情報記憶部から読み出した当該情報要素の意味を示す解説情報とを関連付けて表示するための表示情報を作成する表示情報作成部と
をさらに備えることを特徴とする請求項１または２に記載のプログラム作成支援装置。
【請求項４】
前記解析部が前記パターンマッチングに失敗すると、前記表示部は、前記通信データを生のデータのまま表示することを特徴とする請求項１ないし３のいずれか１項に記載のプログラム作成支援装置。
【請求項５】
前記解析部は、前記通信データに含まれている情報要素のエラーを検出するエラー検出部を備え、
前記表示部は、前記エラーを検出された情報要素を強調表示することを特徴とする請求項１ないし４のいずれか１項に記載のプログラム作成支援装置。
【請求項６】
前記表示部は、前記通信データの解析結果を階層構造として表示することを特徴とする請求項１ないし５のいずれか１項に記載のプログラム作成支援装置。
【請求項７】
オペレータの操作を受け付ける操作部をさらに備え、
前記表示部は、前記フレーム構造を構成している複数の情報要素のうちいずれかが前記操作部によって指定されると、指定された情報要素の意味を示す説明を表示することを特徴とする請求項１ないし６のいずれか１項に記載のプログラム作成支援装置。
【請求項８】
オペレータによって入力されたキーワードにしたがって解析結果を検索する検索部をさらに備え、
前記表示部は、前記検索部によってヒットして解析結果を表示することを特徴とする請求項１ないし７のいずれか１項に記載のプログラム作成支援装置。
【請求項９】
前記通信データの解析結果を印刷するプリンタをさらに備えることを特徴とする請求項１ないし８のいずれか１項に記載のプログラム作成支援装置。
【請求項１０】
ラダープログラムを作成するプログラム作成支援装置と通信する第１の通信部と、
他のプログラマブルロジックコントローラまたは被制御機器と通信する第２の通信部と、
前記他のプログラマブルロジックコントローラまたは被制御機器との間で送信または受信された通信データを一時的に記憶するバッファ部と、
前記第１の通信部を介して前記プログラム作成支援装置から前記バッファ部に記憶されている前記通信データを要求する要求信号を受信すると、前記通信データをコピーして前記プログラム作成支援装置へ送信するよう前記第１の通信部を制御する制御部と
を備えることを特徴とするプログラマブルロジックコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルロジックコントローラが送信または受信する通信データのフレーム構造を表示する技術に関する。
【背景技術】
【０００２】
プログラマブルロジックコントローラ（以下、ＰＬＣと称す）は、ＦＡ（Factory
Automation）制御システムにおいて広く使用されているシーケンス制御装置であり、ラダープログラムと呼ばれる専用プログラムにしたがって動作する。操作者（オペレータ）は、リミットスイッチ、センサ、温度計などの入力機器や、電磁開閉器、ソレノイド、モータ、アクチュエータ、シリンダ、リレー、位置決めシステムなどの出力機器をＰＬＣに接続し、ラダープログラムによってこれらの被制御機器を制御する。
【０００３】
オペレータは、パーソナルコンピュータ（以下、ＰＣと称す）などのプログラム作成支援装置上でラダープログラムを作成し、ＰＣとＰＬＣを接続し、ラダープログラムをＰＬＣの記憶部に記憶させる。ＰＬＣの記憶部にはデバイス情報等の各種データも記憶される。デバイス情報とは、入力機器からの入力状態、出力機器への出力状態およびラダープログラム上で設定される内部リレー（補助リレー）、タイマー、カウンタ、データメモリ等の状態を示す情報である。デバイスとは、デバイス情報を格納するために設けられたメモリ上の領域を指す名称である。ＰＬＣにプログラム作成支援装置を接続することで、ＰＬＣが保持しているデバイス情報（デバイスの値）をプログラム作成支援装置に表示させ、視認することもできる。
【０００４】
ところで、ＰＬＣは、Ｍｏｄｂｕｓネットワークなどの通信回線を介して他の１つ以上のＰＬＣや被制御機器と通信を行うことがある。特許文献１によれば、複数のＰＬＣがネットワークを介して接続されており、そのうちの１つのＰＬＣがプログラミング装置に接続されており、ＰＬＣの動作状態をモニタすることでシステムデバッグを行う発明が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−２４１６１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１の発明では、各ＰＬＣの動作状態をプログラミング装置から確認できるようになるが、ネットワークを介して複数のＰＬＣ間でどのような情報が送受信されているかまではわからない。たとえば、ネットワーク上で送信されたデータが誤っているためにＰＬＣが誤動作しているケースなどは、従来の方法では原因の特定が困難である。
【０００７】
そこで、あるＰＬＣと別のＰＬＣとを接続する通信線にプロトコルアナライザを挿入し、送受信されている生の情報をキャプチャすることが考えられる。しかし、通信線にプロトコルアナライザを挿入するには、プロトコルを中継器として配線する必要があり、ネットワーク構成の変更が必要となってしまう。また、通信線に挿入されたプロトコルアナライザ自体が新たなノイズ源となってしまい、本来のノイズ源を特定することが困難になってしまうこともある。また、ＰＬＣ用として最も普及しているＭｏｄｂｕｓなどのプロトコルでは、通信されている生の信号をそのまま表示したとしても、オペレータはそれを理解することが容易ではない。さらに、Ｍｏｄｂｕｓは、１９７０年代に開発された古典的なプロトコルであるため、フレームの開始位置を示すようなビットがなく、どこからどこまでがフレームであるのかをオペレータが理解することは極めて困難である。
【０００８】
そこで、本発明は、ＰＬＣ間を接続するネットワークにプロトコルアナライザを割り込ませることなく、かつ、容易にＰＬＣ間の通信内容を把握できるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、プログラム作成支援装置であって、複数のプログラマブルロジックコントローラが接続されたネットワークにおいて当該複数のプログラマブルロジックコントローラのうち第１のプログラマブルロジックコントローラと接続されたプログラム作成支援装置であって、前記第１のプログラマブルロジックコントローラが第２のプログラマブルロジックコントローラまたは被制御機器との間で送信または受信した通信データをプログラム作成支援装置に転送するよう当該第１のプログラマブルロジックコントローラに要求するための要求信号を送信する通信データ要求部と、前記要求信号を受信した前記第１のプログラマブルロジックコントローラが送信する前記通信データを受信する通信データ受信部と、前記通信データを記憶する通信データ記憶部と、前記通信データ記憶部に記憶されている前記通信データのフレーム構造をパターンマッチングによって解析する解析部と、前記解析部によって得られた前記フレーム構造にしたがって前記通信データを表示する表示部とを備えることを特徴とする。
【００１０】
また、本発明は、ラダープログラムを作成するプログラム作成支援装置と通信する第１の通信部と、他のプログラマブルロジックコントローラまたは被制御機器と通信する第２の通信部と、前記他のプログラマブルロジックコントローラまたは被制御機器との間で送信または受信された通信データを一時的に記憶するバッファ部と、前記第１の通信部を介して前記プログラム作成支援装置から前記バッファ部に記憶されている前記通信データを要求する要求信号を受信すると、前記通信データをコピーして前記プログラム作成支援装置へ送信するよう前記第１の通信部を制御する制御部とを備えることを特徴とするプログラマブルロジックコントローラを提供する。
【発明の効果】
【００１１】
本発明によれば、ＰＬＣ間を接続するネットワークにプロトコルアナライザを接続する代わりに、プログラム作成支援装置を１つのプログラマブルロジックコントローラに接続し、プロトコルアナライザまたはデバック装置として動作させる。プログラム作成支援装置は、他のプログラマブルロジックコントローラや被制御機器と監視対象のプログラマブルロジックコントローラとの間で送受信された通信データのフレーム構造をパターンマッチングによって解析して表示する。そのため、ＰＬＣ間を接続するネットワークにプロトコルアナライザを割り込ませることなく、かつ、容易にＰＬＣ間の通信内容を把握できるようになる。
【図面の簡単な説明】
【００１２】
【図１】プログラマブルロジックコントローラ（ＰＬＣ）とプログラム作成支援装置の外観を示す図である。
【図２】ＰＬＣとプログラム作成支援装置についての機能ブロック図である。
【図３】Ｍｏｄｂｕｓプロトコルで使用されるフレーム構造の一例を示した図である。
【図４】明確な先頭識別子が規定されている通信プロトコルにおけるフレーム構造の先頭を検出する方法を説明する図である。
【図５】解析部が実行する探索モードについての各ステップを示すフローチャートである。
【図６】解析部が実行するコマンドモードについての各ステップを示すフローチャートである。
【図７】解析結果を表示するユーザインタフェースの一例を示す図である。
【図８】解析結果を表示するユーザインタフェースの一例を示す図である。
【図９】解析結果を表示するユーザインタフェースの一例を示す図である。
【図１０】解析結果を表示するユーザインタフェースの一例を示す図である。
【発明を実施するための形態】
【００１３】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念および下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
【００１４】
図１は、第１のプログラマブルロジックコントローラ（ＰＬＣ１ａ）、第２のプログラマブルロジックコントローラ（ＰＬＣ１ｂ）およびプログラム作成支援装置１００を示している。ＰＬＣ１ａとＰＬＣ１ｂはシリアル通信ケーブルなどの通信線２を介して接続され、ＰＬＣネットワーク３を構築している。ここでは一例として、ＰＬＣ１ａとＰＬＣ１ｂとがシリアル通信ケーブルで接続されているものと仮定するが、ＬＡＮケーブルやＵＳＢケーブルなどの通信線、無線ＬＡＮ、ブルートゥース（登録商標）、ＩｒＤＡなどの無線インタフェースを介してこれらが接続されていてもよい。通信ケーブルは金属線や光ファイバであってもよい。
【００１５】
プログラム作成支援装置１００は、ＰＬＣ１ａに接続してラダープログラムを転送したり、ＰＬＣ１ａの動作を監視して、デバックなどを実行したりする情報処理装置である。プログラム作成支援装置１００は、プログラム作成支援機能を備えたプログラムをインストールされたパーソナルコンピュータ（ＰＣ）であってもよい。プログラム作成支援装置１００とＰＬＣ１ａも、上述したような有線または無線のいずれで接続されていてもよい。ただし、プログラム作成支援装置１００は、ＰＬＣネットワーク３には参加していないため、ＰＬＣネットワーク３に対して直接的にノイズを与えることはない。ＰＬＣ１ａには、１つのＰＬＣ１ｂが接続されているが、２つ以上の他のＰＬＣが接続されていてもよいし、被制御機器が接続されていてもよい。被制御機器としては、たとえば、リミットスイッチ、センサなどの入力機器や、電磁開閉器、ソレノイド、モータ、アクチュエータ、シリンダ、リレー、位置決めシステムなどの出力機器がある。
【００１６】
図２は、ＰＬＣ１ａとプログラム作成支援装置１００についての機能ブロック図である。プログラム作成支援装置１００には、液晶表示装置や自発光型表示装置などの表示部１０と、オペレータが各種の指示を入力するための操作部１１が設けられている。操作部１１には、オペレータの操作を受け付けるためのキーボードやポインティングデバイスが含まれる。
【００１７】
制御部５は、ＣＰＵやＡＳＩＣ、論理回路、プログラムによって実現されるコントローラである。制御部５は各種の制御機能を有している。命令作成部５１は、ＰＬＣ１ａに対する命令を作成するユニットである。たとえば、命令作成部５１は、ＰＬＣ１ａがＰＬＣ１ｂとの間で送信または受信した通信データをプログラム作成支援装置１００に転送するようＰＬＣ１ａに要求する通信データ要求部として機能する。このように、命令作成部５１は、通信データの取得要求コマンド（リクエスト）を作成して、ＰＬＣ１ａに送信することができる。ＰＣ通信部７は、ＰＬＣ１ａのＰＣ通信部２１に接続されており、プログラム作成支援装置１００とＰＬＣ１ａとの間でデータやコマンドを送信したり受信したりするために使用される。たとえば、ＰＣ通信部７は、ＰＬＣ１ａとＰＬＣ１ａ１ｂとの間で送受信された通信データである送信バイト列２４や受信バイト列２５を取得するための取得要求信号をＰＬＣ１ａに送信する。また、ＰＣ通信部７は、取得要求信号を受信したＰＬＣ１ａが送信する通信データを受信し、受信した通信データを記憶部６に記憶させる通信データ受信部として機能する。記憶部６は、たとえば、ＲＡＭ、ＳＳＤ、ＨＤＤなどの記憶装置により構成されている。
【００１８】
解析部５２は、たとえば、記憶部６に記憶されている通信データのフレーム構造をパターンマッチングによって解析する。記憶部６は、パターンマッチングに使用するためのマッチングデータ６１や、通信データに含まれているバイト列がどのような意味づけをもった情報なのかを示した解説情報６２、解析結果の履歴であるログデータ６３などを記憶してもよい。１９７０年代に策定されたＭｏｄｂｕｓプロトコルは、古典的なプロトコルであるため、フレームの先頭を示す特別な先頭識別子が存在しないプロトコルである。そのため、生の通信データだけではどこからどこまでがフレームであるかを簡単には識別できない。ただし、フレームの先頭に入り得る情報は一定の限られた範囲内の情報である。つまり、論理的にとりうるすべての値のうち一部の値のみがフレームの先頭付近に搭載されている。そこで、フレームの先頭として実際に搭載されうる値をマッチングデータ６１として記憶部６に記憶させておき、解析部５２がマッチングデータ６１と一致する部分を通信データの中に発見したときにフレームの先頭の可能性があると判定してもよい。このように、記憶部６の一部は、フレーム構造の先頭に配置される可能性があるマッチングデータ６１を記憶したマッチングデータ記憶部として機能する。また、解析部５２は、記憶部６に記憶されているマッチングデータ６１と通信データとを比較して、フレーム構造の先頭を特定する先頭特定部として機能する。解説情報６２は、フレーム構造を構成している情報要素についての名称や略称などのラベル（意味づけ情報）や、簡潔な説明文章などである。解説情報６２は、解析結果をオペレータにとっても理解しやすくするために表示情報作成部５３によって利用される。記憶部６の一部は、フレーム構造を構成している複数の情報要素のそれぞれの意味を示す解説情報６２を記憶した解説情報記憶部として機能する。
【００１９】
表示情報作成部５３は、解析部５２によって得られたフレーム構造にしたがって通信データを表示部１０に表示するための表示情報を作成する。たとえば、表示情報作成部５３は、解析部５２によって取得されたフレーム構造にしたがって、通信データに含まれている情報要素と、記憶部６から読み出した当該情報要素の意味を示す解説情報６２とを関連付けて表示するための表示情報を作成してもよい。表示部１０は、表示情報作成部５３が作成した表示情報にしたがって解析結果を表示する。なお、解析部５２がパターンマッチングに失敗すると、表示部１０は、通信データを生のデータのまま表示してもよい。また、解析部５２が、通信データに含まれている情報要素のエラーを検出したときには、表示部１０は、エラーを検出された情報要素を強調表示してもよい。なお、パターンマッチングに失敗するケースは、フレーム構造の先頭が見つからないケース、先頭らしい部分は見つかったもののそれ以降のバイト列が既知のフレーム構造のものとは異なるケースなどがある。フレーム構造を構成する情報要素の数、各情報要素のサイズ、および、各情報要素の中身としてとり得る値（１６進数）は既知である。したがって、通信誤りがなく、ＰＬＣや被制御機器に誤動作がなければ、フレーム構造を構成する情報要素の中身は既定の範囲内となる。しかし、通信誤りや誤動作などが発生すると、ビットレベルで誤りが発生するため、フレーム構造自体が規定の構造でなくなったり、情報要素の中身が規定外の情報に化けてしまったりすることがある。よって、通信プロトコルによって規定された複数種類のフレーム構造の情報をマッチングデータ６１として記憶部６に記憶しておけば、フレーム構造を特定できるだけでなく、どの情報要素に誤りが発生しているかも解析部５２は発見できるようになる。
【００２０】
ＰＬＣ１ａは、プログラム作成支援装置１００と接続する第１の通信部として機能するＰＣ通信部２１と、ＰＬＣ１ｂや被制御機器と接続する第２の通信部として機能するＰＬＣ通信部２２とを備えている。制御部２０は、ラダープログラムを実行して被制御機器を制御したり、ＰＬＣ１ｂや被制御機器との通信を制御したりする。ＰＬＣ通信部２２を通過する送信バイト列２４や受信バイト列２５はバッファ部２３に記憶される。バイト列取得部２６は、プログラム作成支援装置１００から通信データを要求する取得要求信号を受信すると、バッファ部２３に一時的に記憶されている送信バイト列２４や受信バイト列２５をコピーし、ＰＣ通信部２１を介してプログラム作成支援装置１００へ送信する。なお、バッファ部２３は、数バイト程度の通信データを一時的に記憶可能な小さなメモリであり、ＰＬＣ通信部２２に内蔵されていてもよい。バッファ部２３のサイズが小さいため、プログラム作成支援装置１００は、比較的に頻繁に取得要求信号を送信することで、送信バイト列２４や受信バイト列２５をＰＬＣ１ａから取得できるようになる。ＰＬＣ１ａから取得した送信バイト列２４や受信バイト列２５は、通信データ記憶部として機能する記憶部６に記憶され、解析部５２によって解析される。
【００２１】
＜パターンマッチングによるフレーム構造の解析＞
Ｍｏｄｂｕｓなど、一部の通信プロトコルではフレーム構造の先頭を定義する先頭識別子を規定していない。先頭識別子が規定されている通信プロトコルが使用されていれば、その先頭識別子を見つけることで、その先頭識別子からフレームが始まっていることを容易に認識できる。しかし、先頭識別子を規定していない通信プロトコルでは、フレーム構造の先頭を見つけることすら容易ではない。とりわけ、１６進数表記の生の通信データを表示部１０に表示したとしても通常の技術レベルにあるオペレータにとっては、フレームがどこから始まっているかだけでなく、その通信データが何を意味しているかもまったく理解できないであろう。
【００２２】
図３（Ａ）ないし図３（Ｃ）は、Ｍｏｄｂｕｓプロトコルで使用されるフレーム構造の一例を示している。図３（Ａ）は、コイルの状態を読み出すために使用されるリクエスト側のフレーム構造と、レスポンス側のフレーム構造を示している。局は、サーバーアドレスなど送信元を示す識別情報である。ファンクションコードは、そのフレーム構造に付与された機能（コマンド種別）を識別するための識別情報である。アドレスは、スターティングアドレスを示している。点数は、コイルの数を示している。ＣＲＣは、送信側で算出した誤り検査符号である。サイズは、データ部のサイズを示している。データは、コイルの状態を示す情報が格納されている。図３（Ｂ）は、エラー状態の読み出しに使用されるフレーム構造である。ファンクションコードには、エラー状態の読み出しを意味するコードが設定される。データには、エラー状態を示す情報が格納される。図３（Ｃ）は、通信路を調査するためのエコーバック用のフレーム構造である。エコーバックによって、通信路を検査するために、リクエストとレスポンスとは同一のフレーム構造をなしている。
【００２３】
図３（Ａ）〜図３（Ｃ）を見てわかるように、どのフレーム構造も、局データとファンクションコードが先頭を占めている。もちろん、先頭識別子とは違って、局データとファンクションコードは常に変化するバイト列であるものの、一定の範囲内の値だけが搭載される性質を有している。たとえば、局データが２バイトのデータである場合に、局データは、１０進数表記で０〜６５５３５までの値をとり得る。しかし、局データは、実際にはこのすべての値をとることはなく、０〜数十までの範囲となることが多い。ファンクションコードも同様で、論理的にとり得る範囲（例：１０進数表記で０〜６５５３５まで）のうち一部の範囲だけをとり得る。よって、解析部５２が先頭を見つけるための検索ターゲットを、先頭識別子のように１つには絞れないものの、フレーム構造の先頭としてとり得るいくつかの候補には絞れることになる。そこで、本発明では、フレーム構造の先頭としてとり得るいくつかの候補をマッチングデータ６１として記憶部６に記憶しておき、マッチングデータ６１との比較によってフレーム構造を特定できるようになる。
【００２４】
図４は、明確な先頭識別子が規定されている通信プロトコルにおけるフレーム構造の先頭を検出する方法を説明する図である。この例で、局データ４０１は、０ｘ０１から０ｘ２Ａまでの値をとり、ファンクションコード４０２は０ｘ００から０ｘ６Ｅまでの値をとる。よって、フレーム構造の先頭となり得る範囲４０３は、０ｘ０１から０ｘ２Ａと、０ｘ００から０ｘ６Ｅとの組み合わせとなる。よって、マッチングデータ６１には、この組み合わせのすべてが含まれていればよい。
【００２５】
＜探索モード＞
本実施形態では、解析部５２は、フレーム構造の先頭付近に配置されることになっているコマンド種別に関する情報を探索する探索モードと、コマンドの内容を解析して表示するコマンドモードとを遷移しながら、通信データのフレーム構造を解析する。図４では、マッチングデータの一例として、局データとファンクションコードとの組み合わせについて説明したが、ここではより説明を簡潔化するために、コマンド種別の一例としてファンクションコードを使用する。
【００２６】
図５は、解析部５２が実行する探索モードについての各ステップを示すフローチャートである。図６は、解析部５２が実行するコマンドモードについての各ステップを示すフローチャートである。図７ないし図１０は、ユーザインタフェースの一例を示す図である。たとえば、図７に示したユーザインタフェースにおいて操作部１１の操作に連動して移動するポインタ７０１によって開始ボタン７０２が押し下げられると、解析部５２は探索モードを開始する。なお、図７において終了ボタン７０３がポインタ７０１によって押し下げられると、解析部５２は、解析処理を終了する。保存ボタン７０４が押されたときは解析結果をログデータとして記憶部６に保存する。印刷ボタン７０５が押されると、解析結果をプリンタ１２によって印刷する。以下で、受信バイト列２５を取得するケースについて説明する。
【００２７】
図５のＳ５０１で、命令作成部５１は、受信バイト列２５をＰＬＣ１ａから取得するための取得要求コマンドを作成し、ＰＣ通信部７を介してＰＬＣ１ａから１ａに送信する。ＰＬＣ１ａのバイト列取得部２６は、バッファ部２３に記憶されている受信バイト列２５をコピーしてＰＣ通信部２１を介してプログラム作成支援装置１００へ送信する。
【００２８】
Ｓ５０２で、解析部５２は、ＰＣ通信部７を介して受信バイト列２５を受信し、記憶部６に記憶させる。なお、受信バイト列２５だけでなく、送信バイト列２４も取得するケースでは、それぞれを区別して記憶部６に記憶させることになる。
【００２９】
Ｓ５０３で、解析部５２は、受信バイト列２５にバイト終端が含まれているかどうかを判定する。バイト終端はフレーム構造の終わりを示す情報である。たとえば、Ｍｏｄｂｕｓプロトコルでは、フレーム構造の終端にはＣＲＣが付与されることが規定されている。よって、解析部５２は、ＣＲＣと思しきバイト列を見つけると、フレーム構造の終端を発見したと判定してもよい。たとえば、フレーム構造についてＣＲＣを計算し、それがフレーム構造の終端に付与されていたＣＲＣと一致するかどうかを判定することで、フレーム構造の終端を判定してもよい。あるいは、０が所定数以上にわたって連続したときにその部分はすでに有効な部分ではないと判定することで、フレーム構造の終端を判別してもよい。受信バイト列２５にバイト終端が含まれていれば、解析部５２は、探索モードを終了する。一方で、受信バイト列２５にバイト終端が含まれていなければ、Ｓ５０４に進む。
【００３０】
Ｓ５０４で、解析部５２は、バイト列にコマンド種別を示す情報が含まれているかどうかを判定する。ここで、コマンド種別とは、コマンドがどのようなものかを示すものであり、図４を用いて説明したように、ファンクションコード４０２に相当する。ここでは、コマンド種別として、ファンクションコード４０２を検出することで、フレーム構造の先頭を検出するものとする。もちろん、局データ４０１とのファンクションコード４０２とを組み合わせてフレーム構造の先頭を特定してもよい。コマンド種別を検出したときはコマンドモードへ遷移し、コマンド種別を検出できないときはＳ５０５へ進む。
【００３１】
Ｓ５０５で、解析部５２は、コマンド種別を発見できなかったこと（つまり、解析に失敗したこと）を表示情報作成部５３に通知し、表示情報作成部５３は、生の通信データのままバイト列を表示部１０に表示させるための表示情報を作成する。表示部１０は、この表示情報にしたがって生の通信データのままバイト列を表示する。
【００３２】
＜コマンドモード＞
コマンドモードは、通信データを詳細に解析し、詳細なフレーム構造を視覚的にわかりやすく表示するモードである。なお、探索モードからコマンドモードに遷移してきたときは、解析部５２は、Ｓ６０４のステップからコマンドモードを開始する。なお、Ｓ６０１ないしＳ６０３は、上述したＳ５０１ないしＳ５０３と同内容の処理であるため、説明を省略する。
【００３３】
Ｓ６０４で、解析部５２は、通信データをフレーム構造の先頭から解析して、ファンクションコードによって特定されたコマンドのフレーム構造に合致しているかどうかを調査する。なお、Ｍｏｄｂｕｓプロトコルでは、４０種類のコマンドが存在し、これらのフレーム構造は既知である。また、各コマンドのフレーム構造を構成する情報要素も、局データやファンクションコードと同様に実際にとり得る値は既知である。よって、ファンクションコードによって特定されたコマンドのフレーム構造に含まれる情報要素がとり得る値と、受信したバイト列から得られた値とが一致しなければ、ファンクションコードのビットに誤りがあるか、または、情報要素それ自体に誤りがあるといえる。また、解析部５２は、受信したバイト列が、プロトコルによって規定された長さのバイト列に一致しているかどうかを判定してもよい。また、解析部５２は、受信したバイト列がＣＲＣなどの誤り検出符号を有しているかどうかを判定してもよい。また、受信したバイト列がプロトコルによって規定されたフォーマット(フレーム構造)を有しているかどうかを判定してもよい。ただし、コイルの状態を示すデータ部分など、フレーム構造を特定するうえで支障のないビットが誤っているときは、解析部５２が解析に成功したと判定してもよい。ただし、エラーが発生していることを明示的にオペレータに示すために、誤りのあるバイトを強調表示するように、表示情報を表示情報作成部５３に作成させてもよい。このように、解析部５２は、通信データに含まれている情報要素のエラーを検出するエラー検出部として機能してもよい。
【００３４】
Ｓ６０５で、解析部５２は通信データ（受信バイト列２５）の解析に成功したかどうかを判定する。たとえば、解析部５２は受信バイト列２５から既知のフレーム構造を復元できたときは解析に成功したと判定し、既知のフレーム構造を復元できないときは解析に失敗したと判定する。解析に失敗したときは、Ｓ６０８に進み、表示部１０は、受信バイト列２５を生のデータのまま（１６進数表記で）表示する。このときの表示情報も表示情報作成部５３が作成する。一方で、コマンド解析に成功したときはＳ６０６に進む。
【００３５】
Ｓ６０６で、解析部５２は、受信バイト列２５からコマンドの終端を検出したかどうかを判定する。コマンドの終端を検出したときは、フレーム構造の最後まで受信バイト列２５の解析が終了したことを意味するため、Ｓ６０７に進む。一方で、コマンドの終端を検出していないときは、フレーム構造の最後まで受信バイト列２５の解析が終了していないことを意味するため、Ｓ６０１に進み、命令作成部５１が再び取得要求コマンドをＰＬＣ１ａに送信する。このように、Ｓ６０１からＳ６０６を繰り返し実行することで、１つのフレーム構造について解析が達成される。
【００３６】
Ｓ６０７で、解析部５２は、解析が終了したことを表示情報作成部５３に通知し、表示情報作成部５３は解析が終了して判明したフレーム構造とその情報要素を表示するための表示情報を作成し、表示部１０にフレーム構造を表示する。その後、探索モードに戻り、次のコマンドを探す。
【００３７】
図７は、受信バイト列２５から判明したＦＩＦＯキュー読み出しコマンドのレスポンスを表示した例を示している。ユーザインタフェース７００には上述した各種の操作ボタンに加え、解析結果が含まれている。
【００３８】
ユーザインタフェース７００には、何バイト目かを示すバイトスケール７１１と、受信バイト列から復元されたフレーム構造の階層が何を意味しているかを示す階層情報７１０と、解析によって得られたコマンドのフレーム構造７１２が表示されている。このように、フレーム構造を、コマンド名、情報要素（フォーマット）、バイト列の生のデータ（１６進数表記）といったように、階層的に表示することで、オペレータは、通信データの意味内容と実際のデータを容易に把握できるようになる。なお、コマンド名や情報要素（フォーマット）は記憶部６にコマンドごとに記憶されている解説情報６２から表示情報作成部５３が読み出して、表示情報に含めている。
【００３９】
図８は、エラーデータの強調表示８０１を示している。解析部５２は、ファンクションコード（ＦＣ）からフレーム構造を特定することで、フレーム構造を構成している複数の情報要素が既知のとり得る範囲内の値になっているかどうかを判定する。なお、コマンドごとのフレーム構造を構成している複数の情報要素のそれぞれがとり得る範囲の値については、各コマンドごとに記憶部６に記憶されているものとする。たとえば、図８によれば、コマンドのデータ部の長さを示すサイズ情報にエラーが発生し、本来のとり得る範囲からは外れた値がサイズ情報として格納されている。よって、解析部５２は、サイズ情報が誤っていることを表示情報作成部５３に通知する。表示情報作成部５３は、解析部５２によってエラーが発生していることを指摘されたサイズ情報を強調表示するよう表示情報を作成する。強調表示の方法としては、エラーが発生していない他の情報要素の文字色とは異なる文字色でエラーが発生している情報要素を表示したり、点滅表示したり、背景色を変更したりするなど、種々の方法が考えられる。オペレータがエラーの発生を視覚的に認識できる方法であれば、どのような強調表示手法が採用されてもよい。
【００４０】
図９は、解析結果の他の表示例を示している。フレーム構造の全体を一度に表示すると、各情報要素は、表示スペースの関係上、略称などで簡易表示されることもある。簡易表示だけではそれが何を意味するかを理解することは簡単ではない。そこで、表示情報作成部５３は、ポインタ７０１の座標と、各情報要素の表示座標とが一致すると、その情報要素の詳細な解説情報６２を記憶部６から読み出して、詳細な解説情報６２を含む表示情報を作成してもよい。図９によれば、略称「データ」と表記されている情報要素について詳細な説明９０１が表示されることを示している。これにより、オペレータは、各情報要素が具体的に何であるかを容易に把握できるようになるだろう。
【００４１】
図１０は、オペレータにとって受信データと送信データを比較しやすくするために、送信データ１００１と受信データ１００２とを１つの画面内に同時に表示している。図１０では、エコーバックコマンドについてのリクエストとレスポンスとを示しており、オペレータは両者を比較することで、ＰＬＣ１ａとＰＬＣ１ｂとの間の通信状態が良好なのかどうかを容易に判断できるようになる。
【００４２】
ところで、解析部５２は、解析結果をログデータ６３として記憶部６に記憶してもよい。操作部１１から検索の実行を指示されると、制御部５は操作部１１から入力された検索キーワードにしたがって検索を実行し、ヒットしたコマンド（受信バイト列や送信バイト列から復元したフレーム構造）を表示部１０に表示させてもよい。この際に、表示情報作成部５３は、図７ないし図１０に示したユーザインタフェース７００を表示するように表示情報を作成してもよい。検索キーワードとしては、たとえば、情報要素の名称（例：サイズ、局、ＦＣなど）だけであってもよいし、実際のデータ（例：００、０６、２Ａなど）も追加されてもよい。ＦＣはファンクションコードの略称である。
【００４３】
また、操作部１１を通じて印刷ボタン７０５が操作されると、制御部５は、ユーザインタフェース７００に示したフレーム構造と同様の印刷形式にてプリンタ１２に印刷を実行させてもよい。
【００４４】
以上説明したように、本実施形態によれば、ＰＬＣ１ａとＰＬＣ１ｂとを接続するネットワークにプロトコルアナライザを接続する代わりに、プログラム作成支援装置１００をＰＬＣ１ａに接続し、プロトコルアナライザまたはデバック装置として動作させる。プログラム作成支援装置１００は、ＰＬＣ１ａとＰＬＣ１ｂとの間、または、ＰＬＣ１ａと被制御機器との間で送受信された通信データのフレーム構造をパターンマッチングによって解析して表示する。そのため、ＰＬＣ間を接続するネットワークにプロトコルアナライザを割り込ませることなく、かつ、容易にＰＬＣ−ＰＬＣ間やＰＬＣ−被制御機器間の通信内容を把握できるようになる。つまり、ＰＬＣネットワーク間にプログラム作成支援装置１００を接続してしまうと、ＰＬＣ間の通信にプログラム作成支援装置１００がノイズ源として働く可能性がある。本実施形態であれば、プログラム作成支援装置１００は、ＰＬＣネットワークから分離されて、ＰＬＣ１ａにだけ接続している。そのため、プログラム作成支援装置１００がＰＬＣネットワークに対するノイズ源になりにくくなっている。
【００４５】
本実施形態では、フレーム構造の先頭に配置される可能性があるマッチングデータ６１を記憶部６に記憶させておき、解析部５２は、マッチングデータ６１と通信データとを比較して、フレーム構造の先頭を特定する。よって、フレーム構造の先頭を明示的に示す先頭識別子を規定していない通信プロトコルであっても、解析部５２は、フレーム構造の先頭を容易に特定できるようになる。なお、先頭識別子を有する通信プロトコルでは、解析部５２は、先頭識別子を検索することで、フレーム構造の先頭を通信データの中から特定できるようになる。
【００４６】
表示部１０は、フレーム構造を構成している複数の情報要素のそれぞれの意味を示す解説情報を、通信データに含まれている情報要素とともに表示するため、どの情報要素が何を意味しているのかをオペレータは容易に把握できるようになる。
【００４７】
解析部５２がパターンマッチングに失敗（すなわちフレーム構造の解析に失敗）すると、表示部１０は、通信データを生のデータのまま表示する。これにより、オペレータは何らかのエラーが発生していることを把握できるようになる。また、習熟したオペレータであれば、生のデータからエラーの原因を理解できることもあるため、生のデータをそのまま表示してもよい。
【００４８】
また、表示部１０は、通信データのうちエラーが検出された情報要素については強調表示８０１を実行するため、どの情報要素にエラーが発生したかをオペレータが把握しやすくなる。たとえば、被制御機器の動作状態を示す情報要素にエラーが発生しておらず、他の情報要素にエラーが発生したときは、被制御機器は故障しておらず、通信部分に何らかのエラーが発生していることをオペレータは理解できるであろう。
【００４９】
さらに、表示部１０は、解析結果を階層構造として表示するため、オペレータは視覚的にコマンドの構成やフレーム構造を把握しやすくなろう。さらに、表示部１０は、フレーム構造を構成している複数の情報要素のうちいずれかが操作部１１によって指定されると、指定された情報要素の意味を示す説明９０１を表示してもよい。通常の階層構造にしたがってフレーム構造を表示すると、一部の情報要素を略称で表示するなど、オペレータにとっては情報要素の内容を一目では把握しにくくなることがある。そこで、ポインタ７０１によって指定された情報要素については、表示部１０がその情報要素の詳細な説明９０１を表示してもよい。また、制御部５は、操作部１１を通じてオペレータによって入力されたキーワードにしたがって解析結果を検索する検索部として機能してもよい。この場合、表示部１０は、検索によってヒットして解析結果を表示してもよい。たとえば、オペレータは特定の情報要素について検索を実行することで、その情報要素について傾向を把握することが可能となろう。また、プリンタ１２は、解析結果を印刷してもよい。これにより複数のオペレータによって解析結果を共有しやすくなり、エラーの原因を早期に発見できるようになろう。
【図１】
2014052671.tif 000003
【図２】
2014052671.tif 000004
【図３】
2014052671.tif 000005
【図４】
2014052671.tif 000006
【図５】
2014052671.tif 000007
【図６】
2014052671.tif 000008
【図７】
2014052671.tif 000009
【図８】
2014052671.tif 000010
【図９】
2014052671.tif 000011
【図１０】
2014052671.tif 000012