(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023087414
(43)【公開日】2023-06-23
(54)【発明の名称】車載制御装置、制御方法及びコンピュータプログラム
(51)【国際特許分類】
G06F 9/455 20180101AFI20230616BHJP
G06F 9/54 20060101ALI20230616BHJP
【FI】
G06F9/455 150
G06F9/54 A
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2021201775
(22)【出願日】2021-12-13
(71)【出願人】
【識別番号】395011665
【氏名又は名称】株式会社オートネットワーク技術研究所
(71)【出願人】
【識別番号】000183406
【氏名又は名称】住友電装株式会社
(71)【出願人】
【識別番号】000002130
【氏名又は名称】住友電気工業株式会社
(74)【代理人】
【識別番号】110000280
【氏名又は名称】弁理士法人サンクレスト国際特許事務所
(72)【発明者】
【氏名】遠藤 雅大
(57)【要約】 (修正有)
【課題】信頼性を向上する車載制御装置を提供する。
【解決手段】車載制御装置は、物理リソースを割り当てて複数の仮想制御装置を生成する管理部と、仮想制御装置のうち第1仮想制御装置が送信し、第2仮想制御装置及び第3仮想制御装置の少なくとも一方が受信するデータを一時的に記憶するバッファと、を含む。バッファは、第1仮想制御装置からデータを書き込む位置のポインタと、第2仮想制御装置及び第3仮想制御装置に読み出す位置のポインタが夫々循環する複数のブロックに区画される。第1ブロックは、第1仮想制御装置からのデータ書込みによりセットされ、第2仮想制御装置又は第3仮想制御装置のデータ読出しによりリセットされる第1受信フラグ及び第2受信フラグを含む。管理部は、第1仮想制御装置が送信するデータの書込予定領域が第1ブロックである場合に、第1仮想制御装置が送信するデータを第2ブロックに書き込む切替制御を実行する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
車両に搭載される車載制御装置であって、
制御部及び記憶部を含む物理リソースと、
前記物理リソースを割り当てて複数の仮想制御装置を生成する管理部と、
を備え、
前記管理部は、前記複数の仮想制御装置のうち第1仮想制御装置から送信されて第2仮想制御装置及び第3仮想制御装置の少なくとも一方に受信されるデータを一時的に記憶するバッファを含み、
前記バッファは、前記第1仮想制御装置から当該バッファに送信されるデータを書き込む位置を示す書込みポインタと、当該バッファから前記第2仮想制御装置に送信されるデータを読み出す位置を示す第1読出しポインタと、当該バッファから前記第3仮想制御装置に送信されるデータを読み出す位置を示す第2読出しポインタと、がそれぞれ循環する複数のブロックに区画され、
前記複数のブロックは、データの上書きが禁止されている第1ブロックと、データの上書きが許可されている第2ブロックと、を含み、
前記第1ブロックは、
前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第2仮想制御装置のデータ読出しに応じてリセットされる第1受信フラグと、
前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第3仮想制御装置のデータ読出しに応じてリセットされる第2受信フラグと、を含み、
前記管理部は、前記第1仮想制御装置から送信されるデータの書込予定領域が前記第1ブロックである場合に、前記第1仮想制御装置から送信されるデータを前記第2ブロックに書き込む切替制御を実行し、
前記切替制御は、前記バッファに含まれるすべての前記第1ブロックにおいて前記第1受信フラグ及び前記第2受信フラグのうち少なくとも一方がセットされている場合に、実行される、車載制御装置。
【請求項2】
前記第1ブロックは、前記書込みポインタが前記第1ブロックを参照した回数に応じた数がセットされるとともに、前記第1受信フラグ及び前記第2受信フラグの両方がリセットされたことに応じてリセットされる生存フラグをさらに含み、
前記管理部は、前記第1ブロックの前記生存フラグのセット数が所定値を超える場合に、前記切替制御を実行する、
請求項1に記載の車載制御装置。
【請求項3】
前記管理部は、前記車両の状態に応じて、前記所定値を決定する、
請求項2に記載の車載制御装置。
【請求項4】
前記管理部は、
前記車両が停車状態である場合に、前記所定値を第1の値とし、
前記車両が走行状態である場合に、前記所定値を前記第1の値よりも小さい第2の値とする、
請求項3に記載の車載制御装置。
【請求項5】
前記管理部は、前記第1仮想制御装置から送信されるデータが、車載制御装置を更新するための更新データ、車載制御装置を診断するためのダイアグデータ又は音声若しくは動画のストリームデータである場合に、前記所定値を前記生存フラグのセット数の最大値以上の値に決定する、
請求項2から請求項4のいずれか1項に記載の車載制御装置。
【請求項6】
前記複数の仮想制御装置は、前記第2仮想制御装置及び前記第3仮想制御装置のうち少なくとも一方の異常を解析するための仮想解析装置を含み、
前記管理部は、前記第1ブロックの前記生存フラグのセット数が所定値を超える場合に、当該第1ブロックに格納されているデータを前記仮想解析装置に読み出す、
請求項2から請求項5のいずれか1項に記載の車載制御装置。
【請求項7】
前記管理部は、前記仮想制御装置から送信されるデータの種類に応じて、前記第1ブロック又は前記第2ブロックを前記書込予定領域に選択する、
請求項1から請求項6のいずれか1項に記載の車載制御装置。
【請求項8】
前記管理部は、前記第1仮想制御装置から送信されるデータが前記車両の制御に関するデータである場合に、前記第2ブロックを前記書込予定領域に選択する、
請求項7に記載の車載制御装置。
【請求項9】
前記管理部は、前記第1仮想制御装置から送信されるデータが、車載制御装置を更新するための更新データ、車載制御装置を診断するためのダイアグデータ又は音声若しくは動画のストリームデータである場合に、前記第1ブロックを前記書込予定領域に選択する、
請求項7又は請求項8に記載の車載制御装置。
【請求項10】
車両に搭載される車載制御装置を制御する制御方法であって、
制御部及び記憶部を含む物理リソースを割り当てて複数の仮想制御装置を生成する生成ステップと、
前記複数の仮想制御装置のうち第1仮想制御装置から送信されて第2仮想制御装置及び第3仮想制御装置の少なくとも一方に受信されるデータをバッファに一時的に記憶する記憶ステップと、
を備え、
前記バッファは、前記第1仮想制御装置から当該バッファに送信されるデータを書き込む位置を示す書込みポインタと、当該バッファから前記第2仮想制御装置に送信されるデータを読み出す位置を示す第1読出しポインタと、当該バッファから前記第3仮想制御装置に送信されるデータを読み出す位置を示す第2読出しポインタと、がそれぞれ循環する複数のブロックに区画され、
前記複数のブロックは、データの上書きが禁止されている第1ブロックと、データの上書きが許可されている第2ブロックと、を含み、
前記第1ブロックは、
前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第2仮想制御装置のデータ読出しに応じてリセットされる第1受信フラグと、
前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第3仮想制御装置のデータ読出しに応じてリセットされる第2受信フラグと、を含み、
前記記憶ステップは、前記第1仮想制御装置から送信されるデータの書込予定領域が前記第1ブロックである場合に、前記第1仮想制御装置から送信されるデータを前記第2ブロックに書き込む切替ステップを含み、
前記切替ステップは、前記バッファに含まれるすべての前記第1ブロックにおいて前記第1受信フラグ及び前記第2受信フラグのうち少なくとも一方がセットされている場合に、実行される、制御方法。
【請求項11】
車両に搭載される車載制御装置を制御するためのコンピュータプログラムであって、
前記コンピュータプログラムは、コンピュータに、
制御部及び記憶部を含む物理リソースを割り当てて複数の仮想制御装置を生成する生成ステップと、
前記複数の仮想制御装置のうち第1仮想制御装置から送信されて第2仮想制御装置及び第3仮想制御装置の少なくとも一方に受信されるデータをバッファに一時的に記憶する記憶ステップと、
を実行させ、
前記バッファは、前記第1仮想制御装置から当該バッファに送信されるデータを書き込む位置を示す書込みポインタと、当該バッファから前記第2仮想制御装置に送信されるデータを読み出す位置を示す第1読出しポインタと、当該バッファから前記第3仮想制御装置に送信されるデータを読み出す位置を示す第2読出しポインタと、がそれぞれ循環する複数のブロックに区画され、
前記複数のブロックは、データの上書きが禁止されている第1ブロックと、データの上書きが許可されている第2ブロックと、を含み、
前記第1ブロックは、
前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第2仮想制御装置のデータ読出しに応じてリセットされる第1受信フラグと、
前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第3仮想制御装置のデータ読出しに応じてリセットされる第2受信フラグと、を含み、
前記記憶ステップは、前記第1仮想制御装置から送信されるデータの書込予定領域が前記第1ブロックである場合に、前記第1仮想制御装置から送信されるデータを前記第2ブロックに書き込む切替ステップを含み、
前記切替ステップは、前記バッファに含まれるすべての前記第1ブロックにおいて前記第1受信フラグ及び前記第2受信フラグのうち少なくとも一方がセットされている場合に、実行される、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、車載制御装置、制御方法及びコンピュータプログラムに関する。
【背景技術】
【0002】
従来より、1台のコンピュータを複数台のコンピュータであるかのように構成する仮想化技術が知られている。例えば、特許文献1には、車両に搭載されている電子制御装置を効率化するために、ハイパーバイザを利用してマルチコアCPUを動的に割り当てることで複数の仮想マシンを生成する技術が開示されている。
【0003】
また、特許文献2には、仮想マシンの管理及び制御に関して、データ記憶部がフレームを送信又は受信するためのリングバッファ構造のディスクリプタリングを記憶する技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2019-179397号公報
【特許文献2】特開2020-149526号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
複数の仮想制御装置(例えば、仮想マシン)間でデータを送受信する場合、一部の仮想制御装置における異常に起因して、異常のない仮想制御装置間におけるデータの送受信が遅延する場合がある。このため、仮想化技術によって1個の車載制御装置により多くの仮想制御装置を生成すればするほど、異常発生によるデータ送受信の遅延リスクがより高くなり、車載制御装置の信頼性が低下するおそれがある。
【0006】
本開示は、かかる事情に鑑みてなされたものであり、複数の仮想制御装置を含む車載制御装置の信頼性をより向上させることを目的とする。
【課題を解決するための手段】
【0007】
本開示の車載制御装置は、車両に搭載される車載制御装置であって、制御部及び記憶部を含む物理リソースと、前記物理リソースを割り当てて複数の仮想制御装置を生成する管理部と、を備え、前記管理部は、前記複数の仮想制御装置のうち第1仮想制御装置から送信されて第2仮想制御装置及び第3仮想制御装置の少なくとも一方に受信されるデータを一時的に記憶するバッファを含み、前記バッファは、前記第1仮想制御装置から当該バッファに送信されるデータを書き込む位置を示す書込みポインタと、当該バッファから前記第2仮想制御装置に送信されるデータを読み出す位置を示す第1読出しポインタと、当該バッファから前記第3仮想制御装置に送信されるデータを読み出す位置を示す第2読出しポインタと、がそれぞれ循環する複数のブロックに区画され、前記複数のブロックは、データの上書きが禁止されている第1ブロックと、データの上書きが許可されている第2ブロックと、を含み、前記第1ブロックは、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第2仮想制御装置のデータ読出しに応じてリセットされる第1受信フラグと、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第3仮想制御装置のデータ読出しに応じてリセットされる第2受信フラグと、を含み、前記管理部は、前記第1仮想制御装置から送信されるデータの書込予定領域が前記第1ブロックである場合に、前記第1仮想制御装置から送信されるデータを前記第2ブロックに書き込む切替制御を実行し、前記切替制御は、前記バッファに含まれるすべての前記第1ブロックにおいて前記第1受信フラグ及び前記第2受信フラグのうち少なくとも一方がセットされている場合に、実行される、車載制御装置である。
【0008】
本開示の制御方法は、車両に搭載される車載制御装置を制御する制御方法であって、制御部及び記憶部を含む物理リソースを割り当てて複数の仮想制御装置を生成する生成ステップと、前記複数の仮想制御装置のうち第1仮想制御装置から送信されて第2仮想制御装置及び第3仮想制御装置の少なくとも一方に受信されるデータをバッファに一時的に記憶する記憶ステップと、を備え、前記バッファは、前記第1仮想制御装置から当該バッファに送信されるデータを書き込む位置を示す書込みポインタと、当該バッファから前記第2仮想制御装置に送信されるデータを読み出す位置を示す第1読出しポインタと、当該バッファから前記第3仮想制御装置に送信されるデータを読み出す位置を示す第2読出しポインタと、がそれぞれ循環する複数のブロックに区画され、前記複数のブロックは、データの上書きが禁止されている第1ブロックと、データの上書きが許可されている第2ブロックと、を含み、前記第1ブロックは、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第2仮想制御装置のデータ読出しに応じてリセットされる第1受信フラグと、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第3仮想制御装置のデータ読出しに応じてリセットされる第2受信フラグと、を含み、前記記憶ステップは、前記第1仮想制御装置から送信されるデータの書込予定領域が前記第1ブロックである場合に、前記第1仮想制御装置から送信されるデータを前記第2ブロックに書き込む切替ステップを含み、前記切替ステップは、前記バッファに含まれるすべての前記第1ブロックにおいて前記第1受信フラグ及び前記第2受信フラグのうち少なくとも一方がセットされている場合に、実行される、制御方法である。
【0009】
本開示のコンピュータプログラムは、車両に搭載される車載制御装置を制御するためのコンピュータプログラムであって、前記コンピュータプログラムは、コンピュータに、制御部及び記憶部を含む物理リソースを割り当てて複数の仮想制御装置を生成する生成ステップと、前記複数の仮想制御装置のうち第1仮想制御装置から送信されて第2仮想制御装置及び第3仮想制御装置の少なくとも一方に受信されるデータをバッファに一時的に記憶する記憶ステップと、を実行させ、前記バッファは、前記第1仮想制御装置から当該バッファに送信されるデータを書き込む位置を示す書込みポインタと、当該バッファから前記第2仮想制御装置に送信されるデータを読み出す位置を示す第1読出しポインタと、当該バッファから前記第3仮想制御装置に送信されるデータを読み出す位置を示す第2読出しポインタと、がそれぞれ循環する複数のブロックに区画され、前記複数のブロックは、データの上書きが禁止されている第1ブロックと、データの上書きが許可されている第2ブロックと、を含み、前記第1ブロックは、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第2仮想制御装置のデータ読出しに応じてリセットされる第1受信フラグと、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第3仮想制御装置のデータ読出しに応じてリセットされる第2受信フラグと、を含み、前記記憶ステップは、前記第1仮想制御装置から送信されるデータの書込予定領域が前記第1ブロックである場合に、前記第1仮想制御装置から送信されるデータを前記第2ブロックに書き込む切替ステップを含み、前記切替ステップは、前記バッファに含まれるすべての前記第1ブロックにおいて前記第1受信フラグ及び前記第2受信フラグのうち少なくとも一方がセットされている場合に、実行される、コンピュータプログラムである。
【発明の効果】
【0010】
本開示によれば、複数の仮想制御装置を含む車載制御装置の信頼性をより向上させることができる。
【図面の簡単な説明】
【0011】
【
図1】
図1は、本実施形態に係る車載制御装置とその周辺構成を例示する模式図である。
【
図2】
図2は、実施形態に係るバッファを例示する模式図である。
【
図5】
図5は、実施形態に係る制御方法を例示するフローチャートである。
【
図6】
図6は、実施形態に係る制御方法を例示するフローチャートである。
【
図7】
図7は、実施形態に係るデータを例示する表である。
【
図8】
図8は、実施形態に係るバッファの様子を時系列順に示す模式図である。
【
図9】
図9は、実施形態に係るバッファの様子を時系列順に示す模式図である。
【発明を実施するための形態】
【0012】
<本開示の実施形態の概要>
以下、本開示の実施形態の概要を列記して説明する。
【0013】
(1)本開示の車載制御装置は、車両に搭載される車載制御装置であって、制御部及び記憶部を含む物理リソースと、前記物理リソースを割り当てて複数の仮想制御装置を生成する管理部と、を備え、前記管理部は、前記複数の仮想制御装置のうち第1仮想制御装置から送信されて第2仮想制御装置及び第3仮想制御装置の少なくとも一方に受信されるデータを一時的に記憶するバッファを含み、前記バッファは、前記第1仮想制御装置から当該バッファに送信されるデータを書き込む位置を示す書込みポインタと、当該バッファから前記第2仮想制御装置に送信されるデータを読み出す位置を示す第1読出しポインタと、当該バッファから前記第3仮想制御装置に送信されるデータを読み出す位置を示す第2読出しポインタと、がそれぞれ循環する複数のブロックに区画され、前記複数のブロックは、データの上書きが禁止されている第1ブロックと、データの上書きが許可されている第2ブロックと、を含み、前記第1ブロックは、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第2仮想制御装置のデータ読出しに応じてリセットされる第1受信フラグと、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第3仮想制御装置のデータ読出しに応じてリセットされる第2受信フラグと、を含み、前記管理部は、前記第1仮想制御装置から送信されるデータの書込予定領域が前記第1ブロックである場合に、前記第1仮想制御装置から送信されるデータを前記第2ブロックに書き込む切替制御を実行し、前記切替制御は、前記バッファに含まれるすべての前記第1ブロックにおいて前記第1受信フラグ及び前記第2受信フラグのうち少なくとも一方がセットされている場合に、実行される、車載制御装置である。
【0014】
切替制御は、データの書込予定領域が第1ブロックであり、第1ブロックの読出しが正常になされないために、本来であれば書込みポインタがデータを書き込むことなく第1ブロックを周回する(又は書込みポインタが所定のブロックで動かなくなる)ような状態となる場合に、データの書込先を第2ブロックに切り替えることで、最新のデータをバッファに書込み可能とする制御である。
【0015】
このような制御により、管理部は、第1ブロックにおけるデータの連続性を維持した状態で、第1仮想制御装置から送信されるデータ(特に、リアルタイム性が重視されるデータ)をバッファの第2ブロックに格納することができる。そして、第2仮想制御装置及び第3仮想制御装置のうち正常に動作する装置は、第2ブロックから当該データを読み出すことができる。これにより、例えば第3仮想制御装置に異常が生じた場合であっても、第1仮想制御装置と第2仮想制御装置との間のデータの送受信を継続することができる。この結果、複数の仮想制御装置を含む車載制御装置の信頼性を向上させることができる。
【0016】
(2)前記第1ブロックは、前記書込みポインタが前記第1ブロックを参照した回数に応じた数がセットされるとともに、前記第1受信フラグ及び前記第2受信フラグの両方がリセットされたことに応じてリセットされる生存フラグをさらに含んでもよく、前記管理部は、前記第1ブロックの前記生存フラグのセット数が所定値を超える場合に、前記切替制御を実行してもよい。
【0017】
生存フラグ及び所定値を用いることで、第1ブロックに長期間にわたって未読出しのデータが格納されているか否かを判定することができる。そして、管理部が第1ブロックに長期間にわたって未読出しのデータが格納されている場合に切替制御を実行することで、基本的にはデータの連続性が維持される第1ブロックを利用しつつ、異常等が生じた場合に第2ブロックを利用することで、複数の仮想制御装置の間におけるデータの送受信を好適に維持することができる。
【0018】
(3)前記管理部は、前記車両の状態に応じて、前記所定値を決定してもよい。
【0019】
データにリアルタイム性が要求されるか否かは、車両の状態に応じて変化する場合がある。所定値を車両の状態に応じて決定することで、切替制御の実行するか否かをより好適に判定することができるため、車載制御装置の信頼性をより向上させることができる。
【0020】
(4)前記管理部は、前記車両が停車状態である場合に、前記所定値を第1の値とし、前記車両が走行状態である場合に、前記所定値を前記第1の値よりも小さい第2の値としてもよい。
【0021】
このように構成することで、走行状態において切替制御が実行されやすくなるため、複数の仮想制御装置の間における最新値の送受信をより好適に維持することができる。
【0022】
(5)前記管理部は、前記第1仮想制御装置から送信されるデータが、車載制御装置を更新するための更新データ、車載制御装置を診断するためのダイアグデータ又は音声若しくは動画のストリームデータである場合に、前記所定値を前記生存フラグのセット数の最大値以上の値に決定してもよい。
【0023】
このように構成することで、更新データ等の連続性が重視されるデータについて管理部が切替制御を実行しないため、リアルタイム性が重視されるデータの送受信を維持しつつ、更新データ等のデータの連続性を維持することができる。これにより、車載制御装置の信頼性をより向上させることができる。
【0024】
(6)前記複数の仮想制御装置は、前記第2仮想制御装置及び前記第3仮想制御装置のうち少なくとも一方の異常を解析するための仮想解析装置を含んでもよく、前記管理部は、前記第1ブロックの前記生存フラグのセット数が所定値を超える場合に、当該第1ブロックに格納されているデータを前記仮想解析装置に読み出してもよい。
【0025】
第1ブロックの生存フラグのセット数が所定値を超える場合に、第1ブロックに格納されているデータは、異常のある仮想制御装置が読み出す予定であったデータであるため、異常解析に利用することができる。管理部は、このようなデータを仮想解析装置に読み出すことで、異常の解析精度を向上させることができる。
【0026】
(7)前記管理部は、前記仮想制御装置から送信されるデータの種類に応じて、前記第1ブロック又は前記第2ブロックを前記書込予定領域に選択してもよい。
【0027】
このように構成することで、データの種類に応じて、好適に書込予定領域を選択することができる。
【0028】
(8)前記管理部は、前記第1仮想制御装置から送信されるデータが前記車両の制御に関するデータである場合に、前記第2ブロックを前記書込予定領域に選択してもよい。
【0029】
車両の制御に関するデータは、よりリアルタイム性が重視される傾向があるため、このようなデータについて第2ブロックを書込予定領域に選択することで、より確実に最新値のデータの送受信を維持することができる。
【0030】
(9)前記管理部は、前記第1仮想制御装置から送信されるデータが、車載制御装置を更新するための更新データ、車載制御装置を診断するためのダイアグデータ又は音声若しくは動画のストリームデータである場合に、前記第1ブロックを前記書込予定領域に選択してもよい。
【0031】
更新データ等は、より連続性が重視される傾向があるため、このようなデータについて第1ブロックを書込予定領域に選択することで、より確実にデータの連続性を維持することができる。
【0032】
(10)本開示の制御方法は、車両に搭載される車載制御装置を制御する制御方法であって、制御部及び記憶部を含む物理リソースを割り当てて複数の仮想制御装置を生成する生成ステップと、前記複数の仮想制御装置のうち第1仮想制御装置から送信されて第2仮想制御装置及び第3仮想制御装置の少なくとも一方に受信されるデータをバッファに一時的に記憶する記憶ステップと、を備え、前記バッファは、前記第1仮想制御装置から当該バッファに送信されるデータを書き込む位置を示す書込みポインタと、当該バッファから前記第2仮想制御装置に送信されるデータを読み出す位置を示す第1読出しポインタと、当該バッファから前記第3仮想制御装置に送信されるデータを読み出す位置を示す第2読出しポインタと、がそれぞれ循環する複数のブロックに区画され、前記複数のブロックは、データの上書きが禁止されている第1ブロックと、データの上書きが許可されている第2ブロックと、を含み、前記第1ブロックは、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第2仮想制御装置のデータ読出しに応じてリセットされる第1受信フラグと、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第3仮想制御装置のデータ読出しに応じてリセットされる第2受信フラグと、を含み、前記記憶ステップは、前記第1仮想制御装置から送信されるデータの書込予定領域が前記第1ブロックである場合に、前記第1仮想制御装置から送信されるデータを前記第2ブロックに書き込む切替ステップを含み、前記切替ステップは、前記バッファに含まれるすべての前記第1ブロックにおいて前記第1受信フラグ及び前記第2受信フラグのうち少なくとも一方がセットされている場合に、実行される、制御方法である。
【0033】
切替ステップにより、第1ブロックにおけるデータの連続性を維持した状態で、第1仮想制御装置から送信されるデータ(特に、リアルタイム性が重視されるデータ)をバッファの第2ブロックに格納することができる。そして、第2仮想制御装置及び第3仮想制御装置のうち正常に動作する装置は、第2ブロックから当該データを読み出すことができる。これにより、例えば第3仮想制御装置に異常が生じた場合であっても、第1仮想制御装置と第2仮想制御装置との間のデータの送受信を継続することができる。この結果、複数の仮想制御装置を含む車載制御装置の信頼性を向上させることができる。
【0034】
(11)本開示のコンピュータプログラムは、車両に搭載される車載制御装置を制御するためのコンピュータプログラムであって、前記コンピュータプログラムは、コンピュータに、制御部及び記憶部を含む物理リソースを割り当てて複数の仮想制御装置を生成する生成ステップと、前記複数の仮想制御装置のうち第1仮想制御装置から送信されて第2仮想制御装置及び第3仮想制御装置の少なくとも一方に受信されるデータをバッファに一時的に記憶する記憶ステップと、を実行させ、前記バッファは、前記第1仮想制御装置から当該バッファに送信されるデータを書き込む位置を示す書込みポインタと、当該バッファから前記第2仮想制御装置に送信されるデータを読み出す位置を示す第1読出しポインタと、当該バッファから前記第3仮想制御装置に送信されるデータを読み出す位置を示す第2読出しポインタと、がそれぞれ循環する複数のブロックに区画され、前記複数のブロックは、データの上書きが禁止されている第1ブロックと、データの上書きが許可されている第2ブロックと、を含み、前記第1ブロックは、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第2仮想制御装置のデータ読出しに応じてリセットされる第1受信フラグと、前記第1仮想制御装置からのデータ書込みに応じてセットされるとともに、前記第3仮想制御装置のデータ読出しに応じてリセットされる第2受信フラグと、を含み、前記記憶ステップは、前記第1仮想制御装置から送信されるデータの書込予定領域が前記第1ブロックである場合に、前記第1仮想制御装置から送信されるデータを前記第2ブロックに書き込む切替ステップを含み、前記切替ステップは、前記バッファに含まれるすべての前記第1ブロックにおいて前記第1受信フラグ及び前記第2受信フラグのうち少なくとも一方がセットされている場合に、実行される、コンピュータプログラムである。
【0035】
切替ステップにより、第1ブロックにおけるデータの連続性を維持した状態で、第1仮想制御装置から送信されるデータ(特に、リアルタイム性が重視されるデータ)をバッファの第2ブロックに格納することができる。そして、第2仮想制御装置及び第3仮想制御装置のうち正常に動作する装置は、第2ブロックから当該データを読み出すことができる。これにより、例えば第3仮想制御装置に異常が生じた場合であっても、第1仮想制御装置と第2仮想制御装置との間のデータの送受信を継続することができる。この結果、複数の仮想制御装置を含む車載制御装置の信頼性を向上させることができる。
【0036】
<本開示の実施形態の詳細>
以下、図面を参照しつつ、本発明の実施形態の詳細を説明する。
【0037】
[1.車載制御装置とその周辺構成]
図1は、本実施形態に係る車載制御装置1とその周辺構成を例示する模式図である。
車載制御装置1は、車両V1に搭載されている装置であり、ECU(Electronic Control Unit)とも称される。車両V1は、例えば自動車であるが、車両V1の種類は特に限定されない。車両V1には、車載制御装置1の他に、複数のECU31と、通信装置32とが搭載されている。
【0038】
ECU31は、例えば車両V1の各部(例えば、制動装置、ドア、バッテリ、エアコン等)を制御する装置(操作系ECU)である。ECU31の機能は特に限定されず、ECU31は、既設のセンサ(図示省略)と接続して、車両V1の各部の状態を監視する装置(認知系ECU)であってもよい。複数のECU31は、例えば後述の通信部16に接続されている。
【0039】
通信装置32は、例えばTCU(Telematics Communication Unit)であり、インターネット等のネットワークを介して外部装置4と無線通信を行う。通信装置32は、例えば後述の通信部16に接続されている。
【0040】
外部装置4は、例えば制御部、記憶部及び通信部を備えるサーバである。外部装置4の記憶部は、例えば、車載制御装置1及びECU31を制御するためのプログラム又はデータを記憶する。例えば車載制御装置1又はECU31の製造者は、必要に応じて当該プログラム又はデータを修正し、修正されたプログラム又はデータを随時外部装置4の記憶部に格納する。外部装置4の通信部は、修正されたプログラム又はデータを、更新データとして通信装置32に送信する。
【0041】
車載制御装置1は、後述の仮想化技術によって、複数の仮想制御装置13として機能するECUである。すなわち、車載制御装置1は、複数の仮想的なECUとして機能する統合ECUである。複数の仮想制御装置13のそれぞれの機能は、特に限定されない。例えば、仮想制御装置13は、通信装置32から入力される更新データをECU31に中継する装置であってもよい。この場合、仮想制御装置13は、例えばセントラルゲートウェイ(CGW:Central Gateway)のように、複数の異なるLAN(Local Area Network)が車両V1内に存在するネットワーク環境で、各LANに存在する複数のECU31がそれぞれ送信又は受信するデータの中継をしてもよい。また、仮想制御装置13は、上記のECU31と同様に、車両V1の各部を制御する装置であってもよいし、車両V1の各部の状態を監視する装置であってもよい。
【0042】
[2.車載制御装置の内部構成]
車載制御装置1は、各種の物理リソース11と、物理リソース11を割り当てて複数の仮想制御装置13を生成する管理部12と、を備える。物理リソース11は、制御部14と、記憶部15と、通信部16と、読取部17と、を含む。制御部14、記憶部15、通信部16及び読取部17は、例えばバスによって互いに電気的に接続されている。
【0043】
制御部14は、例えば、CPU(Central Processing Unit)である。制御部14は、GPU(Graphics Processing Unit)であってもよいし、FPGA(Field-Programmable Gate Array)等の集積回路であってもよい。
【0044】
記憶部15は、揮発性メモリと、不揮発性メモリと有し、各種のデータを記憶する。揮発性メモリは、例えばRAM(Random Access Memory)である。不揮発性メモリは、例えばフラッシュメモリ、HDD(Hard Disk Drive)、SSD(Solid State Drive)又はROM(Read Only Memory)等を含む。
【0045】
記憶部15は、不揮発性メモリに、例えばコンピュータプログラム15aと、仮想化オペレーティングシステム15b(以下、「仮想化OS15b」と称する。)と、ゲストオペレーティングシステム15c(以下、「ゲストOS15c」と称する。)と、を記憶している。
【0046】
読取部17は、コンピュータが読取り可能な記録媒体18から情報を読み取る。記録媒体18は、例えばCD、DVD等の光学ディスク又はUSBフラッシュメモリである。読取部17は、例えば光学ドライブ又はUSB端子である。記録媒体18には複数のコンピュータプログラム15a、仮想化OS15b及び複数のゲストOS15cが記録されており、記録媒体18を読取部17に読み取らせることで、複数のコンピュータプログラム15a、仮想化OS15b及び複数のゲストOS15cは、記憶部15の不揮発性メモリに記憶される。
【0047】
複数のコンピュータプログラム15aは、管理部12としての機能を実現するためのプログラムと、複数の仮想制御装置13において後述のアプリケーション13bを実現するためのプログラム(アプリケーションプログラム)と、を含む。
【0048】
複数のゲストOS15cは、それぞれ仮想制御装置13を動作させるためのOSである。ゲストOS15cは特に限定されないが、例えば、Autosar(登録商標)、Linux(登録商標)、Android(登録商標)、QNX(登録商標)又はUbuntu(登録商標)であってもよい。
【0049】
なお、複数のコンピュータプログラム15a、仮想化OS15b及び複数のゲストOS15cは、外部装置4から送信され、通信装置32及び通信部16を介して、記憶部15に記憶されてもよい。
【0050】
通信部16は、複数のECU31と通信線31aを介して接続する第1の通信インターフェースと、通信装置32と通信線32aを介して接続する第2の通信インターフェースとを含む。通信部16と複数のECU31との間の通信規格は特に限定されないが、例えばCAN又はイーサネット(Ethernet:登録商標)に従って通信する。また、通信部16と通信装置32との間の通信規格は特に限定されないが、例えばCAN又はイーサネットに従って通信する。
【0051】
制御部14は、記憶部15からコンピュータプログラム15a、仮想化OS15b及びゲストOS15cを読出して、これら15a~15cに基づいて各種の演算及び処理を実行することで、後述の各種の機能を実現する。管理部12及び複数の仮想制御装置13の各種の動作は、制御部14の演算及び処理によって実現される。
【0052】
管理部12は、仮想化OS15bに基づいて物理リソース11を適宜に割り当てることで、複数の仮想制御装置13がそれぞれ動作可能な複数の仮想環境を構築する。仮想化OS15bは、例えばハイパーバイザー(Hypervisor:登録商標)である。なお、仮想化OS15bは、その他の仮想化ソフトウェアであってもよい。例えば、仮想化OS15bは、ホスト型の仮想化ソフトウェアであってもよいし、コンテナ型の仮想化ソフトウェアであってもよい。
【0053】
複数の仮想制御装置13は、物理リソース11が適宜に割り当てられることで構成される仮想ハードウェアをそれぞれ含む。仮想ハードウェアは、例えば仮想制御部、仮想記憶部及び仮想通信部を有する。仮想制御装置13は、当該仮想ハードウェア上でゲストOS13aを動作させ、このゲストOS上で各種のアプリケーション13bを動作させることにより、実物の物理的なECU(例えば、ECU31)のように機能する。ゲストOS13aは、記憶部15に記憶されている複数のゲストOS15cのうち、管理部12によって割り当てられた1個のゲストOS15cに相当する。
【0054】
図1に示す例において、管理部12は、物理リソース11を割り当てることで、4個の仮想制御装置21~24を生成する。4個の仮想制御装置21~24は、特に区別しない場合には、「仮想制御装置13」と総称する。
【0055】
仮想制御装置21は、例えば、外部装置4から提供される更新データ等の各種のデータを他の仮想制御装置22~24及びECU31に中継する装置である。仮想制御装置21は、車載センサから信号を受信して当該信号に各種の処理を施した後、他の仮想制御装置22~24に当該信号を送信する装置であってもよい。仮想制御装置21は、データを他の装置に送信する機能に着目して、「第1仮想制御装置21」とも称する。
【0056】
仮想制御装置22は、例えば第1仮想制御装置21から送信されたデータに基づいて車両V1の各部の動作を制御する装置である。例えば、仮想制御装置22は、車両V1のミラーの角度を調整するための装置であってもよい。仮想制御装置22は、データを他の装置から受信する機能に着目して、「第2仮想制御装置22」とも称する。
【0057】
仮想制御装置23は、例えば第1仮想制御装置21から送信されたデータに基づいて車両V1の各部の状態を監視する装置である。例えば、仮想制御装置23は、エンジンルームの温度又は圧力を監視する装置であってもよい。仮想制御装置23は、データを他の装置から受信する機能に着目して、「第3仮想制御装置23」とも称する。
【0058】
仮想制御装置24は、例えば他の仮想制御装置21~23の異常を解析するための装置である。例えば、仮想制御装置24は、バッファ19に長期間にわたって読み出されないデータが格納されている場合に、当該データを読み出してその内容を解析し、仮想制御装置21~23のうち異常が生じた装置の異常原因の解析を行う。仮想制御装置24については、以下の説明において、異常を解析する機能に着目するため、「仮想解析装置24」とも称する。
【0059】
管理部12は、複数の仮想制御装置13の間で送受信されるデータを一時的に記憶するバッファ19を含む。バッファ19は、例えば複数の仮想制御装置13の間で共有されるRAMにより構成されている。
【0060】
図2は、実施形態に係るバッファ19を例示する模式図である。バッファ19は、それぞれデータが格納される複数(
図2では8個)のブロック19aに区画されている。バッファ19は、書込みポインタWP1と、第1読出しポインタRP1と、第2読出しポインタRP2とを含む。
【0061】
書込みポインタWP1は、第1仮想制御装置21からバッファ19に送信されるデータを書き込む位置を示す。書込みポインタWP1は、例えば、ブロック19aにデータを書き込む等の所定の処理ごとに、ブロック19aを1個ずつ進む。
【0062】
第1読出しポインタRP1は、バッファ19から第2仮想制御装置22に送信されるデータを読み出す位置を示す。第2読出しポインタRP2は、バッファ19から第3仮想制御装置23に送信されるデータを読み出す位置を示す。第1及び第2読出しポインタRP1,RP2は、例えば、ブロック19aからデータを読み出す等の所定の処理ごとに、ブロック19aを1個ずつ進む。
【0063】
書込みポインタWP1、第1読出しポインタRP1及び第2読出しポインタRP2は、末尾のブロック19aを参照した後、先頭のブロック19aに戻るように、それぞれ独立して複数のブロック19aを循環する。すなわち、バッファ19は、「リングバッファ」である。なお、バッファ19は、例えばバッファ19から仮想解析装置24に送信されるデータを読み出す位置を示す読出しポインタ等のその他のポインタを含むが、
図2では説明の簡単のため図示省略している。
【0064】
[3.本開示の課題]
図3は、本開示の課題を説明する図である。
図3では、
図1に示すバッファ19に代えて、4個のブロック90を有するバッファ9を用いる例を示している。4個のブロック90を特に区別する場合、先頭から順にブロック91、ブロック92、ブロック93及びブロック94と称する。末尾のブロック94は、矢印A2に示すように先頭のブロック91と接続している。
【0065】
複数の仮想制御装置13の間で送受信されるデータを一時的にバッファ9に記憶する場合、バッファ9は、複数の仮想制御装置13によって共用される。このため、バッファ9において複数の仮想制御装置13による書込み及び読出しが競合することを防止するために、セマフォ(Semaphore)等を利用した排他制御を行うことが考えられる。
【0066】
しかしながら、排他制御を行う際、例えば第3仮想制御装置23(すなわち、受信側となるいずれかの仮想制御装置13)に異常が生じて第2読出しポインタRP2が進まなくなると、他の仮想制御装置21,22の間におけるデータの送受信も停止するおそれがある。すなわち、複数の仮想ECUを含む統合ECUでは、物理リソースを複数の仮想ECU間で共用しているがために、一部の仮想ECUにおける異常が他の仮想ECUに波及することで、統合ECUが効率的に稼働しないおそれがある。以下、排他制御と課題の具体例を説明する。
【0067】
4個のブロック90は、データ格納部55と、第1受信フラグ56と、第2受信フラグ57と、をそれぞれ含む。データ格納部55は、例えば第1仮想制御装置21から送信されるデータを所定のデータフォーマットに従って格納する領域である。
【0068】
受信フラグ56,57は、書込みポインタWP1によるブロック90へのデータの書込みを禁止する機能と、読出しポインタRP1,RP2に対して読出しが必要なデータがデータ格納部55に格納されていることを伝える機能とを有する。第1受信フラグ56は、送信側の第1仮想制御装置21からのデータ書込みに応じてセットされるとともに、受信側の第2仮想制御装置22のデータ読出しに応じてリセットされる。第2受信フラグ57は、送信側の第1仮想制御装置21からのデータ書込みに応じてセットされるとともに、受信側の第3仮想制御装置23のデータ読出しに応じてリセットされる。
【0069】
ブロック90において、第1受信フラグ56及び第2受信フラグ57の少なくとも一方がセットされている場合、データ格納部55には読出しが完了していないデータが格納されている。このため、例えばブロック91の第1受信フラグ56及び第2受信フラグ57の少なくとも一方がセットされている場合に、管理部12は、書込みポインタWP1によるブロック91へのデータ書込みを禁止する。
【0070】
一方で、ブロック91の第1受信フラグ56及び第2受信フラグ57の両方ともがセットされていない場合には、管理部12は、書込みポインタWP1によるブロック91へのデータ書込みを許可する。すなわち、管理部12は、受信フラグ56,57に基づいて、ブロック90におけるデータの上書きを禁止又は許可する。
【0071】
以下、
図3を参照して、バッファ9にデータを書き込む様子と、読み出す様子とを説明する。
図3は、(a)、(b)、(c)の順の時系列でバッファ9の様子を示している。
図3に示す例では、バッファ9は第1仮想制御装置21からデータD1~D5をこの順で受信する。データD1,D2は、仮想制御装置22,23の両方に宛てて送信されるデータである。データD3,D4は、第3仮想制御装置23のみに宛てて送信されるデータである。データD5は、第2仮想制御装置22のみに宛てて送信されるデータである。
【0072】
はじめに、
図3中の(a)に示すように、管理部12は、書込みポインタWP1が参照しているブロック91のデータ格納部55に、第1仮想制御装置21から送信されたデータD1を書き込む。データD1は仮想制御装置22,23の両方に宛てて送信されるデータであるため、データD1の書き込みに応じて、管理部12は仮想制御装置22,23用の受信フラグ56,57を両方とも「0」から「1」にセットする。データ格納部55にデータD1を書き込むと、管理部12は、書込みポインタWP1を1個進めて、書込みポインタWP1にブロック92を参照させる。
【0073】
続いて、
図3中の(b)に示すように、管理部12は、書込みポインタWP1によるブロック92,93,94の順次の参照に応じて、ブロック92,93,94のそれぞれのデータ格納部55に、順次データD2,D3,D4を格納する。このとき、管理部12は、データD2の書き込みに応じて、ブロック92における受信フラグ56,57を両方とも「0」から「1」にセットする。また、データD3,D4は、第3仮想制御装置23のみに宛てて送信されるデータであるため、管理部12は、データD3,D4のそれぞれの書き込みに応じて、ブロック93,94における第2受信フラグ57を「0」から「1」にセットする。
【0074】
図3中の(b)に示すように、管理部12は、第1読出しポインタRP1が参照しているブロック91のデータ格納部55からデータD1を読出して、第2仮想制御装置22に送信する。データD1の第2仮想制御装置22への読出しに応じて、管理部12は第1受信フラグ56を「1」から「0」にリセットする。その後、管理部12は、第1読出しポインタRP1を1個進めて、第1読出しポインタRP1にブロック92を参照させる。
【0075】
続いて、
図3中の(c)に示すように、管理部12は、第1読出しポインタRP1によるブロック92,93,94の順次の参照に応じて、ブロック92,93,94のうち第1受信フラグ56がセットされているブロックからデータを順次読み出す。
図3に示す例では、管理部12はブロック92のデータ格納部55に格納されているデータD2を第2仮想制御装置22へ読み出して、ブロック92の第1受信フラグ56を「1」から「0」にリセットする。また、ブロック93,94はそれぞれ第1受信フラグ56がセットされていないため、管理部12は、データD3,D4を読み出すことなく第1読出しポインタRP1を進める。
【0076】
一方で、第2読出しポインタRP2は、
図3中の(a)から(c)に至るまで、動かない。例えば第3仮想制御装置23においてデータの読出しよりも優先度の高い処理が生じると、第3仮想制御装置23においてデータの読出し処理が待機状態となり、第2読出しポインタRP2が所定のブロック90を参照したまま固まる場合がある。また、第3仮想制御装置23において高負荷の処理又は異常処理が生じると、第3仮想制御装置23が「処理落ち」することで、第2読出しポインタRP2が動かなくなる場合がある。
【0077】
この場合、4個のブロック90のそれぞれの第2受信フラグ57をリセットできない状態が続く。この間に、それぞれのデータ格納部55にデータD1~D4が格納されると、バッファ9が満杯状態となり、管理部12がデータ格納部55にデータD5を書き込めない状態となる。このとき、書込みポインタWP1は、データD5を未書込みの状態で各ブロック90を順次進むか、又は、いずれかのブロック90を参照した状態で停止する。
【0078】
また、4個のブロック90のそれぞれの第1受信フラグ56はリセットされているため、第2仮想制御装置22は新しいデータ(例えば、データD5)を受信できない状態となる。このとき、第1読出しポインタRP1は、データ格納部55のデータを読み出さないまま各ブロック90を順次進むか、又は、いずれかのブロック90を参照した状態で停止する。
【0079】
以上のように、複数の仮想制御装置13の間におけるデータの送受信のために、バッファ9において
図3に示す排他制御を採用すると、一部の仮想制御装置13の異常が他の正常な仮想制御装置13に影響を及ぼすおそれがある。
【0080】
そこで、本開示では、一部の仮想制御装置13に異常が生じた場合であっても、残る正常な複数の仮想制御装置13の間におけるデータの送受信を維持するための構造、方法及びコンピュータプログラムを提案する。具体的には、バッファ19に、
図3のような受信フラグ56,57による排他制御を実行する第1ブロック50の他に、データの上書きを許容する第2ブロック60を設ける。
【0081】
そして、例えば一部の仮想制御装置13の異常に起因して、第1ブロック50が満杯状態となって第1ブロック50に新たにデータを書き込めなくなった場合に、必要に応じて、第2ブロック60へデータの書き込みを行うように切り替える。これにより、正常な複数の仮想制御装置13の間におけるデータの送受信を第2ブロック60によって継続することで、データの送受信が遅延したり停止したりすることを抑制する。この結果、複数の仮想制御装置13を含む車載制御装置1の信頼性をより向上させることができる。
【0082】
以下、第1ブロック50及び第2ブロック60を利用した具体的な解決手段について、説明する。
【0083】
[4.バッファの構成]
図2を参照する。複数のブロック19aは、データの上書きが禁止されている第1ブロック50と、データの上書きが許可されている第2ブロック60と、を含む。
図2に示す例では、複数のブロック19aは、4個の第1ブロック50と、4個の第2ブロック60とを含むが、複数のブロック19aに含まれる第1ブロック50及び第2ブロック60の個数は特に限定されない。また、
図2に示す例では、4個の第1ブロック50が先頭側に位置し、4個の第2ブロック60が末尾側に位置するが、第1ブロック50及び第2ブロック60の配置は特に限定されない。
【0084】
図4は、
図2に示すバッファ19を展開した模式図である。
図4を参照して、バッファ19の具体的な構造を説明する。以下の説明において、4個の第1ブロック50を区別する場合、先頭側から順に第1ブロック51、第1ブロック52、第1ブロック53、第1ブロック54と称する。また、4個の第2ブロック60を区別する場合、先頭側から順に第2ブロック61、第2ブロック62、第2ブロック63、第2ブロック64と称する。末尾の第2ブロック64は、矢印A1に示すように先頭の第1ブロック51と接続している。
【0085】
4個の第1ブロック50は、データ格納部55と、受信フラグ56,57と、生存フラグ58と、所定値Th1と、をそれぞれ含む。データ格納部55及び受信フラグ56,57の機能は、
図3にて説明した内容と同様であるため、同じ符号を付して適宜説明を省略する。
【0086】
管理部12は、受信フラグ56,57に基づいて、第1ブロック50におけるデータの上書きを禁止又は許可する。これにより、複数の第1ブロック50では、データが読出されるまで、データが格納された順番が第1ブロック51~54の順に維持される。このようなデータの書込み方式を採用することで、複数の仮想制御装置13の間で、データの連続性を維持しつつデータを送受信することができる。当該方式は、送受信されるデータが、連続性が重視されるデータを含む場合により好適である。連続性が重視されるデータは、例えば、時系列データを含むダイアグデータ、ECUを更新するための更新データ、音声又は動画等のストリームデータである。
【0087】
生存フラグ58は、データ格納部55に長期間にわたって読み出されていないデータが格納されているか否かを判定するためのフラグである。生存フラグ58は、書込みポインタWP1が第1ブロック50を参照した回数に応じた数がセットされるとともに、受信側の仮想制御装置22,23のデータ読出しに応じてリセットされる。
【0088】
所定値Th1は、後述の切替制御を実行するか否かを判定するための閾値である。所定値Th1は、例えば車両V1の状態に応じて管理部12により決定される。所定値Th1は、パラメータとして予め設定された固定値であってもよい。所定値Th1は、第1ブロック50ではなく、管理部12内の他の記憶領域に格納されていてもよい。
【0089】
4個の第2ブロック60は、データ格納部65をそれぞれ含む。データ格納部65は、例えば第1仮想制御装置21から送信されるデータを所定のデータフォーマットに従って格納する領域である。第2ブロック60は、受信フラグ56,57を含まないため、管理部12は、データ書込み時に書込みポインタWP1が第2ブロック60を参照していれば、たとえ仮想制御装置22,23によって読み出されていないデータがデータ格納部65に格納されていても、当該データ格納部65に新たなデータを書き込む(上書きする)。
【0090】
なお、第2ブロック60は、受信フラグ56,57に相当する構造を含んでもよい。この場合であっても、管理部12は、当該構造の内容を無視して、データ格納部65に新たなデータを書き込む。すなわち、第2ブロック60におけるデータの上書きは、常に許可されている。
【0091】
図4は、初期状態におけるバッファ19を示している。初期状態において、すべての第1ブロック50及び第2ブロック60におけるデータ格納部55,65は空(ブランク)であり、すべての第1ブロック50における受信フラグ56,57及び生存フラグ58はセットされていない状態(すなわち「0」)である。
【0092】
[5.制御方法]
図5及び
図6は、実施形態に係る制御方法を例示するフローチャートである。
図5のフローチャートは、第1仮想制御装置21からバッファ19にデータが送信される際の管理部12の動作手順を示している(書込動作)。
図6のフローチャートは、バッファ19から第2仮想制御装置22又は第3仮想制御装置23にデータが送信される際の管理部12の動作手順を示している(読出動作)。これらの動作手順は、管理部12が記憶部15からコンピュータプログラム15aを読み取って各種の演算及び処理を実行することで実現される。
図5及び
図6に示す各ステップは、適宜順番が前後してもよい。
【0093】
図7は、第1仮想制御装置21からバッファ19に送信されるデータD1~D8を例示する表である。なお、データD1~D8は本開示の様々なパターンを網羅的に説明するためのモデルであって、実際に第1仮想制御装置21から送信されるデータとは必ずしも一致しない。以下に説明する例では、第1仮想制御装置21はバッファ19にデータD1~D8をこの順で送信する。本例において、第1仮想制御装置21は、バッファ19へのデータ送信が未了となった場合には、データ送信が完了するまで複数回、データの送信をリトライする。
【0094】
データD1,D2は、仮想制御装置22,23の両方に宛てて送信されるデータである。データD3,D4,D7は、第3仮想制御装置23のみに宛てて送信されるデータである。データD5,D6,D8は、第2仮想制御装置22のみに宛てて送信されるデータである。
図7に示す表では、仮想制御装置22,23がそれぞれ送信先に該当する場合には「1」と表示し、送信先に該当しない場合には「0」と表示している。
【0095】
データD1~D4は、車両V1の制御に関する「制御データ」である。制御データとしては、例えば、車両V1の各部(例えば、制動装置、ドア、バッテリ、エアコン等)を制御するデータが挙げられる。制御データは、データの連続性よりも、リアルタイム性(仮想制御装置13が最新値のデータを取得すること)の方が重視される。例えば、制御データがエアコンを制御するための車内温度に関するデータである場合、10分前から5分前までの車内温度の時系列データよりも、現在の車内温度の方が重視される。このような場合、仮想制御装置13が最新値のデータを取得できるのであれば、過去のデータが上書きによって消去されることは許容される。
【0096】
データD5,D6は、車両V1の走行制御に関する「走行データ」である。走行データは制御データの下位概念である。走行データとしては、例えば車両V1の制動装置を制御するデータが挙げられる。走行データは、走行データ以外の制御データと比べ、リアルタイム性をより重視される。例えば、走行データが制動装置に自動ブレーキを指示するデータである場合、当該走行データは遅滞なく仮想制御装置13に取得されることが好適である。
【0097】
データD7,D8は、車載制御装置1の各部を更新するための更新データである。なお、データD7,D8は、車載制御装置1を診断するためのダイアグデータであってもよいし、音声又は動画等のストリームデータであってもよい。すなわち、データD7,D8は、連続性が重視されるデータである。
【0098】
データD2~D8には、データの種類に応じて、それぞれ書込予定領域R1が予め設定されている。書込予定領域R1は、書込みポインタWP1が当初に参照するブロック19aの種類を意味する。書込予定領域R1としては、第1ブロック50又は第2ブロック60が選択される。本例において、管理部12は、原則として第1ブロック50を書込予定領域R1に選択する。データD2~D5,D7,D8の書込予定領域R1は、第1ブロック50である。特に、データが更新データ、ダイアグデータ、ストリームデータ等の連続性を重視するデータである場合には、管理部12は、第1ブロック50を当該データの書込予定領域R1に選択する。
【0099】
一方で、管理部12は、第1仮想制御装置21から送信されるデータが、リアルタイム性が特に重視されるデータ(例えば、走行データ等の制御データ)である場合に、第2ブロック60を当該データの書込予定領域R1に選択してもよい。例えば、データD6の書込予定領域R1は、第2ブロック60である。
【0100】
なお、データD1には、書込予定領域R1が予め設定されていない。この場合、データD1を書き込む際に、書込みポインタWP1が当初に参照するブロック19aが書込予定領域R1となる。
図7では、書込予定領域R1となりうる場合には「1」を、書込予定領域R1となりえない場合には「0」を、それぞれ表示している。
【0101】
データD1~D8には、データの種類に応じて、それぞれ所定値Th1が予め設定されている。管理部12は、車両V1の状態に応じて所定値Th1を決定する。例えば、管理部12は、車両V1が停車状態である場合に、所定値Th1を第1の値X1とし、車両V1が走行状態である場合に、所定値Th1を第1の値X1よりも小さい第2の値X2とする(X2<X1)。
図7に示す例では、管理部12は、データD1の所定値Th1について、車両V1が停車状態である場合には「3」に決定し、車両V1が走行状態である場合には、「1」に決定する。
【0102】
所定値Th1は、後述のとおり、データの書込先を第1ブロック50から第2ブロック60に切り替えるか否かを判定するための閾値であり、所定値Th1が小さいほど、切り替えやすい。車両V1の走行中に送受信されるデータには、リアルタイム性が重視されるデータが多い。このため、以下に説明する例では、走行状態における所定値Th1をより小さい第2の値X2とすることで、複数の仮想制御装置13の間における最新値の送受信を維持する。
【0103】
また、所定値Th1は、リアルタイム性が重視されるデータほど、小さく設定される。例えば、データD5(走行データ)、データD1(制御データ)、データD7(更新データ)の順にリアルタイム性が重視される場合、停車状態において、それぞれ所定値Th1の値が「2」、「3」、「8」に設定される。
【0104】
さらに、所定値Th1は、連続性が重視されるデータにおいて、生存フラグ58が取りうる最大値以上の値に設定されてもよい。例えば、生存フラグ58の最大値が「255」である場合に、連続性が重視されるデータD8の所定値Th1は「255」に設定されてもよい。
図7に示すようなデータの種類と書込予定領域R1との関係や、データの種類と所定値Th1との関係は、例えばパラメータとして記憶部15に予め記憶されている。
【0105】
図5を参照する。はじめに、管理部12は、第1仮想制御装置21から送信される「データD1の送信要求」を受信する(ステップS101)。データD1の送信要求は、第1仮想制御装置21から送信されるデータD1を特定するための各種の情報(例えば、データD1のデータ本体、送信先、種類)を含む。
【0106】
次に、管理部12は、データD1の書込予定領域R1が第1ブロック50であるか否かを判定する(ステップS102)。ステップS102において、管理部12は、当該送信要求に基づいて、データD1の書込予定領域R1となるブロック19aを選択する。
図7に示すように、データD1は第1ブロック50及び第2ブロック60のどちらを書込予定領域R1にしてもよいため、管理部12は、現時点で書込みポインタWP1が参照しているブロック19a(本例の場合、先頭である第1ブロック51)を書込予定領域R1とする。
【0107】
本例の場合、データD1の書込予定領域R1が第1ブロック50であるため(ステップS102のYES)、管理部12はすべての第1ブロック51~54において第1受信フラグ56及び第2受信フラグ57の少なくとも一方がセットされているか否かを判定する(ステップS103)。具体的には、管理部12は、書込みポインタWP1が参照している第1ブロック50(例えば、第1ブロック51)の第1受信フラグ56及び第2受信フラグ57の少なくとも一方がセットされているか否かを判定し、第1受信フラグ56及び第2受信フラグ57の少なくとも一方がセットされている場合には、書込みポインタWP1を次の第1ブロック50(例えば第1ブロック52)に進める。
【0108】
管理部12は、第1受信フラグ56及び第2受信フラグ57の少なくとも一方がセットされている場合、書込みポインタWP1を順次進めて各第1ブロック50における第1受信フラグ56及び第2受信フラグ57の状態を確認する。管理部12は、書込みポインタWP1を進めるごとに、参照した第1ブロック50の生存フラグ58に「1」を加算する。そして、書込みポインタWP1が再度、ステップS103の当初に参照した第1ブロック50(本例では第1ブロック51)に戻ると、管理部12はすべての第1ブロック51~54において第1受信フラグ56及び第2受信フラグ57の少なくとも一方がセットされていると判定し(ステップS103のYES)、ステップS108に進む。
【0109】
本例の場合、書込みポインタWP1がはじめに参照する第1ブロック51の受信フラグ56,57は、初期状態(
図4の状態)においてセットされていない(すなわち、いずれも「0」である)。少なくともひとつの第1ブロック50において第1受信フラグ56及び第2受信フラグ57の両方がセットされていない状態であるため(ステップS103のNO)、管理部12はステップS104に進む。
【0110】
次に、管理部12は、書込みポインタWP1が参照している第1ブロック51のデータ格納部55にデータD1を書き込む(ステップS104)。続いて、第1ブロック51の受信フラグ56,57を「1」にセットし(ステップS105)、第1ブロック51の生存フラグ58に「1」を加算して、書込みポインタWP1を次の第1ブロック52に進める(ステップS106)。
【0111】
最後に、管理部12は、第1仮想制御装置21からバッファ19へのデータD1の送信が完了したことを通知する「送信完了通知」を第1仮想制御装置21に送信する(ステップS107)。
【0112】
第1仮想制御装置21は、データD1に関する送信完了通知を受信すると、続いて、データD2,D3,D4の送信要求を管理部12に順次送信する。管理部12は、データD2,D3,D4についても上記と同様のステップS101~S107を繰り返し実行する。
【0113】
図8は、実施形態に係るバッファ19の様子を(a)、(b)、(c)、(d)の時系列順に示す模式図である。本例において、書込みポインタWP1及び第1読出しポインタRP1は正常に進む一方。一方で、第2読出しポインタRP2は、例えば第3仮想制御装置23の異常に起因して、第1ブロック51を参照した状態のまま動かない。
【0114】
図8中の(a)は、バッファ19へのデータD1~D4の書込みが完了した時点におけるバッファ19の様子を示している。すなわち、管理部12は、第1ブロック52のデータ格納部55にデータD2を格納し、第1ブロック52の受信フラグ56,57を「1」にセットし、第1ブロック52の生存フラグ58に「1」を加算する。そして、管理部12は、データD2に関する送信完了通知を第1仮想制御装置21に送信する。
【0115】
同様に、管理部12は、第1ブロック53,54のデータ格納部55にデータD3,D4を格納し、第1ブロック53,54の第2受信フラグ57を「1」にセットし、第1ブロック53,54の生存フラグ58に「1」を加算する。そして、管理部12は、データD3,D4に関する送信完了通知を第1仮想制御装置21に送信する。
【0116】
第1仮想制御装置21は、データD4に関する送信完了通知を受信すると、データD5の送信要求を管理部12に送信する。管理部12は、データD5の送信要求を受信する(ステップS101)。
【0117】
管理部12は、データD5の書込予定領域R1が第1ブロック50であるか否かを判定する(ステップS102)。
図7に示すように、データD5は第1ブロック50のみを書込予定領域R1として許容するため、管理部12は、現時点で書込みポインタWP1が参照しているブロック19aが第1ブロック50であれば、その位置をそのまま参照し、書込みポインタWP1が参照しているブロック19aが第2ブロック60であれば、次の第1ブロック50を参照するまで書込みポインタWP1を進める。本例の場合、データD4の書込み後に書込みポインタWP1は第2ブロック61を参照しているため、管理部12は第1ブロック51を参照するまで書込みポインタWP1を進める。以上により、ステップS102が終了する。
【0118】
そして、データD5の書込予定領域R1は第1ブロック50であるため(ステップS102のYES)、管理部12はすべての第1ブロック51~54において第1受信フラグ56及び第2受信フラグ57の少なくとも一方がセットされているか否かを判定する(ステップS103)。本例の場合、データD5に関するステップS103開始時において、
図8中の(a)に示すように、第1ブロック51~54にはそれぞれ未読出しのデータD1~D4が格納されており、受信フラグ56,57も少なくとも一方がセットされている。
【0119】
このため、管理部12は、書込みポインタWP1を順次進めながら、参照した第1ブロック50の生存フラグ58に「1」を加算していく。これにより、
図8中の(b)に示すように、第1ブロック51~54の生存フラグ58のセット数はそれぞれ「2」となる。やがて、書込みポインタWP1は、ステップS103の当初に参照した第1ブロック51に戻る。このため、管理部12はすべての第1ブロック51~54において第1受信フラグ56及び第2受信フラグ57の少なくとも一方がセットされていると判定し(ステップS103のYES)、ステップS108に進む。
【0120】
次に、管理部12は、データD5についての所定値Th1を決定する(ステップS108)。例えば、管理部12は、車両V1の状態と、データD5の種類に基づいて、所定値Th1を決定する。車両V1が停車状態にあり、データD5が「走行データ」である場合、
図7に示すように、管理部12は所定値Th1の値を「2」に決定する。管理部12は、例えば、所定値Th1を書込みポインタWP1が参照している第1ブロック51に格納する。以上により、ステップS108が終了する。
図8中の(b)は、ステップS108の終了時におけるバッファ19の様子を示している。
【0121】
管理部12は、書込みポインタWP1が参照している第1ブロック51の生存フラグ58のセット数が、ステップS108において決定した所定値Th1よりも大きいか否かを判定する(ステップS109)。本例の場合、管理部12は、第1ブロック51の生存フラグ58のセット数の「2」が所定値Th1の「2」と等しいため、「生存フラグ58のセット数が所定値Th1よりも大きい」場合に該当しないと判定し(ステップS109のNO)、ステップS110に進む。
【0122】
次に、管理部12は、第1仮想制御装置21から受信したデータD5を含む情報(例えば、データD5の送信要求)を棄却する(ステップS110)。その後、管理部12は、第1仮想制御装置21からバッファ19へのデータD5の送信が完了しなかったことを通知する「送信未了通知」を第1仮想制御装置21に送信する(ステップS111)。
【0123】
第1仮想制御装置21は、データD5に関する送信未了通知を受信すると、データD5の送信要求を管理部12に再送する。すなわち、第1仮想制御装置21は、データD5の送信をリトライする。本例の場合、第1仮想制御装置21は、回数制限なく何度でもデータD5の送信をリトライするが、データD5に関する送信未了通知を所定回数(例えばデータD5の所定値Th1よりも多い回数)受信した時点で、データD5の送信を中止してもよい。
【0124】
管理部12は、データD5の送信要求を、再度受信する(ステップS101)。管理部12は、上記と同様に、ステップS102のYESのルート、ステップS103のYESのルートを進む。管理部12は、ステップS103において、第1ブロック51~54を順次参照しながら、それぞれの生存フラグ58に「1」を加算する。これにより、
図8中の(c)に示すように、第1ブロック51~54の生存フラグ58のセット数はそれぞれ「3」となる。やがて、書込みポインタWP1は、ステップS103の当初に参照した第1ブロック51に戻り、管理部12はステップS108に進む。
【0125】
続いて、管理部12は、データD5についての所定値Th1を決定する(ステップS108)。前回のステップS108と同様に、車両V1が停車状態にある場合、管理部12は所定値Th1の値を「2」に決定して、所定値Th1を第1ブロック51に格納する。一方で、例えば、ステップS108の実行時点において車両V1が走行状態にある場合、
図7に示すように、管理部12は所定値Th1の値を「1」に決定する。本例の場合、車両V1は停車状態にあるため、所定値Th1の値は「2」となる。
【0126】
次に、管理部12は、第1ブロック51の生存フラグ58のセット数が、所定値Th1よりも大きいか否かを判定する(ステップS109)。本例の場合、管理部12は、第1ブロック51の生存フラグ58のセット数の「3」が所定値Th1の「2」よりも大きいと判定し(ステップS109のYES)、ステップS112に進む。
【0127】
管理部12は、第2ブロック60のデータ格納部65にデータD5を書き込む(ステップS112)。ステップS112において、管理部12は、はじめに書込みポインタWP1を第2ブロック60に進める。例えば、管理部12は、書込みポインタWP1をデータ格納部65の更新日時が最も古い第2ブロック60(すなわち、最も古いデータが格納されている第2ブロック60)に進める。最も古いデータが格納されている第2ブロック60が複数ある場合には、管理部12は、これらの第2ブロック60のうち最も先頭側の第2ブロック60に書込みポインタWP1を進める。本例の場合、初期状態においてすべてのデータ格納部65はブランクであるため、管理部12は第2ブロック61に書込みポインタWP1を進める。
【0128】
次に、管理部12は、書込みポインタWP1が参照している第2ブロック60(本例の場合、第2ブロック61)のデータ格納部65にデータD5を書き込む。書込み処理が完了すると、管理部12は書込みポインタWP1を次のブロック19aに進める。本例の場合、管理部12は、書込みポインタWP1を第2ブロック61から第2ブロック62に進める。以上により、ステップS112が終了する。
図8中の(c)は、ステップS112の終了時点におけるバッファ19の様子を示している。
【0129】
管理部12が実行する、ステップS102からステップS103、S108及びS109を経由してステップS112に至る一連の制御が、本開示の「切替制御」である。切替制御は、データの書込予定領域R1が第1ブロック50であり、第1ブロック50の読出しが正常になされないために、本来であれば書込みポインタWP1がデータを書き込むことなく第1ブロック50を周回する(又は書込みポインタWP1が所定のブロック19aで動かなくなる)ような状態となる場合に、データの書込先を第2ブロック60に切り替えることで、最新のデータをバッファに書込み可能とする制御である。
【0130】
より具体的には、切替制御は、第1仮想制御装置21から送信されるデータの書込予定領域R1が第1ブロック50であり(ステップS102のYES)、バッファ19に含まれるすべての第1ブロック50において第1受信フラグ56及び第2受信フラグ57のうち少なくとも一方がセットされ(ステップS103のYES)、さらに書込みポインタWP1が参照している第1ブロック50の生存フラグ58のセット数が所定値Th1を超える場合に(ステップS108と、ステップS109のYES)、第1仮想制御装置21から送信されるデータを第2ブロック60に書き込む(ステップS112)という制御である。
【0131】
これにより、管理部12は、第1ブロック50におけるデータの連続性を維持した状態で、第1仮想制御装置21から送信されるデータ(特に、リアルタイム性が重視されるデータ)をバッファ19に格納することができる。
【0132】
ステップS112の後、管理部12は、データD5に関する送信完了通知を第1仮想制御装置21に送信する(ステップS113)。第1仮想制御装置21は、データD5に関する送信完了通知を受信すると、次にデータD6の送信要求を管理部12に送信する。
【0133】
管理部12は、データD6の送信要求を受信する(ステップS101)。
図7に示すように、データD6の書込予定領域R1は第2ブロック60であるため(ステップS102のNO)、管理部12はデータD6を第2ブロック60に書き込む(ステップS112)。
【0134】
本例の場合、書込みポインタWP1は第2ブロック62を参照しているため、管理部12はそのまま第2ブロック62にデータD6を書き込み、書込みポインタWP1を第2ブロック63に進める。
図8中の(d)は、データD6に関するステップS112終了時点におけるバッファ19の様子を示している。その後、管理部12は、データD6に関する送信完了通知を第1仮想制御装置21に送信する(ステップS113)。
【0135】
図6を参照する。次に、バッファ19からのデータ読出しについて説明する。はじめに、管理部12は、受信側の第2仮想制御装置22から送信される「データの受信要求」を受信する(ステップS201)。データの受信要求は、例えば第2仮想制御装置22が受信処理可能であることを通知する情報を含む。
【0136】
次に、管理部12は、第1読出しポインタRP1が参照するブロック19aに第2仮想制御装置22を送信先とするデータが保存されているか否かを判定する(ステップS202)。第2仮想制御装置22を送信先とするデータが保存されている場合(ステップS202のYES)、管理部12は、当該ブロック19aが第1ブロック50か否かを判定する(ステップS203)。
【0137】
第1読出しポインタRP1が参照するブロック19aに第2仮想制御装置22を送信先とするデータが保存されていない場合(ステップS202のNO)、管理部12は第1読出しポインタRP1を1個進める(ステップS209)。ステップS209の後に実行されるステップS210,S211については、後述する。
【0138】
図8中の(a)を参照する。本例の場合、はじめに第1読出しポインタRP1が参照するブロック19a(第1ブロック51)には第2仮想制御装置22を送信先とするデータD1が保存され(ステップS202のYES)、当該ブロック19aは第1ブロック51である(ステップS203のYES)。このため、管理部12は第1ブロック51のデータ格納部55のデータD1を第2仮想制御装置22に読み出して(ステップS204)、第1ブロック51の第1受信フラグ56を「0」にリセットする(ステップS205)。
【0139】
ステップS205の後、管理部12はデータD1を読み出した第1ブロック51の受信フラグ56,57がすべてリセットされたか否かを判定する(ステップS206)。第1ブロック51の受信フラグ56,57がすべてリセットされている場合(ステップS206のYES)、管理部12は第1ブロック51の生存フラグ58を「0」にリセットして(ステップS207)、第1読出しポインタRP1を第1ブロック52に進める。
【0140】
第1ブロック51の受信フラグ56,57の少なくとも一方がセットされている場合(ステップS206のNO)、管理部12はステップS207をスキップして(すなわち、第1ブロック51の生存フラグ58をリセットせずに)、第1読出しポインタRP1を第1ブロック52に進める。本例の場合、ステップS205の後、第1ブロック51の第2受信フラグ57が「1」にセットされているため(ステップS206のNO)、管理部12は生存フラグ58をリセットすることなく、第1読出しポインタRP1を第1ブロック52に進める。続いて、管理部12は、データD1に関する受信完了通知を第2仮想制御装置22に送信する(ステップS208)。
【0141】
第2仮想制御装置22は、受信完了通知を受信すると、管理部12に引き続きデータの受信要求を送信する。管理部12は、上記のデータD1の場合と同様に、ステップS201~S208を実行する。すなわち、管理部12は、第1ブロック52のデータD2を第2仮想制御装置22に読出し、第1ブロック52の第1受信フラグ56を「0」にリセットし、第1読出しポインタRP1を第1ブロック53に進めて、第2仮想制御装置22にデータD2に関する受信完了通知を送信する。
【0142】
続いて、管理部12は、第2仮想制御装置22からの受信要求に応じて(ステップS201)、第1ブロック53に第2仮想制御装置22を送信先とするデータが格納されているか否かを判定する(ステップS202)。本例の場合、第1ブロック53のデータD3は第3仮想制御装置23のみを送信先とするため、第1ブロック53には第2仮想制御装置22を送信先とするデータが格納されていない(ステップS202のNO)。このため、管理部12は第1読出しポインタRP1を第1ブロック54に進める(ステップS209)。
図8中の(b)は、読出動作に関しては、ステップS209の終了時点におけるバッファ19の様子を示している。
【0143】
次に、管理部12は、第1読出しポインタRP1がバッファ19を一巡したか否かを判定する(ステップS210)。具体的には、管理部12は、第1読出しポインタRP1が参照しているブロック19aが、ステップS201の直後に実行される1回目のステップS202の際に参照したブロック19a(本例の場合、第1ブロック51)と同じブロックを参照しているか否かを判定する。
【0144】
管理部12は、第1読出しポインタRP1がバッファ19を一巡した場合(ステップS210のYES)、バッファ19に含まれるいずれのブロック19aにも第2仮想制御装置22を送信先とするデータが格納されていないと判断して、データがない旨を通知する「受信未了通知」を第2仮想制御装置22に送信する(ステップS211)。
【0145】
管理部12は、第1読出しポインタRP1がバッファ19を一巡していない場合(ステップS210のNO)、ステップS202に戻り、第1読出しポインタRP1が参照しているブロック19aに第2仮想制御装置22を送信先とするデータが格納されているか否かを判定する。
【0146】
本例の場合、ステップS209の後、第1読出しポインタRP1は第1ブロック54を参照しているため、第1読出しポインタRP1は第1ブロック51に至っておらず、一巡してない。このため、管理部12は、ステップS202に戻る。そして、第1ブロック54には第2仮想制御装置22を送信先とするデータが格納されていないため(ステップS202のNO)、管理部12は第1読出しポインタRP1を第2ブロック61に進めて、ステップS210を経て、再度ステップS202に戻る。
【0147】
このとき、例えば書込動作は
図8中の(c)に示す時点に至っており、第2ブロック61には第2仮想制御装置22を送信先とするデータD5が格納されている(ステップS202のYES)。そして、データD5は第2ブロック61であるため(ステップS203のNO)、管理部12は第2ブロック61のデータ格納部65に格納されているデータD5を第2仮想制御装置22へ読み出す(ステップ212)。その後、管理部12は、第1読出しポインタRP1を次の第2ブロック62に進めて、第2仮想制御装置22にデータD5に関する受信完了通知を送信する(ステップS213)。
【0148】
図8中の(d)は、読出動作に関しては、ステップS213終了時点におけるバッファ19の様子を示している。上記のとおり、バッファ19を第1ブロック50と第2ブロック60とに分けることによって、第2読出しポインタRP2が所定のブロック19aを参照した状態から動かない場合であっても、管理部12は第1仮想制御装置21から送信される新たなデータD5をバッファ19の第2ブロック60に書き込むことが可能であり、当該第2ブロック60のデータD5を第2仮想制御装置22へ読み出すことが可能である。
【0149】
すなわち、実施形態に係る車載制御装置1及びその制御方法によれば、第3仮想制御装置23に異常が生じた場合であっても、第1仮想制御装置21と第2仮想制御装置22との間のデータの送受信を継続することができる。この結果、車載制御装置1の信頼性を向上させることができる。
【0150】
図5、
図6及び
図9を参照する。次に、データD7,D8の送受信について説明する。
図9は、
図8中の(d)の続きであり、実施形態に係るバッファ19の様子を(a)、(b)の時系列順に示す模式図である。
【0151】
本例では、
図8の様子の後、第3仮想制御装置23の異常が一旦解消され、第3仮想制御装置23が管理部12にデータの受信要求を送信する。管理部12は、第3仮想制御装置23の受信要求に応じて、
図6に示す制御方法を実行することで、データD1を第3仮想制御装置23へ読み出す。すなわち、管理部12は、第3仮想制御装置23の受信要求を受信し(ステップS201)、第2読出しポインタRP2が参照している第1ブロック51に第3仮想制御装置23を送信先とするデータD1が格納されていると判定する(ステップS202のYES)。
【0152】
データD1は第1ブロック51に格納されているため(ステップS203のYES)、管理部12は、データD1を第3仮想制御装置23に読み出した後(ステップS204)、第1ブロック51の第2受信フラグ57をリセットする(ステップS205)。これにより、第1ブロック51の受信フラグ56,57が両方ともセットされていない状態(両方とも「0」)となるため(ステップS206のYES)、管理部12は第1ブロック51の生存フラグ58を「0」にリセットし(ステップS207)、第2読出しポインタRP2を第1ブロック52に進めて、データD1に関する受信完了通知を第3仮想制御装置23に送信する(ステップS208)。
図9中の(a)は、ステップS208終了時点におけるバッファ19の様子を示している。
【0153】
なお、本例では、この後、第3仮想制御装置23に異常が再発生し、第2読出しポインタRP2は第1ブロック52を参照した状態で動かなくなる(第3仮想制御装置23から受信要求が送られなくなる)。
【0154】
図5を参照する。一方、送信側の第1仮想制御装置21は、データD6の送信完了通知を受信した後、データD7,D8の送信要求をバッファ19に順次送信する。管理部12は、データD7の送信要求を受信すると(ステップS101)、
図7に示すようにデータD7の書込予定領域R1として第1ブロック50を選択し、書込みポインタWP1を第2ブロック60から第1ブロック51まで進める(ステップS102)。そして、第1ブロック51の受信フラグ56,57はいずれも「0」であり、セットされていないため(ステップS103のYES)、管理部12は、データD7を第1ブロック51のデータ格納部55に書き込む(ステップS104)。
【0155】
その後、管理部12は、第1ブロック51の第2受信フラグ57を「1」にセットし(ステップS105)、生存フラグ58に「1」を加算することで生存フラグ58のセット数を「0」から「1」に変更するとともに、書込みポインタWP1を次の第1ブロック52に進めて(ステップS106)、データD7の送信完了通知を送信する(ステップS107)。
【0156】
続いて、管理部12は、第1仮想制御装置21からデータD8の送信要求を受信する(ステップS101)。
図7に示すようにデータD8の書込予定領域R1は第1ブロック50とされるため、書込みポインタWP1はそのまま第1ブロック52を参照する(ステップS102)。データD7の書き込み後、すべての第1ブロック51~54において、第2受信フラグ57が「1」にセットされているため(ステップS103のYES)、管理部12は
図7に示すようにデータD8の所定値Th1を「255」に決定する(ステップS108)。
【0157】
そして、管理部12は、現在参照している第1ブロック52に所定値Th1を格納して、第1ブロック52の生存フラグ58のセット数が所定値Th1よりも大きいか否かを判定する(ステップS109)。前述の通り、値「255」は、本例において生存フラグ58のセット数が取り得る最大値であるため、データD8に関して、ステップS109は必ず「NO」となる。このため、管理部12は、データD8を棄却し、第1ブロック52の生存フラグ58に「1」を加算するとともに、書込みポインタWP1を次の第1ブロック53に進める(ステップS110)。その後、管理部12は、第1仮想制御装置21にデータD8の送信未了通知を送信する(ステップS111)。
【0158】
第1仮想制御装置21は、データD8の送信未了通知を受信すると、データD8の送信要求を管理部12に再送する。管理部12は、データD8の送信要求を再度受信すると(ステップS101)、上記と同様に、ステップS102,S103,S108~S111の流れで各制御を実行する。データD8の所定値Th1が生存フラグ58のセット数の最大値以上の値であるため、いずれかの第2受信フラグ57が「0」にリセットされない限り、データD8を書き込むための書込みポインタWP1は第1ブロック51~54を延々と循環する。
【0159】
図9中の(b)は、データD8用の書込みポインタWP1が第1ブロック51~54を複数回(例えば、3回)循環した時点におけるバッファ19の様子を示している。データD8は、
図7に示すように更新データであり、連続性が重要視されるデータである。仮に、データD8が第2ブロック60に格納されると、データD8が第2仮想制御装置22に読み出されることなく上書きされたり、読み出す順序がデータD8に連なるデータとの間で前後する場合があり、データの連続性を維持できないおそれがある。
【0160】
本例では、データD8の所定値Th1を生存フラグ58のセット数の最大値以上の値とすることで、データD8について切替制御は実行されない。すなわち、本来第1ブロック50に書き込むべきデータD8が、第2ブロック60に書き込まれることはない。これにより、データD5等のリアルタイム性が重視されるデータの送受信を維持しつつ、データD8の連続性も維持することができる。これにより、車載制御装置1の信頼性をより向上させることができる。
【0161】
[6.仮想解析装置について]
管理部12は、切替制御を実行する際に、ステップS109において書込みポインタWP1が参照している第1ブロック50のデータ格納部55に格納されているデータを、仮想解析装置24に読み出す。
【0162】
例えば、
図8中の(c)に示すように、書込みポインタWP1はステップS109において第1ブロック51を参照し、第1ブロック51の生存フラグ58のセット数である「3」が所定値Th1である「2」を超えるため、管理部12はデータD5の書込先を第2ブロック60に切り替える。このとき、管理部12は、第1ブロック51に格納されているデータD1を仮想解析装置24に読み出す。
【0163】
データD1は、異常のある仮想制御装置23が読み出す予定であったデータであるため、仮想制御装置23の異常解析に利用することができる。管理部12は、このようなデータを仮想解析装置24に読み出すことで、異常の解析精度を向上させることができる。
【0164】
[7.変形例]
以下、実施形態の変形例について説明する。変形例において、実施形態と同じ構成については同じ符号を付して説明を省略する。
【0165】
上記の実施形態では、第1ブロック50は生存フラグ58を含み、管理部12は、生存フラグ58が所定値Th1よりも大きくなる場合に限り、切替制御を実行する。しかしながら、管理部12は、生存フラグ58のセット数を考慮することなく、すべての第1ブロック51~54が満杯状態(すなわち、第1受信フラグ56及び第2受信フラグ57のうち少なくとも一方がセット状態)となった場合に、切替制御を実行してもよい。すなわち、管理部12は、ステップS103がYESとなった場合に、ステップS108及びステップS109をスキップして、直接ステップS112を実行してもよい。
【0166】
このように構成することで、より早く切替制御を実行することができるため、第1仮想制御装置21から送信されるデータがリアルタイム性がより要求されるデータの場合に好適である。
【0167】
[6.補記]
なお、上記の実施形態については、その少なくとも一部を、相互に任意に組み合わせてもよい。また、今回開示された実施形態はすべての点で例示であって制限的なものではないと考えられるべきである。本開示の範囲は特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【0168】
1 車載制御装置
11 物理リソース
12 管理部
13 仮想制御装置
13a ゲストOS
13b アプリケーション
14 制御部
15 記憶部
15a コンピュータプログラム
15b 仮想化オペレーティングシステム(仮想化OS)
15c ゲストオペレーティングシステム(ゲストOS)
16 通信部
17 読取部
18 記録媒体
19 バッファ
21 仮想制御装置(第1仮想制御装置)
22 仮想制御装置(第2仮想制御装置)
23 仮想制御装置(第3仮想制御装置)
24 仮想制御装置(仮想解析装置)
31 ECU
31a 通信線
32 通信装置
32a 通信線
4 外部装置
50 第1ブロック
51 第1ブロック
52 第1ブロック
53 第1ブロック
54 第1ブロック
55 データ格納部
56 第1受信フラグ
57 第2受信フラグ
58 生存フラグ
60 第2ブロック
61 第2ブロック
62 第2ブロック
63 第2ブロック
64 第2ブロック
65 データ格納部
9 バッファ
90 ブロック
91 ブロック
92 ブロック
93 ブロック
94 ブロック
V1 車両
A1 矢印
A2 矢印
WP1 書込みポインタ
RP1 第1読出しポインタ
RP2 第2読出しポインタ
Th1 所定値
D1 データ
D2 データ
D3 データ
D4 データ
D5 データ
D6 データ
D7 データ
D8 データ
R1 書込予定領域
X1 第1の値
X2 第2の値