(57)【要約】【課題】柔軟な更新処理が可能である。【解決手段】情報更新装置は、車両用制御装置に格納される第１情報を第２情報に更新するであって、第１情報と第２情報との差分または第２情報である更新本体、更新本体を用いて第１情報を第２情報に更新する手順が含まれる手順情報、および第１情報の第２情報への更新を開始する条件である起動条件を含む更新パッケージを受信するダウンロード制御部と、車両用制御装置および情報更新装置が搭載される車両の状態を取得し、車両の状態が起動条件に合致すると更新実行部に手順情報に基づく更新を実行させるイベント管理部とを備える。【選択図】図４
2019074800.tif 000002
【特許請求の範囲】
【請求項１】
車両用制御装置に格納される第１情報を第２情報に更新する情報更新装置であって、
前記第１情報と前記第２情報との差分または前記第２情報である更新本体、前記更新本体を用いて前記第１情報を前記第２情報に更新する手順が含まれる手順情報、および前記第１情報の前記第２情報への更新を開始する条件である起動条件を含む更新パッケージを受信するダウンロード制御部と、
前記車両用制御装置および情報更新装置が搭載される車両の状態を取得し、前記車両の状態が前記起動条件に合致すると更新実行部に前記手順情報に基づく前記更新を実行させるイベント管理部とを備える情報更新装置。
【請求項２】
請求項１に記載の情報更新装置において、
前記手順情報に基づき前記更新を実行する前記更新実行部をさらに備える情報更新装置。
【請求項３】
請求項２に記載の情報更新装置において、
前記更新パッケージには、前記更新本体、前記手順情報、および前記起動条件が複数組含まれ、
前記更新パッケージにはさらに、前記複数の手順情報と前記複数の起動条件との対応関係を示す情報が含まれる情報更新装置。
【請求項４】
請求項３に記載の情報更新装置において、
前記起動条件は、前記更新の実行を開始する契機となる事象であるイベントおよび実行順序の組み合わせであり、
前記イベント管理部は、複数の前記起動条件に含まれる前記イベントが同一の場合は、前記実行順序に基づいて前記更新実行部に前記更新を実行させるための前記手順情報の順番を決定する情報更新装置。
【請求項５】
請求項２に記載の情報更新装置において、
前記更新実行部は、所定の場合に前記更新を中断する情報更新装置。
【請求項６】
請求項５に記載の情報更新装置において、
前記更新パッケージには前記更新を中断する条件である中断条件が含まれ、
前記イベント管理部は、前記車両の状態が前記中断条件に一致すると前記更新実行部に更新中断指令を出力し、
前記更新実行部は、前記イベント管理部から更新中断指令を受けた場合に前記更新を中断する情報更新装置。
【請求項７】
請求項５に記載の情報更新装置において、
前記手順情報には前記更新を中断する処理が含まれ、
前記更新実行部は、前記手順情報に基づき前記更新を中断する情報更新装置。
【請求項８】
請求項３に記載の情報更新装置において、
前記更新実行部は、複数の前記手順情報に基づき複数の前記第１情報を並列に更新可能である情報更新装置。
【請求項９】
請求項２に記載の情報更新装置において、
前記更新パッケージには、更新対象となる前記車両用制御装置の一覧である対象一覧、および前記対象一覧の検証に用いる検証情報が含まれ、
前記検証情報を用いて前記対象一覧を検証し、前記手順情報に基づき更新される前記車両用制御装置が検証された前記対象一覧に含まれない場合は前記更新実行部による前記更新を停止させるセキュリティフィルタをさらに備える情報更新装置。
【請求項１０】
請求項２に記載の情報更新装置において、
前記起動条件には、前記車両におけるイグニッションのオンまたはイグニッションのオフが含まれる情報更新装置。
【請求項１１】
請求項２に記載の情報更新装置において、
前記起動条件には、前記更新パッケージの受信完了が含まれる情報更新装置。
【請求項１２】
コンピュータが、車両用制御装置に格納される第１情報を第２情報に更新する情報更新方法であって、
前記第１情報と前記第２情報との差分または前記第２情報である更新本体、前記更新本体を用いて前記第１情報を前記第２情報に更新する手順が含まれる手順情報、および前記第１情報の前記第２情報への更新を開始する条件である起動条件を含む更新パッケージを受信することと、
前記車両用制御装置および前記コンピュータが搭載される車両の状態を取得し、前記車両の状態が前記起動条件に合致すると前記手順情報に基づき前記更新を実行することとを含む情報更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報更新装置、および情報更新方法に関する。
【背景技術】
【０００２】
近年、運転支援機能や自動運転技術の進展により、自動車用の電子制御装置（ＥＣＵ：Ｅｌｅｃｔｒｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）に搭載されるソフトウェアの規模が拡大している。またソフトウェアの規模拡大に伴ってソフトウェアの不具合に起因するリコールの回数だけでなく、１回あたりに対応が必要な台数も増加している。そのため、ＥＣＵに搭載されるソフトウェアを遠隔で更新する技術へのニーズが高まっている。遠隔でソフトウェアを更新する場合は、更新処理の自動化が求められる。
特許文献１には、サーバおよび複数の制御装置と接続しデータの送受信を行うソフト更新装置であって、前記複数の制御装置毎に、更新データと、前記更新データを制御装置に適用するための適用方法を識別するための識別情報と、を含む更新制御情報を前記サーバから受信する第１の通信部と、前記複数の制御装置毎に、適用される前記更新データを送信する第２の通信部と、前記識別情報に基づいて前記更新データを適用するように、前記第２の通信部を介して、前記複数の制御装置を制御する更新制御部と、を備えることを特徴とするソフト更新装置が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−１７０７４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載されている発明では、更新処理の柔軟性が不十分である。
【課題を解決するための手段】
【０００５】
本発明の第１の態様による情報更新装置は、車両用制御装置に格納される第１情報を第２情報に更新する情報更新装置であって、前記第１情報と前記第２情報との差分または前記第２情報である更新本体、前記更新本体を用いて前記第１情報を前記第２情報に更新する手順が含まれる手順情報、および前記第１情報の前記第２情報への更新を開始する条件である起動条件を含む更新パッケージを受信するダウンロード制御部と、前記車両用制御装置および情報更新装置が搭載される車両の状態を取得し、前記車両の状態が前記起動条件に合致すると更新実行部に前記手順情報に基づく前記更新を実行させるイベント管理部とを備える。
本発明の第２の態様による情報更新方法は、コンピュータが、車両用制御装置に格納される第１情報を第２情報に更新する情報更新方法であって、前記第１情報と前記第２情報との差分または前記第２情報である更新本体、前記更新本体を用いて前記第１情報を前記第２情報に更新する手順が含まれる手順情報、および前記第１情報の前記第２情報への更新を開始する条件である起動条件を含む更新パッケージを受信することと、前記車両用制御装置および前記コンピュータが搭載される車両の状態を取得し、前記車両の状態が前記起動条件に合致すると前記手順情報に基づき前記更新を実行することとを含む。  
【発明の効果】
【０００６】
本発明によれば、柔軟な更新処理が可能である。
【図面の簡単な説明】
【０００７】
【図１】第１の実施の形態にかかるソフトウェア更新システムＳの構成を示す図
【図２】ゲートウェイ１０のハードウェア構成を示すブロック図
【図３】ゲートウェイプログラム１００の構成を示すブロック図
【図４】更新制御部１０００１の構成を示すブロック図
【図５】更新状態Ｄ１の一例を示す図
【図６】第１の実施の形態における更新パッケージ５の構成を示す図
【図７】スクリプト起動制御情報５０２の構成例
【図８】ゲートウェイプログラム１００の各構成要素の動作を示すシーケンス図
【図９】更新パッケージ５の具体例
【図１０】全制御情報５０２Ｚの具体例
【図１１】対象ＥＣＵ一覧５０４の具体例
【図１２】スクリプト対応表５０５の具体例
【図１３】動作例において車両１に備えられる装置の動作概要を示すシーケンス図
【図１４】自動運転ＥＣＵ更新スクリプト５１１１の具体例を示す図
【図１５】自動運転ＥＣＵ更新スクリプト５１１１の実行に伴うゲートウェイプログラム１００の動作を表すシーケンス図
【図１６】確認用スクリプト５１１３の具体例を示す図
【図１７】確認用スクリプト５１１３の実行に伴うゲートウェイプログラム１００の動作を表すシーケンス図
【図１８】第２の実施の形態における更新制御部１０００１Ａの構成を示すブロック図
【図１９】スクリプト起動制御情報５０２Ａの構成を示す図
【図２０】スクリプト起動処理を示すシーケンス図
【図２１】第２の実施の形態における更新パッケージ５の具体例
【図２２】第２の実施の形態における全制御情報５０２Ｚの具体例
【図２３】第２の実施の形態におけるソフトウェア更新処理の流れを示すシーケンス図
【図２４】第２の実施の形態における確認用スクリプト５１１３Ａの具体例
【図２５】確認用スクリプト５１１３Ａの実行に伴うゲートウェイプログラム１００の動作を表すシーケンス図
【図２６】第２の実施の形態における診断通信サービス呼び出し処理の流れを示すシーケンス図
【発明を実施するための形態】
【０００８】
―第１の実施の形態―
以下、図１〜図１７を参照して、第１の実施の形態に係るソフトウェア更新システムを説明する。なお本実施の形態ではソフトウェアの更新について説明するが、更新対象はソフトウェアに限定されずパラメータやデータなどに適用可能である。なお本実施の形態では、更新後のソフトウェアを「新プログラム」とも呼び、更新前のソフトウェアを「旧プログラム」とも呼ぶ。
【０００９】
（システム構成）
図１は、第１の実施の形態にかかるソフトウェア更新システムＳの構成を示す図である。ソフトウェア更新システムＳは車両１、およびサーバ２を備える。車両１とサーバ２は、アクセスネットワークや拠点を接続するインターネット３、および通信サービスプロバイダが提供するアクセスネットワーク４を介して接続される。
【００１０】
車両１は、ゲートウェイ１０、通信モジュール１１、Ｈｕｍａｎ  Ｍａｃｈｉｎｅ  Ｉｎｔｅｒｆａｃｅ（ＨＭＩ）１２、エンジン制御ＥＣＵ１３、ブレーキ制御ＥＣＵ１４、自動運転ＥＣＵ１５、先進運転支援システム（ＡＤＡＳ）  ＥＣＵ１６、エアバッグＥＣＵ１７、Ｈｅａｔｉｎｇ  Ｖｅｎｔｉｌａｔｉｏｎ  Ａｉｒ  Ｃｏｎｄｉｔｉｏｎｉｎｇ（ＨＶＡＣ）  ＥＣＵ１８、および車両管理ＥＣＵ１９等の車両１が走行等の機能を実現するために必要とするＥＣＵ群と、これらＥＣＵ群をつなぐ車内ネットワーク１０ａ、１０ｂとを備える。本実施の形態では、エンジン制御ＥＣＵ１３および自動運転ＥＣＵ１５の制御プログラムを更新する例を説明する。
【００１１】
車内ネットワークはＣｏｎｔｒｏｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＣＡＮ）（登録商標）、Ｌｏｃａｌ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｎｅｔｗｏｒｋ（ＬＩＮ）、ＦｌｅｘＲａｙ、Ｅｔｈｅｒｎｅｔ（登録商標）などで構成される。本実施の形態では、車内ネットワーク１０ｂはＣＡＮで、車内ネットワーク１０ａはＥｔｈｅｒｎｅｔで構成される。また、図１では図示しないが、各種ＥＣＵなどの車両内の各構成要素は電力線で蓄電池に接続され、電力供給を受けている。ただしここで示す車内ネットワークの構成は一例であり、ネットワークの種類や数はこれに限定されない。
【００１２】
ゲートウェイ１０は、各種ＥＣＵ間通信データの中継を行うとともに、ソフトウェア更新装置として、自機器および車内ネットワークを介して接続されたＥＣＵに搭載されるソフトウェアの更新を行う。すなわち本実施の形態ではこのゲートウェイ１０の動作を詳しく説明する。ゲートウェイ１０は起動のたびに、すなわち車両１のイグニッションがオンになるたびにサーバ２にソフトウェア更新に必要な更新パッケージ５を要求する。サーバ２は更新すべき情報がある場合はゲートウェイ１０に更新パッケージ５を送信する。更新パッケージ５の構成は後述する。
【００１３】
通信モジュール１１は、ゲートウェイ１０やＨＭＩ１２、各種ＥＣＵとサーバ２との通信を中継する。ＨＭＩ１２は、車両１の乗員であるユーザへの情報提示やユーザからの入力を受け付けるための装置であり、画面表示を行う表示装置および各種スイッチ等の入力装置、またはこれらを組み合わせたタッチパネル等により構成される。エンジン制御ＥＣＵ１３は、エンジンの制御を行う。ブレーキ制御ＥＣＵ１４は、ブレーキの制御を行う。自動運転ＥＣＵ１５は、自動運転時に環境の認識や車両１の起動指示等を行う。ＡＤＡＳ  ＥＣＵ１６は、自動ブレーキなどの運転支援制御を行う。エアバッグＥＣＵ１７は、エアバッグの制御を行う。ＨＶＡＣ  ＥＣＵ１８は、車内の空調制御を行う。車両管理ＥＣＵ１９は、車両状態の管理を行う。
【００１４】
サーバ２は不図示のＣＰＵ，ＲＯＭ，およびＲＡＭを備え、ソフトウェア更新に必要な更新パッケージ５をゲートウェイ１０に送信する。ゲートウェイ１０は、更新パッケージ５に含まれるデータに基づいて各ＥＣＵのソフトウェアを更新する。
【００１５】
（ゲートウェイの構成）
図２は、ゲートウェイ１０のハードウェア構成を示すブロック図である。ゲートウェイ１０は、マイコン１０１、ＦＲＯＭ（ＦｌａｓｈＲＯＭ）１０２、ＣＡＮ用の通信Ｉ／Ｆ１０４、およびＥｔｈｅｒｎｅｔ用の通信Ｉ／Ｆ１０５を備える。マイコン１０１は、ＣＰＵ１０１１、ＳＲＡＭ１０１２、ＦＲＯＭ１０１３、ＣＡＮ通信コントローラ１０１４、およびＥｔｈｅｒｎｅｔ通信コントローラ１０１５を備える。マイコン１０１のＣＰＵ１０１１は、ＦＲＯＭ１０１３に格納されるプログラムを実行し、ゲートウェイ１０内の他の構成要素を制御するとともに、車内ネットワークにより接続された他の機器とデータ送受信指示を行うなどしてゲートウェイ１０を機能させる。
【００１６】
ＦＲＯＭ１０２は、不揮発メモリであり、受信した更新パッケージ５が格納される。通信Ｉ／Ｆ１０４は、ＣＡＮ通信用のインタフェースであり、マイコン１０１の指示に基づき車内ネットワーク１０ｂを介して、車内ネットワーク１０ｂに接続されたＥＣＵとの間でデータの送受信を行う。通信Ｉ／Ｆ１０５は、Ｅｔｈｅｒｎｅｔ通信用のインタフェースであり、マイコン１０１の指示に基づき車内ネットワーク１０ａを介して、車内ネットワーク１０ａに接続された機器との間でデータの送受信を行う。
【００１７】
図３は、ゲートウェイ１０上で動作するゲートウェイプログラム１００の構成を示すブロック図である。ゲートウェイ１０の機能を実現するゲートウェイプログラム１００は、マイコン１０１のＦＲＯＭ１０１３に格納されＣＰＵ１０１１により実行される。図３では、機能的なまとまりをブロックとして表現しており、各ブロックが複数に分割されてもよいし、いくつかのブロックが統合されてもよい。また制御プログラムは、１つのソフトウェアにより実現されてもよいし、２以上のソフトウェアの組合せにより実現されてもよい。
【００１８】
ゲートウェイプログラム１００は、更新制御部１０００１、更新データ管理部１０００２、更新状態管理部１０００３、車両状態管理部１０００６、および通信制御部１０００７を含む。
【００１９】
更新制御部１０００１は、通信制御部１０００７を介して車内ネットワーク１０ａに接続された機器と通信を行い、更新パッケージ５の取得や車両の状態やソフトウェア更新処理の状況の送信を行う。更新制御部１０００１が取得した更新パッケージ５は、ＦＲＯＭ１０２に格納される。更新パッケージ５の構成は後述する。更新制御部１０００１は、通信制御部１０００７を介して車内ネットワーク１０ｂに接続されたＥＣＵと通信を行い、そのＥＣＵを制御してそのＥＣＵに搭載されるソフトウェアを更新する。詳しくは後述するが、ソフトウェアの更新は、更新データ管理部１０００２を介して取得した更新パッケージ５と車両状態管理部１０００６を介して取得した車両システム状態に基づいて実施される。
【００２０】
更新データ管理部１０００２は、ＦＲＯＭ１０２から更新パッケージ５を取得し、更新制御部１０００１に提供する。更新状態管理部１０００３は、更新制御部１０００１から更新状態を取得し、ＦＲＯＭ１０１３に更新状態Ｄ１として格納する。また、格納した更新状態Ｄ１を更新制御部１０００１に提供する。車両状態管理部１０００６は、通信制御部１０００７を介して車内ネットワーク１０ａおよび１０ｂに接続された機器と通信を行い車両システムの状態を取得し、車両状態を更新制御部１０００１に提供する。車両状態とはたとえば、イグニッションのオンやオフ、走行の開始などである。
【００２１】
通信制御部１０００７は、更新制御部１０００１等の指示に従って、ＣＡＮ通信コントローラ１０１４およびＥｔｈｅｒｎｅｔ通信コントローラ１０１５を制御し、車内ネットワーク１０ａおよび１０ｂに接続された機器と通信を行う。車内ネットワーク１０ａに接続された機器と通信する際には、通信制御部１０００７は、ＴＣＰ／ＩＰやＵＤＰ／ＩＰなどのパケットを解析・生成する。また車内ネットワーク１０ａに接続された機器と通信する際には、通信制御部１０００７は、ＣＡＮフレームを解析・生成する。
【００２２】
図４は、ゲートウェイ１０がプログラムを実行することにより実現される機能の１つである更新制御部１０００１の構成を示すブロック図である。更新制御部１０００１は、イベント管理部１０００１１、制御部１０００１２、スクリプト実行部１０００１３、サービス提供部１０００１４、およびダウンロード制御部１０００１５を含む。ただし本実施の形態においてスクリプトとは、ゲートウェイ１０への動作指令であり、スクリプトには条件式、制御文、およびコマンドの実行命令を含む。本実施の形態におけるスクリプトとは、シェルスクリプト、ＰｅｒｌやＰｙｔｈｏｎなどのインタプリタにより解釈されるテキストファイルである。
【００２３】
イベント管理部１０００１１は、車両１の状態変化やダウンロード完了などのイベントを検出し、制御部１０００１２にイベントの発生を伝達する。制御部１０００１２は、イベント管理部１０００１１から伝達されたイベントの発生に従って、スクリプト実行部１０００１３へのスクリプトの実行指示やダウンロード制御部１０００１５へのダウンロード開始指示を行う。スクリプト実行部１０００１３は、制御部１０００１２から指示されたスクリプトを解析して実行する。またスクリプト実行部１０００１３は、制御部１０００１２から中断指令を受けるとスクリプトの実行を中断する。
【００２４】
サービス提供部１０００１４は、スクリプト実行部１０００１３に対して車両状態取得や更新状態の記録・読み出し、診断通信機能などのサービスを提供する。診断通信サービスでは、Ｕｎｉｖｅｒｓａｌ  Ｄｉａｇｎｏｓｔｉｃ  Ｓｅｒｖｉｃｅ（ＵＤＳ）等の診断通信プロトコルに準拠したコマンドの生成・解析を行う。また、通信制御部１０００７を介して生成したコマンドの送信および応答の受信を行う。ダウンロード制御部１０００１５は、通信制御部１０００７を介して車内ネットワーク１０ａに接続された通信モジュール１１と通信を行い、サーバ２から更新パッケージ５を取得する。
【００２５】
このように、イベント管理部１０００１１が車両状態や更新状態の変化をイベントとして検出し、スクリプト起動の判定をすることで、任意のタイミングで必要な処理を実行開始することができる。また、サービス提供部１０００１４を介して更新制御部１０００１の外で管理されている更新状態を取得・記録することで、スクリプトからは直接アクセスしにくい不揮発メモリなどへの書き込み・読み出しが適切に行える。
【００２６】
（更新状態Ｄ１）
図５は、ゲートウェイ１０の更新状態管理部１０００３が管理する更新状態Ｄ１の一例を示す図である。図５には、更新状態Ｄ１をテーブルとして管理し、ＥＣＵ毎の更新状態を記録する場合の例が示されている。更新状態Ｄ１は、ＥＣＵ  ＩＤ  Ｄ１０１、更新開始状態Ｄ１０２、完了ブロックＤ１０３のフィールドを備える。ＥＣＵ  ＩＤ  Ｄ１０１は、ＥＣＵを識別するための情報が格納されるフィールドである。更新状態Ｄ１０２は、当該ＥＣＵの更新処理が開始済みか否かを示す識別情報が格納されるフィールドであり、たとえば「開始未」、「開始済み」または「更新完」が格納される。完了ブロックＤ１０３は、処理が成功したブロックの識別情報、たとえばブロック番号が格納されるフィールドである。
【００２７】
符号Ｄ１１で示す１つ目のレコードは、自動運転ＥＣＵ１５の更新状態を示すレコードである。このレコードのＥＣＵ  ＩＤ  Ｄ１０１のフィールドには「自動運転ＥＣＵ」が格納され、更新開始状態Ｄ１０２のフィールドには更新処理中であることを示す「開始済み」が格納され、完了ブロックＤ１０３のフィールドには最後に処理完了したブロックがブロックｎであることを示す「Ｂｌｏｃｋ  ｎ」が格納されている。
【００２８】
符号Ｄ１２で示す２つ目のレコードは、エンジン制御ＥＣＵ１３の更新状態を示すレコードである。このレコードのＥＣＵ  ＩＤ  Ｄ１０１のフィールドには「エンジン制御ＥＣＵ」が格納され、更新開始状態Ｄ１０２のフィールドには更新処理を開始していないことを示す「開始未」が格納されている。ここでは、エンジン制御ＥＣＵ１３の更新は開始されていないため、完了ブロックＤ１０３のフィールドには値が設定されていない。
【００２９】
ここでは２つのレコードを説明したが、これらのレコードは次の場合に作成される。すなわち、ゲートウェイ１０が受信した更新パッケージ５において、更新対象のＥＣＵとして記載されていた場合に作成される。またこの更新状態Ｄ１は後述するように逐次記録される。このように、更新状態Ｄ１を逐次記録することにより、更新中断後に正常に復帰して起動した際に更新が完了せずに中断していることや、更新が中断された箇所を認識して適切な処理を開始することができる。
【００３０】
（更新パッケージ５）
図６は、ゲートウェイ１０がサーバ２から取得する更新パッケージ５の構成を示す図である。更新パッケージ５は、１または複数の更新用スクリプト５０１と、１または複数のスクリプト起動制御情報５０２と、１または複数のＥＣＵ更新データ５０３と、対象ＥＣＵ一覧５０４と、スクリプト対応表５０５とから構成される。更新パッケージ５に含まれる全ての更新用スクリプト５０１をまとめて、全スクリプト５０１Ｚと呼ぶ。更新パッケージ５に含まれる全てのスクリプト起動制御情報５０２をまとめて、全制御情報５０２Ｚと呼ぶ。更新パッケージ５に含まれる全てのＥＣＵ更新データ５０３をまとめて、全更新データ５０３Ｚと呼ぶ。
【００３１】
更新用スクリプト５０１は、更新パッケージ５の中に１つ以上存在する。更新用スクリプト５０１にはソフトウェアの更新に必要な手続きが記述されている。更新パッケージ５に含まれる更新用スクリプト５０１の数は、更新対象のＥＣＵの数と同等以上である。更新用スクリプト５０１はスクリプト実行部１０００１３で実行可能な形で記述されている。スクリプトとして記述される処理、すなわち更新に必要な手続きはたとえば、更新対象のＥＣＵへ送信する制御指令の種類およびその順番、車両状態の確認、ユーザへの許諾取得、ＥＣＵごとのリカバリ処理、および更新したソフトウェアの有効化処理などである。
【００３２】
スクリプト起動制御情報５０２は、更新パッケージ５の中に１つ以上存在する。スクリプト起動制御情報５０２は更新用スクリプト５０１と同じ数だけ更新パッケージ５に含まれ、それぞれの更新用スクリプト５０１に対応する。スクリプト起動制御情報５０２には、更新用スクリプト５０１の制御、すなわち起動および中断に必要な情報が記述されている。スクリプト起動制御情報５０２の詳細については後述する。
【００３３】
ＥＣＵ更新データ５０３は、更新パッケージの中に１つ以上存在する。ＥＣＵ更新データ５０３にはソフトウェアの更新に必要なデータが格納されている。ＥＣＵ更新データ５０３は具体的には、書き込み先のアドレス情報などを示すメタデータや、ソフトウェアそのもの、圧縮されたソフトウェア、または新旧ソフトウェアの差分データである。ＥＣＵ更新データ５０３は、いわば更新本体であり、更新パッケージ５に含まれる他の情報は更新本体であるＥＣＵ更新データ５０３を使ったソフトウェア更新のサポートのために存在する。更新パッケージ５に含まれるＥＣＵ更新データ５０３の数は、更新対象のＥＣＵの数と同一である。
【００３４】
対象ＥＣＵ一覧５０４は、更新パッケージ５の中に１つ存在する。対象ＥＣＵ一覧５０４には、更新パッケージ５が更新対象とするＥＣＵの一覧を示す情報が格納される。スクリプト対応表５０５は、更新パッケージ５の中に１つ存在する。スクリプト対応表５０５には、更新用スクリプト５０１とＥＣＵ更新データ５０３と更新対象となるＥＣＵとの対応を示す情報が格納される。
【００３５】
このように、更新パッケージ５にスクリプト起動制御情報５０２を含めることで、必要な処理を必要なタイミングで起動するように制御することが可能となる。
【００３６】
図７は、スクリプト起動制御情報５０２の構成例である。スクリプト起動制御情報５０２は、対象スクリプト５０２１、起動条件５０２２、および中断条件５０２３から構成される。起動条件５０２２は、起動イベント５０２２１、順序５０２２２、および更新状態５０２２３から構成される。中断条件５０２３は中断イベント５０２３１から構成される。ただし起動条件５０２２および中断条件５０２３は他の構成要素を含んでもよい。
【００３７】
対象スクリプト５０２１は、そのスクリプト起動制御情報５０２が起動対象とする更新用スクリプト５０１を示す。起動イベント５０２２１は、対象スクリプト５０２１で指定された更新用スクリプト５０１を起動するトリガとするイベントを示す。ここでいうイベントとはイグニッションのオンやオフ、車両１の走行の開始などの車両状態の変化やダウンロードの完了などである。中断イベント５０２３１は、対象スクリプト５０２１で指定された更新用スクリプト５０１の実行を中断するトリガとするイベントを示す。順序５０２２２は、１つのイベントに対して複数のスクリプトを起動する場合の起動順序を示す。更新状態５０２２３は、当該イベント発生時にスクリプト起動可否を判断するための更新状態を示す。
【００３８】
このように、スクリプト起動制御情報５０２に車両状態および更新状態の変化に対応する起動イベント５０２２１を含めることで、必要な処理を必要なタイミングで起動するように定義することが可能となる。また、スクリプト起動制御情報５０２に中断イベント５０２３１を含めることで、車両状態等の変化に応じて必要なタイミングで実行したスクリプトを中断するように定義することが可能となる。また、スクリプト起動制御情報５０２に起動条件５０２２に順序５０２２２を含むことで、ひとつのイベントで複数のスクリプトを起動したい場合に、適切な制御を行うことができる。また、起動条件５０２２に更新状態５０２２３を含むことで、更新の進捗に応じて適切なスクリプトを起動することができる。
【００３９】
（シーケンス図）
図８は、ソフトウェアの更新におけるゲートウェイプログラム１００の各構成要素の動作を示すシーケンス図である。更新用スクリプト５０１の動作を表すシーケンス図は後に改めて説明する。
【００４０】
イベント管理部１０００１１は、車両１の状態を監視するために、車両状態管理部１０００６および更新状態管理部１０００３からそれぞれ車両状態、更新状態を取得する（Ｓ１０１、Ｓ１０２）。イベント管理部１０００１１は、状態取得の結果、状態変化を検出した場合（Ｓ１０３のＹＥＳ）、更新データ管理部１０００２を介して更新パッケージ５に含まれるスクリプト起動制御情報５０２を読み出す（Ｓ１０４）。状態変化とはたとえば、イグニッションがＯＦＦからＯＮになる、イグニッションがＯＮからＯＦＦになる、更新パッケージ５のダウンロードが完了する、などである。
【００４１】
次にイベント管理部１０００１１は、読み出したスクリプト起動制御情報５０２の中に、検出したイベントに対応して起動すべきスクリプトがあるか否かを検索する（Ｓ１０５）。起動すべき更新用スクリプト５０１がある場合（Ｓ１０５のＹＥＳ）は、イベント管理部１０００１１は起動条件５０２２の順序５０２２２および更新状態５０２２３を確認する。そしてイベント管理部１０００１１は、指定された順序で、更新状態に合致する更新用スクリプト５０１を実行するように制御部１０００１２を介してスクリプト実行部１０００１３に起動要求を行う（Ｓ１０６）。スクリプト実行部１０００１３は、指定された更新用スクリプト５０１を実行し（Ｓ１０７）、制御部１０００１２を介してイベント管理部１０００１１に応答を返す（Ｓ１０８）。
【００４２】
イベント管理部１０００１１は、実行結果および取得したスクリプト起動制御情報に基づいて次に起動すべき更新用スクリプト５０１が存在するか否かを確認（Ｓ１０９）し、起動するスクリプトがある場合は次の更新用スクリプト５０１を起動する（Ｓ１０９のＹＥＳ）。また、次の起動対象がない場合（Ｓ１０９のＮＯ）は、処理を終える。イベント管理部１０００１１は、スクリプト実行部１０００１３が更新用スクリプト５０１を実行している際にも車両状態および更新状態を監視し、起動制御情報に含まれる中断イベントの発生を検出する（Ｓ１１０）。中断イベント５０２３１の発生を検出すると、制御部１０００１２を介してスクリプト実行部１０００１３に中断指令を出力する（Ｓ１１１）。
【００４３】
このように、イベント管理部１０００１１で車両状態や更新状態の変化イベントを検出し、更新用スクリプト５０１を起動することで、任意のタイミングで必要な処理を実行開始することができる。また、イベント管理部１０００１１が車両状態や更新状態の変化イベントを検出し、更新用スクリプト５０１の実行を中断する旨の判定をすることで、任意のタイミングで必要な処理を中断することができる。また、更新用スクリプト５０１とともにサーバ２から取得するスクリプト起動制御情報５０２に起動イベント５０２２１や中断イベント５０２３１を含むことで、更新内容ごとに更新を開始する契機となるイベントを変更することができる。
【００４４】
また、起動条件５０２２に順序５０２２２を含み、それに基づいて更新用スクリプト５０１を起動することで、ひとつのイベントを契機として複数の更新用スクリプト５０１を適切な順番で起動することができる。ここでは、状態を継続的に読み出す例を示したが、あらかじめイベント管理部１０００１１が車両状態管理部１０００６および更新状態管理部１０００３に通知対象の状態変化を登録してもよい。この場合は車両状態管理部１０００６および更新状態管理部１０００３は、登録された情報に基づいてイベント管理部１０００１１にイベントの発生を通知する。
【００４５】
（動作例）
以下、図９〜図１７を用いて、自動運転ＥＣＵ１５とエンジン制御ＥＣＵ１３を更新する場合の動作例を説明する。ここでは、自動運転ＥＣＵ１５は２面ＲＯＭで構成され、車両１が走行している状態でも書き込みが可能である。一方、エンジン制御ＥＣＵ１３は、エンジン制御中すなわち車両１の走行中は書き込みができず、イグニッションオフ後のみ書き込みが可能である。
【００４６】
自動運転ＥＣＵ１５はゲートウェイ１０が更新パッケージ５を受信すると、ゲートウェイ１０の動作指令に基づき、即座に新たなソフトウェアの書き込みを行い、ゲートウェイ１０から有効化命令を受信すると新たなソフトウェアを有効にする。エンジン制御ＥＣＵ１３は、ゲートウェイ１０が更新パッケージ５を受信してもすぐには更新を実行しない。車両１のイグニッションがオフにされると、ゲートウェイ１０がエンジン制御ＥＣＵ１３にソフトウェアの更新を開始させる。
【００４７】
（動作例｜更新パッケージ５）
図９は、動作例における更新パッケージ５の具体例である。更新パッケージ５は前述のとおり１または複数の更新用スクリプト５０１と、１または複数のスクリプト起動制御情報５０２と、１または複数のＥＣＵ更新データ５０３と、対象ＥＣＵ一覧５０４と、スクリプト対応表５０５とから構成される。図９に示す例では、自動運転ＥＣＵ更新スクリプト５１１１、エンジン制御ＥＣＵ更新スクリプト５１１２、確認用スクリプト５１１３、および新プログラム有効化用スクリプト５１１４のそれぞれが更新用スクリプト５０１である。また自動運転ＥＣＵ更新スクリプト起動制御情報５１２１、エンジン制御ＥＣＵ更新スクリプト起動制御情報５１２２、確認用スクリプト起動制御情報５１２３、および新プログラム有効化用スクリプト起動制御情報５１２４のそれぞれがスクリプト起動制御情報５０２である。また自動運転ＥＣＵ更新データ５１３１およびエンジン制御ＥＣＵ更新データ５１３２のそれぞれがＥＣＵ更新データ５０３である。
【００４８】
自動運転ＥＣＵ更新スクリプト５１１１は、自動運転ＥＣＵ更新データ５１３１を用いて自動運転ＥＣＵ１５に新プログラムを書き込むための手順が記述されたスクリプトである。具体的には、ゲートウェイ１０から自動運転ＥＣＵ１５に診断通信を用いて新プログラムを転送し、自動運転ＥＣＵ１５に新プログラムを書き込む手順が記述されている。エンジン制御ＥＣＵ更新スクリプト５１１２は、エンジン制御ＥＣＵ更新データ５１３２を用いてエンジン制御ＥＣＵ１３に新プログラムを書き込むための手順が記述されたスクリプトである。具体的には、ゲートウェイ１０からエンジン制御ＥＣＵ１３に診断通信を用いて新プログラムを転送し、エンジン制御ＥＣＵ１３に新プログラムを書き込む手順が記述されている。
【００４９】
確認用スクリプト５１１３は、エンジン制御ＥＣＵ１３への書き込みや、新プログラムの有効化の実行が可能な状態か否かを確認するための手順が記述されたスクリプトである。具体的には、車両１が停車中か、すなわち車速がゼロか否か、および新プログラムの有効化をユーザは許諾しているか否かを確認する手順が記述されている。新プログラム有効化用スクリプト５１１４は、自動運転ＥＣＵ１５およびエンジン制御ＥＣＵ１３に新プログラムを書き込んだ後に、次回起動時に新プログラムを動作させるために必要な手順が記述されたスクリプトである。具体的には、自動運転ＥＣＵ１５およびエンジン制御ＥＣＵ１３に新プログラム有効化命令を発行するステップが記述されている。
【００５０】
自動運転ＥＣＵ更新データ５１３１は、自動運転ＥＣＵ１５のソフトウェアの更新に必要となるデータであり、書き込み先アドレス等が記述されたメタデータと、自動運転ＥＣＵ１５に書き込まれたプログラムと、新しいプログラムから生成された差分データから構成される。エンジン制御ＥＣＵ更新データ５１３２は、エンジン制御ＥＣＵ１３のソフトウェアの更新に必要となるデータであり、書き込み先アドレス等が記述されたメタデータと、エンジン制御ＥＣＵ１３に書き込まれたプログラムと、新しいプログラムから生成された差分データから構成される。
【００５１】
スクリプト起動制御情報５０２を構成する自動運転ＥＣＵ更新スクリプト起動制御情報５１２１、エンジン制御ＥＣＵ更新スクリプト起動制御情報５１２２、確認用スクリプト起動制御情報５１２３、および新プログラム有効化用スクリプト起動制御情報５１２４は、それぞれ自動運転ＥＣＵ更新スクリプト５１１１、エンジン制御ＥＣＵ更新スクリプト５１１２、確認用スクリプト５１１３、および新プログラム有効化用スクリプト５１１４の起動および中断に必要な情報が記述されている。図を参照して詳しく説明する。
【００５２】
（動作例｜スクリプト起動制御情報５０２）
図１０は、更新対象が自動運転ＥＣＵ１５とエンジン制御ＥＣＵ１３である場合の全制御情報５０２Ｚ、すなわち更新パッケージ５に含まれる全てのスクリプト起動制御情報５０２の一例を示す図である。ここでは一覧性の確保のために、全制御情報５０２Ｚを１つのテーブルとして表現している。すなわち図１０には複数のレコードが記載されているが、これらは上から順に自動運転ＥＣＵ更新スクリプト起動制御情報５１２１、エンジン制御ＥＣＵ更新スクリプト起動制御情報５１２２、確認用スクリプト起動制御情報５１２３、および新プログラム有効化用スクリプト起動制御情報５１２４に対応する。
【００５３】
図１０に示すそれぞれのスクリプト起動制御情報５０２の構成は、図７に示した構成と同様である。すなわちそれぞれのスクリプト起動制御情報５０２は、対象スクリプト５０２１、起動条件５０２２、および中断条件５０２３から構成される。起動条件５０２２は、起動イベント５０２２１、順序５０２２２、および更新状態５０２２３から構成される。そして中断条件５０２３は中断イベント５０２３１から構成される。ただし自動運転ＥＣＵ更新スクリプト起動制御情報５１２１のみ２つの条件が設定されているので図１０において２行にわたって記載されている。
【００５４】
図１０の最初のレコード、すなわち自動運転ＥＣＵ更新スクリプト起動制御情報５１２１に格納される１つめの情報は以下のとおりである。対象スクリプト５０２１のフィールドには「自動運転ＥＣＵ更新用スクリプト」が格納される。起動イベント５０２２１のフィールドには更新パッケージのダウンロード完了を示す「ＤＬ完」が格納される。順序５０２２２のフィールドには当該イベント発生時に１番目に起動することを示す「１」が格納される。更新状態５０２２３のフィールドには更新状態を問わずに起動することを示す「−」が格納される。中断イベント５０２３１のフィールドにはイグニッション信号がＯＦＦされたタイミングを示す「ＩＧＮ−ＯＦＦ」が格納される。
【００５５】
図１０の２番目のレコード、すなわち自動運転ＥＣＵ更新スクリプト起動制御情報５１２１に格納される２つめの情報は、以下のとおりである。対象スクリプト５０２１のフィールドには「自動運転ＥＣＵ更新用スクリプト」が格納される。起動イベント５０２２１のフィールドにはイグニッションがＯＮになったタイミングを示す「ＩＧＮ−ＯＮ」が格納される。順序５０２２２のフィールドには当該イベント発生時に１番目に起動することを示す「１」が格納される。更新状態５０２２３のフィールドには自動運転ＥＣＵ更新用スクリプトによる自動運転ＥＣＵ１６へのデータ転送が未完了であることを示す「自動運転ＥＣＵ更新未完」が格納される。中断イベント５０２３１のフィールドには「ＩＧＮ−ＯＦＦ」が格納される。
【００５６】
図１０の３番目のレコード、すなわちエンジン制御ＥＣＵ更新スクリプト起動制御情報５１２２に格納される情報は、以下のとおりである。対象スクリプト５０２１のフィールドには「エンジン制御ＥＣＵ更新用スクリプト」が格納される。起動イベント５０２２１のフィールドには「ＩＧＮ−ＯＦＦ」が格納される。順序５０２２２のフィールドには当該イベント発生時に２番目に起動することを示す「２」が格納される。更新状態５０２２３のフィールドには更新状態を問わずに起動することを示す「−」が格納される。中断イベント５０２３１のフィールドには「ＩＧＮ−ＯＮ」が格納される。
【００５７】
図１０の４番目のレコード、すなわち確認用スクリプト起動制御情報５１２３に格納される情報は、以下のとおりである。対象スクリプト５０２１のフィールドには「確認用スクリプト」が格納される。起動イベント５０２２１のフィールドには「ＩＧＮ−ＯＦＦ」が格納される。順序５０２２２のフィールドには当該イベント発生時に１番目に起動することを示す「１」が格納される。更新状態５０２２３のフィールドには自動運転ＥＣＵの更新が完了している場合のみ当該スクリプトを起動することを示す「自動運転ＥＣＵ更新完」が格納される。ここでいう更新とは、自動運転ＥＣＵ更新スクリプトによる自動運転ＥＣＵ１５への新プログラムの書き込みが完了した状態をいう。中断イベント５０２３１のフィールドには「ＩＧＮ−ＯＮ」が格納される。
【００５８】
図１０の５番目のレコード、すなわち新プログラム有効化用スクリプト起動制御情報５１２４に格納される情報は、以下のとおりである。対象スクリプト５０２１のフィールドには「新プログラム有効化用スクリプト」が格納される。起動イベント５０２２１のフィールドにはイグニッション信号がＯＦＦされたタイミングを示す「ＩＧＮ−ＯＦＦ」が格納される。順序５０２２２のフィールドには当該イベント発生時に３番目に起動することを示す「３」が格納される。更新状態５０２２３のフィールドには更新状態を問わずに起動することを示す「−」が格納される。中断イベント５０２３１のフィールドには「ＩＧＮ−ＯＮ」が格納される。
【００５９】
（動作例｜対象ＥＣＵ一覧５０４）
図１１は、動作例における対象ＥＣＵ一覧５０４の具体例である。図１１に示す例では、本動作例が自動運転ＥＣＵ１５およびエンジン制御ＥＣＵ１３を更新対象としているので、更新対象ＥＣＵとして自動運転ＥＣＵ１５およびエンジン制御ＥＣＵ１３が列挙されている。
【００６０】
（動作例｜スクリプト対応表５０５）
図１２は、動作例におけるスクリプト対応表５０５の具体例である。図１２に示す例では、自動運転ＥＣＵ更新スクリプト５１１１と自動運転ＥＣＵ更新データ５１３１と自動運転ＥＣＵ１５とが対応すること、およびエンジンＥＣＵ更新スクリプト５１１２とエンジン制御ＥＣＵ更新データ５１３２とエンジン制御ＥＣＵ１３とが対応することが示されている。
【００６１】
（動作例｜シーケンス図）
図１３は、自動運転ＥＣＵ１５とエンジン制御ＥＣＵ１３を更新する場合の車両１に備えられる装置の動作概要を示すシーケンス図である。すなわち先に示した図８では、ゲートウェイ１０に含まれるゲートウェイプログラム１００の各構成要素の動作を示したが、これから説明する図１３では図８よりもマクロな視点で説明する。また図１３に示す動作は図１０に示す全制御情報５０２Ｚに対応している。
【００６２】
ゲートウェイ１０は、イグニッションがＯＮにされると（Ｓ３０１）、通信モジュール１１を介してサーバ２に更新パッケージ５の取得要求を行う（Ｓ３０２）。次に、要求に基づきサーバ２から送信された更新パッケージ５を取得してゲートウェイ１０のＦＲＯＭ１０２に保持するとともに（Ｓ３０３）、更新状態Ｄ１をダウンロード完了にする。
【００６３】
イベント管理部１０００１１は、更新パッケージ５のダウンロードが完了したことを検出すると、更新データ管理部１０００２を介して更新パッケージ内のスクリプト起動制御情報５０２を読み出し、起動イベント５０２２１が「ＤＬ完」となっている自動運転ＥＣＵ更新スクリプト５１１１を起動する。この起動は、制御部１０００１２を介してスクリプト実行部１０００１３に指示することで実行される。スクリプト実行部１０００１３は自動運転ＥＣＵ更新スクリプト５１１１を実行して自動運転ＥＣＵ１５の更新を行う（Ｓ３０４）。Ｓ３０４の詳細は後に説明する。自動運転ＥＣＵ１５の更新が完了し、更新状態Ｄ１の自動運転ＥＣＵ１５の更新状態Ｄ１０２が「完了」に書き換えられる。
【００６４】
次にイベント管理部１０００１１は、イグニッションがＯＦＦになったことを検出（Ｓ３０５）すると、スクリプト起動制御情報５０２を読み出す。そしてイベント管理部１０００１１は、起動イベント５０２２１が「ＩＧＮ−ＯＦＦ」であるスクリプトが３つ存在することを把握し、その中で順序５０２２２が「１」である確認用スクリプト起動制御情報５１２３に注目する。この確認用スクリプト起動制御情報５１２３では更新状態Ｄ１が「自動運転ＥＣＵ更新完」であるため、更新状態管理部１０００３を介して自動運転ＥＣＵ１５の更新状態Ｄ１が「完了」であることを確認する。ここでは自動運転ＥＣＵ１５の更新状態Ｄ１が「完了」なので、イベント管理部１０００１１は確認用スクリプト５１１３の起動を、制御部１０００１２を介してスクリプト実行部１０００１３に指示する。スクリプト実行部１０００１３は確認用スクリプトを実行して更新状態Ｄ１とユーザ許諾の確認を行う（Ｓ３０６）。Ｓ３０６の詳細は後述する。
【００６５】
確認用スクリプト５１１３の実行が完了すると、イベント管理部１０００１１は、起動イベントが「ＩＧＮ−ＯＦＦ」、順序が「２」であるエンジンＥＣＵ更新スクリプト５１１２の起動を制御部１０００１２を介してスクリプト実行部１０００１３に指示する。スクリプト実行部１０００１３は当該スクリプトを実行してエンジン制御ＥＣＵ１３の更新を行う（Ｓ３０７）。
【００６６】
エンジン制御ＥＣＵ更新スクリプト５１１２の実行が完了すると、イベント管理部１０００１１は、起動イベントが「ＩＧＮ−ＯＦＦ」、順序が「３」である新プログラム有効化用スクリプト５１１４を起動する。この起動は制御部１０００１２を介してスクリプト実行部１０００１３に指示することにより行われる。スクリプト実行部１０００１３は当該スクリプトを実行して自動運転ＥＣＵ１５とエンジン制御ＥＣＵ１３の新プログラムの有効化を行う（Ｓ３０８）。
【００６７】
（動作例｜スクリプトと動作の対応）
図１４〜図１７を参照してスクリプトの具体例と動作の対応を説明する。図１４は、自動運転ＥＣＵ更新スクリプト５１１１の具体例を示す図である。図１５は、自動運転ＥＣＵ更新スクリプト５１１１の実行に伴うゲートウェイプログラム１００の動作を表すシーケンス図である。すなわち図１５は図１３のＳ３０４の詳細を示す。図１６は、確認用スクリプト５１１３の具体例を示す図である。図１７は、確認用スクリプト５１１３の実行に伴うゲートウェイプログラム１００の動作を表すシーケンス図である。すなわち図１７は図１３のＳ３０６の詳細を示す。なお図１４および図１６の左端に記載の数字の連番はスクリプトの行番号であり、説明のために記載している。
【００６８】
図１４を参照して自動運転ＥＣＵ更新スクリプト５１１１の記載を説明する。図１４の１行目にはバージョン情報を要求することが記載されており、２行目にはバージョンが「１．００」でない場合には２３行目以下のエラー処理に進むことが記載されている。なお５行目や１２行目などにも例外処理による終了が記載されているが説明を省略する。４行目にはセッションを「走行中書込モード」に変更するセッション変更要求を送信することが記載され、７行目には更新状態Ｄ１を「ＳＴＡＲＴ  ＯＴＡ」に変更する要求を送信することが記載されている。９行目には変数に初期値「１」を設定することが記載されている。
【００６９】
１０〜１５行目には、全てのブロックを対象に順番に新プログラムを自動運転ＥＣＵ１５に送信することが記載されている。１７行目にはセッションを「通常モード」に変更するセッション変更要求を送信することが記載され、１９行目には更新状態Ｄ１を「Ｃｏｍｐｌｅｔｅ  Ｔｒａｎｓｆｅｒ」に変更する要求を送信することが記載されている。２１行目には正常終了を示す返り値を自動運転ＥＣＵ更新スクリプト５１１１の実行を指示した制御部１０００１２に返すことが記載されており、２３行目以下はエラーによる終了をスクリプトの呼び出し元に返すことが記載されている。
【００７０】
スクリプト実行部１０００１３が自動運転ＥＣＵ更新スクリプト５１１１を実行する場合のゲートウェイプログラム１００の動作を図１５を参照して説明する。ここでは、自動運転ＥＣＵ１５を更新する例を示すが、本動作は基本的に他のＥＣＵでも同様である。また、ここでの更新は自動運転ＥＣＵ１５へのデータ転送と書き込みであり、新プログラムの有効化は含まない。
【００７１】
ゲートウェイ１０の制御部１０００１２は、スクリプト実行部１０００１３に自動運転ＥＣＵ更新用スクリプト５１１１の起動を要求する（Ｓ３０４０１）。スクリプト実行部１０００１３は自動運転ＥＣＵ更新スクリプト５１１１に記述された手順に従って以下の処理を実施する。
【００７２】
スクリプト実行部１０００１３は、サービス提供部１０００１４の診断通信サービスを呼び出し、通信制御部１０００７を介して自動運転ＥＣＵ１５にバージョン取得要求を送信する（Ｓ３０４０２）。この要求に基づきサービス提供部１０００１４（Ｓ３０４０３）および通信制御部１０００７（Ｓ３０４０４）が動作する。Ｓ３０４０２はスクリプト実行部１０００１３が図１４の１行目の記載を解釈して実行したものである。自動運転ＥＣＵ１５は、要求に応じてバージョン情報をゲートウェイ１０に送信する（Ｓ３０４０５）。ゲートウェイ１０のサービス提供部１０００１４は通信制御部１０００７を介してバージョンを取得し（Ｓ３０４０６）、スクリプト実行部１０００１３に応答する（Ｓ３０４０７）。
【００７３】
次にスクリプト実行部１０００１３は、図１４の２行目の記載を解釈して、受信したバージョン情報をスクリプトに記載のバージョン情報と比較（Ｓ３０４０８）し、一致しない場合は処理を終了する（Ｓ３０４０８のＮＯ）。なお比較対象とするバージョン情報をスクリプト内に書き込む代わりに、更新データ５内にメタデータとして保持してもよい。バージョン情報が想定と一致する場合は（Ｓ３０４０８のＹＥＳ）、スクリプト実行部１０００１３は、図１４の４行目の記載を解釈して実行する。すなわちスクリプト実行部１０００１３は、サービス提供部１０００１４の診断通信サービスを呼び出し（Ｓ３０４０９）、通信制御部１０００７を介して（Ｓ３０４１０）、自動運転ＥＣＵ１５にセッション変更要求を送信する（Ｓ３０４１１）。
【００７４】
このセッション変更要求は、ソフトウェア書換えを行うための走行中書込モードの識別情報を含む。自動運転ＥＣＵ１５は、要求を受諾可能な場合はセッション変更要求にて指定されたモードに内部状態を遷移させたのち、ゲートウェイ１０に受諾応答を送信する（Ｓ３０４１２）。ゲートウェイ１０のサービス提供部１０００１４は通信制御部１０００７を介して応答を取得し（Ｓ３０４１３）、スクリプト実行部１０００１３に応答する（Ｓ３０４１４）。スクリプト実行部１０００１３は応答が受諾応答であれば、図１４の７行目の記載を解釈して、更新処理開始済であることを記録するため、サービス提供部１０００１４の更新状態保存サービスを呼び出す（Ｓ３０４１５）。サービス提供部１０００１４は、更新状態管理部１０００３に更新状態の保存を要求し（Ｓ３０４１６）、保存結果をスクリプト実行部１０００１３に応答する（Ｓ３０４１７）。
【００７５】
次にスクリプト実行部１０００１３は、図１４の１０行目〜１５行目の記載を解釈して、以下のようにループ制御を伴うブロック転送処理Ｓ３０４６０を行う。すなわち図１５において破線で囲むブロック転送処理Ｓ３０４６０は、図１４におけるループ内の処理、具体的には１１行目から１４行目の処理に相当する。ブロック転送処理Ｓ３０４６０の詳細は以下のとおりである。
【００７６】
スクリプト実行部１０００１３は、自動運転ＥＣＵ更新データ５１３１に含まれる新プログラムまたは圧縮された新プログラムまたは差分データの１ブロック分を送信するために、サービス提供部１０００１４の診断通信サービスを呼び出す（Ｓ３０４２１）。サービス提供部１０００１４は、データ転送の診断通信サービス実行要求を受け取ると最初に、通信制御部１０００７を介して自動運転ＥＣＵ１５に転送開始要求を送信する（Ｓ３０４２２、Ｓ３０４２３）。自動運転ＥＣＵ１５は、要求を受諾可能な場合は、ゲートウェイ１０に受諾応答を送信する（Ｓ３０４２４）。
【００７７】
サービス提供部１０００１４は通信制御部１０００７を介して応答を取得すると（Ｓ３０４２５）、通信制御部１０００７を介して自動運転ＥＣＵ１５に新プログラムまたは圧縮された新プログラムまたは差分データの１ブロックの一部を転送する（Ｓ３０４２６、Ｓ３０４２７）。自動運転ＥＣＵ１５は、データを受信すると、ゲートウェイ１０に受信応答を送信する（Ｓ３０４２８）。サービス提供部１０００１４は、通信制御部１０００７を介して応答を受信する（Ｓ３０４２９）。サービス提供部１０００１４は、直前の転送開始要求で要求したデータサイズ分の送信が終わるまで、データ転送処理（Ｓ３０４６０）を繰り返す。データ転送が完了すると、サービス提供部１０００１４は通信制御部１０００７を介して（Ｓ３０４３０）、自動運転ＥＣＵ１５に転送完了通知を送信する（Ｓ３０４３１）。
【００７８】
自動運転ＥＣＵは、ゲートウェイ１０に受諾応答を送信する（Ｓ３０４３２）。サービス提供部１０００１４は、通信制御部１０００７を介して応答を受信し（Ｓ３０４３３）、転送結果をスクリプト実行部１０００１３に応答する（Ｓ３０４３４）。スクリプト実行部１０００１３は、応答が成功であれば、図１４の１４行目の記載を解釈して、当該ブロックは転送済であることを記録するために、サービス提供部１０００１４の更新状態保存サービスを呼び出す（Ｓ３０４３５）。サービス提供部１０００１４は、更新状態管理部１０００３に更新状態（完了ブロック）の保存を要求し（Ｓ３０４３６）、保存結果をスクリプト実行部１０００１３に応答する（Ｓ３０４３７）。以上がブロック転送処理Ｓ３０４６０の詳細である。スクリプト実行部１０００１３は、更新データに含まれる全ブロックを転送するまで、ブロック転送処理Ｓ３０４６０を繰り返す。
【００７９】
全ブロックの転送が完了すると、スクリプト実行部１０００１３は、図１４の１７行目の記載を解釈して、サービス提供部１０００１４の診断通信サービスを呼び出し（Ｓ３０４３８）、通信制御部１０００７を介して（Ｓ３０４３９）、自動運転ＥＣＵ１５にセッション変更要求を送信する（Ｓ３０４４０）。このセッション変更要求は、通常モードの識別情報を含む。自動運転ＥＣＵ１５は、要求を受諾可能な場合はセッション変更要求にて指定されたモードに内部状態を遷移させたのち、ゲートウェイ１０に受諾応答を送信する（Ｓ３０４４１）。ゲートウェイ１０のサービス提供部１０００１４は通信制御部１０００７を介して応答を取得し（Ｓ３０４４２）、スクリプト実行部１０００１３に応答する（Ｓ３０４４３）。
【００８０】
スクリプト実行部１０００１３は応答が受諾応答であれば、図１４の１９行目の記載を解釈して、更新完了済であることを記録するために、サービス提供部１０００１４の更新状態保存サービスを呼び出す（Ｓ３０４４４）。サービス提供部１０００１４は、更新状態管理部１０００３に更新状態の保存を要求し（Ｓ３０４４５）、保存結果をスクリプト実行部１０００１３に応答する（Ｓ３０４４６）。以上が図１４に示す確認用スクリプト５１１３の実行に伴うゲートウェイプログラム１００の動作の説明である。
【００８１】
このように、サービス提供部１０００１４においてデータ転送ループを管理することでスクリプトに記述する内容を削減し、メモリの削減や処理不可の軽減が図れる。なおここではブロック転送の繰り返しをスクリプトに記述する例を示したが、ブロック転送の繰り返しをサービス提供部１０００１４で実施してもよい。また、ここでは診断通信サービスを同期処理として提供する例を示したが、非同期処理としてもよい。
【００８２】
図１６を参照して確認用スクリプト５１１３の記載を説明する。図１６の１行目には車両１の速度の情報を取得することが記載されており、２行目には車速がゼロでない場合は９行目以下のエラー処理に進むことが記載されている。４行目にはＨＭＩ１２を利用してユーザから更新の同意を取得することが記載されている。５行目にはＨＭＩ１２の故障などで４行目の処理が正常に実行できなかった場合（ＥＲＲＯＲ）やユーザが更新を拒否した場合（ＮＧ）は、９行目以下のエラー処理に進むことが記載されている。７行目には正常終了を示す返り値を確認用スクリプト５１１３の実行を指示した制御部１０００１２に返すことが記載されており、１０行目には異常終了を示す返り値を制御部１０００１２に返すことが記載されている。
【００８３】
スクリプト実行部１０００１３が確認用スクリプト５１１３を実行する場合のゲートウェイプログラム１００の動作を図１７を参照して説明する。スクリプト実行部１０００１３によるスクリプトの実行とは非同期に、車両状態管理部１０００６は、車両内のネットワークを流れる情報を受信し、自身が管理する車両状態を更新する。本例では、車両管理ＥＣＵ１９から送信された車両状態を示すデータを通信制御部１０００７が受信（Ｓ３０６０２）し、車両状態管理部１０００６は当該データを取得（Ｓ３０６０３）し、自身が管理する車両状態を更新する（Ｓ３０６０４）。ここでは、車載ネットワークを流れる情報に基づく状態更新の例を示したが、イグニッション状態などについては、電気信号の監視などによる状態の更新も行われる。
【００８４】
制御部１０００１２は、イベント管理部１０００１１の指示によりスクリプト実行部１０００１３に確認用スクリプト５１１３の起動を要求する（Ｓ３０６０１）。スクリプト実行部１０００１３は、まず確認用スクリプト５１１３の１行目の記載を解釈して、サービス提供部１０００１４の車両状態取得サービスを呼び出す（Ｓ３０６０５）。サービス提供部１０００１４は、車両状態管理部１０００６から車速を取得し（Ｓ３０６０６）、スクリプト実行部１０００１３にこれを渡す（Ｓ３０６０７）。スクリプト実行部１０００１３は、確認用スクリプト５１１３の２行目の記載を解釈して、車速がゼロでない場合（Ｓ３０６０７１のＮＧ）は処理を終了し、車速がゼロの場合（Ｓ３０６０７１のＯＫ）は処理を継続し、次の処理に進む。
【００８５】
スクリプト実行部１０００１３は次に、確認用スクリプト５１１３の４行目の記載を解釈して、ＨＭＩ１２を介してユーザに問い合わせを行うためにサービス提供部の診断通信サービスを呼び出す。この問い合わせは、更新を実行開始してしばらく車両１が使えなくてもよいか、新プログラムを有効にしてよいか、の許諾を得るものである。サービス提供部１０００１４はＨＭＩ１２に送信する許諾取得のためのコマンドを生成（Ｓ３０６０９）し、通信制御部１０００７を介してＨＭＩ１２に当該コマンドを送信する（Ｓ３０６１０、Ｓ３０６１１）。ＨＭＩ１２は、受信したコマンドに基づいて許諾取得画面を表示してユーザ操作による許諾結果を取得（Ｓ３０６１２）し、応答をゲートウェイ１０に送信する（Ｓ３０６１３）。
【００８６】
サービス提供部１０００１４は通信制御部１０００７を介して応答を取得し（Ｓ３０６１４）、内容を解析し（Ｓ３０６１５）、解析の結果をスクリプト実行部１０００１３に渡す（Ｓ３０６１６）。スクリプト実行部１０００１３は受信した解析の結果に基づき、状態確認およびユーザ許諾確認結果を制御部１０００１２に返す（Ｓ３０６１７）。以上が図１７に示す自動運転ＥＣＵ更新スクリプト５１１１の実行に伴うゲートウェイプログラム１００の動作の説明である。
【００８７】
診断通信サービスは、対象となるＥＣＵからの応答までが同期処理となる構成を示したが、非同期化してもよい。非同期化する場合の例は、第２の実施の形態にて説明する。同期処理としてサービスを提供する場合は、イベント管理部１０００１１は応答を待つ期間を利用して車両状態を確認し、車両状態が変化した場合はサービス提供部１０００１４にその変化を伝達する。
【００８８】
上述した第１の実施の形態によれば、次の作用効果が得られる。
（１）情報更新装置であるゲートウェイ１０は、ＥＣＵに格納されるソフトウェアを更新する。新旧ソフトウェアの差分データ、または新ソフトウェアであるＥＣＵ更新データ５０３、ＥＣＵ更新データ５０３を用いてソフトウェアを更新する手順が含まれる更新用スクリプト５０１、およびソフトウェアの更新を開始する条件である起動条件５０２２が含まれるスクリプト起動制御情報５０２を含む更新パッケージ５を受信するダウンロード制御部１０００１５と、更新用スクリプト５０１に基づきソフトウェアの更新を実行するスクリプト実行部１０００１３と、ゲートウェイ１０およびＥＣＵが搭載される車両１の状態を取得し、車両１の状態が起動条件５０２２に合致するとスクリプト実行部１０００１３に更新用スクリプト５０１に基づくソフトウェアの更新を実行させるイベント管理部１０００１１とを備える。
【００８９】
ゲートウェイ１０は更新パッケージ５に含まれる更新用スクリプト５０１を実行することでＥＣＵのソフトウェアを更新するので、事前に更新手順が定められていなくても更新用スクリプト５０１に沿って柔軟にソフトウェアの更新ができる。また更新の開始時期、すなわち更新用スクリプト５０１を実行するタイミングはスクリプト起動制御情報５０２の起動条件５０２２として更新パッケージ５に含まれるので、適切なタイミングで更新を開始することができる。
【００９０】
（２）更新パッケージ５には、ＥＣＵ更新データ５０３、更新用スクリプト５０１、およびスクリプト起動制御情報５０２が複数組含まれる。更新パッケージ５にはさらに、複数の更新用スクリプト５０１と複数のスクリプト起動制御情報５０２との対応関係を示すスクリプト対応表５０５が含まれる。そのためゲートウェイ１０は、１つの更新パッケージ５を受信するだけで複数のＥＣＵのソフトウェアを更新することができる。
【００９１】
（３）起動条件５０２２は、実行を開始する契機となる事象である起動イベント５０２２１および順序５０２２２の組み合わせである。イベント管理部１０００１１は、複数の起動条件５０２２に含まれる起動イベント５０２２１が同一の場合は、順序５０２２２に基づいてスクリプト実行部１０００１３に実行させる更新用スクリプト５０１の順番を決定する。そのためあるイベントをトリガーとして、複数のＥＣＵのソフトウェアを所望の順番で更新することができる。
【００９２】
（４）スクリプト実行部１０００１３は、所定の場合に更新を中断する。
（５）更新パッケージ５にはソフトウェアの更新を中断する条件である中断条件５０２３が含まれる。イベント管理部１０００１１は、車両１の状態が中断条件５０２３に一致するとスクリプト実行部１０００１３に更新中断指令を出力する。スクリプト実行部１０００１３は、イベント管理部１０００１１から更新中断指令を受けた場合に更新を中断する。そのためゲートウェイ１０は、車両１の状態に合わせて更新処理を中断することができる。
【００９３】
（６）起動イベント５０２２１には、車両１におけるイグニッションのオンまたはイグニッションのオフが含まれる。車両１の走行中にはソフトウェアの更新が困難なＥＣＵも存在するので、イグニッションのオフを検出して更新用スクリプト５０１を実行することが有用である。またソフトウェアの更新を複数のステップに分割し、その一部のステップ、特に最終のステップをイグニッションのオンとともに開始し、更新が完了すると車両１の走行を開始する構成も想定されるので、イグニッションのオンを検出して更新用スクリプト５０１を実行することが有用である。また、中断した処理を再開する必要があるため、イグニッションのオンを検出して更新用スクリプト５０１を実行することが有用である。
【００９４】
（７）起動イベント５０２２１には、更新パッケージ５の受信完了が含まれる。即時のソフトウェアの更新のためには、更新パッケージ５の受信完了を検出して更新用スクリプト５０１を実行することが有用である。
【００９５】
（変形例１）
ＥＣＵ更新データ５０３に更新対象となるＥＣＵを特定する情報が含まれてもよい。その場合は、更新パッケージ５に対象ＥＣＵ一覧５０４が含まれなくてもよく、さらにスクリプト対応表５０５において更新対象となるＥＣＵを示す情報が含まれなくてもよい。
【００９６】
（変形例２）
ゲートウェイ１０は、ゲートウェイ１０に内蔵されるソフトウェアを更新してもよい。またゲートウェイ１０が更新パッケージ５を受信して更新する対象はソフトウェアに限定されず、データやパラメータでもよい。さらにゲートウェイ１０は、１つの更新パッケージ５に基づき、ソフトウェアとデータとパラメータとを更新してもよい。
【００９７】
（変形例３）
スクリプト起動制御情報５０２には中断条件５０２３が含まれなくてもよい。更新パッケージ５に含まれるＥＣＵ更新データ５０３が１つのみの場合は、対象ＥＣＵ一覧５０４およびスクリプト対応表５０５が更新パッケージ５に含まれなくてもよい。対応関係が明らかだからである。
【００９８】
（変形例４）
更新パッケージ５には、更新用スクリプト５０１の代わりに更新用プログラムが格納されてもよい。この場合は、スクリプト実行部１０００１３はインタプリタの機能を有さなくてもよく、更新パッケージ５に含まれる実行可能ファイルである更新用プログラムを実行することでソフトウェアを更新する。
【００９９】
（変形例５）
図３および図４に示したゲートウェイプログラム１００の構成は一例であり、説明した機能を有していれば異なる構成でもよい。たとえば更新制御部１０００１と通信制御部１０００７とが一体に構成されてもよいし、制御部１０００１２がスクリプト実行部１０００１３およびサービス提供部１０００１４の機能の一部を有してもよい。
【０１００】
―第２の実施の形態―
以下、図１８〜図２６を参照して、第２の実施の形態に係るソフトウェア更新システムを説明する。以下の説明では、第１の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第１の実施の形態と同じである。本実施の形態では、主に、更新制御部が複数のスクリプト実行部を備える点で、第１の実施の形態と異なる。
【０１０１】
（更新制御部の構成）
図１８は、更新制御部１０００１Ａの構成図である。第２の実施の形態におけるゲートウェイ１０は、第１の実施の形態における更新制御部１０００１の代わりに更新制御部１０００１Ａを備える。更新制御部１０００１Ａは、イベント管理部１０００１１、制御部１０００１２、第１スクリプト実行部１０００１３１、第２スクリプト実行部１０００１３２、ダウンロード制御部１０００１５、およびサービス提供部１０００１６を備える。イベント管理部１０００１１、制御部１０００１２、およびダウンロード制御部１０００１５は、第１の実施例と同様なので説明を省略する。第１スクリプト実行部１０００１３１および第２スクリプト実行部１０００１３２は、それぞれが第１の実施の形態におけるスクリプト実行部１０００１３に相当する。
【０１０２】
更新制御部１０００１Ａは第１スクリプト実行部１０００１３１および第２スクリプト実行部１０００１３２を備えるので、２つのスクリプトを並列に実行できる。ただしここでいう「並列に実行」とは共有するハードウエア資源、すなわちＣＰＵ１０１１を時分割で交互に使用することで、あるスクリプトの実行完了を待つことなく他のスクリプトの実行を開始できることである。なおゲートウェイ１０が複数のＣＰＵを備えてそれぞれのＣＰＵにおいて異なるスクリプトを実行してもよい。サービス提供部１０００１６はセキュリティフィルタ１０００１７を備える。サービス提供部１０００１６にセキュリティフィルタ機能が含まれることで、スクリプトから実行される診断通信サービスを安全に保つことできる。
【０１０３】
（セキュリティフィルタ１０００１７）
本実施の形態においてサーバ２が送信する更新パッケージ５には、それぞれのＥＣＵ更新データ５０３および対象ＥＣＵ一覧５０４に対応する検証情報を含む。検証情報はたとえば、デジタル署名やメッセージ認証コード（以下、ＭＡＣ）である。以下では、検証情報がデジタル署名の場合とＭＡＣの場合とでサーバ２およびゲートウェイ１０があらかじめ備えるべき鍵情報、およびゲートウェイ１０のセキュリティフィルタ１０００１７の動作を説明する。ただし以下の説明では冗長な記載を避けるためにＥＣＵ更新データ５０３に関する検証についてのみ説明し、対象ＥＣＵ一覧５０４についての記載は省略する。
【０１０４】
検証情報がデジタル署名の場合は、サーバ２が秘密鍵をゲートウェイ１０がその秘密鍵に対応する公開鍵をあらかじめ備える。サーバ２は、秘密鍵を用いてＥＣＵ更新データ５０３に署名してその署名を検証情報としてＥＣＵ更新データ５０３とともにゲートウェイ１０に送信する。セキュリティフィルタ１０００１７は、公開鍵を用いて署名である検証情報を検証することで、署名を行った者、すなわち送信者がサーバ２であることを確認する。
【０１０５】
検証情報がＭＡＣの場合は、サーバ２およびゲートウェイ１０は共通秘密鍵をそれぞれあらかじめ備える。サーバ２は、共通秘密鍵を用いてＥＣＵ更新データ５０３のＭＡＣを生成し、そのＭＡＣを検証情報としてＥＣＵ更新データ５０３とともにゲートウェイ１０に送信する。セキュリティフィルタ１０００１７は、共通秘密鍵を用いて受信したＥＣＵ更新データ５０３のＭＡＣを生成し、生成したＭＡＣと受信した検証情報とが一致することを確認することで、ＭＡＣを生成した者、すなわち送信者がサーバ２であることを確認する。
【０１０６】
図１９は、スクリプト起動制御情報５０２Ａの構成を示す図である。本実施の形態では、更新パッケージ５にはスクリプト起動制御情報５０２の代わりにスクリプト起動制御情報５０２Ａが含まれる。すなわち本実施の形態における更新パッケージ５は、更新用スクリプト５０１と、スクリプト起動制御情報５０２Ａと、ＥＣＵ更新データ５０３と、対象ＥＣＵ一覧５０４と、スクリプト対応表５０５とから構成される。
【０１０７】
図１９に示すように、スクリプト起動制御情報５０２Ａは、第１の実施の形態におけるスクリプト起動制御情報５０２から中断条件が削除されている。またスクリプト起動制御情報５０２Ａは、起動条件５０２２に割当５０２２４を含む。割当５０２２４は、対象スクリプト５０２１で指定されたスクリプトを起動するスクリプト実行部を示す。このように、起動条件に割当を含むことで、ひとつのイベントで複数のスクリプトを並列で起動したい場合に、適切なスクリプト実行部で対象スクリプトを実行させることができる。
【０１０８】
図２０は、本実施例におけるスクリプト起動処理を示すシーケンス図である。イベント管理部１０００１１は、あらかじめ全制御情報５０２Ｚを取得しており、全制御情報５０２Ｚに基づき更新状態管理部１０００３および車両状態管理部１０００６に発生の通知が必要なイベントを登録する（Ｓ２０１，Ｓ２０２）。更新状態管理部１０００３および車両状態管理部１０００６は、車両１の状態変化を検出し（Ｓ２０３）、登録されたイベント、たとえばダウンロードの完了通知をイベント管理部１０００１１に通知する（Ｓ２０４）。イベント管理部１０００１１は第１スクリプト実行部１０００１３１が起動対象とするスクリプトの有無を判断する（Ｓ２０５）。第１スクリプト実行部１０００１３１が起動対象とするスクリプトがある場合は制御部１０００１２を介して第１スクリプト実行部１０００１３１にそのスクリプトを実行させる（Ｓ２０６、Ｓ２０７）。
【０１０９】
同様にイベント管理部１０００１１は第２スクリプト実行部１０００１３２が起動対象とするスクリプトの有無を判断する（Ｓ２０８）。第２スクリプト実行部１０００１３２が起動対象とするスクリプトがある場合は制御部１０００１２を介して第２スクリプト実行部１０００１３２にそのスクリプトを実行させる（Ｓ２０９、Ｓ２１０）。第１スクリプト実行部１０００１３１および第２スクリプト実行部１０００１３２は、スクリプトの実行が完了するとその結果をイベント管理部１０００１１に応答する（Ｓ２１１，Ｓ２１３）。イベント管理部１０００１１はその応答を受けると、第１スクリプト実行部１０００１３１および第２スクリプト実行部１０００１３２において次に実行すべきスクリプトの有無を判断し（Ｓ２１２，Ｓ２１４）、必要に応じてスクリプトを実行させる。
【０１１０】
図２１は、更新対象が自動運転ＥＣＵ１５とＡＤＡＳ  ＥＣＵ１６である場合の更新パッケージ５の例である。ただし図２１では検証情報の記載を省略している。第１の実施の形態における図９との相違点は、更新対象のＥＣＵが異なることに起因する以下の点である。すなわちエンジンＥＣＵ更新スクリプト５１１２の代わりにＡＤＡＳ  ＥＣＵ更新スクリプト５１１５を備え、エンジン制御ＥＣＵ更新スクリプト５１１２の代わりにＡＤＡＳ  ＥＣＵ更新スクリプト起動制御情報５１２５を備え、エンジン制御ＥＣＵ更新データ５１３２の代わりにＡＤＡＳ  ＥＣＵ更新データ５１３５を備える。
【０１１１】
確認用スクリプト５１１３Ａ、新プログラム有効化用スクリプト５１１４、対象ＥＣＵ一覧５０４、およびスクリプト対応表５０５は、更新対象の変更にあわせて第１の実施の形態から内容が書き換えられている。
【０１１２】
ＡＤＡＳ  ＥＣＵ更新スクリプト５１１５は、ＡＤＡＳ  ＥＣＵ更新データ５１３５を用いてＡＤＡＳ  ＥＣＵ１６に新プログラムを書き込むための手順が記述されたスクリプトである。具体的には、ゲートウェイ１０からＡＤＡＳ  ＥＣＵ１６に診断通信を用いて差分データを転送する手順が記述されている。ＡＤＡＳ  ＥＣＵ更新データ５１３５は、ＡＤＡＳ  ＥＣＵ１６の更新に必要となるデータであり、書き込み先アドレス等が記述されたメタデータと、ＡＤＡＳ  ＥＣＵ１６に書き込まれたプログラムと、新しいプログラムから生成された差分データから構成される。
【０１１３】
図２２は、更新対象が自動運転ＥＣＵ１５とＡＤＡＳ  ＥＣＵ１６である場合の全制御情報５０２Ｚの一例を示す図である。図１９を参照して説明したようにスクリプト起動制御情報５０２Ａは中断条件を持たず、代わりに割当５０２２４を有する。図２２に示すように、自動運転ＥＣＵ更新スクリプト５１１１、確認用スクリプト５１１３Ａ、および新プログラム有効化用スクリプト５１１４は第１スクリプト実行部１０００１３１に割り当てられ、ＡＤＡＳ  ＥＣＵ更新スクリプト５１１５のみが第２スクリプト実行部１０００１３２に割り当てられている。またＡＤＡＳ  ＥＣＵ更新スクリプト起動制御情報５１２５の記載から、ＡＤＡＳ  ＥＣＵ更新スクリプト５１１５はダウンロードの完了、またはイグニッションのＯＮにより実行されることがわかる。ただしイグニッションがＯＮの場合は、更新状態５０２２３に関する条件が付されている。また確認用スクリプト起動制御情報５１２３の起動条件５０２３における更新状態５０２２３は、自動運転ＥＣＵ１５の更新が完了しているおり、かつＡＤＡＳ  ＥＣＵ１６の更新が完了していることである。
【０１１４】
図２３は、自動運転ＥＣＵ１５とＡＤＡＳ  ＥＣＵ１６を更新する場合のソフトウェア更新処理の流れを示すシーケンス図である。更新パッケージ５のダウンロードが完了するまでの処理は、図１３における処理と同様である。
【０１１５】
イベント管理部１０００１１は、ダウンロードが完了したことを検出すると、更新データ管理部１０００２を介して更新パッケージ５内のスクリプト起動制御情報５０２Ａを読み出す。そしてイベント管理部１０００１１は、起動イベント５０２２１が「ＤＬ完」であるスクリプトが２つあり、いずれも順序５０２２２が「１」であり、割当５０２２４が両者で異なることを認識する。そのためイベント管理部１０００１１は、第１スクリプト実行部１０００１３１に自動運転ＥＣＵ更新スクリプト５１１１の起動を指示し、第２スクリプト実行部１０００１３２にＡＤＡＳ  ＥＣＵ更新スクリプト５１１５の起動を指示する。これらの更新処理は、２つの実行部によって並列に行われる（Ｓ３０４、Ｓ３０５）。
【０１１６】
次に、イベント管理部１０００１１は、イグニッションがＯＦＦになったことを検出（Ｓ３１０）すると、更新データ管理部１０００２を介して更新パッケージ５内のスクリプト起動制御情報５０２Ａを読み出す。そしてイベント管理部１０００１１は、起動イベント５０２２１が「ＩＧＮ−ＯＦＦ」、順序５０２２２が「１」である確認用スクリプト起動制御情報５１２３の更新状態５０２２３が「自動運転ＥＣＵ更新完」かつ「ＡＤＡＳ  ＥＣＵ更新完」であるため、更新状態管理部１０００３を介して自動運転ＥＣＵ１５およびＡＤＡＳ  ＥＣＵ１６の更新状態が「完了」であることを確認する。ここでは両者の更新状態が「完了」なので、確認用スクリプト５１１３Ａの起動を、制御部１０００１２を介して第１スクリプト実行部１０００１３１に指示する。第１スクリプト実行部１０００１３１は確認用スクリプト５１１３Ａを実行して車両状態とユーザ許諾の確認を行う（Ｓ３１１）。
【０１１７】
確認用スクリプト５１１３Ａの実行が完了すると、イベント管理部１０００１１は、起動イベント５０２２１が「ＩＧＮ−ＯＦＦ」、順序が「２」となっている新プログラム有効化用スクリプト５１１４の起動を、制御部１０００１２を介して第１スクリプト実行部１０００１３１に指示する。第１スクリプト実行部１０００１３１は当該スクリプトを実行して自動運転ＥＣＵ１５とＡＤＡＳ  ＥＣＵ１６の新プログラムの有効化を行う（Ｓ３１２）。
【０１１８】
図２４は本実施の形態における確認用スクリプト５１１３Ａの具体例を示す図である。なお本実施の形態では、サービス提供部１０００１４は診断通信サービスを非同期処理として提供している。そのため以下に説明するように同一の命令文であっても第１の実施の形態とは挙動が異なる。
【０１１９】
図２４の１行目には車両１の速度の情報を取得することが記載されており、２行目には車速がゼロでない場合は１６行目以下のエラー処理に進むことが記載されている。４行目にはＨＭＩ１２を利用してユーザから更新の同意を取得することが記載されている。ただし本実施の形態では非同期処理なので、４行目の処理ではユーザに問い合わせを行う、たとえば画面に問い合わせのダイアログを表示するだけであり、ユーザの応答を得る処理は含まれない。５行目には、ユーザへの問い合わせが正常に行えなかった場合、たとえばＨＭＩ１２が動作しない場合は、１６行目以下のエラー処理に進むことが記載されている。
【０１２０】
図２４の７〜１４行目は永続的なループ処理を示している。８行目にはイグニッションの状態を取得することが記載されており、９行目にはイグニッションがＯＮの場合には正常終了を示す返り値を制御部１０００１２に返すことが記載されている。１１行目には、４行目においてユーザへ問い合わせた回答を取得することが記載されている。ただしユーザがまだ回答を選択していない場合は未回答である旨の値、たとえば「ＮＵＬＬ」が回答として取得される。１２行目には、１１行目で取得した回答が更新の承諾である「ＯＫ」であった場合は正常終了を示す返り値を制御部１０００１２に返すことが記載され、更新の拒否を示す「ＮＧ」であった場合は１６行目以下のエラー処理に進むことが記載されている。
【０１２１】
すなわち図２４の７〜１４行目の記載は、イグニッションがＯＮまたは更新の同意が得られた場合は正常終了し、更新が拒否された場合はエラー処理に進むことを示す。換言すると、イグニッションがＯＦＦのままでユーザが問い合わせに回答しなければループ処理が永続する。また、ユーザの選択により更新処理を中断することも記載されている。
【０１２２】
図２５は、確認用スクリプト５１１３Ａの実行に伴うゲートウェイプログラム１００の動作を表すシーケンス図である。ただし第１の実施の形態における図１７と同一の処理は同一のステップ番号を付して説明を省略する。前述のとおり、サービス提供部１０００１４は診断通信サービスを非同期処理として提供している。ＨＭＩ１２に許諾取得のコマンドを送信するまでの処理、すなわち図１７における上から４分の３ほどの処理は前述の図１７における処理と同様である。すなわちＳ３０６０８は図２４の１行目の記載に対応する。
【０１２３】
サービス提供部１０００１４はＨＭＩ１２に送信する許諾取得のためのコマンドを生成（Ｓ３０６０９）し、通信制御部１０００７を介してＨＭＩ１２に当該コマンドを送信する（Ｓ３０６１０、Ｓ３０６１１）。ＨＭＩ１２は、受信したコマンドに基づいて許諾取得画面を表示し、ユーザ操作による許諾操作を待つ。一方、通信制御部１０００７は、送信処理の結果、すなわち正常にＨＭＩ１２を用いた許諾取得画面の表示が行われたか否かをサービス提供部１０００１４に応答する（Ｓ３０６１８）。サービス提供部１０００１４は診断通信サービスの呼び出し結果として、送信結果を第１スクリプト実行部１０００１３１に応答する（Ｓ３０６１９）。第１スクリプト実行部１０００１３１は、図２４の２行目の記載を解釈して、ユーザの許諾の成否ではなく処理が正常に行われたか否かだけを判断し、異常がなければ、すなわち応答が「ＮＧ」でなければ次の処理に進む。
【０１２４】
次に、第１スクリプト実行部１０００１３１は、図２４の８行目の記載を解釈して、再度イグニッションがＯＮされていないかを確認するため、車両状態取得サービスを呼び出す（Ｓ３０６２０）。サービス提供部１０００１４は、車両状態管理部１０００６からイグニッションの状態を取得（Ｓ３０６２１）し、結果を第１スクリプト実行部１０００１３１に応答する（Ｓ３０６２２）。第１スクリプト実行部１０００１３１は、図２４の９行目の記載を解釈して、イグニッションがＯＮであれば処理を終了して制御部１０００１２に結果を応答する（Ｓ３０６２３のＯＮ）。第１スクリプト実行部１０００１３１が、イグニッションの状態を確認している間に、ユーザがＨＭＩ１２を操作し（Ｓ３０６２４）、その結果をゲートウェイに送信する（Ｓ３０６２５）。サービス提供部１０００１４は通信制御部１０００７を介して診断通信パケットを取得し（Ｓ３０６２６）、これを解析して結果を保持する（Ｓ３０６２７）。
【０１２５】
第１スクリプト実行部１０００１３１は、イグニッション状態がＯＦＦ（Ｓ３０６２３のＯＦＦ）であれば、図２４の１１行目の記載を解釈して、診断通信結果取得サービスを呼び出して（Ｓ３０６２８）、Ｓ３０６０８で呼び出した診断通信サービスの結果を取得する（Ｓ３０６２９）。読み出した結果が応答結果であるか否かを判定（Ｓ３０６３０）し、応答が未着であれば、車両状態取得サービス呼び出しＳ３０６２０以降の処理を繰り返す（Ｓ３０６３０の結果未着）。応答を受信済み（Ｓ３０６３０の結果到着済）であれば、第１スクリプト実行部１０００１３１は応答結果に基づき、状態確認及びユーザ許諾確認結果を制御部１０００１２に返す（Ｓ３０６３１）。
【０１２６】
このように、診断通信サービスを非同期化してスクリプト内で状態確認をすることで、車両等の状態変化やユーザの指示にあわせて実行中のスクリプトを中断することができる。
【０１２７】
図２６は、第２の実施の形態における診断通信サービス呼び出し処理の流れを示すシーケンス図である。サービス提供部１０００１６は、第１スクリプト実行部１０００１３１により診断通信サービスが呼び出される（Ｓ４０１）と、当該要求がＥＣＵへのデータ書き込み要求か否かを判断する（Ｓ４０２）。ここでいうデータ書き込み要求とは、たとえばＵＤＳ（Ｕｎｉｆｉｅｄ  Ｄｉａｇｎｏｓｉｓ  Ｓｅｒｖｉｃｅｓ）であればＲｅｑｕｅｓｔＤｏｗｎｌｏａｄやＷｒｉｔｅＤａｔａＢｙＩｄｅｎｔｉｆｉｒｅなどの要求が該当する。書き込み要求である場合は（Ｓ４０２のＹＥＳ）、セキュリティフィルタ１０００１７により送信者がサーバ２であることが確認された対象ＥＣＵ一覧５０４を読み出す（Ｓ４０３）。なおセキュリティフィルタ１０００１７による検証が失敗し、対象ＥＣＵ一覧５０４の送信者がサーバ２ではない、または要求されたＥＣＵが対象ＥＣＵ一覧５０４に含まれないと判断すると、Ｓ４０３の読み出しが失敗して更新は行われない。
【０１２８】
次に、読み出した対象ＥＣＵ一覧５０４に書き込み要求を指示されたＥＣＵが含まれるか否かを判定（Ｓ４０４）し、含まれない場合（Ｓ４０４のＮＯ）は当該診断通信サービスを実行せずに応答を返す（Ｓ４０７）。検証済みの対象ＥＣＵ一覧５０４に対象ＥＣＵが含まれる場合（Ｓ４０４のＹＥＳ）は、診断通信パケットを生成し（Ｓ４０５）、通信制御部１０００７に当該パケットの送信を要求する（Ｓ４０６）。このように、診断通信サービスの実行前に対象ＥＣＵの確認を行うことで、不正な書き込み要求の送信を防止し、安全なスクリプトを実行することができる。
【０１２９】
上述した第２の実施の形態によれば、第１の実施の形態において説明した作用効果に加えて、次の作用効果が得られる。
（８）更新用スクリプト５０１には更新を中断する処理が含まれる。スクリプト実行部１０００１３は、更新用スクリプト５０１に基づき更新を中断する。そのためゲートウェイ１０は、ソフトウェアの更新中断も含めた柔軟なソフトウェアの更新処理が可能である。
【０１３０】
（９）スクリプト実行部１０００１３は、第１スクリプト実行部１０００１３１および第２スクリプト実行部１０００１３２から構成される。第１スクリプト実行部１０００１３１および第２スクリプト実行部１０００１３２は、それぞれが異なる更新用スクリプト５０１を読み込み、それぞれが異なるＥＣＵのソフトウェアを更新する。そのためゲートウェイ１０は、複数のＥＣＵの同時の更新を含む柔軟なソフトウェアの更新処理が可能である。
【０１３１】
（１０）更新パッケージ５には、ＥＣＵ更新データ５０３の検証に用いる検証情報が含まれる。ゲートウェイ１０は、検証情報を用いて受信したＥＣＵ更新データ５０３を検証するセキュリティフィルタ１０００１７を備える。そのためゲートウェイ１０は、受信したＥＣＵ更新データ５０３の安全性を確認することができる。
【０１３２】
（第２の実施の形態の変形例１）
ゲートウェイ１０は、セキュリティフィルタ１０００１７を備えなくてもよい。その場合は、更新パッケージ５に検証情報が含まれなくてもよい。
【０１３３】
（第２の実施の形態の変形例２）
ゲートウェイ１０は、３以上のスクリプト実行部を備え、３以上のＥＣＵのソフトウェアを同時に更新してもよい。
【０１３４】
（第２の実施の形態の変形例３）
サーバ２は、更新パッケージ５に検証情報を含める代わりに、共通秘密鍵または秘密鍵を用いて更新データ５０３を暗号化して送信してもよい。この場合はゲートウェイ１０は、共通秘密鍵または公開鍵を用いて受信した更新データ５０３を復号化してＥＣＵのソフトウエアを更新する。
【０１３５】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。たとえば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることや各処理における処理の順番を入れ替えることも可能である。たとえば、本実施の形態ではソフトウェア更新装置はゲートウェイ１０であるとしたが、通信モジュール１１やＨＭＩ１２がソフトウェア更新装置であってもよい。
【０１３６】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、たとえば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するソフトウェアを解釈し、実行することによりソフトウェアで実現してもよい。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【０１３７】
上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
【符号の説明】
【０１３８】
１…車両
５…更新パッケージ
１０…ゲートウェイ
１００…ゲートウェイプログラム
５０１…更新用スクリプト
５０１Ｚ…全スクリプト
５０２…スクリプト起動制御情報
５０２Ｚ…全制御情報
５０３…更新データ
５０３Ｚ…全更新データ
５０４…対象一覧
５０５…スクリプト対応表
１０００１１…イベント管理部
１０００１２…制御部
１０００１３…スクリプト実行部
１０００１４…サービス提供部
１０００１５…ダウンロード制御部
１０００１６…サービス提供部
１０００１７…セキュリティフィルタ
【図１】
2019074800.tif 000003
【図２】
2019074800.tif 000004
【図３】
2019074800.tif 000005
【図４】
2019074800.tif 000006
【図５】
2019074800.tif 000007
【図６】
2019074800.tif 000008
【図７】
2019074800.tif 000009
【図８】
2019074800.tif 000010
【図９】
2019074800.tif 000011
【図１０】
2019074800.tif 000012
【図１１】
2019074800.tif 000013
【図１２】
2019074800.tif 000014
【図１３】
2019074800.tif 000015
【図１４】
2019074800.tif 000016
【図１５】
2019074800.tif 000017
【図１６】
2019074800.tif 000018
【図１７】
2019074800.tif 000019
【図１８】
2019074800.tif 000020
【図１９】
2019074800.tif 000021
【図２０】
2019074800.tif 000022
【図２１】
2019074800.tif 000023
【図２２】
2019074800.tif 000024
【図２３】
2019074800.tif 000025
【図２４】
2019074800.tif 000026
【図２５】
2019074800.tif 000027
【図２６】
2019074800.tif 000028