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