(57)【特許請求の範囲】
【請求項１】
シーケンス言語で記述された第１プログラムをプログラマブルコントローラを構成するマイクロコンピュータが解釈実行できるマシン語で記述された第２プログラムに変換する機能と、前記シーケンス言語の命令単位に対応して変換された前記マシン語群の各々の先頭に前記マシン語のＮＯＰ（ノーオペレーション）命令を挿入する機能と、前記第２プログラムの先頭からの個々の前記ＮＯＰ命令までの相対位置を列挙した切れ目テーブルを生成する機能と、前記第２プログラムのブレーク（実行停止）位置を前記シーケンス言語の命令単位で指定できるデバッグサポート機能を含み、前記シーケンス言語の命令単位でステップ実行指令を発行するプログラミング支援装置と、
前記プログラミング支援装置から前記第２プログラムおよび前記切れ目テーブルを受信し、前記第２プログラム中の指定された前記ブレーク位置の前記ＮＯＰ命令をブレーク（実行停止）処理への分岐命令に書き替え前記切れ目テーブルを用いて前記ステップ実行指令に対応したブレーク（実行停止）を実現する機能を備えた前記プログラマブルコントローラと、
を含むことを特徴とするプログラマブルコントローラシステム。
【請求項２】
請求項１記載のプログラマブルコントローラシステムにおいて、
さらに、前記ブレーク（実行停止）の状態においてステップ実行指令が発行された場合に、現在実行中のプログラム実行単位（ＰＯＵ）の全切れ目の前記ＮＯＰ命令を前記ブレーク（実行停止）処理への分岐命令に書き替え、前記シーケンス言語レベルでのステップ実行を実現する機能を備えたことを特徴とするプログラマブルコントローラシステム。
【請求項３】
請求項１記載のプログラマブルコントローラシステムにおいて、
さらに、前記第２プログラム中に、既存のユーザファンクションブロック（ＵＦＢ）および／またはユーザファンクション（ＵＦＣＴ）へのコール命令およびリターン命令が存在し、前記プログラム実行単位をまたがるステップ実行になろうとも、前記ステップ実行指令が前記プログラミング支援装置から与えられた際に通常実行するコールサポート関数および／またはリターンサポート関数からデバッグ用コールサポート関数および／またはデバッグ用リターンサポート関数へ分岐するように分岐テーブルを書き替え、前記デバッグ用コールサポート関数および／またはデバッグ用リターンサポート関数内にて、移動元の前記プログラム実行単位の全切れ目の前記ＮＯＰ命令への復元、移動先の前記プログラム実行単位の全切れ目のブレーク処理への分岐命令置き換えを実施する機能を備え、コール先の前記プログラム実行単位および／またはリターン先の前記プログラム実行単位へのステップ実行が可能なことを特徴とするプログラマブルコントローラシステム。
【請求項４】
請求項１記載のプログラマブルコントローラシステムにおいて、
さらに、デバッグの要否に応じて、前記第２プログラムの生成時における前記ＮＯＰ命令の挿入の有無を制御する機能を備え、
前記ＮＯＰ命令の分だけ前記第２プログラムの実行時間の短縮、前記第２プログラムのステップ数の削減を実現することを特徴とするプログラマブルコントローラシステム。
【請求項５】
汎用のマイクロコンピュータを使用するプログラマブルコントローラのデバッグ方法であって、
プログラミング支援装置が、シーケンス言語または中間言語で記述された第１プログラムを前記マイクロコンピュータのマシン語で記述された第２プログラムに変換するときに、前記第２プログラムにおける前記第１プログラムの命令単位の切れ目に、前記マシン語のＮＯＰ（ノーオペレーション）命令を挿入するとともに、前記第２プログラムの先頭からの個々の前記ＮＯＰ命令までの相対位置を列挙した切れ目テーブルを生成し、前記第２プログラムとともにプログラマブルコントローラに送信するステップと、
前記プログラマブルコントローラが、受信した前記第２プログラムのデバッグ時に、前記ＮＯＰ命令をブレーク（実行停止）処理へ分岐する分岐命令に置き換え前記切れ目テーブルを用いて、前記プログラミング支援装置から受信するステップ実行指令に対応したブレーク（実行停止）を実現するステップと、
を含むことを特徴とするプログラマブルコントローラのデバッグ方法。
【請求項６】
シーケンス言語で記述された第１プログラムを、プログラマブルコントローラを構成するマイクロコンピュータが解釈実行できるマシン語で記述された第２プログラムに変換するときに、前記シーケンス言語の命令単位に対応して変換された前記マシン語群の各々の先頭に前記マシン語のＮＯＰ（ノーオペレーション）命令を挿入し、前記第２プログラムを実行する前記プログラマブルコントローラが前記ＮＯＰ命令をブレーク（実行停止）処理へ分岐する分岐命令に置き換え可能にする機能と、
前記第２プログラムの先頭からの個々の前記ＮＯＰ命令までの相対位置を列挙した切れ目テーブルを生成する機能と、
前記第２プログラムと前記切れ目テーブルを前記プログラマブルコントローラに転送する機能と、
前記プログラマブルコントローラが前記ＮＯＰ命令を前記分岐命令に書き換えた前記第２プログラムを実行する時に前記切れ目テーブルを使用し、前記第２プログラムのブレーク（実行停止）位置を前記シーケンス言語の命令単位で指定できるデバッグサポート機能と、
前記シーケンス言語の命令単位でステップ実行指令を発行する機能と、
をプログラミング支援装置を構成するコンピュータにて実現することを特徴とするプログラミング支援プログラム。
【請求項７】
汎用のマイクロコンピュータを使用するプログラマブルコントローラのデバッグ制御プログラムであって、
シーケンス言語または中間言語で記述された第１プログラムの命令単位に対応した前記マイクロコンピュータのマシン語を含み、前記命令単位の切れ目に前記マシン語のＮＯＰ（ノーオペレーション）命令が挿入された第２プログラムおよび前記第２プログラムの先頭からの個々の前記ＮＯＰ命令までの相対位置を列挙した切れ目テーブルをプログラミング支援装置から受信し、受信した前記第２プログラム中の指定された前記ＮＯＰ命令を、ブレーク（実行停止）処理への分岐命令に書き替える機能と、前記切れ目テーブルを用いて前記プログラミング支援装置から受信したステップ実行指令に対応してブレーク（実行停止）を実現する機能と、を前記マイクロコンピュータにて実現することを特徴とするプログラマブルコントローラのデバッグ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラシステム、プログラマブルコントローラのデバッグ方法、プログラミング支援プログラム、プログラマブルコントローラのデバッグ制御プログラムに関し、たとえば、産業用のプログラマブルコントローラ（ＰＬＣ）におけるデバッグ等に適用して有効な技術に関する。
【背景技術】
【０００２】
従来、ＰＬＣはシーケンス命令実行を高速に行わせるための専用ハードウェア（大規模専用ＬＳＩなどに代表される）を備えたものが主流であった。専用ハードウェアであるためデバッグ用のブレーク、ステップ実行もハードウェアによってサポートされていた。このようなハードウェアの場合、ブレーク設定された位置の命令を特殊な命令に置き換えて、割込みを発生させブレーク成立チェックルーチンへの分岐、成立した場合のブレーク状態を作り出すことが可能であった。
【０００３】
しかし、（１）専用プロセッサは高価である、（２）専用のマシン語体系をもちシステムプログラム開発が比較的困難である、というデメリットも存在していた。
近年、パーソナルコンピュータ、携帯端末などの普及により、市販の汎用ＣＰＵの技術革新が進み、高速実行が可能なＣＰＵを非常に安価に入手することが可能になってきた。また、汎用であるため、ファームウェアの開発ツールを豊富に市場から調達できるようになってきたため、汎用ＣＰＵを使ったＰＬＣも作られるようになってきており、特許文献１に見られるように、シーケンス命令（制御プログラムの命令）１命令につき、数個のマシン語の組合せによってシーケンス命令の実行を実現する例が知られている。
【０００４】
ＰＬＣのアプリケーションは、ラダー図、テキスト記述言語などによって表現され、シーケンス言語命令の集合体で構成され、上述の特許文献１に見られるように、汎用ＣＰＵによるＰＬＣでは、シーケンス命令１命令につき、数個のマシン語によってシーケンス命令実行を実現している例が知られている。
【０００５】
なお、本明細書中、プログラム、ファンクションブロック、ファンクションの定義については、特に断らない限り、ＰＬＣにおける記述言語規格ＩＥＣ６１１３１−３に準ずるものとして説明は割愛する。
【０００６】
デバッグサポートとしては、指定した条件、命令位置で実行を一時中断するブレーク機能（条件停止とも呼ばれる）、ブレーク状態から１命令ずつ実行してはブレークするステップ機能などがある。
【０００７】
ユーザはプログラミング支援装置にてプログラミングを行い、プログラムをＰＬＣに転送し、実行させてプログラムのテストを行うわけだが、その際にシーケンスプログラムの任意の位置でブレークをさせたいし、ステップ実行もシーケンス命令単位で行いたい。
【０００８】
そのため、シーケンス命令単位でのブレーク指定、ステップ実行機能の実現要求があるが、特許文献１等の先行技術によればデバッガなるソフトウェアをプログラミング支援装置に含み、かつ内部ではＣ言語ソースコード、Ｃソースデバッガを内蔵させており、制御プログラムの作成のために必要なハードウェア資源のほかに多量の資源を準備しなければならない問題点がある。また、ＰＬＣ側（実行装置側）もアプリケーション実行機能とは別にＣソースデバッガとのインタフェースのためにソフトウェア量、ハードウェア資源を備えなければならず、コストアップを招くといった問題がある。追加のソフト、ハード資源が少なくてすみ、また割込み発生命令など汎用性に乏しい特殊命令を使わないで、一般的なＣＰＵであれば可能な方式でのデバッグサポート機能の実現が第１の課題である。
【０００９】
ユーザプログラム（ＰＯＵ）中には接点、コイルなどのビット命令がある。これらの命令は実行順にならんでおりステップ実行のたびに次の命令でブレークすればよい。しかしビット命令のほかに条件によって実行の可否を決定するためのジャンプ命令が含まれている場合がある。この場合、ジャンプ命令の実行の結果、ＰＯＵ内のどの命令が次に実行される命令なのかが確定しない。このように、ジャンプ命令が含まれている場合であってもステップ実行ができるようにすることが第２の課題である。
【００１０】
ユーザプログラムは、親となるプログラム（ＰＧ）から共通的な処理を１ＰＯＵに記述したサブルーチンすなわちユーザファンクション（ＵＦＣＴ）、ユーザファンクションブロック（ＵＦＢ）をコールし、ユーザファンクション、ユーザファンクションブロックでの実行を終えた後、リターン命令によりプログラムに実行が戻ってくる場合がある。ＰＧ内でステップをすすめていきコール命令があった場合、呼び先のユーザファンクションまたはユーザファンクションブロックの先頭でブレークさせることが第３の課題である。
【００１１】
プログラムサイズが小さければ必要とするメモリが少なくてすみコストを削減できる、またプログラム実行を高速に行わせることができれば単位時間あたりのプログラマブルコントローラの処理量は増すので、できるだけプログラムサイズを小さくでき、高速に実行ができることが第４の課題である。
【特許文献１】特開２００２−９９３１２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明の目的は、追加のソフトウェアおよびハードウェア等の資源が少なくてすみ、また割込み発生命令など汎用性に乏しい特殊命令を使わないで、一般的なＣＰＵであれば可能な汎用的な方法で、プログラマブルコントローラのデバッグサポート機能を実現することにある。
【００１３】
本発明の他の目的は、ジャンプ命令が含まれている場合であっても的確にステップ実行が可能な、プログラマブルコントローラのデバッグサポート機能を実現することにある。
本発明の他の目的は、プログラム内のステップ実行の進行中にコール命令があった場合、呼び先のユーザファンクションまたはユーザファンクションブロックの先頭でブレークさせることが可能な、プログラマブルコントローラのデバッグサポート機能を実現することにある。
【００１４】
本発明の他の目的は、デバッグ時以外は、できるだけプログラムサイズを小さくでき、高速に実行ができることが可能なプログラマブルコントローラのデバッグサポート機能を実現することにある。
【課題を解決するための手段】
【００１５】
本発明の第１の観点は、シーケンス言語で記述された第１プログラムをプログラマブルコントローラを構成するマイクロコンピュータが解釈実行できるマシン語で記述された第２プログラムに変換する機能と、前記シーケンス言語の命令単位に対応して変換された前記マシン語群の各々の先頭に前記マシン語のＮＯＰ（ノーオペレーション）命令を挿入する機能と、前記第２プログラムの先頭からの個々の前記ＮＯＰ命令までの相対位置を列挙した切れ目テーブルを生成する機能と、前記第２プログラムのブレーク（実行停止）位置を前記シーケンス言語の命令単位で指定できるデバッグサポート機能を含み、前記シーケンス言語の命令単位でステップ実行指令を発行するプログラミング支援装置と、
前記プログラミング支援装置から前記第２プログラムおよび前記切れ目テーブルを受信し、前記第２プログラム中の指定された前記ブレーク位置の前記ＮＯＰ命令をブレーク（実行停止）処理への分岐命令に書き替え前記切れ目テーブルを用いて前記ステップ実行指令に対応したブレーク（実行停止）を実現する機能を備えた前記プログラマブルコントローラと、
を含むプログラマブルコントローラシステムを提供する。
【００１６】
本発明の第２の観点は、汎用のマイクロコンピュータを使用するプログラマブルコントローラのデバッグ方法であって、
プログラミング支援装置が、シーケンス言語または中間言語で記述された第１プログラムを前記マイクロコンピュータのマシン語で記述された第２プログラムに変換するときに、前記第２プログラムにおける前記第１プログラムの命令単位の切れ目に、前記マシン語のＮＯＰ（ノーオペレーション）命令を挿入するとともに、前記第２プログラムの先頭からの個々の前記ＮＯＰ命令までの相対位置を列挙した切れ目テーブルを生成し、前記第２プログラムとともにプログラマブルコントローラに送信するステップと、
前記プログラマブルコントローラが、受信した前記第２プログラムのデバッグ時に、前記ＮＯＰ命令をブレーク（実行停止）処理へ分岐する分岐命令に置き換え前記切れ目テーブルを用いて、前記プログラミング支援装置から受信するステップ実行指令に対応したブレーク（実行停止）を実現するステップと、
を含むプログラマブルコントローラのデバッグ方法を提供する。
【００１７】
本発明の第３の観点は、シーケンス言語で記述された第１プログラムを、プログラマブルコントローラを構成するマイクロコンピュータが解釈実行できるマシン語で記述された第２プログラムに変換するときに、前記シーケンス言語の命令単位に対応して変換された前記マシン語群の各々の先頭に前記マシン語のＮＯＰ（ノーオペレーション）命令を挿入し、前記第２プログラムを実行する前記プログラマブルコントローラが前記ＮＯＰ命令をブレーク（実行停止）処理へ分岐する分岐命令に置き換え可能にする機能と、
前記第２プログラムの先頭からの個々の前記ＮＯＰ命令までの相対位置を列挙した切れ目テーブルを生成する機能と、
前記第２プログラムと前記切れ目テーブルを前記プログラマブルコントローラに転送する機能と、
前記プログラマブルコントローラが前記ＮＯＰ命令を前記分岐命令に書き換えた前記第２プログラムを実行する時に前記切れ目テーブルを使用し、前記第２プログラムのブレーク（実行停止）位置を前記シーケンス言語の命令単位で指定できるデバッグサポート機能と、
前記シーケンス言語の命令単位でステップ実行指令を発行する機能と、
をプログラミング支援装置を構成するコンピュータにて実現するプログラミング支援プログラムを提供する。
【００１８】
本発明の第４の観点は、汎用のマイクロコンピュータを使用するプログラマブルコントローラのデバッグ制御プログラムであって、
シーケンス言語または中間言語で記述された第１プログラムの命令単位に対応した前記マイクロコンピュータのマシン語を含み、前記命令単位の切れ目に前記マシン語のＮＯＰ（ノーオペレーション）命令が挿入された第２プログラムおよび前記第２プログラムの先頭からの個々の前記ＮＯＰ命令までの相対位置を列挙した切れ目テーブルをプログラミング支援装置から受信し、受信した前記第２プログラム中の指定された前記ＮＯＰ命令を、ブレーク（実行停止）処理への分岐命令に書き替える機能と、前記切れ目テーブルを用いて前記プログラミング支援装置から受信したステップ実行指令に対応してブレーク（実行停止）を実現する機能と、を前記マイクロコンピュータにて実現するプログラマブルコントローラのデバッグ制御プログラムを提供する。
【００１９】
すなわち、本発明では、たとえば、第１の課題を解決するために、プログラミング支援装置にて、シーケンス命令で組まれたユーザプログラム（第１プログラム）をＰＬＣの汎用ＣＰＵが実行するマシン語プログラム（第２プログラム）へと変換をする際に、シーケンス命令の切れ目にあたるマシン語とマシン語の間にＮＯＰ命令を挿入する。
【００２０】
さらにＰＯＵ先頭から数えて、挿入したＮＯＰ命令までのプログラムカウンタ（ＰＣ）のカウント値すなわちオフセット値を列挙した「シーケンス言語切れ目テーブル」を生成する。
マシン語プログラムと「シーケンス言語切れ目テーブル」はセットで使うようにする。
【００２１】
プログラミング支援装置から、ＰＬＣへ「マシン語プログラム」と「シーケンス言語切れ目テーブル」を転送しＰＬＣ内で保持する。アプリケーション起動要求により、マシン語プログラムが実行される。
【００２２】
ブレークを行いたい場合のために、ブレーク設定コマンドを設ける。ブレーク設定コマンドは、ブレーク位置、条件（条件は必須ではない）で構成されるが、位置の指定はシーケンス命令単位である。ユーザ操作により、プログラムの任意の位置でのブレークを指定したのち、支援装置によってブレーク設定コマンドはＰＬＣに発行される。
【００２３】
ブレーク設定コマンドを受けたＰＬＣは、コマンド中のブレーク位置（たとえばＮ番目の命令でブレーク指定されたとする）を検索キーとして「シーケンス命令切れ目テーブル」のＮ番目からオフセット値を得て、マシン語プログラムの先頭からオフセット値分すすんだところに存在しているＮＯＰ命令を、ブレーク処理への分岐命令へと書き替える。同時に命令置換テーブルを作成する。命令置換テーブルには、ブレーク位置（シーケンス命令アドレス）、置き換えたＮＯＰ命令の絶対アドレス、置き換え前命令コード（ＮＯＰ命令）、置き換え後命令コード（ブレーク処理部への分岐命令）が含まれている。
【００２４】
この分岐命令はマシン語レベルのＣＡＬＬ命令であり、命令実行時にはＣＡＬＬ先でＰＣが変化すると同時にＣＡＬＬ命令の次のＰＣが戻り番地として汎用ＣＰＵでは保存される。
【００２５】
ブレーク状態をつくりだすために、アプリタスクよりも実行優先度の高いデバッグタスクを設ける。
デバッグタスク内にステップ処理（前処理）、ステップ処理（後処理）、継続起動処理、コマンド待ち処理を設ける。
【００２６】
ローダとのインタフェースのために、コマンド処理部を設け、ブレーク設定コマンド、ステップ実行コマンド、継続起動コマンドの各処理を設けてデバッグタスクとの待ち合わせにより処理要求、実行完了応答を行い、ローダとのインタフェースを完了させる。
【００２７】
ブレーク設定実行処理では、受信したコマンドの中からブレーク成立条件の退避、命令置換テーブル作成し、アプリケーションプログラム（ＰＯＵ）の命令置き換え操作を行う。
【００２８】
ステップ実行はブレーク状態にあるＰＬＣに対してステップ実行コマンドをローダが発行することにより行う。ＰＬＣ側はすでにブレーク状態にありデバッグタスク内でローダコマンドを待っている状態にあって、そこへステップ実行コマンドがくるとステップ処理（前処理）を行い、デバッグタスクを終了させ、アプリに戻り１シーケンス命令分のマシン語実行を行って再びブレーク処理経由してデバッグタスク起動し、ステップ処理（後処理）しブレーク状態にさせるようにする。
【００２９】
ここでステップ前処理では、次の切れ目のＮＯＰ命令をブレーク処理への分岐命令へ置換する処理、およびステップ実行中ビットのセットを行う。ステップ後処理では、今回の切れ目をＮＯＰに戻しステップ実行中ビットをＯＦＦする。
【００３０】
継続起動処理では、ローダコマンド処理部に対して継続起動処理完了の通知、デバッグタスクの終了を行う。
また、本発明では、たとえば、第２の課題を解決するために、ステップ実行前処理において、現在いるＰＯＵの全切れ目のＮＯＰ命令をブレーク処理への分岐命令に置き換える。全置換済であれば全置換は行わない。全切れ目への置換を実施した後全置換実施済みフラグセットを行う。全置換実施済みフラグのセットおよび参照はステップの度に全置換をしなくてよくするためのものである。
【００３１】
さらに継続起動処理において、全切れ目の置換を元のＮＯＰ命令に戻す処理を追加する。
また、本発明では、たとえば、第３の課題を解決するために、ＵＦＢ，ＵＦＣＴのコール命令、リターン命令を実行するシステムマクロをマシン語プログラムから直接ＣＡＬＬさせるのではなく、ＪＭＰテーブルを設けてプログラムから一旦ＪＭＰテーブルにＪＭＰさせてさらに、マクロ本体へＪＭＰするようにさせる。加えて、ステップ実行時にのみ呼ばれるデバッグ用コール命令マクロ、リターン命令マクロを設けて、ステップ実行コマンド受信時には前処理内でＪＭＰテーブルを書き替えて通常用命令マクロからデバッグ用命令マクロへＪＭＰするようにさせる。さらにデバッグ用命令マクロの中では、通常のコール、リターン処理に加えて移動元のＰＯＵの全切れ目を元のＮＯＰ命令に復元する処理と、移動先のＰＯＵの全切れ目のＮＯＰをブレーク処理への分岐命令に置換する処理を行わせるようにする。
【００３２】
また、本発明では、たとえば、第４の課題を解決するために、ローダのコンパイラにデバッグサポート要／不要を選択できるモードを持たせ、デバッグサポート機能を不要とする場合は、ＮＯＰ挿入しないでマシン語プログラム生成を行えるようにする。
【発明の効果】
【００３３】
本発明によれば、追加のソフトウェアおよびハードウェア等の資源が少なくてすみ、また割込み発生命令など汎用性に乏しい特殊命令を使わないで、一般的なＣＰＵであれば可能な汎用的な方法で、プログラマブルコントローラのデバッグサポート機能を実現することができる。
【００３４】
また、ジャンプ命令が含まれている場合であっても的確にステップ実行が可能な、プログラマブルコントローラのデバッグサポート機能を実現することができる。
また、プログラム内のステップ実行の進行中にコール命令があった場合、呼び先のユーザファンクションまたはユーザファンクションブロックの先頭でブレークさせることが可能な、プログラマブルコントローラのデバッグサポート機能を実現することができる。
【００３５】
また、デバッグ時以外は、できるだけプログラムサイズを小さくでき、高速に実行ができることが可能なプログラマブルコントローラのデバッグサポート機能を実現することができる。
【発明を実施するための最良の形態】
【００３６】
以下、図面を参照しながら、本発明の実施の形態について詳細に説明する。
（実施の形態１）
図１は、本発明の一実施の形態であるプログラマブルコントローラシステムの作用の一例を示す概念図、図２は、本実施の形態のプログラマブルコントローラシステムの構成の一例を示す概念図である。
【００３７】
図２に例示されるように、本実施の形態のプログラマブルコントローラシステムは、プログラミング支援装置１００（以下、ローダ１００と記す）と、プログラマブルコントローラ２００（以下、ＰＬＣ２００と記す）を含んでいる。
【００３８】
ローダ１００は、マイクロプロセッサ１１０、主記憶１２０、外部記憶装置１３０、ユーザインタフェース１４０、通信インタフェース１５０を含んでいる。
主記憶１２０には、基本ソフトウェアとしてオペレーティングシステム１６０が実装され、マイクロプロセッサ１１０がこのオペレーティングシステム１６０を実行することで、ローダ１００の全体を制御する。
【００３９】
本実施の形態の場合、この主記憶１２０には、ローダプログラム１７０（プログラミング支援プログラム）が実装されている。
そして、マイクロプロセッサ１１０が、このローダプログラム１７０を実行することで、後述のようなシーケンス命令記述プログラム３１０（第１プログラム）あるいは中間言語からマシン語プログラム３２０（第２プログラム）への変換、シーケンス命令切れ目テーブル３３０の生成、さらにはＰＬＣ２００におけるマシン語プログラム３２０のデバッグ、等の機能を提供する。
【００４０】
外部記憶装置１３０は、シーケンス言語で記述されたシーケンス命令記述プログラム３１０、このシーケンス命令記述プログラム３１０からローダプログラム１７０が生成したマシン語プログラム３２０およびシーケンス命令切れ目テーブル３３０を保持する。
【００４１】
そして、マシン語プログラム３２０に挿入されたＮＯＰ命令３２２と、シーケンス命令切れ目テーブル３３０の情報を用いることで、後述のように、ＰＬＣ２００におけるマシン語プログラム３２０のデバッグを、シーケンス命令記述プログラム３１０の個々のシーケンス命令３１１の単位で可能とする。
【００４２】
ユーザインタフェース１４０は、たとえば、ディスプレイやキーボード等からなり、ローダ１００を制御するためのユーザ入力や、シーケンス命令記述プログラム３１０の編集、デバッグ時のユーザ操作の入力等に用いられる。
【００４３】
通信インタフェース１５０は、ＰＬＣ２００とローダ１００との間の情報通信を制御する。
一方、ＰＬＣ２００は、汎用マイコン２１０、システムメモリ２２０、通信インタフェース２３０を含んでいる。
【００４４】
本実施の形態の場合、汎用マイコン２１０は、市販の汎用のマイクロプロセッサ等からなる。
システムメモリ２２０には、汎用マイコン２１０が実行するソフトウェアが格納される。
【００４５】
本実施の形態の場合、システムメモリ２２０には、オペレーティングシステム２２１、ローダサーバ２４０（デバッグ制御プログラム）、デバッグタスク２５０（デバッグ制御プログラム）、マシン語プログラム３２０、シーケンス命令切れ目テーブル３３０が格納される。このマシン語プログラム３２０およびシーケンス命令切れ目テーブル３３０は、ローダ１００から転送されたものである。
【００４６】
また、システムメモリ２２０には、ブレーク成立条件テーブル２６０、命令置換テーブル２７０、ＪＭＰ（ジャンプ）テーブル２８０、全置換済フラグ２９０、ステップ実行中ビット２９１、等の情報が格納される。
【００４７】
通信インタフェース２３０は、ローダ通信線２３１を介してローダ１００との情報通信を行う。
また、被制御機器通信線２３２を介して、ＰＬＣ２００（マシン語プログラム３２０）の制御対象である図示しない産業機器等との間における情報通信を行う。
【００４８】
オペレーティングシステム２２１は、汎用マイコン２１０によってＰＬＣ２００の全体を制御する。
ローダサーバ２４０は、ローダ１００（ローダプログラム１７０）との間における情報の授受を制御するソフトウェアである。本実施の形態の場合には、後述のようにデバッグに用いられるコマンド処理部２４１を含んでいる。
【００４９】
デバッグタスク２５０は、マシン語プログラム３２０のデバッグ時に生成されるプロセスであり、オペレーティングシステム２２１の制御の下で、アプリケーションタスクであるマシン語プログラム３２０よりも高い優先度にて実行される。
【００５０】
デバッグタスク２５０は、コマンド待ち処理２５１、継続起動処理２５２、ステップ前処理２５３、ステップ後処理２５４、を含んでいる。
マシン語プログラム３２０およびシーケンス命令切れ目テーブル３３０は、ローダ１００において、汎用マイコン２１０のマシン語で記述されたマシン語プログラム３２０に変換され、通信インタフェース２３０を介してローダ１００からロードされる。
【００５１】
そして、このマシン語プログラム３２０を、汎用マイコン２１０に実行させることで、シーケンス命令記述プログラム３１０と等価な制御動作を、ＰＬＣ２００において実現する。
【００５２】
図１は、本実施の形態のローダ１００において、ローダプログラム１７０が、シーケンス命令記述プログラム３１０からマシン語プログラム３２０およびシーケンス命令切れ目テーブル３３０を生成する課程を例示している。
【００５３】
図１に例示されるように、シーケンス言語で記述されたシーケンス命令記述プログラム３１０のユーザによる作成が完了し、ローダプログラム１７０によるコンパイルを行うと、マシン語プログラム３２０およびシーケンス命令切れ目テーブル３３０が生成される。
【００５４】
すなわち、シーケンス命令記述プログラム３１０の個々のシーケンス命令３１１（１命令）が、マシン語プログラム３２０の複数個の汎用マイコン２１０のマシン語３２１に変換され、同時にマシン語３２１の、個々のシーケンス命令３１１に対応した命令群の切れ目にＮＯＰ命令３２２が挿入される。
【００５５】
また、個々のシーケンス命令記述プログラム３１０（ＰＯＵ）ごとに、シーケンス命令切れ目テーブル３３０が生成される。シーケンス命令切れ目テーブル３３０は、ＰＯＵの先頭を０としたオフセットで表現され、シーケンス命令３１１の１命令、１命令についてオフセット値３３１（Ｘ１，Ｘ２，，，，，，ＸＮ）が列挙されて記録される。ここでオフセット値３３１は汎用マイコン２１０のマシン語３２１のＰＣ（プログラムカウンタ）単位である。一般的にはバイトアドレスで表現されることが多い。
【００５６】
こうして生成されたマシン語プログラム３２０とシーケンス命令切れ目テーブル３３０がセットでローダ１００からＰＬＣ２００へ転送され、ＰＬＣ２００ではマシン語プログラム３２０をシステムメモリ２２０上に配置し、実行を行う。
【００５７】
このようにしてＰＬＣ２００において実行されるマシン語プログラム３２０のデバッグを、ローダ１００の制御の下で行う例を説明する。
まず、図３を使って、マシン語プログラム３２０のデバッグにおけるブレーク（実行停止）の実現について説明する。
【００５８】
ブレークは、ローダ１００からＰＬＣへのブレーク設定コマンド４１０を発行することによっておこなう。
ブレーク設定コマンド４１０は、ＰＯＵ種別４１１、ＰＯＵ番号４１２、ＰＯＵ内相対アドレス４１３、ブレーク成立条件４１４といったデータで構成される。このＰＯＵ内相対アドレス４１３はマシン語アドレスではなく、シーケンス命令単位の指定である。
【００５９】
ブレーク設定コマンド４１０を受けたＰＬＣでは、コマンド処理部２４１でブレーク設定処理を行う。コマンドデータを解釈し、ブレーク成立条件の退避（ステップ５１１）、命令置換テーブルの作成（ステップ５１２）、アプリケーションプログラム（ＰＯＵ）への命令置き換え操作（ステップ５１３）を行う。ブレーク条件としてＰＣ一致指定しかサポートしない場合は、ブレーク成立条件テーブル２６０は不要である。
【００６０】
命令置換テーブル２７０は、一例として、図４の構成となっている。すなわち、ブレーク設定コマンド４１０で与えられたＰＯＵ種別２７１、ＰＯＵ番号２７２、ＰＯＵ内アドレス２７３のほか、置き換えを行う命令の番地を示すマイコン絶対アドレス２７４を保管するフィールド、置き換えを行う前の命令（置換前命令コード２７５）を保管するフィールド、置き換えをしたあとの命令（置換後命令コード２７６）を保管するフィールドによって構成される。ブレーク設定の削除を行うときのために、この命令置換テーブル２７０を作成しておく。
【００６１】
マイコン絶対アドレスは２７４、シーケンス命令切れ目テーブル３３０からＰＯＵ内アドレスｎを検索キーとして読み出したｎ番目のオフセット値と、該当のＰＯＵ先頭アドレス（メモリの何番地からＰＯＵが割り付けられているか記述されているプログラムエントリテーブルから取得する）を加算して求める。こうして算出したマイコン絶対アドレス２７４に格納されているＮＯＰ命令３２２を、ブレーク処理への分岐命令に書き替える。以上により、アプリケーションプログラム（シーケンス命令記述プログラム３１０、マシン語プログラム３２０）のブレーク位置にはブレーク処理への分岐命令が仕組まれて、スキャンのたびに、図５に例示されるブレーク処理へ遷移する。
【００６２】
ここでブレーク処理について図５を使って説明する。
ブレーク処理へはアプリケーションプログラムであるマシン語プログラム３２０から飛んできて、ブレーク条件が成立したかをチェックする（ステップ５２１、ステップ５２２）。成立していればブレーク状態にするため、デバッグタスク２５０を起動する（ステップ５２３）。
【００６３】
このデバッグタスク２５０はマシン語プログラム３２０等のアプリケーションタスクより高い優先度にしておき、デバッグタスク２５０の実行中は（ステップ５２１）、例え起動設定した定周期タイミングになったとしてもアプリケーションタスク（マシン語プログラム３２０）は実行されず、ブレーク状態が保持される。ちなみに、マルチタスク実行に関しては、たとえば、μＩＴＲＯＮなどのＯＳ（オペレーティングシステム２２１）が管理実行できるのでここでは一般的な技術として詳細説明は省く。
【００６４】
次に図６を参照してデバッグタスク２５０について説明する。
デバッグタスク２５０は、先頭にてステップ実行中ビット２９１を参照し、ステップ実行中かをチェックし（ステップ５３１）、ステップ実行中であればステップ処理（後処理）を行う（ステップ５３２）。後処理完了にて完了イベントをローダコマンド処理部に対して発行し（ステップ５３３）、コマンド処理部２４１は完了イベント受信により、ローダ１００へ完了応答を通知する。
【００６５】
完了イベントを発行した後、デバッグタスク２５０は次のコマンドを待つ（ステップ５３４）。
すなわち、ローダ１００からのステップ実行コマンド４２０または継続起動コマンド４３０を待つ（ステップ５３５）。
【００６６】
ステップ実行コマンド４２０を受信した場合、ステップ処理（前処理）を行い（ステップ５３６）、デバッグタスクを終了する。
継続起動コマンド４３０を受信した場合、継続起動処理を行い（ステップ５３７）、デバッグタスク２５０を行い、完了イベントを立てて（ステップ５３８）、デバッグタスク２５０を終了する。
【００６７】
デバッグタスク２５０を終了するとブレーク処理に戻り、さらにブレーク処理からアプリケーションプログラム（ＰＧ）（マシン語プログラム３２０）へ戻る。
前出のステップ５３６のステップ処理（前処理）では、ＰＯＵ（マシン語プログラム３２０）内の全切れ目に配置されたＮＯＰ命令３２２をブレーク処理へのＣＡＬＬ命令に置き換える処理と、ステップ実行中ビット２９１のＯＮを実行しているので、シーケンス１命令分のマシン語を実行した後、ブレーク処理経由で再度、デバッグタスク２５０に戻ってブレーク状態となる。
【００６８】
ブレーク状態から通常の運転状態に戻るために継続起動コマンド４３０を用いる。ローダ１００からの継続起動コマンド４３０の受信により、デバッグタスク２５０が終了され優先度が低かったために実行が抑えられていたアプリタスク（マシン語プログラム３２０）が実行できるようになり、このようにしてブレーク状態から通常の運転状態へと戻る。
【００６９】
次にマシン語プログラム３２０のデバッグ時のステップ実行について説明する。ステップ実行はブレーク状態にあるＰＬＣ２００に対してステップ実行コマンド４２０をローダ１００が発行することにより始まる。したがって、すでにブレーク設定による条件成立し、ＰＬＣ２００がブレーク状態になっている前提で説明をする。
【００７０】
ＰＬＣ２００はデバッグタスク２５０にて次なるコマンドを待っている（ステップ５３４）。ローダ１００からステップ実行コマンド４２０がきて、ローダサーバ２４０のコマンド処理部２４１からステップコマンド受信を通知され、ステップ前処理を行う（ステップ５３６）。ステップ前処理２５３では、次の切れ目のＮＯＰ命令３２２をブレーク処理への分岐命令へ置換する処理、ステップ実行中ビット２９１のセットを行う。
【００７１】
その後、デバッグタスク２５０を終了しアプリプログラム（マシン語プログラム３２０）に戻る。アプリプログラムではシーケンス１命令分のマシン語を実行し、ステップ前処理２５３にて置換されたブレーク処理への分岐命令によってブレーク処理へと実行が移り、ブレーク処理の中ではステップ実行中ビット２９１を参照しＯＮであるのでデバッグタスク２５０の起動を実行する。デバッグタスク２５０にてステップ実行中ビット２９１を参照しＯＮであるのでステップ後処理（ステップ５３２）を行う。ステップ後処理２５４ではステップ実行中ビット２９１をＯＦＦする。さらにコマンド処理部２４１へステップ処理完了を通知する。そして次のコマンドを待つ。一方、ステップ処理完了を受けたコマンド処理部２４１ではローダ１００にコマンド応答を返す。以上によりステップ実行の一連の処理を終える。
【００７２】
（実施の形態２）
ユーザプログラム（シーケンス命令記述プログラム３１０）内に条件分岐命令、無条件分岐命令が含まれている場合、命令の並び順に実行されるとは限らない。そのため、以下のように、マシン語プログラム３２０内の全ての切れ目のＮＯＰ命令３２２をデバッグサポート処理（デバッグタスク２５０）への遷移に置換する処理を伴う、ステップ前処理２５３、継続起動処理２５２を提供する。
【００７３】
この場合について、図７、図８を参照して説明する。
ブレーク設定によりブレーク状態になるまでの経緯については前出のとおりであるため説明を省略する。ＰＬＣ２００はデバッグタスク２５０内でローダ１００からの次のデバッグコマンドを待っており（コマンド待ち処理２５１）、ここでステップ実行コマンド４２０がローダ１００によって与えられたとする。
【００７４】
このときコマンド処理部２４１では、ブレーク中か判別し（ステップ５４１）、ブレーク中の場合には、ステップコマンド受信フラグをＯＮにして、デバッグタスク２５０のコマンド待ち処理２５１にイベント通知を行い（ステップ５４２）、ステップ処理完了待ちになる（ステップ５４３）。
【００７５】
デバッグタスク２５０から制御が戻ったら、戻り値に“正常”をセットして（ステップ５４４）、ローダサーバ２４０に制御を戻す。
上述のステップ５４１でブレーク中でないと判定された場合には、戻り値に“非ブレーク状態”をセットして（ステップ５４５）、ローダサーバ２４０に制御を戻す。
【００７６】
一方、デバッグタスク２５０では、上述のステップ５４２におけるコマンド処理部２４１からのイベント通知を契機に、ステップ前処理２５３を行うが、この中で、図８に例示されるように、現在のＰＯＵ（マシン語プログラム３２０）の全切れ目のＮＯＰ命令３２２をブレーク処理への分岐命令に置換して、デバッグタスク２５０を終了し、アプリケーションタスク（マシン語プログラム３２０）に戻る。
【００７７】
もどって実行する命令が分岐命令である場合、分岐命令の実行後、ＰＯＵ（マシン語プログラム３２０）内のどの命令に実行先が移動するか事前には不明であるが、どこに移動した場合であっても全切れ目にブレーク処理への分岐命令３２３が仕組まれているため、結局、ブレーク処理へ飛び、ステップ実行中ビット２９１を参照しＯＮであるのでステップ後処理２５４を行う。このステップ後処理２５４内でステップ実行中ビット２９１をＯＦＦし、コマンド処理部２４１へステップ処理完了を通知する。
【００７８】
コマンド処理部２４１は、上述のステップ５４３で、このステップ処理完了通知を受けてローダ１００に完了応答を返す。以上によりステップ実行の一連の処理を終える。
また継続起動コマンド４３０がローダ１００によって与えられた場合、デバッグタスク２５０内の継続起動処理（後述の図９）内にて命令復元処理（ＮＯＰ命令３２２に戻す）を行っているためブレーク処理に飛んでくることはない。
【００７９】
（実施の形態３）
プログラム（ＰＧ）からユーザファンクションブロック（ＵＦＢ）、ユーザファンクション（ＵＦＣＴ）へのコール、あるいはユーザファンクションブロック（ＵＦＢ）、ユーザファンクション（ＵＦＣＴ）からのリターンのように、複数のＰＯＵ（シーケンス命令記述プログラム３１０）をまたがって実行が移るケースがある。本実施の形態３では、このような場合のステップ実行を実現するデバッグ実行方式を提供する。
【００８０】
本実施の形態３のステップ実行、継続起動について、図７、図９、図１０を参照して説明する。
ブレーク設定によりブレーク状態になるまでの経緯については前出のとおりであるため説明を省略する。ＰＬＣ２００はデバッグタスク２５０内で次のローダ１００からのコマンドを待っており（コマンド待ち処理２５１）、ここでステップ実行コマンド４２０がローダ１００によって与えられたとする。ステップ前処理２５３（図７）を行うが、この中で現在のＰＯＵ（マシン語プログラム３２０）の全切れ目のＮＯＰ命令３２２をブレーク処理への分岐命令３２３に置換して、さらにコール命令、リターン命令を実行する実体であるシステムマクロへのＪＭＰテーブル２８０の内容を、通常走らせるマクロへのＪＭＰ先から、ステップ実行要求時用のマクロへのＪＭＰとなるように書き替える（ステップ６０６）。そしてデバッグタスク２５０を終了し、アプリＰＧ（マシン語プログラム３２０）に戻る。
【００８１】
すなわち、ステップ処理では、以下の各処理を実行する。
ブレーク状態でステップ実行コマンドを受ける（ステップ６０４、ステップ６０５）。
アプリサポートＪＭＰテーブルのＪＭＰ  Ｓｔａｒｔ＿ＵＦＢを、デバッグ用Ｓｔａｒｔ＿ＵＦＢＤに書き換える（ステップ６０６）。
【００８２】
全置換されているかチェックし、されていなければ現在の全置換済フラグ２９０および戻しステップ実行中ビット２９１をＯＮした後、アプリに戻る（次命令がＣＡＬ  ＵＦＢなら以下実行。ＣＡＬ  ＵＦＢでないなら現ＰＯＵの次の切れ目でブレークする）。
【００８３】
アプリ（マシン語プログラム３２０）に戻り（ステップ６０８、ステップ６０９）、ＣＡＬＬ  アプリサポートａ番を実行する（ステップ６１０）。
ＪＭＰテーブル２８０にはＪＭＰ  Ｓｔａｒｔ＿ＵＦＢＤがセットされているため、Ｓｔａｒｔ＿ＵＦＢＤの実行する（ステップ６１１）。
【００８４】
次に実行すべきシーケンス命令がコール命令であった場合、例えば図１０に示すようにＣＡＬ  ＦＢ，１であれば、アプリＰＧからアプリサポートＪＭＰテーブルのコールマクロ先（ＪＭＰテーブル２８０のオフセットａ）へＪＭＰしたのち（ステップ６１０）、マクロ先（ＵＦＢｎ）へとさらに飛ぶ。
【００８５】
ここでコールマクロ先であるが、通常時はＪＭＰ  Ｓｔａｒｔ＿ＵＦＢとなっているのがステップ実行前処理によってＪＭＰ  Ｓｔａｒｔ＿ＵＦＢＤへと書き換わっているため、Ｓｔａｒｔ＿ＵＦＢＤへとＪＭＰする（ステップ６１１）。
【００８６】
Ｓｔａｒｔ＿ＵＦＢＤでは通常のユーザＦＢコール処理に加えて、移動元ＰＯＵの全置換ＪＭＰを元のＮＯＰに戻す処理（ブレークポイント設定による置換分岐は残す）（ステップ６１２）、移動先ＦＢの全切れ目のＮＯＰ命令をＣＡＬＬブレーク処理に置換（図１０のステップ６１３）し、全置換済フラグをＯＮする処理、を行い通常のＳｔａｒｔ＿ＵＦＢと同様にＣＡＬ先ＵＦＢへ移動する（ステップ６１４）。
【００８７】
実行がコール先ＵＦＢ（ＵＦＢ１）の先頭に移る（図１０のステップ６１５）が、そこにはブレーク処理への分岐命令がおかれているためブレーク処理へ移動する（ステップ６０１、ステップ６０２、ステップ６０３）。ステップ実行中フラグがＯＮしており、デバッグタスクを起動する。デバッグタスク２５０内でステップ後処理２５４としてコマンド処理部２４１へのステップ実行完了通知を行い（ステップ６０５）、次のコマンド待ち状態となる（ステップ６０４）。すなわちブレーク状態となる（ステップ６０８）。
【００８８】
一方、ステップ実行完了通知を受けたコマンド処理部２４１はローダ１００に完了応答を返す。
以上によりステップ実行の一連の処理を終える（ステップ６０９）。ステップ実行コマンドが繰り返しローダ１００から発行される場合にそなえて、ＪＭＰテーブル２８０はステップ実行処理が終了しても復元せず書換えたままとする。
【００８９】
継続起動コマンド４３０がローダ１００によって与えられた場合には、図９に例示されるように、ローダサーバ２４０のコマンド処理部２４１では、継続起動コマンド４３０を受けると、ブレーク中か判定し（ステップ５５１）、ブレーク中の場合には、継続起動コマンド受信フラグをＯＮして、デバッグタスク２５０のコマンド待ち処理２５１にイベント通知を行い（ステップ５５２）、継続起動処理完了待ちになる（ステップ５５３）。
【００９０】
ステップ５５３で、継続起動処理の完了イベントをデバッグタスク２５０から受け取ると、戻り値に“正常”をセットして（ステップ５５４）、ローダサーバ２４０に戻る。
上述のステップ５５１でブレーク中でないと判定された場合には、戻り値に“非ブレーク状態”をセットして（ステップ５５５）、ローダサーバ２４０に戻る。
【００９１】
一方、デバッグタスク２５０内では、コマンド待ち処理２５１におけるコマンド処理部２４１からの上述のステップ５５２でのイベント通知を契機に、継続起動処理２５２として、ＮＯＰ命令の復元、およびＪＭＰテーブル２８０の復元（ステップ用コールマクロへのＪＭＰを通常用コールマクロＪＭＰへ書き戻す）を行う。その後、完了イベントをコマンド処理部２４１のステップ５５３に通知することは上述のとおりである。
【００９２】
ちなみに、ステップ実行する命令がコール命令ではなくリターン命令である場合は、使用されるシステムマクロがＳｔａｒｔ＿ＵＦＢ（コールサポート関数）／Ｓｔａｒｔ＿ＵＦＢＤ（デバッグ用コールサポート関数）ではなく、それぞれ、たとえば、図示しないＥｎｄ＿ＵＦＢ（リターンサポート関数）／Ｅｎｄ＿ＵＦＢＤ（デバッグ用リターンサポート関数）となる点が異なるのみで、移動元ＰＯＵの全置換を元に戻す処理（ステップ６１２）、移動先ＰＯＵの全切れ目をブレーク処理への分岐命令に置換する処理（ステップ６１３）を同様に行えばステップ実行が実現できる。
【００９３】
（実施の形態４）
ローダ１００のローダプログラム１７０におけるシーケンス命令記述プログラム３１０からマシン語プログラム３２０への変換を行うコンパイラ機能にデバッグサポート要／不要を選択できるモードを持たせ、ブレークやステップ実行が必要な場合は、デバッグサポート機能ありでシーケンス言語からマシン語への変換を、ＮＯＰ命令３２２の挿入ありで、行う。生成されたマシン語プログラム３２０をＰＬＣ２００に転送し実行させることでユーザは、ローダ１００を介して、ＰＬＣ２００におけるマシン語プログラム３２０の実行時のブレーク、ステップ実行ができるようになることは前出のとおりである。
【００９４】
デバッグを終えて、ＰＬＣ２００を通常の運転に移行した場合、マシン語プログラム３２０のプログラムサイズを抑制し、システムメモリ２２０におけるメモリサイズが少なくてもＰＬＣ２００に格納できるよう、また運転中は可能な限り実行時間を短縮し、スキャンを短くして制御性能を上げたい。
【００９５】
その場合には、デバッグサポート機能を不要とするモードでシーケンス命令記述プログラム３１０からマシン語プログラム３２０への変換をＮＯＰ命令３２２の挿入なしで行う。生成されたマシン語プログラム３２０をＰＬＣ２００に転送し実行させることでユーザはサイズのより小さいＰＬＣ２００で高速な実行を行えるようになる。
【００９６】
以上説明したように、本発明の実施の形態１によれば、シーケンス命令記述プログラム３１０をマシン語プログラム３２０に変換してＰＬＣ２００にて実行させることで制御機能を実現するＰＬＣ２００において、特殊な命令や割込み発生命令をそなえた特異なマイコンを選ばずとも、汎用マイコン２１０が一般的な汎用マイコンであればブレーク、ステップ実行といったデバッグサポート機能を備えることができ、デバッグのために特別なハードウェア、ソフトウェアを追加したり、割込み発生命令など汎用性に乏しい特殊命令を使うことなく、安価に、汎用マイコン２１０を使用したＰＬＣ２００が実現可能となる。
【００９７】
また、上述の実施の形態２によれば、シーケンス命令記述プログラム３１０等のユーザプログラム中にＪＭＰなどの分岐命令が含まれている場合であっても、デバッグ時のステップ実行が実現可能となる。
【００９８】
また、上述の実施の形態３によれば、シーケンス命令記述プログラム３１０等のユーザプログラムの中にファンクションブロックやファンクションといったＰＯＵを含み、構造化記述がされている場合であっても、デバッグ時のステップ実行が実現可能となる。
【００９９】
また、上述の実施の形態４によれば、デバッグを終えたマシン語プログラム３２０をより小さいプログラムサイズにすることができ、ＰＬＣ２００において、より高速な実行時間で同じ制御内容を実現することが可能となる。
【０１００】
なお、本発明は、上述の実施の形態に例示した構成に限らず、その趣旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
たとえば、ＰＬＣ２００とローダ１００を別個に実装する場合を例示したが、これに限らず、たとえば、ＰＬＣ２００の中に、ローダプログラム１７０を実装して、汎用マイコン２１０に実行させることで、シーケンス命令記述プログラム３１０からマシン語プログラム３２０への変換（コンパイル）およびシーケンス命令切れ目テーブル３３０の生成、デバッグコマンドの発行等のプログラミング支援機能を一体に実装してもよい。
【図面の簡単な説明】
【０１０１】
【図１】本発明の一実施の形態であるプログラマブルコントローラシステムの作用の一例を示す概念図である。
【図２】本発明の一実施の形態であるプログラマブルコントローラシステムの構成の一例を示す概念図である。
【図３】本発明の一実施の形態であるプログラマブルコントローラシステムにおけるデバッグ時のブレーク設定処理を示す概念図である。
【図４】本発明の一実施の形態であるプログラマブルコントローラシステムにおける命令置換テーブルの構成例を示す概念図である。
【図５】本発明の一実施の形態であるプログラマブルコントローラシステムにおけるデバッグ時のブレーク処理を示す概念図である。
【図６】本発明の一実施の形態であるプログラマブルコントローラシステムにおけるデバッグタスクの動作例を示す概念図である。
【図７】本発明の一実施の形態であるプログラマブルコントローラシステムにおけるデバッグ時のブレーク位置からステップ実行を示す概念図である。
【図８】本発明の一実施の形態であるプログラマブルコントローラシステムにおけるデバッグ時において、複数のプログラム間に跨がるブレーク位置からステップ実行でのＮＯＰ命令の置換の推移を示す概念図である。
【図９】本発明の一実施の形態であるプログラマブルコントローラシステムにおけるデバッグ時の継続起動コマンドの実行例を示す概念図である。
【図１０】本発明の一実施の形態であるプログラマブルコントローラシステムにおけるデバッグ時において、複数のプログラム間に跨がるブレーク位置からステップ実行を示す概念図である。
【符号の説明】
【０１０２】
１００  プログラミング支援装置
１１０  マイクロプロセッサ
１２０  主記憶
１３０  外部記憶装置
１４０  ユーザインタフェース
１５０  通信インタフェース
１６０  オペレーティングシステム
１７０  ローダプログラム
２００  プログラマブルコントローラ
２１０  汎用マイコン
２２０  システムメモリ
２２１  オペレーティングシステム
２３０  通信インタフェース
２３１  ローダ通信線
２３２  被制御機器通信線
２４０  ローダサーバ
２４１  コマンド処理部
２５０  デバッグタスク
２５１  コマンド待ち処理
２５２  継続起動処理
２５３  ステップ前処理
２５４  ステップ後処理
２６０  ブレーク成立条件テーブル
２７０  命令置換テーブル
２７１  ＰＯＵ種別
２７２  ＰＯＵ番号
２７３  ＰＯＵ内アドレス
２７４  マイコン絶対アドレス
２７５  置換前命令コード
２７６  置換後命令コード
２８０  ＪＭＰテーブル
２９０  全置換済フラグ
２９１  ステップ実行中ビット
３１０  シーケンス命令記述プログラム
３１１  シーケンス命令
３２０  マシン語プログラム
３２１  マシン語
３２２  ＮＯＰ命令
３２３  分岐命令
３３０  シーケンス命令切れ目テーブル
３３１  オフセット値
４１０  ブレーク設定コマンド
４１１  ＰＯＵ種別
４１２  ＰＯＵ番号
４１３  ＰＯＵ内相対アドレス
４１４  ブレーク成立条件
４２０  ステップ実行コマンド
４３０  継続起動コマンド
【図１】
0004784355.tif 000002
【図２】
0004784355.tif 000003
【図３】
0004784355.tif 000004
【図４】
0004784355.tif 000005
【図５】
0004784355.tif 000006
【図６】
0004784355.tif 000007
【図７】
0004784355.tif 000008
【図９】
0004784355.tif 000009
【図１０】
0004784355.tif 000010
【図８】
0004784355.tif 000011