(57)【特許請求の範囲】
【請求項１】
コントローラ用の制御プログラムをデバッグするためのデバッグ装置であって、
デバッグ機能を有さないシミュレーションプログラムと、デバッグプログラムとをコンピュータの汎用ＯＳ上で実行させることで実現され、
前記シミュレーションプログラムは、
前記コントローラの機能をエミュレートするものであって、
前記コントローラが制御プログラムを実行する機能をエミュレートするタスクスレッドと、前記コントローラが外部装置との通信を行う機能をエミュレートする通信スレッドとを含む１つのプロセスとして、前記汎用ＯＳ上で動作するものであり、
前記デバッグプログラムは、前記コンピュータを、
デバッグ対象とする制御プログラムを前記シミュレーションプログラムに与えて、前記シミュレーションプログラムを動作させる動作手段、
前記汎用ＯＳが提供するデバッグ用の命令を使って、前記制御プログラムのブレークポイントで前記シミュレーションプログラムのプロセスを一時停止する停止手段、および、
前記停止手段による前記プロセスの一時停止後に、前記プロセスにおける前記通信スレッドの動作を再開する再開手段、として機能させるものであり、
前記コントローラの仕様が変更された場合に、前記シミュレーションプログラムの部分のみを入れ替えるだけで、変更後のコントローラ用の制御プログラムをデバッグ可能にしたことを特徴とするデバッグ装置。
【請求項２】
前記シミュレーションプログラムの少なくともタスクスレッドの部分は、前記コントローラのファームウェアのソースコードを利用して作成されたものである
ことを特徴とする請求項１に記載のデバッグ装置。
【請求項３】
コントローラ用の制御プログラムをデバッグするためのプログラムであって、
コンピュータの汎用ＯＳ上で実行される、デバッグ機能を有さないシミュレーションプログラムと、デバッグプログラムとを含み、
前記シミュレーションプログラムは、
前記コントローラの機能をエミュレートするものであって、
前記コントローラが制御プログラムを実行する機能をエミュレートするタスクスレッドと、前記コントローラが外部装置との通信を行う機能をエミュレートする通信スレッドとを含む１つのプロセスとして、前記汎用ＯＳ上で動作するものであり、
前記デバッグプログラムは、前記コンピュータに、
デバッグ対象とする制御プログラムを前記シミュレーションプログラムに与えて、前記シミュレーションプログラムを動作させる動作ステップと、
前記汎用ＯＳが提供するデバッグ用の命令を使って、前記制御プログラムのブレークポイントで前記シミュレーションプログラムのプロセスを一時停止する停止ステップと、
前記停止ステップによる前記プロセスの一時停止後に、前記プロセスにおける前記通信スレッドの動作を再開する再開ステップと、
を実行させ、
前記コントローラの仕様が変更された場合に、前記シミュレーションプログラムの部分のみを入れ替えるだけで、変更後のコントローラ用の制御プログラムをデバッグ可能にしたことを特徴とするプログラム。
【請求項４】
請求項３に記載のプログラムを記録していることを特徴とするコンピュータ読取可能な記録媒体。
【請求項５】
コントローラ用の制御プログラムをデバッグするためのデバッグ方法であって、
コンピュータが、デバッグ機能を有さないシミュレーションプログラムと、デバッグプログラムとを前記コンピュータの汎用ＯＳ上で実行することで実現され、
前記シミュレーションプログラムは、
前記コントローラの機能をエミュレートするものであって、
前記コントローラが制御プログラムを実行する機能をエミュレートするタスクスレッドと、前記コントローラが外部装置との通信を行う機能をエミュレートする通信スレッドとを含む１つのプロセスとして、前記汎用ＯＳ上で動作するものであり、
前記コンピュータが、前記デバッグプログラムを実行することにより、デバッグ対象とする制御プログラムを前記シミュレーションプログラムに与えて、前記シミュレーションプログラムを動作させる動作ステップと、
前記コンピュータが、前記デバッグプログラムを実行することにより、前記汎用ＯＳが提供するデバッグ用の命令を使って、前記制御プログラムのブレークポイントで前記シミュレーションプログラムのプロセスを一時停止する停止ステップと、
前記コンピュータが、前記デバッグプログラムを実行することにより、前記停止ステップによる前記プロセスの一時停止後に、前記プロセスにおける前記通信スレッドの動作を再開する再開ステップと、
を有し、
前記コントローラの仕様が変更された場合に、前記シミュレーションプログラムの部分のみを入れ替えるだけで、変更後のコントローラ用の制御プログラムをデバッグ可能にしたことを特徴とするデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグ装置に関する。
【背景技術】
【０００２】
ＦＡ（Ｆａｃｔｏｒｙ  Ａｕｔｏｍａｔｉｏｎ）においては、工場内に設置される生産設備のデータ収集及び制御を行う各種のスレーブ装置と、複数のスレーブ装置を集中管理するマスター装置（プログラマブルコントローラ（ＰＬＣ））と、を通信バスを介して接続したフィールドネットワークにより生産設備の制御が行われる。マスター装置は、制御プログラムを実行することで、例えば、接続された複数のスレーブ装置を制御したり、各スレーブ装置から情報を取得したりする。また、マスター装置は、外部装置と通信を行う機能を有する。
【０００３】
図７は、フィールドネットワークの構成例を示す図である。図７において、フィールドネットワーク１００は、マスター装置２００と複数のスレーブ装置３００とがケーブル４００や装置に備わるＩ／Ｏユニット５００を介して直接的又は間接的に接続されることにより形成される。スレーブ装置３００には、電源ユニット，モータユニット，カウンタユニット，画像ユニット，通信ユニット，Ｉ／Ｏユニット等がある。通信バスのトポロジーは、フィールドネットワークの規格により、ライン、デイジーチェーン、ツリー、スターなど種々のトポロジーをとり得る。
【０００４】
また、マスター装置２００には、ユーザがマスター装置２００の動作設定、フィールドネットワーク１００の動作状態の表示、ネットワークシステムの設計（例えば、マスター装置とスレーブ装置の接続構成の決定や、マスター装置で実行する制御プログラムの作成）などを行うための管理装置６００が接続されることもある。管理装置６００は設定ツールがインストールされたパーソナルコンピュータなどにより構成される。
【０００５】
マスター装置で実行する制御プログラムの一般的な作成手順は以下のとおりである。
（１）まず、管理装置６００等に実装されている開発環境（プログラミングツール）を用いて、マスター装置で実行させる制御プログラムのプログラムコードを作成する。プログラムは、例えば、ラダー言語、ＳＦＣ言語、ストラクチャードテキスト等で記述される。最近では、複数の言語が混在していることも多い。
（２）作成した制御プログラムをコンパイル・ビルドすることにより、実行ファイルを作成する。
（３）作成した実行ファイルを管理装置６００等に実装されているシミュレータソフトを用いて実行（シミュレーション）し、制御プログラムに不具合が無いこと（即ち、マスター装置が意図した動作を行うこと）を確認する。
（４）不具合が発見されたら（２）に戻りプログラムを修正し、（３）のシミュレーションを実行する。
（５）完成した実行ファイルをマスター装置のメモリにインストールする。
【０００６】
従来、（２）〜（４）の作業は、デバッグ機能をもつ専用のＰＬＣシミュレータソフトを用いて、制御プログラムをステップ実行したり、ブレークポイントで一時停止して変数の状態を確認したりするのが一般的であった。
【０００７】
しかしながら、このようなデバッグ機能をもつシミュレータソフトは、ＰＬＣの新製品が出たり、ＰＬＣの仕様（ファームウェア）が変更されるたびに、新たに作成しなおさなければならないため、シミュレータソフト自体の開発工数や開発コストが問題となってい
た。
尚、デバッガに関する先行技術としては、例えば、特許文献１〜５に開示されたものが知られている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平１１−１５６９７号公報
【特許文献２】特開２００１−１７５４９９号公報
【特許文献３】特開２００２−４１３２６号公報
【特許文献４】特開２００７−７９９６９号公報
【特許文献５】特開２００８−１７１２３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、コントローラの制御プログラムのデバッガを簡単に実現するための技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、本発明は以下の構成を採用する。
【００１１】
本発明のデバッグ装置は、
コントローラ用の制御プログラムをデバッグするためのデバッグ装置であって、
デバッグ機能を有さないシミュレーションプログラムと、デバッグプログラムとをコンピュータの汎用ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）上で実行させることで実現され、
前記シミュレーションプログラムは、
前記コントローラの機能をエミュレートするものであって、
前記コントローラが制御プログラムを実行する機能をエミュレートするタスクスレッドと、前記コントローラが外部装置との通信を行う機能をエミュレートする通信スレッドとを含む１つのプロセスとして、前記汎用ＯＳ上で動作するものであり、
前記デバッグプログラムは、前記コンピュータを、
デバッグ対象とする制御プログラムを前記シミュレーションプログラムに与えて、前記シミュレーションプログラムを動作させる動作手段、
前記汎用ＯＳが提供するデバッグ用の命令を使って、前記制御プログラムのブレークポイントで前記シミュレーションプログラムのプロセスを一時停止する停止手段、および、
前記停止手段による前記プロセスの一時停止後に、前記プロセスにおける前記通信スレッドの動作を再開する再開手段、として機能させるものであり、
前記コントローラの仕様が変更された場合に、前記シミュレーションプログラムの部分のみを入れ替えるだけで、変更後のコントローラ用の制御プログラムをデバッグ可能にしたことを特徴とする。
【００１２】
本発明のデバッグ装置では、シミュレーションプログラムはコントローラ（例えばＰＬＣ）の機能をエミュレートするだけの非常にシンプルなものであり、デバッグ機能は有していない。本発明のデバッグ装置では、デバッグ機能はデバッグプログラムが有しており、デバッグプログラムがＯＳのサービス（デバッグ用の命令）を使ってシミュレーションプログラムのプロセスを一時停止するという方法により、デバッグを実現する。このようなプログラム構成を採用することにより、ＰＬＣの新製品が出たり、ＰＬＣの仕様が変更されたりしても、シミュレーションプログラムの部分を入れ替えるだけで済み、デバッグプログラムの部分は流用可能であるため、デバッグ装置の開発工数や開発工数を従来に比べて低減することが期待できる。
【００１３】
ただし、上記のようなプログラム構成においては、デバッグプログラムがシミュレーションプログラムのプロセスを単純に一時停止すると、タスクスレッドにより実行されてい
る制御プログラムの動作が停止するだけでなく、通信スレッドのように外部装置との通信を行う機能も停止してしまう。これでは、シミュレーションプログラムによりエミュレートされているＰＬＣ（以下、「仮想ＰＬＣ」と称する。）の状態や内部変数などを外部から確認することができず、制御プログラムのデバッグを行うことができない。そこで、本発明では、シミュレーションプログラムのプロセスを一時停止した後に、通信スレッドの動作を強制的に再開させるという構成上の工夫を採用している。これにより、デバッグプログラムなどの外部のプロセスが、通信スレッドを通じて仮想ＰＬＣの状態や内部変数などの情報を取得することが可能となるため、制御プログラムのデバッグ作業を遂行することができる。
【００１４】
ところで、ＰＬＣ自体の基本機能（制御プログラムを実行する機能、外部装置と通信する機能など）も、ＰＬＣのマイクロプロセッサ上で動作するプログラムで実現されているのが一般的である（以下、ＰＬＣ自体の基本機能を実現するプログラムを、スレーブ装置等の制御のためにＰＬＣに実行させる制御プログラムと区別するため、「ファームウェア」と称する。）。したがって、本発明のシミュレーションプログラムのようにＰＬＣの機能をエミュレートするだけのシンプルな機能のものは、ＰＬＣのファームウェアのソースコードをそのまま（若しくは若干の修正を加えて）、デバッグ装置のコンピュータのＯＳ用にリコンパイルするだけで、作成することも可能である。この場合は、シミュレーションプログラムの部分の開発は実質的に必要無くなるため、従来に比べて開発工数や開発コストを格段に低減することができる。また、ＰＬＣのファームウェアのソースコードを利用することにより、仮想ＰＬＣにおいてＰＬＣ（実機）の機能を忠実に再現することができるという利点もある。なお、本発明は、制御プログラムのデバッグを行うためのものであるため、少なくともタスクスレッドに相当する部分のファームウェアのソースコードを利用するとよい。もちろん、タスクスレッド以外の部分（通信スレッドなど）のソースコードを利用することも好ましい。
【００１５】
また、本発明は、上記手段の少なくとも一部を有するデバッグ装置として捉えてもよいし、上記処理の少なくとも一部を含むデバッグ方法、または、かかる方法を実現するためのプログラムやそのプログラムを記録した記録媒体として捉えることもできる。なお、上記手段及び処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。
【発明の効果】
【００１６】
本発明によれば、コントローラの制御プログラムのデバッガを簡単に実現することができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、本実施形態に係るデバッグ装置の機能構成の一例を示すブロック図である。
【図２】図２は、表示制御部から通信スレッドに出力する通信コマンド、及び、通信スレッドからの応答の一例を示す図である。
【図３】図３は、本実施形態に係るデバッグ装置のシミュレーション実行時の処理の流れの一例を示す図である。
【図４】図４は、図１の構成における課題を示す図であり、プロセス一時停止時の処理の流れの一例を示す図である。
【図５】図５は、本実施形態に係るデバッグ装置の処理の流れの一例を示す図である。
【図６】図６は、スレッド情報の一例を示す図である。
【図７】図７は、フィールドネットワークの構成例を示す図である。
【発明を実施するための形態】
【００１８】
（システム構成）
図１は、本実施形態に係るデバッグ装置の機能構成を示すブロック図である。このデバッグ装置１０００は、コントローラの制御プログラムをデバッグするための装置である。本実施形態では、コントローラがプログラマブルコントローラ（ＰＬＣ）１３０である場合を例に説明する。ＰＬＣ１３０は、図７に例示したような産業用のネットワークシステムにおけるマスター装置（図７では符号２００）として利用されるものである。産業用ネットワークには様々な規格が存在し、またＰＬＣ製品についても様々な仕様のものが存在するが、本実施形態のデバッグ装置１０００はそのいずれにも適用可能である。
【００１９】
デバッグ装置１０００は、ＣＰＵ、主記憶装置（メモリなど）、補助記憶装置（ハードディスクなど）、各種入出力インターフェース、入力装置（キーボード、マウスなど）、表示装置等を備える汎用のコンピュータにより構成可能である。例えば、マイクロソフト社のWindows（登録商標）シリーズ、アップル社のMacOSシリーズなどの汎用のＯＳ（オペレーションシステム）で動作するコンピュータを好ましく利用できる。デバッグ装置１０００の機能を実現するシミュレーションプログラム及びデバッグプログラムは補助記憶装置に格納されており、ＣＰＵがこれらのプログラムを主記憶装置にロードし、ＯＳ上で実行することにより、後述するデバッグ装置１０００の各種の機能が実現される。
【００２０】
（プログラム構成）
図１において、シミュレータ１１０は、シミュレーションプログラムにより実現される機能を示し、プログラミングツール１２０は、デバッグプログラムにより実現される機能を示す。なお、図１には、比較のために実機のＰＬＣ１３０も示している。実機のＰＬＣ１３０においても、その基本機能は、ＰＬＣ用のリアルタイムＯＳ上で動作するプログラムで実現されている。図１の例では、制御プログラムを実行して各種スレーブ装置を制御する機能をタスクスレッド１３２が担い、制御プログラムの内部変数、エラーコード、ＰＬＣ１３０やスレーブ装置のステイタスなどの各種情報を外部装置との間で送受する機能を通信スレッド１３３が担っている。
【００２１】
シミュレータ１１０は、ＰＬＣ１３０の機能をエミュレートする仮想ＰＬＣである。シミュレータ１１０のプログラムは、１つのプロセス１１１としてＯＳ上で実行され、タスクスレッド１１２、通信スレッド１１３など複数のスレッドを含むマルチスレッドプログラムである。タスクスレッド１１２は、ＰＬＣ１３０が制御プログラムを実行する機能をエミュレートするものである。即ち、シミュレータ１１０の制御プログラムの実行結果と、ＰＬＣ１３０の制御プログラムの実行結果は基本的に一致する。通信スレッド１１３は、ＰＬＣ１３０が外部装置との通信を行う機能をエミュレートするものである。
【００２２】
本実施形態では、シミュレータ１１０のプログラム（タスクスレッド１１２の部分と通信スレッド１１３の部分）は、実機のＰＬＣ１３０用に開発されたファームウェアのソースコードをそのまま（若しくは若干の修正を加えたもの）を利用して作成されている。通常、デバッグ装置１０００のＯＳと、ＰＬＣ１３０のＯＳとは異なるため、シミュレータ１１０の実行ファイルは、ファームウェアのソースコードをデバッグ装置１０００のＯＳ用にリコンパイル・ビルドして作成されるが、もし両者のＯＳが互換性を有しているような場合は、ＰＬＣ１３０のファームウェア（実行ファイル）をそのままシミュレータ１１０として利用することも可能である。
【００２３】
プログラミングツール１２０は、デバッグ機能部１２１と表示制御部１２２を有する。
デバッグ機能部１２１は、上記ＯＳが提供するデバッグ用のＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を使って、デバッグ機能を果たす。例えば、上記ＯＳが提供するデバッグ用の命令を使って、ＰＬＣ１３０の制御プログラムのブレークポイントでシミュレーションプログラムのプロセスを一時停止する（停止手段）。
【００２４】
表示制御部１２２は、通信スレッド１１３（及び、ＰＬＣ１３０の通信スレッド１３３）との通信結果を不図示の表示装置に表示する。表示制御部１２２から通信スレッドに出力する通信コマンド、及び、通信スレッドからの応答の一例を図２に示す。例えば、実行中の制御プログラム内の変数のリストを取得したい場合には、表示制御部１２２は、「ＬｉｓｔＶａｒ」というコマンドを出力する。それにより、通信スレッドから「Ｖａｒ１〜Ｖａｒ３」といった変数のリストが返される。変数は、例えば、上記実行結果や該実行結果を算出する際に使用される変数などである。また、実行中の制御プログラム内の変数の現在値を取得したい場合には、表示制御部１２２は「ＧｅｔＶａｒ」というコマンドを出力する。それにより、通信スレッドから変数の現在値が返される（図２の例では、変数Ｖａｒ１を指定して「ＧｅｔＶａｒ」が出力されたため、変数Ｖａｒ１の現在値「２３０」が返される）。
【００２５】
（シミュレーション実行時の処理の流れ）
図３は、本実施形態に係るデバッグ装置のシミュレーション実行時の処理の流れの一例を示す図である。
【００２６】
まず、ユーザは、プログラミングツール１２０のエディタ１２３を用いて、制御プログラムのソースファイル３０１（ソースプログラム）を作成する（ステップＳ３０１）。
【００２７】
そして、プログラミングツール１２０のコンパイラ１２４が、ユーザからの指示に応じて、ソースファイル３０１をコンパイルする（ステップＳ３０２）。それにより、制御プログラムの実行ファイル３０２とデバッグ情報３０３とが作成される。デバッグ情報３０３は、ソースファイル３０１内の位置と、タスクスレッド１１２が制御プログラムを実行する際に実行ファイル３０２が展開されるメモリ上のアドレスとを対応付ける情報である。
【００２８】
次に、プログラミングツール１２０のタスク設定部１２５が、ユーザからの指示に応じて、タスク設定（ステップＳ３０２で作成された複数の実行ファイル３０２の実行手順の設定）を行い、設定結果としてタスク設定情報３０４を生成する（ステップＳ３０３）。
【００２９】
そして、プログラミングツール１２０が、ユーザからの指示に応じてシミュレータ１１０を起動する。
【００３０】
次に、ステップＳ３０５〜Ｓ３１１において、プログラミングツール１２０が、デバッグ対象とする制御プログラムをシミュレータ１１０に与え、シミュレータを動作させる（動作手段）。
【００３１】
具体的には、シミュレータ１１０のスケジューラ１１４が、ステップＳ３０３で生成されたタスク設定情報３０４を読み込み、タスクスレッド１１２を生成する（ステップＳ３０５）。また、スケジューラ１１４が、ステップＳ３０２で作成された複数の実行ファイル３０２を読み込む（ステップＳ３０６）。
【００３２】
次に、デバッグ機能部１２１が、プロセス１１１にアタッチする（ステップＳ３０７）。これにより、デバッグ可能となる。
【００３３】
そして、プログラミングツール１２０が、シミュレータ１１０に接続する（ステップＳ３０８）。ここで、“接続する”とは、例えば、プログラミングツール１２０とシミュレータ１１０とを互いに通信可能な状態にすることを意味する。
【００３４】
次に、プログラミングツール１２０が、通信スレッド１１３にシミュレーションの実行コマンドを発行する（ステップＳ３０９）。
【００３５】
通信スレッド１１３は、実行コマンドが発行されると、スケジューラ１１４に対してシミュレーションの実行開始を指示する（ステップＳ３１０）。
【００３６】
スケジューラ１１４は、シミュレーションの実行開始が指示されると、タスクスレッド１１２に実行を指示する（ステップＳ３１１）。それにより、タスクスレッド１１２が動作し、シミュレーションが開始される。
【００３７】
そして、表示制御部１２２は、通信スレッド１１３に通信コマンドを発行し（ステップＳ３１２）、通信スレッド１１３がそれに応答することにより（ステップＳ３１３）、所望の情報が表示装置で表示される。
【００３８】
以上が、本実施形態に係るデバッグ装置のシミュレーション実行時の処理の流れである。
【００３９】
（図１の構成における課題）
上述したように、図１に示すようなデバッグ装置を用いることにより、ＰＬＣの制御プログラムのデバッガを簡単に実現することが可能となる。しかしながら、本実施形態に係るデバッグ装置では、シミュレータ１１０は１つのプロセス１１１として動作しており、デバッグ機能部１２１はＯＳが提供するデバッグ用のＡＰＩを用いてデバッグ機能を果たしている。そのため、ブレークポイントで、タスクスレッド１１２のみではなく、プロセス１１１全体が一時停止してしまい、通信スレッド１１３との通信が途絶してしまう。これでは、プログラミングツール１２０から、シミュレータ１１０による仮想ＰＬＣの内部変数やステイタスなどを確認することができず、制御プログラムが正常に動作しているか否かを確認することができない。即ち、デバッグ装置がデバッガとして機能しなくなってしまう。
【００４０】
以下、上記課題について、図４を用いて説明する。図４は、図１の構成における課題を示す図であり、プロセス１１１の一時停止時の処理の流れの一例を示す図である。
【００４１】
まず、ユーザが、エディタ１２３を用いて、ブレークポイントを設定する（ステップＳ４０１）。それにより、ソースファイル上のブレークポイントの位置情報４０１が生成される。
【００４２】
次に、デバッグ機能部１２１が、ステップＳ４０１で生成された位置情報４０１とデバッグ情報３０３を用いて、ブレークポイントに対応するメモリ上のアドレス４０２を求める（ステップＳ４０２）。
【００４３】
そして、デバッグ機能部１２１は、ステップＳ４０２で求めたアドレスに、ＯＳが提供するデバッグ用のブレーク命令（停止命令）を書き込む（ステップＳ４０３）。それにより、ユーザが設定したブレークポイントでプロセス１１１全体が一時停止する（ステップＳ４０４）。
【００４４】
その結果、通信スレッド１１３は一時停止するため、ステップＳ４０５で表示制御部１２２が通信スレッドに通信コマンドを発行したとしても、表示制御部１２２は、通信スレッド１１３から該通信コマンドに対する応答を得ることができなくなってしまう。
【００４５】
なお、このような課題は、シミュレータ１１０の機能をシンプルなものにし、かつ、Ｏ
Ｓのサービスであるデバッグ用ＡＰＩを利用してプロセスの一時停止を行う構成を採用したために、生じるものである。言い換えると、ステップ実行などのデバッグ機能を備える高機能なシミュレータを用いれば、発生しない課題である。しかしながら、このような高機能なシミュレータを作成するには前述のように多大な開発工数と開発コストが必要となるため好ましくない。そこで本実施形態では、別の工夫を加えることにより、上記課題を解決することとした。
【００４６】
（上記課題を解決するための構成）
上記課題を解決するために、本実施形態では、デバッグ機能部１２１によるプロセス１１１の一時停止後に、通信スレッド１１３の動作を自動で再開する処理を行う（再開手段）。なお、本実施形態では、当該処理はデバッグ機能部１２１により行われるものとするが、デバッグ機能部１２１以外の機能により行われてもよい。なお、再開するスレッドは通信スレッド１１３のみに限らない。タスクスレッド１１２以外の複数のスレッドの動作が自動で再開されてもよい。また、デバッグ装置をデバッガとして機能させるために必要なスレッド以外のスレッドが自動で再開されてもよい。
【００４７】
以下、上記処理を含めた本実施形態に係るデバッグ装置１０００の処理の流れについて図５を用いて説明する。図５は、本実施形態に係るデバッグ装置１０００の処理の流れの一例を示す図である。
【００４８】
まず、シミュレータ１１０のスレッド情報出力スレッド１１５が、スレッド情報５０１を出力する（ステップＳ５０１）。そして、デバッグ機能部１２１が、出力されたスレッド情報５０１を取得する（ステップＳ５０２）。
【００４９】
スレッド情報５０１は、例えば、一時停止するスレッドを示す情報である。具体的には、各スレッドには識別子が設定されており、スレッド情報５０１として、図６（Ａ）に示すような、一時停止するスレッドのリストが用いられる。図６（Ａ）のスレッド情報は、「ＣｙｃｌｅＴａｓｋ１＿ＲＵＮ」、「ＣｙｃｌｅＴａｓｋ１＿ＩＯ＿ＩＮ」、「ＣｙｃｌｅＴａｓｋ１＿ＩＯ＿ＯＵＴ」、「ＣｙｃｌｅＴａｓｋ２＿ＲＵＮ」、「ＣｙｃｌｅＴａｓｋ２＿ＩＯ＿ＩＮ」、「ＣｙｃｌｅＴａｓｋ２＿ＩＯ＿ＯＵＴ」、「ＴｉｍｅＧｅｎｅｒａｔｏｒ」の６つのタスクスレッドが一時停止するスレッドであることを示す。図中、「＝」の後に付加されている数値は、各スレッドの識別子である。スレッド情報５０１は、ブレークポイントがヒットする前（例えば、シミュレーションの実行開始直後や、プログラミングツール１２０とシミュレータ１１０の接続（ステップＳ３０８）直後）に出力される。
【００５０】
次に、デバッグ機能部１２１が、ＯＳが提供するデバッグ用のＡＰＩを用いて、タスクスレッド１１２にブレークポイントを設定する（ステップＳ５０３）。即ち、図４のステップＳ４０３と同様の処理が行われる。それにより、ユーザが設定したブレークポイントでプロセス１１１全体が一時停止する（ステップＳ５０４）。
【００５１】
プロセス１１１全体が一時停止すると、デバッグ機能部１２１は、ステップＳ５０２で取得したスレッド情報に基づいて、動作の再開が必要なスレッドを解釈し、シミュレータ１１０に対して当該スレッドの動作の再開を指示する（ステップＳ５０５）。本実施形態では、図６（Ａ）のリストに含まれないスレッドの動作の再開が指示される。それにより、通信スレッド１１３の動作が再開される。なお、デバッグ機能部１２１は、この時点でスレッド情報５０１を取得してもよい。
【００５２】
その結果、表示制御部１２２は、ステップＳ５０６で通信スレッド１１３に通信コマンドを発行した場合に、ステップＳ５０７で通信スレッド１１３から該通信コマンドに対す
るして応答を得ることができ、所望の情報を表示装置に表示することができる。即ち、デバッグ装置をデバッガとして機能させることができる。
【００５３】
以上述べたように本実施形態のデバッグ装置１０００では、シミュレータ１１０はＰＬＣ１３０の機能をエミュレートするだけの非常にシンプルなものであり、デバッグ機能は有していない。そして、プログラミングツール１２０のデバッグ機能部１２１がＯＳのサービス（デバッグ用の命令）を使ってシミュレータ１１０のプロセス１１１を一時停止するという方法により、デバッグを実現する。このようなプログラム構成を採用することにより、ＰＬＣの新製品が出たり、ＰＬＣの仕様が変更されたりしても、シミュレータ１１０のプログラムの部分を入れ替えるだけで済み、プログラミングツール１２０の部分は流用可能であるため、デバッグ装置全体の開発工数や開発工数を従来に比べて低減することが期待できる。
【００５４】
また本実施形態では、ＰＬＣ１３０のファームウェアのソースコードを利用して、デバッグ装置１０００のシミュレータ１１０を作成している。これにより、シミュレータ１１０のプログラムの部分の開発は実質的に必要無くなるため、従来に比べて開発工数や開発コストを格段に低減することができる。また、ＰＬＣ１３０のファームウェアのソースコードを利用することにより、シミュレータ１１０の仮想ＰＬＣにおいて実機のＰＬＣ１３０の機能を忠実に再現することができるという利点もある。
【００５５】
なお、本実施形態では、スレッド情報に基づいて動作を再開するスレッドが決定される構成としたが、スレッド情報は用いなくてもよい。スレッドの動作の再開を指示するデバッグ機能部１２１等に動作を再開するスレッドを予め把握させておいてもよい。
【００５６】
なお、本実施形態では、スレッド情報が一時停止するスレッドを示す情報である場合について説明したが、スレッド情報はこれに限らない。例えば、スレッド情報は動作を再開するスレッドを示す情報であってもよい。具体的には、スレッド情報５０１として、図６（Ｂ）に示すような、動作を再開するスレッドのリストを用いてもよい。図６（Ｂ）のスレッド情報は、通信スレッドである「Ｃｏｎｎｅｃｔｉｏｎ」と「Ｃｏｍｍｕｎｉｃａｔｉｏｎ」が再開するスレッドであることを示す。スレッド情報が動作を再開するスレッドのリストである場合、ステップＳ５０５では、リストに含まれるスレッドの動作の再開を指示すればよい。
【符号の説明】
【００５７】
１  設計支援システム
２  ディスプレイ
３  ＣＰＵ
４  入力装置
３１  記憶手段
３２  取得手段
３３  入力手段
３４  生成手段
３５  画像出力手段
１００  フィールドネットワーク
１１０  シミュレータ
１１１  プロセス
１１２  タスクスレッド
１１３  通信スレッド
１１４  スケジューラ
１１５  スレッド情報出力スレッド
１２０  プログラミングツール
１２１  デバッグ機能部
１２２  表示制御部
１２３  エディタ
１２４  コンパイラ
１２５  タスク設定部
１３０  マスター装置
１３３  通信スレッド
２００  マスター装置
３００  スレーブ装置
３０１  ソースファイル
３０２  実行ファイル
３０３  デバッグ情報
３０４  タスク設定情報
４００  ケーブル
４０１  位置情報
４０２  アドレス
５００  ユニット
５０１  スレッド情報
６００  管理装置
１０００  デバッグ装置
【図１】
0005212508.tif 000002
【図２】
0005212508.tif 000003
【図３】
0005212508.tif 000004
【図４】
0005212508.tif 000005
【図５】
0005212508.tif 000006
【図６】
0005212508.tif 000007
【図７】
0005212508.tif 000008