(57)【要約】【課題】通信を介して送受信するデータの形式が変更された場合でも、送受信側双方のアプリケーションプログラムがある一定のデータ形式で処理することを可能にし、その結果として同アプリケーション層の再利用性を向上させる。【解決手段】通信ドライバは受信したデータをセンサドライバの入力情報変換部に出力する機能を有し、入力情報変換部は同データをアプリケーションプログラムが処理可能な形式でアプリケーションプログラムに出力するソフトウェア構成とする。また、アクチュエータドライバに出力情報変換部を設け、アプリケーションプログラムは出力情報変換部に同データを出力し、出力情報変換部は通信を介して送信可能な形式で通信ドライバに出力するソフトウェア構成とする。【選択図】図１
2008059312.tif 000002
【特許請求の範囲】
【請求項１】
通信を介して信号を入出力する通信部と、
センサ及び／またはアクチュエータと信号を入力及び／または出力する信号処理部と、
入力データに基づいて演算を行い当該演算結果を出力するアプリケーションプログラム、前記通信部を制御する第１のドライバ、及び前記信号処理部を制御する第２のドライバを記憶する記憶部と、を有し、
前記第２のドライバは、前記第１のドライバから入力した前記通信部を介した入力データを、前記信号処理部から入力した入力データと同じ形式に変換して前記アプリケーションプログラムに出力する機能を有する制御装置。
【請求項２】
請求項１に記載の制御装置であって、
前記第２のドライバは複数の階層で構成され、第１のドライバは前記通信部による受信データを同データの変換レベルに応じて前記第２のドライバの各階層に出力する機能を有する制御装置。
【請求項３】
請求項１に記載の制御装置を開発する開発システムであって、
ソフトウェア部品間のデータ入出力関係を記述するモジュール入出力記述部を有し、ソフトウェア部品一覧を記載したモジュール構成表とソフトウェア部品間の入出力関係の指定を入力とし、モジュール入出力記述部を出力する開発システム。
【請求項４】
通信を介して信号を入出力する通信部と、
センサ及び／またはアクチュエータと信号を入力及び／または出力する信号処理部と、
入力データに基づいて演算を行い当該演算結果を出力するアプリケーションプログラム、前記通信部を制御する第１のドライバ、及び前記信号処理部を制御する第２のドライバを記憶する記憶部と、を有し、
前記第２のドライバは、前記アプリケーションプログラムから入力したデータを前記通信部が送信するデータを同一の形式に変換して前記第１のドライバへ出力し、前記第１のドライバは前記第２のドライバから入力したデータを前記通信部によって送信する機能を有する制御装置。
【請求項５】
請求項４に記載の制御装置であって、
前記第２のドライバは複数の階層で構成され、前記第２のドライバはアプリケーションプログラムから入力したデータを前記通信部によって送信するデータと同一形式に変換する階層から前記第１のドライバへ出力する機能を有する制御装置。
【請求項６】
請求項４に記載の制御装置を開発する開発システムであって、
ソフトウェア部品間のデータ入出力関係を記述するモジュール入出力記述部を有し、ソフトウェア部品一覧を記載したモジュール構成表とソフトウェア部品間の入出力関係の指定を入力とし、モジュール入出力記述部を出力する開発システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は制御装置に係り、例えば分散処理を実現するソフトウェアを少ない工数で構築するための、ソフトウェア構成とその作成方法に関する。
【背景技術】
【０００２】
従来より車両制御などの電子制御装置では、ＣＰＵ、ＲＯＭ、ＲＡＭ、信号入出力処理装置、通信処理装置などを内蔵したマイクロコンピュータ（以下、マイコンと呼ぶ）が用いられている。マイコンに搭載されるソフトウェアは、目的とする制御動作が行えるように、制御処理を行うアプリケーションプログラムと信号入出力処理装置や通信処理装置を制御するデバイスドライバによって構成される。そして近年、複数の電子制御装置をネットワークで接続し、データの送受信を行うことにより協調動作しながら制御対象全体（例えば車両全体）を制御する分散制御が実現されつつある。しかし、一般にそのような分散制御を行うソフトウェアは複雑で規模が大きく、多大な開発工数を要する。
【０００３】
分散制御ソフトウェアの開発工数を削減するものとして、ソフトウェアがアプリケーション層とインタフェース層と仮想センサ部と仮想アクチュエータ部と通信ドライバから構成され、インタフェース層と仮想センサ部の間に入力情報変換部を、インタフェース層と仮想アクチュエータ部の間に出力コントロール部をそれぞれ備えることを特徴とするソフトウェア構成が知られている（例えば特許文献１参照）。分散制御に関する処理を、アプリケーション層の下位に位置するインタフェース層に局所化することにより、アプリケーション層に対し通信相手の位置透過性を実現するとともに、アプリケーション層の再利用性を向上している。また、仮想センサ部からの入力データや仮想アクチュエータ部への出力データの形式変換処理を上記入力情報変換部および出力コントロール部に局所化することにより、アプリケーション層は一定の形式で上記入出力データを扱うことを可能にしている。その結果、センサやアクチュエータが変更され入出力データの形式が変更されても、上記入力情報変換部および出力コントロール部を変更するだけでよく、アプリケーション層の再利用性が向上される。
【０００４】
【特許文献１】特開２００１−２７０３９９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、通信を介して送受信するデータの形式が変更された場合、アプリケーション層を変更しなければならない場合がある。たとえばある制御装置Ａが仮想センサ部からの入力データを、通信を介して制御装置Ｂに送信する場合を考える。制御装置Ａに接続されたセンサが変更され入力データの形式が変わった場合でも、制御装置Ａの入力情報変換部を修正することにより、制御装置Ｂに送信するデータ形式をセンサの変更前と同一に保つことができる。その結果、制御装置Ｂのアプリケーション層は、制御装置Ａから受信するデータをある一定のデータ形式で処理することが可能であり、同アプリケーション層を変更する必要はない。しかし、何らかの理由により、制御装置Ａの入力情報変換部を修正できない場合には、制御装置Ｂのアプリケーション層は一定のデータ形式で処理することが不可能となり、同アプリケーション層を変更しなければならなくなる。上記理由としては、例えば制御装置Ａと制御装置Ｂの製造メーカが異なる場合がある。この場合、制御装置Ｂの製造メーカが作成するアプリケーション層の再利用性を維持するために、異なる製造メーカが製造する制御装置Ａの入力情報変換部を変更することは困難である。
【０００６】
本発明の目的は、通信を介して送受信するデータの形式が変更された場合でも、送受信側双方のアプリケーション層がある一定のデータ形式で処理することを可能にし、その結果として同アプリケーション層の再利用性を向上することである。
【課題を解決するための手段】
【０００７】
上記目的を実現するために、通信ドライバは受信したデータを入力情報変換部に出力する機能を有し、入力情報変換部は同データをアプリケーション層が処理可能な形式でアプリケーション層に出力するソフトウェア構成とする。また、アプリケーション層の下位に出力情報変換部（上記出力コントロール部に相当）を設け、出力情報変換部は送信するデータを通信ドライバへ出力する機能を有し、アプリケーション層は出力情報変換部に同データを出力し、出力情報変換部は通信を介して送信可能な形式で通信ドライバに出力するソフトウェア構成とする。
【発明の効果】
【０００８】
上記構成により、通信を介して送受信するデータの形式が変更された場合でも、送受信側双方のアプリケーション層がある一定のデータ形式で処理することが可能になり、同アプリケーション層の再利用性が向上する。また、アプリケーション層は通信を介して送受信するデータを、通信ドライバではなく、入力情報変換部および出力情報変換部に入出力することになる。したがって、アプリケーション層にとっては、あたかも自身の制御装置に接続されているセンサおよびアクチュエータに対しデータを入出力していることと同じである。すなわち、インタフェース層を設けることなく、アプリケーション層に対してセンサおよびアクチュエータの位置透過性が実現される。
【発明を実施するための最良の形態】
【０００９】
以下本発明の実施形態について説明する。図２は本発明が対象とする電子制御装置の例として自動車エンジン制御装置の一般的な構成を示している。コントロールユニット２０１はＣＰＵ２０２、ＲＯＭ２０３、ＲＡＭ２０４、ＡＤ変換器２０５、タイマ・パルスコントローラ２０６、通信コントローラ２０７、入出力ポート２０８等から構成される。コントロールユニット２０１には、水温センサ２２１、エアフローセンサ２２２、クランク角センサ２２３等のセンサや、インジェクタ２２４、点火プラグ２２５、電制スロットル２２６等のアクチュエータが入出力ポート２０７を介して接続され、コントロールユニット２０１がこれらの制御を行う。通信コントローラ２０７はＣＡＮ等のネットワーク２１０に接続され、コントロールユニット間で通信可能となっている。これらの制御する処理手順を記述したソフトウェアはＲＯＭ２０３およびＲＡＭ２０４に搭載され、ＣＰＵ２０２によって実行される。
【００１０】
図３は、ＣＰＵ２０２によって実行されるソフトウェア３０１の構成を示している。ソフトウェアは大きく、アプリケーションプログラム３０２、オペレーティングシステム３０３、センサドライバ３０４、アクチュエータドライバ３０７、通信ドライバ３１０から構成される。アプリケーションプログラム３０２はアプリケーションプログラミングインタフェースＡＰＩ３１１を通してオペレーティングシステム３０３、センサドライバ３０４、アクチュエータドライバ３０７、通信ドライバ３１０に対しデータや処理の受け渡しを行う。センサドライバ３０４は入力情報変換部３０５とハードウェア処理部３０６で構成され、アクチュエータドライバ３０７は出力情報変換部３０８とハードウェア処理部３０９で構成される。センサドライバ３０４の基本的な機能としては、ハードウェア処理部３０６がセンサから入出力ポート２０８を介して入力される信号を、ＡＤ変換器２０５を用いて電圧値に変換し、入力情報変換部３０８が電圧値を物理値に変換する。また、アクチュエータドライバ３０７の基本的な機能としては、出力情報変換部３０８がアプリケーションプログラム３０２からＡＰＩ３１１を介して受け付けた指示量をアクチュエータに対する出力信号に変換し、ハードウェア処理部３０９が同信号を、入出力ポート２０８を介してアクチュエータに出力する。
【００１１】
センサドライバおよびアクチュエータドライバの基本的な機能としては上記のとおりだが、本発明では図１および図５に示すように、通信ドライバに対しデータを入出力する機能も有している。図１はコントローラユニットＡ４０１に接続されている水温センサ４１１からの水温物理値を、ネットワーク２３０を介してコントローラユニットＢ４０２に送信する様子を示している。ここで第一の前提として、コントローラユニットＡ４０１のソフトウェアは何らかの理由により変更できないものとする。上記理由としては前述のように、例えばコントローラユニットＡ４０１を他メーカが製造している場合が挙げられる。第二の前提として、コントローラユニットＡ４０１は水温センサ４１１から得られる水温物理値について、単位がケルビン［Ｋ］の水温物理値に送信するものであり、コントローラユニットＢ４０２のアプリケーションプログラム３０２は水温センサから得られる水温物理値の単位を［℃］で扱っているものとする。この場合、コントローラユニットＡ４０１が通信ドライバを介して送信する水温物理値は、コントローラユニットＢ４０２において通信ドライバ３１０によって受信され、入力情報変換部３０５に渡される。入力情報変換部３０５は、アプリケーションプログラム３０２が水温物理値を［℃］で扱えるように通信ドライバ３１０から入力した水温物理値をケルビン［Ｋ］から［℃］に単位を変換し、アプリケーションプログラム３０２に渡す。これにより、単位がケルビンの水温物理値を受信するコントローラユニットＢ４０２のアプリケーションプログラム３０２を変更する必要がなくなり、その結果その再利用性を向上させることが可能となる。また、アプリケーションプログラム３０２は、センサドライバの入力情報変換部３０５から水温物理値を入力しているため、コントローラユニットＢ４０２に接続されている水温センサから水温物理値を得ていることと同じであり、水温センサの位置透過性が実現される。
【００１２】
図４はコントローラユニットＡ４０１に接続されているインジェクタ５１１に対しコントローラユニットＢ４０２からネットワーク２３０を介して噴射量を指令値として送信する様子を示している。ここで図１の場合と同様に、第一の前提として、コントローラユニットＡ４０１のソフトウェアは何らかの理由により変更できないものとする。第二の前提として、コントローラユニットＡ４０１はインジェクタ５１１に対する指令値として受け付ける噴射量の単位が［ｃｃ／ｓｅｃ］であり、コントローラユニットＢ４０２のアプリケーションプログラム３０２はインジェクタ５１１へ指令する噴射量の単位を［ｃｃ／ｍｉｎ］で扱っているものとする。この場合、コントローラユニットＢ４０２において、出力情報変換部３０８はアプリケーションプログラム３０２から受け付けた噴射量の単位を［ｃｃ／ｍｉｎ］から［ｃｃ／ｓｅｃ］に変換し、通信ドライバ３１０に渡す。したがって、コントローラユニットＡ４０１は単位が［ｃｃ／ｓｅｃ］である噴射量データを受信することができる。これにより、コントローラユニットＢ４０２において、単位が［ｃｃ／ｍｉｎ］の噴射量を出力情報変換部に渡すアプリケーションプログラム３０２を変更する必要がなくなり、その結果その再利用性を向上させることが可能となる。また、アプリケーションプログラム３０２は、アクチュエータドライバの出力情報変換部３０８へ噴射量を出力しているため、コントローラユニットＢ４０２に接続されているインジェクタへ噴射量を出力していることと同じであり、インジェクタの位置透過性が実現される。
【００１３】
図５は、センサドライバの入力情報変換部３０５をＣ言語で実装した例を示している。ｇｅｔＮｅｔＲｅｃｖＢｕｆ（）関数は通信ドライバ３１０が提供する関数であり、この例では、通信ドライバによって受信されたデータを、ｗａｔｅｒＴｅｍｐＩＤを基にｇｅｔＮｅｔＲｅｃｖＢｕｆ（）関数を用いて取得し、水温物理値の単位をケルビン［Ｋ］から［℃］に変換するプログラムコードの例である。
【００１４】
図６は、受信データを通信ドライバ３１０からセンサドライバ３０４へ提供する、通信ドライバの機能をＣ言語で実装した例を示している。この例では、通信ドライバが受信データをバッファｎｅｔＲｅｃｖＢｕｆ［］に格納している場合を示している。なお、通信ドライバによって受信されるデータをｎｅｔＲｅｃｖＢｕｆ［］に格納する方法は、例えば割り込みを用いる方法や、ポーリングを用いる方法がある。
【００１５】
図７は、センサドライバのＡＰＩをＣ言語で実装した例を示している。図７（ａ）はＡＰＩの本体を、図７（ｂ）はヘッダファイルを示している。アプリケーションプログラムは図７に示すようにヘッダファイル”ＳｅｎｓｏｒＡＰＩ．ｈ”をインクルードし、これらのＡＰＩ関数をコールすることにより、各種物理値を取得する。図７に示すように、アプリケーションプログラムは、自身のコントローラユニットに接続されているセンサからの物理値と通信を介して受信する物理値を同一形式で取得することができる。
【００１６】
図８は、水温物理値を取得して何らかの処理を行うアプリケーションプログラムをＣ言語で実装したプログラムコードの例を示している。通信を介して受信する水温物理値の形式が変更されても、図５に示すようなセンサドライバの入力情報変換部を変更することにより、水温物理値をある一定の形式で扱う図８に示すようなアプリケーションプログラムを変更しなくてもよい。また、水温センサが自身のコントローラユニットに接続されている場合においても、センサドライバのＡＰＩは変わらないため、アプリケーションプログラムのコードを変更しなくてもよい。
【００１７】
図９は、アクチュエータドライバの出力情報変換部３０８をＣ言語で実装した例を示している。ｓｅｔＮｅｔＳｅｎｄＢｕｆ（）関数は通信ドライバ３１０が提供するものであり、この例では、インジェクタに対する指令としてアプリケーションプログラムから受け付けた噴射量の単位を［ｃｃ／ｍｉｎ］から［ｃｃ／ｓｅｃ］に変換し、ｉｎｊｅｃｔｏｒＦｕｅｌＡｍｏｕｎｔＩＤを基にｓｅｔＮｅｔＳｅｎｄＢｕｆ（）関数を用いて通信ドライバに出力するプログラムコードの例である。なお、出力情報変換部による変換は、例えば、オペレーティングシステム３０３がある周期で起動するタスクによって実行される場合、通信ドライバ３１０によって実行される場合、アプリケーションプログラムによってＡＰＩを介して実行される場合等があり得る。
【００１８】
図１０は、送信データをアクチュエータドライバから受け付ける、前記ｓｅｔＮｅｔＳｅｎｄＢｕｆ（）関数をＣ言語で実装した例を示している。この例では、通信ドライバが送信データをバッファｎｅｔＳｅｎｄＢｕｆ［］に格納する場合を示している。通信ドライバは、ｎｅｔＳｅｎｄＢｕｆ［］に格納されたデータを通信プロトコルに従ったデータ形式に加工し、同通信プロトコルに従ったタイミングで特定の制御装置に送信する。
【００１９】
図１１は、アクチュエータドライバのＡＰＩをＣ言語で実装した例を示している。図１１（ａ）はＡＰＩの本体を、図１１（ｂ）はヘッダファイルを示している。アプリケーションプログラムは図１２に示すようにヘッダファイル”ＡｃｔｕａｔｏｒＡＰＩ．ｈ”をインクルードし、これらのＡＰＩ関数をコールすることにより、各種指令値をアクチュエータドライバに出力する。図１２に示すように、アプリケーションプログラムは、自身のコントローラユニットに接続されているアクチュエータへの指令値と通信を介して送信する指令値を同一形式で出力することができる。
【００２０】
図１２は、インジェクタに指令値として噴射量を出力しながら何らかの処理を行うアプリケーションプログラムをＣ言語で実装したプログラムコードの例を示している。通信を介して送信する噴射量の形式が変更されても、図９に示すようなアクチュエータドライバの出力情報変換部を変更することにより、噴射量をある一定の形式で扱う図１２に示すようなアプリケーションプログラムを変更しなくてもよい。また、インジェクタが自身のコントローラユニットに接続されている場合においても、アクチュエータドライバのＡＰＩは変わらないため、アプリケーションプログラムのコードを変更しなくてもよい。
【００２１】
図１３は、センサドライバ３０４およびアクチュエータドライバ３０７が３階層以上で構成されている場合におけるソフトウェア３０１の構成を示している。本実施例では、センサドライバ３０４は単位変換層１２０１、物理量変換層１２０２、フィルタリング層１２０３、ハードウェア処理層１２０４の４階層から構成され、アクチュエータドライバ３０７は単位変換層１２０５、出力信号変換層１２０６、出力補正層１２０７、ハードウェア処理層１２０８の４階層から構成される。センサドライバ３０４の各階層の基本的な機能としては、ハードウェア処理層１２０４がセンサから入出力ポート２０８を介して入力される信号を、ＡＤ変換器２０５を用いて電圧値に変換し、フィルタリング層１２０３が前記電圧値に対し雑音に関するフィルタリング処理を施し、物理量変換部１２０２がフィルタリング処理済み電圧値から物理量に変換し、単位変換層１２０１が物理量の単位を変換する。また、アクチュエータドライバ３０７の各階層の基本的な機能としては、単位変換層１２０５がアプリケーションプログラム３０２からＡＰＩ３１１を介して受け付けた指示量の単位を変換し、出力信号変換層１２０６が前記指示量をアクチュエータに対する出力信号に変換し、出力補正層１２０７が制御対象の各種状態に応じて前記出力信号を補正し、ハードウェア処理層１２０８が補正済み前記信号を、入出力ポート２０８を介してアクチュエータに出力する。
【００２２】
センサドライバおよびアクチュエータドライバの各階層の基本的な機能としては上記のとおりだが、本発明では図１４および図１５に示すように、各階層が通信ドライバに対しデータを入出力する機能も有している。図１４はコントローラユニットＡ４０１に接続されている水温センサ４１１に関するデータを、ネットワーク２３０を介してコントローラユニットＢ４０２に送信する様子を示している。ここで実施例１と同様、第一の前提として、コントローラユニットＡ４０１のソフトウェアは何らかの理由により変更できないものとする。第二の前提として、コントローラユニットＢ４０２のアプリケーションプログラム４３１は水温センサから得られる水温物理値の単位を［℃］で扱っているものとする。そして以下では、コントローラユニットＡ４０１から送信される水温センサ４１１に関するデータが、（１）単位がケルビン［Ｋ］の水温物理値である場合と、（２）単位が［ｍＶ］の電圧値である場合の、２通りの場合について実施例を説明する（尚、本文中「（１）」とあるのは、図では丸の中に１を示したものとする。以下同様）。（１）の場合、コントローラユニットＡ４０１が通信ドライバを介して送信する水温物理値は、コントローラユニットＢ４０２において通信ドライバ３１０によって受信される。ここで、受信したデータをアプリケーションプログラム３０２で扱うためにはその単位を変換するだけでよいので、受信データは単位変換層１２０１に渡される。単位変換層１２０１は、通信ドライバ３１０から入力した水温物理値をケルビン［Ｋ］から［℃］に単位を変換し、アプリケーションプログラム３０２に渡す。これにより、実施単位がケルビンの水温物理値を受信するコントローラユニットＢ４０２のアプリケーションプログラム４３１を変更する必要がなくなり、その結果その再利用性を向上させることが可能となる。また、アプリケーションプログラム４３１は、センサドライバから水温物理値を入力しているため、コントローラユニットＢ４０２に接続されている水温センサから水温物理値を得ていることと同じであり、水温センサの位置透過性が実現される。次に（２）の場合、コントローラユニットＡ４０１が通信ドライバを介して送信する電圧値は、コントローラユニットＢ４０２において通信ドライバ３１０によって受信される。ここで、受信したデータをアプリケーションプログラム３０２で扱うためには水温物理値に変換する必要があるため、物理量変換層１２０２に渡される。物理量変換層１２０２は通信ドライバ３１０から入力した電圧値を水温物理値に変換し、単位変換層１２０１に渡される。そして最終的に、単位が［℃］の水温物理値がアプリケーションプログラム３０２に渡される。これにより、電圧値を受信する場合においても、（１）の場合と同様、コントローラユニットＢ４０２のアプリケーションプログラム４３１の再利用性を向上と、水温センサの位置透過性が実現される。
【００２３】
図１５はコントローラユニットＡ４０１に接続されているインジェクタ５１１に対しコントローラユニットＢ４０２からネットワーク２３０を介して噴射量を指令値として送信する様子を示している。ここで図１４の場合と同様に、第一の前提として、コントローラユニットＡ４０１のソフトウェアは何らかの理由により変更できないものとする。そして第二の前提として、コントローラユニットＢ５０２のアプリケーションプログラム３０２はインジェクタ５１１へ指令する噴射量の単位を［ｃｃ／ｍｉｎ］で扱っているものとする。そして以下では、コントローラユニットＡ４０１が受け付けるインジェクタ５１１に対するデータが、（１）単位が［ｃｃ／ｓｅｃ］の噴射量である場合と、（２）単位が［μｓｅｃ］のパルス幅である場合の、２通りについて実施例を説明する。（１）の場合、コントローラユニットＢ４０２において、単位変換層１２０５はアプリケーションプログラム３０２から受け付けた噴射量の単位を［ｃｃ／ｍｉｎ］から［ｃｃ／ｓｅｃ］に変換する。この時点でコントローラユニットＡ４０１が受け付けるデータ形式に変換できたので、通信ドライバ３１０に渡す。したがって、コントローラユニットＡ４０１は単位が［ｃｃ／ｓｅｃ］である噴射量データを受信することができる。これにより、コントローラユニットＢ４０２において、単位が［ｃｃ／ｍｉｎ］の噴射量を出力情報変換部に渡すアプリケーションプログラム３０２を変更する必要がなくなり、その結果その再利用性を向上させることが可能となる。また、アプリケーションプログラム３０２は、アクチュエータドライバの出力情報変換部１２０５へ噴射量を出力しているため、コントローラユニットＢ４０２に接続されているインジェクタへ噴射量を出力していることと同じであり、インジェクタの位置透過性が実現される。
【００２４】
図１６は、センサドライバの単位変換層１２０１をＣ言語で実装した例を示している。図１６（ａ）は、図１５においてコントローラユニットＡ４０１から送信される水温センサ４１１に関するデータについて（１）単位がケルビン［Ｋ］の水温物理値である場合における実装例である。ｇｅｔＮｅｔＲｅｃｖＢｕｆ（）関数は通信ドライバが提供する関数であり、この例では、通信ドライバによって受信されたデータをｗａｔｅｒＴｅｍｐＩＤを基にｇｅｔＮｅｔＲｅｃｖＢｕｆ（）関数を用いて取得し、水温物理値の単位をケルビン［Ｋ］から［℃］に変換するプログラムコードの例である。一方、図１６（ｂ）は、（２）単位が［ｍＶ］の電圧値である場合における実装例である。ｕｐｄａｔｅＬ３ＷａｔｅｒＴｅｍｐｅｒａｔｕｒｅ（）関数は、物理量変換層１２０２に対し電圧値から物理値への変換処理を起動する関数である。また、ｇｅｔＬ３ＷａｔｅｒＴｅｍｐｅｒａｔｕｒｅ（）関数は物理量変換層１２０２から水温物理値を取得する関数である。この例では、物理量変換層１２０２から取得した水温物理値の単位をケルビン［Ｋ］から［℃］に変換するプログラムコードの例である。
【００２５】
図１７は、図１４における（２）単位が［ｍＶ］の電圧値である場合における、センサドライバの物理量変換層１２０２をＣ言語で実装した例を示している。図１７（ａ）は水温センサからの電圧値を水温物理値へ変換するｕｐｄａｔｅＬ３ＷａｔｅｒＴｅｍｐｅｒａｔｕｒｅ（）関数の実装例である。ｇｅｔＬ３ＷａｔｅｒＴｅｍｐＴａｂｌｅ（）関数は、電圧値を基にマップテーブルから物理値を取得する関数である。図１７（ｂ）は水温物理値を単位変換層１２０１に提供するｇｅｔＬ３ＷａｔｅｒＴｅｍｐｅｒａｔｕｒｅ（）関数の実装例である。
【００２６】
図１８は、アクチュエータドライバの単位変換層１２０５をＣ言語で実装した例を示している。図１８（ａ）は、図１５におけるコントローラユニットＡ４０１が受け付けるインジェクタ５１１に対するデータについて（１）単位が［ｃｃ／ｓｅｃ］の噴射量である場合における実装例である。ｓｅｔＮｅｔＳｅｎｄＢｕｆ（）関数は通信ドライバ３１０が提供するものであり、この例では、インジェクタに対する指令としてアプリケーションプログラムから受け付けた噴射量の単位を［ｃｃ／ｍｉｎ］から［ｃｃ／ｓｅｃ］に変換し、ｉｎｊｅｃｔｏｒＦｕｅｌＡｍｏｕｎｔＩＤを基にｓｅｔＮｅｔＳｅｎｄＢｕｆ（）関数を用いて通信ドライバに出力するプログラムコードの例である。図１８（ｂ）は、（２）単位が［μｓｅｃ］のパルス幅である場合における実装例である。ｕｐｄａｔｅＬ３ＩｎｊｅｃｔｏｒＦｕｅｌＡｍｏｕｎｔ（）関数は、出力信号変換層１２０６に対し噴射量からパルス幅への変換処理を起動する関数である。この例では、インジェクタに対する指令としてアプリケーションプログラムから受け付けた噴射量の単位を［ｃｃ／ｍｉｎ］から［ｃｃ／ｓｅｃ］に変換し、出力信号変換層１２０６に出力するプログラムコードの例である。
【００２７】
図１９は、図１５におけるコントローラユニットＡ４０１が受け付けるインジェクタ５１１に対するデータについて（２）単位が［μｓｅｃ］のパルス幅である場合における、アクチュエータドライバの出力信号変換層１２０６をＣ言語で実装した例を示している。この例では、ｃａｌｃＬ３ＩｎｊｅｃｔｏｒＷｉｄｔｈ（）関数を用いて噴射量からパルス幅を計算し、ｕｐｄａｔｅＬ２ＩｎｊｅｃｔｏｒＷｉｄｔｈ（）関数を用いて前記パルス幅を出力補正部１２０７に出力するプログラムコードの例である。
【００２８】
なお、本実施例において、センサドライバおよびアクチュエータドライバのＡＰＩ、アプリケーションプログラムをＣ言語で実装したプログラムコード例は、実施例１と同様となる。また、本実施例では、センサドライバの単位変換層１２０１および物理量変換層１２０２、アクチュエータドライバの単位変換層１２０５および出力信号変換層１２０６の実装例のみを示したが、センサドライバのフィルタリング層１２０３およびハードウェア処理層１２０４、アクチュエータドライバの出力補正層１２０７およびハードウェア処理層１２０８の実装方法も同様である。
【００２９】
図２０は、実施例２におけるセンサドライバの単位変換層１２０１をＣ言語で実装した別の例である。実施例１では図１６に示すように、（１）単位がケルビン［Ｋ］の水温物理値である場合や（２）単位が［ｍＶ］の電圧値である場合によって、単位変換層を変更する必要があった。図２０は、単位変換層についてそのような変更の必要性を排除した実装例である。図２０（ａ）は単位変換層を実装したプログラムコードを示している。ここでは、ｕｐｄａｔｅＬ３ＡｂｓｔｒａｃｔＷａｔｅｒＴｅｍｐｅｒａｔｕｒｅ（）関数およびｇｅｔＬ３ＡｂｓｔｒａｃｔＷａｔｅｒＴｅｍｐｅｒａｔｕｒｅ（）関数を用いて単位変換を行っている。これらの関数は上記（１）の場合には通信ドライバ３１０から物理値を取得する処理、一方上記（２）の場合には物理量変換層１２０２から物理値を取得する処理を行う必要がある。そこで、図２０（ｂ）および（ｃ）に示すように、Ｃ言語のマクロを用いて上記関数の具体的な処理内容を記述する。これらをモジュール入出力記述部と呼ぶ。この例では、ＷａｔｅｒＴｅｍｐｅｒａｔｕｒｅ．ｈがモジュール入出力記述部の一つとなる。図２０（ｂ）は上記（１）の場合における水温センサドライバのモジュール入出力記述部を示している。図２０（ａ）のソースコードはモジュール入出力記述部であるＷａｔｅｒＴｅｍｐｅｒａｔｕｒｅ．ｈをインクルードすることにより、Ｃ言語のコンパイラによって図１６（ａ）と同一の関数になる。一方、図２０（ｃ）は上記（２）の場合における水温センサドライバのモジュール入出力記述部を示している。これにより、図２０（ａ）のソースコードはＣ言語のコンパイラによって、図１６（ｂ）と同一の関数になる。
【００３０】
なお、上記ｕｐｄａｔｅＬ３ＡｂｓｔｒａｃｔＷａｔｅｒＴｅｍｐｅｒａｔｕｒｅ（）関数のように、モジュール入出力記述部に記載されたＣ言語のマクロによって具体的な処理内容に変換される関数を、以下では抽象関数と呼ぶことにする。
【００３１】
図２１は、実施例２におけるアクチュエータドライバの単位変換層１２０５をＣ言語で実装した別の例である。実施例２では図１７に示すように、（１）単位が［ｃｃ／ｓｅｃ］の噴射量である場合や（２）単位が［μｓｅｃ］のパルス幅である場合によって、単位変換層を変更する必要があった。図２１は、単位変換層についてそのような変更の必要性を排除した実装例である。図２１（ａ）は抽象関数を用いて単位変換層を実装したプログラムコードであり、図２１（ｂ）および（ｃ）はそれぞれ上記（１）の場合および（２）の場合におけるモジュール入出力記述部としてのＩｎｊｅｃｔｏｒ．ｈのプログラムコードを示している。
【００３２】
以上のように、抽象関数を用いてセンサドライバおよびアクチュエータドライバの各階層を実装するとともに、モジュール入出力記述部を設けることにより、通信を介して送受信するデータの形式が変更された場合でも、前記各階層を変更する必要がなく、モジュール入出力記述部のみを変更すればよい。
【００３３】
図２２は、モジュール入出力記述部を設けた場合における、ソフトウェア開発手順および開発環境の例を示している。図２０（ａ）や図２１（ａ）に示すような作成済みドライバ部品群（３１０、２３０５〜２３１２）は、ドライバリポジトリ２３０４に登録され保存される。ソフトウェア開発時に必要なドライバ部品群は前記ドライバリポジトリ２３０４から取得する。モジュール入出力記述部２３０３は次のように生成される。まず、ドライバリポジトリ２３０４に登録されているドライバ部品群を基に、モジュール構成表２３０１を生成する。モジュール構成表は、各ドライバ部品に属する関数名とその関数が使用している抽象的関数の一覧で構成され、例えば図２３に示すようなＸＭＬで記述される。次に、モジュール入出力記述部生成装置２３０２を用いて、モジュール構成表２３０１を基にモジュール入出力記述部２３０３を生成する。モジュール入出力記述部生成装置２３０２は、モジュール構成表２３０１を基に、ドライバ部品間の入出力関係の設定を、ソフトウェア開発者から受け付けることにより、同入出力関係を決定しモジュール入出力記述部２３０２を生成する。最終的に、ドライバリポジトリ２３０４から取得したドライバ部品群３１０、２３０５〜２３１２およびモジュール入出力記述部２３０２を、コンパイラ２３１３を用いてコンパイルし、実行形式ファイル２３１４を得る。なお、モジュール入出力記述部生成装置２３０２、ドライバリポジトリ２３０４、コンパイラ２３１３は例えば、キーボード、マウス、ネットワーク等の入力手段とＣＲＴ等の表示手段、ハードディスク等の記憶手段を備えた計算機を用いて実現できる。
【００３４】
図２４は、モジュール入出力記述部生成装置２３０１が、モジュール構成表２３０１を基に、ドライバ部品間の入出力関係の設定を、ソフトウェア開発者から受け付ける画面例を示している。水温センサドライバの設定画面２４０３やインジェクタドライバの設定画面２４０４等がタブで選択可能になっており、ソフトウェア開発者は、ドライバ部品間の入出力関係を表す矢印２４０２等をマウス等のポインタ２４０１を操作することにより、ドライバ部品間を接続する。モジュール入出力記述部生成装置２３０１は、モジュール構成表２３０１を基に図２４に示すような画面を表示し、ソフトウェア開発者による操作を受け付けた後、ドライバ部品間を接続する前記矢印２４０２を基に、ドライバ部品間の入出力関係を受け付ける。
【００３５】
尚、本発明は、複数のコントロールユニットをネットワークで接続し、データの送受信を行うことにより協調動作しながら制御対象を制御する、あらゆるシステムに適用できる。
【図面の簡単な説明】
【００３６】
【図１】センサ情報を受信する場合におけるデータフローを示す。
【図２】コントロールユニットのハードウェア構成図を示す。
【図３】実施例１のソフトウェア構成図を示す。
【図４】アクチュエータ情報を送信する場合におけるデータフローを示す。
【図５】センサドライバの入力情報変換部の実装例を示す。
【図６】通信ドライバのデータ出力機能の実装例を示す。
【図７】センサドライバのＡＰＩの実装例を示す。
【図８】アプリケーションプログラムの実装例を示す。
【図９】アクチュエータドライバの出力情報変換部の実装例を示す。
【図１０】センサドライバのデータ入力機能の実装例を示す。
【図１１】アクチュエータドライバのＡＰＩの実装例を示す。
【図１２】アプリケーションプログラムの実装例を示す。
【図１３】実施例２のソフトウェア構成図を示す。
【図１４】センサ情報を受信する場合におけるデータフローを示す。
【図１５】アクチュエータ情報を送信する場合におけるデータフローを示す。
【図１６】センサドライバの単位変換層の実装例を示す。
【図１７】センサドライバの物理量変換層の実装例を示す。
【図１８】アクチュエータドライバの単位変換層の実装例を示す。
【図１９】アクチュエータドライバの出力信号変換層の実装例を示す。
【図２０】センサドライバの単位変換層およびモジュール入出力記述部の実装例を示す。
【図２１】アクチュエータドライバの単位変換層およびモジュール入出力記述部の実装例を示す。
【図２２】実施例３のソフトウェア開発手順および開発環境を示す。
【図２３】モジュール構成表の例を示す。
【図２４】モジュール入出力記述部生成装置の画面例を示す。
【符号の説明】
【００３７】
２３０…ネットワーク、３０２…アプリケーションプログラム、３０４…センサドライバ、３０５…入力情報変換部、３１０…通信ドライバ、４０１…コントロールユニットＡ、４０２…コントロールユニットＢ、４１１…水温センサ。
【図１】
2008059312.tif 000003
【図２】
2008059312.tif 000004
【図３】
2008059312.tif 000005
【図４】
2008059312.tif 000006
【図５】
2008059312.tif 000007
【図６】
2008059312.tif 000008
【図７】
2008059312.tif 000009
【図８】
2008059312.tif 000010
【図９】
2008059312.tif 000011
【図１０】
2008059312.tif 000012
【図１１】
2008059312.tif 000013
【図１２】
2008059312.tif 000014
【図１３】
2008059312.tif 000015
【図１４】
2008059312.tif 000016
【図１５】
2008059312.tif 000017
【図１６】
2008059312.tif 000018
【図１７】
2008059312.tif 000019
【図１８】
2008059312.tif 000020
【図１９】
2008059312.tif 000021
【図２０】
2008059312.tif 000022
【図２１】
2008059312.tif 000023
【図２２】
2008059312.tif 000024
【図２３】
2008059312.tif 000025
【図２４】
2008059312.tif 000026