(57)【要約】【課題】複数のタスクレベルに跨るモジュール間の実行順序を監視することが可能なシーケンス監視自動プログラミング装置を提供する。【解決手段】ソースコード入力部1と、ソースコードから監視対象となるモジュールを検出する対象モジュール検出部2と、監視対象となるモジュールについて定義した情報を取得するためにシーケンス監視テーブルを参照して処理に必要な情報を取得する監視テーブル参照部3と、各モジュールの実行されるタスクレベルの情報に従って検出した監視対象となるモジュールに対して複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コードを生成する監視用コード生成部4と、生成した監視用コードを各モジュールのソースコードに挿入(編集)してソースコードを出力する監視用コード挿入・ソースコード出力部5と、ソースコードを実行する際に参照するシーケンス監視実装テーブルを出力する監視実装テーブル出力部6とを備える。【選択図】図１
2014154039.tif 000002
【特許請求の範囲】
【請求項１】
プログラムのソースコードを入力する手段と、
入力されたソースコードから監視対象となるモジュールを検出する手段と、
前記監視対象となるモジュールとその識別コード、タスクレベル、シーケンススタックの初期化の有無、及び、先行モジュール識別コードについて定義した情報を取得するためにシーケンス監視テーブルを参照する手段と、
参照した前記シーケンス監視テーブルにおける各モジュールの実行されるタスクレベルの情報に従って前記検出した監視対象となるモジュールに対して複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コードを生成する手段と、
生成した前記複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コードを各モジュールのソースコードに挿入して出力する手段と、
実行コード生成時の参照のためにシーケンス監視実装テーブルを出力する手段と、
を具備したことを特徴とするシーケンス監視自動プログラミング装置。
【請求項２】
プログラムのソースコードを入力する過程、
入力されたソースコードから監視対象となるモジュールを検出する過程、
前記監視対象となるモジュールとその識別コード、タスクレベル、シーケンススタックの初期化の有無、及び、先行モジュール識別コードについて定義した情報を取得するためにシーケンス監視テーブルを参照する過程、
参照した前記シーケンス監視テーブルにおける各モジュールの実行されるタスクレベルの情報に従って前記検出した監視対象となるモジュールに対して複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コードを生成する過程、
生成した前記複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コードを各モジュールのソースコードに挿入して出力する過程、および、
実行コード生成時の参照のためにシーケンス監視実装テーブルを出力する過程、
を含むことを特徴とするシーケンス監視自動プログラミング方法。
【請求項３】
シーケンス監視処理を定義したシーケンス監視テーブルを参照する手段を有する情報処理装置において監視用コードを挿入したソースコードを自動的に生成し出力するためのプログラムであって、
コンピュータに、
プログラムのソースコードを入力する機能、
入力されたソースコードから監視対象となるモジュールを検出する機能、
前記監視対象となるモジュールとその識別コード、タスクレベル、シーケンススタックの初期化の有無、及び、先行モジュール識別コードについて定義した情報を取得するためにシーケンス監視テーブルを参照する機能、
参照した前記シーケンス監視テーブルにおける各モジュールの実行されるタスクレベルの情報に従って前記検出した監視対象となるモジュールに対して複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コード監視用コードを生成する機能、
生成した前記監視用コードを各モジュールのソースコードに挿入して出力する機能、および、
実行コード生成時の参照のためにシーケンス監視実装テーブルを出力する機能、
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサを使用した組込機器におけるプログラム実行状態を監視するシーケンス監視自動プログラミング装置および自動プログラミング方法に関する。
【背景技術】
【０００２】
従来、組込機器のプログラム実行状態を監視する技術について幾つかの提案がなされているのを見受けるが、監視機能を実行プログラムに組み入れる技術に関しては、ほとんど、作業員が監視対象となる各モジュールのソースコードに個別に監視機能を組み入れるようにしているのが現状である。
【０００３】
また下記特許文献１では、記憶部から読み出したプログラムの関数が監視対象の関数である場合には、監視対象の関数に対して監視処理が施されるように当該プログラムに監視コードを挿入し、プログラム実行部が監視コードの挿入された関数を実行することでプログラムの実行状態を監視する技術を開示している。
【０００４】
こうした中で作業員が個別に監視機能を組み入れる従来技術にあっては、モジュール個別に作業員が監視機能を組み入れる必要があるため、以下に示すような課題があった。すなわち、
作業員による手作業のためプログラミング誤りが発生する可能性がある。また組み入れる記述内容がモジュール毎に異なるため、プログラミング誤りが発生する可能性がある。さらに簡単な実行シーケンスの場合は、組み入れる監視機能も簡素であるが、監視対象となるモジュールの数が多くなり、構成が複雑になると、組み入れる監視機能の誤り、抜けなどが発生する可能性が高くなる。その結果、必要とする監視シーケンスと実際に各モジュールに組み込まれている監視機能の整合が取れているかどうか確認する必要があり、モジュールの構成、監視シーケンスが複雑になるほど確認の漏れ、誤りが発生する可能性が高くなる。そのうえ監視内容が変更になった場合、各モジュール本体の修正も必要となり、作業員による作業量がさらに増大する。
【０００５】
また特許文献１に開示の従来技術では、記憶部から読み出したプログラムの関数が監視対象の関数である場合には、監視対象の関数に対して監視処理が施されるように当該プログラムに監視コードを挿入し、プログラム実行部が監視コードの挿入された関数を実行することでプログラムの実行状態を監視してプログラム実行時に監視用コードを埋め込む方式を提案しているものの、製品に複雑な処理機構を実装する必要があり、ＲＯＭベースで動作する簡素な組込機器製品には適用できない。
【０００６】
上記従来技術の課題を解決すべく下記特許文献２に記載のシーケンス監視自動プログラミング装置では、シーケンス監視の対象となるモジュール、その実行順序関係を記述したものから自動的に各モジュールのソースコードに監視機能を組み入れる機構を設けることを提案している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−２８７８６９号公報
【特許文献２】特開２０１１−１５９１１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし特許文献２に記載のシーケンス監視自動プログラミング装置では、シーケンス監視の対象となるモジュール、その実行順序関係を記述したものから自動的に各モジュールのソースコードに監視機能を組み入れる機構を設けているが、複数のタスクレベルに跨るモジュール間の実行順序の監視ができない、という課題があった。
【０００９】
そこで本発明は、上記の課題を解決するために、複数のタスクレベルに跨るモジュール間の実行順序を監視することが可能なシーケンス監視自動プログラミング装置および自動プログラミング方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために本発明のシーケンス監視自動プログラミング装置は、プログラムのソースコードを入力する手段と、入力されたソースコードから監視対象となるモジュールを検出する手段と、前記監視対象となるモジュールとその識別コード、タスクレベル、シーケンススタックの初期化の有無、及び、先行モジュール識別コードについて定義した情報を取得するためにシーケンス監視テーブルを参照する手段と、参照した前記シーケンス監視テーブルにおける各モジュールの実行されるタスクレベルの情報に従って前記検出した監視対象となるモジュールに対して複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コードを生成する手段と、生成した前記複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コードを各モジュールのソースコードに挿入して出力する手段と、実行コード生成時の参照のためにシーケンス監視実装テーブルを出力する手段と、を具備したことを特徴とする。
【００１１】
また本発明のシーケンス監視自動プログラミング方法は、プログラムのソースコードを入力する過程、入力されたソースコードから監視対象となるモジュールを検出する過程、
前記監視対象となるモジュールとその識別コード、タスクレベル、シーケンススタックの初期化の有無、及び、先行モジュール識別コードについて定義した情報を取得するためにシーケンス監視テーブルを参照する過程、参照した前記シーケンス監視テーブルにおける各モジュールの実行されるタスクレベルの情報に従って前記検出した監視対象となるモジュールに対して複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コードを生成する過程、生成した前記複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コードを各モジュールのソースコードに挿入して出力する過程、および、実行コード生成時の参照のためにシーケンス監視実装テーブルを出力する過程、を含むことを特徴とする
【発明の効果】
【００１２】
本発明によれば、監視対象となるモジュールの実行されるタスクレベルをシーケンス監視テーブルに定義し、それに基づいて複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コードを挿入したソースコードを自動的に出力することにより、複数のタスクレベルに跨るモジュール間の実行順序を監視する機能を誤りなく、少ない工数で実装することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態に係るシーケンス監視自動プログラミング装置の構成概要を示すブロック図である。
【図２】本発明の実施形態に係るシーケンス監視自動プログラミング装置の実施例を示す図である。
【図３】組込み機器における各モジュールの実行順番を示す図である。
【図４】本発明の実施形態に係るシーケンス監視自動プログラミング装置の実施例の処理フローを示す図である。
【図５】図４に示した初期化処理「initial」の内容を示す図である。
【図６】図４に示したシーケンス監視処理「check」の内容を示す図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について、詳細に説明する。
図１は、本発明の実施形態に係るシーケンス監視自動プログラミング装置の構成概要を示すブロック図である。図１において本発明の実施形態に係るシーケンス監視自動プログラミング装置(以下、自動プログラミング装置と略称する)は、プログラムのソースコードを入力するソースコード入力部１と、入力されたソースコードから監視対象となるモジュールを検出する対象モジュール検出部２と、監視対象となるモジュールとその識別コード、タスクレベル、シーケンススタックの初期化の有無、及び、先行モジュール識別コードについて定義した情報を取得するためにシーケンス監視テーブル(図２参照)を参照し、定義されている情報の中から処理に必要な情報を取得する監視テーブル参照部３と、参照した前記シーケンス監視テーブルにおける各モジュールの実行されるタスクレベルの情報に従って前記検出した監視対象となるモジュールに対して複数のタスクレベルに跨るモジュール間の実行順序を監視する監視用コードを生成する監視用コード生成部４と、生成した監視用コードを各モジュールのソースコードに挿入（編集）してソースコードを出力する監視用コード挿入・ソースコード出力部５と、出力されたソースコードを実行する際に参照するシーケンス監視実装テーブル(図２参照)を出力する監視実装テーブル出力部６とで構成されている。
【００１５】
上記した自動プログラミング装置の機能ブロックを実現するハードウェア構成は、当業者によく知られているパソコン（personal computer）レベルのコンピュータで構成されているもので、キーボード，マウス，ポインティングデバイス等を有する入力装置、処理結果を出力する装置の外、入力中又は処理中の内容を確認するためディプレイに表示することが可能な出力装置、メモリに記憶されたプログラムに従って処理を実行するための中央処理装置（ＣＰＵ（Central Processing Unit））、プログラム及びデータ等を記憶するためのメモリ（ＲＯＭ（read only memory），ＲＡＭ（random access memory），ＨＤＤ(Hard Disk Device)，ＵＳＢ(universal serial bus)メモリ等）、ＨＤＤ等の記憶媒体を駆動するための記録媒体駆動装置、および、入出力装置へのインタフェースや外部の各種装置とデータ授受を行うためのインターフェース（ＩＦ）、等を備えている。また上記コンピュータは、インターネット等のネットワークに接続する機能を備えていても良い。
【００１６】
上記においてソースコード入力部１は、上記コンピュータの入力装置の指示のもと、プログラムに基づいて処理を実行するＣＰＵおよびインターフェース（ＩＦ）を介して、外部のソースコードが記憶された記憶媒体にアクセスして該記憶媒体からソースコードをコンピュータ内のメモリに取り込むことで実現可能である。また、対象モジュール検出部２、監視テーブル参照部３、および、監視用コード生成部４は、上記コンピュータのＣＰＵが予め用意されたシーケンス監視テーブル(図２参照)を参照しながらプログラムに基づいて処理を実行し、処理結果をコンピュータ内のメモリに格納することで上記の各機能を実現可能である。なお詳細については後述する。また、監視用コード挿入・ソースコード出力部５および監視実装テーブル出力部６は、上記コンピュータのＣＰＵがメモリに格納された処理結果を出力装置に出力することで実現可能である。なお出力装置に出力する際には必要に応じてインターフェース（ＩＦ）を使用することができる。
【実施例】
【００１７】
図２は、本発明の実施形態に係るシーケンス監視自動プログラミング装置の実施例を示す図である。図２に示す実施例において、シーケンス監視自動プログラミング装置100は、まずソースコードが記述された入力ファイル200からモジュール別にソースコードが含まれた入力モジュール210〜250の内容を読み取る。
【００１８】
次にシーケンス監視自動プログラミング装置100は、シーケンス監視テーブル300を参照し、その内容に従い、読み取った入力モジュール210〜250に含まれるソースコードを編集し、各モジュール別にソースコードにシーケンス監視機能、例えばinitial処理、check処理などのソフトウェア処理機能、が挿入された出力モジュール410〜450を出力ファイル400として出力する。また、出力されシーケンス監視機能がソースコードに挿入された出力モジュール410〜450のソースコードから実行コードを生成する時に参照するためのシーケンス監視実装テーブル500を出力する。
【００１９】
以上でシーケンス監視自動プログラミング装置100の動作処理は終了するが、利用者（ユーザ）は、以降、出力ファイル400に出力されたソースコードを通常のソフトウェア開発と同様にソフトウェア開発環境においてコンパイル、ビルドを行うことにより実行コードを生成し、生成した実行コードをマイクロプロセッサ内蔵の組込み機器(図示せず)に実装することとなる。
【００２０】
なお、シーケンス監視テーブル300は、各モジュールについて、そのタスクレベル310、モジュール名称320、シーケンススタックの初期化の有無330、モジュールの識別コード340および先行モジュール識別コード350を保持する。このシーケンス監視テーブル300の作成方法については、一般的にはテキストファイルで作成するが、その作成方法、物理的なフォーマットは任意である。またシーケンス監視実装テーブル500は、シーケンス監視テーブル300と同様に、識別コード510、タスクレベル520及び先行モジュール識別コード530の各欄にデータが記述される。
【００２１】
また図２に示したシーケンス監視実装テーブル500は、図３に示すモジュールの実行状態を定義したものになる。図３は組込み機器(図示せず)における各モジュールの実行順番を示したものであり、module_A、module_Bおよびmodule_Cは、同一のタスクレベルｘの一つの実行サイクルの中でこの順番で実行されると正常なシーケンスの実行が行われたものとみなされる例を示したもので、このような実行状態が正常に行われているかを後述するシーケンス監視により自動的に監視する。
【００２２】
すなわち、module_Aは、タスクレベルｘにおける実行サイクルの中で最初に実行されるモジュールであり、その処理の中では監視用のシーケンススタック(図示せず)を初期化（図２のシーケンス監視テーブル300の初期化有無の欄330参照）することが必要であり、初期化後にシーケンススタックにmodule_Aを実施したことを示す識別子”A”を格納する。その内容をシーケンス監視テーブル300のmodule_Aの部分に記載する。識別子の”A”はここでは文字コードのAを示す。これは例であり、module_Aを一意に特定できるものであれば、任意の数値、他のコード系などを使用できる。
【００２３】
そしてmodule_Bは、module_Aの次に実行されるべきものであり、module_Bに挿入される監視機能としては、実行前にmodule_Aが実行されているかどうかを監視することになる。この内容がシーケンス監視テーブル300のmodule_Bの先行モジュール識別コード350に記載される。
【００２４】
またmodule_Cでは、実行前にmodule_A, Bおよびタスクレベルｙにおいて実行されるmodule_D, module_Eがこの順で実行されている必要があり、この内容がシーケンス監視テーブル300のmodule_Cの先行モジュール識別コード350に記載される。
【００２５】
またタスクレベルｙにおいて実行されるmodule_Dは、タスクレベルｙにおける実行サイクルの中で最初に実行されるモジュールであり、その処理の中では監視用のシーケンススタック(図示せず)を初期化（図２のシーケンス監視テーブル300の初期化有無の欄330参照）することが必要であり、初期化後にシーケンススタックにmodule_Dを実施したことを示す識別子”D”を格納する。その内容をシーケンス監視テーブル300のmodule_Dの部分に記載する。
【００２６】
またタスクレベルｙにおいて実行されるmodule_Eは、module_Dの次に実行されるべきものであり、module_Eに挿入される監視機能としては、実行前にmodule_Dが実行されているかどうかを監視することになる。この内容がシーケンス監視テーブル300のmodule_Eの先行モジュール識別コード350に同様に記載する。
【００２７】
図４は、本発明の実施形態に係るシーケンス監視自動プログラミング装置の実施例の処理フローを示す図である。図４において、最初に、まずシーケンス監視テーブル300を参照する環境を初期化する（ステップS41）。この後はシーケンス監視テーブル300を順に参照しながら処理を行うことができる。
【００２８】
次にシーケンス監視自動プログラミング装置100は、シーケンス監視テーブル300に記載のモジュール名が含まれたソースコードファイル200を検索する（ステップS42）。そして、シーケンス監視テーブル300の初期化有無330を参照し（ステップS43）、初期化ありであれば(ステップS43：Yes)、ソースコードに初期化の処理（call initial (引数)）を挿入する（ステップS44）。初期化の処理の名前はここでは例としてinitialとしてある。処理に渡す引数は、シーケンス監視テーブル300に記載の識別コード340とする。
【００２９】
一方、初期化ありでなければ(ステップS43：No)、ソースコードに監視の処理（call check (引数)）を挿入する（ステップS45）。監視の処理の名前はここでは例としてcheckとしてある。処理に渡す引数は、上記した初期化ありの場合と同様に、シーケンス監視テーブル300にある識別コード340とする。これらのいずれかの処理が終了した場合には、編集した、つまり監視機能が挿入された、ソースコードを出力する（ステップS46）。
【００３０】
これでシーケンス監視テーブル300に記載の一つのモジュールについての処理を終了するので、以下、この処理をシーケンス監視テーブル300に記載があるモジュール分だけ繰り返す（ステップS47）。繰り返しの処理を終了したら、シーケンス監視実装テーブル500を出力して（ステップS48）、シーケンス監視自動プログラミング装置100の処理を終了する。
【００３１】
これにより、シーケンス監視の順番や対象となるモジュールを、監視対象となるモジュールの実行されるタスクレベルをシーケンス監視テーブルに定義し、それに基づいて監視処理を挿入したソースコードを自動的に出力することにより、複数のタスクレベルに跨るモジュール間の実行順序を監視する機能を誤りなく、少ない工数で実装することができる。
【００３２】
図５は、図４に示したシーケンス監視の初期化処理（initial(“ ”)）の内容を示す図である。図５において、引数(ここでは識別コード)で示されたモジュールの該当するタスクレベルの監視用のシーケンススタック(図示せず)を初期化する（ステップS51）。しかる後、引数で渡された識別コード340をシーケンススタックに格納する（ステップS52）。こうしてシーケンス監視の初期化処理（initial (“ ”)）を終了する。
【００３３】
図６は、図４に示したシーケンス監視処理（check(“ ”)）の内容を示す図である。図６において、まず引数の識別コード510に対応するモジュールの先行モジュール識別コード530をシーケンス監視実装テーブル500から抽出する（ステップS61）。
【００３４】
次にシーケンススタック(図示せず)に格納されている識別コードがシーケンス監視実装テーブル500に記載されている先行モジュール識別コード530の内容と同じ順番に格納されているか確認する（ステップS62）。順番通りに格納されていれば(ステップS62：Yes)、シーケンスが正常であり、引数で渡された識別コード510を該当するタスクレベルのシーケンススタックに格納する（ステップS63）。
【００３５】
一方、順番通りに格納されていない場合は(ステップS62：No)、異常処理(サブルーチン)を呼び出す（ステップS64）。異常処理の内容は組込み機器固有に記述する内容が含まれており、それにしたがって異常処理(サブルーチン)が実行される。
【００３６】
異常処理の内容としては、一般的には、外部に異常発生を表示したり又は外部に警告を発する、さらに、異常が発生したことをしかるべき部署に通知する、或いは、処理を停止または処理を遷移する、などが適宜実施される。
【００３７】
本例の場合、異常処理(サブルーチン)が終了したら、通常の処理ルートに戻り、引数で渡された識別コードをシーケンススタックに格納する（ステップS63）。こうしてシーケンス監視処理（check (“ ”)）を終了する。
【００３８】
このように本発明の実施形態に係るシーケンス監視自動プログラミング装置は、監視対象となるモジュールの実行されるタスクレベルをシーケンス監視テーブルに定義し、それに基づいて監視処理を挿入したソースコードを自動的に出力することにより、複数のタスクレベルに跨るモジュール間の実行順序を監視する機能を誤りなく、少ない工数で実装することができる。
【符号の説明】
【００３９】
１  ソースコード入力部
２  対象モジュール検出部
３  監視テーブル参照部
４  監視用コード生成部
５  監視用コード挿入・ソースコード出力部
６  監視実装テーブル出力部
100  シーケンス監視自動プログラミング装置
200  入力ソースコードファイル
210  ソースコード内容1が含まれた入力モジュール
220  ソースコード内容2が含まれた入力モジュール
230  ソースコード内容3が含まれた入力モジュール
240  ソースコード内容4が含まれた入力モジュール
250  ソースコード内容5が含まれた入力モジュール
300  シーケンス監視テーブル
310  タスクレベル
320  モジュール名称
330  初期化有無
340  識別コード
350  先行モジュール識別コード
400  監視機能が挿入された出力ソースコードファイル
410  ソースコードに監視機能1が挿入された出力モジュール
420  ソースコードに監視機能2が挿入された出力モジュール
430  ソースコードに監視機能3が挿入された出力モジュール
440  ソースコードに監視機能4が挿入された出力モジュール
450  ソースコードに監視機能5が挿入された出力モジュール
500  シーケンス監視実装テーブル
510  識別コード
520  タスクレベル
530  先行モジュール識別コード
【図１】
2014154039.tif 000003
【図３】
2014154039.tif 000004
【図４】
2014154039.tif 000005
【図５】
2014154039.tif 000006
【図６】
2014154039.tif 000007
【図２】
2014154039.tif 000008