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