(57)【特許請求の範囲】
【請求項１】
第１のネットワークを介して互いに通信可能に接続された第１種ノードと複数の第２種ノードとを含み、前記第１種ノードの動作を決定するプログラムを書き換えるプログラム書き換えシステムであって、
前記第１種ノードは、前記プログラムを保存する第１の記録領域と、前記第１の記録領域に保存された前記プログラムを部分的に書き換えるプログラム書き換え部と、前記書き換えたプログラムが同一であるか否かを検証するプログラム検証部とを有し、
前記第２種ノードの各々は、前記プログラムの書き換え用プログラムの一部分である分割プログラムを、他の第２種ノードに保存される分割プログラムと部分的に重複した内容を含む形で保存する第２の記録領域と、前記第１種ノードへの前記分割プログラムの送信可否を判断する送信可否判断部を有し、
前記第２種ノードの各々は、前記送信可否判断部が前記第１種ノードへの前記分割プログラムの送信が可能であると判断した場合に、自ノードが保存している前記分割プログラムを前記第１のネットワークを介して前記第１種ノードに送信し、
前記第１種ノードのプログラム書き換え部は、前記第２種ノードの各々から前記分割プログラムを受信する度に、前記第１の記録領域に保存された前記プログラムの前記分割プログラムに該当する部分を書き換え、前記第１種ノードのプログラム検証部は、前記書き換えた分割プログラム同士が同一であるか否かを前記重複した内容を用いて検証する
プログラム書き換えシステム。
【請求項２】
前記第１のネットワークに随時接続され、前記第１のネットワークを介して前記第１種ノード及び複数の前記第２種ノードと互いに通信可能な第３種ノードをさらに含み、
前記第３種ノードは、前記書き換え用プログラムを保存する第３の記録領域と、前記第３の記録領域に保存された前記書き換え用プログラムを他の分割プログラムと部分的に重複した内容を含む形に分割することで前記分割プログラムを作成する第１のプログラム分割部を有し、前記第１のプログラム分割部により作成された前記分割プログラムを、それぞれ前記第１のネットワークを介して前記第２種ノードの各々に送信する
請求項１記載のプログラム書き換えシステム。
【請求項３】
前記第１のネットワークを介して前記第１種ノード及び複数の前記第２種ノードと互いに通信可能な第４種ノードと、前記第１のネットワークとは別の第２のネットワークに随時接続され、前記第２のネットワークを介して前記第４種ノードと互いに通信可能な第５種ノードとをさらに含み、
前記第５種ノードは、前記書き換え用プログラムを保存する第５の記録領域を有し、前記第５の記録領域に保存された前記書き換え用プログラムを前記第２のネットワークを介して前記第４種ノードに送信し、
前記第４種ノードは、前記第５種ノードから受信した前記書き換え用プログラムを保存する第４の記録領域と、前記第４の記録領域に保存された前記書き換え用プログラムが一定量になる毎に該書き換え用プログラムから他の分割プログラムと部分的に重複した内容を含む形に前記分割プログラムを作成する第２のプログラム分割部を有し、前記第２のプログラム分割部により作成された前記分割プログラムを、それぞれ前記第１のネットワークを介して前記第２種ノードの各々に送信する
請求項１記載のプログラム書き換えシステム。
【請求項４】
前記第１種ノードは、自ノードが前記プログラムを書き換え可能な状態であるか否かを検出する第１の状態検出部を有し、前記第１の状態検出部により書き換え可能であることが検出された場合は、前記第１のネットワークを介して前記第２種ノードに通知し、この通知を受けた前記第２種ノードは、自ノードが保存する前記分割プログラムを前記第１種ノードに送信する
請求項１又は２記載のプログラム書き換えシステム。
【請求項５】
前記第２種ノードは、前記第１種ノードが前記プログラムを書き換え可能な状態であるか否かを検出する第２の状態検出部を有し、前記第２の状態検出部により書き換え可能であることが検出された場合は、自ノードが保存する前記分割プログラムを前記第１種ノードに送信する
請求項１記載のプログラム書き換えシステム。
【請求項６】
前記第４種ノードは、前記第１種ノードが前記プログラムを書き換え可能な状態であるか否かを検出する第３の状態検出部を有し、前記第３の状態検出部により書き換え可能であることが検出された場合は、前記第１のネットワークを介して前記第２種ノードの各々に通知し、この通知を受けた前記第２種ノードは、自身が保存する前記分割プログラムを前記第１種ノードに送信する
請求項３記載のプログラム書き換えシステム。
【請求項７】
前記第２種ノードが３つ以上であり、これら第２種ノード間で前記部分的に重複した内容の分割プログラムが奇数個作成され、前記第１種ノードは、これらの分割プログラムの正常性を多数決により検証する
請求項１記載のプログラム書き換えシステム。
【請求項８】
前記第１種ノードは、前記奇数個作成された分割プログラムの内容が異なる場合においては、多数の分割ブログラムの内容に少数の分割プログラムを修正する
請求項７記載のプログラム書き換えシステム。
【請求項９】
前記第２種ノードは、前記分割プログラムを暗号化する暗号化部を有し、前記暗号化部により暗号化した前記分割プログラムを前記第２の記録領域に保存する
請求項１記載のプログラム書き換えシステム。
【請求項１０】
前記第３種ノードは、前記分割プログラムを暗号化する暗号化部を有し、前記暗号化部により暗号化した前記分割プログラムを前記第２種ノードの各々に送信し、前記第２種ノードの各々は、暗号化された前記分割プログラムを前記第２の記録領域に保存する
請求項２記載のプログラム書き換えシステム。
【請求項１１】
前記第４種ノードは、前記分割プログラムを暗号化する暗号化部を有し、前記暗号化部により暗号化した前記分割プログラムを前記第２種ノードの各々に送信し、前記第２種ノードの各々は、暗号化された前記分割プログラムを前記第２の記録領域に保存する
請求項３記載のプログラム書き換えシステム。
【請求項１２】
前記第１種ノードは、暗号化された前記分割プログラムを復号化する復号化部を有し、前記第２種ノードから暗号化された前記分割プログラムを受信した際に、前記復号化部により前記分割プログラムを復号化する
請求項９から１１のいずれか一項に記載のプログラム書き換えシステム。
【請求項１３】
前記第２種ノードは、暗号化された前記分割プログラムを復号化する復号化部を有し、前記第２の記録領域に保存された暗号化された前記分割プログラムを前記復号化部により復号化して、前記第１種ノードに送信する
請求項９から１１のいずれか一項に記載のプログラム書き換えシステム。
【請求項１４】
第１のネットワークを介して互いに通信可能に接続された第１種ノードと複数の第２種ノードとを含み、前記第１種ノードの動作を決定するプログラムを書き換えるプログラム書き換え方法であって、
前記第２種ノードの各々は、前記プログラムの書き換え用プログラムの一部分である分割プログラムを、他の第２種ノードに保存される分割プログラムと部分的に重複した内容を含む形で保存し、
前記第２種ノードの各々は、前記第１種ノードへの前記分割プログラムの送信が可能であると判断した場合に、自ノードが保存している前記分割プログラムを前記第１のネットワークを介して前記第１種ノードに送信し、
前記第１種ノードは、前記第２種ノードの各々から前記分割プログラムを受信する度に、前記プログラムの前記分割プログラムに該当する部分を書き換えるとともに、前記書き換えた分割プログラム同士が同一であるか否かを前記重複した内容を用いて検証する
プログラム書き換え方法。
【請求項１５】
前記第１のネットワークに随時接続され、前記第１のネットワークを介して前記第１種ノード及び複数の前記第２種ノードと互いに通信可能な第３種ノードをさらに含み、
前記第３種ノードは、前記書き換え用プログラムを保存しており、前記保存された前記書き換え用プログラムを他の分割プログラムと部分的に重複した内容を含む形に分割し、前記第１のネットワークを介して前記第２種ノードの各々に送信する
請求項１４記載のプログラム書き換え方法。
【請求項１６】
前記第１のネットワークを介して前記第１種ノード及び複数の前記第２種ノードと互いに通信可能な第４種ノードと、前記第１のネットワークとは別の第２のネットワークに随時接続され、前記第２のネットワークを介して前記第４種ノードと互いに通信可能な第５種ノードとをさらに含み、
前記第５種ノードは、前記書き換え用プログラムを保存しており、前記保存された前記書き換え用プログラムを前記第２のネットワークを介して前記第４種ノードに送信し、
前記第４種ノードは、前記第５種ノードから受信した前記書き換え用プログラムが一定量になる毎に該書き換え用プログラムから前記他の分割プログラムと部分的に重複した内容を含む形に前記分割プログラムを作成し、前記作成した前記分割プログラムを、それぞれ前記第１のネットワークを介して前記第２種ノードの各々に送信する
請求項１４記載のプログラム書き換え方法。
【請求項１７】
前記第１種ノードは、自ノードが前記プログラムを書き換え可能な状態であることが検出された場合は、前記第１のネットワークを介して前記第２種ノードに通知し、この通知を受けた前記第２種ノードは、自ノードが保存する前記分割プログラムを前記第１種ノードに送信する
請求項１４記載のプログラム書き換え方法。
【請求項１８】
前記第２種ノードは、前記第１種ノードが前記プログラムを書き換え可能な状態であることを検出した場合は、自ノードが保存する前記分割プログラムを前記第１種ノードに送信する
請求項１４記載のプログラム書き換え方法。
【請求項１９】
前記第４種ノードは、前記第１種ノードが前記プログラムを書き換え可能な状態であることが検出された場合は、前記第１のネットワークを介して前記第２種ノードに通知し、この通知を受けた前記第２種ノードは、自身が保存する前記分割プログラムを前記第１種ノードに送信する
請求項１６記載のプログラム書き換え方法。
【請求項２０】
前記第２種ノードが３つ以上であり、これら第２種ノード間で前記部分的に重複した内容の分割プログラムが奇数個作成され、前記第１種ノードは、これらの分割プログラムの正常性を多数決により検証する
請求項１４記載のプログラム書き換え方法。
【請求項２１】
前記第１種ノードは、前記奇数個作成された分割プログラムの内容が異なる場合においては、多数の分割ブログラムの内容に少数の分割プログラムを修正する
請求項２０記載のプログラム書き換え方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム書き換えシステム及びプログラム書き換え方法に関し、特にネットワークに接続された複数の制御装置であるノードにおけるプログラムの書き換えシステム及び書き換え方法に関する。
【背景技術】
【０００２】
従来、ネットワークに接続された制御装置のプログラム書き換えシステム及び方法（以下、システムとして総称することがある。）として、例えば特許文献１に提示されたものが知られている。
この特許文献１におけるプログラム書き換えシステムについて図１６を用いて説明する。図１６（ａ）に示すように、車両のネットワーク８には、外部とのインターフェイス機能を有する書き換えを実施する第１の制御装置１６と、統括制御装置１７と、プログラムのデータを書き換える対象である第２の制御装置１８と、複数ある第３の制御装置１９が接続されている。
【０００３】
統括制御装置１７は、外部とのインターフェイス機能を有する第１の制御装置１６と、所定の機能を有するゲートウェイ１７ａを介して接続されている。統括制御装置１７は、さらに、所定のデータを記憶し得る記憶媒体１７ｂと、全体を制御するＣＰＵ１７ｃとを有している。また、プログラムデータの書き換え対象である第２の制御装置１８は、所定のデータを記憶する記憶媒体１８ａと、所定の入力信号により最適な制御を行うことができるＣＰＵ１８ｂ及びメモリ１８ｃを有している。
【０００４】
また、図１６（ｂ）に示すように、第１の制御装置１６は、データ入力部１６ａと、データ入力部１６ａからのデータを一時的に記憶する記憶装置１６ｅと、第１の制御装置１６全体を制御するＣＰＵ１６ｄと、ゲートウェイ１７ａとの間の入出力インターフェイスを構成する第１のインターフェイス部１６ｃと、表示部などの出力部に出力する第２のインターフェイス部１６ｂを有している。
【０００５】
この特許文献１では、第２の制御装置１８のプログラムデータの書き換えを実施する際に、プログラム書き換え用のデータが、第１の制御装置１６にデータ入力部１６ａから入力される。このデータは、ＣＰＵ１６ｄの制御に基づいてデータ出力部１６ｃを介してゲートウェイ１７ａに出力される。その後、このデータは、ゲートウェイ１７ａを経由して、統括制御装置１７の記録媒体１７ｂに一時蓄積される。さらに、そのプログラム書き換え用のデータは、電圧や温度範囲等の書き換え実施条件が満たされた時には、第２の制御装置１８の記録媒体１８ａへ車両のネットワーク８を介して送信される。
【０００６】
この特許文献１に提示されたプログラムの書き換えシステムでは、１つの通信ノードである統括制御装置１７内に、プログラム書き換え用のデータ全てを記録する容量を持つ記録媒体１７ｂが必要であり、そのためにコストが上昇するという課題があった。
【０００７】
このような課題を解消するため、本出願人は、特許文献２に示すように、複数のモータ制御装置等の第２種ノードに書き換え用プログラムの一部分である分割プログラムを保存させるようにし、各第２種ノードは、自身が保存する分割プログラムをそれぞれバッテリ制御装置等の第１種ノードに送信し、第１種ノードは、各第２種ノードから分割プログラムを受信する度に、第１種ノードの動作を決定するプログラム中の該分割プログラムに該当する部分を書き換えるように構成したプログラム書き換えシステム及びプログラム書き換え方法を提案した。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特許第４６６８６５６号公報
【特許文献２】特許第５３２３１５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記の特許文献２の場合には、第２種ノードに書き換え用データを記録した後にプログラムが外乱等により破損した場合については、プログラム書き換え用のデータを検証することができないという課題がある。
【００１０】
本発明は、上記のような課題を解決するためになされたものであり、ネットワークに接続された制御装置のプログラムの書き換えを効率良く実施することができ、且つ１つのノードがコスト高とならないようにし、さらに書き換えるプログラムが正しいかを検証可能としたプログラム書き換えシステム及びプログラム書き換え方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記の目的を達成するため、本発明によるプログラム書き換えシステムは、第１のネットワークを介して互いに通信可能に接続された第１種ノードと複数の第２種ノードとを含み、前記第１種ノードの動作を決定するプログラムを書き換えるプログラム書き換えシステムであって、前記第１種ノードは、前記プログラムを保存する第１の記録領域と、前記第１の記録領域に保存された前記プログラムを部分的に書き換えるプログラム書き換え部と、前記書き換えたプログラムが同一であるか否かを検証するプログラム検証部とを有し、前記第２種ノードの各々は、前記プログラムの書き換え用プログラムの一部分である分割プログラムを、他の第２種ノードに保存される分割プログラムと部分的に重複した内容を含む形で保存する第２の記録領域と、前記第１種ノードへの前記分割プログラムの送信可否を判断する送信可否判断部を有し、前記第２種ノードの各々は、前記送信可否判断部が前記第１種ノードへの前記分割プログラムの送信が可能であると判断した場合に、自ノードが保存している前記分割プログラムを前記第１のネットワークを介して前記第１種ノードに送信し、前記第１種ノードのプログラム書き換え部は、前記第２種ノードの各々から前記分割プログラムを受信する度に、前記第１の記録領域に保存された前記プログラムの前記分割プログラムに該当する部分を書き換え、前記第１種ノードのプログラム検証部は、前記書き換えた分割プログラム同士が同一であるか否かを前記重複した内容を用いて検証するものである。
【００１２】
また、上記の目的を達成するため、本発明によるプログラム書き換え方法は、第１のネットワークを介して互いに通信可能に接続された第１種ノードと複数の第２種ノードとを含み、前記第１種ノードの動作を決定するプログラムを書き換えるプログラム書き換え方法であって、前記第２種ノードの各々は、前記プログラムの書き換え用プログラムの一部分である分割プログラムを、他の第２種ノードに保存される分割プログラムと部分的に重複した内容を含む形で保存し、前記第２種ノードの各々は、前記第１種ノードへの前記分割プログラムの送信が可能であると判断した場合に、自ノードが保存している前記分割プログラムを前記第１のネットワークを介して前記第１種ノードに送信し、前記第１種ノードは、前記第２種ノードの各々から前記分割プログラムを受信する度に、前記プログラムの前記分割プログラムに該当する部分を書き換えるとともに、前記書き換えた分割プログラム同士が同一であるか否かを前記重複した内容を用いて検証するものである。
【発明の効果】
【００１３】
本発明に係るプログラム書き換えシステム及び方法によれば、第２種ノードは、第１種ノードの動作を決定するプログラムの書き換え用プログラムの一部分である分割プログラムを、他の第２種ノードに保存される分割プログラムと部分的に重複した内容を含む形で保存し、第２種ノードの各々は、第１種ノードへの分割プログラムの送信が可能であると判断した場合に、自ノードが保存している分割プログラムを第１のネットワークを介して第１種ノードに送信し、第１種ノードは、受信した分割プログラムに該当する部分を書き換えるとともに、その書き換えた分割プログラム同士を前記の重複した内容を用いて同一であるか否かを検証するように構成したので、効率の良いプログラムの書き換えと書き換え後の検証を実施することができるとともに、第２種ノードに全ての書き換え用プログラムを保存できるほどの大きな記録容量を設ける必要がなく、一つのノードがコスト高になることを防ぐことができ、全体としてのコストが抑えられる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施の形態１によるプログラム書き換えシステムが適用される車両制御システムの構成を示すブロック図である。
【図２】本発明の実施の形態１によるプログラム書き換えシステムにおける第１〜第３種ノードの記録装置の領域構成を、それぞれ、図２（ａ）〜（ｃ）に示すメモリマップ図である。
【図３】本発明の実施の形態１によるプログラム書き換えシステムの第１種ノードにおける処理の流れを示す図である。
【図４】本発明の実施の形態１によるプログラム書き換えシステムの第２種ノード及び第３種ノードにおける処理の流れを、それぞれ、図４（ａ）及び（ｂ）に示す図である。
【図５】本発明の実施の形態１によるプログラム書き換えシステムにおける各ノードの処理の流れを時間軸に沿って示す図である。
【図６】本発明の実施の形態２によるプログラム書き換えシステムが適用される車両制御システムの構成を示すブロック図である。
【図７】本発明の実施の形態２によるプログラム書き換えシステムにおける第４及び第５種ノードの記録装置の領域構成を、それぞれ、図７（ａ）及び（ｂ）に示すメモリマップ図である。
【図８】本発明の実施の形態２によるプログラム書き換えシステムの第５種ノードにおける処理の流れを示す図である。
【図９】本発明の実施の形態２によるプログラム書き換えシステムの第４種ノードにおける処理の流れを示す図であり、図９（ａ）に処理の流れ全体を示し、その中の送受信処理のサブルーチンを図９（ｂ）に示す図である。
【図１０】本発明の実施の形態２によるプログラム書き換えシステムの第１種ノードにおける処理の流れを示す図である。
【図１１】本発明の実施の形態２によるプログラム書き換えシステムにおける各ノードの処理の流れを時間軸に沿って示す図である。
【図１２】本発明の実施の形態３によるプログラム書き換えシステムが適用される車両制御システムの構成を示すブロック図である。
【図１３】本発明の実施の形態３によるプログラム書き換えシステムの第２種ノードにおける処理の流れを示す図である。
【図１４】本発明の実施の形態３によるプログラム書き換えシステムの第４種ノードにおける処理の流れを示す図である。
【図１５】本発明の実施の形態３によるプログラム書き換えシステムにおける各ノードの処理の流れを時間軸に沿って示す図である。
【図１６】従来のプログラム書き換えシステムを示すブロック図であり、図１６（ａ）にシステム全体を示し、その中の第１の制御装置を図１６（ｂ）に示すブロック図である。
【図１７】本発明の各実施の形態によるプログラム書き換えシステムで使用される分割プログラムの構成を示す図である。
【発明を実施するための形態】
【００１５】
以下に、本発明の実施の形態１〜３によるプログラム書き換えシステム及び方法について、図面に基づいて説明する。なお、全ての図において、図中、同一又は相当部分には、同一符号を付している。
【００１６】
実施の形態１．
図１は、本実施の形態１によるプログラム書き換えシステム及び方法が適用される車両制御システムの構成を示している。なお、図１において、各制御装置及びテスタは、図１に示す以外の構成物も備えているが、本実施の形態１に直接関係しないものについては図示を省略している。
また、図２は、図１に示す車両制御システムにおける第１〜第３種ノードにそれぞれ備えられた記録装置１３、２３ａ、２３ｂ、及び３３の領域構成を示している。
【００１７】
本実施の形態１によるプログラム書き換えシステムは、第１種ノードであるバッテリ制御装置１と、第２種ノードであるＥＰＳ（Ｅｌｅｃｔｒｉｃ  Ｐｏｗｅｒ  Ｓｔｅｅｒｉｎｇ＝電動パワーステアリング）制御装置２ａ及びモータ制御装置２ｂと、第３種ノードであるテスタ３とを含んでいる。
【００１８】
これらのノードは第１のネットワークである車両のＣＡＮ（Ｃｏｎｔｒｏｌｌｅｒ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）ネットワーク６を介して互いに通信可能に接続されている。第２種ノードとしては、上記のＥＰＳ制御装置２ａとモータ制御装置２ｂとが示されているが、これに限らずに、さらに別のノードを含み得ることは言うまでもない。
【００１９】
第１種ノードとしてのバッテリ制御装置１はバッテリ１０を制御し、同様にＥＰＳ制御装置２ａはＥＰＳ２０ａを、モータ制御装置２ｂは駆動用モータ２０ｂを、それぞれ制御するように接続されている。なお、図１に示すテスタ３以外の制御装置は、常時、ＣＡＮネットワーク６に接続されているが、テスタ３は、ＣＡＮネットワーク６に常時接続されているのではなく、プログラムの書き換えや各ノードの故障診断時等、必要に応じて随時接続される。
【００２０】
バッテリ制御装置１の構成と機能について簡単に説明する。マイコン１１は、バッテリ１０の制御に関わる制御量や各種処理値を演算する。ＣＡＮネットワーク用データ送受信部であるデータ送受信部１２は、ＣＡＮネットワーク６を介して、接続された他の制御装置（ＥＰＳ制御装置２ａ、モータ制御装置２ｂ、テスタ３を含む）とデータを送受信する。
また、記録装置１３は、書き換え対象であるバッテリ制御プログラムを保存する第１の記録領域を有している。このバッテリ制御プログラムは、バッテリ制御装置１の動作（制御内容）を決定し、演算を行うものである。
【００２１】
記録装置１３の領域構成について、図２（ａ）を用いて説明する。記録装置１３は、バッテリ制御プログラムを部分的に書き換えるためのプログラム書き換えプログラムを保存するプログラム書き換えプログラム記録領域１３１と、バッテリ制御プログラムを保存する第１の記録領域であるバッテリ制御プログラム記録領域１３２と、バッテリ１０の制御に関わるデータ等を保存するバッテリ制御プログラム用記録領域（データ用）１３３と、バッテリ制御プログラムを部分的に検証するためのプログラム検証プログラムを保存するプログラム検証プログラム記録領域１３４とを備えている。
【００２２】
さらに、バッテリ制御装置１のプログラム書き換え部１４は、記録装置１３のバッテリ制御プログラム記録領域１３２に保存されたバッテリ制御プログラムを部分的に書き換える。その際には、記録装置１３のプログラム書き換えプログラム記録領域１３１に記録されたプログラム書き換えプログラムを用いる。
【００２３】
また、第１の状態検出部である状態検出部１５は、（第１種ノード）自身がバッテリ制御プログラムを書き換え可能な状態であるか否か、あるいはバッテリ制御プログラムが全て書き換えられているか否か等の状態を検出する。状態検出部１５により書き換え可能であることが検出された場合は、ＣＡＮネットワーク６を介してＥＰＳ制御装置２ａ及びモータ制御装置２ｂに通知し、通知を受けたＥＰＳ制御装置２ａ及びモータ制御装置２ｂは、自身が保存する分割プログラムを、ＣＡＮネットワーク６を介してバッテリ制御装置１に送信する。
さらに、バッテリ制御装置１のプログラム検証部９は、記録装置１３のバッテリ制御プログラム記録領域１３２に保存されたバッテリ制御プログラムを検証する。その際には、記録装置１３のプログラム検証プログラム記録領域１３４に記録されたプログラム検証プログラムを用いてＣＡＮネットワーク６上や他のノードでの保存中に分割プログラムが壊れていないか（例えば、ノイズによるビット反転）等を確認する。
【００２４】
バッテリ制御装置１は、ＥＰＳ制御装置２ａ又はモータ制御装置２ｂから分割プログラムを受信する度に、バッテリ制御プログラム記録領域１３２に保存されたバッテリ制御プログラムの該分割プログラムに該当する部分の中で未だ書き換えられていない部分には、プログラム書き換え部１４により書き換えを実施し、既に書き換えられている部分には、プログラム検証部９により書き換えられた内容を検証する。
【００２５】
次に、第２種ノードとしてのＥＰＳ制御装置２ａの構成と機能について簡単に説明する。マイコン２１ａは、ＥＰＳ２０ａの制御量や各種処理値を演算する。データ送受信部２２ａは、ＣＡＮネットワーク６を介して、接続された他の制御装置（バッテリ制御装置１、モータ制御装置２ｂ、テスタ３を含む）とデータの送受信を行う。また、記録装置２３ａは、バッテリ制御プログラムの書き換えプログラムの一部分である分割バッテリ制御プログラム（以下、分割プログラムと略す。）を保存する第２の記録領域を有している。
【００２６】
記録装置２３ａの領域構成について、図２（ｂ）を用いて説明する。記録装置２３ａは、ＥＰＳ２０ａの制御内容を決定するＥＰＳ制御プログラムを保存するＥＰＳ制御プログラム記録領域２３１ａと、ＥＰＳ２０ａの制御に関わるデータ等を保存するＥＰＳ制御プログラム用記録領域（データ用）２３２ａと、分割プログラムを一時的に保存する第２の記録領域である分割バッテリ制御プログラム記録領域２３３ａとを備えている。なお、分割バッテリ制御プログラム記録領域２３３ａには、記録装置２３ａの空き領域等を割り当てることができる。
【００２７】
また、送信可否判断部２４ａは、バッテリ制御装置１への分割プログラムの送信可否を判断する。送信可否判断部２４ａによりバッテリ制御装置１への分割プログラムの送信が可能であると判断された場合には、自身が保存する分割プログラムを、ＣＡＮネットワーク６を介してバッテリ制御装置１に送信する。
【００２８】
次に、やはり第２種ノードとしてのモータ制御装置２ｂの構成と機能について簡単に説明する。マイコン２１ｂは、駆動用モータ２０ｂの制御量や各種処理値を演算する。データ送受信部２２ｂは、ＣＡＮネットワーク６を介して、接続された他の制御装置（バッテリ制御装置１、ＥＰＳ制御装置２ａ、テスタ３を含む）とデータを送受信する。また、記録装置２３ｂは、バッテリ制御プログラムの書き換え用プログラムを分割した一部分である分割プログラムを保存する第２の記録領域を有している。
【００２９】
記録装置２３ｂの領域構成について、図２（ｃ）を用いて説明する。記録装置２３ｂは、駆動用モータ２０ｂの制御内容を決定するモータ制御プログラムを保存するモータ制御プログラム記録領域２３１ｂと、駆動用モータ２０ｂの制御に関わるデータ等が記録されるモータ制御プログラム用記録領域（データ用）２３２ｂと、分割プログラムを一時的に保存する第２の記録領域である分割バッテリ制御プログラム記録領域２３３ｂを備えている。なお、分割バッテリ制御プログラム記録領域２３３ｂには、記録装置２３ｂの空き領域等を割り当てることができる。
【００３０】
また、送信可否判断部２４ｂは、バッテリ制御装置１への分割プログラムの送信可否を判断する。送信可否判断部２４ｂによりバッテリ制御装置１への分割プログラムの送信が可能であると判断された場合には、自ノードが保存する分割プログラムを、ＣＡＮネットワーク６を介してバッテリ制御装置１に送信する。
【００３１】
次に、第３種ノードとしてのテスタ３の構成と機能について簡単に説明する。マイコン３１は、テスタ３の動作に関わる各種処理を実施する。データ送受信部３２は、ＣＡＮネットワーク６を介して、接続された他の制御装置（バッテリ制御装置１、ＥＰＳ制御装置２ａ、モータ制御装置２ｂを含む）とデータを送受信する。また、記録装置３３は、図２（ｄ）に示すように、バッテリ制御プログラムの書き換え用プログラムを保存する第３の記録領域であるバッテリ制御プログラム記録領域３３１を備えている。
【００３２】
さらに、第１のプログラム分割部であるプログラム分割部３４は、記録装置３３のバッテリ制御プログラム記録領域３３１に保存された書き換え用プログラムを部分的に同じ内容が重複するように分割し、分割プログラムを作成する。
ここで書き換え用プログラムと分割プログラムの構成を図１７により説明する。図１７において書き換え用プログラムは０番地からｃ番地までのコードで構成されている。この時、０番地からｂ番地までを分割プログラムＡとし、ａ番地からｃ番地までを分割プログラムＢとして書き換え用プログラムを分割する（ただし、ｃ＞ｂ＞ａ＞０）。こうすることで、ａ番地からｂ番地分は分割プログラムＡ、分割プログラムＢともに同じデータ内容が含まれることとなる。本分割は一例であり、重要な部分を重複させるなどして、部分的に同じ内容が重複する分割プログラムを作成すればよい。この分割プログラム部分を、図示の通り、分割プログラムＣとする。
プログラム分割部３４により作成された分割プログラムは、それぞれＣＡＮネットワーク６を介してＥＰＳ制御装置２ａ及びモータ制御装置２ｂに送信される。
【００３３】
次に、本実施の形態１によるプログラム書き換えシステムの各ノードにおける処理の流れについて、図３及び図４のフローチャートを用いて説明する。
図３は、第１種ノードであるバッテリ制御装置１におけるプログラム書き換えに関する処理の流れを示している。なお、バッテリ制御装置１では、バッテリ１０の制御に関わる通常の処理と、バッテリ制御プログラムの書き換えに関する処理が実施される。プログラム書き換えに関する処理は、テスタ３から書き換え実施の通知（書き換え指示）があった場合に実施される。図３は、特に、テスタ３からの書き換え実施の通知を受信した後の処理フローを示している。
【００３４】
まず、ステップ３０１（Ｓ３０１）において、状態検出部１５は、バッテリ制御装置１がバッテリ１０の制御に関わる通常の処理を実施しているか否かを判断する。通常の処理が実施されている場合（ＹＥＳ）は、ステップ３０２（Ｓ３０２）へ進み、実施されていない場合（ＮＯ）は、ステップ３１２（Ｓ３１２）へ進み、通常の書き換え処理を実施する。なお、Ｓ３１２の通常の書き換え処理とは、テスタ３から、バッテリ制御装置１のバッテリ制御プログラムを書き換える従来の書き換え方法によるものであり、本発明の特徴である書き換え用プログラムを分割して行うものではないため、説明を省略する。
【００３５】
バッテリ制御装置１がバッテリ１０の制御に関わる通常の処理を実施している場合は、その間、バッテリ制御プログラムの書き換え不可状態であるため、Ｓ３０２において、関連ノードへ分割書き換えを実施することを通知し、ステップ３０３（Ｓ３０３）へ進む。Ｓ３０３において、状態検出部１５は再度、通常の処理が実施されているかどうかを判断し、通常の処理が実施されていなければ、書き換え可能（ＹＥＳ）であるためステップ３０４（Ｓ３０４）へ進み、通常の処理が実施されている場合には、終了まで待機する。
【００３６】
続いて、Ｓ３０４において、状態検出部１５は、検証時に問題が発生しているか否か、記録装置１３のバッテリ制御プログラム記録領域１３２に保存されたバッテリ制御プログラムの全ての領域（部分）が書き換えられているか否かを判断する。検証時に問題が発生した場合、若しくは検証時に問題が発生せずに全て書き換えられている場合は（ＹＥＳ）、本処理を終了し、書き換えられていなければ（ＮＯ）、ステップ３０５（Ｓ３０５）へ進む。
【００３７】
Ｓ３０５において、状態検出部１５は、バッテリ制御プログラム記録領域１３２に保存されたバッテリ制御プログラムが書き換え中であるか否かを判断する。いずれの部分も書き換え中でなければ（ＮＯ）、ステップ３０６（Ｓ３０６）へ進み、書き換え中であれば（ＹＥＳ）、書き換えが終了するまで待機する。
【００３８】
Ｓ３０６において、状態検出部１５は、書き換えが終了していないバッテリ制御プログラムの部分に該当する分割プログラムを保存している第２種ノード２ａ，２ｂに対し、データ送受信部１２により送信指示をし、ステップ３０７（Ｓ３０７）へ進む。Ｓ３０７では、データ送受信部１２により分割プログラムを受信し、ステップ３０８（Ｓ３０８）へ進む。
Ｓ３０８では、受信した分割プログラムに該当するバッテリ制御プログラムの一部が既に別の受信した分割プログラムにおいて書き換えられているかどうかを確認する。書き換えられていれば（ＹＥＳ）、ステップ３１０（Ｓ３１０）へ進み、書き換えられていなければ（ＮＯ）、ステップ３０９（Ｓ３０９）へ進む。Ｓ３０９において、プログラム書き換え部１４は、プログラム書き換えプログラムを用い、受信した分割プログラムに該当するバッテリ制御プログラムの部分を書き換え、ステップ３１１（Ｓ３１１）へ進む。
Ｓ３１０において、プログラム検証部９は、プログラム検証プログラムを用い、受信した分割プログラムに該当するバッテリ制御プログラムの部分を検証し、問題の有無を判断し、Ｓ３１１へ進む。Ｓ３１１において、Ｓ３０７で受信した第２種ノードから全ての分割プログラムを受信したかどうかを判断する。受信してない場合は（ＮＯ）、Ｓ３０７へ進み、受信している場合は（ＹＥＳ）、ステップ３０４へ進む。
【００３９】
次に、第２種ノードであるＥＰＳ制御装置２ａ及びモータ制御装置２ｂにおけるプログラム書き換えに関する処理の流れについて、図４（ａ）を用いて説明する。ＥＰＳ制御装置２ａ（又はモータ制御装置２ｂ）では、ＥＰＳ２０ａ（又は駆動用モータ２０ｂ）の制御に関わる通常の処理と、バッテリ制御装置１のプログラム書き換えに関する処理が実施される。プログラム書き換えに関する処理は、テスタ３から書き換え実施の通知があった場合に実施されるが、通常の処理が実施されている時には書き換えに関する処理は実施しない。なお、ＥＰＳ制御装置２ａとモータ制御装置２ｂにおけるプログラム書き換えに関する処理は同じであるので、ここではＥＰＳ制御装置２ａを例に挙げて説明する。
【００４０】
ＥＰＳ制御装置２ａは、テスタ３から書き換え実施の通知を受信後、ステップ４０１（Ｓ４０１）において、分割プログラムの受信を待つ。データ送受信部２２ａにより分割プログラムを受信した場合（ＹＥＳ）は、ステップ４０２（Ｓ４０２）へ進み、受信した分割プログラムを記録装置２３ａの分割バッテリ制御プログラム記録領域２３３ａに保存し、ステップ４０３（Ｓ４０３）へ進む。
【００４１】
Ｓ４０３において、ＥＰＳ制御装置２ａは、バッテリ制御装置１からの分割プログラムの送信指示を待つ。送信指示を受信しない場合（ＮＯ）は、受信するまで待機する。送信指示を受信した場合（ＹＥＳ）、ステップ４０４（Ｓ４０４）へ進み、送信可否判断部２４ａは、分割プログラムを送信すると判断し、データ送受信部２２ａにより、分割バッテリ制御プログラム記録領域２３３ａに保存している分割プログラムをバッテリ制御装置１へ送信し、処理を終了する。
【００４２】
次に、第３種ノードであるテスタ３におけるプログラム書き換えに関する処理の流れについて、図４（ｂ）を用いて説明する。テスタ３では、関連ノードへのプログラム書き換え実施の通知と、書き換え用プログラムの送信処理を実施する。なお、図４（ｂ）は、各ノードに対し、バッテリ制御装置１のプログラム書き換え実施を通知した後の処理フローを示している。
【００４３】
まず、ステップ４１１（Ｓ４１１）において、テスタ３のプログラム分割部３４は、記録装置３３のバッテリ制御プログラム記録領域３３１に記録されている書き換え用プログラムを他の分割プログラムと部分的に重複した内容を含めるように分割し、分割プログラムを作成する。続いてステップ４１２（Ｓ４１２）において、データ送受信部３２により、分割プログラムをそれぞれ各第２種ノードへ送信する。本実施の形態１では、第２種ノードを２つ備えているため、書き換え用プログラムを２つに分割し、分割プログラムＡと分割プログラムＢを作成し、例えば分割プログラムＡをＥＰＳ制御装置２ａに、分割プログラムＢをモータ制御装置２ｂに送信する。
【００４４】
次に、ステップ４１３（Ｓ４１３）において、全ての分割プログラムが送信されたか否かを判断する。全ての分割プログラムが送信されていない場合（ＮＯ）、Ｓ４１２へ進み、全て送信されていた場合には（ＹＥＳ）、処理を終了する。
【００４５】
以上、図３及び図４のフローチャートにより、各ノードのプログラム書き換えに関する処理の流れについて説明したが、次に、これら全てのノードの処理の流れを図５のタイムチャートに沿って説明する。なお、図５において、縦軸は各ノード、横軸は時間を示している。なお、図５では、テスタ３は既にＣＡＮネットワーク６に接続されており、各ノード間の通信は、全てＣＡＮネットワーク６を介して行われる。また、ＥＰＳ制御装置２ａ及びモータ制御装置２ｂは、それぞれ通常の処理を実施していないものとする。
【００４６】
まず、ｔ１０において、バッテリ制御装置１は、バッテリ１０の制御に関わる通常の処理を実施している（処理１０）。続いて、ｔ１１において、テスタ３は、データ送受信部３２により、バッテリ制御装置１に対しプログラム書き換えを実施することを通知する（処理４０）。
【００４７】
テスタ３から書き換え実施通知を受信したバッテリ制御装置１の状態検出部１５は、バッテリ制御プログラムを書き換え可能な状態であるか否かを判断する（処理１１）。ここでは、通常の処理を実施しているため、書き換え不可と判断される。続いてｔ１２において、バッテリ制御装置１は、ＥＰＳ制御装置２ａ、モータ制御装置２ｂ、及びテスタ３に対し、書き換え実施不可であることを通知する（処理１２）。ＥＰＳ制御装置２ａ、モータ制御装置２ｂ、及びテスタ３は、それぞれバッテリ制御装置１が書き換え不可であることを受信する（処理２０、処理３０、処理４１）。
【００４８】
次に、ｔ１３において、バッテリ制御装置１は、バッテリ１０の制御に関わる通常の処理を再開する（処理１０）。ｔ１４において、テスタ３は、バッテリ制御装置１が書き換え不可である通知を受けたので、自身が保存しているバッテリ制御プログラムの書き換え用プログラムを、プログラム分割部３４により分割し、分割プログラムを作成する（処理４２）。なお、ここでは、書き換え用プログラムを分割プログラムＡと分割プログラムＢの２つに分割するものとする。この時、分割プログラムＡと分割プログラムＢには、図１７に示すように、部分的に同じ内容が重複する。上述したように、この重複部分が分割プログラムＣである。
【００４９】
続いて、ｔ１５において、テスタ３は、分割プログラムＡをＥＰＳ制御装置２ａへ送信する（処理４３）。これを受信したＥＰＳ制御装置２ａは、分割プログラムＡを分割バッテリ制御プログラム記録領域２３３ａに保存する（処理２１）。次に、ｔ１６において、テスタ３は、まず、全ての分割プログラムを送信したか否かを確認する。ここでは、分割プログラムＢが未送信のため、処理を継続し、分割プログラムＢをモータ制御装置２ｂへ送信する（処理４４）。
【００５０】
分割プログラムＢを受信したモータ制御装置２ｂは、分割プログラムＢを分割バッテリ制御プログラム記録領域２３３ｂに保存する（処理３１）。さらに、テスタ３は、全ての分割プログラムを送信したか否かを確認し、ここでは全ての分割プログラムが送信済みのため、処理を終了する。ここまでの処理が終了すると、テスタ３をＣＡＮネットワーク６から取り外すことが可能となる。
【００５１】
その後、ｔ１７において、バッテリ制御装置１が通常の処理を終了すると、ｔ１８において、バッテリ制御装置１の状態検出部１５は、バッテリ制御プログラムの書き換えが可能な状態であるか否かを判断する。ここでは、通常の処理を実施していないため、書き換え可能であると判断される。次に、状態検出部１５は、記録装置１３のバッテリ制御プログラム記録領域１３２に保存されているバッテリ制御プログラムの全ての領域（部分）が分割プログラムＣの検証によって問題なく書き換えられているか否かを判断する。ここでは、未だ書き換えられていないと判断される。
【００５２】
さらに、状態検出部１５は、バッテリ制御プログラム記録領域１３２に保存されたバッテリ制御プログラムが書き換え中であるか否かを判断する。ここでは、いずれの部分も書き換え中でないため、バッテリ制御装置１は、ＥＰＳ制御装置２ａへ分割プログラムの送信を指示し（処理１３）、ＥＰＳ制御装置２ａのデータ送受信部２２ａは、分割プログラムの送信指示を受信する（処理２２）。
【００５３】
続いてｔ１９において、ＥＰＳ制御装置２ａの送信可否判断部２４ａは、バッテリ制御装置１へ分割プログラムを送信すると判断し、記録装置２３ａの分割バッテリ制御プログラム記録領域２３３ａに保存している分割プログラムＡを、データ送受信部２２ａにより順次送信する（処理２３）。分割プログラムＡを全て送信し終わるとＥＰＳ制御装置２ａは処理を終了する。一方、分割プログラムＡを受信したバッテリ制御装置１は、受信した分割プログラムＡの該当する書き換え先が既に書き換えられているか否かを判断する。ここでは、未だ書き換えられていないので、プログラム書き換え部１４により、バッテリ制御プログラムの分割プログラムＡに該当する部分を書き換える。順次受信する分割プログラムにおいて、未だ書き換えられていないので、分割プログラムＡに該当する部分を順次書き換えることとなる（処理１４）。
【００５４】
次に、ｔ２０において、状態検出部１５は、バッテリ制御プログラム記録領域１３２に保存されているバッテリ制御プログラムの全ての領域（部分）が検証において問題なく書き換えられているか否かを判断する。ここでは、未だ書き換えられていないと判断される。さらに、状態検出部１５は、バッテリ制御プログラム記録領域１３２に保存されたバッテリ制御プログラムが書き換え中であるか否かを判断する。ここでは、いずれの部分も書き換え中でないため、バッテリ制御装置１は、モータ制御装置２ｂへ分割プログラムの送信を指示し（処理１５）、モータ制御装置２ｂのデータ送受信部２２ｂは、分割プログラムの送信指示を受信する（処理３２）。
【００５５】
続いてｔ２１において、モータ制御装置２ｂの送信可否判断部２４ｂは、バッテリ制御装置１へ分割プログラムを送信すると判断し、記録装置２３ｂの分割バッテリ制御プログラム記録領域２３３ｂに保存している分割プログラムＢを、データ送受信部２２ｂにより順次送信する（処理３３）。分割プログラムＢを全て送信し終わるとモータ制御装置２ｂは処理を終了する。一方、分割プログラムＢを受信したバッテリ制御装置１は、受信した分割プログラムＢの該当する書き換え先が既に書き換えられているか否かを判断する。ここでは、分割プログラムＣの部分は既に書き換えられているので、受信した分割プログラムＢのうち分割プログラムＣを除く部分はプログラム書き換え部１４により、バッテリ制御プログラムの該当する部分を書き換える。一方で分割プログラムＣに該当する部分については、プログラム検証部９により既に書き換えられている内容と、受信した分割プログラムＣの内容が同じであるか検証する（処理１６）。ここでは、同じであり、検証において問題がないとする。その後、状態検出部１５は、検証において問題が発生することなく全てのバッテリ制御プログラムの書き換えが終了しているか否かを判断する。ここでは、問題が発生することなく全て書き換えられているため、書き換えに関する処理を終了する。
【００５６】
なお、本実施の形態１において、テスタ３に分割プログラムを暗号化する暗号化部を備え、暗号化部により暗号化した分割プログラムをＥＰＳ制御装置２ａとモータ制御装置２ｂに送信し、暗号化された分割プログラムをＥＰＳ制御装置２ａとモータ制御装置２ｂに保存するようにしても良い。あるいは、ＥＰＳ制御装置２ａ及びモータ制御装置２ｂに暗号化部を備え、テスタ３から受信した分割プログラムを暗号化部により暗号化してから保存するようにしても良い。
【００５７】
また、暗号化部により暗号化された分割プログラムを復号化する復号化部をバッテリ制御装置１に備え、ＥＰＳ制御装置２ａ又はモータ制御装置２ｂから暗号化された分割プログラムを受信した際に、復号化部により分割プログラムを復号化するようにしても良い。あるいは、ＥＰＳ制御装置２ａ及びモータ制御装置２ｂに復号化部を備え、それらに保存された暗号化された分割プログラムを復号化部により復号化した後、バッテリ制御装置１に送信するようにしても良い。すなわち、第２種ノードに暗号化部と復号化部を備えても良い。
【００５８】
上記のような暗号化部と復号化部を備えることにより、ＣＡＮネットワーク６で第三者に解読される危険性、又はＥＰＳ制御装置２ａ及びモータ制御装置２ｂに保存時に第三者に解読される危険性を低減することができ、プログラム書き換えを安全に実施することが可能となる。
【００５９】
以上のように、本実施の形態１によるプログラム書き換システムでは、テスタ３からバッテリ制御装置１へプログラム書き換え実施を通知し、バッテリ制御装置１がバッテリ１０の制御に関わる通常の処理を実施していた場合に、テスタ３は、バッテリ制御プログラムの書き換え用プログラムを他の分割プログラムと部分的に重複した内容を含む形に分割して分割プログラムを作成し、ＥＰＳ制御装置２ａ及びモータ制御装置２ｂそれぞれに送信する。
【００６０】
その後、バッテリ制御装置１がプログラム書き換え実施可能となった時点で、ＥＰＳ制御装置２ａとモータ制御装置２ｂは、自身が保存する分割プログラムをそれぞれバッテリ制御装置１に送信し、バッテリ制御装置１は、これらを受信する度に、受信した分割プログラムに該当するバッテリ制御プログラムの部分を既に書き換え済みであれば、受信した内容と書き換えられた内容を比較することで検証し、未だ書き換えられていなければ書き換えるものである。
【００６１】
このようなプログラム書き換えシステム及び方法によれば、バッテリ制御装置１が通常の処理を実施していない所定のタイミングでバッテリ制御プログラムを書き換えることができ、且つ、バッテリ制御装置１が通常の処理を実施中であっても、テスタ３は、書き換え用プログラムを他の分割プログラムと部分的に重複した内容を含めるように分割し、ＥＰＳ制御装置２ａとモータ制御装置２ｂにそれぞれ分割プログラムを送信し、送信が終了すると所定のタイミングを待つことなくＣＡＮネットワーク６から切り離すことが可能となるため、効率の良いプログラムの書き換え及び検証を実施することができる。
【００６２】
さらに、書き換え用プログラムを他の分割プログラムと部分的に重複した内容を含めるように分割して複数の第２種ノード（本実施の形態１ではＥＰＳ制御装置２ａとモータ制御装置２ｂの２つ）に保存するため、第２種ノードに全ての書き換え用プログラムを保存できるほどの大きな記録容量を設ける必要がなく、一つのノードがコスト高になることを防ぐことができ、全体としてのコストが抑えられる。
なお、重複させる部分は、プログラムの重要性等を考慮した必要な範囲に限ることで保存する記録容量をできる限り減らすことができる。
【００６３】
実施の形態２．
図６は、本発明の実施の形態２によるプログラム書き換えシステム及び方法が適用される車両制御システムの構成を示している。また、図７は、図６に示す車両制御システムにおける第４及び第５種ノードに備えられた記録装置の領域構成を示している。なお、図６において、各制御装置及び充電ステーションは、図６に示す以外の構成物も備えているが、本実施の形態２に直接関係しないものについては図示を省略し、上記実施の形態１（図１参照。）において説明したものについては説明を省略する。
【００６４】
本実施の形態２による車両制御システムは、上記実施の形態１による車両制御システムのテスタ３（第３種ノード）を含まず、第４種ノードである車載充電器制御装置４と、第５種ノードである充電ステーション５を含む構成を有する。車載充電器制御装置４は、第１のネットワークであるＣＡＮネットワーク６と第２のネットワークである電力線ネットワーク７ａに接続され、ＣＡＮネットワーク６を介して第１種ノードであるバッテリ制御装置１、及び第２種ノードであるＥＰＳ制御装置２ａ及びモータ制御装置２ｂと互いに通信可能である。
【００６５】
また、充電ステーション５は、車載充電器４０と常時接続されているわけではなく、バッテリ１１６の充電時等、必要に応じて随時、車載充電器４０に電力線７で接続される。それと同時に充電ステーション５と車載充電器制御装置４が電力線７で接続され、充電ステーション５と車載充電器制御装置４との間に、車載充電器４０を介して電力線７を使った電力線ネットワーク７ａが確立される。これにより、車載充電器制御装置４と充電ステーション５は、電力線ネットワーク７ａを介して互いに通信可能となる。
【００６６】
まず、充電ステーション５の構成と機能について簡単に説明する。マイコン５１は、充電ステーション５の動作に関わる各種処理を実施する。電力線ネットワーク用データ送受信部５２は、電力線ネットワーク７ａを介して、電力線７に接続された車載充電器制御装置４とデータを送受信する。また、記録装置５３は、バッテリ制御プログラムの書き換え用プログラムを保存する第５の記録領域を有する。
【００６７】
記録装置５３の領域構成について、図７（ｂ）を用いて説明する。記録装置５３は、バッテリ制御プログラムの書き換えプログラムを保存する第５の記録領域であるバッテリ制御プログラム記録領域５３１を備えている。バッテリ制御プログラム記録領域５３１に保存された書き換え用プログラムは、電力線ネットワーク７ａを介して車載充電器制御装置４に送信される。
【００６８】
次に、車載充電器制御装置４の構成と機能について簡単に説明する。マイコン４１は、車載充電器４０の動作に関わる各種処理を実施する。データ送受信部４２は、ＣＡＮネットワーク６を介して、接続された他の制御装置（バッテリ制御装置１、ＥＰＳ制御装置２ａ、及びモータ制御装置２ｂを含む）とデータを送受信する。また、記録装置４３は、第４の記録領域であるバッテリ制御プログラム一時記録領域４３３を有する。
【００６９】
記録装置４３の領域構成について、図７（ａ）を用いて説明する。記録装置４３は、車載充電器４０の制御内容を決定する車載充電器制御プログラムを保存する車載充電器制御プログラム記録領域４３１と、車載充電器４０の制御に関わるデータ等を保存する車載充電器制御プログラム用記録領域（データ用）４３２と、充電ステーション５から受信した書き換え用プログラムを一時的に保存するバッファ領域であるバッテリ制御プログラム一時記録領域４３３を備えている。なお、バッテリ制御プログラム一時記録領域４３３は、バッテリ制御プログラム全てを保存する容量を持つ必要はなく、記録装置４３の空き領域等を割り当てることが出来る。
【００７０】
また、第２のプログラム分割部であるプログラム分割部４４は、バッテリ制御プログラム一時記録領域４３３に保存された書き換え用プログラムが一定量になる毎に他の分割プログラムと部分的に同じ内容が重複するように該書き換え用プログラムを分割し、分割プログラムを作成する。プログラム分割部４４により作成された分割プログラムは、それぞれＣＡＮネットワーク６を介してＥＰＳ制御装置２ａ及びモータ制御装置２ｂに送信される。
【００７１】
また、第３の状態検出部である第１種ノード状態検出部４５は、バッテリ制御装置１がプログラムを書き換え可能な状態であるか否か、あるいはプログラムの全ての領域が書き換えられているか否か等の状態を検出する。第１種ノード状態検出部４５により書き換え可能であることが検出された場合は、ＣＡＮネットワーク６を介してＥＰＳ制御装置２ａ及びモータ制御装置２ｂに通知し、通知を受けたＥＰＳ制御装置２ａ及びモータ制御装置２ｂは、自身が保存する分割プログラムをバッテリ制御装置１に送信する。電力線ネットワーク用データ送受信部４６は、電力線ネットワーク７ａを介して、電力線７に接続された充電ステーション５とデータを送受信する。
【００７２】
次に、本実施の形態２によるプログラム書き換えシステムの各ノードにおける処理の流れについて、図８〜図１０のフローチャートを用いて説明する。ただし、第２種ノードであるＥＰＳ制御装置２ａ及びモータ制御装置２ｂの処理の流れは、図４（ａ）で説明した上記実施の形態１と同じであるため説明を省略する。
【００７３】
図８は、第５種ノードである充電ステーション５におけるプログラム書き換えに関する処理の流れを示している。充電ステーション５では、プログラム書き換え対象であるバッテリ制御装置１への書き換え指示と、書き換え用プログラムの送信処理を実施する。図８は、書き換え指示を送信後の処理フローを示している。
【００７４】
まず、ステップ８０１（Ｓ８０１）において、電力線ネットワーク用データ送受信部５２により、バッテリ制御プログラムの書き換え用プログラムを、電力線ネットワーク７ａを介して車載充電器制御装置４へ送信し、ステップ８０２（Ｓ８０２）に進む。Ｓ８０２では、全ての書き換え用プログラムが送信されたかどうかを判断する。送信されていない場合（ＮＯ）はＳ８０１へ進み、全て送信している場合（ＹＥＳ）には、処理を終了する。
【００７５】
次に、第４種ノードである車載充電器制御装置４におけるプログラム書き換えに関する処理の流れについて、図９を用いて説明する。車載充電器制御装置４では、車載充電器４０の制御に関わる通常の処理と、バッテリ制御装置１のプログラム書き換えに関する処理が実施される。プログラム書き換えに関する処理は、充電ステーション５から書き換え実施の通知があった場合に実施されるが、通常の処理が実施されている時には、書き換えに関する処理は実施しない。図９（ａ）は、充電ステーション５からの書き換え実施の通知を受信後の処理フローを示している。
【００７６】
まず、ステップ９０１（Ｓ９０１）において、第１種ノード状態検出部４５により、バッテリ制御装置１がバッテリ制御プログラムを書き換えることができる状態か否かを判断する。具体的には、バッテリ制御装置１がバッテリ１０の制御に関わる通常の処理を実施しているか否かを判断する。通常の処理が実施されていない場合には、ステップ９０９（Ｓ９０９）へ進み、通常の書き換え処理を実施する。なお、Ｓ９０９の通常の書き換え処理とは、充電ステーション５から車載充電器制御装置４によるデータ転送を経由して、バッテリ制御装置１のバッテリ制御プログラムを書き換える従来の書き換え方法によるものであり、本発明の特徴である書き換え用プログラムを分割して行うものではないため、説明を省略する。
【００７７】
Ｓ９０１において、バッテリ制御装置１が通常の処理を実施している場合、プログラム書き換え不可であるため（ＮＯ）、ステップ９０２（Ｓ９０２）へ進み、データ送受信部４２によりＣＡＮネットワーク６を介して関連ノードへ分割書き換えを実施することを連絡する。さらに、ステップ９０３（Ｓ９０３）において、充電ステーションから書き換え用プログラムを受信し、他の分割プログラムと部分的に重複した内容を含めるように分割して作成した分割プログラムを第２種ノードに送信する送受信処理を実施する。Ｓ９０３の送受信処理については、図９（ｂ）について後述する。
【００７８】
次に、ステップ９０４（Ｓ９０４）において、第１種ノード状態検出部４５は、バッテリ制御装置１が通常の処理をしているか否かにより、プログラムを書き換えることができる状態か再び判断する。書き換え可能な場合（ＹＥＳ）は、ステップ９０５（Ｓ９０５）へ進み、書き換え不可の場合（ＮＯ）は書き換え可能となるまで待機する。
【００７９】
Ｓ９０５では、さらに、第１種ノード状態検出部４５により、バッテリ制御装置１のバッテリ制御プログラム記録領域１３２に保存されたバッテリ制御プログラムの全ての領域（部分）が書き換えられているか否かを判断する。全て書き換えられている場合（ＹＥＳ）は、ステップ９０８（Ｓ９０８）へ進み、データ送受信部４２によりバッテリ制御装置１へ全ての書き換えが終了したことを送信し、処理を終了する。
【００８０】
また、Ｓ９０５において、全て書き換えられていない場合（ＮＯ）は、ステップ９０６（Ｓ９０６）へ進み、第１種ノード状態検出部４５は、バッテリ制御装置１がプログラム書き換え中であるか否かを判断する。バッテリ制御プログラム記録領域１３２のいずれの部分も書き換え中でなければ（ＮＯ）、ステップ９０７（Ｓ９０７）へ進み、書き換え中であれば（ＹＥＳ）、書き換えが終了するまで待機する。
【００８１】
Ｓ９０７において、第１種ノード状態検出部４５は、バッテリ制御プログラム記録領域１３２に保存されているバッテリ制御プログラムの書き換えが終了していない部分を検出し、その部分に該当する分割プログラムを保存している第２種ノードに対し、データ送受信部４２により分割プログラムの送信を指示する。
【００８２】
次に、図９（ｂ）を用い、Ｓ９０３の送受信処理の詳細について説明する。ステップ９１１（Ｓ９１１）において、充電ステーション５から送信されたバッテリ制御プログラムの書き換え用プログラムを、一定量受信しているか否か判断する。書き換え用プログラムは容量が大きいため、全て受信するまでに或る程度の時間を必要とし、受信したプログラムは適時、バッテリ制御プログラム一時記録領域４３３に保存される。Ｓ９１１において、一定量受信している場合（ＹＥＳ）は、ステップ９１２（Ｓ９１２）へ進み、一定量受信していない場合（ＮＯ）は、一定量受信するまで待機する。
【００８３】
Ｓ９１２において、プログラム分割部４４は、バッテリ制御プログラム一時記録領域４３３に保存されているバッテリ制御プログラムを他の分割プログラムと部分的に重複した内容が含まれるように分割し、分割プログラムを作成する。続いてステップ９１３（Ｓ９１３）において、データ送受信部４２により、分割プログラムを第２種ノード（ここではＥＰＳ制御装置２ａ又はモータ制御装置２ｂ）へ送信する。さらに、ステップ９１４（Ｓ９１４）では、充電ステーション５から書き換え用プログラムを全て受信したか否かを判断する。受信していない場合（ＮＯ）、Ｓ９１１へ進み、受信している場合（ＹＥＳ）は処理を終了する。
【００８４】
次に、第１種ノードであるバッテリ制御装置１におけるプログラム書き換えに関する処理の流れについて、図１０を用いて説明する。なお、バッテリ制御装置１では、バッテリ１０の制御に関わる通常の処理と、バッテリ制御プログラムの書き換えに関する処理が実施される。プログラム書き換えに関する処理は、充電ステーション５からの書き換え指示があった場合に実施され、図１０は、充電ステーション５から書き換え実施の通知を受信後の処理フローを示している。
【００８５】
まず、ステップ１０１（Ｓ１０１）において、車載充電器制御装置４から分割書き換え指示（図９のＳ９０２）があったか否かを判断する。分割書き換え指示があった場合（ＹＥＳ）は、ステップ１０２（Ｓ１０２）へ進み、指示がなかった場合（ＮＯ）は、ステップ１０８（Ｓ１０８）において通常のプログラム書き換え処理を実施する。なお、Ｓ１０８の通常の書き換え処理とは、充電ステーション５から車載充電器制御装置４でのデータ転送を経由して、バッテリ制御装置１のバッテリ制御プログラムを書き換える従来の書き換え方法によるものであり、本発明の特徴である書き換え用プログラムを分割して行うものではないため、説明を省略する。Ｓ１０２において、データ送受信部１２は、分割プログラムの受信を待ち、受信した場合（ＹＥＳ）はステップ１０３（Ｓ１０３）へ進む。Ｓ１０２において受信しない場合（ＮＯ）は、受信するまで待機する。
【００８６】
Ｓ１０３では、受信した分割プログラムに該当するバッテリ制御プログラムの部分が既に別の受信した分割プログラムにおいて書き換えられているかどうかを確認する。書き換えられていれば（ＹＥＳ）、ステップ１０５（Ｓ１０５）へ進み、書き換えられていなければ（ＮＯ）、ステップ１０４（Ｓ１０４）へ進む。Ｓ１０４において、プログラム書き換え部１４は、プログラム書き換えプログラムを用い、受信した分割プログラムに該当するバッテリ制御プログラムの部分を書き換え、ステップ１０７（Ｓ１０７）へ進む。Ｓ１０５において、プログラム検証部９は、プログラム検証プログラムを用い、受信した分割プログラムに該当するバッテリ制御プログラムの部分を検証し、ステップ１０６（Ｓ１０６）へ進む。Ｓ１０６では、検証結果に基づき問題発生の有無を判断し、問題が発生していれば（ＹＥＳ）、書き換え処理を終了し、問題が発生していなければ、ステップＳ１０７へ進む。さらに、Ｓ１０７において、バッテリ制御プログラムを全ての部分を書き換えたか否かを、車載充電器制御装置４からの通知（図９のＳ９０８）により判断する。通知がない場合（ＮＯ）は、Ｓ１０２へ進み、他の分割プログラムの受信を待ち、通知があった場合（ＹＥＳ）は処理を終了する。
【００８７】
以上、図８〜図１０（及び図４（ａ））のフローチャートにより、各ノードのプログラム書き換えに関する処理の流れについて説明したが、次に、これら全てのノードの処理の流れを図１１のタイムチャートに沿って説明する。図１１において、縦軸は各ノード、横軸は時間を示している。なお、図１１では、充電ステーション５と車載充電器制御装置４は、既に車載充電器４０を介して電力線ネットワーク７ａで接続されており、ＥＰＳ制御装置２ａ及びモータ制御装置２ｂは、それぞれ通常の処理を実施していないものとする。
【００８８】
ｔ３０において、バッテリ制御装置１は、バッテリ１０の制御に関わる通常の処理を実施している（処理１０）。ｔ３１において、充電ステーション５は、電力線ネットワーク用データ送受信部５２により、電力線ネットワーク７ａを介して車載充電器制御装置４へバッテリ制御装置１のプログラム書き換えを実施することを通知する（処理６０）。
【００８９】
プログラム書き換え実施の通知を受信した車載充電器制御装置４は、第１種ノード状態検出部４５により、バッテリ制御装置１がプログラム書き換え可能か否かを判断する（処理５０）。ここでは、通常の処理を実施しているため書き換え不可と判断する。
【００９０】
続いて、ｔ３２において、車載充電器制御装置４は、バッテリ制御装置１、ＥＰＳ制御装置２ａ、及びモータ制御装置２ｂに対して、書き換え不可であるため分割書き換えを実施することを通知する（処理５１）。バッテリ制御装置１、ＥＰＳ制御装置２ａ、及びモータ制御装置２ｂは、分割書き換え実施の通知をそれぞれ受信する（処理１７、処理２０、処理３０）。
【００９１】
ｔ３３において、バッテリ制御装置１は、通常の処理を再開する（処理１０）。続いてｔ３４において、充電ステーション５は、電力線ネットワーク７ａを介して、自身が保存するバッテリ制御プログラムの書き換え用プログラムを車載充電器制御装置４へ送信開始する（処理６１）。車載充電器制御装置４は、受信した書き換え用プログラムを適時、バッテリ制御プログラム一時記録領域４３３に保存する（処理５２）。
【００９２】
ｔ３５において、車載充電器制御装置４は、受信した書き換え用プログラムが一定量を超えると、プログラム分割部４４により、バッテリ制御プログラム一時記録領域４３３に保存されている書き換え用プログラムから、他の分割プログラム（ここでは分割プログラムＢ）と部分的に重複した内容（この部分を分割プログラムＣとする）を含めるように分割プログラムＡを作成する。さらに、作成した分割プログラムＡをデータ送受信部４２によりＥＰＳ制御装置２ａへ送信する（処理５３）。ＥＰＳ制御装置２ａは、受信した分割プログラムＡを分割バッテリ制御プログラム記録領域２３３ａへ保存する（処理２１）。
【００９３】
次に、ｔ３６において、受信した書き換え用プログラムが再び一定量を超えると、車載充電器制御装置４は、プログラム分割部４４により、バッテリ制御プログラム一時記録領域４３３に記録されている書き換え用バッテリ制御プログラムから、他の分割プログラム（ここでは分割プログラムＡ）と部分的に重複した内容（この部分を分割プログラムＣとする）が重複するように分割プログラムＢを作成する。さらに、作成した分割プログラムＢをデータ送受信部４２によりモータ制御装置２ｂへ送信する（処理５４）。モータ制御装置２ｂは、受信した分割プログラムＢを分割バッテリ制御プログラム記録領域２３３ｂへ保存する（処理３１）。
【００９４】
車載充電器制御装置４が全ての書き換え用プログラムを受信すると、充電ステーション５は、プログラム書き換えに関する処理を終了する。これ以降は、充電ステーション５は車載充電器４０と接続している必要はなく、バッテリ制御装置１がプログラム書き換え中であっても取り外し可能である。
【００９５】
ｔ３７において、バッテリ制御装置１が通常の処理を終了すると、ｔ３８において、車載充電器制御装置４の第１種ノード状態検出部４５は、バッテリ制御装置１がプログラムの書き換えが可能な状態であるか否かを判断する。ここでは、通常の処理を実施していないため、書き換え可能であると判断される。
次に、第１種ノード状態検出部４５は、記録装置１３のバッテリ制御プログラム記録領域１３２に保存されているバッテリ制御プログラムの全ての領域（部分）が書き換えられているか否かを判断する。ここでは、書き換えられていないと判断される。
【００９６】
さらに、第１種ノード状態検出部４５は、バッテリ制御装置１のバッテリ制御プログラム記録領域１３２が書き換え中か否かを判断する。ここでは、書き換え中でないため、データ送受信部４２により、ＥＰＳ制御装置２ａへ分割プログラムの送信を指示する（処理５５）。ＥＰＳ制御装置２ａのデータ送受信部２２ａは、分割プログラムの送信指示を受信する（処理２２）。
【００９７】
続いてｔ３９において、ＥＰＳ制御装置２ａの送信可否判断部２４ａは、バッテリ制御装置１へ分割プログラムを送信すると判断し、記録装置２３ａの分割バッテリ制御プログラム記録領域２３３ａに保存している分割プログラムＡを、データ送受信部２２ａにより順次送信する（処理２３）。分割プログラムＡを全て送信し終わるとＥＰＳ制御装置２ａは処理を終了する。一方、分割プログラムＡを受信したバッテリ制御装置１は、受信した分割プログラムＡの該当する書き換え先が既に書き換えられているか否かを判断する。ここでは、未だ書き換えられていないので、プログラム書き換え部１４により、バッテリ制御プログラムの分割プログラムＡに該当する部分を書き換える。順次受信する分割プログラムにおいて、未だ書き換えられていないので、分割プログラムＡに該当する部分を順次書き換えることとなる（処理１４）。
【００９８】
さらに、ｔ４０において、車載充電器制御装置４の第１種ノード状態検出部４５は、バッテリ制御装置１がプログラムの書き換えが可能な状態に在るか否かを判断する。ここでは、通常の処理を実施していないため、書き換え可能であると判断される。次に、第１種ノード状態検出部４５は、記録装置１３のバッテリ制御プログラム記録領域１３２に保存されているバッテリ制御プログラムの全ての領域（部分）が書き換えられているか否かを判断する。ここでは、書き換えられていないと判断される。
【００９９】
さらに、第１種ノード状態検出部４５は、バッテリ制御装置１のバッテリ制御プログラム記録領域１３２が書き換え中か否かを判断する。ここでは、書き換え中でないため、データ送受信部４２により、モータ制御装置２ｂへ分割プログラムの送信を指示する（処理５６）。モータ制御装置２ｂのデータ送受信部２２ｂは、分割プログラムの送信指示を受信する（処理３２）。
【０１００】
続いてｔ４１において、モータ制御装置２ｂの送信可否判断部２４ｂは、バッテリ制御装置１へ分割プログラムを送信すると判断し、記録装置２３ｂの分割バッテリ制御プログラム記録領域２３３ｂに記録している分割プログラムＢを、データ送受信部２２ｂにより順次送信する（処理３３）。分割プログラムＢを全て送信し終わるとモータ制御装置２ｂは処理を終了する。
一方、分割プログラムＢを受信したバッテリ制御装置１は、受信した分割プログラムＢの該当する書き換え先が既に書き換えられているか否かを判断する。ここでは、分割プログラムＣの部分は既に書き換えられているので、受信した分割プログラムＢのうち分割プログラムＣを除く部分はプログラム書き換え部１４により、バッテリ制御プログラムの該当する部分を書き換える。一方で分割プログラムＣに該当する部分は、プログラム検証部９により既に書き換えられている内容と、受信した分割プログラムＣの内容が同一であるか否かを検証する（処理１６）。ここでは、検証結果に問題はないとするが、仮に検証の段階で問題（書き換え済みの内容との不一致）が発生した場合には、書き換えの処理を全て終了する。
【０１０１】
その後、ｔ４２において、車載充電器制御装置４の第１種ノード状態検出部４５は、バッテリ制御プログラムの全ての書き換えが終了しているか否かを判断する。ここでは、全て書き換えられているため、データ送受信部４２によりバッテリ制御装置１へプログラム書き換えが終了したことを通知し、処理を終了する（処理５７）。この通知を受信したバッテリ制御装置１は、プログラム書き換えに関する処理を終了する（処理１８）。
【０１０２】
以上のように、本実施の形態２によるプログラム書き換えシステムでは、充電ステーション５から車載充電器制御装置４にバッテリ制御装置１のプログラム書き換え実施を通知した際に、バッテリ制御装置１がバッテリ１０の制御に関わる通常の処理を実施していた場合には、充電ステーション５は、バッテリ制御プログラムの書き換え用プログラムを車載充電器制御装置４に送信し、これを受信した車載充電器制御装置４は、一定量受信（保存）すると他の分割プログラムと部分的に重複した内容（この部分を分割プログラムＣとする）を含めるように分割プログラムＡを作成してＥＰＳ制御装置２ａに送信し、再度一定量保存すると重複した内容（この部分は、図１７に示した分割プログラムＣである。）を含めた分割プログラムＢを作成してモータ制御装置２ｂに送信する。
【０１０３】
その後、バッテリ制御装置１がプログラム書き換え可能となった時点で、ＥＰＳ制御装置２ａは分割プログラムＡを、モータ制御装置２ｂは分割プログラムＢを、それぞれバッテリ制御装置１に送信し、バッテリ制御装置１は、これらを受信する度に受信した分割プログラムに該当するバッテリ制御プログラムの部分を既に書き換え済みであれば、検証し、未だ書き換えられていなければ、書き換えるものである。
【０１０４】
このようなプログラム書き換えシステムによれば、上記実施の形態１と同様に、バッテリ制御装置１が通常の処理を実施していない所定のタイミングでバッテリ制御プログラムを書き換え及び検証を実行することができる。これとともに、バッテリ制御装置１が通常の処理を実施中であっても、充電ステーション５は、書き換え用プログラムを車載充電器制御装置４に送信し、送信が終了すると所定のタイミングを待つことなく電力線ネットワーク７ａから切り離すことが可能となるため、効率の良いプログラムの書き換え及び検証を実施することができる。
【０１０５】
さらに、本実施の形態２では、車載充電器制御装置４は、書き換え用プログラムを一定量受信（保存）する毎に他の分割プログラムと部分的に重複した内容を含めるように分割プログラムを作成し、その都度、第２種ノードであるＥＰＳ制御装置２ａとモータ制御装置２ｂに送信するため、車載充電器制御装置４に全ての書き換え用プログラムを保存できるほどの大きな記録容量を設ける必要はない。また、上記実施の形態１と同様に、第２種ノードにも大きな記録容量を設ける必要がなく、一つのノードがコスト高になることを防ぐことができ、全体としてのコストが抑えられる。
なお、重複させる部分は、プログラムの重要性等を考慮した必要な範囲に限ることで保存する記録容量をできる限り減らすことができる。
【０１０６】
実施の形態３．
図１２は、本発明の実施の形態３によるプログラム書き換えシステム及び方法が適用される車両制御システムの構成を示している。なお、図１２において、各制御装置及び充電ステーションは、図１２に示す以外の構成物も備えているが、本実施の形態３に直接関係しないものについては図示を省略する。
【０１０７】
上記実施の形態２では、第４種ノードである車載充電器制御装置４に第１種ノード状態検出部４５を備えていたが、本実施の形態３では、第２種ノードであるＥＰＳ制御装置２ａとモータ制御装置２ｂに、それぞれ第１種ノード状態検出部２５ａ、２５ｂを備えたものである。なお、それ以外の構成及び機能については上記実施の形態２と同様であるため説明を省略する。
【０１０８】
ＥＰＳ制御装置２ａとモータ制御装置２ｂに備えられた第１種ノード状態検出部２５ａ、２５ｂは、上記実施の形態２において車載充電器制御装置４に備えられた第１種ノード状態検出部４５（図６参照）と同様に、バッテリ制御装置１がバッテリ制御プログラムを書き換え可能な状態であるか否か、あるいはバッテリ制御プログラムが全て書き換えられているか否か等の状態を検出するものである。
【０１０９】
本実施の形態３によるプログラム書き換えシステムの各ノードにおける処理の流れについて、図１３及び図１４のフローチャートを用いて説明する。ただし、第１種ノードであるバッテリ制御装置１と第５種ノードである充電ステーション５の処理の流れは、上記実施の形態２と同じであるため説明を省略する（図８、図１０参照）。
【０１１０】
図１３は、第２種ノードであるＥＰＳ制御装置２ａ及びモータ制御装置２ｂにおけるプログラム書き換えに関する処理の流れを示している。ＥＰＳ制御装置２ａ（又はモータ制御装置２ｂ）では、ＥＰＳ２０ａ（又は駆動用モータ２０ｂ）の制御に関わる通常の処理と、バッテリ制御装置１のプログラム書き換えに関する処理が実施される。プログラム書き換えに関する処理は、充電ステーション５から書き換え実施の通知があった場合に実施されるが、通常の処理が実施されている時には書き換えに関する処理は実施しない。なお、ＥＰＳ制御装置２ａ及びモータ制御装置２ｂにおけるプログラム書き換えに関する処理は同じであるので、ここではＥＰＳ制御装置２ａを例に挙げて説明する。
【０１１１】
ＥＰＳ制御装置２ａは、充電ステーション５から車載充電器制御装置４を介して書き換え実施の通知を受信後、ステップ１３１（Ｓ１３１）において、第１種ノード状態検出部２５ａにより、バッテリ制御装置１がバッテリ制御プログラムを書き換えることができる状態か否かを判断する。具体的には、バッテリ制御装置１がバッテリ１０の制御に関する通常の処理を実施しているか否かを判断する。通常の処理が実施されていない場合には通常のプログラム書き換え処理が可能であるため処理を終了する。
【０１１２】
Ｓ１３１において、バッテリ制御装置１が通常の処理を実施している場合、プログラム書き換え不可であるため（ＮＯ）、ステップ１３２（Ｓ１３２）へ進む。Ｓ１３２では、データ送受信部２２ａにより関連ノードへ分割書き換えを実施することを通知し、ステップ１３３（Ｓ１３３）へ進む。Ｓ１３３において、車載充電器制御装置４から分割プログラムを受信した場合（ＹＥＳ）、ステップ１３４（Ｓ１３４）へ進む。Ｓ１３３において、分割プログラムを受信していない場合（ＮＯ）、受信するまで待機する。
【０１１３】
続いてＳ１３４では、データ送受信部２２ａにより受信した分割プログラムを、記録装置２３ａの分割バッテリ制御プログラム記録領域２３３ａへ記録し、ステップ１３５（Ｓ１３５）へ進む。Ｓ１３５において、第１種ノード状態検出部２５ａにより、バッテリ制御装置１がバッテリ制御プログラムを書き換えることができる状態か否かを、再度判断する。書き換え可能な場合（ＹＥＳ）はステップ１３６（Ｓ１３６）へ進み、書き換え不可の場合（ＮＯ）は、書き換え可能になるまで待機する。
【０１１４】
Ｓ１３６では、第１種ノード状態検出部２５ａにより、バッテリ制御装置１がプログラム書き換え中であるか否かを判断する。バッテリ制御装置１のバッテリ制御プログラム記録領域１３２のいずれの部分も書き換え中でなければ（ＮＯ）、ステップ１３７（Ｓ１３７）へ進み、書き換え中であれば（ＹＥＳ）、書き換えが終了するまで待機する。
【０１１５】
続いてＳ１３７において、送信可否判断部２４ａは、分割プログラムを送信すると判断し、データ送受信部２２ａにより、記録装置２３ａの分割バッテリ制御プログラム記録領域２３３ａに記録している分割プログラムをバッテリ制御装置１へ順次送信し、全て送信し終わるとステップ１３８（Ｓ１３８）へ進む。
【０１１６】
Ｓ１３８では、第１種ノード状態検出部２５ａにより、バッテリ制御装置１のバッテリ制御プログラムが全て書き換えられているか否かを判断する。全て書き換えられている場合（ＹＥＳ）は、ステップ１３９（Ｓ１３９）へ進み、データ送受信部２２ａにより、関連ノードへ全ての書き換えが終了したことを連絡し、処理を終了する。全て書き換えられていない場合（ＮＯ）も、自身が保存する分割プログラムを送信済みのため、処理を終了する。
【０１１７】
次に、第４種ノードである車載充電器制御装置４におけるプログラム書き換えに関する処理の流れについて、図１４を用いて説明する。車載充電器制御装置４では、車載充電器４０の制御に関わる通常の処理と、バッテリ制御装置１のプログラム書き換えに関する処理が実施される。プログラム書き換えに関する処理は、充電ステーション５から書き換え実施の通知があった場合に実施されるが、通常の処理が実施されている時には、プログラム書き換えに関する処理は実施しない。図１４は、充電ステーション５からの書き換え実施の通知を受信後の処理フローを示している。
【０１１８】
まず、ステップ１４１（Ｓ１４１）において、第２種ノードであるＥＰＳ制御装置２ａ又はモータ制御装置２ｂから、分割書き換え指示があったか否かを判断する。分割書き換え指示があった場合（ＹＥＳ）は、ステップ１４２（Ｓ１４２）へ進み、指示がなかった場合（ＮＯ）はステップ１４６（Ｓ１４６）に進み、通常の書き換え処理を実施する。なお、Ｓ１４６の通常の書き換え処理とは、充電ステーション５から車載充電器制御装置４でのデータ転送を経由して、バッテリ制御装置１のバッテリ制御プログラムを書き換える従来の書き換え方法によるものであり、本発明の特徴である書き換え用プログラムを分割して行うものではないため、説明を省略する。
【０１１９】
Ｓ１４２では、第５種ノードである充電ステーション５から送信される書き換え用バッテリ制御プログラムを、一定量受信しているか否かを判断する。充電ステーション５から送信される書き換え用バッテリ制御プログラムは容量が大きいため、全て受信するまでには或る程度の時間を要する。受信した書き換え用バッテリ制御プログラムは適時、バッテリ制御プログラム一時記録領域４３３に保存される。Ｓ１４２において、一定量受信している場合（ＹＥＳ）には、ステップ１４３（Ｓ１４３）へ進み、一定量受信していない場合（ＮＯ）は、一定量受信するまで待機する。
【０１２０】
続いて、Ｓ１４３において、プログラム分割部４４は、バッテリ制御プログラム一時記録領域４３３に記録されているバッテリ制御プログラムを他の分割プログラムと部分的に重複した内容を含めるように分割し、分割プログラムを作成する。続いてステップ１４４（Ｓ１４４）において、データ送受信部４２により、分割プログラムを、それぞれ第２種ノード（ここではＥＰＳ制御装置２ａ又はモータ制御装置２ｂ）へ送信する。さらに、ステップ１４５（Ｓ１４５）では、充電ステーション５から書き換え用バッテリ制御プログラムを全て受信したか否かを判断する。受信していない場合（ＮＯ）、Ｓ１４２へ進み、受信している場合（ＹＥＳ）には処理を終了する。
【０１２１】
以上、図８、図１０、図１３、及び図１４のフローチャートにより、各ノードのプログラム書き換えに関する処理の流れについて説明したが、次に、これら全てのノードの処理の流れを図１５のタイムチャートに沿って説明する。図１５において、縦軸は各ノード、横軸は時間を示している。
まず、図１５では、充電ステーション５と車載充電器制御装置４は、既に車載充電器４０を介して電力線ネットワーク７ａで接続され、ＥＰＳ制御装置２ａ及びモータ制御装置２ｂは、それぞれ通常動作は実施していないものとする。
【０１２２】
その後、ｔ５０において、バッテリ制御装置１は、通常処理であるバッテリ１０の制御を実施している（処理１０）。続いて、ｔ５１において、充電ステーション５は、電力線ネットワーク用データ送受信部５２により、電力線ネットワーク７ａを介して車載充電器制御装置４へバッテリ制御装置１のバッテリ制御プログラムの書き換えを実施することを通知する（処理６０）。車載充電器制御装置４は、バッテリ制御プログラムの書き換えを実施することを、電力線ネットワーク７ａを介して受信する（処理５５）。
【０１２３】
続いて、ｔ５２において、車載充電器制御装置４は、バッテリ制御装置１、ＥＰＳ制御装置２ａ、及びモータ制御装置２ｂに対して、バッテリ制御プログラムの書き換えを実施することを通知する（処理５６）。バッテリ制御装置１、ＥＰＳ制御装置２ａ、及びモータ制御装置２ｂはそれぞれ、書き換えを実施することを受信する（処理８０、処理２５、処理３５）。
【０１２４】
次に、ｔ５３において、ＥＰＳ制御装置２ａは、第１種ノード状態検出部２５ａにより、バッテリ制御装置１がプログラムの書き換えが可能な状態に在るか否かを判断する。ここでは、通常の処理（処理６０）を実施しているため、書き換え不可であると判断し、バッテリ制御装置１と車載充電器制御装置４に対して、書き換え実施不可であるため分割書き換えを実施することを通知する（処理２６）。バッテリ制御装置１と車載充電器制御装置４は、分割書き換え実施の通知をそれぞれ受信する（処理８１、処理５７）。
【０１２５】
続いて、ｔ５４において、モータ制御装置２ｂは、第１種ノード状態検出部２５ｂにより、バッテリ制御装置１がプログラムの書き換えが可能な状態であるかどうかを判断する。ここでは、通常の処理を実施しているため、書き換え不可であると判断し、バッテリ制御装置１と車載充電器制御装置４に対して、書き換え不可であるため分割書き換えを実施することを通知する（処理３６）。バッテリ制御装置１と車載充電器制御装置４は、分割書き換え実施の通知をそれぞれ受信する（処理８２、処理５８）。
【０１２６】
ｔ５５において、バッテリ制御装置１は通常の処理を再開する（処理１０）。続いてｔ５６において、充電ステーション５は、電力線ネットワーク７ａを介して、自身が保存している書き換え用プログラムの車載充電器制御装置４への送信を開始する（処理６１）。車載充電器制御装置４は、受信した書き換え用プログラムを適時、バッテリ制御プログラム一時記録領域４３３に保存する（処理５２）。
【０１２７】
ｔ５７において、車載充電器制御装置４は、受信した書き換え用プログラムが一定量を超えると、プログラム分割部４４により、バッテリ制御プログラム一時記録領域４３３に保存されている書き換え用プログラムから、他の分割プログラム（ここでは分割プログラムＢ）と部分的に重複した内容（この部分を分割プログラムＣとする。）を含めるように分割プログラムＡを作成する。続いて、作成した分割プログラムＡをデータ送受信部４２によりＥＰＳ制御装置２ａへ送信する（処理５３）。ＥＰＳ制御装置２ａは、受信した分割プログラムＡを分割バッテリ制御プログラム記録領域２３３ａへ保存する（処理２１）。
【０１２８】
また、ｔ５８において、車載充電器制御装置４が受信した書き換え用プログラムが再び一定量を超えると、車載充電器制御装置４は、プログラム分割部４４により、バッテリ制御プログラム一時記録領域４３３に記録されている書き換え用プログラムから、他の分割プログラム（ここでは分割プログラムＡ）と部分的に重複した内容（この部分を、図１７に示すように、分割プログラムＣとする）を含めるように分割プログラムＢを作成する。続いて、作成した分割プログラムＢをデータ送受信部４２によりモータ制御装置２ｂへ送信する（処理５４）。モータ制御装置２ｂは、受信した分割プログラムＢを分割バッテリ制御プログラム記録領域２３３ｂへ記録する（処理３１）。
【０１２９】
車載充電器制御装置４が全ての書き換え用プログラムを受信すると、充電ステーション５は、プログラム書き換えに関する処理を終了する。これ以降は、充電ステーション５は車載充電器４０と接続していなくても良く、バッテリ制御装置１がプログラム書き換え中であっても取り外し可能である。
【０１３０】
ｔ５９において、バッテリ制御装置１が通常の処理を終了すると、ｔ６０において、ＥＰＳ制御装置２ａの第１種ノード状態検出部２５ａは、バッテリ制御装置１がプログラムの書き換えが可能な状態であるか否かを判断する。ここでは、通常の処理を実施していないため、書き換え可能であると判断される。次に、第１種ノード状態検出部２５ａは、バッテリ制御プログラムが書き換え中であるか否かを判断する。ここでは、書き換え中でないと判断される（処理２７）。
【０１３１】
続いてｔ６１において、ＥＰＳ制御装置２ａの送信可否判断部２４ａは、バッテリ制御装置１へ分割プログラムを送信すると判断し、記録装置２３ａの分割バッテリ制御プログラム記録領域２３３ａに保存している分割プログラムＡを、データ送受信部２２ａにより順次送信する（処理２３）。一方、分割プログラムＡを受信したバッテリ制御装置１は、受信した分割プログラムＡの該当する書き換え先が既に書き換えられているか否かを判断する。ここでは、未だ書き換えられていないので、プログラム書き換え部１４により、バッテリ制御プログラムの分割プログラムＡに該当する部分を書き換える。順次受信する分割プログラムにおいて、未だ書き換えられていないので、分割プログラムＡに該当する部分を順次書き換えることとなる（処理１４）。
【０１３２】
次に、ｔ６２において、ＥＰＳ制御装置２ａの第１種ノード状態検出部２５ａは、バッテリ制御装置１のバッテリ制御プログラムが全て書き換えられているか否かを判断する。ここでは、書き換えられていないため、処理を終了する（処理２８）。
【０１３３】
ｔ６３において、モータ制御装置２ｂの第１種ノード状態検出部２５ｂは、バッテリ制御装置１がプログラムの書き換えが可能な状態であるか否かを判断する。ここでは、通常の処理を実施していないため、書き換え可能であると判断される。次に、第１種ノード状態検出部２５ｂは、バッテリ制御プログラムが書き換え中であるか否かを判断する。ここでは、書き換え中でないと判断される（処理３７）。
【０１３４】
続いてｔ６４において、モータ制御装置２ｂの送信可否判断部２４ｂは、バッテリ制御装置１へ分割プログラムを送信すると判断し、記録装置２３ｂの分割バッテリ制御プログラム記録領域２３３ｂに保存している分割プログラムＢを、データ送受信部２２ｂにより順次送信する（処理３３）。
一方、分割プログラムＢを受信したバッテリ制御装置１は、受信した分割プログラムＢの該当する書き換え先が既に書き換えられているか否かを判断する。ここでは、分割プログラムＣの部分は既に書き換えられているので、受信した分割プログラムＢのうち分割プログラムＣを除く部分は、プログラム書き換え部１４により、バッテリ制御プログラムの該当する部分を書き換える。一方で分割プログラムＣに該当する部分は、プログラム検証部９により既に書き換えられている内容と、受信した分割プログラムＣの内容が同一であるか否かを検証する（処理１６）。ここでは、検証結果に問題は無いとするが、仮に検証の段階で問題（書き換え済みの内容との不一致）が発生した場合には、書き換えの処理を全て終了する。
【０１３５】
その後、ｔ６５において、モータ制御装置２ｂの第１種ノード状態検出部２５ｂは、バッテリ制御プログラムが全て書き換えられているか否かを判断する。ここでは、全て書き換えられているため、データ送受信部２２ｂによりバッテリ制御装置１へプログラム書き換えが終了したことを通知し、処理を終了する（処理３８）。これを受信したバッテリ制御装置１は、バッテリ制御プログラムの全ての書き換えが終了したと判断し、書き換えに関する処理を終了する（処理８３）。
【０１３６】
以上のように、本実施の形態３によるプログラム書き換え方法（システム）によれば、上記実施の形態２と同様に、プログラムの書き換え及び検証を効率良く実施することができると共に、一つのノードがコスト高になることを防ぐことができるため、全体としてのコストが抑えられる。
【０１３７】
なお、上記実施の形態２及び本実施の形態３において、車載充電器制御装置４に分割プログラムを暗号化する暗号化部を設け、この暗号化部により暗号化した分割プログラムをＥＰＳ制御装置２ａとモータ制御装置２ｂに送信し、暗号化された分割プログラムをＥＰＳ制御装置２ａとモータ制御装置２ｂに保存するようにしても良い。あるいは、ＥＰＳ制御装置２ａ及びモータ制御装置２ｂに暗号化部を備え、車載充電器制御装置４から受信した分割プログラムを暗号化部により暗号化してから保存するようにしても良い。
【０１３８】
また、暗号化部により暗号化された分割プログラムを復号化する復号化部をバッテリ制御装置１に備え、ＥＰＳ制御装置２ａ又はモータ制御装置２ｂから暗号化された分割プログラムを受信した際に、復号化部により分割プログラムを復号化するようにしても良い。あるいは、ＥＰＳ制御装置２ａ及びモータ制御装置２ｂに復号化部を備え、それらに保存された暗号化された分割プログラムを復号化部により復号化した後、バッテリ制御装置１に送信するようにしても良い。すなわち、第２種ノードに暗号化部と復号化部を備えても良い。
【０１３９】
上記のような暗号化部と復号化部を備えることにより、ＣＡＮネットワーク６で第三者に解読される危険性、又はＥＰＳ制御装置２ａ及びモータ制御装置２ｂに保存時に第三者に解読される危険性を低減することができ、プログラム書き換えを安全に実施することが可能となる。
【０１４０】
また、上記実施の形態１〜実施の形態３では、２つの第２種ノードを備えた車両制御システムを例に挙げて説明したが、第２種ノードの数はこれに限定されるものではない。第２種ノードの数を増やすことにより、各分割プログラムの容量を低減することができ、各第２種ノードに必要となる記録容量を抑えることができる。また、第２種ノードを３つ以上にし、部分的に重複した内容の分割プログラムを奇数個作成し、第２種ノードに保存させることで、検証方法として多数決を取ることができる。また、分割プログラムの内容が異なる場合においては、多数となり正しいと看られる分割ブログラム内容に修正することで書き換えの途中で検証による問題検出で終了せずに、書き換えを完遂させることができる。
【０１４１】
さらに、第１のネットワークとしてＣＡＮネットワーク６を、第２のネットワークとして電力線ネットワーク７を例に挙げて説明したが、ネットワークの種類はこれに限るものではない。
【０１４２】
また、上記実施の形態１〜実施の形態３では、第１種ノードのプログラム書き換えが成功することを前提として説明したが、検証結果により問題があり書き換えが失敗した場合や、なんらかの理由で書き換えが失敗した場合に備えて、第１種ノードにタイムアウト時間等を設定しておき、所定時間が経過しても分割プログラムを受信できない場合や書き換えが終了しない場合には、書き換え処理を強制的に終了させるようにしても良い。ただし、書き換え処理を途中で終了させる場合には、別の動作可能な制御プログラムを用意しておく、関連ノードに故障状況を示す一意のコードを記録しておく等の対応策を併せて用意しておく必要がある。
【産業上の利用可能性】
【０１４３】
本発明は、ネットワークに接続された複数の制御装置を含むシステム（例えば車両制御システム）におけるプログラムの書き換え方法として利用することができる。
【符号の説明】
【０１４４】
１  バッテリ制御装置（第１種ノード）、２ａ  ＥＰＳ制御装置（第２種ノード）、２ｂ  モータ制御装置（第２種ノード）、３  テスタ（第３種ノード）、４  車載充電器制御装置（第４種ノード）、５  充電ステーション（第５種ノード）、６  ＣＡＮネットワーク、７  電力線、７ａ  電力線ネットワーク、８  車両のネットワーク、９  プログラム検証部、１０  バッテリ、１１、２１ａ、２１ｂ、３１、４１、５１  マイコン、１２、２２ａ、２２ｂ、３２、４２  ＣＡＮネットワーク用データ送受信部、１３、２３ａ、２３ｂ、３３、４３、５３  記録装置、１４  プログラム書き換え部、１５  状態検出部、１６  第１の制御装置、１７  統括制御装置、１８  第２の制御装置、２０ａ  ＥＰＳ、２０ｂ  駆動用モータ、２４ａ、２４ｂ  送信可否判断部、２５ａ、２５ｂ、４５  第１種ノード状態検出部、３４、４４  プログラム分割部、４０  車載充電器、４６、５２  電力線ネットワーク用データ送受信部。
【要約】
【課題】ネットワークに接続された制御装置のプログラムの書き換えを効率良く実施することができ、さらに書き換えるプログラムが正しいかを検証可能としたプログラム書き換えシステム及びプログラム書き換え方法を提供する。
【解決手段】複数の第２種ノードの各々は、第１種ノードの動作を決定するプログラムの書き換え用プログラムの一部分である分割プログラムを、他の第２種ノードに保存される分割プログラムと部分的に重複した内容を含む形で保存する。第２種ノードの各々は、第１種ノードへの分割プログラムの送信が可能な場合に、自ノードが保存している分割プログラムを第１のネットワークを介して第１種ノードに送信する。第１種ノードは、受信した分割プログラムに該当する部分を書き換えるとともに、その書き換えた分割プログラム同士を前記の重複した内容を用いて同一であるか否かを検証する。
【選択図】図１７【図１】
0005996074.tif 000002
【図２】
0005996074.tif 000003
【図３】
0005996074.tif 000004
【図４】
0005996074.tif 000005
【図５】
0005996074.tif 000006
【図６】
0005996074.tif 000007
【図７】
0005996074.tif 000008
【図８】
0005996074.tif 000009
【図９】
0005996074.tif 000010
【図１０】
0005996074.tif 000011
【図１１】
0005996074.tif 000012
【図１２】
0005996074.tif 000013
【図１３】
0005996074.tif 000014
【図１４】
0005996074.tif 000015
【図１５】
0005996074.tif 000016
【図１６】
0005996074.tif 000017
【図１７】
0005996074.tif 000018