添付する図面を参照して本発明の望ましい実施形態を以下に説明する。実施形態の特徴や側面を変更または組み合わせて、本発明の別実施形態を形成することができる。
コンピュータを物理システムへリンクするCyber−Physical System(CPS)は、安全要件が厳しいプロセスを監視および制御するために用いられる。すなわち、故障すると多大な被害や損害を生じさせ得るプロセスである。安全重視のシステムは、離散(コンピュータ)領域とアナログ(制御)領域の双方においてよく研究されている。開発された技術は主に、特定の離散領域またはアナログ領域において適用される。Cyber−Physical Systemはこれら双方の領域にかかっているので、個々の領域にフォーカスするとシステムレベルにギャップが生じ、両領域間で複雑に相互やり取りすると、統合CPSの物理部分またはデジタル部分を考慮するのみでは分析できないエラーが生じ得る。
Cyber−Physical System(CPS)は、輸送システム、電力システム、その他安全重視のシステムにおいて用いられることが増えている。CPSを用いて、物理アクチュエータを通じた物理現象を監視および制御(アナログ)する。物理アクチュエータは、安全重視コンピュータシステムによって操作される(デジタル)。システムの安全を確保してシステムに対するまたは動作環境に対する被害を防ぐため、このプロセスは、ターゲットシステム動作を正確に監視し、アクチュエータを正確に操作することが必要である。
その結果、安全重視CPSにおいては、離散特性と連続特性の双方を考慮して正確な動作を保証する堅牢な検証技術が研究されてきた。しかし、これら技術は個々の側面にフォーカスしているのが通常なので、離散処理と連続動作との間の複雑な相互作用により、複雑なシステムレベルバグを引き起こす可能性がある。
例えば車両ブレーキ制御システムは、所与のシーケンスとタイミングの組み合わせの下で特定の運転者操作と特定の車両挙動の組み合わせによってのみ生じる、発見することが困難な安全性関連のバグを有している。重要なCPSにおける安全検証要件は、述べるのは容易であるものの、従来のエンジニアリング手法を用いて全てのあり得るコンピュータ動作と制御相互作用をカバーするのは現実的でない。これら複雑な制御/コンピュータ動作の相互作用により、タイミングバグやシーケンスバグが生じ、これは発見することが特に困難である。また設計エンジニアは離散制御ドメインまたはコンピュータ動作ドメインにおいてのみ詳細な知識を有していることがよくあるので、この問題を非常に複雑にしている。
実施形態によれば、安全重視CPSにおいて実用可能な形式検証プラットフォーム/システムを用いることを提案する。提案する検証システムは、システムモデルの安全関連プロパティをチェックすることにより、システムレベルバグを発見することができる。システムモデルは、記号的実行ベースの形式検証に基づき、制御ソフトウェアとプラントソースコードを組み合わせることにより、制御システムの動作をシミュレートする。
実施形態の主要な側面は、以下に関するものである:1)安全重視CPSにおける実用可能な形式検証プロセスを構築する、2)安全重視CPSにおけるシステムモデル構築方法を開発する、3)安全重視CPSのシステム入力についてのシンボル定義を明確にする、4)安全重視CPSにおいてアサート命令を用いてプロパティ定義を明確にする、5)実際の車両ブレーキ制御システムの安全検証に関するケーススタディを通じて、システムレベルバグ検出を確立する、および/または、6)安全重視CPSにおける実用可能な最適化プロセスを構築する。
実施形態において、記号的実行を利用することを提案する。記号的実行ベースの形式検証により、ユーザはターゲットソースコードのエラーを生じさせる入力値ケースを効率的に発見することができる。検証プロセスは、ユーザが条件分岐(パス条件)を見てシンボルとして定義した変数値の変更によって生じ得る全ての影響を検査するからである。その結果、ユーザが検証ターゲットの入力変数をシンボルとして定義し、アサートコードとしてエラーを検出する負プロパティのような条件とともに分岐命令を挿入すると、ターゲットがそのプロパティを満たさない場合、検証プロセスはエラーを生じさせる入力ケースを発見する。
記号的実行ベースの形式検証は、検証ターゲットのプログラムロジックを分析し、シンボルに影響する数式を抽出する。検証プロセスは、その数式にしたがって個々の分岐についての制約条件を生成する。制約条件が複数のシンボルに関連する場合、検証プロセスはこれら数式を統合することにより制約条件を生成する。最後に検証プロセスは、制約条件を解くソルバを用いて、制約条件を満たすシンボルの固定値を提供する。これにより、プログラムがエラーパスに到達すると検証プロセスはエラーテストケースを通知することができるので、検証ターゲットのあり得る動作を全て論理的にカバーし、効率的な検証技術を提供することができる。
実施形態において、提案するプロセスにより、制御システム全体を検証することができる。プロセスにおいて、制御ソフトウェア、プラントコード、安全要件、および/またはシステム情報を組み合わせることにより、制御システム動作をシミュレートするシステムモデルを構築する。次に、安全要件違反を検出するプロパティにしたがって、シンボルシステム入力を用いてシステムモデル動作をチェックする。プラントコードは、プラント動作ロジックを有するコードに対応する。これは例えば、HILSデバイスの依存性コードを除き、HILSのプラントコードから抽出することができる。さらに、提案する検証プロセスを実現する形式検証プラットフォーム(検証システムとして)を提案する。この検証システムは、所与の制御ソフトウェア、HILSのプラントコード、安全要件、およびシステム情報から、システムモデルを自動的に生成することができる。システム情報は、システム入力、タスク実行期間、および/または、プラント離散時間に関連する。記号的実行ベースの形式検証により、システムはシステムモデルの安全検証を実施することができる。
図1は、実施形態に基づく検証システムの概略図を示す。検証システム1は、コンピュータ2を備える。コンピュータ2は演算ユニット3(例えば1以上のCPU)とメモリ4を有し、メモリ4はデータと演算ユニット3が実行するプログラムを格納するように構成されている。これはオペレーティングシステムプログラムを含む。メモリは揮発性メモリおよび/または不揮発性メモリを含み、例えばRAM、ROM、キャッシュメモリ、ハードディスクストレージ、および/またはフラッシュメモリなどの異なるメモリユニットを含むこともできる。
メモリ4は、システム検証ツール5と記号的実行ベース検証ツール6を格納する。記号的実行ベース検証ツール6は例えば、EXE、KLEE、CRESTに基づく記号的実行ベース検証ツールである(例えば、C.CadarとK.Senによる“Symbolic Execution for Software Testing:Three Decades Later”)。
さらに検証システム1は、ユーザ入力を受け取る入力デバイス8(例えばキーボード、キーパッド、マウス、タッチパッド、および/またはタッチスクリーン)、およびユーザに対してスクリーン上で情報を提供するディスプレイ9を備える。入力デバイス8とディスプレイ9は、コンピュータ2の入出力ユニット7によって検証コンピュータ2に接続されている。
本明細書において、2つのタイプのデータを区別する:情報データとコードデータである。情報データは、パラメータ、入出力パラメータ、パラメータ値、パラメータ間の関係、などの情報を示すデータタイプである。情報データの形式は限定されない。一方でコードデータは、C、C++、PERL、Postscript、Java、Javascriptなどのプログラム言語のコードとして記述されており、個々のプログラム言語のルールに準じる。制御データは、入力パラメータに依拠し出力パラメータを提供する機能を定義する。これは例えば既定の計算式に基づく。コンパイラを用いることにより、コードデータを演算ユニット3が実行できる実行可能機能へ変換することができる。
図2は、図1に基づく検証システムにおけるデータフロー構造を示す。図2に示すように、以下の入力データを例示する:制御ソフトウェアコードデータ502(例えば1以上のECUからのソフトウェアソースコード);プラントシミュレーションコードデータ503(例えばSimulinkなどのコードジェネレータが生成したプラントソースコード);コラボレーション情報データ504(システム構造の情報を示す);システム入力情報データ505(システム入力の情報を示す);ユーザが提供する検証要件情報データ506(1以上の検証要件の情報を示す)。
上記入力データは、システム検証ツール5のシステムモデル構築器501に対して入力される。システム構築器501は、入力データに基づきシステムモデル507を生成するように構成されている。入力データとは具体的に、ソフトウェアコードデータ502、プラントシミュレーションコードデータ503、コラボレーション情報データ504、システム入力情報データ505、検証要件情報データ506である。
生成されたシステムモデル507は、記号的実行ベース検証ツール6に対して入力され、記号的実行ベースの検証(例えば、上述したKLEE、EXE、またはCRESTなどの既知の記号的実行ベース検証ツールに基づいて)を実施する。記号的実行ベース検証ツール6は、検証結果602を出力する。
上記検証について、以下に述べる被制御システムである車両ブレーキ制御システムとともに説明する。ただし、検証プロセスはブレーキ制御システムに限定されるものではなく、様々な被制御システム/プラントに対して適用することができる。例えば、1以上の電子制御ユニット、1以上のアクチュエータ、1以上のセンサを備え、各前記センサは個々のセンサ信号を少なくとも1つの前記電子制御ユニットに対して入力するように構成され、各前記アクチュエータは少なくとも1つの前記電子制御ユニットからの個々の制御信号に応じて動作するように構成され、各前記電子制御ユニットは個々の制御プログラムを実行して入力センサ信号に基づき前記1以上のアクチュエータに対して1以上の制御信号を出力するように構成された、被制御システムである。
図3Aは被制御システムの例を示し、図3Bは個々の被制御システムのモデル例を示す。ブレーキ制御システムは、2つの電子制御ユニットを備える。すなわちブレーキ制御ユニット502(BCU502)と電子安定制御ユニット502(ESC502)である。これらは通信ネットワーク(例えばシステムバスまたはController Area Network(CAN))を介して通信可能に接続されている。ブレーキ制御ユニット502は、ブレーキペダルから入力を受け取り(ペダルイベント)、ブレーキペダルからの入力に基づきアクチュエータとしてブレーキキャリパ503を制御し、ブレーキキャリパ503に対して加えられる油圧を介してブレーキ力を生成する。
被制御システムは、油圧システムにおける油圧を検出する圧力センサを有する。油圧システムのバルブはESC502によって制御され、ESC502は車両がサイドスリップ状態(サイドスリップイベント)にあるか否かを検出するセンサから入力を受け取り、車両のサイドスリップが検出された場合に限りその入力に基づき油圧を介してブレーキキャリパ503を制御する。
したがってBCU502とESC502は、「共有する」油圧に基づきブレーキキャリパ503を制御する。BCUおよびESC502の制御状態は、この2つの電子制御ユニット間で送受信される。始めに、運転者がブレーキペダルを押したことが検出され、これが「ペダルイベント」としてBCU502に対して入力され、BCU502は検出された運転者のペダルストロークに基づき油圧を圧縮するよう指示し、油圧制御によりブレーキキャリパ503を駆動する。
「サイドスリップイベント」が検出されない限りESC502は動作しないが、「サイドスリップイベント」が検出されESC502に対して入力されると即座に、ESCはブレーキキャリパ503の制御を引き継ぐ。すなわち、ESC502はその制御状態をBCU502に対して送信し、BCU502はこれによりブレーキキャリパ503の制御を停止し(すなわち、BCU502はこのような状況においては動作しない)、ESC502はバルブを閉じる(油圧システムのBCU側に対する逆流を防止するため)とともに、バルブのBCU側の油圧システムからの油流(例えばオイル)を吸収することによりバルブの油圧ダウンストリーム(ブレーキキャリパ側)を増やすよう指示する。
車両が再び安定状態になったことが検出されたとき(サイドスリップがもう起こらない)、ESC502はバルブを再開するよう指示し、新たな制御状態をBCU502に対して送信する。これによりBCU502は再び制御を引き継ぎ、ESC502は少なくとも新たなサイドスリップイベントが検出されるまで制御を停止する。
しかし通常のシステムにおいて、BCU502とESC502は個々の独立した制御ソフトウェアコードに基づき動作し、個々の制御ソフトウェアについて信頼性を検証し機能を訂正する(すなわち、個々の制御ソフトウェアコード自身にバグがない)だけでは十分でない。複数の電子制御ユニットの共同動作によりシステム全体としての制御動作不良が生じ得ることを考慮する必要がある。
例えばシステムによっては、BCU502は油流のリークを検出する制御を追加的に実装している場合がある。これにより、油リークに起因して油圧システムの圧力が通常以下に下がったことを検出した場合におけるブレーキ制御コマンドを増やしている。運転者はこれにより、リークが発生した場合であっても安全のためスピードを落とすことができる。
図3Aのシステムにおいて、BCU502とESC502の制御ソフトウェアコードが個別に不具合/バグを有していない場合であっても、これはシステム全体バグを生じさせる場合がある。例えばサイドスリップイベントによりESC502が制御を引き継ぎ、車両が安定してその制御を停止した場合、BCU502はESC502から受け取った状態情報に基づき再び制御を引き継ぐ。しかし、ESCによる制御の間に液体がバルブの上流側/BCU側から吸収されているため、圧力低下を検出する場合がある。これにより、液体リークを検出したものと想定して(実際には起こっていない)、誤って高い圧力を加える可能性がある。このとき液体リーク制御は偶発的に油圧を上昇させるよう制御し、ブレーキ力を不意に生成させる可能性がある。
複数の電子制御ユニットが共同動作する場合における連携接続に起因して生じるこのような誤制御は、単一の電子制御ユニットの制御ソフトウェアを個別にテストする既知のソフトウェア検証技術においては、検出することができない。例えば1つの電子制御ユニットにおけるHardware−In−The−Loopシステム検証(HIL)がこれに当たる。
図4は、図3AのBCUの制御ソフトウェアコードデータ502を示す。制御ソフトウェアコードデータ502は、関数BCU_software_execution_1ms()を定義する。これは、図3AのBCUの1ms周期の制御機能に対応する。すなわちBCUは、1msサイクル毎に制御機能を実行する。
関数BCU_software_execution_1ms()を実行するときの第1入力パラメータとして、制御ソフトウェアコードデータ502は入力パラメータBCU_input_ESC_statusを受け取る。このパラメータは例えば1または0の値をとり、ESC制御の状態を示す。例えば0はESC制御が動作してないことを示し、1はESC制御が動作していることを示す。入力パラメータBCU_input_ESC_statusが0である場合、BCU制御機能が実行され、そうでなければ(例えば入力パラメータBCU_input_ESC_statusが1である場合)BCUはその1msサイクルの間は動作しない。
BCU_input_ESC_statusが0であることを検出した場合、BCUの制御ソフトウェアコードデータ502は、入力パラメータBCU_input_pedal_stroke(ユーザによるブレーキペダルのペダルストロークを検出するセンサのセンサ値を示す)とBCU_input_hydraulic_pressure(油圧システムのBCU側における圧力を検出する圧力センサのセンサ値を示す)の比を求めることにより、パラメータ「ratio」を計算する。具体的には、油圧システムの液体リークの場合において、ペダルストロークが大きい場合であっても、検出した圧力は小さい。
計算した「ratio」の値が例えば2未満であった場合(ratio<2)、通常ブレーキ制御を実行する。この場合、出力パラメータBCU_output_brake_control_commandは、ブレーキペダルのペダル位置に基づき計算される(この場合:software_input_pedal_sensor_valueは、上述のパラメータBCU_input_pedal_stroke_valueに等しい)。計算されたBCU_output_brake_control_commandを用いて、油圧システムの圧力を制御するアクチュエータを駆動し、これによりブレーキキャリパを駆動する。
一方で計算したratioが2未満でない場合、液体リークが生じていると想定され、フェールセーフモードが実行される。フェールセーフモードにおいては、BCU_output_brake_control_commandは安全のため高い値で出力される。ここでは説明を簡単にするため固定値10を用いる。実際のフェールセーフモードは、状況に応じて(例えば別のセンサ入力に基づき)可変の高出力コマンドを出力すべきであることを理解されたい。
BCU制御を要約すると、BCUは、液体リークが生じておらずESCが動作していない場合、運転者のペダルストロークの位置を示すペダルセンサ値にしたがって、ブレーキ制御コマンドを計算することができる。一方でESCが制御を引き継いだ場合(すなわちBCU_input_ESC_statusの場合)、BCUは動作せず、ブレーキ制御コマンドを出力しない。またBCU制御は、ペダルストロークと油圧の比較に基づき油圧システムにおける液体リークを検出するように構成された、液体リーク検出機能を提供する。
図5は、図3AのESCの制御ソフトウェアコードデータ502の一部を示す。ESCの制御ソフトウェアコードデータ502は、関数ESC_software_execution_1ms()を定義する。この関数は、図3AのESCの1ms周期の制御機能に対応する。すなわちESCは、1msサイクル毎に制御機能を実行する。ESCのサイクル時間は本例において上記BCUのサイクル時間と同じであるが、本発明はサイクル時間が同じ電子制御ユニットを有するシステムに対して適用することに限定されるものではなく、以下に説明するようにシステム同期に応じて異なるサイクル時間を有するシステムに対して適用できることを付言しておく。
関数ESC_software_execution_1ms()は、入力パラメータcar_sideslip_eventを受け取る。この入力パラメータは、車両のサイドスリップが生じたか(パラメータcar_sideslip_eventが1)、または車両が安定であるか(サイドスリップなし、パラメータcar_sideslip_eventが0)を示す。パラメータcar_sideslip_eventは、車両動作を示す1以上のセンサから入力される。このセンサは、加速度センサ、ジャイロセンサ、および/または、トラクション制御センサを含む。
パラメータcar_sideslip_eventが0である場合、ESCは動作せず、出力パラメータESC_output_ESC_statusを値0で出力する。この出力パラメータは、BCUに対して入力される(すなわち上述のBCU_input_ESC_statusとして)。車両サイドスリップイベントが検出され、パラメータcar_sideslip_eventが0でない場合、ESCは出力パラメータESC_output_ESC_statusを値1で出力する。この出力パラメータはBCUに対して入力され(すなわち上述のBCU_input_ESC_statusとして)、ESCが制御を引き継いだことをBCUに対して通知する。
パラメータcar_sideslip_eventが0でない場合、ESCは出力パラメータESC_output_brake_control_commandを出力する。説明を簡単にするため、本例においてESCはブレーキ制御コマンドとして固定値を出力するが、これは本発明を限定することを意図したものではない。具体的には、制御コマンド値は、サイドスリップの間は他センサ入力に基づき車両状態に応じて可変であることが望ましい。
油圧システムのバルブはバックフローを自動的に防ぐように動作するバルブであることを想定し、記載の簡易のため図5には示していないが、パラメータcar_sideslip_eventが0でなく、バルブが制御可能バルブとして実装されている場合(例えばソレノイド制御バルブ)、ESCはバルブを閉じるアクチュエータに対して別の制御コマンドを出力することができる。
ESC制御を要約すると、ESCユニットは、車両のサイドスリップが生じたことを示すセンサ入力にしたがって、ブレーキ制御コマンドを出力する(さらに場合によっては能動的に油圧システムのBCU側のバルブを閉じる)ことができる。またESCがBCUからブレーキ制御を引き継いだとき、出力パラメータESC_output_ESC_status(BCU_inpiut_ESC_statusとしてBCUに対して入力される)により、BCUに対してESC状態が出力される。サイドスリップが生じない限り、ESCは動作しない。
図6は、図3Aの被制御システムのプラントシミュレーションコードデータ503を示す。プラントシミュレーションコードデータは、BCUとESCに関する上述の制御ソフトウェアコードデータとは別のものであることを付言しておく。制御ソフトウェアコードデータは、実施形態に係る検証システムがテストする電子制御ユニットBCUとESCの実際の制御ソフトウェアコードに対応し、または少なくとも部分的にこれに基づくからである。プラントシミュレーションコードデータは、被制御システム/プラントの動作を記述しており、電子制御ユニットの出力パラメータを受け取って対応する出力パラメータを生成する。この出力パラメータは、次サイクルにおいて電子制御ユニットに対して(実行するソフトウェアコードの関数に対して)入力されるセンサ入力に対応する。
図3Aのシステムに示すような車両の被制御システムにおいて、対応するプラントシミュレーションコードデータを実行して、電子制御ユニットが出力するコマンドに基づき被制御システム/プラントのシミュレートすることができる。さらに、1以上の運転シナリオにしたがって、運転者の行動をシミュレートすることができる。プラントシミュレーションコードデータは、被制御システムに対して入力される制御コマンドに基づき、被制御システム/プラントの現在ステータスを更新するように構成されている。このプロセスは、システムセンサの対応するセンサ値を計算するステップ、被制御システム/プラントの状態を表す内部値を更新/計算するステップ、を含む。
プラントシミュレーションコードデータは、要件にしたがってユーザが手動生成することもできるし、あるいはユーザはMATLAB/Simulink(例えばサンプリング理論に基づき選択された離散時間間隔でSimulink Coderが生成する)などの自動コード生成器を用いてプラントモデルに基づきプラントシミュレーションコードデータを生成できることを付言しておく。
図6のプラントシミュレーションコードデータ503は、関数plant_update()を定義する。この関数は、BCUとESCから入力される制御コマンドパラメータを含む複数の入力パラメータに基づきプラントを更新する機能を定義する。図6のプラントシミュレーションコードデータ503は最初に、入力パラメータplant_input_valve_statusの値を検出する。この入力パラメータは、油圧システムのバルブが開いているか(plant_input_valve_statusが0)、それとも閉じているか(plant_input_valve_statusが1)を示す。パラメータplant_input_valve_statusは、ESCの状態またはBCU側圧力とESC側圧力との比較に基づき決定することができる。
plant_input_valve_statusが0でありバルブが開いていることが検出された場合、プラントシミュレーションコードデータ503は、パラメータdriver_pedal_eventを用いて、出力パラメータplant_output_pedal_strokeを決定する。この出力パラメータは、ブレーキペダルの位置を検出するセンサのセンサ値を示す。パラメータdriver_pedal_eventは、運転者がブレーキペダルを押したか否かを示す。運転者がブレーキペダルを押した場合、そのことはパラメータdriver_pedal_eventが1であることによって示され、運転者がブレーキペダルを押してない場合、そのことはパラメータdriver_pedal_eventが0であることによって示される。
ユーザがブレーキペダルを押していないことをシミュレートする場合、パラメータdriver_pedal_eventは0であり、パラメータplant_output_pedal_strokeは0にセットされる。ユーザがブレーキペダルを押したことをシミュレートする場合、パラメータdriver_pedal_eventは1であり、パラメータplant_output_pedal_strokeは例えば本例において説明の簡易のため固定値10にセットされる。ただしパラメータplant_output_pedal_strokeは、運転者の行動動作のシミュレーションにしたがって可変させ得ることを理解されたい。
図6において、例えば「tf_pedal_stroke」などのようにプレフィックス「tf」を付与した関数を用いており、これらプレフィックスはプラント動作の更新における対応する関数/パラメータの伝搬遅延を示している。例えば関数plant_update()は、最後に関数plant_update()を呼び出したときの従前のパラメータを用い、プレフィックス「tf」を付与したパラメータセットは、例えば関数plant_update()を次に呼び出すときまで更新されない。
プラントシミュレーションコードデータ503は、パラメータplant_output_hydraulic_pressureを決定するように構成されている。このパラメータは、被制御システム/プラントのシミュレーションの出力パラメータとして、図3Aの被制御システムの油圧システムにおける圧力値を示す。パラメータplant_output_hydraulic_pressureは、入力パラメータplant_input_BCU_brake_control_commandの関数tf_hydraulic_pressureに基づき決定される。この入力パラメータは、ブレーキ制御ユニットBCUが出力するブレーキ制御コマンドに対応する。plant_output_hydraulic_pressureはまた、被制御システムの圧力センサが出力する値に対応し、ブレーキ制御ユニットBCUに対して入力される。
その他パラメータとして、プラントシミュレーションコードデータ503は、パラメータbrake_forceを決定するように構成されている。このパラメータは、ブレーキキャリパ503によって加えられるブレーキ力を示す。パラメータbrake_forceは、油圧システムの油圧にしたがって関数tf_brake_forceに基づき決定される。すなわち、上述のplant_output_hydraulic_pressureに等しいplant_output_BCU_hydraulic_pressureに基づき決定される。
一方で、plant_input_valve_statusが1でありバルブが閉じていることが検出された場合、プラントシミュレーションコードデータ503は、パラメータplant_output_hydraulic_pressureを決定するように構成されている。このパラメータは、被制御システム/プラントのシミュレーションの出力パラメータとして、図3Aの被制御システムの油圧システムにおける圧力値を示す。ただしこのシミュレーションにおいて、プラントシミュレーションコードデータ503は、最初に別の圧力パラメータplant_inside_ESC_hydraulic_pressure(バルブのアップストリーム側とダウンストリーム側との間の圧力差がある場合があるためその時点で閉じているバルブのESC側ダウンストリームにおける油圧システムの圧力を示す)を決定するように構成されている。
パラメータplant_inside_ESC_hydraulic_pressureは、関数tf_hydraulic_pressureに基づき決定される。これは、入力パラメータplant_input_ESC_brake_control_commandの関数である。この入力パラメータは、安定制御のための電子制御ユニット(ESC)が出力するブレーキ制御コマンドに対応する。その他パラメータとして、プラントシミュレーションコードデータ503は、パラメータbrake_forceを決定するように構成されている。このパラメータは、バルブが閉じているシナリオにおいてブレーキキャリパ503が加えるブレーキ力を示す。パラメータbrake_forceは、油圧システムの油圧にしたがって関数tf_brake_forceに基づき決定されるが、ここではESC側の圧力に基づき(すなわちplant_inside_ESC_hydraulic_pressureに基づき)決定される。
プラントシミュレーションコードデータ503は、出力パラメータplant_output_hydraulic_pressureをパラメータplant_inside_ESC_hydraulic_pressureの規定値へセットするように構成されている。このシミュレーションにおいて、plant_output_hydraulic_pressureは、バルブが閉じられているとき生じる上述の圧力差に起因して、plant_output_BCU_hydraulic_pressureに等しくない。油流は油圧システムのBCU側から吸収される。
しかしこのとき上述のように、図4のBCU制御コードデータ502を実行し、車両が安定になってESCが動作しないとき、次サイクルの被制御システムの状態において、油圧システムの液体リークが実際には生じていないにも関わらず、パラメータ「ratio」が2以上と判定されることになる。このような状況は、いずれの電子制御ユニットの制御ソフトウェアコードのバグにも起因しない制御不具合を表し、それぞれ個別の制御ソフトウェアコードデータを有する複数の電子制御ユニットの共同動作においてのみ現れる検出困難なシステム全体バグを表している。本発明の実施形態の検証プロセスにおいては、そのような検出困難なシステムバグであっても、検証プロセスに追いて発見することができる。
上述のように本実施形態において、被制御システムの各電子制御ユニットの制御ソフトウェアコードデータの各部分を提供する。個々の制御ソフトウェアコードデータは、個々の電子制御ユニットによる制御のため用いる1以上の入力パラメータを受け取り、受け取った1以上の入力パラメータに基づき1以上の出力パラメータ(特に制御コマンド)を決定する、電子制御ユニットの制御動作に関連する。
本実施形態において、被制御システム/プラントの動作をシミュレートし、プラントの現在状態を更新する、少なくとも1つのプラントシミュレーションコードデータを提供する。別実施形態において、複数のプラントシミュレーションコードデータを提供し、被制御システム/プラントの複数部分をシミュレートすることもできる。
プラントシミュレーションコードデータが定義する機能を実行することによる被制御システム/プラントのシミュレーションは、入力値/入力パラメータとして、電子制御ユニットから出力値/出力パラメータを受け取り、これに基づき1以上の出力値/出力パラメータを決定する。これらは入力値/入力パラメータとして電子制御ユニットに対して入力される(例えばセンサ値を表す)。プラントシミュレーションコードデータが定義する機能を実行することにより、内部パラメータを決定することができる。例えば被制御システム/プラントの状態を表す上述のブレーキ力である。
上述のように被制御システムにおいて、電子制御ユニットの各出力パラメータは、1以上の他の電子制御ユニットの入力パラメータ(例えばESC_output_ESC_statusをBCU_input_ESC_statusとして用いる)として用い、および/または、プラントシミュレーションコードデータにおける被制御システム/プラントの入力パラメータ(例えばBCU_output_brake_control_commandをplant_input_BCU_brake_control_commandとして用いる)として用いることができる。一方で、被制御システム/プラントのシミュレーションの各出力パラメータは、1以上のその他電子制御ユニットの入力パラメータとして用いることができる(例えばplant_output_pedal_stroke_valueをBCU_input_pedal_stroke_valueとして用いる)。
図7は、図3Aの被制御システムのコラボレーション情報データ504を示す。コラボレーション情報データ504のフォーマットは限定されない。コラボレーション情報データ504において示されている情報は、後にコラボレーションモジュールコードデータ508を生成する際に用いる。
コラボレーション情報データ504は、入力パラメータと出力パラメータの関係を示す。また、制御ユニットから制御ユニットへ、制御ユニットから被制御システム/プラントへ、および/または、被制御システム/プラントから制御ユニットへ送信される出力パラメータとこれに対応する入力パラメータのマッピングを示す。すなわちコラボレーション情報データ504の情報は、パラメータ間の関係とデータフロー方向(すなわちある出力パラメータからこれに対応する入力パラメータへの方向)を示す。
例えば図7のコラボレーション情報データ504は、図3Aのシステムの入出力パラメータの関係を記載している。例えば、図4のBCU制御ソフトウェアコードデータにおいて用いる出力パラメータBCU_output_brake_control_commandは、図6のプラントシミュレーションコードデータ503において用いる入力パラメータplant_input_BCU_brake_control_commandとマッピング/対応付けされる(電子制御ユニットBCUから被制御システム/プラントへ:「software to plant」)。
一方で、例えば図6のプラントシミュレーションコードデータ503において用いる出力パラメータplant_output_BCU_hydraulic_pressureは、図4のBCU制御ソフトウェアコードデータにおいて用いる入力パラメータBCU_input_hydraulic_pressureにマッピング/対応付けされる(被制御システム/プラントから電子制御ユニットBCUへ:「plant to software」)。異なる電子制御ユニットの出力パラメータと入力パラメータの関係について、図7のコラボレーション情報データ504は、図5のESC制御ソフトウェアコードデータにおいて用いる出力パラメータESC_output_ESC_statusが図4のBCU制御ソフトウェアコードデータにおいて用いる入力パラメータBCU_input_ESC_statusにマッピング/対応付けされている関係を示している(ある電子制御ユニットから他の電子制御ユニットへ:「ECU to ECU」)。
図8は、図3Aの被制御システムをテストするためのシステム入力情報データ505を示す。システム入力情報データ505のフォーマットは限定されない。システム入力情報データ505において示されている情報は、後にシンボルモジュールコードデータ511を生成するために用いる。
システム入力情報データは、ソフトウェア検証の間に変数(システム入力)として変化するパラメータを示す。また、入力値が変化する可能性のある時間を示唆する時間間隔を示す。図8のシステム入力情報データ505は、図6のプラントシミュレーションコードデータ503において用いるパラメータ「driver_pedal_event」と図5のESC制御ソフトウェアコードデータにおいて用いる「car_sideslip_event」を、ソフトウェア検証の間に変化するシステム入力変数として示す。これらシステム入力変数パラメータはともに、変化時間が2000にセットされている(単位はmsであり、したがってそれぞれ1msサイクル時間に対応する関数BCU_software_execution_1ms()とESC_software_execution_1ms()は2000回呼び出される)。
図9は、検証要件情報データ506を示す。検証要件情報データ506のフォーマットは限定されない。検証要件情報データ506において示されている情報は、後にアサートモジュールコードデータ510を生成するために用いる。
図9の検証要件データ506は、ソフトウェアテストの検証時間を示す。検証時間は5000msにセットされている(すなわち、それぞれサイクル時間1msに対応する制御ソフトウェアコードデータの関数BCU_sofware_execution_1ms()とESC_software_execution_1ms()は、検証の間に5000回呼び出される)。
図9の検証要件情報データ506は、検証要件(検証条件)を示す。これは、制御エラーを表す条件に対応する。検証要件は例えば、意図しないブレーキ作動が発生する条件として定義できる。具体的には、運転者がブレーキペダルを少なくとも500ms(パラメータpedal_off_timeが500以上)押しておらず(パラメータpedal_eventが0)、車両が少なくとも500ms(パラメータsideslip_off_timeが500以上)安定であり(サイドスリップなし、パラメータside_slip_eventが0)、それでもなお関数plant_update()を最後に呼び出したときからパラメータbrake_forceが増える(パラメータbrake_force_increaseが0より大きい)ような、条件である。
上記パラメータpedal_off_time、sideslip_off_time、およびbrake_force_increaseは、制御ソフトウェアコードデータの関数BCU_software_execution_1ms()やESC_software_execution_1ms()またはプラントシミュレーションコードデータの関数plant_update()において用いられていないが、制御ソフトウェアコードデータの関数BSC_software_execution_1ms()やESC_software_execution_1ms()またはプラントシミュレーションコードデータの関数plant_update()の検証プロセス中の複数回の呼び出し間における情報または情報変化を示すパラメータであることを、付言しておく。
例えばパラメータpedal_off_timeは、パラメータpedal_event_switchingが1から0へ変わったことにより示されるブレーキペダル解放後からのカウントを表すカウンタによって表すことができる。パラメータsideslip_off_timeは、パラメータcar_sideslip_eventが1から0へ変わったことにより示される車両安定化後のカウントを表すカウンタによって表すことができる。パラメータbrake_force_increaseは、プラントシミュレーションコードデータの関数plant_update()を現在の繰り返しループにおいて実行することにより定められるパラメータbrake_forceの計算値を関数plant_update()の最後の呼び出しにおけるものと比較することにより得られる、変化量を示す。正値は計算したブレーキ力が増加したことを示し、負値は減少したことを示す。
時間解像度は、被制御システム/プラントの離散時間に依拠する。プラントシミュレーションの時間解像度は通常、電子制御ユニットのサイクル時間よりも短い(すなわち、プラントシミュレーションを呼び出す頻度は、電子制御ユニットの制御ソフトウェアコードデータ機能を呼び出す頻度よりも大きい)。
図10は、図7のコラボレーション情報データ504に基づくコラボレーションモジュールコードデータ508の一部を示す。例えばコラボレーションモジュールコードデータ508は、手動生成することができる。あるいはコラボレーションモジュールコードデータ508は、図7のコラボレーション情報データ504に基づきコード生成器によって自動生成することが望ましい。
コラボレーションモジュールコードデータ508は、1以上の出力パラメータを1以上の入力パラメータへコピーする1以上の機能を備える。具体的には、コラボレーションモジュールコードデータ508は、1以上の電子制御ユニットの1以上の出力パラメータを被制御システム/プラントのシミュレーションの1以上の入力パラメータへコピーする1以上の機能、1以上の電子制御ユニットの1以上の出力パラメータを1以上の電子制御ユニットの1以上の入力パラメータへコピーする1以上の機能、および/または、被制御システム/プラントのシミュレーションの1以上の出力パラメータを1以上の電子制御ユニットへコピーする1以上の機能、を備える。
図10のコラボレーションモジュールコードデータ508は、3つの関数copy_software_to_plant()、copy_plant_to_software()、copy_ECU_to_ECU()の定義を備える。関数copy_software_to_plant()は、コラボレーション情報データ504の「software to plant」が示す対応関係にしたがって、BCUおよびESCの制御ソフトウェアコードの関数の出力パラメータを、被制御システム/プラントのシミュレーションの対応する入力パラメータへコピーする。
関数copy_plant_to_software()は、コラボレーション情報データ504の「plant to software」が示す対応関係にしたがって、被制御システム/プラントのシミュレーションの出力パラメータを、BCUとESCの制御ソフトウェアコードデータの関数の対応する入力パラメータへコピーする。関数copy_ECU_to_ECU()は、コラボレーション情報データ504の「ECU to ECU」が示す対応関係にしたがって、ESCの制御ソフトウェアコードデータの関数の出力パラメータを、BCUの制御ソフトウェアコードデータの関数の対応する入力パラメータへコピーする。
要約すると、コラボレーションモジュールコードデータ508は、電子制御ユニットの制御ソフトウェアと被制御システム/プラントとの間のデータ同期動作を実施する。コラボレーションモジュールデータ508は、被制御システム/プラントの動作を示すセンサデータとセンサ値を、プラント側から制御ソフトウェア側へコピーする実行可能関数、および、被制御システム/プラントのアクチュエータに対するコマンド出力を示す制御コマンドを制御ソフトウェア側からプラント側へコピーする実行可能関数を定義する。
1以上の電子制御ユニットを有するシステムにおいて、コラボレーションモジュールコードデータ508はさらに、制御出力パラメータをある電子制御ユニットからシステムの他の電子制御ユニットの対応する入力パラメータへコピーする、実行可能関数を定義することができる。
図11は、図8のシステム入力情報データに基づくシンボルモジュールコードデータ511の一部を示す。図11のシンボルモジュールコードデータ511は、KLEE記号的実行ベース検証ツールのフォーマットで形成される。シンボルモジュールコードデータ511は、コマンドklee_make_symbolicを利用して、KLEE記号的実行ベース検証ツールのシンタックスに基づき、関数symbolic_module()を定義する。
具体的には、関数symbolic_module()は、図8のシステム入力情報データに基づき生成され、図8のシステム入力情報データにおけるパラメータdriver_pedal_eventとcar_sideslip_eventについてシンボル変数XおよびYを用いるよう記号的ベース検証ツール6へ指示する。また、パラメータdriver_pedal_eventをXへ変換し、パラメータcar_sidelip_eventをYへ変換する。
ただし、システム入力情報データが示す時間2000に基づき、関数klee_make_symbolicは、時間カウントパラメータv_timeを2000で割った余りが0である場合のみ呼び出される。すなわち、v_timeが2000の整数倍となった場合である。したがってシンボル変換は、システム入力情報データが定義しているように、2000ms毎に実施される。
一般にシンボルモジュールコードデータは、制御ソフトウェアの記号的実行ベース検証の準備において、システム入力をXやYなどの抽象シンボルへ変換する。これは、ソフトウェア検証が様々な数値セットとともに様々な論理パスを網羅する必要がなく、パス条件に基づき複数の状況を抽象的にカバーする抽象変数を用いて、発生し得るパスをテストおよび検証できる、という利点がある。
図12は、図9の検証要件データに基づくアサートモジュールコードデータ510の一部を示す。アサートモジュールコードデータ510は、実行可能関数assertion_module()を提供する。この関数は、検証要件が満たされているか否かをチェックするif文を備える。満たしている場合、関数klee_assert(0)が実行され、ユーザに対してエラー/バグの発生を通知する。これによりユーザに対し、意図しない検証要件を充足する状態にシステムが達するパス条件が見つかったことを知らせる。ユーザに対する出力としては、パス条件を出力することが望ましい(すなわち、初期状態から検証条件を満たすに至るシステム入力変数の条件)。
関数klee_assert()は、記号的実行ベース検証ツールKLEE固有の関数であるが、本発明はこの記号的実行ベース検証ツールを用いることに限定されない。その他の記号的実行ベース検証ツールを用いることもできる。一般にアサートモジュールコードデータ510は、1以上の検証要件をチェックする1以上の実行可能関数を備える。ある検証要件が充足されると判定した場合、ユーザに対してエラー制御条件を検出したことを通知する。例えば、検証要件が充足され安全システム仕様違反があった場合である。
図12のアサートモジュールコードデータ510の関数assertion_module()内のif文条件は、図9の検証要件情報データ506の検証要件情報に基づき生成される。これは例えば手動で生成し、または例えばコード生成器により提供された検証要件情報データ506に基づき自動で生成することができる。
図13は、同期モジュールコードデータ509の一部を示す。同期モジュールコードデータは、関数main()を定義する。この関数は、例えばソフトウェアソースコード、制御ソフトウェアコードデータ、プラントシミュレーションコードデータ、または入力情報にしたがって、適当なタイミングにおいて個々の制御ソフトウェアとシミュレーションソフトウェアを呼び出す。
関数main()は、変数v_timeについてforループ繰り返しプロセスを実施する。変数v_timeは、検証プロセスの時刻を示し、初期値v_time=0から開始して最大値MAXまで繰り返される(増加する)。例えばパラメータv_timeの繰り返しは、上述のBCUとESCのサイクル時間にしたがって、1msの繰り返しステップに対応する。パラメータv_timeは、1ms以下または以上の時間間隔に対応する単位で繰り返すこともできる。
繰り返しプロセスの各繰り返しにおいて、すなわち時間パラメータv_timeを増加させる繰り返しのなかの各検証時刻ステップにおいて、電子制御ユニットの制御ソフトウェアのコードデータの他モジュールの複数の関数が呼び出され、被制御システム/プラントのシミュレーションが呼び出される。
最初に、シンボルモジュールコードデータ511の実行可能関数symbolic_module()が実行される。少なくともシンボルモジュールコードデータ511の時刻条件v_time%2000==0を満たす場合、すなわちパラメータv_timeが2000の整数倍となった場合、記号的実行の対応する抽象シンボルに対してシステム入力パラメータを転送することにより、記号的実行を初期化する。
同期モジュールコードデータ509は、実行可能関数software_execution()を提供することにより、電子制御ユニットの制御機能を簡易的に実施する。この関数は、パラメータv_time%1==0である場合のみ、すなわちパラメータv_timeが1の整数倍となった場合のみ、関数BCU_software_execution_1ms()とESC_software_execution_1ms()を呼び出す(if文のなかで)。これにより、電子制御ユニットの制御機能を呼び出す際の同期を提供することができる。異なるタイミングおよび/または異なる頻度で、さらには被制御システム/プラントのシミュレーションとは異なるタイミングおよび/または頻度で、複数の電子制御機能の関数を呼び出すこともできる。
アサートモジュールコードデータ510のmain関数において、シンボルモジュール(symbolic_module)を呼び出して記号的実行を実施した後、プラントシミュレーションコードデータの関数plant_update()を呼び出して被制御システム/プラントの現在状態を更新するステップを実施し、コラボレーションモジュールコードデータの関数copy_plant_to_osftware()を呼び出して更新後状態にしたがって被制御システムのミュレーションの出力値を制御ソフトウェアコードデータにおける電子制御ユニットの制御ソフトウェアの対応する入力パラメータに対して転送し、上述の関数software_exeution()をこの繰り返しにおけるパラメータv_timeの関数として呼び出して電子制御ユニットの制御サイクルを実施し、関数copy_ECU_to_ECU()を呼び出して電子制御ユニットの制御サイクルのシミュレーションの出力値を制御ソフトウェアコードデータにおける他の電子制御ユニットの制御ソフトウェアの対応する入力パラメータに対して転送するとともにコラボレーションモジュールコードデータの関数copy_software_to_plant()を呼び出して被制御システム/プラントのシミュレーションの対応する入力パラメータに対して転送することにより、1制御サイクルがシミュレートされる。
次にelapsed_time++によってカウンタがインクリメントされ、時刻パラメータが1単位増加したことを示す。この例において、これはカウンタpedal_off_timeとsideslip_off_timeを増やす。
次に関数assertion_module()が呼び出され、次の繰り返しに進む前に現在の繰り返し時刻v_timeにおける検証要件が満たされているか否かをチェックする。
図14は、システムモデルコードデータ507の構成を示す。システムモデルコードデータ507は、電子制御ユニット(ここではBCUとESC)の制御ソフトウェアコードデータ502、プランシミュレーションコードデータ503、コラボレーションモジュールコードデータ508、シンボルモジュールコードデータ509、アサートモジュールコードデータ510、同期モジュールコードデータ511を備える。
図15は、システムモデル構造の概略を示す。システムモデルは、データ同期のための通信モジュール、システムモジュールのモジュール間同期のための同期モジュールを備える。
データ同期は、制御ソフトウェアとプラントとの間のシステム内部的やり取りを実施する。すなわち通信モジュールは、制御ソフトウェアがアクチュエータ制御のため計算する現在の制御コマンドを、コントローラモデル(例えばSimulink)からの出力を受け取るプラント入力へコピーする。本モジュールは、測定したプラント動作を示す現在のセンサ値を、プラントモデル(例えばSimulink)からの出力を受け取る制御ソフトウェア入力へコピーする。ECU間のやり取りも、本モジュールによってサポートされる。
同期モジュールは、適切なタイミングにおける順次呼び出しおよび繰り返し呼び出しにより、制御ソフトウェアおよびプラントの現在状態を保持する。また本モジュールは、システム内部時間における検証時間を制限して有限状態遷移を生成する。基本的に制御システムは、制御ソフトウェアを周期的に更新することにより制御ループを維持し、電力供給イベントを除いて終了はない。その結果、提案する検証プラットフォームのユーザは、有限時間を決定して実施形態における検証結果を取得する必要がある。有限時間は、ターゲットシステムの特性に依拠する。例えば可変システム入力のタイミングとシーケンスの組み合わせによって生じるシステム影響をユーザが見たい場合、有限時間はこれらを考慮して定義することが望ましい。また記号的実行ベース形式検証について、システムモデルにおいてシンボル定義モジュールとアサートモジュールを提供することができる。シンボル定義モジュールは、ユーザ操作やプラント動作に影響する検証ターゲット環境からのイベントなどのシステム入力を、シンボルとして定義する。検証の間にシステム入力の値を変更するため、モジュールはこれらを再定義することができる。ただし再定義は新たなシンボルを生成するので、検証時間が増える。特にシンボル個数に依拠するソルバの実行時間が増える。再定義を何度も実施することを避けるため、特定のタイミング(例えば1秒毎)やイベントトリガなどにしたがって分岐命令を用いる再定義を提供することができる。ただし、発生し得るパスの個数が指数的に増加するので、検証時間が多大になる。したがって、システム検証に最適な再定義頻度を決定することが重要である。また、システムモデルは離散時刻毎にそのプラント動作を更新するので、最適な離散時間を決定することも重要である。離散時間は、サンプリング理論に基づき決定することが望ましい。アサートモジュールは、例えばアサートコードであり、システムモデルの注目変数を監視することにより制御システムのプロパティをチェックすることができる。
図16は、ディスプレイ9上における検証結果の表示例を示す。制御ソフトウェアコードデータの検証終了時、すなわち検証要件情報が定義する検証時間の終了時、検証結果を示す。検証結果は、示しているパス条件において検証要件を満たすエラー検出が発生したことを示す。パス条件は、システム入力パラメータが検出エラーのエラー状況に達する条件を定義する。また、適正パスのパス条件を図16のディスプレイに示す。
図17は、実施形態に基づく制御ソフトウェアテストの検証プロセスのフローチャートを示す。
ステップS01において、1以上の関連する電子制御ユニットの制御ソフトウェアコードデータ502、プラントシミュレーションコードデータ503、コラボレーション情報データ504、システム入力情報505、検証要件情報データ506を提供する。すなわち、ユーザは電子制御ユニットのソースコード、プラントシミュレーションのソースコード、システム構造と入出力関係に関する情報、検証プロセスの変数を示すシステム入力に関する情報、テストする検証条件に関する情報をセットする。
ステップS02においてユーザは、検証プロセスを実行する検証システムにおいて検証プロセスを初期化/開始する。提供するデータに基づき、検証システム1はシステム検証ツール5を利用する。システムモデル構築器501は、提供するデータに基づきシステムモデル507(例えば図14)を生成するように構成されている。
ステップS03において、システムモデル構築器501は、コラボレーション情報データ504に基づきコラボレーションモジュールコードデータ508を生成する。ステップS04において、システムモデル構築器501は、システム入力情報データ505に基づきシンボルモジュールコードデータ5511を生成する。ステップS05において、システムモデル構築器501は、検証要件情報データ506に基づきアサートモジュールコードデータ510を生成する。ステップS06において、システムモデル構築器501は、電子制御ユニットの制御ソフトウェアコードデータ、プラントシミュレーションコードデータ、コラボレーションモジュールコードデータにしたがって、同期モジュールコードデータ509を生成する。
システムモデル507(システムモデルコードデータ)を構築するステップS03〜S06は、任意の実行順序または並列に実施できることを付言しておく。本発明は図16の実行順序に限定されない。
ステップS07において、システムモデル507を利用して、検証システム1の演算ユニット3が実行できる実行可能プログラムを生成する。具体的には、システムモデル507がシステムモデルコードデータとして提供されている場合、ステップS07はコンパイラを用いて、例えば記号的実行などの検証目・BR>Iのため、システムモデルコードデータをコンパイルする。
ステップS08において、演算ユニット3はシステムモデル507の実行可能プログラム(例えばコンパイルされたシステムモデルコードデータ)を実行し、記号的実行ベース検証ツール6を起動して、システムモデルプログラムを実行するとき検証要件に合致する1以上の条件に到達する実行パスが存在するか否かを記号的検証により検証する。そのようなエラー状況が発見された場合、対応するエラーがユーザに対して通知され、そのパス条件が示される。
ステップS09において、記号的実行ベース検証ツール6は、例えばディスプレイ9を介してユーザに対して検証結果を通知する。ステップS10において、ユーザは検証結果と検証要件に合致した状況に到達した実行ツリーのパス条件をチェックする。
まとめると、本実施形態により、ECUテストまたはシステムテストにおいて、1以上の電子制御ユニット(ECU)を有する被制御システム/プラントにおける電子制御ユニットの制御ソフトウェアのテストを、信頼性よくかつ効率的に実施することができる。これによりユーザは、車両システム、建築機械システム、その他組込システムおよび制御システムなどの電子機械制御システムにおけるシステムバグを、開発フェーズにおいて効率的かつ信頼性よく発見することができる。
本発明は、1つの電子制御ユニットを備え、互いに通信しおよび/または被制御システムの1以上のアクチュエータを共有制御する2つの電子制御ユニットを備え、あるいはそれ以上の個数の電子制御ユニットを備える制御システムの開発に対して、効率的かつ信頼性よく適用することができる。本発明により、システム状態およびユーザ操作またはシステム状態とユーザ操作の特定の組み合わせに応じて複数電子制御ユニットの共同動作によって特定状況においてのみ発生するため既知の検証技術において発見できなかったシステムバグであっても、効果的に発見することができる。
上記実施形態の構造の特徴、コンポーネント、詳細部分は、交換または組み合わせて個別のアプリケーションに最適化された別実施形態を形成することができる。これら変更が当業者にとって明らかである限り、それら変更事項は、本明細書の記載を簡潔にするため必ずしも全ての可能な組み合わせを格別明示していないとしても、以上の説明によって示唆されているというべきである。
当業者が理解するように、以上説明した本発明および添付する図面は、方法(例えばコンピュータ実装したプロセス、ビジネスプロセス、その他任意のプロセス)、装置(デバイス、機械、システム、コンピュータプログラム製品、および/またはその他装置を含む)、またはこれらの組み合わせとして実施することができる。
したがって本発明の実施形態は、完全なハードウェア実施形態、完全なソフトウェア実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、または「システム」と呼んでいるソフトウェアとハードウェアを組み合わせた実施形態をとることができる。さらに本発明の実施形態は、コンピュータ実行可能プログラムコードを格納するコンピュータ読取可能媒体上のコンピュータプログラム製品の形態をとることができる。
図面において用いている矢印は、2以上の要素が関連する通信、転送、その他動作を表すことを付言しておく。双方向矢印は一般に、動作が双方向に生じ得ることを示す(例えばコマンド/リクエストがある方向において生じ、対応する返答が他方向において生じ、あるいは各要素がピアトゥピア通信をする)。ただし状況によっては、必ずしも動作が双方向で生じない場合もある。
単方向矢印は一般に、もっぱらまたはその大部分は1方向の動作を示す。ただし状況によっては、その動作が実際には同方向の動作を含む場合があることを付言しておく(例えば送信者から受信者に対するメッセージと、受信者から送信者に対する確認応答、または送信前の接続確立と送信後の接続終了)。したがって、図面において特定の動作を表すため用いている矢印のタイプは、例示であって限定的に解釈すべきではない。
本発明の実施形態を、方法と装置のフローチャートおよび/またはブロック図、および同方法および/または装置が生成するグラフィカルユーザインターフェースの表示例とともに説明した。フローチャートおよび/またはブロック図の各ブロック、および/またはフローチャートおよび/またはブロック図のブロックの組み合わせ、およびグラフィカルユーザインターフェースは、コンピュータ実行可能プログラムコードによって実装できることが理解されるであろう。
コンピュータ実行可能プログラムコードを、汎用コンピュータ、特定用途コンピュータ、その他プログラム可能データ処理装置のプロセッサに提供して特定のマシンを生成し、コンピュータプロセッサまたはその他プログラム可能データ処理装置がそのプログラムコードを実行して、フローチャート、ブロック図、図面、および/または記載した説明の機能/動作/出力を実装する手段を生成することができる。
これらコンピュータ実行可能プログラムコードは、コンピュータ読取可能メモリに格納することができる。コンピュータ実行可能プログラムは、コンピュータその他プログラム可能データ処理装置を特定の態様で機能させ、コンピュータ読取可能メモリが格納しているプログラムコードが製品を形成するようにことができる。この製品は、フローチャート、ブロック図、図面、および/または記載した説明の機能/動作/出力を実装した指示手段を含む。
コンピュータ読取可能プログラムコードは、コンピュータ上その他プログラム可能データ処理装置上へ読み出し、コンピュータその他プログラム可能装置上で実施される動作ステップを生じさせて、コンピュータ実装プロセスを生成することができる。このプログラムコードは、コンピュータ上その他プログラム可能装置上で実行され、フローチャート、ブロック図、図面、および/または記載した説明の機能を実装するステップを提供する。これに代えて、ステップまたは動作を実装したコンピュータプログラムは、オペレータまたは人間により実装したステップまたは動作と組み合わせて、本発明の実施形態を実施することができる。
「サーバ」「プロセッサ」という用語は、本発明の実施形態において用いるデバイスを記載するために用いており、文脈上要求されていない限りは本発明を特定のデバイスタイプに限定するように解釈すべきではないことを付言しておく。したがってデバイスは、ブリッジ、ルータ、ブリッジ−ルータ(ブルータ)、スイッチ、ノード、サーバ、コンピュータ、アプライアンス、その他タイプのデバイスを含み、これに限られない。これらデバイスは通常、通信ネットワークを介して通信するための1以上のネットワークインターフェース、デバイス機能を実施するように構成されたプロセッサ(例えばメモリその他周辺機器および/またはアプリケーション専用ハードウェアを備えるマイクロプロセッサ)、を備える。
通信ネットワークは一般に、パブリックおよび/またはプライベートネットワークを含み、ローカルエリア、ワイドエリア、メトロポリタンエリア、ストレージ、および/またはその他タイプのネットワークを含む。また、アナログ技術、デジタル技術、光技術、ワイアレス技術(例えばBluetooth)、ネットワーク技術、インターネットワーク技術を含む通信技術を採用することができるが、これに限られない。
デバイスは、通信プロトコルとメッセージ(例えば、デバイスが生成し、送信し、受信し、格納し、および/または処理するメッセージ)を用いることができ、このメッセージは通信ネットワークまたは媒体によって伝送できることを付言しておく。
文脈上必要でない限り、本発明は特定の通信メッセージタイプ、通信メッセージフォーマット、または通信プロトコルに限定されるように解釈すべきではない。したがって通信メッセージは一般に、フレーム、パケット、データグラム、ユーザデータグラム、セル、その他タイプの通信メッセージを含み、これに限定されない。
文脈上必要でない限り、特定の通信プロトコルに言及しているのは例示である。その他実施形態として、様々な通信プロトコル(例えば日々開発されるプロトコルの変形または拡張)その他既知もしくは将来開発されるプロトコルを採用できることを理解すべきである。
ロジックフローは本発明の様々な側面を示すために記載したものであり、特定のロジックフローまたはロジック実装に本発明を限定するように解釈すべきではないことを付言しておく。全体結果を変更せずまたは本発明の範囲から逸脱することなく、説明したロジックを、複数のロジックブロック(例えばプログラム、モジュール、関数、サブルーチン)に分離することができる。
全体結果を変更せずまたは本発明の範囲から逸脱することなく、ロジック要素を追加し、変更し、省略し、異なる順序で実行し、あるいは異なるロジック構成(ロジックゲート、条件ロジック、基本的な論理ループ、その他ロジック構成)を用いて実装することができる。
本発明は、多くの異なる形態で実施することができる。これには、プロセッサ(例えばマイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ、汎用コンピュータ)とともに用いるコンピュータプログラムロジック、プログラマブル論理デバイス(例えばField Programmable Gate Array(FPGA)その他PLD)とともに用いるプログラム可能ロジック、個別部品、集積回路(例えば特定用途集積回路(ASIC))、これらの組み合わせを含むその他手段が含まれるが、これらに限られない。説明した機能の全部または一部を実装したコンピュータプログラムロジックは例えば、コンピュータ実行可能形式に変換されるコンピュータプログラム命令セットとして実装される。これは例えば、コンピュータ読取可能記憶媒体内に格納され、オペレーティングシステムの制御下でマイクロプロセッサによって実行される。説明した機能の全部または一部を実装したハードウェアベースロジックは、1以上の適切に構成されたFPGAを用いて実装することができる。
説明した機能の全部または一部を実装したコンピュータプログラムロジックは、様々な形態で実装することができる。これにはソースコード形式、コンピュータ実行可能形式、様々な中間形式(例えばアセンブラ、コンパイラ、リンカ、ロケータが生成する形式)が含まれるが、これらに限られない。
ソースコードは、様々なプログラム言語(例えばオブジェクトコード、アセンブリ言語、Fortran、C、C++、Java、HTMLなどの高レベル言語)で実装され様々なオペレーティングシステムまたは動作環境とともに用いられるコンピュータプログラム命令系列を含む。ソースコードは、様々なデータ構造と通信メッセージを定義し用いることができる。ソースコードは、コンピュータ実行可能形式(例えばインタプリタを介する形式)で構成することができる。あるいはソースコードは、コンピュータ実行可能形式に変換する(例えばトランスレータ、アセンブラ、コンパイラを介して)ことができる。
本発明の実施形態の動作を実施するコンピュータ実行可能プログラムコードは、オブジェクト指向、スクリプト、またはJava、Perl、Smalltalk、C++などの非スクリプトプログラム言語で記述することができる。ただし本発明の実施形態の動作を実施するコンピュータプログラムコードは、例えばC言語や同様のプログラム言語などの従来の手続的プログラム言語で記述することもできる。
説明した機能の全部または一部を実装したコンピュータプログラムロジックは、単一プロセッサが異なる時刻において(例えば同時に)実行し、あるいは複数プロセッサが同時にもしくは異なる時刻に実行して単一のオペレーティングシステムプロセス/スレッド下もしくは複数のオペレーティングシステムプロセス/スレッド下で動作することができる。
したがって「コンピュータプロセス」という用語は一般に、同一または異なるプロセッサ上で異なるコンピュータプロセスが実行されるか否かによらず、また異なるコンピュータプロセスが同一のオペレーティングシステムプロセス/スレッド下もしくは異なるオペレーティングシステムプロセス/スレッド下で実行されるか否かによらず、コンピュータプログラム命令セットを実行することを指す。
コンピュータプログラムは、記憶媒体内に任意の形式(例えばソースコード形式、コンピュータ実行可能形式、中間形式)で永続化または一時格納することができる。記憶媒体は例えば、半導体メモリデバイス(例えばRAM、ROM、PROM、EEPROM、フラッシュプログラマブルRAM)、磁気メモリデバイス(例えばディスケットまたは固定ディスク)、光メモリデバイス(例えばCD−ROM)、PCカード(例えばPCMCIAカード)、その他メモリデバイスである。
コンピュータプログラムは、様々な通信技術を用いてコンピュータへ送信する信号として永続化することができる。これにはアナログ技術、デジタル技術、光技術、ワイアレス技術(例えばBluetooth)、ネットワーク技術、インターネットワーク技術が含まれるが、これに限らない。
コンピュータプログラムは、添付する印刷文書または電子文書(例えば市販ソフトウェア)とともに、リムーバブル記憶媒体として任意形式で配信し、コンピュータシステムにプリロードし(例えばシステムROM上または固定ディスク上)、通信システム(例えばインターネットやWorld Wide Web)を介してサーバや電子掲示板から配信することができる。
説明した機能の全部または一部を実装したハードウェアロジック(プログラム可能ロジックデバイスとともに用いるプログラム可能ロジックを含む)は、従来のマニュアル手法を用いて設計することができる。あるいは、例えばコンピュータ支援設計(CAD)、ハードウェア記述言語(例えばVHDLやAHDL)、PLDプログラム言語(例えばPALASM、ABEL、CUPL)などの様々なツールを用いて設計し、キャプチャし、シミュレートし、電子文書化することができる。
適切なコンピュータ読取可能媒体を利用することができる。コンピュータ読取可能媒体は、例えば電子媒体、磁気媒体、光学媒体、電磁気媒体、赤外線媒体、半導体システム、装置、デバイス、または媒体であるが、これらに限らない。
コンピュータ読取可能媒体のより具体的な例としては、1以上の配線その他記憶媒体を有する電子接続が含まれるが、これに限らない。この記憶媒体は、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、消去可能プログラマブル読取専用メモリ(EPROMまたはフラッシュメモリ)、コンパクトディスク読取専用メモリ(CD−ROM)、その他光学または磁気記憶デバイスを含む。
プログラム可能ロジックは、例えば半導体メモリデバイス(例えばRAM、ROM、PROM、EEPROM、フラッシュプログラマブルRAM)、磁気メモリデバイス(例えばディスケットやフラッシュディスク)、光メモリデバイス(例えばCD−ROM)、その他メモリデバイスなどの記憶媒体内に永続化または一時格納することができる。
プログラム可能ロジックは、様々な通信技術を用いてコンピュータへ送信する信号として永続化することができる。これにはアナログ技術、デジタル技術、光技術、ワイアレス技術(例えばBluetooth)、ネットワーク技術、インターネットワーク技術が含まれるが、これに限らない。
プログラム可能ロジックは、添付する印刷文書または電子文書(例えば市販ソフトウェア)とともに、リムーバブル記憶媒体として任意形式で配信し、コンピュータシステムにプリロードし(例えばシステムROM上または固定ディスク上)、通信システム(例えばインターネットやWorld Wide Web)を介してサーバや電子掲示板から配信することができる。本発明の実施形態は、ソフトウェア(例えばコンピュータプログラム製品)とハードウェアの組み合わせとして実装することもできる。本発明の実施形態は、全てハードウェアで実装することもできるし、全てソフトウェアで実装することもできる。
添付する図面において実施形態を説明したが、これら実施形態は説明目的のものであり本発明を制限するものではないことを理解されたい。また本発明の実施形態は、説明した特定の構造や配置に限定されるものではないことを理解されたい。以上説明したものに加えて、様々な変更、組み合わせ、省略、変形、代替が可能である。
当業者は、本発明の範囲および要旨から逸脱することなく、様々な修正、変更、および/または説明した実施形態の組み合わせを構成できることを理解するであろう。したがって、特許請求範囲の範囲内において、本発明は説明したものとは別の形態で実施できることを理解されたい。例えば明示しない限り、説明したプロセスのステップは、説明したものとは異なる順序で実施でき、1以上のステップを組み合わせ、分割し、同時実施することができる。
当業者は、本明細書の観点から、本発明の複数の実施形態を組み合わせてその他の実施形態を形成できることを理解するであろう。