(57)【要約】【課題】プログラムの更新の際、実行対象のプログラムが更新後のプログラムに変更されたことを確認できる車両制御装置、プログラムの確認方法およびプログラムを提供する。【解決手段】車両制御装置は、車両を制御する第１制御プログラム、第２制御プログラムをそれぞれ記憶する第１記憶部、第２記憶部と、第１制御プログラム、第２制御プログラムをそれぞれ実行する第１実行部、第２実行部と、車外から取得した更新データに基づいて、第１制御プログラムの更新版である第１更新プログラムを第１記憶部に記憶させたのち、第１実行部の実行対象を第１更新プログラムに変更することが可能な更新部とを備え、更新部が、当該変更を行った場合、第２実行部は、第１実行部の実行対象のプログラムに含まれる識別子を前記第１実行部から取得し、少なくとも取得した識別子に基づいて、第１実行部の実行対象のプログラムが第１更新プログラムに変更されたことを確認する。【選択図】図３
2019144670.tif 000002
【特許請求の範囲】
【請求項１】
車両を制御する第１制御プログラムを記憶する第１記憶部と、
前記車両を制御する第２制御プログラムを記憶する第２記憶部と、
前記第１制御プログラムを実行する第１実行部と、
前記第２制御プログラムを実行する第２実行部と、
前記車両の外部の装置からネットワークを介して取得される更新データに基づいて、前記第１制御プログラムの更新版である第１更新プログラムを前記第１記憶部に記憶させたのち、前記第１実行部の実行対象のプログラムを前記第１更新プログラムに変更することが可能な更新部とを備え、
前記更新部が、前記第１実行部の実行対象のプログラムを前記第１更新プログラムに変更した場合、前記第２実行部は、前記第１実行部の実行対象のプログラムに含まれる識別子を前記第１実行部から取得し、少なくとも前記第１実行部から取得した前記識別子に基づいて、前記第１実行部の実行対象のプログラムが前記第１更新プログラムに変更されたことを確認する、車両制御装置。
【請求項２】
前記更新部は、さらに、前記更新データに基づいて、前記第２制御プログラムの更新版である第２更新プログラムを前記第２記憶部に記憶させたのち、前記第２実行部の実行対象のプログラムを前記第２更新プログラムに変更することが可能であり、
前記更新部が、前記第２実行部の実行対象のプログラムを前記第２更新プログラムに変更した場合、前記第１実行部は、前記第２実行部の実行対象のプログラムに含まれる識別子を前記第２実行部から取得し、少なくとも前記第２実行部から取得した前記識別子に基づいて、前記第２実行部の実行対象のプログラムが前記第２更新プログラムに変更されたことを確認する、請求項１に記載の車両制御装置。
【請求項３】
前記更新部が、前記第１実行部の実行対象のプログラムを前記第１更新プログラムに変更し、前記第２実行部の実行対象のプログラムを前記第２更新プログラムに変更した場合、
前記第１実行部が、前記第２実行部の実行対象のプログラムが前記第２更新プログラムに変更されたことを確認し、かつ、前記第２実行部が、前記第１実行部の実行対象のプログラムが前記第１更新プログラムに変更されたことを確認した場合に、前記第１実行部は、前記第１更新プログラムを実行し、前記第２実行部は、前記第２更新プログラムを実行する、請求項２に記載の車両制御装置。
【請求項４】
前記更新部が、前記第１実行部の実行対象のプログラムを前記第１更新プログラムに変更し、前記第２実行部の実行対象のプログラムを前記第２更新プログラムに変更した場合、
前記第１更新プログラムは、前記第１記憶部の前記第１制御プログラムが記憶された領域以外の領域に記憶され、前記第２更新プログラムは、前記第２記憶部の前記第２制御プログラムが記憶された領域以外の領域に記憶され、
前記第１実行部が、前記第２実行部の実行対象のプログラムが前記第２更新プログラムに変更されたことを確認できない場合、前記第２実行部が、前記第１実行部の実行対象のプログラムが前記第１更新プログラムに変更されたことを確認できない場合、の少なくともいずれか一方の場合に、前記第１実行部は、前記第１制御プログラムを実行し、前記第２実行部は、前記第２制御プログラムを実行する、請求項２または３に記載の車両制御装置。
【請求項５】
前記更新部が、前記第１実行部の実行対象のプログラムを前記第１更新プログラムに変更し、前記第２実行部の実行対象のプログラムを前記第２更新プログラムに変更していない場合、
前記第１実行部が、前記第２実行部の実行対象のプログラムに含まれる識別子を前記第２実行部から取得し、少なくとも前記第２実行部から取得した前記識別子に基づいて、前記第２実行部の実行対象のプログラムが前記第２制御プログラムから変更されていないことを確認し、かつ、前記第２実行部が、前記第１実行部の実行対象のプログラムが前記第１更新プログラムに変更されたことを確認した場合に、前記第１実行部は、前記第１更新プログラムを実行し、前記第２実行部は、前記第２制御プログラムを実行する、請求項２に記載の車両制御装置。
【請求項６】
前記更新部が、前記第１実行部の実行対象のプログラムを前記第１更新プログラムに変更し、前記第２実行部の実行対象のプログラムを前記第２更新プログラムに変更していない場合、
前記第１更新プログラムは、前記第１記憶部の前記第１制御プログラムが記憶された領域以外の領域に記憶されており、
前記第１実行部が、前記第２実行部の実行対象のプログラムに含まれる識別子を前記第２実行部から取得し、少なくとも前記第２実行部から取得した前記識別子に基づいて、前記第２実行部の実行対象のプログラムが前記第２制御プログラムから変更されていないことを確認し、かつ、前記第２実行部が、前記第１実行部の実行対象のプログラムが前記第１更新プログラムに変更されたことを確認できなかった場合、前記第１実行部は、前記第１制御プログラムを実行し、前記第２実行部は、前記第２制御プログラムを実行する、請求項２または５に記載の、車両制御装置。
【請求項７】
前記車両を制御する第３制御プログラムを記憶する第３記憶部と、前記第３制御プログラムを実行する第３の実行部とを少なくともさらに備え、
前記更新部は、さらに、前記更新データに基づいて、前記第３制御プログラムの更新版である第３更新プログラムを前記第３記憶部に記憶させたのち、前記第３実行部の実行対象のプログラムを前記第３更新プログラムに変更することが可能であり、
前記更新部が、前記第３実行部の実行対象のプログラムを前記第３更新プログラムに変更した場合、前記第１実行部は、前記第３実行部の実行対象のプログラムに含まれる識別子を前記第３実行部から取得し、少なくとも前記第３実行部から取得した前記識別子に基づいて、前記第３実行部の実行対象のプログラムが前記第３更新プログラムに変更されたことを確認する、請求項２に記載の車両制御装置。
【請求項８】
車両を制御する第１制御プログラムを記憶する第１記憶部と、前記車両を制御する第２制御プログラムを記憶する第２記憶部と、前記第１制御プログラムを実行する第１実行部と、前記第２制御プログラムを実行する第２実行部と、前記車両の外部の装置からネットワークを介して取得される更新データに基づいて、前記第１制御プログラムの更新版である第１更新プログラムを前記第１記憶部に記憶させたのち、前記第１実行部の実行対象のプログラムを前記第１更新プログラムに変更することが可能な更新部とを備える、車両制御装置の第２実行部が実行するプログラムの更新確認方法であって、
前記更新部が、前記第１実行部の実行対象のプログラムを前記第１更新プログラムに変更した場合、前記第１実行部の実行対象のプログラムに含まれる識別子を前記第１実行部から取得するステップと、
少なくとも前記第１実行部から取得した前記識別子に基づいて、前記第１実行部の実行対象のプログラムが前記第１更新プログラムに変更されたことを確認するステップとを含む、更新確認方法。
【請求項９】
車両を制御する第１制御プログラムを記憶する第１記憶部と、前記車両を制御する第２制御プログラムを記憶する第２記憶部と、前記第１制御プログラムを実行する第１実行部と、前記第２制御プログラムを実行する第２実行部と、前記車両の外部の装置からネットワークを介して取得される更新データに基づいて、前記第１制御プログラムの更新版である第１更新プログラムを前記第１記憶部に記憶させたのち、前記第１実行部の実行対象のプログラムを前記第１更新プログラムに変更することが可能な更新部とを備える、車両制御装置の第２実行部に実行させるプログラムの更新確認プログラムであって、
前記更新部が、前記第１実行部の実行対象のプログラムを前記第１更新プログラムに変更した場合、前記第１実行部の実行対象のプログラムに含まれる識別子を前記第１実行部から取得するステップと、
少なくとも前記第１実行部から取得した前記識別子に基づいて、前記第１実行部の実行対象のプログラムが前記第１更新プログラムに変更されたことを確認するステップとを含む、更新確認プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両等に搭載される車両制御装置およびそのプログラムの更新確認方法およびプログラムの更新確認プログラムに関する。
【背景技術】
【０００２】
車両には、ＥＣＵ（Electronic Control Unit）と呼ばれる、記憶部および制御部（プロセッサ）を備えた複数の制御装置が搭載されており、それぞれの制御部は、記憶部に格納されたプログラムを実行して、各種の車両制御のための処理を行う。
【０００３】
このようなプログラムは、機能の改良や追加のため更新されることがある。特許文献１は、プログラム更新用データをネットワーク経由で携帯端末装置にダウンロードして、携帯端末装置から車両にデータを提供してプログラムを書き換えることで更新を行うシステムを開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−６０４０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＥＣＵの高度化、複雑化により、複数のプロセッサを備え、それぞれが異なるプログラムを実行するＥＣＵが存在する。このようなＥＣＵでは、記憶部へ更新プログラムを書き込む際や実行対象のプログラムを更新前のものから更新後のものに切り替える際の各種処理の実行タイミングにプログラムごとにずれが生じるおそれがある。このようなずれが生じるとＥＣＵの起動時に実行対象のプログラムの一部が更新後のプログラムに変更されず、各プログラムの更新前のバージョンと更新後のバージョンとが想定外の組合せで混在する状態が発生しうる。このような状態ではＥＣＵが意図しない動作をするおそれがある。
【０００６】
本発明は、上記課題に鑑み、プログラムの更新の際、実行対象のプログラムが更新前のプログラムから更新後のプログラムに変更されたことを確認できる車両制御装置、プログラムの確認方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明の一局面は、車両を制御する第１制御プログラムを記憶する第１記憶部と、車両を制御する第２制御プログラムを記憶する第２記憶部と、第１制御プログラムを実行する第１実行部と、第２制御プログラムを実行する第２実行部と、車両の外部の装置からネットワークを介して取得される更新データに基づいて、第１制御プログラムの更新版である第１更新プログラムを第１記憶部に記憶させたのち、第１実行部の実行対象のプログラムを第１更新プログラムに変更することが可能な更新部とを備え、更新部が、第１実行部の実行対象のプログラムを第１更新プログラムに変更した場合、第２実行部は、第１実行部の実行対象のプログラムに含まれる識別子を第１実行部から取得し、少なくとも第１実行部から取得した識別子に基づいて、第１実行部の実行対象のプログラムが第１更新プログラムに変更されたことを確認する、車両制御装置である。
【０００８】
これにより、第１制御プログラムが第１更新プログラムに更新された場合、第２実行部が、第１実行部の実行対象が第１更新プログラムに変更されていることを確認できる。
【０００９】
また、更新部は、さらに、更新データに基づいて、第２制御プログラムの更新版である第２更新プログラムを第２記憶部に記憶させたのち、第２実行部の実行対象のプログラムを第２更新プログラムに変更することが可能であり、更新部が、第２実行部の実行対象のプログラムを第２更新プログラムに変更した場合、第１実行部は、第２実行部の実行対象のプログラムに含まれる識別子を第２実行部から取得し、少なくとも第２実行部から取得した識別子に基づいて、第２実行部の実行対象のプログラムが第２更新プログラムに変更されたことを確認してもよい。
【００１０】
これにより、さらに第２制御プログラムが第２更新プログラムに更新された場合、第１実行部が第２実行部の実行対象が第２更新プログラムに変更されていることを確認できる。
【００１１】
また、更新部が、第１実行部の実行対象のプログラムを第１更新プログラムに変更し、第２実行部の実行対象のプログラムを第２更新プログラムに変更した場合、第１実行部が、第２実行部の実行対象のプログラムが第２更新プログラムに変更されたことを確認し、かつ、第２実行部が、第１実行部の実行対象のプログラムが第１更新プログラムに変更されたことを確認した場合に、第１実行部は、第１更新プログラムを実行し、第２実行部は、第２更新プログラムを実行してもよい。
【００１２】
これにより、実行対象のプログラムが更新後のプログラムに正しく変更されている場合に更新プログラムが実行されるので、意図しない動作が行われるおそれを低減できる。
【００１３】
また、更新部が、第１実行部の実行対象のプログラムを第１更新プログラムに変更し、第２実行部の実行対象のプログラムを第２更新プログラムに変更した場合、第１更新プログラムは、第１記憶部の第１制御プログラムが記憶された領域以外の領域に記憶され、第２更新プログラムは、第２記憶部の第２制御プログラムが記憶された領域以外の領域に記憶され、第１実行部が、第２実行部の実行対象のプログラムが第２更新プログラムに変更されたことを確認できない場合、第２実行部が、第１実行部の実行対象のプログラムが第１更新プログラムに変更されたことを確認できない場合、の少なくともいずれか一方の場合に、第１実行部は、第１制御プログラムを実行し、第２実行部は、第２制御プログラムを実行してもよい。
【００１４】
これにより、実行対象のプログラムが更新後のプログラムに正しく変更されていない場合は、各実行部が更新前のプログラムを実行するため、意図しない動作が行われるおそれを低減できる。
【００１５】
また、更新部が、第１実行部の実行対象のプログラムを第１更新プログラムに変更し、第２実行部の実行対象のプログラムを第２更新プログラムに変更していない場合、第１実行部が、第２実行部の実行対象のプログラムに含まれる識別子を第２実行部から取得し、少なくとも第２実行部から取得した識別子に基づいて、第２実行部の実行対象のプログラムが第２制御プログラムから変更されていないことを確認し、かつ、第２実行部が、第１実行部の実行対象のプログラムが第１更新プログラムに変更されたことを確認した場合に、第１実行部は、第１更新プログラムを実行し、第２実行部は、第２制御プログラムを実行してもよい。
【００１６】
これにより、実行対象のプログラムが更新後のプログラムに正しく変更されている場合に更新プログラムが実行されるので、意図しない動作が行われるおそれを低減できる。
【００１７】
また、更新部が、第１実行部の実行対象のプログラムを第１更新プログラムに変更し、第２実行部の実行対象のプログラムを第２更新プログラムに変更していない場合、第１更新プログラムは、第１記憶部の第１制御プログラムが記憶された領域以外の領域に記憶されており、第１実行部が、第２実行部の実行対象のプログラムに含まれる識別子を第２実行部から取得し、少なくとも第２実行部から取得した識別子に基づいて、第２実行部の実行対象のプログラムが第２制御プログラムから変更されていないことを確認し、かつ、第２実行部が、第１実行部の実行対象のプログラムが第１更新プログラムに変更されたことを確認できなかった場合、第１実行部は、第１制御プログラムを実行し、第２実行部は、第２制御プログラムを実行してもよい。
【００１８】
これにより、実行対象のプログラムが更新後のプログラムに正しく変更されていない場合は、実行部が更新前のプログラムを実行するため、意図しない動作が行われるおそれを低減できる。
【００１９】
また、車両を制御する第３制御プログラムを記憶する第３記憶部と、第３制御プログラムを実行する第３の実行部とを少なくともさらに備え、更新部は、さらに、更新データに基づいて、第３制御プログラムの更新版である第３更新プログラムを第３記憶部に記憶させたのち、第３実行部の実行対象のプログラムを第３更新プログラムに変更することが可能であり、更新部が、第３実行部の実行対象のプログラムを第３更新プログラムに変更した場合、第１実行部は、第３実行部の実行対象のプログラムに含まれる識別子を第３実行部から取得し、少なくとも第３実行部から取得した識別子に基づいて、第３実行部の実行対象のプログラムが第３更新プログラムに変更されたことを確認してもよい。
【００２０】
これにより、３つ以上の実行部が相互に実行対象のプログラムを確認することができる。
【００２１】
本発明の他の局面は、車両を制御する第１制御プログラムを記憶する第１記憶部と、車両を制御する第２制御プログラムを記憶する第２記憶部と、第１制御プログラムを実行する第１実行部と、第２制御プログラムを実行する第２実行部と、車両の外部の装置からネットワークを介して取得される更新データに基づいて、第１制御プログラムの更新版である第１更新プログラムを第１記憶部に記憶させたのち、第１実行部の実行対象のプログラムを第１更新プログラムに変更することが可能な更新部とを備える、車両制御装置の第２実行部が実行するプログラムの更新確認方法であって、更新部が、第１実行部の実行対象のプログラムを第１更新プログラムに変更した場合、第１実行部の実行対象のプログラムに含まれる識別子を第１実行部から取得するステップと、少なくとも第１実行部から取得した識別子に基づいて、第１実行部の実行対象のプログラムが第１更新プログラムに変更されたことを確認するステップとを含む、更新確認方法である。
【００２２】
本発明のさらに他の局面は、車両を制御する第１制御プログラムを記憶する第１記憶部と、車両を制御する第２制御プログラムを記憶する第２記憶部と、第１制御プログラムを実行する第１実行部と、第２制御プログラムを実行する第２実行部と、車両の外部の装置からネットワークを介して取得される更新データに基づいて、第１制御プログラムの更新版である第１更新プログラムを第１記憶部に記憶させたのち、第１実行部の実行対象のプログラムを第１更新プログラムに変更することが可能な更新部とを備える、車両制御装置の第２実行部に実行させるプログラムの更新確認プログラムであって、更新部が、第１実行部の実行対象のプログラムを第１更新プログラムに変更した場合、第１実行部の実行対象のプログラムに含まれる識別子を第１実行部から取得するステップと、少なくとも第１実行部から取得した識別子に基づいて、第１実行部の実行対象のプログラムが第１更新プログラムに変更されたことを確認するステップとを含む、更新確認プログラムである。
【００２３】
これらにより、第１制御プログラムが第１更新プログラムに更新された場合、第２実行部が、第１実行部の実行対象が第１更新プログラムに変更されていることを確認できる。
【発明の効果】
【００２４】
本発明によれば、上述のように、プログラムの更新の際、１つの実行部の実行対象のプログラムの識別子を他の実行部が取得して確認するので、プログラムが正しく変更されたことを確認できる車両制御装置、プログラム確認方法およびプログラムを提供することができる。
【図面の簡単な説明】
【００２５】
【図１】本発明の一実施形態に係る車両制御装置の機能ブロック図
【図２】本発明の一実施形態に係る車両制御装置の実行部および記憶部の模式図
【図３】本発明の一実施形態に係る車両制御装置の処理を示すシーケンス図
【図４】本発明の一実施形態に係る車両制御装置の実行部および記憶部の模式図
【図５】本発明の一実施形態に係る車両制御装置の処理を示すシーケンス図
【図６】本発明の一実施形態に係る車両制御装置の実行部および記憶部の模式図
【図７】本発明の変形例に係る車両制御装置の実行部および記憶部の模式図
【発明を実施するための形態】
【００２６】
（概要）
本発明に係る車両制御装置は、複数の実行部がそれぞれのプログラムを実行する。プログラムが更新された場合、各実行部は、互いに他の実行部から実行対象のプログラムの識別子を取得して確認することで、更新されたプログラムに変更されているかを確認することができる。
【００２７】
（実施形態）
以下、本発明の一実施形態について、図面を参照しながら詳細に説明する。
【００２８】
＜構成＞
図１に、本実施形態における車両制御装置１００の機能ブロック図を示す。車両制御装置１００は一例として、車両の自動運転制御を行う自動運転ＥＣＵであり、各種センサからの入力に基づいて、ステアリング、エンジン、ブレーキ等を制御して車両の運転を行う。車両制御装置１００は、プロセッサである第１実行部１１、第２実行部２１と、例えばＦｌａｓｈＲＯＭのような不揮発性のメモリである第１記憶部１２、第２記憶部２２とを含む。第１記憶部１２は第１制御プログラム記憶領域１３と第１更新プログラム記憶領域１４とを有する。第１実行部１１はプロセッサであり、第１制御プログラム記憶領域１３に記憶されている現在の実行対象のプログラムである第１制御プログラムを実行する。また、第２実行部２１はプロセッサであり、現在の実行対象のプログラムである第２制御プログラム記憶領域２３に記憶されている第２制御プログラムを実行する。また、車両制御装置１００は、揮発性のＲＡＭを含んでもよい。これらのプログラムの実行出力により、上述の自動運転制御が行われる。
【００２９】
更新部９１は、車両に搭載されたＯＴＡ受信機等が車外のサーバー等からネットワークを介して受信した更新データを取得する。更新部９１は、更新データを取得すると、これに基づいて、第１制御プログラムの更新版である第１更新プログラムおよび第２制御プログラムの更新版である第２更新プログラムの一方または両方を生成することができる。更新部９１は第１更新プログラムを第１記憶部１２の第１更新プログラム記憶領域１４に記憶させ、第２更新プログラムを第２記憶部２２の第２更新プログラム記憶領域２４に記憶させる。なお、更新部９１の機能は、第１実行部１１および第２実行部２１がそれぞれ実行してもよい。
【００３０】
図２に、第１更新プログラムが第１記憶部１２に記憶されておらず、第２更新プログラムが第２記憶部２２に記憶されていない場合の、車両制御装置１００の各実行部および各記憶部を模式的に示す。第１制御プログラムは識別子を含んでおり、図示する例では「１２２」である。これは、第１制御プログラムのバージョンを示す。同様に、第２制御プログラムは識別子を含んでおり、図示する例では「１２２」である。これは、第２制御プログラムのバージョンを示す。したがって図示する状態では、第１制御プログラムと第２制御プログラムとは同時に実行されるべきバージョンの組となっている。
【００３１】
＜処理１＞
以下に、本実施形態に係るプログラム更新処理の一例を説明する。まず、第１制御プログラムと第２制御プログラムがともに更新される場合について説明する。図３は、処理を説明するシーケンスである。本シーケンスは例えばイグニッションスイッチがオンになったときに開始される。
【００３２】
（ステップＳ１０１）：第１実行部１１が第１制御プログラムを読み出して実行する。第１実行部１１は、実行対象のプログラムとして第１制御プログラム記憶領域１３から第１制御プログラムを読み出すことを、例えば、第１記憶部１２に記憶された、プログラムの読み出し先を指定するアドレス等を含む第１読み出し先情報に基づいて判定することができる。第１読み出し先情報は、例えば、更新部９１が第１記憶部１２に書き込む情報であり、第１実行部１１にプログラムの読み出し先を指定する情報やこの情報が変更されたことを表すフラグ等を含む。
【００３３】
（ステップＳ１０２）：第２実行部２１が第２制御プログラムを読み出して実行する。第２実行部２１は、実行対象のプログラムとして第２制御プログラム記憶領域２３から第２制御プログラムを読み出すことを、例えば、第２記憶部２２に記憶された、第２読み出し先情報に基づいて判定することができる。第２読み出し先情報は、例えば、更新部９１が第２記憶部１２に書き込む情報であり、第２実行部２１にプログラムの読み出し先を指定する情報やこの情報が変更されたことを表すフラグ等を含む。
【００３４】
（ステップＳ１０３）：更新部９１が更新データに基づいて第１更新プログラムおよび第２更新プログラムを生成する。更新データの形式はとくに限定されないが、例えば更新前のプログラムからの更新された部分を含む差分データやその圧縮データであってもよいし、更新プログラムの全体であってもよい。更新部９１は、第１記憶部１２の第１更新プログラム記憶領域１４に第１更新プログラムを記憶させ、第２記憶部２２の第２更新プログラム記憶領域２４に第２更新プログラムを記憶させる。
【００３５】
以上のステップＳ１０１、Ｓ１０２、Ｓ１０３の処理が実行され、イグニッションスイッチがオフとなると、以下の処理が行われる。
（ステップＳ１０４）：更新部９１は、第１記憶部１２に記憶されている第１読み出し先情報が含む読み出し先アドレスが第１更新プログラム記憶領域１４を指定するように変更し、かつ変更があったことを示すフラグを立てることにより、第１実行部１１が次回実行対象のプログラムを読み出す際に、第１更新プログラム記憶領域１４から第１更新プログラムを読み出すように指定する。また、更新部９１は、第２記憶部２２に記憶されている第２読み出し先情報の、読み出し先アドレスが第２更新プログラム記憶領域２４を指定するように変更し、かつ変更があったことを示すフラグを立てることにより、第２実行部２１が次回実行対象のプログラムを読み出す際に、第２更新プログラム記憶領域２４から第２更新プログラムを読み出すように指定する。
【００３６】
以上のステップＳ１０４の処理が実行され、次にイグニッションスイッチがオンとなると、以下の処理が行われる。図４に、第１更新プログラムが第１記憶部１２に記憶されていて、第２更新プログラムが第２記憶部２２に記憶されている場合の、車両制御装置１００の各実行部および各記憶部を模式的に示す。第１更新プログラムは識別子を含んでおり、図示する例では「１２３」である。これは、第１更新プログラムのバージョンを示す。同様に、第２更新プログラムは識別子を含んでおり、図示する例では「１２３」である。これは、第２更新プログラムのバージョンを示す。したがって図示する状態では、第１更新プログラムと第２更新プログラムとは同じバージョンの組となっている。
【００３７】
（ステップＳ１０５）：第１実行部１１は、例えば、第１記憶部１２に記憶されている第１読み出し先情報を参照し、実行対象のプログラムが第１制御プログラム記憶領域１３に記憶された第１制御プログラムから、第１更新プログラム記憶領域１４に格納されている第１更新プログラムに変更されたことを検知する。
【００３８】
（ステップＳ１０６）：第２実行部２１は、例えば、第２記憶部２２に記憶されている第２読み出し先情報を参照し、実行対象のプログラムが第２制御プログラム記憶領域２３に記憶された第２制御プログラムから、第２更新プログラム記憶領域２４に格納されている第２更新プログラムに変更されたことを検知する。
【００３９】
（ステップＳ１０７）：第１実行部１１は、第１更新プログラムから識別子を読み出し、第２実行部２１に通知する。また、第２実行部２１は第２更新プログラムから識別子を読み出し第１実行部１１に通知する。このようにして第１実行部１１および第２実行部２１は互いの実行対象プログラムの識別子を取得することができる。
【００４０】
（ステップＳ１０８）：第１実行部１１は、通知された第２更新プログラムの識別子に基づいて、第２実行部２１の実行対象のプログラムが正しく第２更新プログラムに変更されたか確認する。例えば、第１実行部１１は、通知された第２更新プログラムの識別子と読み出した第１更新プログラムの識別子とを比較し、これらが同一のバージョンを表していることにより、第２実行部２１の実行対象のプログラムが正しく第２更新プログラムに変更されたことを確認する。また、第１実行部１１は、第２制御プログラムの識別子を第１記憶部１２に記憶させておき、通知された第２更新プログラムの識別子が、第２制御プログラムの識別子の次のバージョンを表していることにより、第２実行部２１の実行対象のプログラムが正しく第２更新プログラムに変更されたことを確認してもよい。バージョンの順序は予め定めた規則にしたがっていることにより確認してもよく、第２更新プログラムに前のバージョンを表す識別子も含ませておき、第２制御プログラムの識別子と一致することを確認してもよい。
【００４１】
（ステップＳ１０９）：第２実行部２１は、通知された第１更新プログラムの識別子に基づいて、第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたか確認する。例えば、第２実行部２１は、通知された第１更新プログラムの識別子と読み出した第２更新プログラムの識別子とを比較し、これらが同一のバージョンを表していることにより、第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたことを確認する。また、第２実行部２１は、第１制御プログラムの識別子を第２記憶部２２に記憶させておき、通知された第１更新プログラムの識別子が、第１制御プログラムの識別子の次のバージョンを表していることにより、第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたことを確認してもよい。バージョンの順序は予め定めた規則にしたがっていることにより確認してもよく、第１更新プログラムに前のバージョンを表す識別子も含ませておき、第１制御プログラムの識別子と一致することを確認してもよい。
【００４２】
（ステップＳ１１０）：第１実行部１１は、ステップＳ１０８の確認結果を第２実行部２１に通知する。また、第２実行部２１はステップＳ１０９の確認結果を第１実行部１１に通知する。
【００４３】
（ステップＳ１１１）：ステップＳ１０８、Ｓ１０９により第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが正しく第２更新プログラムに変更されたことが確認できた場合、第１実行部１１は第１更新プログラム記憶領域１４から第１更新プログラムを読み出して実行する。
【００４４】
（ステップＳ１１２）：ステップＳ１０８、Ｓ１０９により第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが正しく第２更新プログラムに変更されたことが確認できた場合、第２実行部２１は第２更新プログラム記憶領域２４から第２更新プログラムを読み出して実行する。なお、更新部９１は、第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが正しく第２更新プログラムに変更されたことが確認できた場合、ステップＳ１１１およびステップＳ１１２で、その通知を第１実行部１１、第２実行部２１から受け取り、第１制御プログラム記憶領域１３および第２制御プログラム記憶領域２３を、それぞれ次に更新データを受信したときの第１更新プログラムおよび第２更新プログラム記憶用の領域としてもよい。
【００４５】
（ステップＳ１１３）：ステップＳ１０８、Ｓ１０９により第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが正しく第２更新プログラムに変更されたことのいずれかまたは両方が確認できない場合、第１実行部１１は、第１制御プログラム記憶領域１３から、第１制御プログラムを読み出して実行する。また、第１実行部１１は、第１記憶部１２に記憶された第１読み出し先情報の読み出し先アドレスが第１制御プログラム記憶領域１３を指定するようにし、フラグを下げる。
【００４６】
（ステップＳ１１４）：ステップＳ１０８、Ｓ１０９により第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが正しく第２更新プログラムに変更されたことのいずれかまたは両方が確認できない場合、第２実行部２１は、第２制御プログラム記憶領域２３から、第２制御プログラムを読み出して実行する。また、第２実行部２１は、第２記憶部２２に記憶された第２読み出し先情報の読み出し先アドレスが第２制御プログラム記憶領域１４を指定するようにし、フラグを下げる。なお、ステップＳ１１３、Ｓ１１４で第１制御プログラムおよび第２制御プログラムを実行する前に、これらのプログラムの識別子を参照して、実行対象が正しく第１制御プログラムおよび第２制御プログラムであることを確認することが好ましい。また、このように第１制御プログラムおよび第２制御プログラムを実行できるようにするため、更新部９１は、少なくとも第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが正しく第２更新プログラムに変更されたことが確認できるまで、第１制御プログラムおよび第２制御プログラムを削除せず保存しておくことが好ましい。また、更新部９１は、第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが正しく第２更新プログラムに変更されたことのうち、いずれかまたは両方が確認できない場合、ステップＳ１１３、Ｓ１１４で、その通知を第１実行部１１、第２実行部２１から受け取り、異常発生をユーザー等に知らせるための信号を出力してもよい。
【００４７】
以上により、第１制御プログラムと第２制御プログラムがともに更新される場合のシーケンスは終了する。
【００４８】
＜処理２＞
次に第１制御プログラムおよび第２制御プログラムの一方のみが更新される場合の処理を説明する。以下では一例として、第１制御プログラムが更新され、第２制御プログラムが更新されない場合について説明する。図５は、処理を説明するシーケンスである。本シーケンスは例えばイグニッションスイッチがオンになったときに開始される。
【００４９】
（ステップＳ２０１）：上述のステップＳ１０１と同様、第１実行部１１が第１制御プログラムを読み出して実行する。第１実行部１１は、実行対象のプログラムとして第１制御プログラム記憶領域１３から第１制御プログラムを読み出すことを、例えば、第１記憶部１２に記憶された第１読み出し先情報に基づいて判定することができる。
【００５０】
（ステップＳ２０２）：上述のステップＳ１０２と同様、第２実行部２１が第２制御プログラムを読み出して実行する。第２実行部２１は、実行対象のプログラムとして第２制御プログラム記憶領域２３から第２制御プログラムを読み出すことを、例えば、第２記憶部２２に記憶された第２読み出し先情報に基づいて判定することができる。
【００５１】
（ステップＳ２０３）：更新部９１が更新データに基づいて第１更新プログラムを生成する。更新部９１は、第１記憶部１２の第１更新プログラム記憶領域１４に第１更新プログラムを記憶させる。
【００５２】
以上のステップＳ２０１、Ｓ２０２、Ｓ２０３の処理が実行され、イグニッションスイッチがオフとなると、以下の処理が行われる。
（ステップＳ２０４）：更新部９１は、第１記憶部１２に記憶されている第１読み出し先情報の読み出し先アドレスが第１更新プログラム記憶領域１４を指定するように変更し、かつ変更があったことを示すフラグを立てることにより、第１実行部１１が次回実行対象のプログラムを読み出す際に、第１更新プログラム記憶領域１４から第１更新プログラムを読み出すようにする。
【００５３】
以上のステップＳ２０４の処理が実行され、次にイグニッションスイッチがオンとなると、以下の処理が行われる。図６に、第１更新プログラムが第１記憶部１２に記憶されていて、第２更新プログラムが第２記憶部２２に記憶されていない場合の、車両制御装置１００の各実行部および各記憶部を模式的に示す。第１更新プログラムは識別子を含んでおり、図示する例では「１２３」である。これは、第１更新プログラムのバージョンを示す。
【００５４】
（ステップＳ２０５）：第１実行部１１は、例えば、第１記憶部１２に記憶されている第１読み出し先情報を参照し、実行対象のプログラムが第１制御プログラム記憶領域１３に記憶された第１制御プログラムから、第１更新プログラム記憶領域１４に格納されている第１更新プログラムに変更されたことを検知する。また、第１実行部１１は、第２実行部２１の実行対象のプログラムが変更されていないことを検知する。これは、例えば、第１実行部１１が第２記憶部２２に記憶されている第２読み出し先情報を参照することによって可能である。第１実行部１１が第２記憶部２２を参照できない場合は、更新部９１が、第１記憶部１２にも第２読み出し先情報を記憶させておけばよい。
【００５５】
（ステップＳ２０６）：第２実行部２１は、例えば、第２記憶部２２に記憶されている第２読み出し先情報を参照し、読み出し先のアドレスやフラグに基づいて、実行対象のプログラムが第２制御プログラム記憶領域２３に記憶された第２制御プログラムであることを検知する。また、第２実行部２１は、第１実行部１１の実行対象のプログラムが変更されたことを検知する。これは、第２実行部２１が第１記憶部１２に記憶されている第１読み出し先情報を参照することによって可能である。第２実行部２１が第１記憶部１２を参照できない場合は、更新部９１が、第２記憶部２２にも第１読み出し先情報を記憶させておけばよい。
【００５６】
（ステップＳ２０７）：第１実行部１１は、第１更新プログラムから識別子を読み出し、第２実行部２１に通知する。また、第２実行部２１は第２制御プログラムから識別子を読み出し第１実行部１１に通知する。このようにして第１実行部１１および第２実行部２１は互いの実行対象プログラムの識別子を取得することができる。
【００５７】
（ステップＳ２０８）：第１実行部１１は、通知された第２制御プログラムの識別子に基づいて、第２実行部２１の実行対象のプログラムが第２制御プログラムのまま変更されていないことを確認する。
【００５８】
（ステップＳ２０９）：第２実行部２１は、通知された第１更新プログラムの識別子に基づいて、第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたか確認する。例えば、第２実行部２１は、第１制御プログラムの識別子を第２記憶部２２に記憶させておき、通知された第１更新プログラムの識別子が、第１制御プログラムの識別子の次のバージョンを表していることにより、第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたことを確認する。バージョンの順序は予め定めた規則にしたがっていることにより確認してもよく、第１更新プログラムに前のバージョンを表す識別子も含ませておき、第１制御プログラムの識別子と一致することを確認してもよい。また、第２実行部は、第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたことを確認できた場合は、通知された第１更新プログラムの識別子を第２記憶部２２に記憶させれば、次回の処理における第１制御プログラムの識別子として利用することができる。
【００５９】
（ステップＳ２１０）：第１実行部１１は、ステップＳ２０８の確認結果を第２実行部２１に通知する。また、第２実行部２１はステップＳ２０９の確認結果を第１実行部１１に通知する。
【００６０】
（ステップＳ２１１）：ステップＳ２０８、Ｓ２０９により第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが第２制御プログラムから変更されていないことが確認できた場合、第１実行部１１は第１更新プログラム記憶領域１４から第１更新プログラムを読み出して実行する。
【００６１】
（ステップＳ２１２）：ステップＳ２０８、Ｓ２０９により第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが第２制御プログラムから変更されていないことが確認できた場合、第２実行部２１は第２制御プログラム記憶領域２３から第２制御プログラムを読み出して実行する。なお、更新部９１は、第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが第１プログラムから変更されていないことが確認できた場合、ステップＳ２１１およびステップＳ２１２で、その通知を第１実行部１１、第２実行部２１から受け取り、第１制御プログラム記憶領域１３を、次に第１更新データを受信したときの第１更新プログラム記憶用の領域としてもよい。
【００６２】
（ステップＳ２１３）：ステップＳ２０８、Ｓ２０９により第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが第２更新プログラムから変更されていないことのいずれかまたは両方が確認できない場合、第１実行部１１は、第１制御プログラム記憶領域１３から、第１制御プログラムを読み出して実行する。また、第１実行部１１は、第１記憶部１２に記憶された第１読み出し先情報の読み出し先アドレスが第１制御プログラム記憶領域１３を指定するようにし、フラグを下げる。
【００６３】
（ステップＳ２１４）：ステップＳ２０８、Ｓ２０９により第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが第２制御プログラムから更新されていないことのいずれかまたは両方が確認できない場合、第２実行部２１は、第２制御プログラム記憶領域２３から、第２制御プログラムを読み出して実行する。なお、ステップＳ２１３、Ｓ２１４で第１制御プログラムおよび第２制御プログラムを実行する前に、これらのプログラムの識別子を参照して、実行対象が正しく第１制御プログラムおよび第２制御プログラムであることを確認することが好ましい。また、このように第１制御プログラムを実行できるようにするため、更新部９１は、少なくとも第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが正しく第２更新プログラムから変更されていないことが確認できるまで、第１制御プログラムを削除しないことが好ましい。また、更新部９１は、第１実行部１１の実行対象のプログラムが正しく第１更新プログラムに変更されたこと、および、第２実行部２１の実行対象のプログラムが第２制御プログラムから変更されていないことのうち、いずれかまたは両方が確認できない場合、ステップＳ２１３、Ｓ２１４で、その通知を第１実行部１１、第２実行部２１から受け取り、異常発生をユーザー等に知らせるための信号を出力してもよい。
【００６４】
以上により、第１制御プログラムが更新され第２制御プログラムが更新されない場合のシーケンスは終了する。また、第２制御プログラムが更新され第１制御プログラムが更新されない場合の処理は、上述の説明において「第１」と「第２」とを互いに読み替えればよい。
【００６５】
（変形例）
以上の実施形態では、実行部が２つの場合について説明したが、本発明は、実行部が３つ以上の場合にも適用できる。図７に、車両制御装置１００が、実行部と記憶部とを４組備える場合の各実行部および記憶部を模式的に示す。第１〜第４記憶部１２、２２、３２、４２は第１〜第４実行部１１、２１、３１、４１が実行する各制御プログラムを記憶する第１〜第４制御プログラム記憶用域１３、２３、３３、３４および各更新プログラムを記憶する第１〜第４更新プログラム記憶領域１４、２４、３４、４４を有する。この場合、プログラムに更新があった場合、上述の実施形態と同様の方法で、第１実行部１１が他の実行部、すなわち第２、第３、第４実行部１２、１３、１４の実行対象の識別子の確認を行い、第２実行部２１が、第１実行部１１の実行対象のプログラムの識別子の確認を行い、それぞれの確認結果を共有することで、すべての実行部について、実行対象のプログラムの確認を行うことができる。なお、各実行部が他のいずれかの実行部から実行対象のプログラムの確認を受けることができれば、実行部とその確認対象となる他の実行部の組み合わせは限定されない。
【００６６】
以上の実施形態、変形例において、各プロセッサが、他のプロセッサが実行するプログラムが更新されたとき、当該他のプロセッサから実行対象のプログラムの識別子を取得し、実行対象のプログラムが実際に更新されたことを確認できれば、各ステップの処理の内容および順序は、適宜変更、省略等してもよい。
【００６７】
＜効果＞
以上の実施形態、変形例に係る更新処理においては、各実行部は、プログラムを実行する前に、互いの実行対象のプログラムのバージョンを確認する。そのため、それまでの段階の、例えば更新部による、記憶部へ更新プログラムを書き込む処理や実行対象のプログラムを更新前のものから更新後のものに切り替える処理の実行タイミングにずれが生じて、各プログラムの更新前のバージョンと更新後のバージョンとが想定外の組合せで混在する状態が発生している場合はこれを検知することができる。この場合、すべてのプログラムを更新前のバージョンに戻して実行したり、ユーザーに通知して対応を促したりすることで、意図しない動作が実行されるのを抑制することができる。
【００６８】
なお、本発明は、車両制御装置として捉えるだけでなく、車両制御装置のプロセッサが実行するプログラムの確認方法、およびプログラム確認用プログラムとして捉えることも可能である。
【産業上の利用可能性】
【００６９】
本発明は、自動運転装置等の車載機器を備えた車両等に有用である。
【符号の説明】
【００７０】
１１    第１実行部
１２    第１記憶部
１３    第１制御プログラム記憶領域
１４    第１更新プログラム記憶領域
２１    第２実行部
２２    第２記憶部
２３    第２制御プログラム記憶領域
２４    第２更新プログラム記憶領域
３１    第３実行部
３２    第３記憶部
３３    第３制御プログラム記憶領域
３４    第３更新プログラム記憶領域
４１    第４実行部
４２    第４記憶部
４３    第４制御プログラム記憶領域
４４    第４更新プログラム記憶領域
９１    更新部
１００    車両制御装置
【図１】
2019144670.tif 000003
【図２】
2019144670.tif 000004
【図３】
2019144670.tif 000005
【図４】
2019144670.tif 000006
【図５】
2019144670.tif 000007
【図６】
2019144670.tif 000008
【図７】
2019144670.tif 000009