(57)【要約】【課題】  ２世代以上のバージョンアップに必要な制御プログラムの更新時間を短縮できるようにする。【解決手段】  本発明は、車両に搭載された制御装置と、前記制御装置と車内通信可能に接続された中継装置と、前記中継装置と無線通信する管理サーバと、を含むプログラム更新システムに関する。前記中継装置又は前記制御装置は、前記制御装置の制御プログラムを２世代以上新しい新バージョンに更新するのに必要な複数の更新プログラムを取得するまで、下記に定義する送信処理と受信処理を繰り返す送受信処理を実行する。  送信処理：制御装置の制御プログラムを１世代ずつバージョンアップするための更新プログラムを要求する制御メッセージを、管理サーバに送信する処理  受信処理：制御メッセージに応じて管理サーバが送信した更新プログラムを、管理サーバから受信する処理【選択図】      図６
2018136816.tif 000002
【特許請求の範囲】
【請求項１】
車両に搭載された制御装置と、前記制御装置と車内通信可能に接続された中継装置と、前記中継装置と無線通信する管理サーバと、を含むプログラム更新システムであって、
前記中継装置又は前記制御装置は、
前記制御装置の制御プログラムを２世代以上新しい新バージョンに更新するのに必要な複数の更新プログラムを取得するまで、下記に定義する送信処理と受信処理を繰り返す送受信処理を実行するプログラム更新システム。
送信処理：制御装置の制御プログラムを１世代ずつバージョンアップするための更新プログラムを要求する制御メッセージを、管理サーバに送信する処理
受信処理：制御メッセージに応じて管理サーバが送信した更新プログラムを、管理サーバから受信する処理
【請求項２】
前記制御装置は、揮発性メモリ、及び前記制御プログラムを記憶する書き換え可能な不揮発性メモリを有する記憶部を備え、
前記制御装置は、複数の前記更新プログラムを取得した場合に、前記不揮発性メモリから前記揮発性メモリに前記制御プログラムを読み出し、前記揮発性メモリ上で複数の前記更新プログラムを前記制御プログラムに順次適用して、前記制御プログラムを前記新バージョンに更新し、更新した前記新バージョンの前記制御プログラムを前記不揮発性メモリに書き込む請求項１に記載のプログラム更新システム。
【請求項３】
前記制御装置は、複数の前記更新プログラムが取得されるまでは前記制御プログラムの更新を行わず、複数の前記更新プログラムが取得されてから前記制御プログラムの更新を行う請求項２に記載のプログラム更新システム。
【請求項４】
前記制御装置は、複数の前記更新プログラムが取得されてから、更新した前記制御プログラムを前記不揮発性メモリに書き込むと、書き込み完了通知を送信する請求項２又は請求項３に記載のプログラム更新システム。
【請求項５】
前記中継装置又は前記制御装置は、
取得した複数の前記更新プログラムを自装置の揮発性メモリに複数回適用して、２世代以上新しい新バージョンの前記制御プログラムであるスキッププログラムの生成処理を実行し、
前記制御装置は、生成された前記スキッププログラムを自装置の不揮発性メモリに書き込む書き込み処理を実行する請求項１に記載のプログラム更新システム。
【請求項６】
前記送受信処理の実行主体が前記中継装置である場合に、
前記中継装置は、
取得した複数の前記更新プログラムを前記制御装置に転送し、
前記制御装置は、
転送された複数の前記更新プログラムを用いて、自装置の現バージョンより２世代以上新しいバージョンの前記制御プログラムであるスキッププログラムを生成し、生成した前記スキッププログラムを自装置の記憶部に書き込む請求項１又は請求項５に記載のプログラム更新システム。
【請求項７】
前記送受信処理の実行主体が前記中継装置である場合に、
前記中継装置は、
取得した複数の前記更新プログラムを用いて、前記制御装置の現バージョンより２世代以上新しいバージョンの前記制御プログラムであるスキッププログラムを生成し、生成した前記スキッププログラムを前記制御装置に転送し、
前記制御装置は、
転送された前記スキッププログラムを自装置の記憶部に書き込む請求項１又は請求項５に記載のプログラム更新システム。
【請求項８】
前記送受信処理の実行主体が前記制御装置である場合に、
前記制御装置は、
取得した複数の前記更新プログラムを用いて、自装置の現バージョンより２世代以上新しいバージョンの前記制御プログラムであるスキッププログラムを生成し、生成した前記スキッププログラムを自装置の記憶部に書き込む請求項１又は請求項５に記載のプログラム更新システム。
【請求項９】
前記制御装置は、
前記スキッププログラムの書き込みに失敗した場合に、
前記更新プログラムから次世代の前記制御プログラムを生成する処理と、生成した前記制御プログラムの自装置の記憶部への書き込みとを、１世代ごとに段階的に行う請求項５から請求項８のいずれか１項に記載のプログラム更新システム。
【請求項１０】
前記制御メッセージには、
前記更新プログラムの受信に応じて、更に次の前記更新プログラムの送信を前記管理サーバに要求する仮完了通知が含まれる請求項１から請求項９のいずれか１項に記載のプログラム更新システム。
【請求項１１】
前記制御メッセージには、
前記更新プログラムから生成した次世代の前記制御プログラムの書き込みの完了を、前記管理サーバに通知する書き込み完了通知が含まれる請求項１から請求項９のいずれか１項に記載のプログラム更新システム。
【請求項１２】
前記中継装置又は前記制御装置は、
複数の前記更新プログラムのデータサイズ及び伝送時間のうちの少なくとも１つに基づいて、前記送受信処理を実行するか否かを判定する請求項１から請求項１１のいずれか１項に記載のプログラム更新システム。
【請求項１３】
車両に搭載された制御装置であって、
揮発性メモリと、
制御プログラムを記憶する書き換え可能な不揮発性メモリを有する記憶部と、
前記制御プログラムに従って前記車両内の制御対象を制御する制御部と、
前記制御プログラムの更新プログラムを取得する取得部と、を備えおり、
前記制御部は、前記取得部が複数の前記更新プログラムを取得した場合に、前記不揮発性メモリから前記揮発性メモリに前記制御プログラムを読み出し、前記揮発性メモリ上で複数の前記更新プログラムを前記制御プログラムに順次適用して、前記制御プログラムを２世代以上新しい新バージョンに更新し、更新した前記新バージョンの前記制御プログラムを前記不揮発性メモリに書き込む制御装置。
【請求項１４】
車両に搭載された制御装置と、前記制御装置と車内通信可能に接続された中継装置と、前記中継装置と無線通信する管理サーバと、を含む通信システムにおいて実行されるプログラム更新方法であって、
前記中継装置又は前記制御装置が、前記制御装置の制御プログラムを２世代以上新しい新バージョンに更新するのに必要な複数の更新プログラムを取得するまで、下記に定義する送信処理と受信処理を繰り返すステップを含むプログラム更新方法。
送信処理：制御装置の制御プログラムを１世代ずつバージョンアップするための更新プログラムを要求する制御メッセージを、管理サーバに送信する処理
受信処理：制御メッセージに応じて管理サーバが送信した更新プログラムを、管理サーバから受信する処理
【請求項１５】
車両に搭載された制御装置と、前記制御装置と車内通信可能に接続された中継装置と、前記中継装置と無線通信する管理サーバと、を含む通信システムの前記中継装置又は前記制御装置として、コンピュータを機能させるためのコンピュータプログラムであって、
前記コンピュータに、
前記制御装置の制御プログラムを２世代以上新しい新バージョンに更新するのに必要な複数の更新プログラムを取得するまで、下記に定義する送信処理と受信処理を繰り返すステップを実行させるためのコンピュータプログラム。
送信処理：制御装置の制御プログラムを１世代ずつバージョンアップするための更新プログラムを要求する制御メッセージを、管理サーバに送信する処理
受信処理：制御メッセージに応じて管理サーバが送信した更新プログラムを、管理サーバから受信する処理
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム更新システム、制御装置、プログラム更新方法、及びコンピュータプログラムに関する。
【背景技術】
【０００２】
近年、自動車の技術分野においては、車両の高機能化が進行しており、多種多様な車載機器が車両に搭載されている。従って、車両には、各車載機器を制御するための制御装置である、所謂ＥＣＵ（Electronic Control Unit）が多数搭載されている。
ＥＣＵには、例えば、アクセル、ブレーキ、ハンドルの操作に対してエンジンやブレーキ、ＥＰＳ（Electric Power Steering）等の制御を行う走行系に関わるもの、乗員によるスイッチ操作に応じてヘッドライトの点灯／消灯やワイパーＯＮ／ＯＦＦ、ドアロック／アンロック等、運転席近傍に配設されるメータ類の動作を行うものがある。
【０００３】
一般的にＥＣＵは、マイクロコンピュータ等の演算処理装置によって構成されており、ＲＯＭ（Read Only Memory）に記憶した制御プログラムを読み出して実行することにより、車載機器の制御が実現される。
ＥＣＵの制御プログラムは、制御プログラムのバージョンアップに対応して、旧バージョンの制御プログラムを新バージョンの制御プログラムに書き換える必要がある。
【０００４】
例えば、特許文献１及び２には、車載通信機などのゲートウェイが管理サーバから更新プログラムを受信し、受信した更新プログラム用いてＥＣＵが制御プログラムを旧バーションから新バーションに書き換えることにより、車両の各ＥＣＵに対するプログラム更新を無線通信によって遠隔で実行する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−６５８５６号公報
【特許文献２】特開２０１０−１９８１５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
制御プログラムの更新タイミングは車両ごとに異なるため、ＥＣＵの制御プログラムのバージョン履歴を管理サーバが車両ごとに管理し、各車両に適した更新プログラムを逐一生成して車両に提供する運用方法では、管理サーバの処理負荷が過大となる。
特に、車両が無線通信により更新プログラムを受信する場合は、有線通信の場合と比べて更新タイミングが多様化するため、上記の傾向が顕著になる。
従って、管理サーバ側では、所定のＥＣＵについて複数のバージョンアップがあった場合は、それぞれの差分プログラムを準備しておき、新バージョンでない車両のＥＣＵが差分プログラムを順次制御プログラムを更新するのが現実的な運用となる。
【０００７】
しかし、更新プログラムが差分プログラムの場合には、旧バージョンの制御プログラムをＲＡＭに展開し、これに更新プログラムを適用した新バージョンの制御プログラムをＲＯＭに書き込んでから、ＲＯＭに対するベリファイ処理などのチェックが行われる。
従って、同じＥＣＵの制御プログラムに関して、現バージョンと新バージョンとの乖離が２世代以上である場合には、現バージョンから中途バージョンへの更新処理と、中途バージョンから新バージョンへの更新処理の、少なくとも２回の更新処理が必要となるので、新バージョンまで到達するのに時間がかかるという問題がある。
【０００８】
このように、更新プログラムが差分プログラムである場合には、更新時間を長くする主原因である、制御プログラムの書き込み／ＲＯＭチェックを少なくとも２回行う必要があり、制御プログラムのデータ容量によっては、現バージョンから新バージョンに更新するのに多大な時間を要する。
本発明は、かかる従来の問題点に鑑み、２世代以上のバージョンアップに必要な制御プログラムの更新時間を短縮することを目的とする。
【課題を解決するための手段】
【０００９】
（１）  本発明の一態様に係るシステムは、車両に搭載された制御装置と、前記制御装置と車内通信可能に接続された中継装置と、前記中継装置と無線通信する管理サーバと、を含むプログラム更新システムであって、前記中継装置又は前記制御装置は、前記制御装置の制御プログラムを２世代以上新しい新バージョンに更新するのに必要な複数の更新プログラムを取得するまで、下記に定義する送信処理と受信処理を繰り返す送受信処理を実行する。
【００１０】
送信処理：制御装置の制御プログラムを１世代ずつバージョンアップするための更新プログラムを要求する制御メッセージを、管理サーバに送信する処理
受信処理：制御メッセージに応じて管理サーバが送信した更新プログラムを、管理サーバから受信する処理
【００１１】
（１３）  本発明の一態様に係る装置は、車両に搭載された制御装置であって、揮発性メモリと、制御プログラムを記憶する書き換え可能な不揮発性メモリを有する記憶部と、前記制御プログラムに従って前記車両内の制御対象を制御する制御部と、前記制御プログラムの更新プログラムを取得する取得部と、を備えおり、前記制御部は、前記取得部が複数の前記更新プログラムを取得した場合に、前記不揮発性メモリから前記揮発性メモリに前記制御プログラムを読み出し、前記揮発性メモリ上で複数の前記更新プログラムを前記制御プログラムに順次適用して、前記制御プログラムを２世代以上新しい新バージョンに更新し、更新した前記新バージョンの前記制御プログラムを前記不揮発性メモリに書き込む。
【００１２】
（１４）  本発明の一態様に係る方法は、車両に搭載された制御装置と、前記制御装置と車内通信可能に接続された中継装置と、前記中継装置と無線通信する管理サーバと、を含む通信システムにおいて実行されるプログラム更新方法であって、前記中継装置又は前記制御装置が、前記制御装置の制御プログラムを２世代以上新しい新バージョンに更新するのに必要な複数の更新プログラムを取得するまで、上記に定義する送信処理と受信処理を繰り返すステップを含む。
【００１３】
（１５）  本発明の一態様に係るコンピュータプログラムは、車両に搭載された制御装置と、前記制御装置と車内通信可能に接続された中継装置と、前記中継装置と無線通信する管理サーバと、を含む通信システムの前記中継装置又は前記制御装置として、コンピュータを機能させるためのコンピュータプログラムであって、前記コンピュータに、前記制御装置の制御プログラムを２世代以上新しい新バージョンに更新するのに必要な複数の更新プログラムを取得するまで、上記に定義する送信処理と受信処理を繰り返すステップを実行させる。
【発明の効果】
【００１４】
本発明によれば、２世代以上のバージョンアップに必要な制御プログラムの更新時間を短縮することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施形態に係るプログラム更新システムの全体構成図である。
【図２】ゲートウェイの内部構成を示すブロック図である。
【図３】ＥＣＵの内部構成を示すブロック図である。
【図４】管理サーバの内部構成を示すブロック図である。
【図５】制御プログラムの更新手順の従来例を示すシーケンス図である。
【図６】第１実施形態の制御プログラムの更新手順を示すシーケンス図である。
【図７】第２実施形態の制御プログラムの更新手順を示すシーケンス図である。
【図８】第３実施形態の制御プログラムの更新手順を示すシーケンス図である。
【図９】第４実施形態の制御プログラムの更新手順を示すシーケンス図である。
【図１０】第５実施形態の制御プログラムの更新手順を示すシーケンス図である。
【発明を実施するための形態】
【００１６】
＜本発明の実施形態の概要＞  
以下、本発明の実施形態の概要を列記して説明する。
（１）  本実施形態のプログラム更新システムは、車両に搭載された制御装置と、前記制御装置と車内通信可能に接続された中継装置と、前記中継装置と無線通信する管理サーバと、を含むプログラム更新システムであって、前記中継装置又は前記制御装置は、前記制御装置の制御プログラムを２世代以上新しい新バージョンに更新するのに必要な複数の更新プログラムを取得するまで、下記に定義する送信処理と受信処理を繰り返す送受信処理を実行する。
【００１７】
送信処理：制御装置の制御プログラムを１世代ずつバージョンアップするための更新プログラムを要求する制御メッセージを、管理サーバに送信する処理
受信処理：制御メッセージに応じて管理サーバが送信した更新プログラムを、管理サーバから受信する処理
【００１８】
本実施形態のプログラム更新システムによれば、中継装置又は制御装置が、上記の送受信処理を実行するので、制御装置は、新バージョンの制御プログラムの生成に必要となる複数の更新プログラム又は新バージョンの制御プログラムを取得することができる。
【００１９】
（２）  従って、例えば、前記制御装置が、揮発性メモリ、及び前記制御プログラムを記憶する書き換え可能な不揮発性メモリを有する記憶部を備え、複数の前記更新プログラムを取得した場合には、前記制御装置は、前記不揮発性メモリから前記揮発性メモリに前記制御プログラムを読み出し、前記揮発性メモリ上で複数の前記更新プログラムを前記制御プログラムに順次適用して、前記制御プログラムを前記新バージョンに更新し、更新した前記新バージョンの前記制御プログラムを前記不揮発性メモリに書き込めばよい。
【００２０】
このようにすれば、制御装置が、自身で生成した新バージョンの制御プログラム（スキッププログラム）の書き込み及びチェックを１回行うだけで済み、２世代以上のバージョンアップに必要な更新時間を短縮することができる。
【００２１】
（３）  もっとも、上記の処理を実現するには、前記制御装置が、複数の前記更新プログラムが取得されるまでは前記制御プログラムの更新を行わず、複数の前記更新プログラムが取得されてから前記制御プログラムの更新を行うことが必要となる。
【００２２】
（４）  本実施形態のプログラム更新システムにおいて、前記制御装置は、複数の前記更新プログラムが取得されてから、更新した前記制御プログラムを前記不揮発性メモリに書き込むと、書き込み完了通知を送信することが好ましい。
このようにすれば、上記の書き込み完了通知を中継装置又は管理サーバに送信することにより、制御プログラムを２世代以上新しい新バージョンに更新済みであることを、中継装置又は管理サーバに通知することができる。
【００２３】
（５）  本実施形態のプログラム更新システムでは、より具体的には、前記中継装置又は前記制御装置が、取得した複数の前記更新プログラムを自装置の揮発性メモリに複数回適用して、２世代以上新しい新バージョンの前記制御プログラムであるスキッププログラムの生成処理を実行し、前記制御装置が、生成された前記スキッププログラムを自装置の不揮発性メモリに書き込む書き込み処理を実行する。
このため、制御装置が、自身で飛び級的に生成した或いは中継装置から提供された新バージョンの制御プログラム（スキッププログラム）の書き込み及びチェックを１回行うだけで済み、２世代以上のバージョンアップに必要な更新時間を短縮することができる。
【００２４】
（６）  本実施形態のプログラム更新システムにおいて、前記送受信処理の実行主体が前記中継装置である場合には、前記中継装置は、取得した複数の前記更新プログラムを前記制御装置に転送し、前記制御装置は、転送された複数の前記更新プログラムを用いて、自装置の現バージョンより２世代以上新しいバージョンの前記制御プログラムであるスキッププログラムを生成し、生成した前記スキッププログラムを自装置の記憶部に書き込むようにすればよい。
この場合、スキッププログラムの書き込み及びチェックが無事に完了すれば、２世代以上新しいバージョンである新バージョンへの更新が完了するので、２世代以上のバージョンアップに必要な更新時間を短縮することができる。
【００２５】
（７）  本実施形態のプログラム更新システムにおいて、前記送受信処理の実行主体が前記中継装置である場合には、前記中継装置は、取得した複数の前記更新プログラムを用いて、前記制御装置の現バージョンより２世代以上新しいバージョンの前記制御プログラムであるスキッププログラムを生成し、生成した前記スキッププログラムを前記制御装置に転送し、前記制御装置は、転送された前記スキッププログラムを自装置の記憶部に書き込むようにしてもよい。
この場合も、スキッププログラムの書き込み及びチェックが無事に完了すれば、２世代以上新しいバージョンである新バージョンへの更新が完了するので、２世代以上のバージョンアップに必要な更新時間を短縮することができる。
【００２６】
（８）  本実施形態のプログラム更新システムにおいて、前記送受信処理の実行主体が前記制御装置である場合には、前記制御装置は、取得した複数の前記更新プログラムを用いて、自装置の現バージョンより２世代以上新しいバージョンの前記制御プログラムであるスキッププログラムを生成し、生成した前記スキッププログラムを自装置の記憶部に書き込むようにすればよい。
この場合も、スキッププログラムの書き込み及びチェックが無事に完了すれば、２世代以上新しいバージョンである新バージョンへの更新が完了するので、２世代以上のバージョンアップに必要な更新時間を短縮することができる。
【００２７】
（９）  本実施形態のプログラム更新システムにおいて、前記制御装置は、前記スキッププログラムの書き込みに失敗した場合に、前記更新プログラムから次世代の前記制御プログラムを生成する処理と、生成した前記制御プログラムの自装置の記憶部への書き込みとを、１世代ごとに段階的に行うことが好ましい。
このようにすれば、スキッププログラムの書き込みに失敗しても、制御装置の制御プログラムを確実に新バージョンに更新することができる。
【００２８】
（１０）  本実施形態のプログラム更新システムにおいて、前記制御メッセージには、前記更新プログラムの受信に応じて、更に次の前記更新プログラムの送信を前記管理サーバに要求する仮完了通知が含まれることが好ましい。
このようにすれば、管理サーバが、仮完了通知に応じて更に次の更新プログラムを送信するので、２世代以上新しいバージョンである新バージョンへの更新に必要な複数の更新プログラムを、中継装置又は制御装置が適切に受信できるようになる。
【００２９】
（１１）  本実施形態のプログラム更新システムにおいて、前記制御メッセージには、前記更新プログラムから生成した次世代の前記制御プログラムの書き込みの完了を、前記管理サーバに通知する書き込み完了通知が含まれていてもよい。
このようにすれば、管理サーバが、書き換え完了通知に応じて更に次の更新プログラムを送信するので、２世代以上新しいバージョンである新バージョンへの更新に必要な複数の更新プログラムを、中継装置又は制御装置が適切に受信できるようになる。
【００３０】
（１２）  本実施形態のプログラム更新システムにおいて、前記中継装置又は前記制御装置は、複数の前記更新プログラムのデータサイズ及び伝送時間のうちの少なくとも１つに基づいて、前記送受信処理を実行するか否かを判定することが好ましい。
この場合、複数の更新プログラムのデータサイズ及び伝送時間が所定の閾値以上の場合に限り、中継装置又は制御装置に上述の前記送受信処理を実行させるなど、本実施形態のプログラム更新システムを柔軟に運用できるようになる。
【００３１】
（１３）  本実施形態の制御装置は、車両に搭載された制御装置であって、揮発性メモリと、制御プログラムを記憶する書き換え可能な不揮発性メモリを有する記憶部と、前記制御プログラムに従って前記車両内の制御対象を制御する制御部と、前記制御プログラムの更新プログラムを取得する取得部と、を備えおり、前記制御部は、前記取得部が複数の前記更新プログラムを取得した場合に、前記不揮発性メモリから前記揮発性メモリに前記制御プログラムを読み出し、前記揮発性メモリ上で複数の前記更新プログラムを前記制御プログラムに順次適用して、前記制御プログラムを２世代以上新しい新バージョンに更新し、更新した前記新バージョンの前記制御プログラムを前記不揮発性メモリに書き込む。
【００３２】
本実施形態の制御装置によれば、制御部が、不揮発性メモリから揮発性メモリに制御プログラムを読み出し、揮発性メモリ上で複数の更新プログラムを制御プログラムに順次適用して、制御プログラムを２世代以上新しい新バージョンに更新し、更新した新バージョンの制御プログラムを不揮発性メモリに書き込むので、生成した新バージョンの制御プログラム（スキッププログラム）の書き込み及びチェックを１回行うだけで済み、２世代以上のバージョンアップに必要な更新時間を短縮することができる。
【００３３】
（１４）  本実施形態のプログラム更新方法は、上述の（１）〜（１２）のいずれかに記載のプログラム更新システムに含まれる中継装置が実行するプログラム更新方法に関する。
従って、本実施形態のプログラム更新方法は、上述の（１）〜（１２）のいずれかに記載のプログラム更新システムと同様の作用効果を奏する。
【００３４】
（１５）  本実施形態のコンピュータプログラムは、上述の（１）〜（１２）のいずれかに記載のプログラム更新システムに含まれる中継装置として、コンピュータを機能させるためのコンピュータプログラムに関する。
従って、本実施形態のコンピュータプログラムは、上述の（１）〜（１２）のいずれかに記載のプログラム更新システムと同様の作用効果を奏する。
【００３５】
＜本発明の実施形態の詳細＞  
以下、図面を参照して、本発明の実施形態の詳細を説明する。なお、以下に記載する実施形態の少なくとも一部を任意に組み合わせてもよい。
【００３６】
〔システムの全体構成〕
図１は、本発明の実施形態に係るプログラム更新システムの全体構成図である。
図１に示すように、本実施形態のプログラム更新システムは、広域通信網２を介して通信可能な車両１と管理サーバ５とを備える。
管理サーバ５は、例えば、車両１のカーメーカーにより運営されており、予め会員登録されたユーザが所有する多数の車両１と通信可能である。
【００３７】
車両１には、ゲートウェイ１０、無線通信機１５及び複数のＥＣＵ３０と、各ＥＣＵ３０によりそれぞれ制御される各種の車載機器（図示せず）が搭載されている。
車両１には、共通の車内通信線にバス接続された複数のＥＣＵ３０による通信グループが存在し、ゲートウェイ１０は、通信グループ間の通信を中継している。このため、ゲートウェイ１０には、複数の車内通信線が接続されている。
【００３８】
ゲートウェイ１０は、車内通信線により無線通信機１５と接続されている。無線通信機１５は、携帯電話網などの広域通信網２を通じて管理サーバ５と無線通信し、管理サーバ５などの車外装置から受信した情報をゲートウェイ１０に転送する。ゲートウェイ１０は、無線通信機１５から受信した情報をＥＣＵ３０に送信する。
ゲートウェイ１０は、ＥＣＵ３０から取得した情報を無線通信機１５に転送し、無線通信機１５は、受信した情報を管理サーバ５などの車外装置に送信する。
【００３９】
無線通信機１５は、例えば、ユーザが所有する携帯電話機、スマートフォン、タブレット型端末、ノートＰＣ（Personal Computer）などの通信装置よりなる。無線通信機１５は、車両１に恒常的に搭載されたナビゲーション装置などであってもよい。
図１の車両１では、ゲートウェイ１０が無線通信機１５を介して車外装置と通信する場合が例示されているが、ゲートウェイ１０自身が無線通信機能を有する場合には、ゲートウェイ１０が、管理サーバ５などの車外装置と無線通信を行うことにしてもよい。
【００４０】
図１のプログラム更新システムでは、管理サーバ５が１つのサーバ装置で構成されているが、２つ以上のサーバ装置で構成してもよい。
例えば、管理サーバ５は、ユーザの登録情報や制御プログラムのバーション情報などを管理する情報管理サーバと、制御プログラムの更新プログラムを格納するダウンロードサーバなど、別の役割を担うサーバ装置で構成することができる。
【００４１】
〔ゲートウェイの内部構成〕
図２はゲートウェイ１０の内部構成を示すブロック図である。
図２に示すように、ゲートウェイ１０は、ＣＰＵ（Central Processing Unit）１１、ＲＡＭ（Random Access Memory）１２、記憶部１３、及び車内通信部１４などを備える。ゲートウェイ１０は、無線通信機１５と車内通信線を介して接続されているが、無線通信機１５を内蔵していてもよい。
【００４２】
ＣＰＵ１１は、記憶部１３に記憶された１又は複数のプログラムをＲＡＭ１２に読み出して実行することにより、ゲートウェイ１０を各種情報の中継装置として機能させる。
ＣＰＵ１１は、例えば時分割で複数のプログラムを切り替えて実行することにより、複数のプログラムを並列的に実行可能である。ＣＰＵ１１は複数のＣＰＵ群を代表するものであってもよい。この場合、ＣＰＵ１１の実現する機能は、複数のＣＰＵ群が協働して実現する。
【００４３】
ＲＡＭ１２は、ＳＲＡＭ（Static ＲＡＭ）又はＤＲＡＭ（Dynamic ＲＡＭ）などの揮発性のメモリ素子で構成されている。
ＲＡＭ１２には、ＣＰＵ１１が実行するコンピュータプログラム及び実行に必要なデータが一時的に記憶される。
【００４４】
ＣＰＵ１１が実行するコンピュータプログラムは、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭなどの周知の記録媒体に記録した状態で譲渡することもできるし、サーバコンピュータなどのコンピュータ装置からの情報伝送（ダウンロード）によって譲渡することもできる。
この点は、後述のＥＣＵ３０のＣＰＵ３１（図３参照）が実行するコンピュータプログラム、及び、後述の管理サーバ５のＣＰＵ５１（図４参照）が実行するコンピュータプログラムについても同様である。
【００４５】
記憶部１３は、フラッシュメモリ若しくはＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）などの不揮発性のメモリ素子により構成されている。
記憶部１３は、ＣＰＵ１１が実行するコンピュータプログラム及び実行に必要なデータを記憶する記憶領域を有する。記憶部１３は、管理サーバ５から受信した各ＥＣＵ３０の更新プログラムなども記憶する。
【００４６】
車内通信部１４には、車両１に配設された車内通信線を介して複数のＥＣＵ３０が接続されている。
車内通信部１４は、例えばＣＡＮ（Controller Area Network）、ＣＡＮＦＤ（ＣＡＮ with Flexible Data Rate）、ＬＩＮ（Local Interconnect Network）、Ｅｔｈｅｒｎｅｔ（登録商標）、又はＭＯＳＴ（Media Oriented Systems Transport：ＭＯＳＴは登録商標）などの規格に応じて、ＥＣＵ３０との通信を行う。
【００４７】
車内通信部１４は、ＣＰＵ１１から与えられた情報を対象のＥＣＵ３０へ送信するとともに、ＥＣＵ３０から受信した情報をＣＰＵ１１に与える。
車内通信部１４は、上記通信規格だけでなく、車載ネットワークに用いる他の通信規格によって通信してもよい。
【００４８】
無線通信機１５は、アンテナと、アンテナからの無線信号の送受信を実行する通信回路とを含む無線通信機よりなる。無線通信機１５は、携帯電話網等の広域通信網２に接続されることにより車外装置との通信が可能である。
無線通信機１５は、図示しない基地局により形成される広域通信網２を介して、ＣＰＵ１１から与えられた情報を管理サーバ５などの車外装置に送信するとともに、車外装置から受信した情報をＣＰＵ１１に与える。
【００４９】
〔ＥＣＵの内部構成〕
図３はＥＣＵ３０の内部構成を示すブロック図である。
図３に示すように、ＥＣＵ３０は、ＣＰＵ３１、ＲＡＭ３２、記憶部３３、通信部３４などを備える。ＥＣＵ３０は、車両１に搭載された複数の車載機器を個別に制御する制御装置である。ＥＣＵ３０の種類には、例えば、エンジン制御ＥＣＵ、ステアリング制御ＥＣＵ、及びドアロック制御ＥＣＵなどがある。
【００５０】
ＣＰＵ３１は、記憶部３３に予め記憶された一又は複数のプログラムをＲＡＭ３２に読み出して実行することにより、自身が担当する車載機器の動作を制御する。ＣＰＵ３１もまた複数のＣＰＵ群を代表するものであってもよく、ＣＰＵ３１による制御は、複数のＣＰＵ群が協働することによる制御であってもよい。
【００５１】
ＲＡＭ３２は、ＳＲＡＭ又はＤＲＡＭなどの揮発性のメモリ素子で構成されている。
ＲＡＭ３２には、ＣＰＵ３１が実行するコンピュータプログラム及び実行に必要なデータが一時的に記憶される。
【００５２】
記憶部３３は、フラッシュメモリ若しくはＥＥＰＲＯＭなどの不揮発性のメモリ素子、或いは、ハードディスクなどの磁気記憶装置などにより構成されている。
記憶部３３が記憶する情報には、例えば、制御対象である車載装置を制御するための処理をＣＰＵ３１に実行させるためのコンピュータプログラム（以下、「制御プログラム」という。）が含まれる。
【００５３】
通信部３４には、車両１に配設された車内通信線を介してゲートウェイ１０が接続されている。通信部３４は、例えばＣＡＮ、Ｅｔｈｅｒｎｅｔ、又はＭＯＳＴなどの規格に応じて、ゲートウェイ１０との通信を行う。
通信部３４は、ＣＰＵ３１から与えられた情報をゲートウェイ１０へ送信するとともに、ゲートウェイ１０から受信した情報をＣＰＵ３１に与える。通信部３４は、上記通信規格だけなく、車載ネットワークに用いる他の通信規格によって通信してもよい。
【００５４】
通信部３４は、車両１に配設された車内通信線を介して他のＥＣＵ３０と接続されていてもよい。この場合、通信部３４は、他のＥＣＵ３０を中継して、ゲートウェイ１０と通信することになる。
ＥＣＵ３０のＣＰＵ３１には、当該ＣＰＵ３１による制御モードを、「通常モード」又は「リプログラミングモード」（以下、「リプロモード」ともいう。）のいずれかに切り替える起動部３５が含まれる。
【００５５】
通常モードとは、ＥＣＵ３０のＣＰＵ３１が、制御プログラムにより本来の制御内容（例えば、エンジン制御やステアリング制御など）を実行する制御モードのことである。
リプログラミングモードとは、ＥＣＵ３０のＣＰＵ３１が、制御プログラムのＲＯＭ領域に対して、当該制御プログラムの消去及び書き換えの権限が付与されるモードのことである。ＣＰＵ３１は、このモードのときにのみ、制御プログラムを新バージョンに更新することができる。
【００５６】
起動部３５は、リプロモードにおいて新バーションの制御プログラムを記憶部３３に書き込むと、ＥＣＵ３０をいったん再起動（リセット）し、新バージョンの制御プログラムが書き込まれた記憶領域についてベリファイ処理を実行する。
起動部３５は、上記のベリファイ処理の完了後に、ＣＰＵ３１を更新後の制御プログラムによって動作させる。
【００５７】
〔管理サーバの内部構成〕
図４は、管理サーバ５の内部構成を示すブロック図である。
図４に示すように、管理サーバ５は、ＣＰＵ５１、ＲＯＭ５２、ＲＡＭ５３、記憶部５４、及び通信部５５などを備える。
【００５８】
ＣＰＵ５１は、ＲＯＭ５２に予め記憶された１又は複数のコンピュータプログラムをＲＡＭ５３に読み出して実行することにより、各ハードウェアの動作を制御し、管理サーバ５をゲートウェイ１０と通信可能な車外装置として機能させる。ＣＰＵ５１もまた複数のＣＰＵ群を代表するものであってもよく、ＣＰＵ５１の実現する機能は、複数のＣＰＵ群が協働して実現するものであってもよい。
【００５９】
ＲＡＭ５３は、ＳＲＡＭ又はＤＲＡＭなどの揮発性のメモリ素子で構成されている。
ＲＡＭ５３には、ＣＰＵ５１が実行するコンピュータプログラム及び実行に必要なデータが一時的に記憶される。
【００６０】
記憶部５４は、フラッシュメモリ若しくはＥＥＰＲＯＭなどの不揮発性のメモリ素子、或いは、ハードディスクなどの磁気記憶装置などにより構成されている。
通信部５５は、所定の通信規格に則って通信処理を実行する通信装置よりなり、携帯電話網などの広域通信網２に接続されている。通信部５５は、ＣＰＵ５１から与えられた情報を、広域通信網２を介して外部装置に送信するとともに、広域通信網２を介して受信した情報をＣＰＵ５１に与える。
【００６１】
図４に示すように、記憶部５４が記憶する情報には、ＥＣＵ３０の制御プログラムが最新バーションに更新済みか否かを、車両１ごとに管理する更新管理テーブルＲＴが含まれる。図４の更新管理テーブルＲＴにおいて、「ＥＩ」はＥＣＵ３０の識別番号である。
更新管理テーブルＲＴは、ＥＣＵ３０の識別番号（図４では「ＥＩ＝１」）と、当該識別番号の制御プログラムの最新バージョン（図４では「３．０」）と、登録会員の車両識別番号（ＶＩＮ）ごとのＥＣＵ３０の更新状態とを纏めたテーブルよりなる。
【００６２】
図４の更新管理テーブルＲＴにおいて、ＶＩＮ＝３の車両１では、更新状態が「完了」であるから、ＥＩ＝１のＥＣＵ３０の制御プログラムの最新バージョン（＝３．０）への更新が既に完了している。
従って、ＶＩＮ＝３の車両１については、制御プログラムの最新バージョンが、例えば「４．０」などにアップデートされない限り、ＥＩ＝１であるＥＣＵ３０の制御プログラムを更新する必要がない。
【００６３】
ＶＩＮ＝１及び２の車両１では、更新状態が「未完了」であるから、ＥＩ＝１のＥＣＵ３０の制御プログラムについて、制御プログラムの最新バージョン（＝３．０）への更新が未だ完了していない。
従って、ＶＩＮ＝１及び２の車両１については、ＥＩ＝１のＥＣＵ３０が自機の制御プログラムを最新バージョン（＝３．０）に更新するために必要となる更新プログラムを提供する必要がある。
【００６４】
そこで、管理サーバ５のＣＰＵ５１は、更新状態が未完了である車両１（ＶＩＮ＝１及び２の車両１）に、所定時間おきに更新通知を送信し、ＥＩ＝１であるＥＣＵ３０の制御プログラムの更新を促す。更新通知を受信した車両１は、ＥＣＵ３０の制御プログラムの現バージョン（例えば１．０）を含むバージョン通知を、管理サーバ５に送信する。
ＣＰＵ５１は、受信したバーション通知に含まれる現バージョンから、車両１に必要な更新プログラムを決定し、決定した更新プログラムを当該車両１に送信する。
【００６５】
〔制御プログラムの更新手順の従来例〕
図５は、本実施形態のプログラム更新システムにおける、制御プログラムの更新手順の従来例を示すシーケンス図である。ここでは、管理サーバ５の通信相手は、図４の更新管理テーブルＲＴにおけるＶＩＮ＝１の車両１であるとする。
また、ＥＩ＝１であるＥＣＵ３０の制御プログラムのバージョン履歴は、「１．０」→「２．０」→「３．０（最新）」であるとし、ＶＩＮ＝１の車両１のＥＣＵ３０では、制御プログラムの現バージョンが１．０（最新バージョンの２世代前）であるとする。
【００６６】
本実施形態では、更新プログラムが、１世代前の旧バーションからの「差分プログラムΔ」である場合を想定する。この場合、旧バージョンと新バージョンとのファイルの差分情報を含むΔが同じ記憶領域にあれば、旧バージョンにΔを適応することで、新バージョンを生成することができる。
なお、以下において、制御プログラムのバーション１．０からバーション２．０への更新プログラムを「Δ１」とし、制御プログラムのバーション２．０からバーション３．０への更新プログラムを「Δ２」とする。
【００６７】
図５に示すように、管理サーバ５は、ＥＩ＝１であるＥＣＵ３０の制御プログラムの更新を促す更新通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ１）。
更新通知を受信した車両１のゲートウェイ１０は、ＥＩ＝１のＥＣＵ３０に制御プログラムのバージョン確認を送信する（ステップＳ２）。バージョン確認を受信したＥＣＵ３０は、制御プログラムの現バージョン（＝１．０）を含むバージョン通知をゲートウェイ１０に返信する（ステップＳ３）。
【００６８】
バージョン通知を受信したゲートウェイ１０は、ＥＣＵ３０の現バージョン（＝１．０）を含むバージョン通知を管理サーバ５に送信する（ステップＳ４）。
バージョン通知を受信した管理サーバ５のＣＰＵ５１は、制御プログラムのバージョンを１．０から２．０に更新するのに必要な更新プログラムΔ１を、ＶＩＮ＝１の車両１に送信する（ステップＳ５）。車両１のゲートウェイ１０は、受信した更新プログラムΔ１をＥＩ＝１のＥＣＵ３０に転送する（ステップＳ６）。
【００６９】
次に、ＥＣＵ３０のＣＰＵ３１は、現時点の旧バージョンの制御プログラム（以下、「現ソフトウェア」ともいう。）を、記憶部３３のＲＯＭからＲＡＭ３２にコピーし（ステップＳ７）、ＲＡＭ３２に展開した現ソフトウェア（Ｖｅｒ＝１．０）に更新プログラムΔ１を適用する（ステップＳ８）。これにより、現バージョン１．０から１つ次の世代である、バージョン２．０の制御プログラムが生成される。
【００７０】
バージョン２．０の制御プログラムが生成されると、ＥＣＵ３０の起動部３５（図３参照）は、ＣＰＵ３１の制御モードを通常モードからリプロモードに切り替えて、バージョン２．０の制御プログラムを記憶部３３のＲＯＭに書き込んだあと、そのデータ内容をチェックする（ステップＳ９）。
【００７１】
上記のチェックは、例えば、ＥＣＵ３０をいったん再起動し、バージョン２．０の制御プログラムが書き込まれた記憶領域について行われるベリファイ処理よりなる。
上記のチェックが完了すると、ＥＣＵ３０の起動部３５は、ＣＰＵ３１の制御モードを通常モードに切り替えて、ＣＰＵ３１を更新後の新たな制御プログラム（Ｖｅｒ＝２．０）によって動作させる。
【００７２】
次に、ＥＣＵ３０のＣＰＵ３１は、書き込み完了通知をゲートウェイ１０に送信する（ステップＳ１０）。ゲートウェイ１０は、受信した書き込み完了通知を管理サーバ５に転送する（ステップＳ１１）。
上記の書き込み完了通知には、書き込み後の制御プログラムのバージョン情報（この場合は、Ｖｅｒ＝２．０）が含まれる。
【００７３】
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、ＥＣＵ３０の制御プログラムがバージョン２．０に更新されても、ＥＣＵ３０の制御プログラムは未だ最新ではない。
従って、書き込み完了通知を受信した管理サーバ５は、所定期間の経過後に、ＥＩ＝１であるＥＣＵ３０の制御プログラムの更新を促す更新通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ１２）。
【００７４】
更新通知を受信した車両１のゲートウェイ１０は、ＥＩ＝１のＥＣＵ３０にソフトウェアのバージョン確認を送信する（ステップＳ１３）。バージョン確認を受信したＥＣＵ３０は、制御プログラムの現バージョン（＝２．０）を含むバージョン通知をゲートウェイ１０に返信する（ステップＳ１４）。
【００７５】
バージョン通知を受信したゲートウェイ１０は、ＥＣＵ３０の現バージョン（＝２．０）を含むバージョン通知を管理サーバ５に送信する（ステップＳ１５）。
バージョン通知を受信した管理サーバ５は、制御プログラムのバージョンを２．０から３．０に更新するのに必要な更新プログラムΔ２を、ＶＩＮ＝１の車両１に送信する（ステップＳ１６）。車両１のゲートウェイ１０は、受信した更新プログラムΔ２をＥＩ＝１のＥＣＵ３０に転送する（ステップＳ１７）。
【００７６】
次に、ＥＣＵ３０のＣＰＵ３１は、現ソフトウェア（この場合は、バージョン２．０の制御プログラム）を記憶部３３のＲＯＭからＲＡＭ３２にコピーし（ステップＳ１８）、ＲＡＭ３２に展開した現ソフトウェア（Ｖｅｒ＝２．０）に更新プログラムΔ２を適用する（ステップＳ１９）。これにより、現バージョン２．０から１つ次の世代である、バージョン３．０の制御プログラムが生成される。
【００７７】
バージョン３．０の制御プログラムが生成されると、ＥＣＵ３０の起動部３５（図３参照）は、ＣＰＵ３１の制御モードを通常モードからリプロモードに切り替えて、バージョン３．０の制御プログラムを記憶部３３のＲＯＭに書き込んだあと、そのデータ内容をチェックする（ステップＳ２０）。
【００７８】
上記のチェックも、例えば、ＥＣＵ３０をいったん再起動し、バージョン３．０の制御プログラムが書き込まれた記憶領域について行われるベリファイ処理よりなる。
上記のチェックが完了すると、ＥＣＵ３０の起動部３５は、ＣＰＵ３１の制御モードを通常モードに切り替えて、ＣＰＵ３１を更新後の新たな制御プログラム（Ｖｅｒ＝３．０）によって動作させる。
【００７９】
次に、ＥＣＵ３０のＣＰＵ３１は、書き込み完了通知をゲートウェイ１０に送信する（ステップＳ２１）。ゲートウェイ１０は、受信した書き込み完了通知を管理サーバ５に転送する（ステップＳ２２）。
上記の書き込み完了通知には、書き込み後の制御プログラムのバージョン情報（この場合は、Ｖｅｒ＝３．０）が含まれる。
【００８０】
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、ＥＣＵ３０の制御プログラムがバージョン３．０に更新されると、ＥＣＵ３０の制御プログラムは最新となる。
従って、書き込み完了通知を受信した管理サーバ５は、ＥＩ＝１であるＥＣＵ３０の制御プログラムが最新である旨の最新通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ２３）。
【００８１】
〔従来の更新手順の問題点とその解決策〕
ＥＣＵ３０の制御プログラムの更新に必要な更新プログラムを、管理サーバ５から無線通信にてダウンロードするＦＯＴＡ（Firmware On-The-Air）において、例えば、更新頻度が少ないユーザの場合には、所定のＥＣＵ３０の制御プログラムに関して、現バージョンと最新バージョンとの乖離が２世代以上となる可能性がある。
【００８２】
例えば、現バージョンが１．０でかつ最新バージョンが２世代後の３．０である場合には、図５に示すように、バージョン１．０からバージョン２．０への更新処理（図５のステップＳ７〜Ｓ９）と、バージョン２．０から最新バージョン３．０への更新処理（図５のステップＳ１８〜Ｓ２０）とが必要となり、現バージョン１．０から最新バージョン３．０まで到達するのに時間がかかるという問題がある。
【００８３】
特に、更新プログラムが差分プログラムΔである場合、記憶部３３のＲＯＭ上の制御プログラムをいったんＲＡＭ３２に展開し、差分プログラムΔを適用した後のファイルをＲＯＭ上に書き戻してから、ＲＯＭのチェック（ベリファイ処理）が行われる（図５のステップＳ９，Ｓ２０）。
このため、更新プログラムΔ１，Δ２に基づく制御プログラムの書き換え／ＲＯＭチェックを２回行う必要があり、制御プログラムのデータ容量によっては、現バージョン１．０から最新バージョン３．０に更新するのに多大な時間を要する。
【００８４】
そこで、本実施形態では、同じＥＣＵ３０の制御プログラムについて２世代以上のバージョンアップが必要となる場合に、複数の更新プログラムΔ１，Δ２を用いて最新バージョン３．０の制御プログラムを飛び級的に生成できるようにし、記憶部３３のＲＯＭへの書き込み及びチェックを１回で済ませるようにした。
この場合、制御プログラムの書き込み及びチェックが１回で済むので、２世代以上のバージョンアップに必要な更新時間を短縮することができる。
【００８５】
〔第１実施形態の更新手順〕
図６は、本実施形態のプログラム更新システムにおける、第１実施形態の制御プログラムの更新手順を示すシーケンス図である。
ここでは、管理サーバ５の通信相手は、図４の更新管理テーブルＲＴにおけるＶＩＮ＝１の車両１であるとする。この点は、後述する第２〜第５実施形態の更新手順（図７〜図１０）において同様である。
【００８６】
ＥＩ＝１であるＥＣＵ３０の制御プログラムのバージョン履歴は、「１．０」→「２．０」→「３．０（最新）」を辿るものとし、ＶＩＮ＝１の車両１のＥＣＵ３０では、制御プログラムの現バージョンが１．０（最新バージョンの２世代前）であるとする。この点についても、後述する第２〜第５実施形態の更新手順（図７〜図１０）において同様である。
【００８７】
本実施形態のプログラム更新システムでは、管理サーバ５と車両１（第１実施形態ではゲートウェイ１０）との間のダウンロード処理を制御するための制御メッセージの一種として、「仮完了通知」が定義されている。
上記の仮完了通知は、具体的には、管理サーバ５と車両１のゲートウェイ１０が次の処理（１）〜（４）を実行するように予め定義された制御メッセージである。仮完了通知は、ＥＣＵ３０からの書き込み完了通知を受けることなく発行される。
【００８８】
（１）  車両１のゲートウェイ１０は、更新プログラムΔｉ（ｉ＝１，２，…）を受信すると、受信した更新プログラムΔｉをＥＣＵ３０に提供する前に、仮完了通知を管理サーバ５に送信する。
（２）  管理サーバ５は、車両１から仮完了通知を受信すると、仮完了通知の送信元の車両１（図例では、ＶＩＮ＝１の車両１）の、ＥＩ＝１であるＥＣＵ３０について、更新プログラムΔｉの次の更新プログラムΔｉ＋１が必要か否かを判定する。
【００８９】
（３）  管理サーバ５は、（２）の判定結果が肯定的である場合は、更新プログラムΔｉの次に必要となる更新プログラムΔｉ＋１を車両１（ゲートウェイ１０）に送信する。
（４）  管理サーバ５は、（２）の判定結果が否定的である場合は、更新プログラムΔｉが最終である旨の最終通知を車両１（ゲートウェイ１０）に送信する。
【００９０】
図６に示すように、管理サーバ５は、ＥＩ＝１であるＥＣＵ３０の制御プログラムの更新を促す更新通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ１０１）。
更新通知を受信した車両１のゲートウェイ１０は、ＥＩ＝１のＥＣＵ３０にソフトウェアのバージョン確認を送信する（ステップＳ１０２）。バージョン確認を受信したＥＣＵ３０は、制御プログラムの現バージョン（＝１．０）を含むバージョン通知をゲートウェイ１０に返信する（ステップＳ１０３）。
【００９１】
バージョン通知を受信したゲートウェイ１０は、ＥＣＵ３０の現バージョン（＝１．０）を含むバージョン通知を管理サーバ５に送信する（ステップＳ１０４）。
バージョン通知を受信した管理サーバ５のＣＰＵ５１は、制御プログラムのバージョンを１．０から２．０に更新するのに必要な更新プログラムΔ１を、ＶＩＮ＝１の車両１に送信する（ステップＳ１０５）。
【００９２】
更新プログラムΔ１を受信したゲートウェイ１０は、仮完了通知を管理サーバ５に送信する（ステップＳ１０６）。
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、更新プログラムΔ１によりＥＣＵ３０の制御プログラムがバージョン２．０に更新されても、ＥＣＵ３０の制御プログラムは未だ最新ではない。
【００９３】
従って、ステップＳ１０６の仮完了通知を受信した管理サーバ５は、更新プログラムΔ１の次の更新プログラムΔ２、すなわち、制御プログラムのバージョンを２．０から３．０に更新するのに必要な更新プログラムΔ２を、ＶＩＮ＝１の車両１に送信する（ステップＳ１０７）。
更新プログラムΔ２を受信したゲートウェイ１０は、仮完了通知を管理サーバ５に送信する（ステップＳ１０８）。
【００９４】
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、更新プログラムΔ２によりＥＣＵ３０の制御プログラムがバージョン３．０に更新されると、ＥＣＵ３０の制御プログラムは最新となる。
従って、ステップＳ１０８の仮完了通知を受信した管理サーバ５は、更新プログラムΔ２が最終である旨の最終通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ１０９）。最終通知には、最終バージョンのバージョン情報（Ｖｅｒ＝３．０）が含まれる。
【００９５】
最終通知を受信したゲートウェイ１０は、自機の記憶部３３に一時的に記憶した更新プログラムΔ１，Δ２を、ＥＩ＝１のＥＣＵ３０に転送する（ステップＳ１１０）。
また、ゲートウェイ１０は、２つの更新プログラムΔ１，Δ２を適用すると生成される制御プログラムの最終バージョン（＝３．０）を、ＥＩ＝１のＥＣＵ３０に通知する（ステップＳ１１１）。
【００９６】
次に、ＥＣＵ３０のＣＰＵ３１は、現ソフトウェアを記憶部３３のＲＯＭからＲＡＭ３２にコピーし（ステップＳ１１２）、ＲＡＭ３２に展開した現ソフトウェア（Ｖｅｒ＝１．０）に２つの更新プログラムΔ１，Δ２を順次適用する（ステップＳ１１３）。
これにより、現バージョン１．０から２世代新しいバージョン３．０の制御プログラム（以下、「スキッププログラム」という。）が生成される。
【００９７】
ＥＣＵ３０のＣＰＵ３１は、生成したスキッププログラムが、ゲートウェイ１０から通知された最終バージョン（＝３．０）であるか確認した上で、スキッププログラムの書き込みを許可する（ステップＳ１１４）。
スキッププログラムの書き込みが許可されると、ＥＣＵ３０の起動部３５（図３参照）は、ＣＰＵ３１の制御モードを通常モードからリプロモードに切り替え、バージョン３．０の制御プログラムを記憶部３３のＲＯＭに書き込んだあと、そのデータ内容をチェックする（ステップＳ１１５）。
【００９８】
上記のチェックは、例えば、ＥＣＵ３０をいったん再起動し、バージョン３．０の制御プログラムが書き込まれた記憶領域について行われるベリファイ処理よりなる。
上記のチェックが完了すると、ＥＣＵ３０の起動部３５は、ＣＰＵ３１の制御モードを通常モードに切り替えて、ＣＰＵ３１を更新後の新たな制御プログラム（＝３．０）によって動作させる。
【００９９】
次に、ＥＣＵ３０のＣＰＵ３１は、書き込み完了通知をゲートウェイ１０に送信する（ステップＳ１１６）。ゲートウェイ１０は、受信した書き込み完了通知を管理サーバ５に転送する（ステップＳ１１７）。
上記の書き込み完了通知には、書き込み後の制御プログラムのバージョン情報（この場合は、Ｖｅｒ＝３．０）が含まれる。
【０１００】
〔第２実施形態の更新手順〕
図７は、本実施形態のプログラム更新システムにおける、第２実施形態に係る制御プログラムの更新手順を示すシーケンス図である。
第２実施形態の更新手順（図７）が第１実施形態の更新手順（図６）と異なる点は、最新バージョンのスキッププログラムの書き込み許可（図６のステップＳ１１４）を、ＥＣＵ３０ではなくゲートウェイ１０が実行する点にある。
【０１０１】
図７に示すように、管理サーバ５は、ＥＩ＝１であるＥＣＵ３０の制御プログラムの更新を促す更新通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ２０１）。
更新通知を受信した車両１のゲートウェイ１０は、ＥＩ＝１のＥＣＵ３０にソフトウェアのバージョン確認を送信する（ステップＳ２０２）。バージョン確認を受信したＥＣＵ３０は、制御プログラムの現バージョン（＝１．０）を含むバージョン通知をゲートウェイ１０に返信する（ステップＳ２０３）。
【０１０２】
バージョン通知を受信したゲートウェイ１０は、ＥＣＵ３０の現バージョン（＝１．０）を含むバージョン通知を管理サーバ５に送信する（ステップＳ２０４）。
バージョン通知を受信した管理サーバ５のＣＰＵ５１は、制御プログラムのバージョンを１．０から２．０に更新するのに必要な更新プログラムΔ１を、ＶＩＮ＝１の車両１に送信する（ステップＳ２０５）。
【０１０３】
更新プログラムΔ１を受信したゲートウェイ１０は、仮完了通知を管理サーバ５に送信する（ステップＳ２０６）。
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、更新プログラムΔ１によりＥＣＵ３０の制御プログラムがバージョン２．０に更新されても、ＥＣＵ３０の制御プログラムは未だ最新ではない。
【０１０４】
従って、ステップＳ２０６の仮完了通知を受信した管理サーバ５は、更新プログラムΔ１の次の更新プログラムΔ２、すなわち、制御プログラムのバージョンを２．０から３．０に更新するのに必要な更新プログラムΔ２を、ＶＩＮ＝１の車両１に送信する（ステップＳ２０７）。
更新プログラムΔ２を受信したゲートウェイ１０は、仮完了通知を管理サーバ５に送信する（ステップＳ２０８）。
【０１０５】
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、更新プログラムΔ２によりＥＣＵ３０の制御プログラムがバージョン３．０に更新されると、ＥＣＵ３０の制御プログラムは最新となる。
従って、ステップＳ１０８の仮完了通知を受信した管理サーバ５は、更新プログラムΔ２が最終である旨の最終通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ２０９）。
【０１０６】
最終通知を受信したゲートウェイ１０は、自機の記憶部３３に一時的に記憶した更新プログラムΔ１，Δ２を、ＥＩ＝１のＥＣＵ３０に転送する（ステップＳ２１０）。
また、ゲートウェイ１０は、２つの更新プログラムΔ１，Δ２を適用すると生成される制御プログラムの最終バージョン（＝３．０）を、自機の記憶部１３に一時的に記憶しておく。
【０１０７】
次に、ＥＣＵ３０のＣＰＵ３１は、現ソフトウェアを記憶部３３のＲＯＭからＲＡＭ３２にコピーし（ステップＳ２１１）、ＲＡＭ３２に展開した現ソフトウェア（Ｖｅｒ＝１．０）に２つの更新プログラムΔ１，Δ２を順次適用する（ステップＳ２１２）。
これにより、現バージョン１．０から２世代新しいバージョン３．０のスキッププログラムが生成される。
【０１０８】
ＥＣＵ３０のＣＰＵ３１は、生成したスキッププログラムからバージョン情報を読み取り、読み取ったバージョン情報を含むバージョン通知をゲートウェイ１０に送信する（ステップＳ２１３）。
バージョン通知を受信したゲートウェイ１０は、通知されたバージョン情報が記憶中の最終バージョン（＝３．０）であるか確認した上で、スキッププログラムの書き込み許可を生成し（ステップＳ２１４）、生成した書き込み許可をＥＣＵ３０に送信する（ステップＳ２１５）。
【０１０９】
スキッププログラムの書き込み許可を受信すると、ＥＣＵ３０の起動部３５（図３参照）は、ＣＰＵ３１の制御モードを通常モードからリプロモードに切り替え、バージョン３．０の制御プログラムを記憶部３３のＲＯＭに書き込んだあと、そのデータ内容をチェックする（ステップＳ２１６）。
【０１１０】
上記のチェックは、例えば、ＥＣＵ３０をいったん再起動し、バージョン３．０の制御プログラムが書き込まれた記憶領域について行われるベリファイ処理よりなる。
上記のチェックが完了すると、ＥＣＵ３０の起動部３５は、ＣＰＵ３１の制御モードを通常モードに切り替えて、ＣＰＵ３１を更新後の新たな制御プログラム（＝３．０）によって動作させる。
【０１１１】
次に、ＥＣＵ３０のＣＰＵ３１は、書き込み完了通知をゲートウェイ１０に送信する（ステップＳ２１７）。ゲートウェイ１０は、受信した書き込み完了通知を管理サーバ５に転送する（ステップＳ２１８）。
上記の書き込み完了通知には、書き込み後の制御プログラムのバージョン情報（この場合は、Ｖｅｒ＝３．０）が含まれる。
【０１１２】
〔第３実施形態の更新手順〕
図８は、本実施形態のプログラム更新システムにおける、第３実施形態に係る制御プログラムの更新手順を示すシーケンス図である。
第３実施形態の更新手順（図８）が第１実施形態の更新手順（図６）と異なる点は、仮完了通知を認識できない管理サーバ５が採用され、ゲートウェイ１０が、仮完了通知に代えて通常の書き込み完了通知を管理サーバ５に送信する点にある。しかし、ゲートウェイ１０は、ＥＣＵ３０からの書き込み完了通知を受けずに管理サーバ５に書き込み完了通知を送信する。
【０１１３】
すなわち、第３実施形態の更新手順（図８）に用いるゲートウェイ１０は、更新プログラムΔｉ（ｉ＝１，２，…）を受信すると、更新プログラムΔｉをＥＣＵ３０に提供する前に、更新プログラムΔｉの書き込みが完了した旨の通知を管理サーバ５に送信する。
書き込み完了通知には、更新プログラムΔｉを適用した場合のバージョン情報（＝ｉ＋１）が含まれる。従って、通知された制御プログラムのバージョンが最新でない場合には、管理サーバ５は、次の更新プログラムΔｉ＋１を車両１に送信する。
【０１１４】
図８に示すように、管理サーバ５は、ＥＩ＝１であるＥＣＵ３０の制御プログラムの更新を促す更新通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ３０１）。
更新通知を受信した車両１のゲートウェイ１０は、ＥＩ＝１のＥＣＵ３０にソフトウェアのバージョン確認を送信する（ステップＳ３０２）。バージョン確認を受信したＥＣＵ３０は、制御プログラムの現バージョン（＝１．０）を含むバージョン通知をゲートウェイ１０に返信する（ステップＳ３０３）。
【０１１５】
バージョン通知を受信したゲートウェイ１０は、ＥＣＵ３０の現バージョン（＝１．０）を含むバージョン通知を管理サーバ５に送信する（ステップＳ３０４）。
バージョン通知を受信した管理サーバ５のＣＰＵ５１は、制御プログラムのバージョンを１．０から２．０に更新するのに必要な更新プログラムΔ１を、ＶＩＮ＝１の車両１に送信する（ステップＳ３０５）。
【０１１６】
更新プログラムΔ１を受信したゲートウェイ１０は、書き込み完了通知を管理サーバ５に送信する（ステップＳ３０６）。この書き込み完了通知には、更新プログラムΔ１を適用した後の制御プログラムのバージョン（Ｖｅｒ＝２．０）が含まれる。
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、更新プログラムΔ１によりＥＣＵ３０の制御プログラムがバージョン２．０に更新されても、ＥＣＵ３０の制御プログラムは未だ最新ではない。
【０１１７】
従って、ステップＳ３０６の書き込み完了通知を受信した管理サーバ５は、更新プログラムΔ１の次の更新プログラムΔ２、すなわち、制御プログラムのバージョンを２．０から３．０に更新するのに必要な更新プログラムΔ２を、ＶＩＮ＝１の車両１に送信する（ステップＳ３０７）。
更新プログラムΔ２を受信したゲートウェイ１０は、書き込み完了通知を管理サーバ５に送信する（ステップＳ３０８）。この書き込み完了通知には、更新プログラムΔ２を適用した後の制御プログラムのバージョン（Ｖｅｒ＝３．０）が含まれる。
【０１１８】
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、更新プログラムΔ２によりＥＣＵ３０の制御プログラムがバージョン３．０に更新されると、ＥＣＵ３０の制御プログラムは最新となる。
従って、ステップＳ３０８の仮完了通知を受信した管理サーバ５は、通知されたバージョン（＝３．０）が最新である旨の最新通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ３０９）。
【０１１９】
最新通知を受信したゲートウェイ１０は、自機の記憶部３３に一時的に記憶した更新プログラムΔ１，Δ２を、ＥＩ＝１のＥＣＵ３０に転送する（ステップＳ１１０）。
また、ゲートウェイ１０は、２つの更新プログラムΔ１，Δ２を適用すると生成される制御プログラムの最終バージョン（＝３．０）を、ＥＩ＝１のＥＣＵ３０に通知する（ステップＳ３１１）。
【０１２０】
次に、ＥＣＵ３０のＣＰＵ３１は、現ソフトウェアを記憶部３３のＲＯＭからＲＡＭ３２にコピーし（ステップＳ３１２）、ＲＡＭ３２に展開した現ソフトウェア（Ｖｅｒ＝１．０）に２つの更新プログラムΔ１，Δ２を順次適用する（ステップＳ３１３）。
ＥＣＵ３０のＣＰＵ３１は、更新プログラムΔ１，Δ２を適用して生成した制御プログラムが、ゲートウェイ１０から通知された最終バージョン（＝３．０）であるか確認した上で、制御プログラムの書き込みを許可する（ステップＳ３１４）。
【０１２１】
制御プログラムの書き込みが許可されると、ＥＣＵ３０の起動部３５（図３参照）は、ＣＰＵ３１の制御モードを通常モードからリプロモードに切り替え、バージョン３．０の制御プログラムを記憶部３３のＲＯＭに書き込んだあと、そのデータ内容をチェックする（ステップＳ３１５）。
【０１２２】
上記のチェックは、例えば、ＥＣＵ３０をいったん再起動し、バージョン３．０の制御プログラムが書き込まれた記憶領域について行われるベリファイ処理よりなる。
上記のチェックが完了すると、ＥＣＵ３０の起動部３５は、ＣＰＵ３１の制御モードを通常モードに切り替えて、ＣＰＵ３１を更新後の新たな制御プログラム（＝３．０）によって動作させる。
【０１２３】
なお、第３実施形態の更新手順（図８）では、ゲートウェイ１０が、最新バージョン（＝３．０）の書き込み完了通知の送信を、ＥＣＵ３０に更新プログラムΔ１，Δ２を転送する前に既に実行している。
従って、ＥＣＵ３０のＣＰＵ３１は、ステップＳ３１５の処理後の書き込み完了通知をゲートウェイ１０に送信する必要はない。
【０１２４】
〔第４実施形態の更新手順〕
図９は、本実施形態のプログラム更新システムにおける、第４実施形態に係る制御プログラムの更新手順を示すシーケンス図である。
第４実施形態の更新手順（図９）が第１実施形態の更新手順（図６）と異なる点は、制御メッセージ及び更新プログラムΔｉを管理サーバ５とやり取りする通信主体がＥＣＵ３０自身であり、ゲートウェイ１０が単なるリピータとして機能する点にある。
【０１２５】
本実施形態の更新システムでは、管理サーバ５と車両１（第４実施形態ではＥＣＵ３０）との間のダウンロード処理を制御するための制御メッセージの一種として、「仮完了通知」が定義されている。
上記の仮完了通知は、具体的には、管理サーバ５と車両１のＥＣＵ３０が次の処理（１）〜（４）を実行するように予め定義された制御メッセージである。仮完了通知は、ＥＣＵ３０が書き込み完了通知を行うことなく発行される。
【０１２６】
（１）  車両１のＥＣＵ３０は、更新プログラムΔｉ（ｉ＝１，２，…）を受信すると、受信した更新プログラムΔｉを用いた次世代の制御プログラムの生成を行わずに、仮完了通知を管理サーバ５に送信する。
（２）  管理サーバ５は、車両１から仮完了通知を受信すると、仮完了通知の送信元の車両１（図例では、ＶＩＮ＝１の車両１）の、ＥＩ＝１であるＥＣＵ３０について、更新プログラムΔｉの次の更新プログラムΔｉ＋１が必要か否かを判定する。
【０１２７】
（３）  管理サーバ５は、（２）の判定結果が肯定的である場合は、更新プログラムΔｉの次に必要となる更新プログラムΔｉ＋１を車両１（ＥＣＵ３０）に送信する。
（４）  管理サーバ５は、（２）の判定結果が否定的である場合は、更新プログラムΔｉが最終である旨の最終通知を車両１（ゲートウェイ１０）に送信する。
（５）  車両１のＥＣＵ３０は、最終通知を受信すると、取得した１又は複数の更新プログラムΔｉ，Δｉ＋１……を用いて新バージョンの制御プログラムを生成する。
【０１２８】
図９に示すように、管理サーバ５は、ＥＩ＝１であるＥＣＵ３０の制御プログラムの更新を促す更新通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ４０１）。
更新通知を受信した車両１のＥＣＵ３０（ＥＩ＝１のＥＣＵ３０）は、自装置の制御プログラムの現バージョン（＝１．０）を含むバージョン通知を管理サーバ５に返信する（ステップＳ４０２）。
【０１２９】
バージョン通知を受信した管理サーバ５のＣＰＵ５１は、制御プログラムのバージョンを１．０から２．０に更新するのに必要な更新プログラムΔ１を、ＶＩＮ＝１の車両１に送信する（ステップＳ４０３）。
更新プログラムΔ１を受信したＥＣＵ３０は、仮完了通知を管理サーバ５に送信する（ステップＳ４０４）。
【０１３０】
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、更新プログラムΔ１によりＥＣＵ３０の制御プログラムがバージョン２．０に更新されても、ＥＣＵ３０の制御プログラムは未だ最新ではない。
【０１３１】
従って、ステップＳ４０４の仮完了通知を受信した管理サーバ５は、更新プログラムΔ１の次の更新プログラムΔ２、すなわち、制御プログラムのバージョンを２．０から３．０に更新するのに必要な更新プログラムΔ２を、ＶＩＮ＝１の車両１に送信する（ステップＳ４０５）。
更新プログラムΔ２を受信したＥＣＵ３０は、仮完了通知を管理サーバ５に送信する（ステップＳ４０６）。
【０１３２】
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、更新プログラムΔ２によりＥＣＵ３０の制御プログラムがバージョン３．０に更新されると、ＥＣＵ３０の制御プログラムは最新となる。
従って、ステップＳ４０６の仮完了通知を受信した管理サーバ５は、更新プログラムΔ２が最終である旨の最終通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ４０７）。最終通知には、最終バージョンのバージョン情報（Ｖｅｒ＝３．０）が含まれる。
【０１３３】
次に、ＥＣＵ３０のＣＰＵ３１は、現ソフトウェアを記憶部３３のＲＯＭからＲＡＭ３２にコピーし（ステップＳ４０８）、ＲＡＭ３２に展開した現ソフトウェア（Ｖｅｒ＝１．０）に２つの更新プログラムΔ１，Δ２を順次適用する（ステップＳ４０９）。
これにより、現バージョン１．０から２世代新しいバージョン３．０のスキッププログラムが生成される。
【０１３４】
ＥＣＵ３０のＣＰＵ３１は、更新プログラムΔ１，Δ２を適用して生成したスキッププログラムが、管理サーバ５から通知された最終バージョン（＝３．０）であるか確認した上で、スキッププログラムの書き込みを許可する（ステップＳ４１０）。
スキッププログラムの書き込みが許可されると、ＥＣＵ３０の起動部３５（図３参照）は、ＣＰＵ３１の制御モードを通常モードからリプロモードに切り替え、バージョン３．０の制御プログラムを記憶部３３のＲＯＭに書き込んだあと、そのデータ内容をチェックする（ステップＳ４１１）。
【０１３５】
上記のチェックは、例えば、ＥＣＵ３０をいったん再起動し、バージョン３．０の制御プログラムが書き込まれた記憶領域について行われるベリファイ処理よりなる。
上記のチェックが完了すると、ＥＣＵ３０の起動部３５は、ＣＰＵ３１の制御モードを通常モードに切り替えて、ＣＰＵ３１を更新後の新たな制御プログラム（＝３．０）によって動作させる。
【０１３６】
次に、ＥＣＵ３０のＣＰＵ３１は、書き込み完了通知を管理サーバ５に送信する（ステップＳ４１２）。この書き込み完了通知には、書き込み後の制御プログラムのバージョン情報（この場合は、Ｖｅｒ＝３．０）が含まれる。
【０１３７】
〔第５実施形態の更新手順〕
図１０は、本実施形態のプログラム更新システムにおける、第５実施形態に係る制御プログラムの更新手順を示すシーケンス図である。
第５実施形態の更新手順（図１０）が第１実施形態の更新手順（図６）と異なる点は、制御メッセージ及び更新プログラムΔｉを管理サーバ５とやり取りする通信主体がＥＣＵ３０自身であり、ゲートウェイ１０が単なるリピータとして機能する点にある。
【０１３８】
また、第５実施形態の更新手順（図１０）が第４実施形態の更新手順（図９）と異なる点は、仮完了通知を認識できない管理サーバ５が採用され、ＥＣＵ３０が、仮完了通知に代えて通常の書き込み完了通知を管理サーバ５に送信する点にある。
ＥＣＵ３０は、新バージョンの制御プログラムの書き込みを完了していなくても、管理サーバ５に書き込み完了通知を送信する。
【０１３９】
すなわち、第５実施形態の更新手順（図１０）に用いるＥＣＵ３０は、更新プログラムΔｉ（ｉ＝１，２，…）を受信すると、受信した更新プログラムΔｉを適用する前に、更新プログラムΔｉの書き込みが完了した旨の通知を管理サーバ５に送信する。
書き込み完了通知には、更新プログラムΔｉを適用した場合のバージョン情報（＝ｉ＋１）が含まれる。従って、通知された制御プログラムのバージョンが最新でない場合には、管理サーバ５は、次の更新プログラムΔｉ＋１を車両１に送信する。
【０１４０】
図１０に示すように、管理サーバ５は、ＥＩ＝１であるＥＣＵ３０の制御プログラムの更新を促す更新通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ５０１）。
更新通知を受信した車両１のＥＣＵ３０（ＥＩ＝１のＥＣＵ３０）は、自装置の制御プログラムの現バージョン（＝１．０）を含むバージョン通知を管理サーバ５に返信する（ステップＳ５０２）。
【０１４１】
バージョン通知を受信した管理サーバ５のＣＰＵ５１は、制御プログラムのバージョンを１．０から２．０に更新するのに必要な更新プログラムΔ１を、ＶＩＮ＝１の車両１に送信する（ステップＳ５０３）。
【０１４２】
更新プログラムΔ１を受信したＥＣＵ３０は、書き込み完了通知を管理サーバ５に送信する（ステップＳ５０４）。この書き込み完了通知には、更新プログラムΔ１を適用した後の制御プログラムのバージョン（Ｖｅｒ＝２．０）が含まれる。
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、更新プログラムΔ１によりＥＣＵ３０の制御プログラムがバージョン２．０に更新されても、ＥＣＵ３０の制御プログラムは未だ最新ではない。
【０１４３】
従って、ステップＳ５０４の書き込み完了通知を受信した管理サーバ５は、更新プログラムΔ１の次の更新プログラムΔ２、すなわち、制御プログラムのバージョンを２．０から３．０に更新するのに必要な更新プログラムΔ２を、ＶＩＮ＝１の車両１に送信する（ステップＳ５０５）。
更新プログラムΔ２を受信したＥＣＵ３０は、書き込み完了通知を管理サーバ５に送信する（ステップＳ５０６）。この書き込み完了通知には、更新プログラムΔ２を適用した後の制御プログラムのバージョン（Ｖｅｒ＝３．０）が含まれる。
【０１４４】
ＥＩ＝１のＥＣＵ３０の最新バージョンは３．０であるから（図４参照）、更新プログラムΔ２によりＥＣＵ３０の制御プログラムがバージョン３．０に更新されると、ＥＣＵ３０の制御プログラムは最新となる。
従って、ステップＳ５０６の仮完了通知を受信した管理サーバ５は、通知されたバージョン（＝３．０）が最新である旨の最新通知を、ＶＩＮ＝１の車両１に送信する（ステップＳ５０７）。最終通知には、最終バージョンのバージョン情報（Ｖｅｒ＝３．０）が含まれる。
【０１４５】
次に、ＥＣＵ３０のＣＰＵ３１は、現ソフトウェアを記憶部３３のＲＯＭからＲＡＭ３２にコピーし（ステップＳ５０８）、ＲＡＭ３２に展開した現ソフトウェア（Ｖｅｒ＝１．０）に２つの更新プログラムΔ１，Δ２を順次適用する（ステップＳ５０９）。
これにより、現バージョン１．０から２世代新しいバージョン３．０のスキッププログラムが生成される。
【０１４６】
ＥＣＵ３０のＣＰＵ３１は、更新プログラムΔ１，Δ２を適用して生成したスキッププログラムが、管理サーバ５から通知された最終バージョン（＝３．０）であるか確認した上で、制御プログラムの書き込みを許可する（ステップＳ５１０）。
スキッププログラムの書き込みが許可されると、ＥＣＵ３０の起動部３５（図３参照）は、ＣＰＵ３１の制御モードを通常モードからリプロモードに切り替え、バージョン３．０の制御プログラムを記憶部３３のＲＯＭに書き込んだあと、そのデータ内容をチェックする（ステップＳ５１１）。
【０１４７】
上記のチェックは、例えば、ＥＣＵ３０をいったん再起動し、バージョン３．０の制御プログラムが書き込まれた記憶領域について行われるベリファイ処理よりなる。
上記のチェックが完了すると、ＥＣＵ３０の起動部３５は、ＣＰＵ３１の制御モードを通常モードに切り替えて、ＣＰＵ３１を更新後の新たな制御プログラム（＝３．０）によって動作させる。
【０１４８】
なお、第５実施形態の更新手順（図１０）では、ＥＣＵ３０が、最新バージョン（＝３．０）の書き込み完了通知の送信を、更新プログラムΔ１，Δ２からスキッププログラムを生成する前に既に実行している。
従って、ＥＣＵ３０のＣＰＵ３１は、ステップＳ５１１の処理後の書き込み完了通知を管理サーバ５に送信する必要はない。
【０１４９】
〔第１の変形例〕
上述の各実施形態の更新手順（図６〜図１０）において、ＥＣＵ３０は、生成したスキッププログラムの書き込みに失敗した場合（ステップＳ１１５，ステップＳ２１６，ステップＳ３１５，ステップ４１１，ステップ５１１でのＲＯＭチェックにより、書き込みが不成功と判定された場合）に、制御プログラムのバージョンアップを１世代ごとに段階的に行うことにしてもよい。
【０１５０】
具体的には、更新プログラムΔ１を用いたバージョン１．０からバージョン２．０へのバージョンアップと、更新プログラムΔ２を用いたバージョン２．０から最新バージョン３．０へのバージョンアップとを、順に行うようにすればよい。
このようにすれば、スキッププログラムの書き込みに失敗しても、ＥＣＵ３０の制御プログラムを確実に最新バージョン３．０に更新することができる。
【０１５１】
〔第２の変形例〕
本実施形態のプログラム更新システムにおいて、ゲートウェイ１０又はＥＣＵ３０は、上述の各実施形態の更新手順（図６〜図１０）を無条件に実行するのではなく、複数の更新プログラムΔ１，Δ２のデータサイズ及び伝送時間のうちの少なくとも１つに基づいて、管理サーバ５への仮完了通知などの制御メッセージの送信処理、及び、制御メッセージに応じて管理サーバ５がそれぞれ送信する更新プログラムΔ１，Δ２の受信処理を実行するか否かを判定することにしてもよい。
【０１５２】
具体的には、ゲートウェイ１０又はＥＣＵ３０は、複数の更新プログラムΔ１，Δ２のデータサイズが所定の閾値以上の場合、或いは、その伝送時間が所定の閾値以上の場合に限り、制御メッセージの送信と更新プログラムΔｉの受信を繰り返す本実施形態の更新手順を実行し、それ以外の場合には、従来の更新手順（図５）に従い、更新プログラムΔ１，Δ２を用いて制御プログラムを１つずつバージョンアップすればよい。
このようにすれば、更新時間が比較的大きい場合に本実施形態の更新手順を採用することができ、本実施形態のプログラム更新システムをより柔軟に運用できる。
【０１５３】
〔第３の変形例〕
上述の各実施形態の更新手順（図６〜図１０）において、ゲートウェイ１０又はＥＣＵ３０は、３つ以上の更新プログラムΔ１，Δ２，Δ３……を管理サーバ５から受信し、受信した更新プログラムΔ１，Δ２，Δ３……からスキッププログラムを生成してもよい。
この場合、ＥＣＵ３０は、３つ以上の更新プログラムΔ１，Δ２，Δ３……からスキッププログラムを生成し、生成したスキッププログラムの書き込み及びＲＯＭチェックを行うことにより、制御プログラムのバージョンを一気に最新バージョンまで繰り上げる。
【０１５４】
もっとも、上記のスキッププログラムは、必ずしも最新バージョンの制御プログラムでなくてもよい。例えば、最新バージョンのスキッププログラムを生成するには４つの更新プログラムΔ１〜Δ４が必要である場合において、通信状況の悪化のために３つの更新プログラムΔ１〜Δ３しか受信できなかった場合が想定される。
この場合、ゲートウェイ１０は、受信できた３つの更新プログラムΔ１〜Δ３をＥＣＵ３０に転送することにしてもよい。
【０１５５】
このようにすれば、ＥＣＵ３０は、ゲートウェイ１０から転送され３つの更新プログラムΔ１〜Δ３を用いて、最新バージョンの１世代前のバージョンのスキッププログラムを生成し、生成したスキッププログラムの書き込み及びＲＯＭチェックを行うことにより、制御プログラムのバージョンを最新バージョンの１世代前まで繰り上げる。
【０１５６】
その後、ゲートウェイ１０は、４つ目の更新プログラムΔ４を受信できれば、そのプログラムΔ４をＥＣＵ３０に転送すればよい。
この場合、ＥＣＵ３０は、ゲートウェイ１０から転送され４つ目の更新プログラムΔ４を用いて、最新バージョンの制御プログラムを生成し、生成した制御プログラムの書き込み及びＲＯＭチェックを行うことにより、制御プログラムのバージョンを最新バージョンまで繰り上げる。
【０１５７】
〔第４の変形例〕
上述の第１〜第３実施形態の更新手順（図６〜図８）において、複数の更新プログラムΔｉ（ｉ＝１，２，……）を用いたスキッププログラムの生成処理（図６のステップＳ１１２〜Ｓ１１３、図７のステップＳ２１１〜Ｓ２１２、図８のステップＳ３１２〜Ｓ３１３）を、ゲートウェイ１０が実行することにしてもよい。
【０１５８】
すなわち、ゲートウェイ１０は、管理サーバ５から受信した複数の更新プログラムΔｉを用いてスキッププログラムを生成し、生成したスキッププログラムをＥＣＵ３０に転送することにしてもよい。
この場合、ＥＣＵ３０は、スキッププログラムの生成処理を自身では実行しないので、ゲートウェイ１０から転送されたスキッププログラムを自装置の記憶部３３に書き込むことになる。
【０１５９】
〔その他の変形例〕
今回開示した実施形態はすべての点で例示であって制限的なものではない。本発明の権利範囲は、上述の実施形態に限定されるものではなく、特許請求の範囲に記載された構成と均等の範囲内でのすべての変更が含まれる。
例えば、上述の実施形態（変形例を含む。）におけるゲートウェイ１０の処理を無線通信機１５が実行することにしてもよい。すなわち、本実施形態の「中継装置」は、図示のゲートウェイ１０及び無線通信機１５のいずれであってもよい。
【符号の説明】
【０１６０】
１  車両
２  広域通信網
５  管理サーバ
１０  ゲートウェイ（中継装置）
１１  ＣＰＵ
１２  ＲＡＭ
１３  記憶部
１４  車内通信部
１５  無線通信機（中継装置）
３０  ＥＣＵ（制御装置）
３１  ＣＰＵ
３２  ＲＡＭ
３３  記憶部
３４  通信部
３５  起動部
５１  ＣＰＵ
５２  ＲＯＭ
５３  ＲＡＭ
５４  記憶部
５５  通信部
ＲＴ  更新管理テーブル
【図１】
2018136816.tif 000003
【図２】
2018136816.tif 000004
【図３】
2018136816.tif 000005
【図４】
2018136816.tif 000006
【図５】
2018136816.tif 000007
【図６】
2018136816.tif 000008
【図７】
2018136816.tif 000009
【図８】
2018136816.tif 000010
【図９】
2018136816.tif 000011
【図１０】
2018136816.tif 000012