(57)【要約】【課題】プログラムに不具合が発生した際、簡易な装置構成で不具合の調査を短時間で行うことが可能なコントローラを得ること。【解決手段】ＯＳを実行するシステムプログラムによって自らの動作制御を行うとともに、高級言語プログラムによって作成されたユーザプログラムによって外部機器を動作させるユニットの制御を行なうコントローラ１０において、システムプログラムが格納される領域に関するプログラム領域情報、ユーザプログラムの実行中の動作情報およびユーザプログラムの実行中に発生したエラーに関するエラー情報を取得し、システムプログラムが、プログラム領域情報、動作情報およびエラー情報に基づいて、ユーザプログラムのエラー解析を行う。【選択図】        図２
2005332030.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステムを実行するシステムプログラムによって自らの動作制御を行うとともに、高級言語プログラムによって作成されたユーザプログラムによって外部機器を動作させるユニットの制御を行なうコントローラにおいて、
前記システムプログラムおよび前記ユーザプログラムを実行する際に、前記システムプログラムおよび前記ユーザプログラムが格納されるデータ格納部と、
前記データ格納部内で前記システムプログラムが格納される領域に関するプログラム領域情報、前記ユーザプログラムの実行中の動作情報および前記ユーザプログラムの実行中に発生したエラーに関するエラー情報を取得するプログラム情報取得部と、
前記システムプログラムが、前記プログラム情報取得部によって取得されたプログラム領域情報、動作情報およびエラー情報に基づいて、前記ユーザプログラムのエラー解析を行うプログラム解析部と、
を備えることを特徴とするコントローラ。
【請求項２】
前記プログラム情報取得部は、前記システムプログラムに基づいて前記プログラム領域情報、前記動作情報および前記エラー情報を取得することを特徴とする請求項１に記載のコントローラ。
【請求項３】
前記プログラム情報取得部は、前記動作情報を取得するため動作情報取得回路を備えることを特徴とする請求項１または２に記載のコントローラ。
【請求項４】
前記プログラム解析部は、前記エラー情報および前記動作情報に基づいて前記ユーザプログラムのアドレスエラー発生時の前記ユーザプログラムに関する情報を抽出することを特徴とする請求項１〜３のいずれか１つに記載のコントローラ。
【請求項５】
前記プログラム解析部は、動作中の前記システムプログラムによって取得された前記ユーザプログラムにおいて、スタックオーバフローしたタスクを抽出することを特徴とする請求項１〜４のいずれか１つに記載のコントローラ。
【請求項６】
前記プログラム解析部は、動作中の前記システムプログラムによって取得された前記ユーザプログラムにおいて無限ループ処理している可能性のあるタスクに関する情報と前記動作情報に含まれる前記ユーザプログラムのタスクに関する情報とに基づいて、無限ループ処理しているタスクの抽出を行なうことを特徴とする請求項１〜５のいずれか１つに記載のコントローラ。
【請求項７】
前記オペレーティングシステムは、前記ユーザプログラムを実行するとともに前記プログラム解析部の制御を行なうメインオペレーティングシステムと、前記プログラム解析部の制御を行なうサブオペレーティングシステムとからなり、
プログラム情報取得部は、前記メインオペレーティングシステムを実行するシステムプログラムに基づいて動作し、
前記ユーザプログラムの実行中にエラーが発生すると前記プログラム解析部は、前記サブオペレーティングシステムを実行するシステムプログラムに基づいて動作することを特徴とする請求項１〜４のいずれか１つに記載のコントローラ。
【請求項８】
前記プログラム解析部は、前記プログラム領域情報に基づいて、前記ユーザプログラムの実行中に発生したエラーが、ユーザプログラムまたはシステムプログラムのいずれによるものであるかを判別することを特徴とする請求項１〜７のいずれか１つに記載のコントローラ。
【請求項９】
前記プログラム解析部によってエラー解析された前記ユーザプログラムのエラー解析結果とともに前記ユーザプログラムの実行中に発生したエラーの要因を識別するための情報を記憶する解析結果記憶部を備えることを特徴とする請求項１〜８のいずれか１つに記載のコントローラ。
【請求項１０】
前記解析結果記憶部は、前記プログラム解析部によってエラー解析された前記ユーザプログラムのエラー解析結果をウェブページとして格納し、
前記解析結果記憶部に格納するウェブページ上の情報を外部機器に送信する送信部を備えることを特徴とする請求項１〜９のいずれか１つに記載のコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高級言語で作成されたプログラムのトレースを実行するコントローラに関するものである。
【背景技術】
【０００２】
プログラマブルコントローラ等の組み込み機器のプログラム開発（組込み型のプログラムの開発）は、クロス開発環境で行われる。クロス開発環境は、プログラムを組み込んで動作させる装置である開発ターゲットと組み込むプログラムを開発する開発ホストシステムをＲＳ−２３２Ｃ（Recommended Standard 232 version C）等によって通信させた状態で開発を行っている。
【０００３】
クロス開発環境においてデバッグを行う場合、デバッグ時に必要となるデータを開発ホストシステムに保有しておき、開発ターゲット側のシンボル情報や変数に格納されている値などの情報は通信によって開発ターゲットに渡している。この場合、開発ターゲットに対応した専用の通信が必要となり、クロス開発環境時には開発ホストシステムに専用のデバッグツールが必要となる。
【０００４】
また、開発ターゲットにＯＳ（オペレーティングシステム）となるシステムプログラムが存在しない場合にデバッグを行う手段として、開発ターゲットのマイクロプロセッサをエミュレートするＩＣＥとその専用ツールを使用する方法がある。この方法では、デバッグ情報をＩＣＥに保有し、クロス開発環境であるホスト・ターゲットとＩＣＥの間の通信を確立したうえでデバッグ情報を収集する。
【０００５】
特許文献１に記載のマイクロコンピュータ用プログラムのデバッグ方法は、ＩＣＥに対し高級言語コンパイラで生成されてプログラムメモリに記憶されたプログラムにデバッグモジュールを埋め込み、このデバッグモジュールを評価用ＣＰＵで実行することにより、関数に渡された引数の値、又は特定の引数の値が許容範囲を越えている場合にトレースメモリ装置に記録している。このＩＣＥにより、プログラムの実行をブレークさせることなく、関数へ渡される引数の値、又は許容範囲を越える引数を渡したモジュール又は引数に関するエラー処理を評価している。
【０００６】
【特許文献１】特開平１０−１２４３５０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記従来の技術では、デバッグを行うためにＩＣＥが必要とるため、デバッグを行うための装置構成が複雑になるといった問題があった。また、デバッグを行うために動作させるＩＣＥにおいて、クロック等に制限が課されるといった問題があった。また、ＰＬＣ（Programmable Logic Controller）等の長時間動作させて制御を行うようなコントローラにおいて不具合が発生した場合、発生時点でデバッグ情報を収集していなければデバッグを行うことができない。このような場合、不具合が再発生する環境を整えた後に、デバッグツールを使用して動作情報を確認しながら不具合箇所を探さなければならないため、デバッグ情報の収集に多大な時間を要するという問題点があった。また、ＰＬＣ等の生産ラインに組込まれて長時間動作を行うようなコントローラにおいては、常にデバッグ情報を取得するためにホスト・ターゲット通信を行うことは、経由するサーバのダウンや回線の切断などの恐れがあるためデバッグ情報を取得することが困難になるといった問題があった。
【０００８】
本発明は、上記に鑑みてなされたものであって、プログラムに不具合が発生した際、簡易な装置構成で不具合の調査を短時間で行うことが可能なコントローラを得ることを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、オペレーティングシステムを実行するシステムプログラムによって自らの動作制御を行うとともに、高級言語プログラムによって作成されたユーザプログラムによって外部機器を動作させるユニットの制御を行なうコントローラにおいて、前記システムプログラムおよび前記ユーザプログラムを実行する際に、前記システムプログラムおよび前記ユーザプログラムが格納されるデータ格納部と、前記データ格納部内で前記システムプログラムが格納される領域に関するプログラム領域情報、前記ユーザプログラムの実行中の動作情報および前記ユーザプログラムの実行中に発生したエラーに関するエラー情報を取得するプログラム情報取得部と、前記システムプログラムが、前記プログラム情報取得部によって取得されたプログラム領域情報、動作情報およびエラー情報に基づいて、前記ユーザプログラムのエラー解析を行うプログラム解析部と、を備えることを特徴とする。
【００１０】
この発明によれば、データ格納部内でシステムプログラムが格納される領域に関するプログラム領域情報、ユーザプログラムの実行中の動作情報およびユーザプログラムの実行中に発生したエラーに関するエラー情報を取得し、システムプログラムがプログラム領域情報、動作情報およびエラー情報に基づいて、ユーザプログラムのエラー解析を行うので、ユーザプログラムの動作状況のトレースおよびユーザプログラムのエラー時の要因判別を容易に確認することが可能になる。
【発明の効果】
【００１１】
この発明によれば、コントローラが組み込み型の高級言語プログラムによって作成されたユーザプログラムを動作させながらユーザプログラムの動作状況のトレースおよびユーザプログラムのエラー時の要因判別を容易に確認することが可能になる。したがって、コントローラにおいてユーザプログラムの不具合発生時のデータを確認することができるため、デバッグの再発生を防止する環境を整える時間を短縮することが可能になるという効果を奏する。
【発明を実施するための最良の形態】
【００１２】
以下に、本発明にかかるコントローラの実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１３】
実施の形態１．
図１は、本発明の実施の形態１に係るコントローラを備えたデバッグシステムのシステム構成図である。デバッグシステムは、Ｃ言語等の高級言語で記述されたプログラム（以下、高級言語プログラムという）の不具合を一時診断するシステムである。図１に示すように、デバッグシステムは生産ライン内の装置の実行等を行う生産システム３と、生産システム３にインターネット２などの通信ネットワークによって接続されたネットワーク機器１からなる。
【００１４】
生産システム３は、ＰＬＣ（Programmable Logic Controller）バス４５に接続された、電源４１、コントローラ１０、複数のユニット４２からなる。コントローラ１０は、ＰＬＣバス４５を介して各ユニット４２の制御を行う。
【００１５】
ネットワーク機器１は、液晶ディスプレイ等の表示機能を備えており、例えばパーソナルコンピュータ等からなる。ネットワーク機器１は、生産システム３内のコントローラ１０において取得した、高級言語プログラムの動作情報や高級言語プログラムのエラー要因（エラー要因の候補）等を取得する。
【００１６】
図２は、実施の形態１に係るコントローラの構成を示すブロック図である。コントローラ１０は、ＰＬＣバス４５に接続されたユニット４２を制御するとともに、組み込み型の高級言語プログラムで作成されたユニット４２を制御するためのユーザプログラムの不具合を一時診断する。
【００１７】
コントローラ１０は、例えばＰＬＣ（Programmable Logic Controller）等の生産システムの制御装置であり、パーソナルコンピュータ等からなる。コントローラ１０は、ＣＰＵ（Central Processing Unit）バス９、ＣＰＵ１１、周辺機器接続部１２、送受信部１３、データ格納部１４、トレース情報記憶部１５、プログラム記憶部１６、データ変換部１８、記憶媒体接続部１９を備える。
【００１８】
ＣＰＵバス９は、ＣＰＵ１１と送受信部１３、データ格納部１４、トレース情報記憶部１５、プログラム記憶部１６、データ変換部１８、記憶媒体接続部１９を接続するバス（データのやり取りを行う伝送路）である。ＣＰＵ１１は、プログラムを実行するマイクロプロセッサである。
【００１９】
周辺機器接続部１２は、例えばＲＳ−２３２Ｃ（Recommended Standard 232 version C）等を備えて構成され、プリンタ、モデム、スキャナ等の外部装置とシリアル通信を行う。周辺機器接続部１２は、コントローラ１０のＯＳ（Operating System）（オペレーティングシステム）となるシステムプログラム等によって取得された後述するエラー発生要因判別ファイルやトレースデータファイルを、必要に応じてプリンタ等の周辺機器に送信する。
【００２０】
送受信部１３は、１００Ｂａｓｅ−ＴＸ／１００Ｂａｓｅ−Ｔによって接続を行うＰＨＹチップ等を備え、Ｅｔｈｅｒｎｅｔ（登録商標）等によって外部機器と接続し、情報の送受信を行う。送受信部１３はネットワーク機器１からの要求に対してエラー発生要因判別ファイルやトレースデータファイルをインターネット２を介して送信する。また、送受信部１３は必要に応じてエラー発生要因判別ファイルやトレースデータファイルを、例えば液晶モニタ等の表示機能を備えた外部機器（図示せず）に送信する。
【００２１】
データ格納部１４は、ワークＲＡＭ（Random Access Memory）等を備え、ＣＰＵ１１が実行するプログラム（ユーザプログラム、システムプログラム）やこのプログラムが使用するデータを格納する。プログラム記憶部１６に格納してあるシステムプログラムやユーザプログラムをデータ格納部１４に展開することによってＣＰＵ１１はシステムプログラムやユーザプログラムを実行する。ここでは、システムプログラムをデータ格納部１４に展開することによってＣＰＵ１１がシステムプログラムを実行する処理が、特許請求の範囲に記載のプログラム情報取得部の処理に対応する。
【００２２】
トレース情報記憶部１５は、ＳＲＡＭ（Static RAM）等の内部電源を備えたバックアップＲＡＭ等からなり、コントローラ１０のリセット後もデータを保持することが可能な記憶機能を備えている。
【００２３】
データ変換部１８は、ＰＬＣバス４５用のＡＳＩＣ（Application Specific Integrated Circuit）等を備え、ＰＬＣバス４５を介してユニット４２にアクセスする際のデータを変換する。記憶媒体接続部１９は、ＣＦ（Compact Flash）カードやフレキシブルディスク等の記憶媒体等と接続を行う。
【００２４】
プログラム記憶部１６は、ＦＬＡＳＨメモリ等のＲＯＭ（Read Only Memory）等を備え、コントローラ１０のＯＳとなるシステムプログラム、Ｃ言語等の高級言語で作成したユーザプログラム、後述のエラー発生要因候補Ｄ６等を記憶（保存）する。本実施の形態１においては、ＯＳとなるシステムプログラムがユーザプログラムの不具合を一時診断（エラー解析）する。
【００２５】
ここで、コントローラ１０のＯＳとなるシステムプログラムについて説明する。図３は、実施の形態１に係るシステムプログラムの機能ブロックの一例を示す図である。システムプログラムは、記憶媒体Ｉ／Ｆ機能ブロック２０、スクリプト機能ブロック２１、エラー要因診断機能ブロック２２、サーバ機能ブロック２３、トレース機能ブロック２４、システムエリア記憶機能ブロック２５、外部機器Ｉ／Ｆ機能ブロック２７を備えている。
【００２６】
スクリプト機能ブロック２１は、ユーザプログラムを起動するためファイルに記述された内容を実行する機能ブロックである。エラー要因診断機能ブロック２２は、ユーザプログラムのエラーが発生した際にユーザプログラムのトレースに関する情報（後述するトレース情報１００）からエラー要因を判別する機能ブロックである。エラー要因診断機能ブロック２２は、エラー発生時に保有するトレース情報１００を使用してエラー発生箇所からのバックトレースやタスク情報のチェックを行うことにより、エラー発生箇所の要因となりえる候補を列挙してファイルに保存する。
【００２７】
サーバ機能ブロック２３は、コントローラ１０が取得したトレースに関する情報の取得要求情報を外部機器から受け付けるとともに、トレースに関する情報の取得要求情報に対する応答情報を外部機器（ネットワーク機器１）に送信する機能ブロックである。トレース機能ブロック２４は、ユーザプログラムの動作をリアルタイムトレースし、トレースした情報をトレース情報１００としてトレース情報記憶部１５に格納させる機能ブロックである。システムエリア記憶機能ブロック２５は、システムプログラムが使用するデータ格納部１４の領域を記憶させる機能ブロックである。
【００２８】
また、記憶媒体Ｉ／Ｆ機能ブロック２０は記憶媒体接続部１９に装着した記憶可能な記憶媒体にアクセスする機能ブロックである。外部機器Ｉ／Ｆ機能ブロック２７は、インターネット、シリアル、モデム、ＰＬＣバス４５と接続できるＩ／Ｆドライバ機能を有する機能ブロックである。サーバ機能ブロック２３が、トレースに関する情報の取得要求情報を外部機器から受け付けた場合、外部機器Ｉ／Ｆ機能ブロック２７がインターネット２などを介してトレースに関する情報を外部機器に送信する。
【００２９】
ＣＰＵ１１は、システムプログラムをデータ格納部１４に展開して動作させることによって、これらの記憶媒体Ｉ／Ｆ機能、スクリプト機能、エラー要因診断機能、サーバ機能、トレース機能、システムエリア記憶機能、外部機器Ｉ／Ｆ機能を達成する。本実施の形態１においては、ＣＰＵ１１がシステムプログラムをデータ格納部１４に展開して動作させることによって特許請求の範囲に記載のプログラム解析部の処理を行う。
【００３０】
つぎに、コントローラ１０の動作について説明する。図４−１は、コントローラの動作手順を示すフローチャートであり、図４−２はエラーアドレスを登録する手順を示すフローチャートである。
【００３１】
プログラム記憶部１６に記憶しているＯＳとなるシステムプログラムやユーザプログラムを、コントローラ１０の起動時にデータ格納部１４に展開してシステムプログラムやユーザプログラム（高級言語プログラム）に基づく所定の動作を開始する。システムプログラムを起動すると、システムプログラムのトレース機能は、トレース情報記憶部１５へのトレース情報１００の格納を開始する
【００３２】
図５は、トレース情報記憶部に記憶するトレース情報の構成を示す図である。トレース情報１００には、エラーが発生したアドレスを格納したエラー発生アドレスＤ１、トレース機能によりコントローラ１０が動作している間常に収集されているアクセスアドレス、アクセスデータ、プログラムカウンタを格納したＳ／Ｗ（ソフトウェア）トレース情報Ｄ２、ＯＳとなるシステムプログラムを含む高級言語プログラムの関数コールの履歴（プログラムカウンタ、関数名、引数）を格納した関数コール履歴情報Ｄ３、ＯＳとなるシステムプログラムが使用しているデータ格納部１４のＲＡＭ領域を記憶したシステムプログラム使用エリア情報Ｄ４の各エリアに格納されている情報が含まれている。
【００３３】
エラー発生アドレスＤ１は特許請求の範囲に記載のエラー情報に対応し、Ｓ／Ｗトレース情報Ｄ２、関数コール履歴情報Ｄ３は特許請求の範囲に記載の動作情報に対応し、システムプログラム使用エリア情報Ｄ４は、特許請求の範囲に記載のプログラム領域情報に対応する。これらエラー発生アドレスＤ１、Ｓ／Ｗトレース情報Ｄ２、関数コール履歴情報Ｄ３、システムプログラム使用エリア情報Ｄ４は、トレース情報１００としてトレース情報記憶部１５に格納される。トレース情報１００は、エラー要因の候補をシステムプログラムによって自動的にリストアップする際に用いられる。
【００３４】
ここで、Ｓ／Ｗトレース情報Ｄ２、関数コール履歴情報Ｄ３、システムプログラム使用エリア情報Ｄ４について説明する。図６−１は、Ｓ／Ｗトレース情報を説明するための図であり、図６−２は、関数コール履歴情報を説明するための図であり、図６−３は、システムプログラム使用エリア情報を説明するための図である。
【００３５】
図６−１に示すように、Ｓ／Ｗトレース情報Ｄ２は、１つのプログラムカウンタ（ＰｒｇＣｏｕｎｔｅｒ）、１つのアクセスアドレス（Ａｄｄｒｅｓｓ）、１つのアクセスデータ（Ｄａｔａ）からなる１つのフレームを複数個含んでおり、各フレームにはフレームＮｏ．が含まれている。Ｓ／Ｗトレース情報Ｄ２は、データ格納部１４とＣＰＵ１１の間でやりとりされる情報に基づいてシステムプログラムのトレース機能によって取得される。
【００３６】
図６−２に示すように、関数コール履歴情報Ｄ３は、１つのプログラムカウンタ、関数名（シンボル情報（Ｓｙｍｂｏｌ））、第１引数（Ｄａｔａ「０」）〜第ｎ（ｎは自然数）引数（Ｄａｔａ「ｎ−１」）からなる１つの関数コールデータを複数含んでいる。関数コール履歴情報Ｄ３は、ユーザプログラムの関数コール時にプログラムカウンタ、関数名、関数に渡された引数がシステムプログラムによって収集される。
【００３７】
関数コール履歴情報Ｄ３は、データ登録時にスタックに格納できるデータが一杯（満杯）である場合は最も古いデータから削除して新しいデータを登録し（ＦＩＦＯ（Fast In Fast Out））、データ参照時には最も新しいデータをスタックから取り出して参照する（ＦＩＬＯ（Fast In Last Out））。
【００３８】
図６−３に示すように、システムプログラム使用エリア情報Ｄ４のデータ構造は、システムプログラムが使用しているシステム使用エリア数と、システムプログラムが使用しているデータ格納部１４のＲＡＭ領域を示す情報としてシステム使用エリアデータを含んでいる。システム使用エリアデータは、１つの先頭アドレス（ＳｔａｒｔＡｄｄｒ）と１つの最終アドレス（ＥｎｄＡｄｄｒ）からなるアドレスに関する情報を複数組含んでいる。
【００３９】
ＣＰＵ１１がシステムプログラムを起動すると、ユーザプログラムが開始される前に、システムプログラムが使用しているデータ格納部１４のＲＡＭ領域に関する情報を、データ格納部１４から取得し、システムプログラム使用エリア情報Ｄ４へ格納する。
【００４０】
ＣＰＵ１１がユーザプログラムによる処理を開始すると、コントローラ１０が動作している間、アクセスアドレス、アクセスデータ、プログラムカウンタをＳ／Ｗトレース情報Ｄ２として収集する。また、ＣＰＵ１１がユーザプログラムによる処理を開始すると、コントローラ１０が動作している間、高級言語プログラムの関数コールの履歴を収集する。そして、収集されたＳ／Ｗトレース情報Ｄ２と関数コール履歴情報Ｄ３は、トレース情報１００としてトレース情報記憶部１５に格納する。
【００４１】
ＣＰＵ１１によってプログラム処理が実行されている時に、アドレスの不正アクセス（アドレスエラー）やシステムＷＤＴ（Watch dog timer）発生などのエラーが発生すると、システムプログラムがこのアドレスの不正アクセスやシステムＷＤＴ発生などのエラーをシステムプログラムが正常に動作しなくなる可能性のある致命的なエラーとして検出する。このとき、アドレスの不正アクセスやシステムＷＤＴ発生などが発生するとイベントを発生させ、このイベントをシステムプログラムが検出することによってエラーを検出する。そして、エラーが発生したアドレスをエラー発生アドレスＤ１としてトレース情報記憶部１５のトレース情報１００に格納する。
【００４２】
この後、アドレスの不正アクセス等の発生によってイベントが発生してトレース情報記憶部１５のトレース情報１００が更新されると、エラー要因の判別を正確に行えなくなる。このため、一旦イベントが発生するとトレース情報記憶部１５へのトレース情報１００の更新を停止（トレース情報１００の収集を終了）させるために、システムプログラムはプログラム記憶部１６に記憶しているトレース実行フラグをＯＦＦに設定する（ステップＳ１００）。これにより、システムプログラムによるトレース情報１００の収集が一旦終了（停止）し、トレース情報１００が更新されることがなくなる。
【００４３】
ここで、プログラム記憶部１６内の構成およびデータ格納部１４の構成について説明する。図７−１は実施の形態１に係るプログラム記憶部のメモリマップを示す図であり、図７−２は実施の形態１に係るデータ格納部のメモリマップを示す図である。
【００４４】
プログラム記憶部１６は、システムプログラムを格納するエリア（システムプログラム格納エリア２８）、ユーザプログラムを格納するエリア（ユーザプログラム格納エリア３０）、トレース実行フラグを格納するエリア（トレース実行フラグ３９）を含んで構成されている。
【００４５】
システムプログラム格納エリア２８、ユーザプログラム格納エリア３０は、標準ＲＯＭ３７のエリアに記憶され、トレース実行フラグ３９は標準ＲＯＭ３７以外のエリアに記憶されている。
【００４６】
トレース実行フラグ３９は、トレース情報１００の収集を行うか否かを示す情報であり、ＯＳであるシステムプログラムの実行時にＯＮする。トレース実行フラグがＯＮに設定されている場合は、ＣＰＵ１１はデータ格納部１４のシステムプログラムによってトレース情報１００の収集を行い、トレース実行フラグがＯＦＦに設定されている場合は、データ格納部１４のシステムプログラムによるトレース情報の収集を行わない。
【００４７】
図７−２に示すように、データ格納部１４は、システムプログラムの実行に使用するデータを格納するエリアであるシステムプログラムデータエリア３２、システムプログラム格納エリア３３、ユーザプログラム使用エリア３４、システムメモリ／スタック確保エリア３６を含んで構成されている。
【００４８】
システムプログラムデータエリア３２、システムプログラム格納エリア３３、ユーザプログラムの使用エリア３４、システムメモリ／スタック確保エリア３６はデータ格納部１４のワークＲＡＭ３８のエリアに記憶されている。
【００４９】
システムメモリ／スタック確保エリアは、システムプログラムの動作時に使用されるエリアである。システムプログラムは起動時にワークＲＡＭ３８に展開され、システムプログラムデータエリア３２、システムプログラム格納エリア３３、システムメモリ/スタック確保エリア３６を使用して動作する。
【００５０】
イベントの発生がＲＡＭ領域のデータの破壊によるエラーに基づくものである場合は、アドレスエラーが発生している場合が多いため、データ格納部１４のシステムプログラムは不正なアクセスを行ったアドレスを格納したトレース情報記憶部１５内のエリアのエラー発生アドレスＤ１から値を取得する。そして、システムプログラムは、エラー発生アドレスＤ１に０ｘ００００００００（ＮＵＬＬ）以外のアドレスが格納されているか否かに基づいて、アドレスエラーが発生しているかを判別する（ステップＳ１１０）。
【００５１】
システムプログラムが、アドレスエラーが発生していると判断した場合には（ステップＳ１１０、Ｙｅｓ）、エラーアドレスの登録処理を行う（ステップＳ１２０）。
【００５２】
ここで、図４−２のフローチャートに従ってエラーアドレスの登録処理の手順について説明する。ＣＰＵ１１は、システムプログラムに基づいてトレース情報記憶部１５のエラー発生アドレスＤ１からエラーが発生したアクセスアドレスを取得するとともに、Ｓ／Ｗトレース情報Ｄ２からエラー発生アドレスと同一のアクセスアドレスを持つ最新の情報（データ）を取得する（ステップＳ３００）。このＳ／Ｗトレース情報Ｄ２から取得したデータ（アクセスアドレス、アクセスデータ、プログラムカウンタ）がアドレスエラー発生時のデータとなり、デバッグ時に参照される。アドレスエラー発生時のデータを取得すると、過去のアドレスエラー発生場所へのアクセスを記憶するための過去アクセスアドレス情報Ｄ５に格納する。過去アクセスアドレス情報Ｄ５は、例えばデータ格納部１４に格納しておく。システムプログラムは、エラーが発生したアドレスと同一アドレスへのアクセスがエラー発生前に存在するか否かを調べる（ステップＳ３１０）。
【００５３】
Ｓ／Ｗトレース情報Ｄ２に格納されている各情報のアクセスアドレスを検索し、エラーが発生したアドレスと同一アドレスへのアクセスがエラー発生前に存在する場合（ステップＳ３１０、Ｙｅｓ）、エラー発生アドレスＤ１に格納されているアドレスと同一のアドレスを持つデータをそれぞれ過去アクセスアドレス情報Ｄ５に追加していく（ステップＳ３２０）。
【００５４】
Ｓ／Ｗトレース情報Ｄ２に存在するアクセスアドレスを全てチェックしたか否かを確認する（ステップ３３０）。そして、Ｓ／Ｗトレース情報Ｄ２に存在するアクセスアドレスを全てチェックしていないと判断すると（Ｓ／Ｗトレース情報Ｄ２に格納されている各情報のアクセスアドレスが最後のものでないと判断すると）（ステップＳ３３０、Ｎｏ）、ステップ３１０およびステップＳ３２０の処理を繰り返す。
【００５５】
一方、Ｓ／Ｗトレース情報Ｄ２に存在するアクセスアドレスを全てチェックしたと判断すると（ステップＳ３３０、Ｙｅｓ）、トレース情報記憶部１５に登録した過去アクセスアドレス情報Ｄ５のデータのプログラムカウンタからＳ／Ｗトレース情報Ｄ２に基づいてバックトレースを行う。そして、エラーが発生したアドレスに移動（エラーアドレスへ移動）した、関数名とタスク名を取得する。すなわち、まず過去アクセスアドレス情報Ｄ５に登録されているプログラムカウンタを取得し、このプログラムカウンタ以前のプログラムカウンタを示す動作情報（アクセスアドレス、アクセスデータ、プログラムデータ）をＳ／Ｗトレース情報Ｄ２から取得する（ステップＳ３４０）。
【００５６】
システムプログラムは、Ｓ／Ｗトレース情報Ｄ２から取得したプログラムカウンタと同一のプログラムカウンタをトレース情報記憶部１５の関数コール履歴情報Ｄ３から検索する。そして、関数コール履歴情報Ｄ３にＳ／Ｗトレース情報Ｄ２から取得したプログラムカウンタと同一のプログラムカウンタがある場合、検索したプログラムカウンタに対応するタスク名と関数名を関数コール履歴情報Ｄ３から取得する（ステップＳ３５０）。
【００５７】
システムプログラムは、関数コール履歴情報Ｄ３から関数情報（プログラムカウンタ、関数名、引数）を取得できたか否かの判断を行う（ステップＳ３６０）。システムプログラムが、関数コール履歴情報Ｄ３から関数情報を取得できたと判断した（エラーの発生した関数を発見した）場合（ステップＳ３６０、Ｙｅｓ）、アクセスアドレスの情報に関数情報を付加したものを取得情報として、エラー要因を識別するための情報（アドレスエラー）とともにトレース情報記憶部１５のエラー発生要因候補Ｄ６に登録する（ステップＳ３７０）。ステップＳ３７０においてエラー要因を登録する際には、新しい動作ほどエラーに対する直接の原因になりやすいと考えられるため、動作が新しい順にエラー発生要因候補Ｄ６の上位に位置付けて登録する。
【００５８】
一方、システムプログラムが、関数コール履歴情報Ｄ３から関数情報を取得できなかったと判断した場合（ステップＳ３６０、Ｎｏ）、エラー発生要因候補Ｄ６への登録は行わない。
【００５９】
Ｓ／Ｗトレース情報Ｄ２から取得したプログラムカウンタと同一のプログラムカウンタを関数コール履歴情報Ｄ３から発見するか、又はＳ／Ｗトレース情報Ｄ２に格納された最古のデータをチェックするまでプログラムカウンタの検索を実施する（プログラムカウンタの検索を繰り返す）。すなわち、Ｓ／Ｗトレース情報Ｄ２から取得したプログラムカウンタと同一のプログラムカウンタを関数コール履歴情報Ｄ３から発見できない場合は、Ｓ／Ｗトレース情報Ｄ２に存在するアクセスアドレスを全てチェックしたか否かを確認する（ステップ３８０）。そして、Ｓ／Ｗトレース情報Ｄ２に存在するアクセスアドレスを全てチェックしていないと判断すると（Ｓ／Ｗトレース情報Ｄ２に格納されている各情報のアクセスアドレスが最後のものでないと判断すると）（ステップＳ３８０、Ｎｏ）、ステップ３５０〜ステップＳ３７０の処理を繰り返す。
【００６０】
一方、Ｓ／Ｗトレース情報Ｄ２に存在するアクセスアドレスを全てチェックしたと判断すると（ステップＳ３８０、Ｙｅｓ）、過去アクセスアドレス情報Ｄ５に登録されている全てのプログラムカウンタに対し、このプログラムカウンタ以前のプログラムカウンタを示す動作情報をＳ／Ｗトレース情報Ｄ２からチェックしたか否かを確認する（ステップＳ３９０）。そして、過去アクセスアドレス情報Ｄ５に登録されている全てのプログラムカウンタに対して動作情報をチェックしていないと判断すると（過去アクセスアドレス情報Ｄ５に登録されているプログラムカウンタが最後のものでないと判断すると）（ステップＳ３９０、Ｎｏ）、ステップ３４０〜ステップＳ３８０の処理を繰り返す。過去アクセスアドレス情報Ｄ５に登録されているプログラムカウンタを全てチェックしたと判断すると（ステップＳ３９０、Ｙｅｓ）、エラーアドレスの登録処理を終了する。
【００６１】
図４−１のステップＳ１１０において、システムプログラムによってアドレスエラーが発生していないと判断された場合（ステップＳ１１０、Ｎｏ）、またはエラーアドレスの登録処理（ステップＳ１２０）が終了すると、動作中のシステムプログラムから現存する全タスクのスタック情報を取得し、スタックオーバフローが発生していないかをチェックする。このスタックオーバフローによりＲＡＭ領域のデータを破壊しているか否かを調べる。
【００６２】
スタックオーバフローが発生している場合は、スタックオーバフローによってＲＡＭ領域のデータを破壊したことがエラー要因であると明確であるので、エラー発生要因候補Ｄ６の最上位に位置付けて、システムプログラムが取得したタスク名、最終実行関数名を記憶する（ステップＳ１３０）。
【００６３】
そして、スタックオーバフローが発生していないかのチェックをシステムプログラムの全タスクに対して行ったか否かを確認する（ステップＳ１４０）。スタックオーバフローを全てのタスクに対してチェックしていない場合は、ステップＳ１３０の処理を繰り返す。一方、スタックオーバフローを全てのタスクに対してチェックした場合は、スタックオーバフローが発生しているタスクが存在するか否かを確認する（ステップＳ１５０）。
【００６４】
スタックオーバフローのチェックを行った結果、スタックオーバフローが発生しているタスクが存在しないと判断された場合（ステップＳ１５０、Ｎｏ）、無限ループしているタスクが存在するという原因でＷＤＴエラーなどが発生している場合があるので、サスペンド（一時停止）しているタスクがあるか否かの確認を行う（ステップＳ１６０）。
【００６５】
サスペンドしているタスクがあるか否かの確認を行うため、ＯＳであるシステムプログラムからタスク情報を取得し、サスペンド状態となっているタスクが存在するかを判断する。そして、サスペンド状態のタスクが存在すると判断された場合には（ステップＳ１６０、Ｙｅｓ）、無限ループが発生している可能性があるので、無限ループが発生している箇所がないかを調べる。
【００６６】
具体的には、ＯＳであるシステムプログラムからサスペンド状態のタスクのプライオリティ（優先度）を取得（サスペンド状態のタスクが複数存在する場合は一番高いプライオリティを取得）し、取得したプライオリティ以上で動作しているタスクの中で一番プライオリティの低いタスクで無限ループが発生している可能性が高いため、ＯＳであるシステムプログラムによって例えばこのプライオリティの低いタスクの現在の実行位置を取得する。
【００６７】
無限ループしている可能性のあるタスク実行位置を取得した後、Ｓ／Ｗトレース情報Ｄ２のプログラムカウンタから無限ループしている可能性のあるタスク実行位置と同一の値が存在するか否かを調べる。Ｓ／Ｗトレース情報Ｄ２に同一の値のプログラムカウンタが多数（例えば１００以上）存在する場合は無限ループが発生していると判断し、エラー要因（サスペンド）、タスク名およびプログラムカウンタをエラー発生要因候補Ｄ６に登録する（ステップＳ１７０）。
【００６８】
ここでは、エラー発生の要因（サスペンド）が明確であり、アドレスエラーやスタックオーバフローが検出されていない時にのみ検出すると考えられるため、エラー発生要因候補Ｄ６の最上位に位置付けて記憶する。
【００６９】
エラー発生要因候補Ｄ６に記憶した全情報のアクセスアドレス、プログラムカウンタに対して、トレース情報のシステムプログラム使用エリア情報Ｄ４の範囲内であるかを判別する。そして、アクセスアドレスやプログラムカウンタが、システムプログラム使用エリア情報Ｄ４の範囲内である場合は、エラー発生要因がシステムプログラムであると判断し、システムプログラム使用エリア情報Ｄ４の範囲外である場合は、エラー発生要因がユーザプログラムであると判断する。
【００７０】
エラー発生原因の各項目に対するエラー発生要因がシステムプログラムか、ユーザプログラムであるかの判断結果は、各エラー発生要因候補Ｄ６に追加して記憶する（ステップＳ１８０）。
【００７１】
プログラム記憶部（標準ＲＯＭ）１６または記憶媒体接続部１９に装着した記憶媒体（ＣＦカード等）に、エラー要因の候補としてリストアップされたエラー発生要因候補Ｄ６を記憶したファイルであるエラー発生要因判別ファイルとトレース情報（Ｄ１〜Ｄ４）を記憶したファイルであるトレースデータファイルを保存する（ステップＳ１９０）。
【００７２】
プログラム記憶部１６によって記憶されたエラー発生要因判別ファイルやトレースデータファイルは、例えばＷＥＢ（ウェブ）ページとして記憶しておく。そして、コントローラ１０とインターネット２に接続されたネットワーク機器１からの要求に応じてＷＥＢページの情報をネットワーク機器１に送受信部１３から送信する。コントローラ１０に対して遠隔地のネットワーク機器１は、インターネット２を介してエラー発生要因判別ファイルやトレースデータファイルを取得することが可能となる。
【００７３】
これにより、エラー発生要因判別ファイルやトレースデータファイルに基づいてユーザプログラム（高級言語プログラム）の動作状況のトレースおよびエラー時の要因判別を容易に確認することが可能となる。
【００７４】
また、アクセスアドレスやプログラムカウンタが、システムプログラム使用エリア情報Ｄ４の範囲内であるか否かに基づいてエラー発生要因がシステムプログラムか、ユーザプログラムであるかの情報をエラー発生要因候補Ｄ６に登録するので、不具合の発生箇所がＯＳであるシステムプログラムであるかユーザプログラムであるかを簡易に判断することが可能となる。
【００７５】
このように実施の形態１によれば、コントローラ１０がクロス開発環境下にない状態で組み込み型の高級言語プログラムを動作させて動作状況のトレースおよびエラー時の要因判別を容易に確認することが可能となる。また、コントローラ１０がＣ言語等の高級言語プログラムの不具合発生箇所の絞り込み（特定）を行うので、デバッグ時の不具合箇所特定に要する時間を短縮することが可能となる。また、コントローラ１０において不具合発生時のデータを確認することができるため、デバッグの再発生を防止する環境を整える時間を短縮することが可能となる。
【００７６】
実施の形態２．
図４−１、図４−２、図６−１および図８に従って実施の形態２に係るコントローラを説明する。実施の形態２においては、コントローラ１０がトレース回路（動作情報取得回路）４０を備え、トレース回路４０がＳ／Ｗによるトレースを補助する。
【００７７】
図８は、実施の形態２に係るコントローラの構成を示すブロック図である。図８の各構成要素のうち図２に示す実施の形態１のコントローラと同一の機能をする構成要素については同一番号を付しており、重複する説明は省略する。
【００７８】
図８に示すように、本実施の形態２におけるコントローラ１０は、トレース回路４０を備える。トレース回路４０は、データ格納部１４からＣＰＵ１１への命令やデータなどのプログラム動作情報をトレース情報記憶部１５に書き込む。すなわち、トレース回路４０は、ＣＰＵ１１がユーザプログラムによる処理を開始すると、コントローラ１０が動作している間、アクセスアドレス、アクセスデータ、プログラムカウンタを収集してＨ／Ｗトレース情報Ｄ７（図示せず）に格納する。
【００７９】
実施の形態１にいてはシステムプログラムによってＳ／Ｗトレース情報Ｄ２をトレース情報記憶部１５に記憶させたが、本実施の形態２においてはトレース回路４０によって
Ｈ／Ｗ（ハードウェア）トレース情報Ｄ７をトレース情報記憶部１５に記憶させる。Ｈ／Ｗトレース情報Ｄ７は、図６−１に示した実施の形態１のＳ／Ｗトレース情報Ｄ２と同様の情報（アクセスアドレス、アクセスデータ、プログラムカウンタ）を含んでいる。
【００８０】
本実施の形態２のコントローラ１０も図４−１や図４−２で説明した実施の形態１のコントローラと同様の動作手順によってエラーの判別処理を行う。すなわち、システムプログラムの起動時に、システムプログラムによってシステムプログラム使用エリア情報Ｄ４をトレース情報記憶部１５のトレース情報１００に記憶しておく。そして、ユーザプログラムの実行時にはトレース回路４０によってデータのトレースを行い、この情報をＨ／Ｗトレース情報Ｄ７としてトレース情報記憶部１５のトレース情報１００に記憶する。また、システムプログラムのトレース機能によって関数コール履歴情報Ｄ３を取得し、トレース情報記憶部１５のトレース情報１００に記憶する。ユーザプログラムの実行において、エラーが発生すると、エラー発生アドレスＤ１、システムプログラム使用エリア情報Ｄ４、Ｈ／Ｗトレース情報Ｄ７、関数コール履歴情報Ｄ３に基づいてエラー要因の判別処理等を行い、エラー発生要因判別ファイル、トレースデータファイルとしてプログラム記憶部１６等に保存する。このトレース回路４０（ハードウェア）によるトレース処理によってＣＰＵ１１の負荷を減少させることが可能となり、制御装置としての性能の劣化を防止できる。
【００８１】
このように実施の形態２によれば、トレースの情報量が多いアクセスアドレス、アクセスデータ、プログラムカウンタをＨ／Ｗトレース情報Ｄ７としてトレース回路４０が取得するので、システムプログラム（ソフトウェア）によって収集するトレース情報を減少させることが可能となる。したがって、コントローラ１０によるプログラムの実行時にＣＰＵ１１にかかるトレース情報収集時の負荷を軽減させた状態で、トレースおよびエラー時の要因判別（高級言語プログラムの不具合発生箇所の特定）を効率的に行うことが可能となる。
【００８２】
実施の形態３．
図２、図４−２および図９−１〜図１１−２に従って実施の形態３に係るコントローラを説明する。実施の形態３においては、ＯＳとなるシステムプログラム（後述するメインＯＳ）が動作しなくなるエラーが発生した際に、エラー時でも動作可能なＯＳ（後述するサブＯＳ）に切替えて、エラー解析等を行う。
【００８３】
実施の形態３においては、図２に示した実施の形態１に係るコントローラ１０または図８に示した実施の形態２に係るコントローラ１０によってトレースやエラーの要因判別を行う。
【００８４】
コントローラ１０は、プログラム記憶部１６に、通常時にＯＳとして動作するシステムプログラム（以下、メインＯＳという）、エラー時にＯＳとして動作するシステムプログラム（以下、サブＯＳという）を記憶している。
【００８５】
メインＯＳはシステムプログラムの起動時にデータ格納部１４のワークＲＡＭに展開され、ワークＲＡＭの該当エリアとシステムメモリ/スタック確保エリア３６を使用して動作する。
【００８６】
図９−１は、実施の形態３に係るメインＯＳの機能ブロックの一例を示す図であり、図９−２は、実施の形態３に係るサブＯＳの機能ブロックの一例を示す図である。図９−１および図９−２の各構成要素のうち図３に示す実施の形態１のシステムプログラムと同一の機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
【００８７】
図９−１に示すように、メインＯＳは、記憶媒体Ｉ／Ｆ機能ブロック２０、スクリプト機能ブロック２１、エラー要因診断機能ブロック２２、サーバ機能ブロック２３、トレース機能ブロック２４、システムエリア記憶機能ブロック２５、外部機器Ｉ／Ｆ機能ブロック２７に加えてＯＳ切替機能ブロック２６を備えている。
【００８８】
ＯＳ切替機能ブロック２６は、メインＯＳが機能しなくなるようなエラーが発生した際に、エラー要因診断機能を安定して動作させるため、ＯＳをメインＯＳからサブＯＳに切替える機能ブロックである。
【００８９】
図９−２に示すように、サブＯＳは、記憶媒体Ｉ／Ｆ機能ブロック２０、エラー要因診断機能ブロック２２、サーバ機能ブロック２３、外部機器Ｉ／Ｆ機能ブロック２７を備えている。サブＯＳはエラー情報分析のためのＯＳであるので、トレース情報を収集する機能（トレース機能ブロック２４、システムエリア記憶機能ブロック２５）を備えていない。サブＯＳは、スクリプト機能ブロック２１、トレース機能ブロック２４、システムエリア記憶機能ブロック２５を備えていないため、システムプログラムが動作しなくなるエラーが発生した場合であっても、安定した状態でのエラー要因の判別を行なうことが可能となる。
【００９０】
つぎに、図４−２および図１０に従ってコントローラ１０の動作を説明する。図１０は、実施の形態３に係るコントローラの動作手順を示すフローチャートである。なお、図１０に示す動作手順のうち、図４−１に示す実施の形態１に係るコントローラの動作と同様の動作を行う動作処理については詳細な説明は省略する。
【００９１】
コントローラ１０を起動するとプログラム記憶部１６に格納しているメインＯＳをデータ格納部１４に展開する。また、ユーザプログラムを起動するとプログラム記憶部１６に格納しているメインＯＳをデータ格納部１４に展開する。
【００９２】
ＣＰＵ１１がシステムプログラム（メインＯＳ）を起動すると、ユーザプログラムが開始される前に、メインＯＳが使用しているデータ格納部１４のＲＡＭ領域に関する情報を、データ格納部１４から取得し、システムプログラム使用エリア情報Ｄ４へ格納する。
【００９３】
また、ＣＰＵ１１がユーザプログラムによる処理を開始すると、コントローラ１０が動作している間、Ｓ／Ｗトレース情報Ｄ２と関数コール履歴情報Ｄ３を収集してトレース情報１００としてトレース情報記憶部１５に格納する。
【００９４】
ＣＰＵ１１によってプログラム処理が実行されている時に、メインＯＳが機能しなくなるようなエラーが発生するとメインＯＳが完全に停止する前にエラーが発生したアドレスをエラー発生アドレスＤ１としてトレース情報記憶部１５のトレース情報１００に格納する。
【００９５】
ＯＳ切替機能によってメインＯＳからサブＯＳに切り替わった場合にも、このトレース情報１００を参照するため、エラー発生アドレスＤ１、Ｈ／Ｗトレース情報Ｄ２、関数コール履歴情報Ｄ３、システムプログラム使用エリア情報Ｄ４はそれぞれ固定の領域を使用して格納しておく。メインＯＳはエラーの発生後、メインＯＳが完全に停止する前にプログラム記憶部１６の後述するサブＯＳ起動信号３１をＯＮにし、ＯＳのリブートを実行する。
【００９６】
ここで、本実施の形態３に係るプログラム記憶部１６内の構成およびデータ格納部１４の構成について説明する。図１１−１は実施の形態３に係るプログラム記憶部のメモリマップを示す図であり、図１１−２は実施の形態３に係るデータ格納部のメモリマップを示す図である。図１１−１の各構成要素のうち図７−１に示す実施の形態１のプログラム記憶部のメモリマップと同一の機能をする構成要素については同一番号を付しており、重複する説明は省略する。また、図１１−２の各構成要素のうち図７−２に示す実施の形態１のデータ格納部のメモリマップと同一の機能をする構成要素については同一番号を付しており、重複する説明は省略する。
【００９７】
プログラム記憶部１６は、メインＯＳを格納するエリア（メインＯＳ格納エリア５８）、サブＯＳを格納するエリア（サブＯＳ格納エリア５９）、ユーザプログラム格納エリア３０、サブＯＳ起動信号を格納するエリア（サブＯＳ起動信号３１）、トレース実行フラグを格納するエリア（トレース実行フラグ３９）を含んで構成されている。
【００９８】
メインＯＳ格納エリア５８、サブＯＳ格納エリア５９、ユーザプログラム格納エリア３０は、標準ＲＯＭのエリア３７に記憶され、サブＯＳ起動信号３１、トレース実行フラグ３９は標準ＲＯＭ以外のエリアに記憶されている。
【００９９】
サブＯＳ起動信号３１は、メインＯＳからサブＯＳへの変更を行うか否かを決定する情報である。サブＯＳ起動信号３１がＯＮのとき、サブＯＳによってユーザプログラムの実行を行い、サブＯＳ起動信号３１がＯＦＦのとき、メインＯＳによってユーザプログラムの実行を行う。
【０１００】
図１１−２に示すように、データ格納部１４は、メインＯＳの実行に使用するデータを格納するエリアであるメインＯＳデータエリア５２、メインＯＳ格納エリア５３、ユーザプログラム使用エリア３４、サブＯＳの実行に使用するデータを格納するエリアであるサブＯＳデータエリア３５、システムメモリ／スタック確保エリア３６を含んで構成されている。
【０１０１】
メインＯＳデータエリア５２、メインＯＳ格納エリア５３、ユーザプログラムの使用エリア３４、サブＯＳデータエリア３５、システムメモリ／スタック確保エリア３６はデータ格納部１４のワークＲＡＭ３８のエリアに記憶されている。
【０１０２】
サブＯＳ起動信号３１がＯＮした状態でリブートされると、起動プログラムは前回のエラー状態を保持するためＲＡＭエリアを初期化せずに、プログラム記憶部１６の標準ＲＯＭ３７上のサブＯＳの先頭アドレスにジャンプする。
【０１０３】
ここでのサブＯＳはＲＯＭ常駐型で動作するプログラムの形式をとる。すなわち、サブＯＳは、サブＯＳの動作に必要となるデータのみをデータ格納部１４のＲＡＭ領域に確保し、サブＯＳのデータ以外の部分はプログラム記憶部１６を参照してプログラムを実行する。
【０１０４】
サブＯＳの実行時は、トレース実行フラグ３９がＯＦＦになり、トレース情報の収集が終了する（ステップＳ１００）。そして、サブＯＳはＯＳ起動後に実施の形態１で説明した処理を関数コールして、高級言語プログラムのエラー要因の判別を実施する。すなわち、イベントの発生がＲＡＭ領域のデータの破壊によるエラーに基づくものである場合、データ格納部１４のメインＯＳは不正なアクセスを行ったアドレスを格納したトレース情報記憶部１５内のエリアのエラー発生アドレスＤ１から値を取得しアドレスエラーが発生しているかを判別する（ステップＳ１１０）。
【０１０５】
サブＯＳが、アドレスエラーが発生していると判断した場合には、エラーアドレスの登録処理を行う（ステップＳ１２０）。エラーアドレスの登録処理は、図４−２に示した実施の形態１と同様の処理によって行なう。エラーアドレスの登録処理は、本実施の形態３においてはサブＯＳに基づいて行なう。これにより、アクセスアドレスの情報に関数情報を付加したもの（取得情報）がエラー要因（アドレスエラー）とともにトレース情報記憶部１５のエラー発生要因候補Ｄ６に登録される（ステップＳ３７０）。
【０１０６】
サブＯＳによってアドレスエラーが発生していないと判断された場合（ステップＳ１１０、Ｎｏ）、またはエラーアドレスの登録処理（ステップＳ１２０）が終了すると、エラー発生要因候補Ｄ６に記憶した全情報のアクセスアドレス、プログラムカウンタに対して、トレース情報のシステムプログラム使用エリア情報Ｄ４の範囲内であるかを判別する。そして、アクセスアドレスやプログラムカウンタが、システムプログラム使用エリア情報Ｄ４の範囲内である場合は、エラー発生要因がシステムプログラム（メインＯＳ）であると判断し、システムプログラム使用エリア情報Ｄ４の範囲外である場合は、エラー発生要因がユーザプログラムであると判断する。
【０１０７】
エラー発生原因の各項目に対するエラー発生要因がシステムプログラムか、ユーザプログラムであるかの情報は、各エラー発生要因候補Ｄ６に追加する（ステップＳ１８０）。プログラム記憶部（標準ＲＯＭ）１６または記憶媒体接続部１９に装着した記憶媒体（ＣＦカード等）に、エラー要因の候補としてリストアップされたエラー発生要因候補Ｄ６とトレース情報（Ｄ１〜Ｄ４）を、エラー発生要因候補Ｄ６を保存したファイルであるエラー発生要因判別ファイル、トレース情報を保存したファイルであるトレースデータファイルとして保存する（ステップＳ１９０）。
【０１０８】
このようにエラー発生時は、ユーザプログラムを登録するスクリプト機能ブロック２１を備えないサブＯＳによって、エラー要因の判別を行なっているため、ユーザプログラムの登録などシステムプログラムが予期しない外部要因を取り除いた状態の安定したコントローラ１０の動作を保証している。
【０１０９】
なお、本実施の形態３においては、メインＯＳが正常に動作できなくなるようなエラーを検出した際に、サブＯＳ起動信号をＯＮにしてリブートを実行することとしたが、
メインＯＳのリブート処理が実行される場合やシステムＷＤＴが発生した場合にサブＯＳ起動信号をＯＮにしてリブートを実行してもよい。
【０１１０】
メインＯＳがシステムＷＤＴを検出した場合は割込みベクタに登録されているプログラムからサブＯＳ起動信号をＯＮしてＯＳのリブートを実行する。また、サーバ機能、エラー要因診断機能について機能別にＷＤＴを設けておき、メインＯＳはこれらの機能の動作が正常であるかを監視するとともに、ＷＤＴが発生した場合にサブＯＳ起動信号をＯＮしてＯＳのリブートを実行するようにしてもよい。
【０１１１】
このように実施の形態３によれば、メインＯＳが機能しなくなるようなプログラムエラーが発生した場合であっても、安定した状態で動作可能なサブＯＳに切替えてプログラムの一時診断を行なうことが可能となる。
【産業上の利用可能性】
【０１１２】
以上のように、本発明にかかるコントローラは、高級言語プログラムのトレースに適している。
【図面の簡単な説明】
【０１１３】
【図１】実施の形態１に係るコントローラを備えたデバッグシステムのシステム構成図である。
【図２】実施の形態１に係るコントローラの構成を示すブロック図である。
【図３】実施の形態１に係るシステムプログラムの機能ブロックを示す図である。
【図４−１】コントローラの動作手順を示すフローチャートである。
【図４−２】エラーアドレスを登録する手順を示すフローチャートである。
【図５】トレース情報の構成を示す図である。
【図６−１】Ｓ／Ｗトレース情報を説明するための図である。
【図６−２】関数コール履歴情報を説明するための図である。
【図６−３】システムプログラム使用エリア情報を説明するための図である。
【図７−１】実施の形態１に係るプログラム記憶部のメモリマップを示す図である。
【図７−２】実施の形態１に係るデータ格納部のメモリマップを示す図である。
【図８】実施の形態２に係るコントローラの構成を示すブロック図である。
【図９−１】実施の形態３に係るメインＯＳの機能ブロックを示す図である。
【図９−２】実施の形態３に係るサブＯＳの機能ブロックを示す図である。
【図１０】実施の形態３に係るコントローラの動作手順を示すフローチャートである。
【図１１−１】実施の形態３に係るプログラム記憶部のメモリマップを示す図である。
【図１１−２】実施の形態３に係るデータ格納部のメモリマップを示す図である。
【符号の説明】
【０１１４】
１  ネットワーク機器
２  インターネット
３  生産システム
９  ＣＰＵバス
１０  コントローラ
１１  ＣＰＵ
１２  周辺機器接続部
１３  送受信部
１４  データ格納部
１５  トレース情報記憶部
１６  プログラム記憶部
１８  データ変換部
１９  記憶媒体接続部
２０  記憶媒体Ｉ／Ｆ機能ブロック
２１  スクリプト機能ブロック
２２  エラー要因診断機能ブロック
２３  サーバ機能ブロック
２４  トレース機能ブロック
２５  システムエリア記憶機能ブロック
２６  切替機能ブロック
２７  外部機器Ｉ／Ｆ機能ブロック
２８  システムプログラム格納エリア
３０  ユーザプログラム格納エリア
３１  サブＯＳ起動信号
３２  システムプログラムデータエリア
３３  システムプログラム格納エリア
３４  ユーザプログラム使用エリア
３５  サブＯＳデータエリア
３６  システムメモリ／スタック確保エリア
３７  標準ＲＯＭエリア
３８  ワークＲＡＭ
３９  トレース実行フラグ
４０  トレース回路
４１  電源
４２  ユニット
４５  ＰＬＣバス
５２  メインＯＳデータエリア
５３  メインＯＳ格納エリア
５８  メインＯＳ格納エリア
５９  サブＯＳ格納エリア
１００  トレース情報
【図１】
2005332030.tif 000003
【図２】
2005332030.tif 000004
【図３】
2005332030.tif 000005
【図４−１】
2005332030.tif 000006
【図４−２】
2005332030.tif 000007
【図５】
2005332030.tif 000008
【図６−１】
2005332030.tif 000009
【図６−２】
2005332030.tif 000010
【図６−３】
2005332030.tif 000011
【図７−１】
2005332030.tif 000012
【図７−２】
2005332030.tif 000013
【図８】
2005332030.tif 000014
【図９−１】
2005332030.tif 000015
【図９−２】
2005332030.tif 000016
【図１０】
2005332030.tif 000017
【図１１−１】
2005332030.tif 000018
【図１１−２】
2005332030.tif 000019