(57)【特許請求の範囲】
【請求項１】
最適化機械語オブジェクトを保持する第一の記憶領域と、
前記最適化機械語オブジェクトの先頭アドレスが登録されるテーブルと、
前記テーブルに登録された前記先頭アドレスを指定して前記最適化機械語オブジェクトを実行するプログラム実行部と、
このプログラム実行部をサイクリックに呼び出し前記最適化機械語オブジェクトを実行するプログラム実行管理部と、
トレース指示に基づき、前記プログラム実行管理部の前記プログラム実行部の呼び出し後にトレース処理に切り替えるデバッグ制御部と、
前記トレース処理の実行結果を出力するトレース結果出力部と、
前記最適化機械語オブジェクトに対応した非最適化機械語オブジェクトを保持する第二の記憶領域と、を備え、
前記デバッグ制御部は、オブジェクトの実行の停止位置を含むブレーク指示が与えられると前記停止位置に基づき前記非最適化機械語オブジェクトにブレーク命令を挿入するとともに前記非最適化機械語オブジェクトの先頭アドレスを前記テーブルに登録するブレーク実行手段をさらに備え、
前記プログラム実行部は、前記ブレーク実行手段によって登録された前記非最適化機械語オブジェクトの先頭アドレスを指定して前記非最適化機械語オブジェクトを実行し、該非最適化機械語オブジェクトに挿入された前記ブレーク命令の実行に伴い、前記非最適化機械語オブジェクトの実行を停止し、この停止情報を出力することを特徴とするプログラマブルコントローラ。
【請求項２】
請求項１記載のプログラマブルコントローラにおいて、
前記デバッグ制御部は、前記トレース指示に基づき前記プログラム実行管理部の前記最適化機械語オブジェクトの呼出し命令を抽出し、該抽出された呼び出し命令の後に前記トレース処理を呼び出すトレース命令を挿入し、前記プログラム実行管理部に前記トレース命令を実行させることにより前記トレース処理に切り替えることを特徴とするプログラマブルコントローラ。
【請求項３】
請求項１または請求項２記載のプログラマブルコントローラにおいて、
前記ブレーク指示は前記プログラマブルコントローラと通信部を介して接続される支援装置から与えられ、
前記デバッグ制御部は前記非最適化機械語オブジェクトへのブレーク命令の挿入に先立ち、前記非最適化機械語オブジェクトが前記プログラマブルコントローラに既に登録されているかを示す有無情報を前記支援装置に送信し、この送信の後に前記支援装置から前記非最適化機械語オブジェクトを受信することにより該受信した非最適化機械語オブジェクトを前記第二の記憶領域に転送することを特徴とするプログラマブルコントローラ。
【請求項４】
請求項３記載のプログラマブルコントローラにおいて、
前記支援装置は所定のソースコードをコンパイルするコンパイル手段を有し、
該コンパイル手段は前記ブレーク指示を含むデバッグ開始指示を受けると、前記有無情報の返信を要求するコマンドを前記プログラマブルコントローラに送信し、この送信に対する前記有無情報を含む応答を前記プログラマブルコントローラから受信し、
この受信された前記有無情報を参照して前記非最適化機械語オブジェクトが前記プログラマブルコントローラに既に登録されていることを確認し、この確認の結果、前記非最適化機械語オブジェクトが前記プログラマブルコントローラに既に登録されていることが確認されると前記ソースコードをコンパイルせず前記非最適化機械語オブジェクトを未生成とし、前記有無情報を参照した結果、前記非最適化機械語オブジェクトが前記プログラマブルコントローラに登録されてないことが確認されると前記ソースコードをコンパイルして前記非最適化機械語オブジェクトを生成し、該生成された非最適化機械語オブジェクト
を前記プログラマブルコントローラに送信することを特徴とするプログラマブルコントローラ。
【請求項５】
請求項２記載のプログラマブルコントローラにおいて、
前記デバッグ制御部は前記トレース命令を前記サイクリックの周期に同期して挿入し、トレース解除指示が与えられると前記プログラム実行管理部に挿入した前記トレース命令を前記サイクリックの周期に同期して削除することを特徴とするプログラマブルコントローラ。
【請求項６】
請求項１記載のプログラマブルコントローラにおいて、
前記デバッグ制御部は前記ブレーク命令を前記サイクリックの周期に同期して挿入し、
ブレーク解除指示が与えられると前記サイクリックの周期に同期して前記非最適化機械語オブジェクトに挿入した前記ブレーク命令を削除するとともに前記テーブルに前記最適化機械語オブジェクトの先頭アドレスを登録することを特徴とするプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、最適化された機械語オブジェクトを実行するプログラマブルコントローラに関する。
【背景技術】
【０００２】
プログラムを高速に処理するため、プログラムのコンパイル時に最適化を行なう方法が提案されている。しかし、最適化された機械語オブジェクト（以降、最適化機械語オブジェクトと称す）はプログラムの実行順序の変更や不用変数の削除等が行われた可能性があるため、ソースコード上でデバックすることが困難になる。
【０００３】
そこで、従来、最適化機械語オブジェクトを入力し、この最適化機械語オブジェクトを逆コンパイルしてソースコードでデバッグするためのデバッグ用ソースコードを生成し、このデバッグ用ソースコードとシンボル情報などを用いてソースコード上でデバッグするようにしたソースコードレベルデバッグ装置が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−２４２９４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記特許文献１に記載の従来例にあっては、デバッグの際、最適化機械語オブジェクトをその都度逆コンパイルしてデバッグ用のソースコードを生成する必要があり、このため作業が煩雑になり、デバッグの効率がよくないという問題がある。
【０００６】
本発明は、上記のような問題に着目して考案されたものであり、デバッグ時にソースコード上でデバッグできるとともに、デバッグプロセスを簡単に実装することが可能なプログラマブルコントローラを提供することにある。
【０００７】
また、本発明は最適化機械語オブジェクトを実行することによりプログラム実行速度の高速化を図るプログラマブルコントローラにおいて、そのプログラム実行速度を維持し実運用状態でデバッグすることが可能なプログラマブルコントローラを提供することにある。
【課題を解決するための手段】
【０００８】
上記のような課題を解決する方法として、本発明は以下のように構成される。
請求項１に係る発明は、最適化機械語オブジェクトを保持する第一の記憶領域と、最適化機械語オブジェクトの先頭アドレスが登録されるテーブルと、テーブルに登録された先頭アドレスを指定して最適化機械語オブジェクトを実行するプログラム実行部と、このプログラム実行部をサイクリックに呼び出し最適化機械語オブジェクトを実行するプログラム実行管理部と、トレース指示に基づき、プログラム実行管理部のプログラム実行部の呼び出し後にトレース処理に切り替えるデバッグ制御部と、トレース処理の実行結果を出力するトレース結果出力部と、最適化機械語オブジェクトに対応した非最適化機械語オブジェクトを保持する第二の記憶領域と、を備え、デバッグ制御部は、オブジェクトの実行の停止位置を含むブレーク指示が与えられると停止位置に基づき非最適化機械語オブジェクトにブレーク命令を挿入するとともに非最適化機械語オブジェクトの先頭アドレスをテーブルに登録するブレーク実行手段をさらに備え、プログラム実行部は、ブレーク実行手段によって登録された非最適化機械語オブジェクトの先頭アドレスを指定して非最適化機械語オブジェクトを実行し、該非最適化機械語オブジェクトに挿入されたブレーク命令の実行に伴い、非最適化機械語オブジェクトの実行を停止し、この停止情報を出力することを特徴とする。
【０００９】
請求項２に係る発明は、請求項１記載のプログラマブルコントローラにおいて、デバッグ制御部は、トレース指示に基づきプログラム実行管理部の最適化機械語オブジェクトの呼出し命令を抽出し、該抽出された呼び出し命令の後にトレース処理を呼び出すトレース命令を挿入し、プログラム実行管理部にトレース命令を実行させることによりトレース処理に切り替えるように構成される。
【００１１】
請求項３に係る発明は、請求項１または請求項２記載のプログラマブルコントローラにおいて、ブレーク指示はプログラマブルコントローラと通信部を介して接続される支援装置から与えられ、デバッグ制御部は非最適化機械語オブジェクトへのブレーク命令の挿入に先立ち、非最適化機械語オブジェクトがプログラマブルコントローラに既に登録されているかを示す有無情報を支援装置に送信し、この送信の後に支援装置から非最適化機械語オブジェクトを受信することにより該受信した非最適化機械語オブジェクトを第二の記憶領域に転送するように構成される。
【００１２】
請求項４に係る発明は、請求項３記載のプログラマブルコントローラにおいて、支援装置は所定のソースコードをコンパイルするコンパイル手段を有し、該コンパイル手段はブレーク指示を含むデバッグ開始指示を受けると、有無情報の返信を要求するコマンドをプログラマブルコントローラに送信し、この送信に対する有無情報を含む応答をプログラマブルコントローラから受信し、この受信された有無情報を参照して非最適化機械語オブジェクトがプログラマブルコントローラに既に登録されていることを確認し、この確認の結果、非最適化機械語オブジェクトがプログラマブルコントローラに既に登録されているこ
とが確認されるとソースコードをコンパイルせず非最適化機械語オブジェクトを未生成とし、有無情報を参照した結果、非最適化機械語オブジェクトがプログラマブルコントローラに登録されてないことが確認されるとソースコードをコンパイルして非最適化機械語オブジェクトを生成し、該生成された非最適化機械語オブジェクトをプログラマブルコントローラに送信するように構成される。
【００１３】
請求項５に係る発明は、請求項２記載のプログラマブルコントローラにおいて、デバッグ制御部はトレース命令をサイクリックの周期に同期して挿入し、トレース解除指示が与えられるとプログラム実行管理部に挿入したトレース命令をサイクリックの周期に同期して削除するように構成される。
【００１４】
請求項６に係る発明は、請求項１記載のプログラマブルコントローラにおいて、デバッグ制御部はブレーク命令をサイクリックの周期に同期して挿入し、ブレーク解除指示が与えられるとサイクリックの周期に同期して非最適化機械語オブジェクトに挿入したブレーク命令を削除するとともにテーブルに最適化機械語オブジェクトの先頭アドレスを登録するように構成される。
【発明の効果】
【００１５】
本発明において支援装置はソースコードをコンパイルして、最適化機械語オブジェクトを生成しプログラマブルコントローラ（ＰＬＣ）に転送しておく。
ユーザがデバッグモードとしてブレークを選択すると、支援装置はソースコード上に設定されたブレークポイントを基にデバッグ情報を生成する。この際、デバッグ対象の非最適化機械語オブジェクトが既にプログラマブルコントローラに格納されていれば非最適化機械語オブジェクトを生成せず、デバッグ情報のみをプログラマブルコントローラに送信する。一方、デバッグ対象の非最適化機械語オブジェクトが既にプログラマブルコントローラに格納されていれば、支援装置はソースコードをコンパイルして非最適化機械語オブジェクトを生成しデバッグ情報および非最適化機械語オブジェクトの両方をプログラマブルコントローラに送信する。
【００１６】
そして、プログラマブルコントローラは支援装置から非最適化機械語オブジェクトを受信すると内部メモリに転送し、デバッグ情報に応じて、内部メモリに転送された非最適化機械語オブジェクトにブレークポイント処理コードを挿入し、この非最適化機械語オブジェクトの先頭アドレスをアドレステーブルに登録する。続いて、プログラマブルコントローラはアドレステーブルに登録されたアドレス情報をアクセス先として非最適化機械語オブジェクトを実行し、ブレークポイント処理コードを実行したとき、ブレークする。
【００１７】
一方、ユーザがデバッグモードとしてトレースを選択すると、支援装置はソースコード上に設定されたトリガ条件を基にデバッグ情報を生成しに送信する。プログラマブルコントローラは受信したデバッグ情報を基に、デバッグ対象の最適化機械語オブジェクトを特定し、この最適化機械語オブジェクトの実行が完了した時点でトレース機能を呼び出し、このタイミングを起点にプログラムの実行をトレースする。
【００１８】
このように構成することにより、本発明は最適化機械語オブジェクトを実行することによって高速化を図るプログラマブルコントローラのデバッグ作業の効率を向上させるとともに、プログラマブルコントローラが運用状態でその高速化されたプログラムの実行速度を維持したままデバッグ可能なプログラマブルコントローラを提供できる。
【図面の簡単な説明】
【００１９】
【図１】本発明に係るプログラマブルコントローラシステムの一実施形態を示すシステム構成図
【図２】本発明に係るプログラマブルコントローラのブロック図
【図３】本発明に係るプログラマブルコントローラシステムの機能構成図
【図４】図１に係る支援装置の支援処理の一例を示すフローチャート
【図５】図１に係る支援装置が表示するメニュー画面の一例
【図６】本発明に係るプログラマブルコントローラが実行する処理の一例を示すフローチャート
【図７】本発明に係る送信される機械語オブジェクトの構成を示す説明図
【図８】本発明に係るデバッグ時に送信されるデバッグ情報を示す説明図
【図９】本発明に係る機械語オブジェクトとアドレステーブルがプログラムメモリに転送され登録されることを説明する図
【図１０】ブレーク実行時の動作を説明する図
【図１１】トレース実行時の動作を説明する図
【発明を実施するための形態】
【実施例】
【００２０】
以下、本発明の一実施形態について、図面を参照しながら説明する。以降の説明においてアドレス表記は１６進である。
図１は本発明に係るプログラマブルコントローラシステムの一実施形態を説明する構成図である。
【００２１】
図１に示すように、このシステムは、支援装置１００（プログラミングローダ）がプログラマブルコントローラ（以下、ＰＬＣという）２００と信号線１１０により着脱可能に接続されており、ＰＬＣ２００は制御機器３００に接続されている。ＰＬＣ２００はシーケンス制御プログラムを実行して制御機器３００を制御する。
【００２２】
支援装置１００は、中央演算処理装置（ＣＰＵ）１０１、内部メモリ１０４、記憶装置１０５、マウスやキーボード等からなる入力装置１０２、表示器１０３、入出力インターフェイス（Ｉ／Ｏ）１０６などから構成され、これらが共通バス１０７に接続されている。
【００２３】
記憶装置１０５には各種のデータが記憶されている。入力装置１０２は、オペレータによって外部から操作されるマウスやキーボード等からの入力イベントをＣＰＵ１０１に通知する。
【００２４】
表示器１０３は、例えば液晶デスプレイからなり、入力イベントに応じて、各種データや画像を表示する。Ｉ／Ｏ１０６は、信号線１１０を介してＰＬＣ２００と接続されており、支援装置１００とＰＬＣ２００とのデータを授受する。
【００２５】
ＣＰＵ１０１は、入力装置１０２に入力される入力イベントと、内部メモリ１０４から読み出したプログラムに従って、記憶装置１０５から各種のデータを読み出しながら、或いは記憶装置１０５に各種のデータを書き込みながら、各部の動作を制御する。さらに、ＣＰＵ１０１はパラメータなどＰＬＣ２００に対する動作指示を、Ｉ／Ｏ１０６を介してＰＬＣ２００に送出することや、ＰＬＣ２００が実行するためのシーケンス制御プログラムをＩ／Ｏ１０６を介してＰＬＣ２００にダウンロードすることができる。
【００２６】
このように構成された支援装置１００は、ユーザによってプログラミングされたソースプログラムをコンパイルして、後述する図２のＣＰＵ２１１が直接実行可能な実行コード（機械語）を生成する機能を有している。そして、実行コードが、通信線１１０を介してＣＰＵモジュール２１０にダウンロードされることにより、ＣＰＵモジュール２１０は、システムプログラムメモリ２１２などに保持されたシーケンス制御プログラムを、ダウンロードされた実行コードに更新することができる（プログラム更新手段）。
【００２７】
図２はＰＬＣ２００の内部構成図である。
ＰＬＣ２００はＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）モジュール２１０を有する。このＣＰＵモジュール２１０はＣＰＵ２１１、ドライバ／レシーバ２１７、ＰＬＣ固有バスインターフェース２１４、システムプログラムメモリ（ＦＬＡＳＨ）２１２、システムワークメモリ（ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））２１６、ユーザプログラムメモリ（ＲＡＭ）２１３、ユーザデータメモリ（ＲＡＭ）２１５などを有し、それらがバス２１８により接続されている。また、ＣＰＵモジュール２１０はＰＬＣ固有バスインターフェース２１４を通して入出力モジュール２２２と接続される。
【００２８】
また、ＰＬＣ２００はパワーオンまたはリセットスタート後、システムの初期化を経てシステムプログラムメモリ２１２に保持されたシーケンス制御プログラムをサイクリックに実行し、制御機器３００を所定の周期で制御するよう構成されている。
【００２９】
図３は、本発明の一実施形態を示す機能ブロック図であり、図中、支援装置１００はユーザによって作成されたソースコード（ソースプログラム）を機械語オブジェクトに変換するコンパイル機能を備える。支援装置１００によってコンパイルされた機械語オブジェクトはＰＬＣ２００などのターゲットにダウンロードされる。
【００３０】
ユーザインタフェース部１１はユーザによって作成されたＩＥＣ（Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｅｌｅｃｔｒｏｔｅｃｈｎｉｃａｌ  Ｃｏｍｍｉｓｓｉｏｎ）言語のソースコードをコンパイラに与える。コンパイラ１２（コンパイル手段）は、通常時（デバッグを実行しないとき）、ソースコードを最適化コンパイルして最適化機械語オブジェクトを生成し、最適化機械語オブジェクト１３として図示しない記憶領域等に格納する。生成された最適化機械語オブジェクト１３はＲＳ２３２Ｃ等の通信部１４を介してＰＬＣ２００にダウンロードされる。
【００３１】
一方、デバッグ時にコンパイラ１２は、ソースコードをコンパイルしてデバッグ可能な機械語オブジェクト（非最適化機械語オブジェクト）を生成し、非最適化機械語オブジェクト１５として図示しない記憶領域等に格納する。生成された非最適化機械語オブジェクト１５は、データ通信部１４を介してＰＬＣ２００にダウンロードされる。
【００３２】
ＰＬＣ２００は、データ通信部２１を有し、このデータ通信部２１を通じて支援装置１００から入力される最適化機械語オブジェクト１３を最適化機械語オブジェクト２２として転送し登録するとともに、最適化機械語オブジェクト２２の先頭アドレスをアドレステーブル２４に登録する。プログラム実行部２７はサイクリックに実行されるオペレーション機能（プログラム実行管理部）に呼び出され、アドレステーブル２４に登録されたアドレス情報に基づいて最適化機械語オブジェクトを実行するよう構成されており、通常時は最適化機械語オブジェクト２２を実行している。すなわち、プログラム実行部２７はアドレステーブル２４を参照して、該アドレステーブル２４の情報を間接アドレス指定して、そのアドレス先に保持された機械語オブジェクトを実行する。通常時、アドレステーブル２４には最適化機械語オブジェクト２２の先頭アドレスが登録されており、プログラム実行部２７は最適化機械語オブジェクト２２を実行することでプログラムを高速に実行している。
【００３３】
一方、デバッグ時にＰＬＣ２００は、支援装置１００から入力される非最適化機械語オブジェクト１５を非最適化機械語オブジェクト２３として転送し登録するとともに、非最適化機械語オブジェクト２３の先頭アドレスをアドレステーブル２４に登録する。この登録に基づきプログラム実行部２７は非最適化機械語オブジェクト２３を実行する。そして、ＰＬＣ２００はデバッグの終了時に最適化機械語オブジェクト２２の先頭アドレスをアドレステーブル２４に再び登録することにより、通常時に戻る。
【００３４】
このように、通常時は最適化機械語オブジェクト２２が保持された領域（第一の記憶領域）の先頭アドレスをアドレステーブル２４に登録し、デバッグ時には非最適化機械語オブジェクト２３が保持された領域（第二の記憶領域）の先頭アドレスをアドレステーブル２４に登録することにより、通常時とデバッグ時とで機械語オブジェクトを切り替えて実行するので、最適化機械語オブジェクトを実行して高速化を図るＰＬＣのデバッグ作業が極めて容易になる。
【００３５】
ここで、支援装置１００の具体的な処理の一例を説明する。図４は、支援装置１００の支援処理手順の一例を示している。支援処理は、先ず、ステップＳ１で、処理メニューを表示する。この処理メニューとしては図５に示すように、コンパイル開始ボタン３１、デバッグ開始ボタン３２、デバッグ終了ボタン３４、終了ボタン３３が少なくとも設定されている。またデバッグ開始ボタン３２には後述のブレーク処理またはトレース処理が選択できるようラジオボタンがオプションとして付与されている。これらメニュー３１〜３４のうちの所望のボタンがユーザにより選択されることにより、支援装置１００は各種処理を実行する。
【００３６】
続いて、ステップＳ２に移行して、支援処理はコンパイル開始ボタン３１が選択されたか否かを判定し、コンパイル開始ボタン３１が選択されていないときには、後述するステップＳ５に移行し、コンパイル開始ボタン３１が選択されたときには、ステップＳ３に移行して、ソースコードを最適化コンパイルして最適化機械語オブジェクトを生成するとともに、このときのソースコードのファイル名と識別番号とを対応付けた対応表（ソースコード・識別番号対応表）を作成し、このソースコード・識別番号対応表および最適化機械語オブジェクト１３を記憶領域に保存する。なお、識別番号については後述するが、コンパイル後の機械語オブジェクトを一意に識別する情報（番号）であって、その記述方法はどのような形式でも構わない。
【００３７】
続いて、処理はステップＳ４に移行し、支援処理は記憶領域に保持された最適化機械語オブジェクト１３を、データ通信部１４を介してＰＬＣ２００にダウンロードし、ステップＳ５に移行する。
【００３８】
ステップＳ５で支援処理は、デバッグ開始ボタン３２が選択されたか否かを判定し、デバッグ開始ボタン３２が選択されていないときにはステップＳ１６に移行し、デバッグ開始ボタン３２が選択されればステップＳ６に移行する。
【００３９】
ステップＳ６に移行した支援処理は、デバッグ開始ボタン３２のオプションとして選択されるブレーク処理のラジオボタンが選択されているか否かを判定する。ブレーク処理が選択されていない場合に支援処理はステップＳ１７に移行し、ブレーク処理が選択された場合にはステップＳ７に移行する。
【００４０】
ステップＳ７に移行した支援処理は、ユーザがソースコード上に設定したブレークポイントを基に図８に示すデバッグ情報を作成する。このデバッグ情報の識別番号５１は、ブレークポイントが設定されたソースコードのファイル名を基に、前述ソースコード・識別番号対応表から特定された識別番号であり、ブレーク位置５２は、ブレークポイントが設定された行番号である。なお、ブレークポイントについては後述するが、ソースコードにおける任意の位置に相当する箇所で、プログラム実行を中止させる為の一種のマーカー（識別子）であって、その実現方法はどのような形式でも構わない。以降の説明では、一例として、ブレークポイント処理コードを挿入する方法を用いるものとする。
【００４１】
続いて、ステップＳ８に移行して、支援処理はＰＬＣ２００に対してデバッグ開始通知を送信する。このとき支援処理は、デバッグ情報に加えて、実行すべきデバッグ処理がブレークであることをＰＬＣ２００に送信する。
【００４２】
続いて、ステップＳ９に移行し、支援処理はＰＬＣ２００にデバッグ対象の非最適化機械語オブジェクトが存在するか否かを確認する。この確認は所定の確認コマンドをＰＬＣ２００に送信し、ＰＬＣ２００からデバッグ対象の非最適化機械語オブジェクトの有無を表すオブジェクト有無通知（有無情報）を受信することで達成される。この結果、デバッグ対象の非最適化機械語オブジェクトがＰＬＣ２００に存在する通知をＰＬＣ２００から受信したときには、ステップＳ１３に移行し、デバッグ対象の非最適化機械語オブジェクトがＰＬＣ２００に存在しない場合にはステップＳ１０に移行する。
【００４３】
ステップＳ１０に移行した支援処理は、ソースコードをコンパイルして非最適化機械語オブジェクト１５を生成して記憶領域に保存し、次いでステップＳ１１に移行して、記憶領域に保持された非最適化機械語オブジェクト１５を、データ通信部１４を介してＰＬＣ２００にダウンロードする。
【００４４】
続いて、ステップＳ１２に移行して、支援処理はＰＬＣ２００から後述する処理完了通知（ブレークポイント処理コードの挿入処理の完了を示す通知）を受信したか否かを判定し、処理完了通知を受信していないときには処理完了通知を受信するまで待機し、処理完了通知を受信したときにはステップＳ１３に移行する。
【００４５】
ステップＳ１３で支援処理は、ＰＬＣ２００がブレークしたときのステータス情報を表示するなどのデバッグ処理を実行し、次いで、ステップＳ１４に移行して、デバッグ終了ボタン３４が選択されたか否かを判定してデバッグ処理の終了を判定し、デバッグ処理が終了していないときにはこれが終了するまで待機し、デバッグ終了ボタン３４が選択されたときにはステップＳ１５に移行して、デバッグ終了通知をＰＬＣ２００に送信しステップＳ１６に移行する。そして、ステップＳ１６にて支援処理は、終了ボタン３３が選択されたか否かを判定し、終了ボタン３３選択されたときにはメニュー画面を消して支援処理を終了する。そうでないときにはステップＳ２に戻る。
【００４６】
また、ステップＳ６の判定の結果、ステップＳ１７に移行した支援処理は、トレース処理のラジオボタンが設定されていることを確認し、トレースを開始するためのトリガ条件を設定する。このトリガ条件は前述ブレークポイントの設定の要領と同じく、トレースさせたい部分をユーザがソースコード上に設定することにより図８に示すデバッグ情報を抽出し、ＰＬＣ２００に送信する（ステップＳ１８）。このステップＳ１８で支援処理は、デバッグ情報に加えて実行すべきデバッグ処理がトレースであることをＰＬＣ２００に送信する。
【００４７】
ここで、ＰＬＣ２００の具体的な処理の一例を説明する。
図６は、ＰＬＣ２００が機械語オブジェクトをプログラムメモリ２１３に転送し、デバッグする際の処理手順（以下ＰＬＣ処理）の一例を示している。このＰＬＣ処理は、先ず、ステップＳ２１で、支援装置１００から最適化機械語オブジェクト１３を受信したか否かを判定し、最適化機械語オブジェクト１３を受信していないときにはステップＳ３１に移行し、最適化機械語オブジェクト１３を受信したときにはステップＳ２２に移行する。
【００４８】
ステップＳ２２に移行したＰＬＣ処理は、受信した最適化機械語オブジェクト１３をユーザプログラムメモリ２１３の最適化機械語オブジェクト保存領域（不図示）に最適化機械語オブジェクト２２として転送し、続いてステップＳ２３に移行し、最適化機械語オブジェクト２２の保存領域の先頭アドレスをアドレステーブル２４に登録する。ステップＳ２１からステップＳ２３に係る処理をオブジェクト展開機能ともいい、図３のオブジェクト展開部２５に相当する。
【００４９】
そして、ＰＬＣ処理はステップＳ３１に移行し、支援装置１００からデバッグ開始通知を受信したか否かを判定する。この判定の結果、デバッグ開始通知を受信していないときにはステップＳ２１に戻り、デバッグ開始通知を受信したときにはステップＳ３２に移行する。なお、デバッグ開始通知には前述図８に示すデバッグ情報と実行すべきデバッグ処理（ブレーク、もしくはトレース）を示すデバッグ処理パラメータを含むものとする。
【００５０】
ステップＳ３２に移行したＰＬＣ処理は、前述デバッグ処理パラメータを判定し、デバッグ処理パラメータがブレークであるときステップＳ３３に移行し、そうでないときにはステップＳ４１に移行する。
【００５１】
ステップＳ３３においてＰＬＣ処理は、デバッグ対象の機械語オブジェクトが既に格納済みか否かを確認してその有無情報を支援装置１００に送信し、ステップＳ３４に移行する。Ｓ３４でＰＬＣ処理は、所定の時間を経過後、支援装置１００から非最適化機械語オブジェクトを受信したか否かを判定し、非最適化機械語オブジェクトを受信したならばステップＳ３５に移行し、非最適化機械語オブジェクトを受信しなければステップＳ３６に移行する。
【００５２】
処理はステップＳ３５に移行し、ＰＬＣ処理は受信した機械語オブジェクト４３（後術図７）をユーザプログラムメモリ２１３の非最適化機械語オブジェクト保存領域（不図示）に転送し、続いてステップＳ３６に移行し、前述デバッグ情報を参照して、デバッグ対象とする機械語オブジェクトの識別番号およびブレーク位置を取得し、該識別番号が付与された非最適化機械語オブジェクトにブレークポイント処理コードを挿入する。このブレークポイントコードが挿入される位置は前述ブレーク位置にて特定される。処理はステップＳ３７に移行し、ＰＬＣ処理はアドレステーブル２４にデバッグ用アドレスとして前述非最適化機械語オブジェクトの保存先先頭アドレスを登録する。
【００５３】
処理はステップＳ３８に移行し、ＰＬＣ処理はデータ通信部２１を介して、処理完了通知を支援装置１００に送信してからステップＳ３９に移行する。ステップＳ３９でＰＬＣ処理は、支援装置１００からデバッグ完了通知を受信したか否かを判定し、デバッグ完了通知を受信していないときにはこれを受信するまで待機し、デバッグ完了通知を受信したときにはステップＳ４０に移行して、アドレステーブル２４を最適化用アドレスに切換えてからステップＳ２１に戻る。
【００５４】
また、ステップＳ３２の判定にて、デバッグ処理パラメータがブレークでない場合、処理はステップＳ４１に移行する。ステップＳ４１でＰＬＣ処理は、支援装置１００から受信したデバッグ情報を参照してトリガ条件を設定し、続いてステップＳ４２に移行して、処理完了通知を支援装置１００に送信してからステップＳ４３に移行する。ステップＳ４３でＰＬＣ処理は、支援装置１００からデバッグ完了通知を受信したか否かを判定し、デバッグ完了通知を受信していないときにはこれを受信するまで待機し、デバッグ完了通知を受信したときにはステップＳ２１に戻る。なお、ステップＳ３１からステップＳ４３に係る処理をデバッグ制御機能ともいい、図３のデバッグ制御部２６に相当する。
【００５５】
次に、上記実施形態の動作を説明する。
（機械語オブジェクトをダウンロードするまでの支援装置１００に係る動作）
支援装置１００を使用してＰＬＣ２００に機械語オブジェクトをダウンロードするには、ユーザは先ず、支援装置１００のユーザインタフェース部１１でプログラムをＩＥＣ言語で記述したソースコードを作成する。このソースコードを作成した状態で、支援装置１００で、表示器１０３に表示された処理メニューからコンパイル開始ボタン３１を選択する。このコンパイル開始ボタン３１の選択がされることによって、支援装置１００はコンパイラ１２でソースコードを最適化コンパイルして最適化機械語オブジェクト１３を生成し、これを記憶領域に格納する。この最適化コンパイルは、ソースコードの実行順序の変更、レジスタの有効活用等を行なうことにより、コードサイズを縮小する。ここで、最適化機械語オブジェクト１３は、ＰＯＵ（Ｐｒｏｇｒａｍ  Ｏｒｇａｎｉｚａｔｉｏｎ  Ｕｎｉｔ）毎に生成される。このＰＯＵとは、プログラム構成単位であり、ＰＬＣ２００の言語要素である。なお、ＰＯＵの種類には、アプリケーションプログラム、ファンクションブロック等があり、Ｃ言語の関数に相当するものである。
【００５６】
支援装置１００は最適化コンパイルを行なう際、生成された最適化機械語オブジェクト１３が何れのソースコードを変換したものであるかを対応付けるようにソースコード・識別番号対応表を作成し記憶領域に保存する。すなわち、ソースコード・識別番号対応表はソースコードのファイル名と識別番号とを対応付けたテーブル情報である。
【００５７】
そして、支援装置１００は最適化機械語オブジェクト１３の生成が完了すると、データ通信部１４を介してＰＬＣ２００にダウンロードする。
このとき、最適化機械語オブジェクト１３は、図７に示すように、ＰＯＵ単位の機械語オブジェクト４３（オブジェクト本体）に対して識別番号４１及び最適化機械語オブジェクトであるか非最適化機械語オブジェクトであるかを表す情報４２が付加されてプＰＬＣ２００にダウンロードされる。識別番号４１はコンパイルされた最適化機械語オブジェクトおよび非最適化機械語オブジェクトそれぞれのＰＯＵに付与される番号であり、ＰＯＵを一意に識別するための識別子である。種別４２は機械語オブジェクト４３が最適化されたものか、デバッグ可能な非最適化のものかを示す種別コードであり、本発明の実施形態では「１」を最適化された機械語オブジェクト、「２」を非最適化機械語オブジェクト（デバッグ可能な機械語オブジェクト）として定義している。
【００５８】
（ＰＬＣ２００が支援装置１００から受信した最適化機械語オブジェクトを展開する動作）
例えば、ＰＬＣ２００は支援装置１００から図９に示すような機械語オブジェクト（６１ａ、６１ｂ）を支援装置１００からダウンロードされたとする。機械語オブジェクト６１ａおよび６１ｂは、その種別が「１」なので最適化である。ＰＬＣ２００はこれら機械語オブジェクト（ＰＯＵ本体）をユーザプログラムメモリ２１３の最適化機械語オブジェクト格納領域（０番地〜７ＦＦＦ番地）に識別番号順に転送して保存し、アドレステーブル２４の識別番号１用アドレス欄に、機械語オブジェクト６１ａの格納先頭アドレス「００００」を登録する。同様、アドレステーブル２４の識別番号２用アドレス欄には、ユーザプログラムメモリ２１３に保存された機械語オブジェクト６１ｂの先頭アドレス「１０００」が登録される。
【００５９】
すなわち、ＰＬＣ２００は複数のＰＯＵそれぞれを、識別番号順に展開しユーザプログラムメモリ２１３に保存する。この際、各ＰＯＵが保存されたそれぞれの先頭アドレスをアドレステーブル２４に登録する。
【００６０】
（通常時にＰＬＣ２００がオブジェクトを実行する動作）
ＰＬＣ２００はアドレステーブル２４を参照して、該アドレステーブル２４の情報を間接アドレス指定して機械語オブジェクトを実行する。通常時、上述のようにアドレステーブル２４には最適化機械語オブジェクトの先頭アドレスが登録されているので、ＰＬＣ２００は最適化機械語オブジェクト２２を高速に実行している。
【００６１】
（ブレークを目的としたデバッグにおける支援装置１００の動作）
図５のメニュー画面でブレーク処理のラジオボタンが選択され、デバッグ開始ボタン３２が選択されると、支援装置１００はＰＬＣ２００をブレークさせるデバッグを開始する。
【００６２】
ＰＬＣ２００をブレークさせる場合、ユーザは所望のソースコードを開き、開いたソースコードにブレークポイントを設定する。このとき、支援装置１００は開かれているソースコードを基に前述ソースコード・識別番号対応表を参照してソースコードに対応する機械語オブジェクトの識別番号を獲得する。さらに、表示画面上で指定されたソースコードの行などの位置を認識する。そして、支援装置１００はブレークポイントが設定されたソースコードをコンパイラ１２でコンパイルして非最適化機械語オブジェクト１５を生成する。この際に、識別番号とブレークポイントとしてソースコードの行を指定する図８に示すデバッグ情報を作成する。
【００６３】
このようにして、ユーザは所望のソースコードを開いてブレークポイントを設定し、支援装置１００はブレークポイントが設定されたソースコードをコンパイラ１２でコンパイルして非最適化機械語オブジェクト１５を生成するとともにデバッグ情報を作成する。そして、支援装置１００は、非最適化機械語オブジェクト１５とデバッグ情報をＰＬＣ２００にダウンロードし、ＰＬＣ２００の処理完了通知を待つ。
【００６４】
このとき、支援装置１００から送信される最適化機械語オブジェクトは、図７に示すフォーマットでダウンロードされ、デバッグ情報は前述デバッグ処理パラメータを含んだ図８に示すフォーマットにてダウンロードされる（図７の識別番号４１と図８の識別番号５１は、実質同じである）。
【００６５】
支援装置１００は、ＰＬＣ２００から処理完了通知を受信すると、ＰＬＣ２００がブレークするのを待ち、この待ち状態においてＰＬＣ２００の状態情報（レジスタの値や入出力データなど）を、表示器１０３を使って表示し、ユーザにＰＬＣの状態を通知する。そして、何らかの解析がユーザにより行われ、デバッグ終了ボタン３４が押されると、デバッグ終了通知をＰＬＣ２００に送信する。
【００６６】
（ブレークを目的としたデバッグにおけるＰＬＣ２００の動作）
ユーザによりブレークを目的とした操作が行われ、例えば、図１０に示す機械語オブジェクト（６２ａ、６２ｂ）とデバッグ情報（ブレーク指示）が支援装置１００からＰＬＣ２００にダウンロードされたとする。機械語オブジェクト６１ａおよび６１ｂはその種別が「２」なので非最適化である。ＰＬＣ２００は、デバッグ情報に含まれるデバッグ処理パラメータを参照してブレーク処理を認識し、機械語オブジェクト６２ａおよび６２ｂをユーザプログラムメモリ２１３の非最適化機械語オブジェクト格納領域（８０００番地〜）に識別番号順に保存する。
【００６７】
そして、ＰＬＣ２００は、デバッグ情報を参照し、デバッグ情報の識別番号が「２」、ブレーク位置が「２」なので、ユーザプログラムメモリ２１３に保存された識別番号２の非最適化機械語オブジェクトの２行目にブレークポイント処理コードを挿入する。そして、アドレステーブル２４の識別番号２用アドレス欄を、識別番号２の非最適化機械語オブジェクトの保存先先頭アドレスに更新する。具体的に説明すると、アドレステーブル２４の識別番号２用アドレス欄は「１０００」から「９０００」に更新される。このように、ＰＬＣ２００は、非最適化機械語オブジェクトとデバッグ情報を受信すると、非最適化機械語オブジェクトを内部メモリに転送するとともに、デバッグ情報に基づいて、デバッグ対象の非最適化機械語オブジェクトを認識して該認識した非最適化機械語オブジェクトにブレークポイント処理コードを挿入し、該識別番号に該当するアドレステーブル欄を最適化機械語オブジェクト用アドレスから非最適化機械語オブジェクト用のアドレスに変更する。このアドレステーブルの変更に伴い、ＰＬＣ２００は識別番号２の機械語オブジェクトの実行に関しては非最適化機械語オブジェクトを実行するようになる。
【００６８】
続いて、ＰＬＣ２００は、処理完了通知を支援装置１００に送信し、支援装置１００からのデバッグ終了通知を待つ。この待ち状態においてＰＬＣ２００は、挿入されたブレークポイント処理コードを実行した時点で、機械語オブジェクトの実行を停止し、ＰＬＣ２００の状態情報（レジスタの値や入出力データなど）およびブレークして停止したことを支援装置１００に送信して待機状態になる。
【００６９】
ＰＬＣ２００は、支援装置１００からデバッグ終了通知を受信すると、アドレステーブル２４をデバッグ用アドレスから最適化用アドレスに切換えるとともに、非最適化機械語オブジェクトに挿入されたブレークポイント処理コードを削除する。この動きについて図１０を例に説明すると、アドレステーブル２４の識別番号２用アドレス欄は「９０００」から「１０００」に再び更新され、識別番号２の非最適化機械語オブジェクトの２行目に挿入されたブレーク処理コードが削除される。このようにして、ＰＬＣ２００はデバッグ状態から通常時の状態（運用状態ともいう）に復帰し、最適化機械語オブジェクトの実行を再開する。
【００７０】
なお、デバッグ開始時に、デバッグ対象の非最適化機械語オブジェクトが既にＰＬＣ２００に保存されているとき、ＰＬＣ２００は非最適化機械語オブジェクトが既に格納されていることを示す「有無情報」を支援装置１００に送信し、支援装置１００に非最適化機械語オブジェクトの送信を省略するよう促す。このようにして、無駄な通信時間を省くことができる。
【００７１】
以上説明したように、上記実施形態を一例とする本発明は、ソースコードをコンパイルする際に、最適化コンパイルのみを行なって、最適化機械語オブジェクトをＰＯＵ毎に生成し、これと同時にソースコード・識別番号対応表を作成する。そして、生成した最適化機械語オブジェクトに図７に示すような識別番号４１及び種別４２を付加してデータ送信部１４からＰＬＣ２００にダウンロードする。
【００７２】
すなわち、本発明は、コンパイラ１２でソースコードを最適化コンパイルして最適化機械語オブジェクトのみを生成し、生成した最適化機械語オブジェクトをＰＬＣ２００にダウンロードするので、ダウンロードに要する時間を必要最小限とすることができる。また、ＰＬＣ２００は、ダウンロードされた最適化機械語オブジェクトを実行するのでアプリケーションを高速に実行することができる。
【００７３】
一方、デバッグ時において本発明は、デバッグ対象となる機械語オブジェクトのみをコンパイルして非最適化機械語オブジェクトを生成し、これとともにデバッグ情報をＰＬＣ２００にダウンロードする。このようにすることにより、コンパイルおよびダウンロード時間を必要最小限とすることができ、効率の良いソフトウェア開発を支援することができる。
【００７４】
また、本発明は、ブレークに代わりトレースも実行可能である。トレースとは所定の起点から監視対象の変数の値を時系列で表示する機能、すなわち所定のトリガ条件を起点としてデータをロギングする機能である。例えば、このロギングはプログラムの実行過程などにおけるレジスタの値を収集することなどである。言い換えれば、本発明は最適化機械語オブジェクトを実行することによりプログラム実行速度の高速化を図るＰＬＣにおいて、そのプログラム実行速度を維持し実運用状態でデバッグするという課題を解決することもできる。
【００７５】
上述の如くブレーク処理においては非最適化機械語オブジェクトをＰＬＣに実行させるため、最適化機械語オブジェクトを実行している通常の実行速度に対してそのプログラム実行速度は低下する。また、ブレーク条件が成立するとプログラムが停止されるので実運用の検証には得策とは言えず、ＰＬＣが実運用中でないとき（オフライン）の論理検証に適している。これに対し、トレースはＰＬＣを停止させないので実運用でのデバッグ（実運用検証）に適している。
【００７６】
以下、本発明のトレースについて、その実行方法を説明する。
（トレースを目的としたデバッグにおける支援装置１００の動作）
ユーザは要求するデバッグモードとして図５のトレース処理のラジオボタンを選択し開始ボタン３２を選択する。そして、ユーザはトレースの開始条件としてトリガ条件を設定するが、このトリガ条件は前述ブレークポイントの設定の要領と同じように設定される。すなわち、トレースの開始ポイントをブレークポイントの設定と同じようにユーザがソースコード上に設定し、この設定を基に支援装置１００は図８に示すデバッグ情報を抽出し、ＰＬＣ２００に送信する。このとき支援装置１００は、デバッグ情報に加えて、選択されたデバッグモードがトレースであることを示すデバッグ処理パラメータをＰＬＣ２００に送信し、ＰＬＣ２００の処理完了通知を待つ。以降の動きは前述ブレークの動きと同じである。
【００７７】
（トレースを目的としたデバッグにおけるＰＬＣ２００の動作）
選択されたデバッグ処理がトレースであることを示すデバッグ処理パラメータを受信したＰＬＣ２００は、デバッグ情報を参照してトリガ条件を設定するが、上述の如く最適化機械語オブジェクトはプログラムの実行順序などが変更された可能性があるため、上述ブレークポイント処理コードのような所定の処理コードを最適化機械語オブジェクトに埋め込むことができない。
【００７８】
本発明のデバッグ方法（トレース）の特徴点は、プログラムの実行を管理するオペレーション機能（プログラム実行管理部）がサイクリックに実行され最適化機械語オブジェクトを周期的（制御周期毎）に実行する点に着目して考案されたものである。具体的にはデバッグ情報の識別番号で指定される最適化機械語オブジェクトをオペレーション機能が呼び出し、その実行が終了した時点からトレースを開始するようにした点にある。このようにすることにより、最適化された機械語オブジェクトを実行するＰＬＣにおいて、そのプログラム実行速度を低下させることがなく、ＰＬＣが運用状態のままデバッグが可能になる。
【００７９】
図１１はトレースの際のＰＬＣ２００の動作概念図である。他の図と同符号のものは同構成である。この図はユーザプログラムメモリ２１３に識別番号「１」、識別番号「２」それぞれの最適化機械語オブジェクトと非最適化機械語オブジェクトを登録済みであり、識別番号が「２」のデバッグ情報（トレース指示）を支援装置１００から受信した例である。トレースが指示された場合、デバッグ情報の「ブレーク位置」は適用されない。
【００８０】
デバッグ情報を受けたＰＬＣ２００のデバッグ制御部２６は、デバッグ情報の識別番号が「２」なので、識別番号「２」の最適化機械語オブジェクトを呼び出すコール命令をオペレーション機能の中のプログラムコードから抽出する。この抽出は、例えば、前述識別番号「２」をオペランドとするコール命令を検索することで達成される。そして、デバッグ制御部２６は前述抽出されたコール命令の後にトレース処理を実行するためのトレース処理実行コード（トレース命令）をオペレーション機能内に挿入する。つまり、デバッグ制御部２６は挿入したトレース処理実行コードをオペレーション機能に実行させることにより、オペレーション機能が順次実行するメインルーチンからトレース処理を実行させるように切り替える。
【００８１】
そして、オペレーション機能はメインルーチンのプログラムを順次実行する際、挿入されたトレース処理実行コードを実行しトレース機能を呼び出す。呼び出されたトレース機能はプログラムの実行ログを不図示の記憶領域に格納する。そして、ＰＬＣ２００はトレース結果出力部によって前述実行ログを支援装置１００に送信する。
【００８２】
すなわち、オペレーション機能はプログラムを順次実行する際、識別番号「２」の最適化機械語オブジェクトを呼び出す。プログラム実行部２７は、識別番号「２」の最適化機械語オブジェクトの呼び出しを受け、アドレステーブル２４に登録されたデータを間接アドレス指定して識別番号「２」の最適化機械語オブジェクトを実行する。そして、プログラム実行部２７は識別番号「２」の最適化機械語オブジェクトの実行が終了するとその完了をオペレーション機能に伝える。最適化機械語オブジェクトの実行の完了が伝えられたオペレーション機能は前述挿入されたトレース処理実行コードを実行してトレース機能を呼び出す。呼び出されたトレース機能はプログラムの実行ログを不図示の記憶領域に格納し、この実行ログをトレース結果出力部が支援装置１００に送信する。
【００８３】
そして、ＰＬＣ２００は処理完了通知を支援装置１００に送信し、支援装置１００からのデバッグ終了通知を待つ。
デバッグ終了通知を受信するとデバッグ制御部２６は、オペレーション機能内に挿入したトレース処理実行コードを削除し、トレースを終了する。
【００８４】
以上説明したように、本発明はソースコード上にブレークポイントもしくはトリガ条件が設定され、デバッグモードとしてブレークが選択されたときデバッグ情報を生成し、ＰＬＣ２００に送信する。この送信の際、デバッグ対象の非最適化機械語オブジェクトが既にＰＬＣ２００に格納されていればデバッグ情報のみを送信する、一方デバッグ対象の非最適化機械語オブジェクトが既にＰＬＣ２００に格納されていなければ支援装置１００は非最適化機械語オブジェクト１５とデバッグ情報の両方をＰＬＣ２００に送信する。
【００８５】
ＰＬＣ２００は非最適化機械語オブジェクトを受信すると内部メモリに転送し、デバッグ情報に応じて、内部メモリに転送された非最適化機械語オブジェクトにブレークポイント処理コード（ブレーク命令）を挿入し、該非最適化機械語オブジェクトを実行するようアドレステーブル２４を変更する。そして、ＰＬＣ２００は挿入されたブレークポイント処理コードを実行した際、ブレークする。
【００８６】
一方、デバッグモードとしてトレースが選択されたとき、支援装置１００は、ユーザにより設定されたトリガ条件を基にデバッグ情報を生成し、ＰＬＣに送信する。ＰＬＣは受信したデバッグ情報を基に、デバッグ対象の最適化機械語オブジェクトを特定し、この最適化機械語オブジェクトの実行が完了した時点でトレース機能を呼び出し、このタイミングを起点にプログラムの実行をトレースする。そして、このトレース結果を支援装置１００に送信する。
【００８７】
このようにすることで、本発明は最適化機械語オブジェクトを実行して高速化を図ったＰＬＣのデバッグ作業の効率を向上させるとともに、ＰＬＣが運用状態で、その高速化されたプログラムの実行速度を維持したままデバッグすることができる。
【００８８】
なお、運用状態とデバッグとの相互の切り替えタイミング、すなわちアドレステーブル２４の更新タイミング、そしてトレース処理実行コードやブレークポイント処理コードの挿入・削除のタイミングは、ＰＬＣ２００が制御機器３００を制御するための制御周期（オペレーション機能の実行が一巡するサイクリック周期）に同期して実行されることが望ましい。ＰＬＣ２００には複数のＰＯＵが保存されており、ＰＬＣ２００はこれらＰＯＵの処理結果を連携して演算しこの演算結果を使って制御機器３００を制御している。このため、本発明は制御周期に同期してアドレステーブル２４を更新するとともに、トレース処理実行コードやブレークポイント処理コードの挿入や削除を行うことにより、それぞれのＰＯＵの入出力処理の連携を保ち、制御の影響を最小限にしている。
【００８９】
また、上記実施例において、ユーザプログラムメモリはＲＡＭなどの揮発性メモリに限定することはなく、フラッシュメモリなどの書き換え可能な不揮発性メモリで構成してもよい。
【００９０】
また、上述デバッグ情報は機械語オブジェクト（プログラム）を特定し、所定箇所にパッチ処理を挿入するための情報とも言える。
また、支援装置１００は図８に示すデバッグ情報をＰＬＣ２００に送信する際、図５に示すラジオボタン（ブレーク処理もしくはトレース処理）の選択情報を送信パケットに含ませてＰＬＣ２００に送信している。ＰＬＣ２００は支援装置１００からデバッグ情報を受信した際、前述送信パケットに含まれる選択情報を参照し、デバッグ情報がブレーク指示なのかトレース指示なのかを把握できるように構成されている。
【００９１】
また、オペレーション機能（プログラム実行管理部）はファームウェアに相当するプログラムであり、最適化されてないデバッグ可能なプログラムである。
【符号の説明】
【００９２】
１００…支援装置、２００…プログラマブルコントローラ、３００…制御機器
１１…ユーザインタフェース部、１２…コンパイラ、１３…最適化機械語オブジェクト、１４…通信部、１５…非最適化機械語オブジェクト
２１…通信部、２２…最適化機械語オブジェクト、２３…非最適化機械語オブジェクト、２４…アドレステーブル、２５…オブジェクト展開部、２６…デバッグ制御部、２７…プログラム実行部
４１…識別番号、４２…種別、４３…機械語オブジェクト
５１…識別番号、５２…ブレーク位置
６１…最適化機械語オブジェクト
６１ａ，６１ｂ…最適化機械語オブジェクト（本体）
６２…非最適化機械語オブジェクト
６２ａ，６２ｂ…非最適化機械語オブジェクト（本体）
【図１】
0005800135.tif 000002
【図２】
0005800135.tif 000003
【図３】
0005800135.tif 000004
【図４】
0005800135.tif 000005
【図５】
0005800135.tif 000006
【図６】
0005800135.tif 000007
【図７】
0005800135.tif 000008
【図８】
0005800135.tif 000009
【図９】
0005800135.tif 000010
【図１０】
0005800135.tif 000011
【図１１】
0005800135.tif 000012