(57)【特許請求の範囲】
【請求項１】
同一構造を有する複数のカプセルプログラムの集合と、第１のコンピュータによる前記カプセルプログラムの実行を制御するための実行制御プログラムと、により構成され、且つ、前記第１のコンピュータにより実行されるコンピュータプログラムであって、
各前記カプセルプログラムは、
他の前記カプセルプログラムから取得可能である公開データが設定される公開データ領域手段として前記第１のコンピュータを機能させる公開データ部と、
他の前記カプセルプログラムにおける前記公開データ領域手段に設定された前記公開データを取得する公開データ取得手段として前記第１のコンピュータを機能させる公開データ取得部と、
前記公開データ取得手段により前記公開データを取得させて、当該公開データに対して予め定められた演算処理を実行するとともに、当該演算処理により得られた結果の少なくとも一部を前記公開データとして前記公開データ領域手段に設定する主処理手段として前記第１のコンピュータを機能させる主処理部と、
により構成される構造を有し、
前記複数のカプセルプログラムの実行単位は、繰り返し実行周期内における所定時間の経過ごとに対応して設定され、
前記各カプセルプログラムは、夫々に設定された実行周期に基づいて複数の前記実行単位のうち少なくとも一つに対して夫々割り当てられ、
前記実行制御プログラムは、前記所定時間が経過するごとに前記対応する実行単位に割り当てられた前記カプセルプログラムの前記主処理部を実行するとともに、その実行を繰り返し行う実行制御手段として前記第１のコンピュータを機能させるコンピュータプログラムを生成するプログラム生成装置に含まれる第２のコンピュータにより実行されるプログラム生成処理プログラムにおいて、
前記第２のコンピュータを、
前記カプセルプログラムごとに、そのプログラムコードを生成するカプセルコード生成手段、及び、
入力手段を介してユーザにより入力された、前記カプセルプログラムごとの前記実行周期を示す実行周期情報に基づいて、前記実行制御プログラムのプログラムコードを生成する実行制御コード生成手段、として機能させ、
前記カプセルコード生成手段としての前記第２のコンピュータを、
前記入力手段を介してユーザにより入力された、前記公開データ領域手段に設定される公開データの定義内容を示す定義情報に基づいて、当該公開データ部のプログラムコードを生成する定義コード生成手段、
他の前記カプセルプログラムにおいて定義された前記公開データのうち、前記入力手段を介してユーザにより選択された前記公開データを取得する前記公開データ取得部のプログラムコードを生成する取得コード生成手段、及び、
前記入力手段を介してユーザにより入力されたプログラムコードを含めて、前記主処理部のプログラムコードを生成する主処理コード生成手段、
として機能させることを特徴とするプログラム生成処理プログラム。
【請求項２】
請求項１に記載のプログラム生成処理プログラムにおいて、
前記各カプセルプログラムは、前記公開データ部と、前記公開データ取得部と、前記主処理部と、前記公開データに係る情報を含む、所定周期ごとにおける前記主処理手段による前記演算処理の状況を示す状況情報を、前記コンピュータプログラムの処理状況を表示する状況表示装置に送信する状況送信手段として前記第１のコンピュータを機能させる状況送信部と、により構成される構造を有し、
前記公開データを定義するプログラムコードの生成に用いられた前記定義情報に基づいて、当該公開データに係る情報を含む前記状況情報を前記状況表示装置に送信するための前記状況送信部のプログラムコードを生成する状況送信コード生成手段として、前記カプセルコード生成手段としての前記第２のコンピュータを更に機能させることを特徴とするプログラム生成処理プログラム。
【請求項３】
請求項２に記載のプログラム生成処理プログラムにおいて、
前記コンピュータプログラムは、前記複数のカプセルプログラムの集合と、前記実行制御プログラムと、少なくとも一の前記カプセルプログラムの選択を示す選択情報を取得し、当該選択された前記カプセルプログラムの前記状況送信部を実行する状況送信選択実行手段として前記第１のコンピュータを機能させる状況送信選択実行プログラムと、により構成され、
前記実行制御手段は、前記状況送信選択実行プログラムを前記所定周期ごとに実行し、
前記状況送信選択実行プログラムのプログラムコードを生成する状況送信選択実行コード生成手段として、前記第２のコンピュータを更に機能させることを特徴とするプログラム生成処理プログラム。
【請求項４】
請求項３に記載のプログラム生成処理プログラムにおいて、
前記状況送信手段としての前記第１のコンピュータを、
前記状況送信選択実行手段により実行させられたごとに前記状況情報を蓄積する状況蓄積手段、及び、
前記蓄積された前記状況情報を一括して前記状況表示装置に送信する状況一括送信手段、
として機能させることを特徴とするプログラム生成処理プログラム。
【請求項５】
請求項２乃至４の何れか１項に記載のプログラム生成処理プログラムにおいて、
前記選択された公開データに係る情報を含む前記状況情報を前記状況表示装置に送信するための前記状況送信部のプログラムコードを生成するように前記状況送信コード生成手段としての前記第２のコンピュータを機能させることを特徴とするプログラム生成処理プログラム。
【請求項６】
同一構造を有する複数のカプセルプログラムの集合と、第１のコンピュータによる前記カプセルプログラムの実行を制御するための実行制御プログラムと、により構成され、且つ、前記第１のコンピュータにより実行されるコンピュータプログラムであって、
各前記カプセルプログラムは、
他の前記カプセルプログラムから取得可能である公開データが設定される公開データ領域手段として前記第１のコンピュータを機能させる公開データ部と、
他の前記カプセルプログラムにおける前記公開データ領域手段に設定された前記公開データを取得する公開データ取得手段として前記第１のコンピュータを機能させる公開データ取得部と、
前記公開データ取得手段により前記公開データを取得させて、当該公開データに対して予め定められた演算処理を実行するとともに、当該演算処理により得られた結果の少なくとも一部を前記公開データとして前記公開データ領域手段に設定する主処理手段として前記第１のコンピュータを機能させる主処理部と、
により構成される構造を有し、
前記複数のカプセルプログラムの実行単位は、繰り返し実行周期内における所定時間の経過ごとに対応して設定され、
前記各カプセルプログラムは、夫々に設定された実行周期に基づいて複数の前記実行単位のうち少なくとも一つに対して夫々割り当てられ、
前記実行制御プログラムは、前記所定時間が経過するごとに前記対応する実行単位に割り当てられた前記カプセルプログラムの前記主処理部を実行するとともに、その実行を繰り返し行う実行制御手段として前記第１のコンピュータを機能させるコンピュータプログラムを生成するプログラム生成装置におけるプログラムコード生成方法において、
前記カプセルプログラムごとに、そのプログラムコードを前記プログラム生成装置のカプセルコード生成手段が生成するカプセルコード生成工程と、
入力手段を介してユーザにより入力された、前記カプセルプログラムごとの前記実行周期を示す実行周期情報に基づいて、前記実行制御プログラムのプログラムコードを前記プログラム生成装置の実行制御コード生成手段が生成する実行制御コード生成工程と、を備え、
前記カプセルコード生成工程は、
前記入力手段を介してユーザにより入力された、前記公開データ領域手段に設定される公開データの定義内容を示す定義情報に基づいて、当該公開データ部のプログラムコードを前記プログラム生成装置の定義コード生成手段が生成する定義コード生成工程と、
他の前記カプセルプログラムにおいて定義された前記公開データのうち、前記入力手段を介してユーザにより選択された前記公開データを取得する前記公開データ取得部のプログラムコードを前記プログラム生成装置の取得コード生成手段が生成する取得コード生成工程と、
前記入力手段を介してユーザにより入力されたプログラムコードを含めて、前記主処理部のプログラムコードを前記プログラム生成装置の主処理コード生成手段が生成する主処理コード生成工程と、
を備えることを特徴とするプログラムコード生成方法。
【請求項７】
請求項１乃至５の何れか１項に記載のプログラム生成処理プログラムを実行するプログラム生成装置であって、
前記カプセルコード生成手段、及び、前記実行制御コード生成手段を備えることを特徴とするプログラム生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラム、プログラム実行装置、プログラム生成処理プログラム、状況表示処理プログラム等の技術分野に関する。
【背景技術】
【０００２】
装置特有の機能を実現するために、装置に組み込まれて、その制御を行うコンピュータシステムは、組み込みシステムと呼ばれている。組み込みシステムは、例えば、ＣＰＵと各種周辺機能が集積されたマイクロコントローラ（ＭＣＵ（Micro Controller Unit））と、このマイクロコントローラに搭載される組み込み型ソフトウエアと呼ばれるコンピュータプログラム（以下、適宜プログラム、ソフトウエアとも称する。）により構成されている。
【０００３】
電子制御装置やパワーエレクトロニクス装置のマイクロコントローラに搭載された装置専用のソフトウエアは、組み込み型ソフトウエアの中でも、高い信頼性が要求される分野である。
【０００４】
近年、マイクロコントローラの機能性能が高くなってきているため、制御系やパワーエレクトロニクス系の装置の制御を組み込み型ソフトウエアで行うことが多くなった。つまり、マイクロコントローラに搭載されるＣＰＵ（Central Process Unit）はもとより、その周辺機能であるＡ／Ｄ（Analog/Digital）コンバータやＰＷＭ（Pulse Width Modulation）ジェネレータ、シリアル通信、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）等が集積化、高性能化し、しかも、低価格が進んでいるため、従来ハードウエアで実現してきた高速な応答も可能となり、マイクロコントローラに置き換えられるようになってきているのである。
【０００５】
そして、温暖化対策のための省エネ機器が増え始めており、パワーデバイスやシステムの制御に特化したソフトウエアの開発ツールが求められている。本発明は、特に、制御系やパワーエレクトロニクス系のソフトウエアの信頼性を高めるためのソフトウエアの単位であるカプセルプログラムの集合により構成されるコンピュータプログラム及びその開発方法等に関するものである。
【０００６】
組み込みシステムは、例えば、パワーエレクトロニクス装置のように高度の信頼性、リアルタイム性が要求されるものが多く、更に、近年においては、組み込み型システムに要求される機能が複雑・高度化していることも相まって、そのオペレーティングシステムとしてＲＴＯＳ（Real Time Operating System）を採用するケースが増加している。
【０００７】
ＲＴＯＳとは、複数の処理要求（イベントあるいは割込み）が発生した場合でも、課せられた時間制約を満たすように処理を完了させるための機構が備わったマルチタスクＯＳである。
【０００８】
ＲＴＯＳ環境下におけるコンピュータプログラムは、実行処理単位としてのタスクが、タスク毎に設定された優先順位に基づいて、複数並列的に実行される。そして、各タスクは、タスク間同期（例えば、イベントフラグ、セマフォ等）やタスク間通信（例えば、メッセージキュー、メールボックス等）等の機能を用いて情報交換する等、他のタスクと協働することにより全体としての機能を実現するのである。
【０００９】
また、組み込み型ソフトウエアにおけるソースプログラムの作成は、エディタプログラム等をコンピュータに実行させ、ユーザがソースファイルを編集する方法が従来から行われているが、近年においては、プログラム作成の効率化、手入力による誤り防止等を目的として、自動生成したソースプログラムの雛形にユーザが新たなプログラムコードを追加することによりソースプログラムを作成する方法が提案されている。
【００１０】
例えば、特許文献１には、ＵＭＬ（Unified Modeling Language）表記に従って記述された設計モデルから、クラス定義情報ファイルと、ユーザがプログラムコードの追加編集等を行うヘッダファイル及びソースファイルの雛形とを生成する方法が記載されている。
【００１１】
そして、組み込みシステムにおけるデバッグは、例えば、特許文献２に記載されたデバッグシステムのように、ＩＣＥ（In-Circuit Emulator）を介して、ターゲットとなる装置にホストコンピュータを接続し、ホストコンピュータから、ブレークポイントの設定、変数の監視登録等のデバッグ用コマンドを入力し、プログラムの実行を停止させて、変数の内容等を表示させるという方法が基本的に採られている。
【特許文献１】
特開２００３−２１６４２８号公報
【特許文献２】
特開２００３−３０００３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
エネルギーに関する制御のソフトウエアは、非常に高い信頼性が必要である。ソフトウエアのバグは、エネルギーの流れを止めるか、あるいは、エネルギーを制御できなくなる。その結果、エネルギー変換を行っている素子にエネルギーの集中や素子の定格を超えるエネルギーの流入が発生し、深刻な故障を引き起こす。
【００１３】
ソフトウエアのバグは、装置の故障、全体のシステムの故障をもたらすのである。一方、地球温暖化へ向けて、省エネ機器の開発が世界中で進められている。制御系やパワーエレクトロニクス系のソフトウエアの設計量が増大し、しかも、多様化している。
【００１４】
このように、制御系やパワーエレクトロニクス系の組み込み型ソフトウエアは、社会のニーズがますます高くなっている。それに応えるためには、制御系やパワーエレクトロニクス系のソフトウエアの技術者を育成する必要があるし、技術者同士が、互いに理解可能なソフトウエアである必要がある。また、経営者としては、技術者によって作成されたソフトウエアが、会社の資産となるように、別の技術者に容易に引き継がれる形態として管理し、技術資産として会社の力としたい。
【００１５】
そのためには、この分野に特に適した組み込み型ソフトウエア及びその開発ツールが、ぜひとも必要である。
【００１６】
しかしながら、同時並列的に複数のタスクが動作し、且つイベントも複数発生するようなＲＴＯＳ環境における従来のコンピュータプログラムの構造では、その全ての組み合わせについて矛盾なく設計し、また、検証することは非常に困難である。
【００１７】
また、タスク間における情報交換の態様により、最適なＲＴＯＳの機能（例えば、イベントフラグ、セマフォ、メッセージキュー等）を利用することはできるものの、情報交換の態様に応じて異なる機能を利用すると、タスクごとに異なる構造を持たせることとなり、設計ミスが生じ易く、保守性も悪くなる。
【００１８】
しかも、タスク間同期やタスク間通信等による情報交換では、他のタスクが共有資源を解放するまで処理を中断し、または他のタスクに対して処理を要求し、あるいは他のタスクから情報が送信されてくるまで待機するというように、タスク同士が互いの処理に依存し合うことにより、全体として複雑な関係を有する構造となり、設計ミスが生じやすく、また、何らかの問題が生じた場合に、その原因がどのタスクにあるのかを追跡することが困難となる。
［００１９］
また、エディタプログラムによるソースプログラムの作成では、自由にプログラミングすることが可能であるため、構造のばらばらなソースプログラムが作成されてしまい、他のユーザが作成したソースプログラムを理解することが困難となる。また、このように作成されたソースプログラムからは、タスクごとに異なる構造を有するプログラムが作成されてしまう可能性が高い。
［００２０］
一方で、特許文献１に記載の技術のように、ソースプログラムをある程度自動生成することでプログラミングの手間を省くことはできるが、作成されるプログラムの信頼性を考慮したものとはなっておらず、また、変数の定義や情報交換等のプログラミングはユーザの自由である。
［００２１］
また、特許文献２に記載されているように、ＩＣＥ等を用いるデバッグにより、変数の内容を表示させるためにプログラムの実行を途中で停止させると、表示された変数の内容が、刻々と変化する装置の状態とずれてしまい、変数の内容を表示させる意義が失われてしまう場合があり、更に、プログラムの制御なしに装置が動作することにより、装置が故障する可能性がある。
【００２２】
本発明は、以上の点に鑑みてなされたものであり、より信頼性の高いコンピュータプログラムを開発することができるプログラム生成処理プログラム、プログラムコード生成方法及びプログラム生成装置を提供することを目的とする。
【００２３】
上記課題を解決するために、本発明の一つの観点では、同一構造を有する複数のカプセルプログラムの集合と、第１のコンピュータによる前記カプセルプログラムの実行を制御するための実行制御プログラムと、により構成され、且つ、前記第１のコンピュータにより実行されるコンピュータプログラムであって、各前記カプセルプログラムは、他の前記カプセルプログラムから取得可能である公開データが設定される公開データ領域手段として前記第１のコンピュータを機能させる公開データ部と、他の前記カプセルプログラムにおける前記公開データ領域手段に設定された前記公開データを取得する公開データ取得手段として前記第１のコンピュータを機能させる公開データ取得部と、前記公開データ取得手段により前記公開データを取得させて、当該公開データに対して予め定められた演算処理を実行するとともに、当該演算処理により得られた結果の少なくとも一部を前記公開データとして前記公開データ領域手段に設定する主処理手段として前記第１のコンピュータを機能させる主処理部と、により構成される構造を有し、前記複数のカプセルプログラムの実行単位は、繰り返し実行周期内における所定時間の経過ごとに対応して設定され、前記各カプセルプログラムは、夫々に設定された実行周期に基づいて複数の前記実行単位のうち少なくとも一つに対して夫々割り当てられ、前記実行制御プログラムは、前記所定時間が経過するごとに前記対応する実行単位に割り当てられた前記カプセルプログラムの前記主処理部を実行するとともに、その実行を繰り返し行う実行制御手段として前記第１のコンピュータを機能させるコンピュータプログラムを生成するプログラム生成装置に含まれる第２のコンピュータにより実行されるプログラム生成処理プログラムにおいて、前記第２のコンピュータを、前記カプセルプログラムごとに、そのプログラムコードを生成するカプセルコード生成手段、及び、入力手段を介してユーザにより入力された、前記カプセルプログラムごとの前記実行周期を示す実行周期情報に基づいて、前記実行制御プログラムのプログラムコードを生成する実行制御コード生成手段、として機能させ、前記カプセルコード生成手段としての前記第２のコンピュータを、前記入力手段を介してユーザにより入力された、前記公開データ領域手段に設定される公開データの定義内容を示す定義情報に基づいて、当該公開データ部のプログラムコードを生成する定義コード生成手段、他の前記カプセルプログラムにおいて定義された前記公開データのうち、前記入力手段を介してユーザにより選択された前記公開データを取得する前記公開データ取得部のプログラムコードを生成する取得コード生成手段、及び、前記入力手段を介してユーザにより入力されたプログラムコードを含めて、前記主処理部のプログラムコードを生成する主処理コード生成手段、として機能させることを特徴とする。
【００２４】
よって、この発明に係るプログラム生成処理プログラムを第２のコンピュータにより読み出し実行することによって生成されたコンピュータプログラムによれば、カプセルプログラムが、公開データによるデータの公開と、公開データ取得手段によるデータの取得という規則を有し、この規則に基づいて主処理手段が演算処理を実行するため、データの安全性が確保される。
【００２５】
しかも、各カプセルプログラムは、他のカプセルプログラムの処理に依存することなく、公開されているデータを自ら取得して演算処理を行い、その結果の少なくとも一部を公開するという、単純化された同一構造を有しているので、設計上のミスが生じ難くなり、コンピュータプログラムとしての信頼性が向上する。
そして、この発明に係るプログラム生成処理プログラムを第２のコンピュータにより読み出し実行することにより、コンピュータを公開データ領域手段、公開データ取得手段、主処理手段としてコンピュータを機能させるための同一構造を有するカプセルプログラムを容易に作成することができるとともに、これにより、異なる構造のプログラムを作成しようとするユーザのインセンティブが働かなくなるため、信頼性の高いコンピュータプログラムを作成することが可能となる。
【００２６】
また、前記各カプセルプログラムは、前記公開データ部と、前記公開データ取得部と、前記主処理部と、前記公開データに係る情報を含む、所定周期ごとにおける前記主処理手段による前記演算処理の状況を示す状況情報を、前記コンピュータプログラムの処理状況を表示する状況表示装置に送信する状況送信手段として前記第１のコンピュータを機能させる状況送信部と、により構成される構造を有し、前記公開データを定義するプログラムコードの生成に用いられた前記定義情報に基づいて、当該公開データに係る情報を含む前記状況情報を前記状況表示装置に送信するための前記状況送信部のプログラムコードを生成する状況送信コード生成手段として、前記カプセルコード生成手段としての前記第２のコンピュータを更に機能させることを特徴とする。
【００２７】
よって、この発明に係るプログラム生成処理プログラムを第２のコンピュータにより読み出し実行することによって生成されたコンピュータプログラムによれば、主処理手段による演算処理の状況を、コンピュータプログラムの実行を停止させることなく外部からリアルタイムに監視することが可能となるデバッグのための機能を各カプセルプログラム自身が予め有しているので、特に組み込みシステムにおけるコンピュータプログラムのデバッグが容易となり、コンピュータプログラムとしての信頼性が更に向上する。
そして、この発明に係るプログラム生成処理プログラムを第２のコンピュータにより読み出し実行することにより、コンピュータを公開データ領域手段、公開データ取得手段、主処理手段としてコンピュータを機能させるためのプログラムコードを容易に作成することができるとともに、公開データに係る情報を含む、主処理手段による演算処理の状況を示す状況情報を、コンピュータプログラムの処理状況を表示する状況表示装置に送信する状況送信手段としてコンピュータを機能させるためのプログラムコードが自動的に生成されるので、人手によりデバッグ用のプログラムコードをカプセルプログラムごとに作成するという手間を大幅に削減することが可能となる。
【００２８】
また、前記コンピュータプログラムは、前記複数のカプセルプログラムの集合と、前記実行制御プログラムと、少なくとも一の前記カプセルプログラムの選択を示す選択情報を取得し、当該選択された前記カプセルプログラムの前記状況送信部を実行する状況送信選択実行手段として前記第１のコンピュータを機能させる状況送信選択実行プログラムと、により構成され、前記実行制御手段は、前記状況送信選択実行プログラムを前記所定周期ごとに実行し、前記状況送信選択実行プログラムのプログラムコードを生成する状況送信選択実行コード生成手段として、前記第２のコンピュータを更に機能させることを特徴とする。
【００２９】
よって、この発明に係るプログラム生成処理プログラムを第２のコンピュータにより読み出し実行することによって生成されたコンピュータプログラムを第１のコンピュータが読み出し実行することにより、主処理手段による演算処理の状況を示す状況情報を状況表示装置に送信させるカプセルプログラムを外部から選択することが可能となるので、所望のカプセルプログラムに特化したデバッグが可能となる。
【００３０】
また、前記状況送信手段としての前記第１のコンピュータを、前記状況送信選択実行手段により実行させられたごとに前記状況情報を蓄積する状況蓄積手段、及び、前記蓄積された前記状況情報を一括して前記状況表示装置に送信する状況一括送信手段、として機能させることを特徴とする。
【００３１】
よって、この発明に係るプログラム生成処理プログラムを第２のコンピュータにより読み出し実行することによって生成されたコンピュータプログラムを第１のコンピュータが読み出し実行することにより、主処理手段による演算処理の状況を示す状況情報を一旦蓄積しておき、後に一括して状況表示装置に送信することで送信回数を減らすので、所定周期ごとに逐一提供した場合に時間制約を満たすことができないシビアなシステムにおいても、主処理手段による演算処理の状況を、コンピュータプログラムの実行を停止させることなく外部からリアルタイムに監視することが可能となる。
【００４１】
また、前記選択された公開データに係る情報を含む前記状況情報を前記状況表示装置に送信するための前記状況送信部のプログラムコードを生成するように前記状況送信コード生成手段としての前記第２のコンピュータを機能させることを特徴とする。
よって、カプセルプログラムで定義された公開データのみでなく、他のカプセルプログラムから取得された公開データに関する情報も外部から監視することが可能となるカプセルプログラムを作成することができるので、人手によりデバッグ用のプログラムコードを作成するという手間を更に削減することが可能となる。
【００４４】
上記課題を解決するために、本発明の更に他の観点では、同一構造を有する複数のカプセルプログラムの集合と、第１のコンピュータによる前記カプセルプログラムの実行を制御するための実行制御プログラムと、により構成され、且つ、前記第１のコンピュータにより実行されるコンピュータプログラムであって、各前記カプセルプログラムは、他の前記カプセルプログラムから取得可能である公開データが設定される公開データ領域手段として前記第１のコンピュータを機能させる公開データ部と、他の前記カプセルプログラムにおける前記公開データ領域手段に設定された前記公開データを取得する公開データ取得手段として前記第１のコンピュータを機能させる公開データ取得部と、前記公開データ取得手段により前記公開データを取得させて、当該公開データに対して予め定められた演算処理を実行するとともに、当該演算処理により得られた結果の少なくとも一部を前記公開データとして前記公開データ領域手段に設定する主処理手段として前記第１のコンピュータを機能させる主処理部と、により構成される構造を有し、前記複数のカプセルプログラムの実行単位は、繰り返し実行周期内における所定時間の経過ごとに対応して設定され、前記各カプセルプログラムは、夫々に設定された実行周期に基づいて複数の前記実行単位のうち少なくとも一つに対して夫々割り当てられ、前記実行制御プログラムは、前記所定時間が経過するごとに前記対応する実行単位に割り当てられた前記カプセルプログラムの前記主処理部を実行するとともに、その実行を繰り返し行う実行制御手段として前記第１のコンピュータを機能させるコンピュータプログラムを生成するプログラム生成装置におけるプログラムコード生成方法において、前記カプセルプログラムごとに、そのプログラムコードを前記プログラム生成装置のカプセルコード生成手段が生成するカプセルコード生成工程と、入力手段を介してユーザにより入力された、前記カプセルプログラムごとの前記実行周期を示す実行周期情報に基づいて、前記実行制御プログラムのプログラムコードを前記プログラム生成装置の実行制御コード生成手段が生成する実行制御コード生成工程と、を備え、前記カプセルコード生成工程は、前記入力手段を介してユーザにより入力された、前記公開データ領域手段に設定される公開データの定義内容を示す定義情報に基づいて、当該公開データ部のプログラムコードを前記プログラム生成装置の定義コード生成手段が生成する定義コード生成工程と、他の前記カプセルプログラムにおいて定義された前記公開データのうち、前記入力手段を介してユーザにより選択された前記公開データを取得する前記公開データ取得部のプログラムコードを前記プログラム生成装置の取得コード生成手段が生成する取得コード生成工程と、前記入力手段を介してユーザにより入力されたプログラムコードを含めて、前記主処理部のプログラムコードを前記プログラム生成装置の主処理コード生成手段が生成する主処理コード生成工程と、を備えることを特徴とする。
【００４５】
上記課題を解決するために、本発明の更に他の観点では、前記プログラム生成処理プログラムを実行するプログラム生成装置であって、前記カプセルコード生成手段、及び、前記実行制御コード生成手段を備えることを特徴とする。
【００５４】
本発明によれば、カプセルプログラムが、公開データによるデータの公開と、公開データ取得手段によるデータの取得という規則を有し、この規則に基づいて主処理手段が演算処理を実行するため、データの安全性が確保される。
【００５５】
しかも、各カプセルプログラムは、他のカプセルプログラムの処理に依存することなく、公開されているデータを自ら取得して演算処理を行い、その結果の少なくとも一部を公開するという、単純化された同一構造を有しているので、設計上のミスが生じ難くなり、コンピュータプログラムとしての信頼性が向上する。
【００５６】
よって、本発明により、制御系やパワーエレクトロニクス系のソフトウエアの開発は、教育段階から製品開発そして、メンテナンスに至る、あらゆるフェイズで大きく改善される。ソフトウエアの信頼性や品質の向上については、例えば、後述するＡＣＭ（Analyzer Communication Method）等による状況提供手段と、例えば、後述するカプセルアナライザ等の状況表示処理プログラムにより効果を挙げることができる。ソフトウエアの生産性の向上やコード規則の継承、また、ソフトウエア完成後のメンテナンスや技術の引継ぎ、新しい技術者の育成は、例えば、後述するカプセルジェネレータ等のプログラム生成処理プログラムにより効果を挙げることができる。
【図面の簡単な説明】
【００５７】
【図１】コンピュータプログラムＰの概要構成の一例を示す図である。
【図２】スケルトンカプセル１０の構造の一例を示す図である。
【図３】ＴＳＵ２において、カプセル１が呼び出される様子の一例を示す図である。
【図４】本実施形態における開発システムＳの概要構成の一例を示す図である。
【図５】カプセルジェネレータのメイン画面１００の一例を示す図である。
【図６】ビジュアルコントローラウインドウ１０７の一例を示す図である。
【図７】アナライザ画面１８０の一例を示す図である。
【図８】スコープウインドウ１９０の一例を示す図である。
【図９】本実施形態において、ターゲットボードＢを用いた開発の様子の一例を示す図である。
【図１０】本実施形態において、シミュレータを用いた開発の様子の一例を示す図である。
【図１１】新規カプセル作成ボックス１０２における操作手順を説明する図である。
【図１２】スケルトンカプセルのヘッダファイル及びソースファイルの一例を示す図であり、（ａ）はヘッダファイル、（ｂ）はソースファイルである。
【図１３】データ公開用変数設定ウインドウ１２０の一例を示す図である。
【図１４】生成されたＡＣＭ１４のプログラムコードの一例を示す図である。
【図１５】（ａ）は、データ獲得用変数設定ウインドウ１３０の一例を示す図であり、図（ｂ）は、その変形例である。
【図１６】内部変数設定ウインドウ１４０の一例を示す図である。
【図１７】メソッド関数定義ウインドウ１５０の一例を示す図である。
【図１８】ＴＳＵ組み込み設定ウインドウ１６０の一例を示す図である。
【図１９】ＴＳＵ２のソースファイルの一例を示す図である。
【図２０】カプセル１の組織化の様子を表示した一例を示す図である。
【図２１】デバッグ時におけるマイクロコントローラＭの処理の一例を示すフローチャートである。
【図２２】デバッグ時におけるマイクロコントローラＭ及び開発用端末Ｔの処理の一例を示すフローチャートである。
【図２３】本実施例に係る開発システムＳ１の概要構成の一例を示すブロック図である。
【図２４】本実施例に係るリレー制御プログラムＰ１のカプセル構成の一例を示す図である。
【図２５】各カプセルの公開データをグラフ表示させた結果の一例を示す図であり、（ａ）は出力電圧値であり、（ｂ）はノイズ除去された出力電圧値であり、（ｃ）は整流電圧値であり、（ｄ）は実効電圧値であり、（ｅ）はアラーム値である。
【符号の説明】
【００５８】
１、１Ａ、１Ｂ、１Ｘ、１Ｙ、１Ｚ、１ａ、１ｂ、１ｃ、１ｄ、１ｅ、１ｆ、１ｇ、１ｈ  カプセル
２  ＴＳＵ
３  ＡＣＣ
４  燃料電池
５  系統
１０  スケルトンカプセル
１１  データ公開部
１２  データ獲得メソッド
１３  メインメソッド
１４  ＡＣＭ
２１  制御部
２２  記憶部
２３  通信部
２４  表示部
２５  操作部
３１  コンバータ
３２  インバータ
３３  アイソレーションアンプ
３４  レベルシフタ
３５  駆動回路
３６  系統リレー
４１  ＣＰＵ
４２  ＲＡＭ
４３  フラッシュＲＯＭ
４４  Ｉ／Ｏポート
４５  Ａ／Ｄコンバータ
４６  通信回路
Ｐ  コンピュータプログラム
Ｓ、Ｓ１  開発システム
Ｂ  ターゲットボード
Ｍ、Ｍ１  マイクロコントローラ
Ｔ  開発用端末
Ｋ  シリアル通信ケーブル
Ｉ  系統連係インバータ
【発明を実施するための最良の形態】
【００５９】
以下、図面を参照して本発明の最良の実施形態について詳細に説明する。なお、以下に説明する実施の形態は、開発用のプログラム言語としてＣ＋＋を用いた組み込み型のコンピュータプログラムの開発システムに対して本発明を適用した場合の実施形態である。
【００６０】
［１．コンピュータプログラムＰの基本構成］
先ず、本実施形態に係るコンピュータプログラムＰの基本構成について説明する。
【００６１】
コンピュータプログラムＰは、後述するプログラム生成処理プログラムとしてのカプセルジェネレータで作成されるプログラムである。
【００６２】
図１は、コンピュータプログラムＰの概要構成の一例を示す図である。
【００６３】
図１に示すように、コンピュータプログラムＰは、複数のカプセルプログラム（以下、単にカプセルと称する。）１と、コンピュータを実行制御手段として機能させるためのＴＳＵ（Time  Sharing Unit）２と、コンピュータを状況提供選択実行手段として機能させるためのＡＣＣ（Analyzer Communication Capsule）３と、により構成されている。
【００６４】
カプセル１は、ターゲットとなる装置に要求された特有の機能を実現するためのコードを有するプログラムであり、実行制御を司るＴＳＵ２により呼び出される。
【００６５】
また、ＡＣＣ３は、カプセル１における演算処理の状況を外部から監視することを可能とするために、後述するカプセルアナライザとカプセル１のＡＣＭとのインタフェースとなる特別なカプセルである。
【００６６】
［１．１  カプセル１の構成及び機能等］
単純な構造を有するプログラムの単位をカプセルと呼び、各カプセル１は同一構造を有している。
【００６７】
各カプセル１は、その機能としては夫々異なるものとすることができるが、その構造は基本的には全て同一であり、そのために用意されるのがスケルトンカプセル１０である。
【００６８】
図２は、スケルトンカプセル１０の構造の一例を示す図である。
【００６９】
図２に示すように、スケルトンカプセル１０の構造は、夫々コンピュータを、公開データ領域手段として機能させるためのデータ公開部１１と、公開データ取得手段として機能させるためのデータ獲得メソッド１２と、主処理手段として機能させるためのメインメソッド１３と、状況提供手段として機能させるためのＡＣＭ（Analyzer Communication Method）１４と、を有する。
【００７０】
スケルトンカプセル１０は、基本的にオブジェクト指向におけるクラスの概念によりカプセル化され、カプセル１の雛形のプログラムコードを有するソースファイル（例えば、処理命令が記述される：拡張子.cc）及びヘッダファイル（例えば、クラス定義、外部参照宣言等が記述される：拡張子.h）として用意される。
【００７１】
カプセル１の作成は、スケルトンカプセル１０をもとに、後述するカプセルジェネレータによりユーザがカスタマイズすることで行われる。
【００７２】
従って、このスケルトンカプセル１０を読み込んで新しいカプセル１が生成されるため、カプセル１も、データ公開部１１、獲得メソッド１２、メインメソッド１３及びＡＣＭ１４という構造を有する。
【００７３】
なお、全てのカプセル１の基礎となるスケルトンカプセル１０は、予め検査が完了しており、信頼性が保障されていることが望ましい。
【００７４】
［１．１．１  データ公開部１１］
データ公開部１１は、他のカプセル１から取得可能である公開データが設定される領域であって、後述するメインメソッドによる演算処理により得られた結果が設定される。
【００７５】
この領域は、コンピュータプログラムＰの実行時において、ＲＡＭ等のメモリ上に確保される。
【００７６】
カプセル１で演算処理した結果は、他のカプセル１が使用するために公開されるのであり、その結果を公開データとして他のカプセルに公開するため、カプセルジェネレータの機能により、そのデータが広域変数（パブリック変数）として宣言される。なお、公開データが設定される変数を、公開変数と呼ぶ。
【００７７】
公開データ以外の他のデータは、カプセルジェネレータの機能により、他のカプセル１から隠蔽されることとなる。これにより、公開データ以外のデータの安全性が確保される。
【００７８】
［１．１．２  データ獲得メソッド１２］
データ獲得メソッド１２は、現在実行しているカプセル１が、どのカプセル１の情報（公開データ）を参照しているのかを明確にするために用意された仕組みであり、後述するメインメソッド１３から関数呼び出しにより呼び出され、他のカプセル１で公開されているデータの獲得収集を行う関数である（つまり、他のカプセル１のデータ公開部１１に設定された公開データの取得処理を行う）。
【００７９】
具体的には、カプセル１の内部変数である引継変数に、他のカプセル１の公開データを設定する処理を行う。このようにして、他のカプセル１の公開データを直接操作しないようにしているため、公開データの安全性が確保される。
【００８０】
これにより、データ獲得メソッド１２は、コンピュータを、他の前記カプセル１における公開データ領域に設定された公開データを取得する公開データ取得手段として機能させるのである。
【００８１】
また、データ獲得メソッド１２は、カプセルジェネレータの機能により、プライベート関数として宣言されることで、他のカプセル１から隠蔽される。
【００８２】
［１．１．３  メインメソッド１３］
メインメソッド１３は、ＴＳＵ２またはＲＴＯＳがカプセル１を実行するとき、呼び出される関数である。ＴＳＵ２またはＲＴＯＳに、予めメインメソッドを組み込んでおく。カプセルの実行とは、メインメソッド１３を呼び出すこと同じである。
【００８３】
また、メインメソッド１３は、カプセル１ごとに要求された機能を実現するために、コンピュータを、データ獲得メソッド１２により取得された公開データに対して予め定められた演算処理（演算処理には、加減乗除算等の計算処理の他、変数から変数への代入等の設定処理も含まれる。）を実行するとともに、その演算処理により得られた結果の少なくとも一部を公開データとしてデータ公開部１１に設定する主処理手段として機能させるための関数である。
【００８４】
ＴＳＵ２またはＲＴＯＳ（ＲＴＯＳ環境下でコンピュータプログラムＰを動作させる場合）は、カプセル１を実行する際に、このメインメソッド１３を起動する。
【００８５】
なお、メインメソッド１３から、関数呼び出で直接または間接的に呼び出される同一カプセル１内の関数（つまり、同一クラスのメンバ関数等）もメインメソッド１３とともにコンピュータを主処理手段として機能させるものである。
【００８６】
［１．１．４  ＡＣＭ１４］
ＡＣＭ１４は、外部からのアクセスを行うことを可能とし、カプセル１を動作させならが検証するための仕組みであり、広域関数（パブリック関数）として宣言され、カプセル内部の変数とカプセルアナライザとの情報交換をするためのメソッドである。
【００８７】
ＡＣＭ１４は、カプセル１の変数の内容を後述する外部のカプセルアナライザにより観測できる機能を有し、カプセルアナライザと通信し、カプセル１の変数の状態等をリアルタイムにカプセルアナライザへ転送する。これにより、ユーザは、カプセルアナライザに表示された内容を確認し、追跡して、不具合箇所を修正することができる。
【００８８】
具体的にＡＣＭ１４は、変数基本情報表示用メソッド及び変数値一覧表示用メソッド、グラフ表示用メソッドにより構成されている。
【００８９】
変数基本情報表示用メソッドは、カプセルアナライザにおいて、選択されたカプセル１の有するデータの基本的情報として変数名とコメントを表示させるために、これらの情報を転送するメソッドである。
【００９０】
上記変数基本情報表示用メソッドにより、カプセルアナライザ側でカプセル１の変数に関する情報を持っていなくても、カプセル１の変数の情報を表示することが可能となるのである。
【００９１】
変数値一覧表示用メソッドは、ＡＣＣ３から関数呼び出しで所定周期ごと（例えば、１０ｍ秒）に実行され、その呼び出しごとにおける公開変数、引継ぎ変数、その他内部変数等のデータの内容（これらは、メインメソッド１３における演算処理の状況を示す途中経過または結果等である。）をカプセルアナライザへ転送するメソッドである。転送されたデータの内容は、カプセルアナライザにより変数値の一覧として表示される。
【００９２】
これにより、ＡＣＭ１４は、コンピュータを、所定周期ごとにおけるメインメソッド１３における演算処理の状況を提供する状況提供手段として機能させるのである。なお、変数値一覧表示用メソッドの呼び出し周期は、カプセル１の呼び出し周期より長い周期にしても良い。それは、カプセル１の呼び出し周期が、例えば、１００μ秒である場合に、変数値を１００μ秒周期で転送し、カプセルアナライザにより表示させても、人間の視力が追いつかないからである。
【００９３】
グラフ表示用メソッドは、カプセル１が呼び出されるたびにデータの内容を記憶する機能があり、この内容をカプセルアナライザへ転送し、カプセルスコープによってグラフ化することができる。ユーザは、グラフ化したデータを解析して、カプセル１の演算ミスや異常の発生をいち早く知ることができる。
【００９４】
グラフ表示においては、上記変数値の一覧表示とは異なり、データの内容の変化等を詳細に把握するためには、カプセル１の呼び出しごとにおけるデータ内容をグラフに反映することが望ましいが、カプセル１の呼出し周期と同じ周期でデータの内容をカプセルアナライザへ転送していたのでは、この転送処理によりメインメソッド１３の処理が圧迫され、リアルタイム処理が実現できない場合がある。そこで、グラフ表示用メソッドでは、呼び出されるたびにデータの内容を蓄積しておき、例えば、５００回の呼び出しにつき１回の割合で、蓄積されたデータを一括してカプセルアナライザへ転送することによりＡＣＭ１４によるＣＰＵ占有率を下げるのである。
【００９５】
これにより、ＡＣＭ１４は、コンピュータを、ＡＣＣ３において実行させられた所定周期ごとのメインメソッド１３における演算処理の状況（データの内容）を蓄積する蓄積手段及び当該蓄積された演算処理の状況を一括して提供する状況一括提供手段として機能させるのである。なお、リアルタイム処理が確保できるのであれば、データの内容を蓄積せず、逐一カプセルアナライザへ転送するようにしても良い。
【００９６】
カプセルジェネレータにおいて、ユーザが、カプセルの変数を登録するとＡＣＭ１４のメソッド内に、変数の存在（変数名、コメント、変数値等）をカプセルアナライザへ転送するためのコードが生成される。このような変数登録時のＡＣＭコード生成機能により、デバック用のコードの設計を削減することができる。
【００９７】
なお、デバッグが完了した後は、カプセルの構成からＡＣＭ１４を除いても良い。
【００９８】
［１．２  ＴＳＵ２］
【００９９】
ＴＳＵ２は、ＲＴＯＳにおけるタスクの実行制御を司る部分に相当するプログラムであり、カプセル１のメインメソッド１３を組み込んで、一定時間間隔（例えば、１００μ秒）で呼び出す仕組みを提供している。つまり、カプセル１ごとに予め定められた周期で、各カプセル１のメインメソッド１３による演算処理を順次繰り返して実行させるのである。
【０１００】
図３は、ＴＳＵ２において、カプセル１が呼び出される様子の一例を示す図である。
【０１０１】
図３に示すタイムスロットとは、繰り返し呼び出し周期の単位であり、例えば、１μ秒に設定されている。
【０１０２】
ＴＳＵ２においては、タイムスロット０でカプセル１Ａ、１Ｂ及び１Ｘが順次呼び出され、次のタイムスロット１でカプセル１Ａ、１Ｂ及び１Ｙが順次呼び出される。そして、タイムスロット２で、カプセル１Ａ、１Ｂ及び１Ｚが順次呼び出される。その後、タイムスロット３〜９までの間は、カプセル１Ａ及び１Ｂのみが呼び出される。
【０１０３】
このようにして、タイムスロット１からタイムスロット１０までの呼び出しが繰り返されることにより、カプセル１Ａ及び１Ｂは、例えば、１００μ秒周期で呼び出され、カプセル１Ｘ、１Ｙ及び１Ｚは、例えば、１ｍ秒周期で呼び出される。
【０１０４】
カプセル１を呼び出す周期は、例えば、カプセル１ごとの処理の緊急性、時間的制約等の条件からユーザが選択することができる。
【０１０５】
ＲＴＯＳが、予め設定された優先順位に基づきタスクを切り替えながら並列的に実行する（つまり、あるタスクの演算処理の実行途中で他のタスクに実行制御が切り替わる）のに対し、ＴＳＵ２は、ラウンドロビン方式で、各メインメソッド１３をシーケンシャルに実行する（つまり、あるメインメソッド１３の演算処理が終了するまでは他のメインメソッド１３の演算処理は実行されない）ことにより、複数のメインメソッド１３が並列的に実行される。
【０１０６】
このように、ＲＴＯＳに比べて、極めて単純化された実行規則でカプセル１を実行させることにより、コンピュータによる並列的な処理が行われるので、設計、検証等が容易となる。
【０１０７】
ここで、ＴＳＵ２に組み込まれる各カプセル１により適切なリアルタイム処理を行うためには、周期ごとにおけるカプセル１の実行時間の合計が、その周期内に収まるように各カプセル１を設計すべきである。
【０１０８】
例えば、図３の周期１においては、カプセル１Ａ、１Ｂ及び１Ｘの実行時間の合計が１００μ秒以下となるようにする。
【０１０９】
ＴＳＵ２は、また、所定周期で（例えば、１μ秒）、ＡＣＣ３を関数呼び出しで実行させる。これにより、後述するＡＣＣ３によるＡＣＭ１４の選択実行処理を通じて、ＡＣＭ１４によりカプセル１のデータをリアルタイムにカプセルアナライザへ転送する。
【０１１０】
なお、カプセル１は、基本的には、ＴＳＵ２に組み込み、一定時間間隔で常時動作することを前提としているが、これに限られるものではなく、ＲＴＯＳに組み込んでも良い。この場合のコンピュータプログラムＰは、複数のカプセル１と、ＲＴＯＳのカーネルと、ＡＣＣ３により構成され、カーネルから各カプセル１のメインメソッド１３が起動されることとなる。
【０１１１】
［１．３  ＡＣＣ３］
ＡＣＣ３は、カプセルアナライザとＡＣＭ１４とのインタフェースとなる特別なカプセルである。
【０１１２】
ＡＣＣ３は、カプセルアナライザとの通信を確立すると、先ず、コンピュータプログラムＰが有する全カプセルのカプセル名、識別番号等をカプセルアナライザへ転送する。これにより、カプセルアナライザを通じて、ユーザが、監視したいカプセル１を選択することができる。
【０１１３】
そして、カプセルアナライザからカプセル１の選択要求を示す識別番号（本発明に係る選択情報の一例）を受信すると、ＡＣＣ３は、識別番号が示すカプセル１のＡＣＭ１４を呼び出すセレクタとして動作することで、ＡＣＭ１４によりカプセル１の変数の情報（変数名、コメント、変数値等）をカプセルアナライザへ伝えることが可能となる。
【０１１４】
これにより、ＡＣＣ３は、コンピュータを、少なくとも一のカプセル１の選択を示す識別番号を取得し、当該選択されたカプセルにおけるＡＣＭ１４による処理を所定周期ごとに実行させる状況提供選択実行手段として機能させるのである。
【０１１５】
上記のような構造を有するカプセル１は、データ公開部１１とデータ獲得メソッド１２とを有することにより、情報交換の規則を持っている。すなわち、各カプセル１は他のカプセル１が有するデータの内、公開データのみを取得可能であり、かつ、公開データは、他のカプセルからは取得するのみで変更されることはないので、データの安全性が確保されるとともに各カプセル１の独立性も確保されることとなり、全体としての信頼性が向上する。
【０１１６】
そして、コンピュータプログラムＰにおいては、各カプセル１が、ＴＳＵ２からラウンドロビン方式でシーケンシャルに呼び出されることにより、他のカプセル１において公開されたデータをデータ獲得メソッド１２により自ら取得し、それを基にメインメソッド１３で演算処理を行い、その演算処理により得られた結果を必要に応じて公開データとして他のカプセルから取得可能なデータ公開部１１に設定するようにコンピュータが実行することで、各カプセル１は自律的に動作する。
【０１１７】
このようにして、カプセル１同士が情報交換しながら独立して並列的に動作することにより、各カプセル１の演算処理が相互に作用しあい、このカプセル１の集合により構成されたコンピュータプログラムＰとしての機能が実現されるのである。
【０１１８】
従って、例えば、あるカプセル１から、タスク間通信等により他のカプセル１を起動することにより、その処理結果を得るような（つまり、カプセル１の処理が、他のカプセル１の処理に直接依存するような）プログラミングをする必要は基本的にはない。
【０１１９】
なお、カプセル１を構成する際においては、公開データを取得する側のカプセル１が、データ獲得メソッド１２で直接公開データを引継変数に設定するのではなく、公開データを定義する側のカプセル１において、公開データの内容を提供するサービス関数を用意して、取得する側のカプセル１のデータ獲得メソッド１２において、そのサービス関数を呼び出すようにしても良い。このように構成した場合は、公開データもプライベート変数として宣言することが可能となる。
【０１２０】
［２．開発システムＳの構成］
次に、本実施形態における開発システムＳの構成及び機能について説明する。
【０１２１】
図４は、本実施形態における開発システムＳの概要構成の一例を示す図である。
【０１２２】
図４に示すように、開発システムＳは、プログラム実行装置としてのターゲットボードＢと、プログラム生成装置及び状況表示装置としての開発用端末Ｔとが、シリアル通信用ケーブルＫに接続されて構成されている。
【０１２３】
ターゲットボードＢと、開発用端末Ｔとは、シリアル通信用ケーブルＫを介して、シリアル通信（例えば、RS-232C（Recommended Standard 232C）、Ethernet（登録商標）等）にて相互にデータの送受信が可能である
【０１２４】
［２．１  ターゲットボードＢの構成］
ターゲットボードＢは、コンピュータプログラムＰを実装し、コンピュータプログラムＰを実行するコンピュータとしてのマイクロコントローラＭと、シリアル通信用ケーブルＫを接続するシリアル通信用コネクタ等を搭載している。
【０１２５】
マイクロコントローラＭは、ＣＰＵ、データ等を一時的に記憶するＲＡＭ、各種プログラム（例えば、ＲＴＯＳ、コンピュータプログラムＰ等）等を記憶するフラッシュＲＯＭ、通信コネクタに接続されたシリアル通信用ケーブルＫを介して開発用端末Ｔとの通信状態を制御する通信回路（例えば、RS-232Cコントローラ、Ethernet（登録商標）コントローラ等）、外部から供給されたアナログ信号をデジタル信号に変換するＡ／Ｄコンバータ、ターゲットボードＢ上の周辺回路を制御するための入出力ポート等により構成されている。
【０１２６】
マイクロコントローラＭは、ＣＰＵが、ＲＯＭに記憶された各種プログラムを読み出し実行することにより、ターゲットボードＢを統括制御するとともに、本実施形態に係るプログラム実行装置として機能するようになっている。
【０１２７】
［２．２  開発用端末Ｔの構成］
開発用端末Ｔは、コンピュータプログラムＰを生成するとともに、ターゲットボードＢに組み込まれたコンピュータプログラムＰをデバッグするための端末であり、例えば、パーソナルコンピュータ、ワークステーション等が適用可能である。
【０１２８】
開発用端末Ｔは、ＣＰＵ、ＲＡＭ、ＲＯＭ等を備える制御部２１と、各種プログラム（例えば、オペレーティングシステム、カプセルワークス（カプセルジェネレータ、カプセルアナライザ、カプセルスコープ）、コンパイラ等）及びデータ（例えば、カプセル１のソースファイル、スケルトンカプセル１０のソースファイル等）等を記憶する記憶部２２（例えば、ハードディスク、不揮発性メモリ等）と、シリアル通信用ケーブルＫを介してターゲットボードＢとの通信状態を制御する通信部２３（例えば、RS-232C（Recommended Standard 232C）コントローラ、Ethernet（登録商標）コントローラ等）と、文字や画像等の情報を表示する表示部２４（例えば、ディスプレイ等）と、ユーザからの操作指示を受け付ける操作情報入力手段としての操作部２５（例えば、キーボード、マウス等）とを備え、バス２８を介して相互に接続されている。
【０１２９】
制御部２１は、ＣＰＵが、ＲＯＭまたは記憶部に記憶された各種プログラムを読み出し実行することにより、開発用端末Ｔを統括制御するとともに、本実施形態に係る定義コード生成手段、取得コード生成手段、主処理コード生成手段、状況提供コード生成手段、実行制御コード生成手段、状況提供指示手段、状況表示手段等として機能するようになっている。
【０１３０】
［２．３  カプセルワークス］
【０１３１】
カプセルワークスは、開発用端末Ｔにより実行されることによりコンピュータプログラムＰを開発するためのソフトウエアであり、プログラム生成用プログラムとしてのカプセルジェネレータと、状況表示用プログラムとしてのカプセルアナライザ及びカプセルスコープと、により構成されている。
【０１３２】
［２．３．１  カプセルジェネレータ］
カプセルジェネレータは、信頼性、品質の高いカプセル１を生成するために専用に設計されたソフトウエア開発ツールである。
【０１３３】
カプセルジェネレータは、技術者をナビゲートする機能やコードの生成の機能を備えており、特に、検証用のＡＣＭのコードの自動生成機能を有している。
【０１３４】
制御系やパワーエレクトロニクス系のソフトウエアを実現することは、必要となるカプセル１を作成し、カプセル１を集めて組織化を行い、カプセル１とカプセル１とが情報交換しながら、装置に特化した仕事を、リアルタイムマルチタスクで行うことである。ソフトウエアの生産性、ソフトウエアのコードの理解、技術者の育成は、単純な構造のスケルトンカプセル１０とカプセルジェネレータから生成する多くのカプセル１により大きく改善されるのである。
【０１３５】
図５は、カプセルジェネレータのメイン画面１００の一例を示す図であり、図６は、ビジュアルコントローラウインドウ１０７の一例を示す図である。
【０１３６】
カプセルジェネレータが起動されると、図４に示すようなメイン画面１００が表示部２４に表示される。
【０１３７】
メイン画面１００は、メニューバー１０１と、新規カプセル作成ボックス１０２と、変数設定ボックス１０３と、新規メソッド追加ボックス１０４と、選択されているカプセル１のヘッダファイル（拡張子が.h）の内容を表示するヘッダ表示エリア１０５と、選択されているカプセル１のメソッドのソースファイル（拡張子が.cpp）の内容を表示し、そのプログラムコードをユーザが編集するためのソース編集エリア１０６と、カプセル１のイメージ画像を利用して、カプセル１の編集操作をするためのビジュアルコントローラウインドウ１０７等により構成されている。
【０１３８】
メニューバー１０１をユーザが操作することにより、例えば、カプセルの保存、読み込み、カプセルのＴＳＵ２への組み込み、カプセルのプロジェクトの追加、コンパイル等が開発用端末Ｔの制御部２１により実行される。
【０１３９】
カプセルを開発するために最初に行うことは、検証されたスケルトンカプセル１０を読み込むことであり、新規カプセル作成ボックス１０２において、ユーザが、新しいカプセル名を入力すると、スケルトンカプセル１０のソースファイル及びヘッダファイルから、入力されたカプセル名を有するカプセル１のソースファイル及びヘッダファイルが、制御部２１により生成される（これを、新しいカプセルの誕生ともいう。）。
【０１４０】
その後、ユーザがプログラムコードを入力することで、制御部２１により、生成されたソースファイルのメインメソッド１３内にプログラムコードが追加さる。
【０１４１】
また、変数設定ボックス１０３において、ユーザがいずれかのボタンを選択すると、夫々のボタンに対応してデータ公開用変数設定ウインドウ、データ獲得用変数設定ウインドウまたは内部変数設定ウインドウのいずれかが表示され、そこで、ユーザが定義情報（例えば、変数名、変数の型、コメント、初期値等）や指定情報（例えば、カプセル名、変数名等）等を入力すると、公開データ定義用のプログラムコード、公開データ取得用のプログラムコード、内部データ定義用のプログラムコード等が制御部２１により生成されるとともに、夫々のデータ用にＡＣＭ１４のプログラムコードが生成される。
【０１４２】
また、新規メソッド追加ボックス１０４において、ユーザによりボタンが選択されると、メソッド関数定義メニューが表示され、そこで、ユーザが関数名、関数の型等を入力すると、ソースファイル及びヘッダファイルに新しい関数用のプログラムコードが制御部２１により追加される。
【０１４３】
その後、ユーザがプログラムコードを入力することで、制御部２１により、ソースファイルの新規メソッド内にプログラムコードが追加される。
【０１４４】
また、図６に示すように、ビジュアルコントローラウインドウ１０７には、データ公開ボタン１４１、データ獲得メソッドボタン１４２、メインメソッドボタン１４３、ＡＣＭボタン１４４等が設けられており、カプセルジェネレータの操作性を向上させるために、カプセル１のイメージ画像を利用して、カプセル１の編集操作ができる。
【０１４５】
例えば、データ公開ボタン１４１を選択すると、データ公開用変数設定ウインドウが表示される。また、データ獲得ボタン１４２を選択するとデータ獲得用変数設定ウインドウが表示される。また、メインメソッドボタン１４３を選択するとソース編集エリア１０６にソースファイルのメインメソッド１３のプログラムコードが表示される。
【０１４６】
［２．３．２  カプセルアナライザ及びカプセルスコープ］
カプセルアナライザは、ＡＣＭ１４を通じて、カプセル１の内容を表示することで、変数の状態を監視し、リアルタイムデバッグを実現するツールである。図７は、アナライザ画面１８０の一例を示す図である。
【０１４７】
カプセルアナライザが起動されると、図７に示すようなアナライザ画面１８０が表示部２４に表示される。
【０１４８】
アナライザ画面１８０には、メニューバー１８１、複数のカプセル選択ボタン１８２、カプセル情報表示エリア１８３及び複数のグラフ選択ラジオボタン１８４等が設けられている。
【０１４９】
また、カプセルアナライザが起動すると、ＡＣＣ３とアクセスを開始する。ＡＣＣ３は、登録されているカプセル名カプセルアナライザへ転送する。
【０１５０】
そして、カプセル選択ボタン１８２には、ターゲットボードＢのマイクロコントローラＭに記憶されているコンピュータプログラムＰのカプセル１の名称が表示される。
【０１５１】
カプセルアナライザから、いずれかのカプセル選択ボタン１８２をユーザが選択することにより、所望のカプセル１を選択することができる。そのとき、カプセルアナライザからＡＣＣ３へ、選択されたカプセル１の情報として識別番号が転送される。
【０１５２】
ＡＣＣ３は、識別番号から獲得したカプセル名から、該当するカプセル１のＡＣＭ１４を呼び出す。ＡＣＭ１４が選択されると、カプセルアナライザのカプセル情報表示エリア１８３には、変数名やコメントが表示されて、デバックがしやすい環境が整う。
【０１５３】
変数に関する情報（変数名やコメントの文字等）は、ＡＣＭ１４自身が持っていることが、開発システムＳの大きな特徴となっている。
【０１５４】
カプセル情報表示エリア１８３に表示されている変数の値を最新の情報に更新するために、カプセルアナライザとＡＣＭ１４は、一定時間の間隔で情報交換を行う。これにより、変数の値をリアルタイムに表示することができる。
【０１５５】
このようにして、カプセルアナライザは、開発用端末Ｔの制御部２１を、所定周期ごとにターゲットボードＢにより提供された演算処理の状況を順次表示する状況提供手段として機能させるのである。
【０１５６】
グラフ選択ラジオボタン１８４は、データ内容を、カプセルスコープにおいてグラフ表示させる変数を選択するためのボタンである。
【０１５７】
カプセルスコープは、カプセル１が呼び出されるたびに変化する変数を、グラフで確認することができるビジュアルなツールである。カプセル１が呼び出されるたびに、ＡＣＭ１４により、変数を内部のメモリに一次時記憶しておき、カプセルアナライザへ転送する。そして、カプセルアナライザへ転送されたデータは、カプセルスコープによりグラフ表示される。
【０１５８】
図８は、スコープウインドウ１９０の一例を示す図である。
【０１５９】
カプセルアナライザの画面のグラフ選択ラジオボタン１８４から任意のボタンを、ＣＨ１、ＣＨ２、ＣＨ３夫々について選択することにより、グラフ表示させる変数の値を３つ選択することができる。そして、メニューバー１８１のツールメニューからカプセルスコープサブメニューを選択すると、図８（ａ）に示すようなスコープウインドウ１９０が表示される。
【０１６０】
スコープウインドウ１９０においては、横軸をコンテンツ呼び出し回数（ＡＣＭ１４が呼び出された回数）、縦軸には各呼び出し時における変数の値として、選択された変数（この例では３変数分）の値がグラフ表示エリア１９１にグラフ表示される。
【０１６１】
図８（ａ）においては、変数ごとに別々にグラフ表示しているが、図８（ｂ）に示すように、複数のグラフを合成して表示することも可能である。
【０１６２】
なお、カプセルジェネレータ、カプセルアナライザ、カプセルスコープ等の各種プログラムは、例えば、ネットワークを介してサーバからダウンロードされるようにしても良いし、ＣＤ−ＲＯＭ等の記録媒体に記録されてドライブを介して読み込まれるようにしても良い。
【０１６３】
［３．コンピュータプログラムＰの開発方法］
次に、コンピュータプログラムＰの開発方法の概要を説明する。図９は、本実施形態において、ターゲットボードＢを用いた開発の様子の一例を示す図である。
【０１６４】
図９に示すように、先ず、カプセルジェネレータにより、スケルトンカプセル１０（スケルトンカプセル１０のヘッダファイル、ソースファイル）を読み込む。カプセル名を設定して、新規カプセルとする。そうすると、カプセル１のヘッダファイル、ソースファイルが新たに生成される。
【０１６５】
次いで、カプセルジェネレータで、変数（公開データの変数、データ獲得メソッド１２で公開データを引き継ぐ変数、カプセル内部で使用される変数等）の登録を行う。これにより、カプセル１のソースファイルに各変数用のプログラムコードが自動生成される。その際に、ＡＣＭ１４に、変数転送用のプログラムコードも自動生成される。
【０１６６】
また、メインメソッドや新規メソッドを選択し、カプセル１のソースファイルに目的となるプログラムコードを書き加える。
【０１６７】
そして、カプセルジェネレータの組み込みコマンドを選択すると、ＴＳＵまたはＯＳへ組み込みを行うことができる。
【０１６８】
その後、一般的には、コンパイラのプロジェクトメニューにより、カプセル１を登録し、コンパイルを行う。これにより、コンピュータプログラムＰが生成される。
【０１６９】
コンパイラで生成された実行ファイル（コンピュータプログラムＰ）は、書き込みツールを用いて、ターゲットボートＢへ書き込む。これにより、ターゲットボードＢは動作が可能となる。
【０１７０】
開発用端末ＴとターゲットボードＢとをシリアル通信ケーブルＫで接続する。カプセルアナライザ及びコンピュータプログラムＰの双方を起動すると、カプセルアナライザの画面には、カプセル選択ボタンと該当するカプセルの変数名が表示される。これで、デバック作業を開始することができる。
【０１７１】
次に、コンピュータプログラムＰをシミュレーションにより開発する様子の一例を説明する。図１０は、本実施形態において、シミュレータを用いた場合の開発方法の概要構成の一例を示す図である。
【０１７２】
シミュレーションとは、コンピュータプログラムＰを、マイクロコントローラＭに実装する代わりに、既知のコンパイラで、仮想的な周辺装置を摸擬するプログラムを作成し、あたかも、ターゲットボードＢ上で動作しているかのような振る舞いをさせる方法である。
【０１７３】
このように、カプセル１の生成から検証までの一連の流れを、開発用端末Ｔのみでシミュレーションとして行い、ターゲットが完成していない状態やターゲットが無い場合に、開発用端末Ｔでカプセル１の動作を確認することができる。
【０１７４】
シミュレータは、既知のコンパイラで、開発用端末Ｔの実行ファイルとして作成される。シミュレータとして生成される実行ファイルは、カプセルアナライザとＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）等の通信プロトコルにより接続可能な様に構成する。
【０１７５】
なお、シミュレータとしてのコンピュータプログラムＰとカプセルアナライザとを別々のプログラムとするのではなく、コンピュータプログラムＰにカプセルアナライザを組み込んで一体化させても良い。このような場合には、コンピュータプログラムＰからカプセルアナライザに演算処理の状況を転送して、カプセルアナライザで表示するのではなく、転送を省いて直接表示させることが可能となる。
【０１７６】
図１０に示すように、スケルトンカプセル１０を読み込んでの新規カプセル１の生成、変数の登録、プログラムコードの追加及びＴＳＵ等への組み込みは上記と同様である。
【０１７７】
その後、コンパイラのプロジェクトメニューにより、カプセル１を登録し、シミュレータ用のコンパイルを行うと、コンピュータプログラムＰとしてのシミュレータ実行ファイルが生成される。
【０１７８】
そして、カプセルアナライザとシミュレータ実行ファイルを起動すると、カプセルアナライザの画面には、カプセル選択ボタンと該当するカプセル１の変数名が表示される。これで、デバック作業を開始することができる。
【０１７９】
［４．開発システムＳの動作］
［４．１  コンピュータプログラムＰ生成時］
次に、上記のような構造を有する開発システムＳの動作について説明するが、まず、カプセルジェネレータにおいて、主にコンピュータプログラムＰのプログラムコードを生成する場合の動作について、その内容ごとに分けて説明する。
【０１８０】
［４．１．１  新規カプセル１の生成］
先ず、スケルトンカプセル１０を読み込んで、新規カプセル１を生成する場合の動作について説明する。図１１は、新規カプセル作成ボックス１０２における操作手順を説明する図である。図１２は、スケルトンカプセルのヘッダファイル及びソースファイルの一例を示す図であり、（ａ）はヘッダファイル、（ｂ）はソースファイルである。
【０１８１】
カプセルジェネレータが開発用端末Ｔの制御部２１により実行されることにより、図５に示すようなメイン画面１００が表示部２４に表示される。
【０１８２】
そして、図１１に示すように、ユーザがキーボード操作等により、新規カプセル作成ボックス１０２のクラス名入力エリア１１１に対してカプセル１のクラス名（例えば、初期クラス名SkelCapsuleからUserCapsuleに変更）を設定し、マウス等により置換ボタン１１２を選択すると、制御部２１は、記憶部２２に記憶されているスケルトンカプセルのヘッダファイル（図１２（ａ））とソースファイル（図１２（ｂ））とを読み出し、ＲＡＭに展開する。
【０１８３】
図１２（ａ）に示すヘッダファイルの例においては、スケルトンカプセルのクラス定義のプログラムコードが記述されており、クラス宣言が_SkelCapsuleでなされ、コンストラクタ（_SkelCapsule）、メインメソッド１３（SkelCapsule）及びＡＣＭ１４（Capsule_ACM）がパブリック宣言されている。また、データ獲得メソッド１２（GetMessage_P）はプライベート宣言されている。
【０１８４】
図１２（ｂ）に示すソースファイルの例においては、メインメソッド１３の骨格及びデータ獲得メソッド１３を呼び出すプログラムコードと、”ここからメインメソッドのプログラムを書いてください”というコメントが記述されており、データ獲得メソッド１２及びＡＣＭ１４については、その骨格のみが記述されている。
【０１８５】
制御部２１は、ＲＡＭ上に展開されたヘッダファイルのクラス定義のクラス名を変更し（例えば、_UserCapsule）、メインメソッドの関数名も変更する（例えば、UserCapsule）。
【０１８６】
そして、制御部２１は、新規カプセルのヘッダファイル及びソースファイルを生成した後、ＲＡＭ上に展開されたソースファイルのメインメソッドの関数名を変更する（例えば、UserCapsule）。
【０１８７】
制御部２１は、このようにして生成したソースファイル及びヘッダファイルを記憶部２２に記憶する。
【０１８８】
次いで、制御部２１は、記憶部２２に記憶されているＡＣＣ３のソースファイルを読み出し、そのソースファイルに対して、新規カプセルのＡＣＭ１４を呼び出すプログラムコードを追加した後、そのソースファイルを記憶部２２に記憶する。
【０１８９】
そして、制御部２１は、現在編集中のカプセル１として、新規カプセルのヘッダファイルをメイン画面１００のヘッダ表示エリア１０５に表示し、新規カプセルのソースファイルのメインメソッドの部分をソース編集エリア１０６に表示する。
【０１９０】
ユーザは、新しいカプセルのヘッダファイル及びソースファイルの内容を確認することができるようになるとともに、ソース編集エリア１０６において、プログラムコードをキーボード等で入力することで、ソースファイルのメインメソッド１３の”ここからメインメソッドのプログラムを書いてください”のコメントの下からプログラムを記述することができる。
【０１９１】
なお、ユーザが、メイン画面１００のメニューバー１０１のファイルメニューから保存サブメニューを選択することにより、制御部２１は、カプセル１の内容（プログラムコードが追加されたヘッダファイルとソースファイル）を記憶部２２に保存させる。
【０１９２】
［４．１．２  公開変数の追加］
次に、公開変数を追加する場合の動作について説明する。図１３は、データ公開用変数設定ウインドウ１２０の一例を示す図である。また、図１４は、生成されたＡＣＭ１４のプログラムコードの一例を示す図である。
【０１９３】
ユーザが、メイン画面１００の変数設定ボックス１０３のData公開ボタンを選択すると、開発用端末Ｔの制御部２１は、図１３に示すようなデータ公開用変数設定ウインドウ１２０を表示部２４に表示する。
【０１９４】
データ公開用変数設定ウインドウは、カプセル１において外部に取得可能な公開データの定義情報を設定し、データ公開用のプログラムコードを生成するためのウインドウであり、変数の型選択エリア１２１、変数名入力エリア１２２、初期値入力エリア１２３、コメント入力エリア１２４、ＡＣＭの生成オプションの各種チェックボックス１２５、コード生成ボタン等１２６が設けられている。
【０１９５】
ユーザは、定義情報として、各エリアに対して、変数の型（たとえば、int、short等）、変数名（例えばData1_i等）、初期値（例えば0等）、コメント（任意の文字）を設定し、必要に応じてＡＣＭ生成オプションを選択する。
【０１９６】
その後、ユーザがコード生成ボタン１２６を選択すると、制御部２１は、現在編集中のカプセル１のヘッダファイルのパブリック部に、メニューで設定された変数名の前にPut_が追加された変数名（例えば、Put_Data1_i等）で公開データの変数である公開変数を定義するプログラムコードを追加し（例えば、int Put_Data1_i;等）、更に、変数の定義のプログラムコードの後ろに、メニューで設定されたコメントを追加する。
【０１９７】
変数の前に追加されたPut_は、その変数が外部公開されていること示している。
【０１９８】
制御部２１は、次いで、ソースファイルのコンストラクタ部に、メニューで設定された初期値の内容を公開変数に代入するプログラムコードを追加する（例えば、Put_Data1_i=0;等）。
【０１９９】
そして、制御部２１は、公開変数の内容を外部に転送するためのプログラムコードを、ソースファイルのＡＣＭ１４の中に追加する。
【０２００】
具体的に、制御部２１は、変数基本情報表示用メソッドに、カプセルアナライザへ転送する内容として通し番号、コメント、変数名を設定するプログラムコードを追加する（図１４（ａ）の点線で囲まれた部分）。
【０２０１】
そして、制御部２１は、変数値一覧表示用メソッドにカプセルアナライザへ転送する内容として変数値を設定するプログラムコードが追加される（図１４（ｂ）の点線で囲まれた部分）。
【０２０２】
更に、制御部２１は、グラフ表示用メソッドには、図１４（ｃ）に示すように、カプセルアナライザへ一括して転送する内容を記憶しておくための配列に変数値を設定するプログラムコードが追加される（図１４（ｃ）の点線で囲まれた部分）。
【０２０３】
なお、コンピュータプログラムＰにカプセルアナライザを組み込んで一体化させる場合には、図１４（ｄ）に示すように、表示用の配列に通し番号、コメント、変数名、変数値を設定するプログラムコードを追加する。
【０２０４】
［４．１．３  データ獲得用のプログラムコード生成］
次に、データ獲得用のプログラムコードを生成する場合の動作について説明する。
【０２０５】
図１５（ａ）は、データ獲得用変数設定ウインドウ１３０の一例を示す図であり、図１５（ｂ）は、その変形例である。
【０２０６】
ユーザが、メイン画面１００の変数設定ボックス１０３のData獲得ボタンを選択すると、開発用端末Ｔの制御部２１は、図１５（ａ）に示すようなデータ獲得用変数設定ウインドウ１３０を表示部２４に表示する。
【０２０７】
データ獲得用変数設定ウインドウ１３０は、他のカプセル１において定義されている公開データを指定する指定情報及び公開データを引き継ぐ変数の定義情報を設定し、データ獲得用のプログラムコードを生成するためのウインドウであり、データ公開用変数設定ウインドウ１２０と同様に、変数の型選択エリア１３１、変数名入力エリア１３２、初期値入力エリア１３３、コメント入力エリア１３４、ＡＣＭの生成オプションの各種チェックボックス１３５、コード生成ボタン１３６等が設けられている。
【０２０８】
ユーザは、各エリアに対して、公開データを引き継ぐための引継変数の定義情報として、変数の型、変数名（公開変数の変数名からPut_を除いたものを例えば、Data1_i等のように設定する。）、初期値、コメントを設定し、必要に応じてＡＣＭ生成オプションを選択する。
【０２０９】
その後、ユーザがコード生成ボタン１３６を選択すると、制御部２１は、現在編集中のカプセル１のヘッダファイルのプライベート部に、メニューで設定された変数名の前にGet_が追加された変数名で引継変数を定義するプログラムコードを追加し（例えば、int Get_Data1_i;等）、更に、変数を定義するプログラムコードの後ろに、メニューで設定されたコメントを追加する。
【０２１０】
変数の前に追加されたGet_は、その変数が外部のカプセル１から取得した変数を引き継いでいることを示している。
【０２１１】
制御部２１は、次いで、ソースファイルのコンストラクタ部に、メニューで設定された初期値の内容を引継変数に代入するプログラムコードを追加する（例えば、Get_Data1_i=0;等）。
【０２１２】
そして、制御部２１は、メニューで設定された変数名の前にPut_が追加された変数名の（例えば、Put_Data1_i等）の公開変数が定義されているヘッダファイルを検索し、そのヘッダファイルに定義されているカプセル名を取得する。
【０２１３】
このように、メニューで設定された変数名は、引継変数を定義するための定義情報の一部であるとともに、他のカプセル１で定義されている公開変数を指定するという意味で、指定情報でもある。
【０２１４】
次いで、制御部２１は、ソースファイルのデータ獲得メソッド１２に、公開変数を引継変数（例えば、Get_Data1_i等）に代入するプログラムコードを追加する（例えば、Get_Data1_i=_Capsule1.Put_Data1_i;等）。
【０２１５】
そして、制御部２１は、データ取得後の引継変数の内容を外部に転送するためのプログラムコードを、ソースファイルのＡＣＭの中に追加するが、具体的な処理内容は、公開変数を追加する場合と同様である。
【０２１６】
なお、データ獲得用変数の設定ウインドウを図１５（ｂ）のように構成しても良い。
【０２１７】
この場合、変数の型選択エリア１３１、変数名入力エリア１３２、コメント入力エリア１３４、各種チェックボックス１３５については図１５（ａ）と同様であるが、変数名入力エリア１３２の代わりに公開変数のカプセル選択エリア１３７と変数選択エリア１３８を設け、指定情報としてカプセル名と変数名とを設定することにより、他のカプセル１で既に定義されている公開変数を直接指定することができる。
【０２１８】
データ獲得用変数設定ウインドウ１３０をこのように構成することで、カプセル名をヘッダファイルから検索する処理が不要となる。
【０２１９】
［４．１．４  内部変数の追加］
次に、内部変数を追加する場合の動作について説明する。
【０２２０】
図１６は、内部変数設定ウインドウ１４０の一例を示す図である。
【０２２１】
ユーザが、メイン画面１００の変数設定ボックス１０３の変数追加ボタンを選択すると、開発用端末Ｔの制御部２１は、図１６に示すような内部変数設定ウインドウ１４０を表示部２４に表示する。
【０２２２】
内部変数設定ウインドウ１４０は、カプセル１内部のみで使用される内部変数の定義情報を設定し、内部変数用のプログラムを生成するためのウインドウであり、図１６に示すように、データ公開用変数設定ウインドウ１２０とほぼ同様の構成となっている。
【０２２３】
そして、ユーザが、表示された内部変数設定ウインドウ１４０の変数名入力エリア等に対して定義情報を設定し、コード生成ボタン１４６を選択すると、制御部２１は、現在編集中のカプセル１のヘッダファイルのプライベート部に、メニューで設定された変数名で内部変数を定義するプログラムコードを追加し（例えば、short DelayTime_s;等）、更に、変数を定義するプログラムコードの後ろに、メニューで設定されたコメントを追加する。
【０２２４】
制御部２１は、次いで、ソースファイルのコンストラクタ部に、メニューで設定された初期値の内容を内部変数に代入するプログラムコードを追加する（例えば、DelayTime_s =0;等）。
【０２２５】
そして、制御部２１は、内部変数の内容を外部に転送するためのプログラムコードを、ソースファイルのＡＣＭ１４の中に追加するが、具体的な処理内容は、公開変数を追加する場合と同様である。
【０２２６】
［４．１．５  新規メソッドの追加］
次に、新規メソッドを追加する場合の動作について説明する。
【０２２７】
図１７は、メソッド関数定義ウインドウ１５０の一例を示す図である。
【０２２８】
ユーザが、メイン画面１００の新規メソッド追加ボックス１０４の開くボタンを選択すると、開発用端末Ｔの制御部２１は、図１７に示すようなメソッド関数定義メニュー１５０を表示部２４に表示する。
【０２２９】
メソッド関数定義メニュー１５０は、関数呼び出しにより、メインメソッドから直接または間接的にて呼び出されるメソッドを新規に追加するためのウインドウである。
【０２３０】
メソッド関数定義メニュー１５０には、戻り値の型選択エリア１５１、メソッドの名前入力エリア１５２、引数の型選択エリア１５３、引数の変数名入力エリア１５４、コメント入力エリア１５５、コード生成ボタン１５６等が設けられている。
【０２３１】
ユーザは、各エリアに対して、新規メソッドの戻り値の型、メソッド名、引数の型、引数の変数名、コメントを設定し、最後にコード生成ボタン１５６を選択すると、制御部２１は、編集中のカプセル１のヘッダファイルのクラス定義におけるプライベート部に、メニューで設定されたメソッド名の関数を定義するプログラムコードを追加し（例えば、void TempConv(int);等）、更に、関数を定義するプログラムコードの後ろに、メニューで設定されたコメントを追加する。
【０２３２】
そして、制御部２１は、ソースファイルに新規メソッドの関数のプログラムコードを追加する（例えばvoid TempConv(int TempData_i){}）。
【０２３３】
次いで、制御部２１は、ソース編集エリア１０６に、新規メソッドの関数のプログラムコードを表示させる。
【０２３４】
ユーザは、ソース編集エリア１０６において、プログラムコードをキーボード等で入力することで、新規メソッドに対するプログラムコードの追加・編集が可能となる。
【０２３５】
なお、本実施形態に係る主処理部には、メインメソッドの他、メインメソッドから直接または間接的に呼び出されるメソッド（ただし、データ獲得メソッドは除く）も含まれる。
【０２３６】
［４．１．６  ＴＳＵ２への組み込み］
次に、カプセル１をＴＳＵ２に組み込む場合の動作について説明する。図１８は、組み込み設定ウインドウ１６０の一例を示す図である。また、図１９は、ＴＳＵ２のソースファイルの一例を示す図である。
【０２３７】
ユーザが、メニューバー１０１のＴＳＵ組み込みメニューを選択すると、開発用端末Ｔの制御部２１は、図１８に示すようなＴＳＵ組み込み設定ウインドウ１６０を表示部２４に表示する。
【０２３８】
ＴＳＵ組み込み設定ウインドウ１６０は、現在編集中のカプセル１を実行させるＴＳＵ２のプログラムコードを生成するためのウインドウである。
【０２３９】
ＴＳＵ組み込み設定ウインドウ１６０には、変数値一覧表示用プログラムコード表示エリア１６１、変数基本情報表示用プログラムコード表示エリア１６２、ボタン表示用プログラムコード表示エリア１６３、プログラム実行用表示エリア１６４、開くボタン１６５、コンテンツ選択エリア１６６、タスクナンバー選択エリア１６７、書き込みボタン１６８等が設けられている。
【０２４０】
ユーザが、開くボタン１６５を選択すると、制御部２１は、記憶部２２からＡＣＣ３のソースファイルを読み出し、プログラムコード表示用エリア１６１乃至１６３に、ＡＣＣ３の変数値一覧表示用メソッド呼び出しメソッド、変数基本情報表示用メソッド呼び出しメソッド、ボタン表示用メソッドのプログラムコードを表示する。そして、制御部２１は、記憶部２２からＴＳＵ２ＴＳＵ２のソースファイルを読み出し、プログラムコード表示用エリア１６４にＴＳＵ２のプログラムコードを表示する。
【０２４１】
コンテンツ選択エリア１６６に表示されているコンテンツは、例えば、０から３の４種類あり、夫々、ＴＳＵ２による呼び出し周期１００μ秒、１ｍ秒、１０ｍ秒、１００ｍ秒を示している。
【０２４２】
そこで、ユーザが、コンテンツ選択エリア１６６に対して、所望のコンテンツ（周期）を選択し、タスクナンバー選択エリア１６７に対して、タスクナンバー（タイムスロット値）を適宜選択する。
【０２４３】
そして、ユーザが書き込みボタン１６８を選択すると、制御部２１は、ＡＣＣ３の変数値一覧表示用メソッド呼び出しメソッド、変数基本情報表示用メソッド呼び出しメソッド、ボタン表示用メソッド及びＴＳＵ２にプログラムコードを追加する。
【０２４４】
具体的に、制御部２１は、現在編集中のカプセル１の変数値一覧表示用メソッドを呼び出すプログラムコード、現在編集中のカプセル１の変数表示メソッドを呼び出すプログラムコード、ボタン表示用として現在編集中のカプセル１のカプセル名を設定するプログラムコードを夫々ＡＣＣ３のソースファイルに追加する（プログラムコード表示用エリア１６１〜１６３の点線で囲まれた部分）。
【０２４５】
更に、制御部２１は、ＴＳＵ２のソースファイルにおいて、設定されたコンテンツ及びタスクナンバー（タイムスロット値）に対応するカプセル呼び出しメソッドに、現在編集中のカプセル１を呼び出すプログラムコードを追加する（プログラムコード表示用エリア１６４の点線で囲まれた部分）。
【０２４６】
次いで、制御部２１は、プログラムコードが追加されたメソッドのソースファイルを記憶部２２に記憶する。
【０２４７】
図１９に示すＴＳＵ２のソースファイルの例においては、各カプセルのヘッダファイルを読み込み、各カプセルを生成するプログラムコードが記述され、また、ＴＳＵ２のコンストラクタが記述される。
【０２４８】
そして、コンテンツ０のカプセル１を呼び出すメソッド、コンテンツ１のタスク０に対応するカプセル１を呼び出すメソッド、コンテンツ１のタスク１に対応するカプセル１を呼び出すメソッドというように、コンテンツ３のタスク９まで、カプセル１を呼び出すメソッドが記述される。ここで、コンテンツ０のカプセル１は全て、同一の呼び出しメソッドにおいて呼び出され、その呼び出し順序は、ＴＳＵ組み込み設定ウインドウ１６０において設定されたタスクナンバーの小さい順となる。その後、上記カプセル呼び出しメソッド順次呼び出すＴＳＵ２のメインメソッドが記述される。
【０２４９】
［４．１．７  組織化の様子の表示］
図２０は、カプセル１の組織化の様子を表示した一例を示す図であり、カプセルジェネレータは、構造を表示するボタンを選択する事で、カプセル１同士の接続の全体構造を、ビジュアルに表現する機能を持っている。その際、図２０のように常に２０個のカプセル１が表示されるわけではなく、プロジェクトに含まれたカプセル１の数だけを表示する。また、各カプセル１の繋がりだけをデータとして保持するオブザーバーカプセルが存在する。
【０２５０】
プロジェクトファイルに追加されているカプセル１がアレイ状に表示され、プロジェクトにおけるカプセル間のつながり（カプセル１の公開データを、他のカプセルがデータ獲得メソッド１２において取得していること）を線で繋ぐことで組織化の様子が表示される。
【０２５１】
具体的に、制御部２１は、例えば、全カプセルのヘッダファイルから公開変数を定義するプログラムコードを検索することにより公開変数を取得した後、全カプセルのソースファイルのデータ獲得メソッドから、その公開変数を引継変数に代入するプログラムコードを検索することにより、カプセル間のつながりを検索し、その結果を表示部２４に表示する。
【０２５２】
［４．２  コンピュータプログラムＰのデバッグ時］
【０２５３】
次に、ターゲットボードＢのマイクロコントローラＭにて実行されているコンピュータプログラムＰをカプセルアナライザ及びカプセルスコープを用いてデバッグする場合の動作について説明する。図２１は、デバッグ時におけるマイクロコントローラＭの処理の一例を示すフローチャートである。また、図２２は、デバッグ時におけるマイクロコントローラＭ及び開発用端末Ｔの処理の一例を示すフローチャートである。
【０２５４】
ターゲットボードＢの図示しない電源スイッチをユーザが押して、ターゲットボードＢを起動させると、マイクロコントローラＭは、ＲＯＭに記録されているプログラムＰの
ＴＳＵ２を実行する。
【０２５５】
ＴＳＵ２において、マイクロコントローラＭは、図２１に示すように、全カプセル１を生成し、全カプセル１の各変数を初期化する（ステップＳ１０１）。
【０２５６】
そして、マイクロコントローラＭは、コンテンツ１、コンテンツ２及びコンテンツ３用のタイムスロット値（以下、夫々、ＴＳ１、ＴＳ２、ＴＳ３と称する。）を０に初期化する（ステップＳ１０２）。
【０２５７】
次いで、マイクロコントローラＭは、ＴＳＵ組み込みにおいてコンテンツ０（１００μ秒）に設定されたカプセル１のメインメソッド１３を順番に実行する（ステップＳ１０３）。
【０２５８】
ここでは、各メインメソッド１３をマイクロコントローラＭが実行することにより、メインメソッド１３からデータ獲得メソッド１２が呼び出されて公開データを取得し、メインメソッド及び当該メソッドから呼び出されるメソッドにおいて、この取得された公開データに対してカプセル１ごとの機能に対応して予め設定された演算処理を行い、その結果の一部を、そのカプセル１の公開データとして公開データ部に設定する。
【０２５９】
そして、マイクロコントローラＭは、ＡＣＣ３（ステップＳ１０４）を実行するが、ＡＣＣ３における動作については後述する。
【０２６０】
次いで、マイクロコントローラＭは、コンテンツ１のカプセル１の中からＴＳ１に設定されたタイムスロット値に対応するカプセル１のメインメソッド１３を順番に実行する（ステップＳ１０５）。
【０２６１】
その後、マイクロコントローラＭは、ＴＳ１が９以上であるか否かを判定し（ステップＳ１０６）、９未満である場合は（ステップＳ１０６：ＮＯ）、ＴＳ１に１を加算し（ステップＳ１０７）、コンテンツ０のカプセル１の実行、ＡＣＣ３の実行、次のタイムスロット値に対応するコンテンツ１のカプセル１の実行を行う（ステップＳ１０３〜Ｓ１０５）。
【０２６２】
そして、ステップＳ１０６の判定において、ＴＳ１が９以上となった場合（ステップＳ１０６：ＹＥＳ）、マイクロコントローラＭは、ＴＳ１に０を設定する（ステップＳ１０８）。
【０２６３】
次いで、マイクロコントローラＭは、コンテンツ２についても同様に、ＴＳ２に設定されたタイムスロット値に対応するカプセル１の実行及びＴＳ２が９以上であるか否かの判定を行い（ステップＳ１０９、Ｓ１１０）、ＴＳ２が９未満である場合は（ステップＳ１１０：ＮＯ）、ＴＳ２に１加算した後（ステップＳ１１１）、ステップＳ１０３に移行する。
【０２６４】
そして、ＴＳ２が９以上となった場合（ステップＳ１１０：ＹＥＳ）、マイクロコントローラＭは、ＴＳ２に０を設定し（ステップＳ１１２）、コンテンツ３についても同様の処理を行う（ステップＳ１１３〜Ｓ１１６）。
【０２６５】
このようにして、カプセル１ごとに予め定められた周期で、ラウンドロビン方式でシーケンシャルに実行されるとともに、ＡＣＣ３も所定周期で実行されることとなる。
【０２６６】
なお、上記の説明においては、カプセル１が呼び出される周期は４パターンであるが、パターン数を増減させても良い。
【０２６７】
また、コンテンツ０のカプセル１実行時にＡＣＣ３を実行するのではなく、例えば、コンテンツ１のカプセル１実行時にＡＣＣ３を実行しても良く、この場合、一定時間内におけるＡＣＣ３呼び出し回数が１０分の１となり、ＣＰＵの負荷が軽減される。
【０２６８】
ここで、開発用端末Ｔにおいて、ユーザが操作部２５によりカプセルアナライザを起動させると、図２２に示すように、制御部２１は、表示部２４にアナライザ画面１８０を表示し（ステップＳ３０１）、ターゲットボードＢに対して、接続要求を送信する（ステップＳ３０２）。
【０２６９】
開発用端末Ｔとの通信は、ＡＣＣ３において処理されるが（ステップＳ１０４）、具体的にマイクロコントローラＭは、開発用端末Ｔと通信接続中か否か判定し（ステップＳ２０１）、接続中でない場合は（ステップＳ２０１：ＮＯ）、ステップＳ２０２に移行し、接続中である場合は（ステップＳ２０１：ＹＥＳ）、ステップＳ２０５に移行する。
【０２７０】
ステップＳ２０２において、マイクロコントローラＭは、開発用端末Ｔからの接続要求を受信したか否かを判定し、受信していない場合は（ステップＳ２０２：ＮＯ）、ＡＣＣ３の処理を終了し、受信した場合は（ステップＳ２０２：ＹＥＳ）、全カプセル１のカプセル名及び識別番号等を開発用端末Ｔに送信する（ステップＳ２０３）。
【０２７１】
開発用端末Ｔは、マイクロコントローラＭから送信されたカプセル名及び識別番号を受信して、カプセル名をカプセル選択ボタン１８２に表示する（ステップＳ３０３）。
【０２７２】
そして、開発用端末Ｔは、選択するカプセル１の初期設定として、例えば、１番目に受信したカプセル１を選択し（ステップＳ３０４）、その識別番号をマイクロコントローラＭに送信する（ステップＳ３０５）。
【０２７３】
マイクロコントローラＭは、開発用端末Ｔから識別番号を受信したか否かを判定し（ステップＳ２０４）、受信した場合は（ステップＳ２０４：ＹＥＳ）、現在選択されているカプセル１を、受信した識別番号に対応するカプセル１に変更し（ステップＳ２０５）、ＡＣＭ１４の変数基本情報表示用メソッドを呼び出して、選択されたカプセル１の全データの変数名及びコメントを開発用端末Ｔに送信し（ステップＳ２０６）、ステップＳ２０８に移行する。
【０２７４】
一方、開発用端末Ｔから識別番号を受信していない場合（ステップＳ２０４：ＮＯ）、マイクロコントローラＭは、現在いずれかのカプセル１が選択されているか否かを判定し（ステップＳ２０７）、選択されているカプセル１がある場合は（ステップＳ２０７：ＹＥＳ）、ステップＳ２０８に移行し、選択されていない場合は（ステップＳ２０７：ＮＯ）、ＡＣＣ３の処理を終了する。
【０２７５】
開発用端末Ｔは、マイクロコントローラＭから、選択されたカプセル１の変数名及びコメントを受信し、カプセル情報表示エリア１８３に表示する（ステップＳ３０６）。
【０２７６】
マイクロコントローラＭは、ＡＣＭ１４の変数値一覧表示用メソッドを呼び出して、全データの現在の変数値を開発用端末Ｔに送信し（ステップＳ２０８）、ＡＣＣ３の処理を終了する。
【０２７７】
開発用端末Ｔは、マイクロコントローラＭから送信された変数値を受信して、カプセル情報表示エリア１８３に表示する（ステップＳ３０７）。
【０２７８】
そして、開発用端末Ｔは、ユーザの選択によりカプセルスコープが起動されているか否かを判定し（ステップＳ３０８）、起動されている場合は（ステップＳ３０８：ＹＥＳ）、受信した変数値により、グラフ表示エリア１９１に表示されているグラフを更新して再表示する（ステップＳ３０９）。
【０２７９】
次いで、開発用端末Ｔは、ユーザにより、いずれかのカプセル選択ボタン１８２が選択されたか否かを判定し（ステップＳ３１０）、選択された場合は（ステップＳ３１０：ＹＥＳ）、選択されたカプセル１の変数名、コメント、変数値を取得して、夫々表示していく（ステップＳ３０５〜Ｓ３０９）。
【０２８０】
一方、カプセル選択ボタン１８２が選択されていない場合（ステップＳ３１０：ＹＥＳ）、開発用端末Ｔは、ユーザによりメニューバー１８１から終了メニューが選択されたか否かを判定し（ステップＳ３１１）、選択されていない場合は（ステップＳ３１１：ＮＯ）、マイクロコントローラＭから送信される変数値を順次表示していき（ステップＳ３０７〜Ｓ３０９）、選択された場合は、カプセルアナライザを終了させる。
【０２８１】
なお、マイクロコントローラＭのＣＰＵ占有率を低下させつつ、リアルタイムに変数値をグラフ表示させる場合、マイクロコントローラＭは、ＡＣＭ１４のグラフ表示用メソッドを呼び出して、現在の変数値をＲＡＭに保存する。そして、グラフ表示用メソッドが５００回呼び出されることにより、５００回分の変数値が蓄積されたら、マイクロコントローラＭは、これを一括して開発用端末Ｔに送信する。
【０２８２】
一方、開発用端末Ｔでは、マイクロコントローラＭから一括して送信された変数値を受信し、この５００回分の変数値により、グラフ表示エリア１９１に表示されているグラフを更新して再表示することとなる。
【実施例】
【０２８３】
次に、燃料電池を用いたコージェネレーションシステムに搭載された系統連係インバータを制御するマイクロコントローラに組み込まれたコンピュータプログラムの開発システムに本実施形態を適用した場合の実施例について説明する。
【０２８４】
コージェネレーションシステムは、都市ガス等の燃料ガスを改質器により水素に改質して燃料電池に供給し、燃料電池において水素と酸素とを反応させて発電するとともに、この発電による熱を利用して温水を供給する。そして、燃料電池で発電された電力を系統（または商用負荷）へ供給するために、これを昇圧し、直流から交流に変換する装置が系統連係インバータである。
【０２８５】
系統連係インバータにおいては、その供給電力によって系統に悪影響を及ぼさないように、系統の電圧変化に追従して電力供給を行うが、系統または系統連係インバータに異常が発生した場合には、電力供給を停止して系統を保護しなければならない。
【０２８６】
そこで、マイクロコントローラにより、系統連係インバータからの出力電圧を監視することにより系統連係インバータの異常の有無を感知して、系統への電力供給をオン／オフする系統リレーを制御させるのが、本実施例に係るコンピュータプログラムとしてのリレー制御プログラムである。
【０２８７】
先ず、本実施例に係る開発システムＳ１の構成について説明する。図２３は、本実施例に係る開発システムＳ１の概要構成の一例を示すブロック図である。
【０２８８】
図２３に示すように、開発システムＳ１は、大別して、系統連係インバータＩと、開発用端末Ｔと、により構成されている。
【０２８９】
そして、系統連係インバータＩは、コンバータ３１と、インバータ３２と、アイソレーションアンプ３３と、レベルシフタ３４と、駆動回路３５と、系統リレー３６と、マイクロコントローラＭ１と、により構成されている。
【０２９０】
コンバータ３１は、燃料電池４から供給された数十Ｖ程度の低い直流電圧を、例えば、３２０Ｖ以上の直流電圧に昇圧し、インバータ３２に供給する。
【０２９１】
インバータ３２は、コンバータから供給された直流電力を、５０Ｈｚまたは６０Ｈｚの交流電力に変換し、これを出力電力として系統リレー３６を介して系統５に供給するとともに、アイソレーションアンプ３３にも供給する。インバータ３２からの出力電圧値は、正常であれば２００Ｖ程度（最小−２８０Ｖ〜最大＋２８０Ｖ程度）である。
【０２９２】
アイソレーションアンプ３３は、インバータ３２から供給された交流電力を、マイクロコントローラＭ１に入力することができるように、例えば、１００分の１程度に減衰し、レベルシフタ３４に供給する。
【０２９３】
レベルシフタ３４は、アイソレーションアンプ３３から供給された交流電力を、例えば＋５Ｖシフトさせ、これをマイクロコントローラＭ１に供給する。
【０２９４】
駆動回路３５は、マイクロコントローラＭ１から供給される制御信号に基づいて、系統リレー３６のスイッチを開閉させる駆動電流を系統リレー３６に供給する。
【０２９５】
系統リレー３６は、マイクロコントローラＭ１から供給される駆動電流に基づいてスイッチを開閉することにより、系統５に対して、インバータ３２からの出力電力を供給し、または供給を停止する。
【０２９６】
マイクロコントローラＭ１は、ＣＰＵ４１と、データ等を一時的に記憶するＲＡＭ４２と、各種プログラム（例えば、リレー制御プログラム等）等を記憶するフラッシュＲＯＭ４３と、外部から供給されたアナログ信号をデジタル値に変換するＡ／Ｄコンバータ４５と、ＣＰＵ４１が周辺デバイスとのデータの交換を行うためのＩ／Ｏポート４４と、開発用端末Ｔとの通信状態を制御する通信回路通信回路４６と、を備え、システムバス４７を介して相互に接続されている。
【０２９７】
マイクロコントローラＭ１は、ＣＰＵ４１が、フラッシュＲＯＭ４３に記録された各種プログラムを読み出し実行することにより、Ｉ／Ｏポート４４を介してコンバータ３１及びインバータ３２を統括制御するとともに、レベルシフタ３４から供給されたインバータ３２の出力電圧をＡ／Ｄコンバータ４５によりデジタル値に変換し、この情報に基づいて演算処理を行い、その結果に応じた制御信号をＩ／Ｏポート４４を介して駆動回路３５に供給することで、系統リレー３６を制御する。
【０２９８】
次に、本実施例に係るリレー制御プログラムＰ１のカプセルの構成及び機能について説明する。図２４は、本実施例に係るリレー制御プログラムＰ１のカプセル構成の一例を示す図である。
【０２９９】
リレー制御プログラムＰ１は、Ａ／Ｄコンバータ４５から入力した出力電圧の実効値を求めて、その実効値が、例えば、２４０Ｖ以上である場合には、系統５への電力供給を停止するよう、駆動回路３５に制御信号を送信するためのプログラムである。
【０３００】
リレー制御プログラムＰ１は、複数のカプセル１と、ＴＳＵ２と、ＡＣＣ３とにより構成されており、図２４に示すように、センサカプセル１ａと、フィルタカプセル１ｂと、周波数監視カプセル１ｃと、フィルタ係数選択カプセル１ｄと、全波整流カプセル１ｅと、平滑カプセル１ｆと、電圧監視カプセル１ｇと、リレー制御カプセル１ｈと、を有している。
【０３０１】
センサカプセル１ａは、インバータ３２の出力電圧値を読み取るためのプログラムである。
【０３０２】
具体的には、先ず、Ａ／Ｄコンバータ４５によりデジタル値に変換された出力電圧値を取得する。
【０３０３】
この出力電圧値は、アイソレーションアンプ３３及びレベルシフタ３４により＋２．２Ｖ〜＋７．８Ｖ程度に変換されているので、後の演算処理で扱いやすいように逆変換を行ってから（例えば、５Ｖ減算した後、１００倍することにより、−２８０Ｖ〜＋２８０Ｖ程度（系統連係インバータＩが正常である場合）の電圧値にする）、公開データ部１１に設定する。
【０３０４】
フィルタカプセル１ｂは、出力電圧信号から高周波ノイズを除去するためのプログラムである。
【０３０５】
具体的には、例えば、ＴＳＵ２から呼び出されるごとに、センサカプセル１ａの公開データである出力電圧値を取得・記憶するとともに、過去取得した一定個数の出力電圧値に対して、予め定められた重み付けに応じて、後述するフィルタ係数選択カプセル１ｄの公開データであるフィルタ係数を夫々の出力電圧値に乗じた後、その平均値を公開データ部１１に設定する。
【０３０６】
周波数監視カプセル１ｃは、出力電圧の周波数（５０Ｈｚまたは６０Ｈｚ）を監視し、これを公開するためのプログラムである。
【０３０７】
具体的には、フィルタカプセル１ｂで公開されているノイズ除去された出力電圧値を取得して０比較する。ここで出力電圧値が０である場合には、前回出力電圧値が０であった時からの経過時間を算出する（ＴＳＵ２からの呼び出し回数と呼び出し周期により算出する）。そして、この経過時間に基づいて周波数を算出し公開データ部１１に設定する。
【０３０８】
フィルタ係数選択カプセル１ｄは、出力電圧信号の周波数に応じて、信号からノイズ除去するためのフィルタ係数を決定する。
【０３０９】
具体的には、周波数監視カプセル１ｃの公開データである周波数を取得し、これに対応して予め定数として設定されているフィルタ係数をデータ公開部１１に設定する。
【０３１０】
全波整流カプセル１ｅは、交流である出力電圧信号を直流に変換するためのプログラムである。
【０３１１】
具体的には、フィルタカプセル１ｂの公開データである出力電圧値を取得し、この出力電圧値の絶対値を整流電圧値として公開データ部１１に設定する。
【０３１２】
平滑カプセル１ｆは、全波整流された出力電圧信号を平滑して、出力電圧の実行値を求めるためのプログラムである。
【０３１３】
具体的には、ＴＳＵ２から呼び出されるごとに全波整流カプセル１ｅの公開データである整流電圧値を取得・記憶しておくとともに、周波数監視カプセル１ｃの公開データである周波数を取得して、この周波数の逆数である周期に対応するＴＳＵ２からの呼び出し回数分、過去に記憶しておいた整流電圧値の平均値を実効電圧値として公開データ部１１に設定する。
【０３１４】
電圧監視カプセル１ｇは、出力電圧の異常を検出するためのプログラムである。
【０３１５】
具体的には、平滑カプセル１ｆの公開データである実効電圧値を取得し、この実行値が２４０Ｖ未満である場合は、アラーム値として、例えば、０（異常なしを意味する。）を公開データ部１１に設定する。
【０３１６】
一方、実効電圧値が２４０Ｖ以上である場合は、その電圧値を異常と判定し、連続して電圧値が２４０Ｖ以上となった回数をカウントする。そして、カウントされた回数が、例えば、１秒分の回数に達した場合には、アラーム値として、例えば、１（異常ありを意味する。）を公開データ部１１に設定する。
【０３１７】
リレー制御カプセル１ｈは、出力電圧の実行値が異常である場合に、系統リレー３６のスイッチをオフさせる制御信号を、Ｉ／Ｏポート４４を介して駆動回路３５に送信するためのプログラムである。
【０３１８】
具体的には、電圧監視カプセル１ｇの公開データであるアラーム値を取得し、このアラーム値に対応して制御信号を送信するためのデータをＩ／Ｏポート４４の所定のアドレスに出力する。
【０３１９】
次に、本実施例に係るリレー制御プログラムＰ１の作成方法の概要について説明する。
【０３２０】
上記のような機能を有するカプセルを作成するために、カプセルジェネレータの新規カプセル作成ボックス１０２により、各カプセルのヘッダファイル及びソースファイルを生成した。
【０３２１】
そして、データ公開部１１に設定される公開データについて、公開用変数設定ウインドウにより公開データ用のプログラムコードを追加し、データ獲得メソッド１２により取得するデータについては、データ獲得用変数設定ウインドウによりデータ獲得用のプログラムコードを追加した。その際、コメント名、変数名、データ型及び初期値は適宜設定した。
【０３２２】
次に、各カプセルの機能仕様に基づきメインメソッドのプログラムコードをソース編集エリアに対して入力することにより追加し、各カプセルのプログラムコードを作成した。その際、内部変数及び新規メソッドは適宜追加した。
【０３２３】
そして、各カプセルのヘッダファイル及びソースファイルを保存するとともに、ＴＳＵ２への組み込みの際には、呼び出し周期をそれぞれ１００μ秒とした。
【０３２４】
最後に、各カプセルをプロジェクトに追加した後、コンパイルすることにより、マイクロコントローラＭ１が実行可能であるリレー制御プログラムＰ１が生成された。
【０３２５】
次に、系統連係インバータＩの動作について説明する。
【０３２６】
燃料電池４から供給された低電圧の電力をコンバータ３１が昇圧した後、インバータ３２が周波数５０Ｈｚまたは６０Ｈｚの交流に変換し、出力電力としてアイソレーションアンプ３３及び系統リレー３６に供給する。
【０３２７】
アイソレーションアンプ３３は、供給された出力電圧を１００分の１に減衰し、レベルシフタ３４に供給すると、レベルシフタ３４は、これを更に＋５ＶレベルシフトしてマイクロコントローラＭ１のＡ／Ｄコンバータ４５に供給する。
【０３２８】
マイクロコントローラＭ１は、リレー制御プログラムＰ１を実行することにより、ＴＳＵ２からカプセル１ａ〜１ｈをシーケンシャルに呼び出し実行する。
【０３２９】
具体的に、マイクロコントローラＭ１は、センサカプセル１ａにおいて、Ａ／Ｄコンバータ４５によりデジタル値に変換された出力電圧値を取得・変換し、フィルタカプセル１ｂにおいて、高周波ノイズを除去する。
【０３３０】
そして、周波数監視カプセル１ｃにおいて、ノイズ除去された電圧値に基づき現在の周波数を取得し、フィルタ係数選択カプセル１ｄにおいて、この周波数に基づきフィルタ係数を選択すると、次周期のフィルタカプセル１ｂにおける演算処理にフィードバックされる。
【０３３１】
次いで、マイクロコントローラＭ１は、ノイズ除去された電圧値を、全波整流カプセル１ｅにより絶対値に変換し、平滑カプセル１ｆにより電圧実効値を求める。
【０３３２】
そして、マイクロコントローラＭ１は、電圧監視カプセル１ｇにより、電圧実行値が異常であるか否かを判定することによりアラーム値を設定し、このアラーム値に基づいて、リレー制御カプセル１ｇによりＩ／Ｏポート４４を介して制御信号を駆動回路３５に供給する。
【０３３３】
マイクロコントローラＭ１は、上記のような演算処理を、ＴＳＵ２から１００μ秒周期で繰り返し実行することにより、各カプセルを並列的に実行するのである。
【０３３４】
駆動回路３５は、マイクロコントローラＭ１から供給された制御信号に応じて駆動電流を系統リレー３６に供給し、系統リレー３６は、この駆動電流に基づいてスイッチを開閉する。
【０３３５】
ここで、インバータ３２の出力電圧の実行値が２４０Ｖ未満である場合は、系統リレー３６のスイッチはオンとなり、系統５に対して電力が供給される。
【０３３６】
一方、インバータ３２の出力電圧の実行値が１秒間以上継続して２４０Ｖ以上となった場合は、系統リレー３６のスイッチはオフとなり、系統５に対する電力の供給が停止する。
【０３３７】
このように、本実施例においては、ごく単純な機能を持たせた複数のカプセル１を集合させることにより、系統連係インバータＩの系統リレーの制御という機能を比較的簡単に実現することができた。
【０３３８】
また、データ公開部１１によるデータの公開とデータ獲得メソッド１２によるデータの獲得という規則に基づき設計された各カプセル１は、他のカプセル１の処理からは独立しているため、例えば、機能追加するような場合でも、基本的に既存のカプセル１を変更する必要はなく、機能追加に必要なカプセル１を新たに追加すれば良い。
【０３３９】
次に、マイクロコントローラＭ１によるリレー制御プログラムＰ１の実行を、開発用端末Ｔのカプセルアナライザにより監視し、カプセルスコープによりグラフ表示させた結果について説明する。図２５は、各カプセルの公開データをグラフ表示させた結果の一例を示す図であり、（ａ）は出力電圧値であり、（ｂ）はノイズ除去された出力電圧値であり、（ｃ）は整流電圧値であり、（ｄ）は実効電圧値であり、（ｅ）はアラーム値である。
【０３４０】
図２５に示すように、カプセルスコープにより、出力電圧の波形、これをノイズ除去した波形、更に全波整流した波形、平滑した波形等をリアルタイムに表示することにより、現在の各カプセル１のメインメソッド１３における演算処理の状況を一目で把握することができる。
【０３４１】
ここで、例えば、フィルタカプセル１ｂに問題があり、その公開データである出力電圧値が０になってしまったような場合には、全波整流カプセル１ｅ乃至リレー制御カプセル１ｆにおいて設定されるデータの内容も異常な値となり、インバータ３２の出力電圧の正常異常にかかわらず、常に系統５へ電力供給される。
【０３４２】
もし、ＩＣＥ等を用いてデバッグを行った場合には、フィルタカプセル１ｂのメインメソッド１３の所定のプログラムコードでブレークポイントを設定し、監視登録をすることにより、リレー制御プログラムＰ１の実行を停止させて、ノイズ除去された出力電圧値を表示させることとなるが、表示された値が０であったとしても、それだけでは、リレー制御プログラムＰ１が正常であるか否かは判断することはできないし、仮に、異常であると判断することができたとしても、その原因がフィルタカプセル１ｂにあるのか、またはセンサカプセル１ａにあるのかを判断することはできない。
【０３４３】
そして、その原因がどこにあるかを探るためにリレー制御プログラムＰ１の実行を再開させたとしても、プログラムＰ１を停止している間に系統連係インバータＩの状態が変化することにより、フィルタカプセル１ｂにおいて設定される出力電圧値が正常な値に戻ってしまった場合には、原因を追究することができない可能性もある。
【０３４４】
また、リレー制御プログラムＰ１の停止中に系統連係インバータＩに異常が発生し、インバータ３２の出力電圧が異常となった場合には、系統５に異常電圧の電力が供給されることで、系統５に悪影響を及ぼすこととなる。
【０３４５】
これに対し、本実施例においては、図２５（ａ）に示すように、センサカプセル１ａの公開データである出力電圧値が正常を示す波形を維持しているのに対し、図２５（ｂ）に示すように、ノイズ除去されたはずの出力電圧の正弦波形が脱落しているのが分かる。
【０３４６】
このようにして、フィルタカプセル１ｂに問題があることを的確に判断することが可能となる。
【０３４７】
以上説明したように、本実施形態によれば、各カプセル１が、マイクロコントローラＭを、他のカプセル１から取得可能である公開データが設定される公開データ領域手段としてのデータ公開部１１、他のカプセル１におけるデータ公開部１１に設定された公開データをデータ獲得メソッド１２において取得する公開データ取得手段、データ獲得メソッド１２において取得された公開データに対して予め定められた演算処理を実行するとともに、当該演算処理により得られた結果の少なくとも一部を公開データとしてデータ公開部１１に設定する主処理手段、及び所定周期ごとにおけるメインメソッド１３における演算処理の状況をＡＣＭ１４において提供する状況提供手段、として機能させる同一構造を有している。
【０３４８】
従って、カプセル１が、データ公開部１１によるデータの公開と、データ獲得メソッド１２によるデータの取得という規則を有し、この規則に基づいてメインメソッドにおいて演算処理を実行するため、データの安全性が確保される。
【０３４９】
しかも、各カプセル１は、他のカプセル１の処理に依存することなく、公開されているデータを自ら取得して演算処理を行い、その結果の少なくとも一部を公開するという、単純化された同一構造を有しているので、設計上のミスが生じ難くなり、コンピュータプログラムＰとしての信頼性が向上する。
【０３５０】
また、マイクロコントローラＭのメインメソッドにおける演算処理の状況を、カプセルアナライザを実行する開発用端末によりリアルタイムに送信された演算処理の状況を順次表示することにより、コンピュータプログラムＰの実行を停止させることなく外部からリアルタイムに監視することが可能となるＡＣＭ１４を各カプセル１自身が予め有しているので、特に組み込みシステムＳにおけるコンピュータプログラムＰのデバッグが容易となる。
【０３５１】
また、カプセルアナライザにおいて、ユーザに所望のカプセル１を選択させることにより、開発用端末Ｔが、カプセル１の識別番号をマイクロコントローラＭに送信し、マイクロコントローラＭが、コンピュータプログラムＰのＡＣＣ３において識別情報を受信し、当該識別番号が示すカプセル１におけるＡＣＭ１４による処理を所定周期ごとに実行させることにより、メインメソッド１３における演算処理の状況を開発用端末Ｔに送信し、開発用端末Ｔは、この演算処理の状況を受信して、表示部２４に順次表示するので、所望のカプセル１に特化したデバッグが可能となる。
【０３５２】
このように、ソフトウエアの信頼性や品質の向上については、カプセルを動作させながら検証するための仕組みが備わっている。カプセル１内部にＡＣＭ１４があり、ＡＣＭ１４は、外部のカプセルアナライザとコミニケーションし、カプセル１の変数の状態をリアルタイムにカプセルアナライザへ送る。開発者は、カプセルアナライザに表示される内容を確認し、追跡して、不具合箇所を修正することができる。
【０３５３】
また、開発用端末Ｔが、メインメソッド１３における演算処理の状況を時系列で、しかも視覚的に解りやすいようにグラフ表示することにより、カプセル１に問題があるか否かを一目で判断することが可能となる。
【０３５４】
また、コンピュータプログラムＰは、カプセル１ごとに予め定められた周期で、当該各カプセル１のメインメソッド１３における演算処理を順次繰り返して実行させるＴＳＵ２を有しているので、各カプセル１のメインメソッド１３における演算処理が、例えば、１μ秒周期でシーケンシャルに繰り返し実行されるという、より単純化された実行規則により並列的な処理が行われるので、コンピュータプログラムＰの設計、検証等が容易となる。
【０３５５】
また、本実施形態によれば、開発用端末Ｔがカプセルジェネレータにより、ユーザにより入力された公開データの変数の型、変数名、初期値、コメント等の定義情報に基づいて、当該公開データを定義するプログラムコードを生成する定義コード生成し、ユーザにより入力された変数名等の指定情報に基づいて、データ獲得メソッド１２のプログラムコードを生成し、ユーザにより入力されたプログラムコードに基づいて、メインメソッド１３のプログラムコードを生成し、定義情報及び指定情報等に基づいて公開変数、引継変数及び内部変数用のＡＣＭ１４のプログラムコードを生成する。
【０３５６】
従って、データ公開部１１、データ獲得メソッド１２及びメインメソッド１３を有するカプセル１のプログラムコードを容易に作成することができるとともに、ＡＣＭ１４のプログラムコードが自動的に生成されるので、人手によりデバッグ用のプログラムコードをカプセルプログラムごとに作成するという手間を大幅に削減することが可能となる。
【０３５７】
なお、本実施形態においては、コンピュータプログラムＰをＣ＋＋言語で開発していたが、同様に各変数及びメソッドを上述しようにカプセル化することができるのであれば、例えば、Ｃ言語等の非オブジェクト指向言語で開発しても良い。
【０３５８】
また、本実施形態においては、コンピュータプログラムＰを、組み込みシステムに用いられる組み込み型プログラムに適用していたが、他のシステムに適用しても良い。
【０３５９】
このように、本発明は、上記実施形態に限定されるものではない。上記実施形態は、例示であり、本発明の請求の範囲に記載された技術的思想と実質的に同一な構成を有し、同様な作用効果を奏するものは、いかなるものであっても本発明の技術的範囲に包含される。
【０３６０】
また、２００４年１０月１９日に出願された明細書、特許請求の範囲、図面、要約を含む日本の特許出願（No. 2004-332430）の全ての開示は、その全てを参照することよって、ここに組み込まれる。
【図１】
0004054836.tif 000002
【図２】
0004054836.tif 000003
【図３】
0004054836.tif 000004
【図４】
0004054836.tif 000005
【図５】
0004054836.tif 000006
【図６】
0004054836.tif 000007
【図７】
0004054836.tif 000008
【図８】
0004054836.tif 000009
【図９】
0004054836.tif 000010
【図１０】
0004054836.tif 000011
【図１１】
0004054836.tif 000012
【図１２】
0004054836.tif 000013
【図１３】
0004054836.tif 000014
【図１４】
0004054836.tif 000015
【図１５】
0004054836.tif 000016
【図１６】
0004054836.tif 000017
【図１７】
0004054836.tif 000018
【図１８】
0004054836.tif 000019
【図１９】
0004054836.tif 000020
【図２０】
0004054836.tif 000021
【図２１】
0004054836.tif 000022
【図２２】
0004054836.tif 000023
【図２３】
0004054836.tif 000024
【図２４】
0004054836.tif 000025
【図２５】
0004054836.tif 000026