(57)【要約】【課題】効率よく、制御プログラムの書換えを行うことができるようにする。【解決手段】メインCPU１１−１では、プログラム書換装置２からプログラム書換え情報が受信され、プログラム書換え情報から制御装置IDと、CPUのIDと、更新データが抽出され、制御装置IDが自機に対応する場合、CPUのIDにより識別されるメインCPU１１−１用のメインCPU更新用制御プログラムが、第１の不揮発性メモリ３７に書き込まれ、CPUのIDにより識別されるサブCPU１１−２用のサブCPU更新用制御プログラムが、サブCPU１１−２に送信される。サブCPU１１−２では、メインCPU１１−１からのサブCPU更新用制御プログラムが、第２の不揮発性メモリ５５に書き込まれる。本発明は、例えば、車両に搭載される制御装置と、その制御装置のプログラムを書換えるプログラム書換装置からなるプログラム書換システムに適用することができる。【選択図】図４
2012093961.tif 000002
【特許請求の範囲】
【請求項１】
第１の制御手段と、
第２の制御手段と、
前記第１の制御手段が用いる第１のプログラムを保持する第１の保持手段と、
前記第２の制御手段が用いる第２のプログラムを保持する第２の保持手段と
を有する制御装置において、
前記第１の制御手段は、
プログラムの書き込みを行う外部装置から書き込み情報を受信する書込情報受信手段と、
前記書き込み情報から、対象とする制御装置を識別するための制御装置識別情報と、前記第１の保持手段又は前記第２の保持手段に書き込むためのプログラムを抽出する抽出手段と、
前記制御装置識別情報が自機に対応するか否かを判定する識別情報判定手段と、
前記制御装置識別情報が自機に対応すると判定された場合、前記第１の制御手段が用いる第１のプログラムを、前記第１の保持手段に書き込む第１の書き込み手段と、
前記第２の制御手段が用いる第２のプログラムを、前記第２の制御手段に送信する書込情報送信手段と
を備え、
前記第２の制御手段は、
前記第１の制御手段から送信されてくる、前記第２の制御手段が用いる第２のプログラムを、前記第２の保持手段に書き込む第２の書き込み手段を備える
制御装置。
【請求項２】
前記抽出手段は、前記書き込み情報から、いずれの制御手段が用いる書き込み情報であるかを識別するための書き込み対象識別情報をさらに抽出し、
前記第１の書き込み手段は、前記制御装置識別情報が自機に対応すると判定された場合、抽出された前記書き込み対象識別情報により識別される前記第１の制御手段が用いる第１のプログラムを、前記第１の保持手段に書き込み、
前記書込情報送信手段は、抽出された前記書き込み対象識別情報により識別される前記第２の制御手段が用いる第２のプログラムを、前記第２の制御手段に送信する
請求項１に記載の制御装置。
【請求項３】
前記第１の制御手段は、
前記書き込み対象識別情報により識別される前記第２の制御手段が用いる第２のプログラムを書き込むか否かを判定する書込対象判定手段をさらに備え、
前記書込情報送信手段は、前記第２のプログラムを書き込むと判定された場合、前記第２のプログラムを、前記第２の制御手段に送信する
請求項２に記載の制御装置。
【請求項４】
前記第２の制御手段は、
前記第２のプログラムの書き込み結果を、前記第１の制御手段に送信する第１の書込結果送信手段をさらに備え、
前記第１の制御手段は、
前記第２の制御手段から送信されてくる、前記第２のプログラムの書き込み結果を受信する書込結果受信手段と、
受信された前記第２のプログラムの書き込み結果を、前記第１のプログラムの書き込み結果とともに、前記外部装置に送信する第２の書込結果送信手段と
をさらに備える請求項３に記載の制御装置。
【請求項５】
前記第１の制御手段は、
前記外部装置から送信されてくる、対象とする制御手段の再起動を指示するためのリセット要求に応じて、前記第１の制御手段を再起動する第１のリセット手段と、
前記第２のプログラムが書き込まれた場合、前記リセット要求を前記第２の制御手段に送信するリセット要求送信手段と
をさらに備え、
前記第２の制御手段は、
前記第１の制御手段から送信されてくる、前記リセット要求に応じて、前記第２の制御手段を再起動する第２のリセット手段と
をさらに備える請求項４に記載の制御装置。
【請求項６】
第１の制御手段と、
第２の制御手段と、
前記第１の制御手段が用いる第１のプログラムを保持する第１の保持手段と、
前記第２の制御手段が用いる第２のプログラムを保持する第２の保持手段と
を有する制御装置の制御方法において、
前記第１の制御手段は、
プログラムの書き込みを行う外部装置から書き込み情報を受信し、
前記書き込み情報から、対象とする制御装置を識別するための制御装置識別情報と、前記第１の保持手段又は前記第２の保持手段に書き込むためのプログラムを抽出し、
前記制御装置識別情報が自機に対応するか否かを判定し、
前記制御装置識別情報が自機に対応すると判定された場合、前記第１の制御手段が用いる第１のプログラムを、前記第１の保持手段に書き込み、
前記第２の制御手段が用いる第２のプログラムを、前記第２の制御手段に送信する
ステップを含み、
前記第２の制御手段は、
前記第１の制御手段から送信されてくる、前記第２の制御手段が用いる第２のプログラムを、前記第２の保持手段に書き込むステップを含む
制御方法。
【請求項７】
第１の制御手段と、第２の制御手段と、前記第１の制御手段が用いる第１のプログラムを保持する第１の保持手段と、前記第２の制御手段が用いる第２のプログラムを保持する第２の保持手段とを有する制御装置と、
前記制御装置のプログラムの書き込みを行う外部装置と
からなるプログラム書込システムにおいて、
前記外部装置は、
書き込み情報を取得する書込情報取得手段と、
取得された前記書き込み情報を前記制御装置に送信する第１の書込情報送信手段と
を備え、
前記制御装置の前記第１の制御手段は、
前記外部装置から送信されてくる、書き込み情報を受信する書込情報受信手段と、
前記書き込み情報から、対象とする制御装置を識別するための制御装置識別情報と、前記第１の保持手段又は前記第２の保持手段に書き込むためのプログラムを抽出する抽出手段と、
前記制御装置識別情報が自機に対応するか否かを判定する識別情報判定手段と、
前記制御装置識別情報が自機に対応すると判定された場合、前記第１の制御手段が用いる第１のプログラムを、前記第１の保持手段に書き込む第１の書き込み手段と、
前記第２の制御手段が用いる第２のプログラムを、前記第２の制御手段に送信する第２の書込情報送信手段と
を備え、
前記制御装置の前記第２の制御手段は、
前記第１の制御手段から送信されてくる、前記第２の制御手段が用いる第２のプログラムを、前記第２の保持手段に書き込む第２の書き込み手段を備える
プログラム書込システム。
【請求項８】
前記抽出手段は、前記書き込み情報から、いずれの制御手段が用いる書き込み情報であるかを識別するための書き込み対象識別情報をさらに抽出し、
前記第１の書き込み手段は、前記制御装置識別情報が自機に対応すると判定された場合、抽出された前記書き込み対象識別情報により識別される前記第１の制御手段が用いる第１のプログラムを、前記第１の保持手段に書き込み、
前記書込情報送信手段は、抽出された前記書き込み対象識別情報により識別される前記第２の制御手段が用いる第２のプログラムを、前記第２の制御手段に送信する
請求項７に記載のプログラム書込システム。
【請求項９】
前記制御装置の前記第１の制御手段は、
前記書き込み対象識別情報により識別される前記第２の制御手段が用いる第２のプログラムを書き込むか否かを判定する書込対象判定手段をさらに備え、
前記第２の書込情報送信手段は、前記第２のプログラムを書き込むと判定された場合、前記第２のプログラムを、前記第２の制御手段に送信する
請求項８に記載のプログラム書込システム。
【請求項１０】
前記制御装置の前記第２の制御手段は、
前記第２のプログラムの書き込み結果を、前記第１の制御手段に送信する第１の書込結果送信手段をさらに備え、
前記制御装置の前記第１の制御手段は、
前記第２の制御手段から送信されてくる、前記第２のプログラムの書き込み結果を受信する第１の書込結果受信手段と、
受信された前記第２のプログラムの書き込み結果を、前記第１のプログラムの書き込み結果とともに、前記外部装置に送信する第２の書込結果送信手段と
をさらに備え、
前記外部装置は、
前記第１の制御手段から送信されてくる前記第１のプログラムの書き込み結果及び前記第２のプログラムの書き込み結果を受信する第２の書込結果受信手段と、
受信した前記第１のプログラムの書き込み結果及び前記第２のプログラムの書き込み結果に対応する情報を通知する通知手段と
をさらに備える請求項９に記載のプログラム書込システム。
【請求項１１】
前記外部装置は、
前記制御装置の前記第１の制御手段から書き込み結果を受信した場合、対象とする制御手段の再起動を指示するためのリセット要求を、前記制御装置の前記第１の制御手段に送信する第１のリセット要求送信手段をさらに備え、
前記制御装置の前記第１の制御手段は、
前記外部装置から送信されてくる、リセット要求に応じて、前記第１の制御手段を再起動する第１のリセット手段と、
前記第２のプログラムが書き込まれた場合、前記リセット要求を前記第２の制御手段に送信する第２のリセット要求送信手段と
をさらに備え、
前記制御装置の前記第２の制御手段は、
前記第１の制御手段から送信されてくる、前記リセット要求に応じて、前記第２の制御手段を再起動する第２のリセット手段と
をさらに備える請求項１０に記載のプログラム書込システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置及び方法、並びにプログラム書込システムに関し、特に、効率よく、制御プログラムの書換えを行うことができるようにした制御装置及び方法、並びにプログラム書込システムに関する。
【背景技術】
【０００２】
従来より、制御装置に内蔵される制御プログラムや制御データが、その制御装置に不適合なものに書換えられてしまうことを防止する技術が提案されている（例えば、特許文献１参照）。
【０００３】
特許文献１には、制御プログラムがフラッシュROMに格納された制御装置において、書換え指令を受けると、外部装置（プログラム書換装置）からの識別コードを受信し、受信した識別コードと書換え対象となる制御装置のIDとが一致している場合にのみ、外部装置から送信されてくる書換制御プログラムを転送し実行する構成が開示されている。これにより、外部装置から送信されてくる新たな制御プログラムが適切なプログラムであることを判定してから、制御プログラムの書換えが行われることになる。
【０００４】
また、車両に搭載される制御装置には、高性能化や高機能化のために、１台の制御装置に複数のCPU（Central Processing Unit）を搭載しているものがある。
【０００５】
特許文献１による制御プログラムの書換え方法であると、制御プログラムを書換える対象となる装置のCPUが書換え対象を識別するための装置識別IDが１組しかなく、１つのCPUが制御プログラムを書換えるためのデータを用いて自身の制御プログラムの書換えを行う構成となっているため、複数のCPUの制御プログラムを書換えることはできない。
【０００６】
このような複数のCPUの制御プログラムを書換える技術としては、例えば、特許文献２が知られている。この特許文献２には、メインCPU用の制御プログラムと、サブCPU用の制御プログラムとに分けて、別々に書換えを行う技術が提案されている。
【０００７】
しかしながら、特許文献２による制御プログラムの書換え方法であると、制御プログラムの書換えを一括して行うことができない。特に、車両に搭載される制御装置の場合、出荷後に制御プログラムを書換える場合には、多数の制御装置が書換えの対象となることが多く、そのため、複数回に分けて書換え作業を行うことにより、膨大な作業コストが発生してしまう。また、その作業の際、複数回の操作が必要となることから、人為的な操作ミスの発生する可能性が増大する。
【０００８】
また、複数のCPUの制御プログラムを一括して書換える技術が提案されている（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平１０−１０５４６８号公報
【特許文献２】特開２００６−３１５２６号公報
【特許文献３】特開２００３−１４０９１４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ところで、特許文献１のプログラム書換装置は、既に広範囲に普及しており、複数のCPUを搭載した制御装置の制御プログラムを書換える場合、このプログラム書換装置を用いて、複数のCPUの制御プログラムを書換えるのが現実的である。
【００１１】
しかしながら、特許文献３による制御プログラムの書換え方法では、更新用データとしての、複数のCPUのアプリケーションとデータを、それぞれ別々に管理しているため、制御装置の識別情報と、１つのCPUのためのプログラム書換え情報で構成された書換え情報を用いて、制御プログラムの書換えを行う、特許文献１のプログラム書換装置を用いることができない。
【００１２】
また、上述したように、特許文献２による制御プログラムの書換え方法では、制御プログラムの書換えを一括して行うことができないので、多数の制御装置の制御プログラムを書換える場合には、膨大な作業コストが発生してしまう。
【００１３】
このように、従来技術では、制御プログラムの書換え対象となる制御装置が、メインCPUに加えてサブCPUなど、複数のCPUを備える場合に、各CPU毎に適切な制御プログラムを識別して、一括して書換えることができなかった。
【００１４】
本発明はこのような状況に鑑みてなされたものであり、プログラム書換装置によって、制御装置の識別情報と、１つのCPUのためのプログラム書換え情報で構成された書換え情報を用いて、複数のCPUが搭載された制御装置の制御プログラムの書換えを行うに際して、１回の書き込み指令をするだけで、制御装置側において、適切なプログラムのみを識別して、複数のCPUの制御プログラムを書換えることができるようにすることを目的とするものである。
【課題を解決するための手段】
【００１５】
本発明の制御装置は、第１の制御手段と、第２の制御手段と、前記第１の制御手段が用いる第１のプログラムを保持する第１の保持手段と、前記第２の制御手段が用いる第２のプログラムを保持する第２の保持手段とを有する制御装置において、前記第１の制御手段は、プログラムの書き込みを行う外部装置から書き込み情報を受信する書込情報受信手段と、前記書き込み情報から、対象とする制御装置を識別するための制御装置識別情報と、前記第１の保持手段又は前記第２の保持手段に書き込むためのプログラムを抽出する抽出手段と、前記制御装置識別情報が自機に対応するか否かを判定する識別情報判定手段と、前記制御装置識別情報が自機に対応すると判定された場合、前記第１の制御手段が用いる第１のプログラムを、前記第１の保持手段に書き込む第１の書き込み手段と、前記第２の制御手段が用いる第２のプログラムを、前記第２の制御手段に送信する書込情報送信手段とを備え、前記第２の制御手段は、前記第１の制御手段から送信されてくる、前記第２の制御手段が用いる第２のプログラムを、前記第２の保持手段に書き込む第２の書き込み手段を備える。
【００１６】
本発明の制御装置は、接続対象を制御する装置であって、例えば、車両に搭載されるエンジン制御装置（ECU（Engine Control Unit））などの電子制御ユニットとして構成される。また、車両は、例えば、各種の自動車、二輪車などにより構成される。なお、本発明の制御装置は、車載装置に限られるものではなく、複数の制御手段を備える電子機器であればよい。外部装置は、制御装置の制御プログラムを書換えるプログラム書換装置である。また、本発明の制御装置は、制御装置に既に書き込まれている制御プログラムを書換えるのみに限られるものではなく、制御装置に新たに制御プログラムを書き込むことに用いることができる。
【００１７】
第１の制御手段および第２の制御手段は、例えばCPU（Central Processing Unit）などの各装置の制御などを行う装置であって、例えば、第１の制御手段がメインCPUとして構成され、第２の制御手段がサブCPUとして構成される。また、第１の保持手段及び第２の保持手段は、フラッシュメモリなどの不揮発性メモリであって、第１の保持手段は、メインCPUが用いる制御プログラムを記憶する第１の不揮発性メモリから構成され、第２の保持手段は、サブCPUが用いる制御プログラムを記憶する第２の不揮発性メモリから構成される。
【００１８】
書込情報受信手段は、例えば、メインCPUの書換情報受信部により構成される。書換情報受信部は、プログラム書換装置から書換え情報を受信する。この書換え情報には、例えば、対象とする制御装置を識別するための制御装置ID、いずれの制御手段が用いる書換え情報であるかを識別するためのCPUのID、及び、第１の保持手段又は第２の保持手段に書き込むためのメインCPU更新用制御プログラム又はサブCPU更新用制御プログラムが格納されている。
【００１９】
抽出手段は、例えば、メインCPUの書換データ抽出部により構成される。書換データ抽出部は、書換え情報から、制御装置ID、CPUのID、及びメインCPU更新用制御プログラム又はサブCPU更新用制御プログラムを抽出する。識別情報判定手段は、例えば、メインCPUの書換データ抽出部により構成される。書換データ抽出部は、制御装置IDが自機に対応するか否かを判定する。
【００２０】
第１の書き込み手段は、例えば、メインCPUの第１の不揮発性メモリ書き込み部により構成される。第１の不揮発性メモリ書き込み部は、制御装置IDが自機に対応すると判定された場合、抽出されたCPUのIDにより識別されるメインCPUが用いるメインCPU更新用制御プログラムを、第１の不揮発性メモリに書き込む。書込情報送信手段は、例えば、メインCPUの第２の不揮発性メモリ書き込み部により構成される。第２の不揮発性メモリ書き込み部は、サブCPUが用いるサブCPU更新用制御プログラムを、サブCPUに送信する。
【００２１】
第２の書き込み手段は、例えば、サブCPUの第２の不揮発性メモリ書き込み部により構成される。第２の不揮発性メモリ書き込み部は、メインCPUから送信されてくる、サブCPU更新用制御プログラムを、第２の不揮発性メモリに書き込む。
【００２２】
本発明の制御装置においては、第１の制御手段によって、プログラムの書き込みを行う外部装置から書き込み情報が受信され、書き込み情報から、対象とする制御装置を識別するための制御装置識別情報と、第１の保持手段又は第２の保持手段に書き込むためのプログラムが抽出され、制御装置識別情報が自機に対応するか否かが判定され、制御装置識別情報が自機に対応すると判定された場合、第１の制御手段が用いる第１のプログラムが、第１の保持手段に書き込まれ、第２の制御手段が用いる第２のプログラムが、第２の制御手段に送信され、第２の制御手段によって、第１の制御手段から送信されてくる、第２の制御手段が用いる第２のプログラムが、第２の保持手段に書き込まれる。
【００２３】
したがって、プログラム書換装置からの１回の書き込み指令に基づいて、複数のCPUの制御プログラムを一括で書換えることができるので、効率よく、制御プログラムの書換えを行うことができる。
【００２４】
前記抽出手段は、前記書き込み情報から、いずれの制御手段が用いる書き込み情報であるかを識別するための書き込み対象識別情報をさらに抽出し、前記第１の書き込み手段は、前記制御装置識別情報が自機に対応すると判定された場合、抽出された前記書き込み対象識別情報により識別される前記第１の制御手段が用いる第１のプログラムを、前記第１の保持手段に書き込み、前記書込情報送信手段は、抽出された前記書き込み対象識別情報により識別される前記第２の制御手段が用いる第２のプログラムを、前記第２の制御手段に送信する。
【００２５】
前記第１の制御手段は、前記書き込み対象識別情報により識別される前記第２の制御手段が用いる第２のプログラムを書き込むか否かを判定する書込対象判定手段をさらに備え、前記書込情報送信手段は、前記第２のプログラムを書き込むと判定された場合、前記第２のプログラムを、前記第２の制御手段に送信することができる。
【００２６】
書込対象判定手段は、例えば、メインCPUの書換対象判定部により構成される。書換対象判定部は、サブCPU更新用制御プログラムを書換えるか否かを判定し、第２の不揮発性メモリ書き込み部は、サブCPU更新用制御プログラムを書換えると判定された場合、サブCPUが用いるサブCPU更新用制御プログラムを、サブCPUに送信する。
【００２７】
これにより、メインCPUの制御プログラムのみならず、サブCPUの制御プログラムの更新がある場合には、サブCPUの制御プログラムをも書換えることができる。
【００２８】
前記第２の制御手段は、前記第２のプログラムの書き込み結果を、前記第１の制御手段に送信する第１の書込結果送信手段をさらに備え、前記第１の制御手段は、前記第２の制御手段から送信されてくる、前記第２のプログラムの書き込み結果を受信する書込結果受信手段と、受信された前記第２のプログラムの書き込み結果を、前記第１のプログラムの書き込み結果とともに、前記外部装置に送信する第２の書込結果送信手段とをさらに備える。
【００２９】
第１の書込結果送信手段は、例えば、サブCPUの書換結果送受信部により構成される。書換結果送受信部は、サブCPUの書換え結果を、メインCPUに送信する。書込結果受信手段及び第２の書込結果送信手段は、例えば、メインCPUの書換結果送受信部により構成される。書換結果送受信部は、受信されたサブCPUの書換え結果を、メインCPUの書換え結果とともに、プログラム書換装置に送信する。
【００３０】
これにより、プログラム書換装置に対して、メインCPUとサブCPUの書換え結果をまとめて通知することができる。
【００３１】
前記第１の制御手段は、前記外部装置から送信されてくる、対象とする制御手段の再起動を指示するためのリセット要求に応じて、前記第１の制御手段を再起動する第１のリセット手段と、前記第２のプログラムが書き込まれた場合、前記リセット要求を前記第２の制御手段に送信するリセット要求送信手段とをさらに備え、前記第２の制御手段は、前記第１の制御手段から送信されてくる、前記リセット要求に応じて、前記第２の制御手段を再起動する第２のリセット手段とをさらに備える。
【００３２】
第１のリセット手段及びリセット要求送信手段は、例えばメインCPUのリセット部により構成される。リセット部は、プログラム書換装置から送信されてくる、対象とするCPUの再起動を指示するためのリセット要求に応じて、メインCPUを再起動させるとともに、サブCPUの制御プログラムが書換えられた場合、リセット要求をサブCPUに送信する。第２のリセット手段は、例えばサブCPUのリセット部により構成される。リセット部は、メインCPUから送信されてくるリセット要求に応じて、サブCPUを再起動させる。
【００３３】
これにより、複数のCPUの制御プログラムを書換えた後、適切な順序でCPUを再起動することができる。
【００３４】
本発明の制御方法は、第１の制御手段と、第２の制御手段と、前記第１の制御手段が用いる第１のプログラムを保持する第１の保持手段と、前記第２の制御手段が用いる第２のプログラムを保持する第２の保持手段とを有する制御装置の制御方法において、前記第１の制御手段は、プログラムの書き込みを行う外部装置から書き込み情報を受信し、前記書き込み情報から、対象とする制御装置を識別するための制御装置識別情報と、前記第１の保持手段又は前記第２の保持手段に書き込むためのプログラムを抽出し、前記制御装置識別情報が自機に対応するか否かを判定し、前記制御装置識別情報が自機に対応すると判定された場合、前記第１の制御手段が用いる第１のプログラムを、前記第１の保持手段に書き込み、前記第２の制御手段が用いる第２のプログラムを、前記第２の制御手段に送信するステップを含み、前記第２の制御手段は、前記第１の制御手段から送信されてくる、前記第２の制御手段が用いる第２のプログラムを、前記第２の保持手段に書き込むステップを含む。
【００３５】
本発明の制御方法においては、第１の制御手段によって、プログラムの書き込みを行う外部装置から書き込み情報が受信され、書き込み情報から、対象とする制御装置を識別するための制御装置識別情報と、第１の保持手段又は第２の保持手段に書き込むためのプログラムが抽出され、制御装置識別情報が自機に対応するか否かが判定され、制御装置識別情報が自機に対応すると判定された場合、第１の制御手段が用いる第１のプログラムが、第１の保持手段に書き込まれ、識別される第２の制御手段が用いる第２のプログラムが、第２の制御手段に送信され、第２の制御手段によって、第１の制御手段から送信されてくる、第２の制御手段が用いる第２のプログラムが、第２の保持手段に書き込まれる。
【００３６】
したがって、プログラム書換装置からの１回の書き込み指令に基づいて、複数のCPUの制御プログラムを一括で書換えることができるので、効率よく、制御プログラムの書換えを行うことができる。
【００３７】
本発明のプログラム書込システムは、第１の制御手段と、第２の制御手段と、前記第１の制御手段が用いる第１のプログラムを保持する第１の保持手段と、前記第２の制御手段が用いる第２のプログラムを保持する第２の保持手段とを有する制御装置と、前記制御装置のプログラムの書き込みを行う外部装置とからなるプログラム書込システムにおいて、前記外部装置は、書き込み情報を取得する書込情報取得手段と、取得された前記書き込み情報を前記制御装置に送信する第１の書込情報送信手段とを備え、前記制御装置の前記第１の制御手段は、前記外部装置から送信されてくる、書き込み情報を受信する書込情報受信手段と、前記書き込み情報から、対象とする制御装置を識別するための制御装置識別情報と、前記第１の保持手段又は前記第２の保持手段に書き込むためのプログラムを抽出する抽出手段と、前記制御装置識別情報が自機に対応するか否かを判定する識別情報判定手段と、前記制御装置識別情報が自機に対応すると判定された場合、前記第１の制御手段が用いる第１のプログラムを、前記第１の保持手段に書き込む第１の書き込み手段と、前記第２の制御手段が用いる第２のプログラムを、前記第２の制御手段に送信する第２の書込情報送信手段とを備え、前記制御装置の前記第２の制御手段は、前記第１の制御手段から送信されてくる、前記第２の制御手段が用いる第２のプログラムを、前記第２の保持手段に書き込む第２の書き込み手段を備える。
【００３８】
本発明のプログラム書込システムは、例えば、外部装置としてのプログラム書換装置と、接続対象を制御する制御装置から構成される。
【００３９】
本発明の外部装置の、書込情報取得手段は、例えば、書換情報取得部により構成される。書換情報取得部は、書換え情報を取得する。第１の書込情報送信手段は、例えば、書換情報送信部により構成される。書換情報送信部は、取得された書換え情報を制御装置に送信する。
【００４０】
本発明の制御装置の、第１の制御手段および第２の制御手段は、例えばCPU（Central Processing Unit）などの各装置の制御などを行う装置であって、例えば、第１の制御手段がメインCPUとして構成され、第２の制御手段がサブCPUとして構成される。また、第１の保持手段は、メインCPUが用いる制御プログラムを記憶する第１の不揮発性メモリから構成され、第２の保持手段は、サブCPUが用いる制御プログラムを記憶する第２の不揮発性メモリから構成される。
【００４１】
書込情報受信手段は、例えば、メインCPUの書換情報受信部により構成される。書換情報受信部は、プログラム書換装置から書換え情報を受信する。この書換え情報には、例えば、対象とする制御装置を識別するための制御装置ID、いずれの制御手段が用いる書換え情報であるかを識別するためのCPUのID、及び、第１の保持手段又は第２の保持手段に書き込むためのメインCPU更新用制御プログラム又はサブCPU更新用制御プログラムが格納されている。
【００４２】
抽出手段は、例えば、メインCPUの書換データ抽出部により構成される。書換データ抽出部は、書換え情報から、制御装置ID、CPUのID、及びメインCPU更新用制御プログラム又はサブCPU更新用制御プログラムを抽出する。識別情報判定手段は、例えば、メインCPUの書換データ抽出部により構成される。書換データ抽出部は、制御装置IDが自機に対応するか否かを判定する。
【００４３】
第１の書き込み手段は、例えば、メインCPUの第１の不揮発性メモリ書き込み部により構成される。第１の不揮発性メモリ書き込み部は、制御装置IDが自機に対応すると判定された場合、抽出されたCPUのIDにより識別されるメインCPUが用いるメインCPU更新用制御プログラムを、第１の不揮発性メモリに書き込む。第２の書込情報送信手段は、例えば、メインCPUの第２の不揮発性メモリ書き込み部により構成される。第２の不揮発性メモリ書き込み部は、サブCPUが用いるサブCPU更新用制御プログラムを、サブCPUに送信する。
【００４４】
第２の書き込み手段は、例えば、サブCPUの第２の不揮発性メモリ書き込み部により構成される。第２の不揮発性メモリ書き込み部は、メインCPUから送信されてくる、サブCPU更新用制御プログラムを、第２の不揮発性メモリに書き込む。
【００４５】
本発明のプログラム書込システムにおいては、外部装置によって、書き込み情報が取得され、取得された書き込み情報が制御装置に送信され、制御装置の第１の制御手段によって、外部装置から送信されてくる、書き込み情報が受信され、書き込み情報から、対象とする制御装置を識別するための制御装置識別情報と、第１の保持手段又は第２の保持手段に書き込むためのプログラムが抽出され、制御装置識別情報が自機に対応するか否かが判定され、制御装置識別情報が自機に対応すると判定された場合、第１の制御手段が用いる第１のプログラムが、第１の保持手段に書き込まれ、第２の制御手段が用いる第２のプログラムが、第２の制御手段に送信され、制御装置の第２の制御手段によって、第１の制御手段から送信されてくる、第２の制御手段が用いる第２のプログラムが、第２の保持手段に書き込まれる。
【００４６】
したがって、プログラム書換装置からの１回の書き込み指令に基づいて、複数のCPUの制御プログラムを一括で書換えることができるので、効率よく、制御プログラムの書換えを行うことができる。
【００４７】
前記抽出手段は、前記書き込み情報から、いずれの制御手段が用いる書き込み情報であるかを識別するための書き込み対象識別情報をさらに抽出し、前記第１の書き込み手段は、前記制御装置識別情報が自機に対応すると判定された場合、抽出された前記書き込み対象識別情報により識別される前記第１の制御手段が用いる第１のプログラムを、前記第１の保持手段に書き込み、前記書込情報送信手段は、抽出された前記書き込み対象識別情報により識別される前記第２の制御手段が用いる第２のプログラムを、前記第２の制御手段に送信する。
【００４８】
前記制御装置の前記第１の制御手段は、前記書き込み対象識別情報により識別される前記第２の制御手段が用いる第２のプログラムを書き込むか否かを判定する書込対象判定手段をさらに備え、前記第２の書込情報送信手段は、前記第２のプログラムを書き込むと判定された場合、前記第２のプログラムを、前記第２の制御手段に送信する。
【００４９】
書込対象判定手段は、例えば、メインCPUの書換対象判定部により構成される。書換対象判定部は、サブCPU更新用制御プログラムを書換えるか否かを判定し、第２の不揮発性メモリ書き込み部は、サブCPU更新用制御プログラムを書換えると判定された場合、サブCPUが用いるサブCPU更新用制御プログラムを、サブCPUに送信する。
【００５０】
これにより、メインCPUの制御プログラムのみならず、サブCPUの制御プログラムの更新がある場合には、サブCPUの制御プログラムをも書換えることができる。
【００５１】
前記制御装置の前記第２の制御手段は、前記第２のプログラムの書き込み結果を、前記第１の制御手段に送信する第１の書込結果送信手段をさらに備え、前記制御装置の前記第１の制御手段は、前記第２の制御手段から送信されてくる、前記第２のプログラムの書き込み結果を受信する第１の書込結果受信手段と、受信された前記第２のプログラムの書き込み結果を、前記第１のプログラムの書き込み結果とともに、前記外部装置に送信する第２の書込結果送信手段とをさらに備え、前記外部装置は、前記第１の制御手段から送信されてくる前記第１のプログラムの書き込み結果及び前記第２のプログラムの書き込み結果を受信する第２の書込結果受信手段と、受信した前記第１のプログラムの書き込み結果及び前記第２のプログラムの書き込み結果に対応する情報を通知する通知手段とをさらに備える。
【００５２】
第１の書込結果送信手段は、例えば、サブCPUの書換結果送受信部により構成される。書換結果送受信部は、サブCPUの書換え結果を、メインCPUに送信する。第１の書込結果受信手段及び第２の書込結果送信手段は、例えば、メインCPUの書換結果送受信部により構成される。書換結果送受信部は、受信されたサブCPUの書換え結果を、メインCPUの書換え結果とともに、プログラム書換装置に送信する。
【００５３】
第２の書込結果受信手段は、例えば、プログラム書換装置の書換結果確認部により構成される。書換結果確認部は、メインCPUから送信されてくる、メインCPUの書換え結果及びサブCPUの書換え結果を受信する。通知手段は、例えば、メインCPUの結果及びサブCPUの書換え結果に対応する情報を通知する。
【００５４】
これにより、プログラム書換装置に対して、メインCPUとサブCPUの書換え結果をまとめて通知することができる。
【００５５】
前記外部装置は、前記制御装置の前記第１の制御手段から書き込み結果を受信した場合、対象とする制御手段の再起動を指示するためのリセット要求を、前記制御装置の前記第１の制御手段に送信する第１のリセット要求送信手段をさらに備え、前記制御装置の前記第１の制御手段は、前記外部装置から送信されてくる、リセット要求に応じて、前記第１の制御手段を再起動する第１のリセット手段と、前記第２のプログラムが書き込まれた場合、前記リセット要求を前記第２の制御手段に送信する第２のリセット要求送信手段とをさらに備え、前記制御装置の前記第２の制御手段は、前記第１の制御手段から送信されてくる、前記リセット要求に応じて、前記第２の制御手段を再起動する第２のリセット手段とをさらに備える。
【００５６】
第１のリセット要求送信手段は、例えば、プログラム書換装置のリセット部により構成される。リセット部は、制御装置のメインCPUから書換え結果を受信した場合、対象とするCPUの再起動を指示するためのリセット要求を、メインCPUに送信する。第１のリセット手段及び第２のリセット要求送信手段は、例えばメインCPUのリセット部により構成される。リセット部は、プログラム書換装置から送信されてくる、対象とするCPUの再起動を指示するためのリセット要求に応じて、メインCPUを再起動させるとともに、サブCPUの制御プログラムが書換えられた場合、リセット要求をサブCPUに送信する。第２のリセット手段は、例えばサブCPUのリセット部により構成される。リセット部は、メインCPUから送信されてくるリセット要求に応じて、サブCPUを再起動させる。
【００５７】
これにより、複数のCPUの制御プログラムを書換えた後、適切な順序でCPUを再起動することができる。また、プログラム書換装置からリセット要求を送信する際には、メインCPUとサブCPUの制御プログラムの書換えが完了していることになる。
【発明の効果】
【００５８】
本発明によれば、効率よく、制御プログラムの書換えを行うことができる。
【図面の簡単な説明】
【００５９】
【図１】複数のCPUのそれぞれにより実行されるプログラムを書換える処理の概要について説明する。
【図２】制御装置のハードウェアの構成例を示すブロック図である。
【図３】プログラム書換装置のハードウェアの構成例を示すブロック図である。
【図４】プログラム書換システムの機能的構成を示す図である。
【図５】書換え情報のデータ構成例を示す図である。
【図６】プログラム書換システムで行われる処理の流れを説明する図である。
【図７】プログラム書換装置により実行される処理の詳細について説明するフローチャートである。
【図８】書換結果のエラー内容の例を示す図である。
【図９】メインCPUにより実行される処理の詳細について説明するフローチャートである。
【図１０】書換え開始処理の詳細について説明するフローチャートである。
【図１１】書換え情報受信処理の詳細について説明するフローチャートである。
【図１２】書換えデータ抽出処理の詳細について説明するフローチャートである。
【図１３】書換え対象判定処理の詳細について説明するフローチャートである。
【図１４】メインCPU不揮発性メモリ書き込み処理の詳細について説明するフローチャートである。
【図１５】メインCPU書き込み結果確認処理の詳細について説明するフローチャートである。
【図１６】サブCPU不揮発性メモリ書き込み処理の詳細について説明するフローチャートである。
【図１７】サブCPU書き込み結果確認処理の詳細について説明するフローチャートである。
【図１８】書換え結果判定処理の詳細について説明するフローチャートである。
【図１９】書換結果送信処理の詳細について説明するフローチャートである。
【図２０】リセット処理の詳細について説明するフローチャートである。
【図２１】サブCPUにより実行される処理の詳細について説明するフローチャートである。
【図２２】書換え開始処理の詳細について説明するフローチャートである。
【図２３】書換え情報受信処理の詳細について説明するフローチャートである。
【図２４】サブCPU不揮発性メモリ書き込み処理の詳細について説明するフローチャートである。
【図２５】サブCPUの書き込み結果確認処理の詳細について説明するフローチャートである。
【発明を実施するための形態】
【００６０】
以下、図面を参照しながら本発明の実施の形態について説明する。
【００６１】
まず、図１を参照して、本発明の実施の形態（以下、本実施の形態という）による、複数のCPUのそれぞれにより実行される制御プログラムを書換える処理の概要について説明する。
【００６２】
なお、図１においては、図中下側に図示された、複数のCPUを搭載した制御装置１との比較のため、１つのCPUを搭載した制御装置１０１が、図中の上側に図示されている。
【００６３】
制御装置１は、例えば、車両に搭載され、エンジンの制御を行うエンジン制御装置（ECU（Engine Control Unit））などの電子制御ユニットである。制御装置１には、メインCPU１１−１とサブCPU１１−２が搭載されており、それぞれのCPUが、別々の制御プログラムを実行することになる。すなわち、制御装置１においては、メインCPU１１−１を動作させるのに必要な制御プログラム及びデータを格納するためのROM１３−１と、メインCPU１１−１の演算結果等を一時的に格納するRAM１２とが設けられており、メインCPU１１−１は、ROM１３−１に記録された制御プログラムを実行することで、接続された制御対象の制御を行う。同様にまた、サブCPU１１−２は、ROM１３−２に記録された制御プログラムを実行することで、接続された制御対象の制御を行う。
【００６４】
一方、制御装置１０１は、１つのメインCPU１１１を搭載しており、メインCPU１１１は、適宜各種のデータなどをRAM１１２に記憶させながら、ROM１１３に記録された制御プログラムを実行することで、制御対象の制御を行う。
【００６５】
これらの制御装置の各CPUにより実行される制御プログラムを書換える場合、プログラム書換装置２を接続させて、プログラム書換装置２からの指示にしたがって、制御プログラムの書換えが行われる。
【００６６】
制御装置１０１の制御プログラムを書き換える場合、制御装置１０１には１つのメインCPU１１１が搭載されているので、ROM１１３に記録されていた制御プログラムが、更新用の制御プログラム１１４に書き換えられる。
【００６７】
一方、制御装置１には、メインCPU１１−１とサブCPU１１−２が搭載されており、それぞれのCPUが、別々の制御プログラムを実行することになる。従って、プログラム書換装置２を接続させて、制御プログラムの書換えを行う場合には、更新用の制御プログラム１４を、メインCPU１１−１とサブCPU１１−２で別個に書換える必要がある。
【００６８】
そこで、本実施の形態では、メインCPU１１−１とサブCPU１１−２を搭載する制御装置１において、メインCPU１１−１とサブCPU１１−２によりそれぞれ実行される制御プログラムを識別して、それらの制御プログラムを一括して書換えることが可能なプログラム書換システムについて説明する。すなわち、このプログラム書換システムは、制御装置１とプログラム書換装置２から構成されるので、まず、制御装置１及びプログラム書換装置２のハードウェア構成を説明してから、その後、プログラム書換システムの全体の構成を説明する。
【００６９】
図２は、本発明を適用した制御装置のハードウェアの構成例を示すブロック図である。
【００７０】
制御装置１においては、メインCPU１１−１、RAM１２−１、ROM１３−１、IOポート１５−１、及び外部通信部１６がCPUバス１４−１に接続され、サブCPU１１−２、RAM１２−２、ROM１３−２、及びIOポート１５−２がCPUバス１４−２に接続される。また、CPUバス１４−１とCPUバス１４−２が、書き込みインターフェース１７を介して接続されており、CPUバス１４−１側と、CPUバス１４−２側とが相互に通信可能である。
【００７１】
IOポート１５−１は制御対象に接続されており、メインCPU１１−１は、ROM１３−１に記録された制御プログラムを実行することで、接続された制御対象の制御を行うことは、先に述べたとおりである。同様に、IOポート１５−２は制御対象に接続されており、サブCPU１１−２は、ROM１３−２に記録された制御プログラムを実行することで、接続された制御対象の制御を行う。
【００７２】
外部通信部１６には、制御プログラムの書換え時に、プログラム書換装置２が接続され、メインCPU１１−１は、プログラム書換装置２との間で所定のデータのやり取りを行う。また、メインCPU１１−１は、制御プログラムの書換え時に、サブCPU１１−２との間で所定のデータのやり取りを行う。
【００７３】
以上のようにして、制御装置１は構成される。
【００７４】
図３は、本発明を適用したプログラム書換装置のハードウェアの構成例を示すブロック図である。
【００７５】
プログラム書換装置２においては、CPU２１、RAM２２、ROM２３、データ入力部２５、外部通信部２６、及び表示部２７がCPUバス２４を介して接続されている。データ入力部２５には、制御装置１のプログラムを書換えるためのデータが入力され、CPU２１に供給される。
【００７６】
外部通信部２６には、制御装置１の制御プログラムの書換え時に制御装置１が接続され、CPU２１は、制御装置１との間で所定のデータのやり取りを行う。表示部２７は、例えばLCD（Liquid Crystal Display）などから構成され、CPU２１の制御にしたがって、各種の情報を表示する。
【００７７】
以上のようにして、プログラム書換装置２は構成される。
【００７８】
図４は、本発明を適用したプログラム書換システムの機能的構成を示す図である。
【００７９】
図４に示すように、プログラム書換システムは、制御装置１とプログラム書換装置２から構成される。
【００８０】
プログラム書換装置２は、書換指令送信部７１、書換情報取得部７２、書換情報送信部７３、書換結果確認部７４、書換結果表示部７５、及びリセット部７６から構成される。
【００８１】
書換指令送信部７１は、例えばユーザの操作に応じて、書換えの開始を通知する指令（以下、書換え開始指令という）を、制御装置１に送信して通知する。
【００８２】
書換情報取得部７２は、プログラム書換え情報が格納されたファイルを外部から読込み、書換情報送信部７３に供給する。書換情報送信部７３は、書換情報取得部７２から供給されたプログラム書換え情報（以下、単に書換え情報ともいう）を、制御装置１に送信する。
【００８３】
ここで、図５を参照して、プログラム書換え情報（書換え情報）の詳細な構成について説明する。
【００８４】
図５に示すように、プログラム書換え情報は、制御装置IDと、１CPU用更新データから構成される。制御装置IDは、制御装置を識別するための識別子であり、この制御装置IDに対応するように１CPU用の更新データが格納される。なお、制御装置IDと更新データとの組み合わせを書換えデータとも称する。１CPU用の更新データは、書換対象識別情報、サブCPU用書換えプログラム、メインCPU用書換えプログラム、サブCPU更新用制御プログラム、及びメインCPU更新制御用プログラムから構成される。
【００８５】
書換対象識別情報には、メインCPU１１−１とサブCPU１１−２のそれぞれについて、更新するか否かを示す更新フラグ、書換え消去プログラムの開始位置、及び更新プログラム開始位置が格納される。
【００８６】
更新フラグは、メインCPU１１−１とサブCPU１１−２のそれぞれについて制御プログラムの更新を行うか否かを示す情報であって、例えば、更新する場合には１が設定され、更新しない場合には０が設定される。また、書換え消去プログラムの開始位置には、消去される制御プログラムの開始位置（アドレス）が設定され、更新プログラム開始位置には、更新用制御プログラムの開始位置（アドレス）が設定される。
【００８７】
サブCPU用書換えプログラムは、サブCPU１１−２の書換え時に起動されるプログラムである。サブCPU用書換えプログラムには、対象となるサブCPU１１−２を識別するためのID、書き込み先アドレス、書き込みデータ長、及びデータから構成される。メインCPU用書換えプログラムは、メインCPU１１−１の書換え時に起動されるプログラムである。メインCPU用書換えプログラムには、対象となるメインCPU１１−１を識別するためのID、書き込み先アドレス、書き込みデータ長、及びデータから構成される。
【００８８】
サブCPU更新用制御プログラムは、サブCPU１１−２用の制御プログラムである。サブCPU更新用制御プログラムには、対象となるサブCPU１１−２を識別するためのID、書き込み先アドレス、書き込みデータ長、及びデータから構成される。メインCPU更新用制御プログラムは、メインCPU１１−１用の制御プログラムである。メインCPU更新用制御プログラムは、対象となるメインCPU１１−１を識別するためのID、書き込み先アドレス、書き込みデータ長、及びデータから構成される。
【００８９】
以上のようにして、プログラム書換え情報は構成される。
【００９０】
図４の説明に戻り、書換結果確認部７４は、制御プログラムの書換え結果を問い合わせるために、書換え結果の確認要求（以下、単に、確認要求ともいう）を、制御装置１に送信する。書換結果確認部７４は、問い合わせの結果送られてくる、書換え結果を受信し、書換結果表示部７５に供給する。書換結果表示部７５は、書換結果確認部７４から供給される書換え結果に対応する情報を表示することで、ユーザに対して、制御プログラムの書換え結果を通知する。
【００９１】
リセット部７６は、制御プログラムの書換え後の制御装置１をリセットさせるための要求（以下、リセット要求という）を、制御装置１に送信する。
【００９２】
また、制御装置１は、メインCPU１１−１と、サブCPU１１−２から構成される。メインCPU１１−１は、書換指令受信部３１、動作状態切替部３２、書換情報受信部３３、書換データ抽出部３４、書換対象判定部３５、第１の不揮発性メモリ書き込み部３６、第１の不揮発性メモリ３７、第２の不揮発性メモリ書き込み部３８、書換結果判定部３９、書換結果記録部４０、書換結果送受信部４１、及びリセット部４２から構成される。
【００９３】
書換指令受信部３１は、プログラム書換装置２から送信されてくる、制御プログラムの書換え開始指令を受信し、動作状態切替部３２に供給する。動作状態切替部３２は、書換指令受信部３１から供給される書換え開始指令、又は書換データ抽出部３４から供給される更新データに応じて、メインCPU１１−１により実行させるプログラムを切り替える。
【００９４】
書換情報受信部３３は、プログラム書換装置２から送信されてくる書換え情報を受信し、書換データ抽出部３４に供給する。書換データ抽出部３４は、書換情報受信部３３から供給される書換え情報から、制御装置IDや更新データを抽出し、動作状態切替部３２、書換対象判定部３５、第１の不揮発性メモリ書き込み部３６、及び第２の不揮発性メモリ書き込み部３８に供給する。
【００９５】
書換対象判定部３５は、書換データ抽出部３４による抽出結果に基づいて、書換え対象を判定し、判定結果を、第１の不揮発性メモリ書き込み部３６及び第２の不揮発性メモリ書き込み部３８に供給する。第１の不揮発性メモリ書き込み部３６は、書換対象判定部３５による判定結果に基づいて、書換データ抽出部３４から供給される更新データ（メインCPU更新用制御プログラム）を、第１の不揮発性メモリ３７に書き込む。
【００９６】
第２の不揮発性メモリ書き込み部３８は、書換対象判定部３５による判定結果に基づいて、書換データ抽出部３４から供給される更新データ（サブCPU用書換えプログラム、サブCPU更新制御プログラム）を送信する。
【００９７】
書換結果送受信部４１は、サブCPU１１−２から、サブCPU１１−２の制御プログラムの書換えに関するエラー判定処理の判定結果を受信し、書換結果判定部３９に供給する。書換結果判定部３９は、メインCPU１１−１及びサブCPU１１−２の制御プログラムの書換えに関するエラー判定処理を行い、判定結果を書換結果記録部４０に記録する。なお、簡略化のために図示はしていないが、書換結果判定部３９には、各ブロックからエラー判定に関する各種の情報が供給される。
【００９８】
書換結果送受信部４１は、書換結果記録部４０に記録された書換え結果を読み出し、プログラム書換装置２に送信する。
【００９９】
リセット部４２は、プログラム書換装置２から送信されてくる、リセット要求に応じて、メインCPU１１−１を再起動する。また、リセット部４２は、サブCPU１１−２において制御プログラムが書換えられた場合、リセット要求を、サブCPU１１−２に転送する。
【０１００】
また、制御装置１において、サブCPU１１−２は、書換指令受信部５１、動作状態切替部５２、書換情報受信部５３、第２の不揮発性メモリ書き込み部５４、第２の不揮発性メモリ５５、書換結果判定部５６、書換結果記録部５７、書換結果送受信部５８、及びリセット部５９から構成される。
【０１０１】
書換指令受信部５１は、メインCPU１１−１から送信されてくる、制御プログラムの書換え開始指令を受信し、動作状態切替部５２に供給する。動作状態切替部５２は、書換指令受信部５１から供給される書換え開始指令、又は書換情報受信部５３から供給される更新データに応じて、サブCPU１１−２により実行させるプログラムを切り替える。
【０１０２】
書換情報受信部５３は、メインCPU１１−１から送信されてくる、更新データ（サブCPU用書換えプログラム、サブCPU更新制御プログラム）を受信し、動作状態切替部５２及び第２の不揮発性メモリ書き込み部５４に供給する。
【０１０３】
第２の不揮発性メモリ書き込み部５４は、書換情報受信部５３から供給される更新データ（サブCPU更新制御プログラム）を、第２の不揮発性メモリ５５に書き込む。また、第２の不揮発性メモリ書き込み部５４は、サブCPU更新制御プログラムの書き込み時のエラーに関する情報を、書換結果判定部５６に供給する。
【０１０４】
書換結果判定部５６は、第２の不揮発性メモリ書き込み部５４から供給されるエラーに関する情報に基づいて、サブCPU１１−２の制御プログラムの書換えに関するエラー判定処理を行い、判定結果を書換結果記録部５７に記録する。
【０１０５】
書換結果送受信部５８は、メインCPU１１−１からの要求に応じて、書換結果記録部５７に記録された書換え結果を読み出し、メインCPU１１−１に送信する。
【０１０６】
リセット部５９は、メインCPU１１−１から送信されてくる、リセット要求に応じて、サブCPU１１−２を再起動する。
【０１０７】
以上のようにして、プログラム書換システムは構成される。
【０１０８】
次に、図６を参照して、プログラム書換システムで行われるプログラム書換え処理の流れについて説明する。
【０１０９】
なお、図６において、ステップＳ１乃至９の処理は、プログラム書換装置２により実行される処理であり、ステップＳ１１乃至２２の処理は、メインCPU１１−１により実行される処理、ステップＳ３１乃至Ｓ３９の処理は、サブCPU１１−２により実行される処理である。
【０１１０】
プログラム書換装置２は、ユーザにより制御プログラムの書換えの開始の操作がなされるまで、その書換え開始操作による指示待ちの状態となる（ステップＳ１の処理）。そして、ユーザにより、書換えの開始の操作がなされると、書換え開始指令を、制御装置１に通知する。その後、ステップＳ３において、書換情報取得部７２は、外部よりプログラム書換え情報（書換え情報）を読込み、ステップＳ４において、書換情報送信部７３は、その書換え情報を制御装置１に送信する。
【０１１１】
制御装置１に対して書換え情報を送信すると、制御装置１ではメインCPU１１−１及びサブCPU１１−２において制御プログラムの書換え処理が行われるので、ステップＳ５において、書換結果確認部７４は、確認要求を、制御装置１に要求する。すると、制御装置１から書換え結果が送信されてくるので、書換結果確認部７４は、書換え結果を受信し（ステップＳ６の処理）、その書換え結果を判定する（ステップＳ７の処理）。そして、書換結果表示部７５は、書換結果確認部７４による書き換え結果の判定結果を表示する（ステップＳ８の処理）。
【０１１２】
ステップＳ９において、リセット部７６は、制御プログラムの書換え後の制御装置１をリセットさせるためのリセット要求を、制御装置１に送信する。
【０１１３】
以上のようにして、プログラム書換装置２により処理が実行されるが、プログラム書換装置２で行われる処理の詳細については、図７のフローチャートを参照して後述する。
【０１１４】
制御装置１においては、メインCPU１１−１とサブCPU１１−２がそれぞれ処理を実行する。メインCPU１１−１は、プログラム書換装置２から書換え開始指令が通知されるまで、接続された制御対象の制御を行う（ステップＳ１１の処理）。その後、プログラム書換装置２から書換え開始指令が通知されると、制御プログラムの書換え処理を開始する（ステップＳ１２の処理）。ステップＳ１３において、書換情報受信部３３は、プログラム書換装置２から送信されてくる書換え情報を受信する。ステップＳ１４において、書換データ抽出部３４は、受信された書換え情報から書換えデータを抽出することで、メインCPU用書換えプログラムが起動される（ステップＳ１５の処理）。
【０１１５】
ステップＳ１６において、書換対象判定部３５は、メインCPU１１−１とサブCPU１１−２の書換え対象を判定する。ステップＳ１７において、第１の不揮発性メモリ書き込み部３６は、書換対象判定部３５の判定結果にしたがって、メインCPU１１−１の更新を行う場合には、第１の不揮発性メモリ３７の所定の領域に、メインCPU更新用制御プログラムを書き込む。ステップＳ１８において、第２の不揮発性メモリ書き込み部３８は、書換対象判定部３５の判定結果にしたがって、サブCPU１１−２の更新を行う場合には、サブCPU１１−２に対して書換え開始指令を送信した後、サブCPU１１−２用の書換え情報を送信する。また、第２の不揮発性メモリ書き込み部３８は、書換え結果をサブCPU１１−２に確認要求を送信して、書換え結果を受信する。
【０１１６】
ステップＳ１９において、書換結果判定部３９は、書換結果記録部４０に記録された判定結果を参照して、書換え結果を判定し、ステップＳ２０において、書換結果判定部３９の書換え結果を、プログラム書換装置２に送信する。その後、プログラム書換装置２からリセット結果が送信されてくるので、ステップＳ２１において、リセット部４２は、メインCPU１１−１のリセットを行う。これにより、再起動後のメインCPU１１−１では、書換え後の制御プログラムが起動され、通常動作が再開される（ステップＳ２２の処理）。なお、リセット部４２は、サブCPU１１−２の更新が行われた場合には、リセット要求を、サブCPU１１−２に送信する。
【０１１７】
以上のようにして、メインCPU１１−１により処理が実行されるが、メインCPU１１−１で行われる処理の詳細については、図９乃至図２０のフローチャートを参照して、後述する。
【０１１８】
サブCPU１１−２は、メインCPU１１−１から書換え開始指令が通知されるまで、接続された制御対象の制御を行う（ステップＳ３１の処理）。その後、CPU１１−１から書換え開始指令が通知されると、制御プログラムの書換え処理を開始する（ステップＳ３２の処理）。すると、メインCPU１１−１から、サブCPU１１−２用の書換え情報が送信されてくるので、書換情報受信部５３は、書換え情報を受信し（ステップＳ３３の処理）、サブCPU用の書換えプログラムが起動される（ステップＳ３４の処理）。
【０１１９】
ステップＳ３５において、第２の不揮発性メモリ書き込み部５４は、第２の不揮発性メモリ５５の所定の領域に、メインCPU１１−１から受信したサブCPU更新用制御プログラムを書き込む。ステップＳ３６において、書換結果判定部５６は、書換結果記録部５７に記録された判定結果を参照して、書換え結果を判定し、ステップＳ３７において、書換結果判定部５６の書換え結果を、メインCPU１１−１に送信する。その後、メインCPU１１−１からリセット要求が送信されてくるので、ステップＳ３８において、リセット部５９は、サブCPU１１−２のリセットを行う。これにより、再起動後のサブCPU１１−２では、書換え後の制御プログラムが起動され、通常動作が再開される（ステップＳ３９の処理）。
【０１２０】
以上のようにして、サブCPU１１−２により処理が実行されるが、メインCPU１１−１で行われる処理の詳細については、図２１乃至図２５のフローチャートを参照して、後述する。
【０１２１】
このように、プログラム書換システムでは、プログラム書換装置２によって、制御装置IDと更新データで構成された書換え情報を用いて、制御装置１の制御プログラムの書換えを行うに際して、プログラム書換装置２側から１回の書き込み指令を行って、書換え情報を送信するだけで、制御装置１側においては、適切なプログラムのみを識別して、メインCPU１１−１、サブCPU１１−２の制御プログラムを一括して書換えることができる。
【０１２２】
次に、プログラム書換システムを構成する各装置で行われる処理の詳細について説明する。まず、図７のフローチャートを参照して、プログラム書換装置２により実行されるプログラム書換え処理の詳細について説明するが、基本的には、図６を参照して説明したステップＳ１乃至Ｓ９の処理と同様である。
【０１２３】
プログラム書換装置２では、ユーザにより書換え操作が開始されない場合には、書換え開始の操作待ち状態となる（ステップＳ１Ａの処理）。一方、ユーザにより書換え開始の操作がなされた場合（ステップＳ１Ｂの「Yes」）、処理は、ステップＳ２に進む。
【０１２４】
ステップＳ２において、書換指令送信部７１は、書換えの開始を通知するための書換え開始指令を、制御装置１に通知する。ステップＳ３において、書換情報取得部７２は、プログラム書換え情報が格納されたファイル（書換え情報）を読込み、書換情報送信部７３に供給する。
【０１２５】
ステップＳ４において、書換情報送信部７３は、書換情報取得部７２から供給された書換え情報を、制御装置１に送信する。これにより、制御装置１では、メインCPU１１−１と、サブCPU１１−２において、制御プログラムの書換えが行われる。
【０１２６】
制御装置１側で制御プログラムの書換え処理が行われると、その処理結果を確認するために、書換結果確認部７４は、ステップＳ５において、制御プログラムの書換え結果を問い合わせるために、書換え結果の確認要求を、制御装置１に送信する。
【０１２７】
書換結果確認部７４は、ステップＳ６において、制御装置１から送信されてくる書換え結果を受信し、ステップＳ７において、受信した書換え結果にエラー情報が含まれているか否かを判定する。
【０１２８】
ステップＳ７において、書換え結果にエラー情報が含まれていないと判定された場合、ステップＳ８Ａにおいて、書換結果表示部７５は、書換結果確認部７４から供給される書換え結果に基づいて、書換えの正常終了を表示する。一方、書換結果にエラー情報が含まれていると判定された場合、ステップＳ８Ｂにおいて、書換結果表示部７５は、書換結果確認部７４から供給される書換結果に基づいて、書換えエラーを表示する。
【０１２９】
図８は、書換え結果のエラー内容の例を示す図である。
【０１３０】
図８に示すように、０乃至８のビット列に対して、各エラー内容が割り当てられており、エラーが発生したときには対応するビットが立てられる（例えば、対象のビットが１となる）。
【０１３１】
すなわち、ビット列のうちの先頭のビットが１となったときには「タイムアウトエラー」、２番目のビットが１となったときには「制御装置ID不一致エラー」、３番目のビットが１となったときには「更新なしエラー」、４番目のビットが１となったときには「メインCPUのIDエラー」、５番目のビットが１となったときには「サブCPUのIDエラー」のエラーがそれぞれ発生したことになる。
【０１３２】
さらに、ビット列のうちの先頭から６番目のビットが１となったときには「メインCPUの書き込み後エラー」、７番目のビットが１となったときには「サブCPUの書き込み後エラー」、８番目のビットが１となったときには「メインCPUの書き込みエラー」、９番目のビットが１となったときには「サブCPUの書き込みエラー」のエラーがそれぞれ発生したことになる。なお、全てのビットが０となるときは、制御プログラムの書換えが正常に終了したことを示す。
【０１３３】
このように、制御装置１に対して確認要求を送信すると、正常に終了したことを示すビット列や、制御プログラムの書換え時のエラー内容に応じたビット列を返してくるので、書換結果表示部７５には、そのビット列に応じたエラー内容が表示される。
【０１３４】
図７のフローチャートに戻り、制御プログラムの書換えが正常又はエラーで終了すると、プログラム書換装置２では、制御装置１に対して、制御対象の制御を行う通常の動作に戻るように、リセット要求が送信され（ステップＳ９の処理）、制御プログラムの書換え処理が終了する。これにより、制御装置１では、正常の動作として、制御対象の制御が行われる。
【０１３５】
次に、図９乃至図２０のフローチャートを参照して、メインCPU１１−１により実行される処理の詳細について説明する。
【０１３６】
まず、図９のフローチャートを参照して、メインCPU１１−１の処理を説明するが、基本的には、図６を参照して説明したステップＳ１１乃至Ｓ２１の処理と同様である。
【０１３７】
すなわち、メインCPU１１−１では、プログラム書換装置２から制御プログラムの書換え指令を受けない場合には、通常動作として、制御対象の制御が行われる（ステップＳ１１Ａの処理）。一方、書換指令受信部３１によって、プログラム書換装置２から制御プログラムの書換え開始指令が受信された場合（ステップＳ１１Ｂの「Yes」）、処理は、ステップＳ１２に進む。そして、メインCPU１１−１では、制御プログラムの書換え処理が開始される。
【０１３８】
ここで、図１０のフローチャートを参照して、図９のステップＳ１２の処理に対応する書換え開始処理の詳細について説明する。
【０１３９】
ステップＳ５１において、動作状態切替部３２は、メインCPU１１−１が実行するプログラムを、通常動作の制御プログラムから、専用のブートプログラムに切り替えて、ブートプログラムによる動作が行われるようにする。これにより、メインCPU１１−１では、書換えモードでの動作を開始することになる（ステップＳ５２の処理）。
【０１４０】
すなわち、図９のフローチャートの各ステップの左側に記述しているように、ステップＳ１１Ａ乃至Ｓ１１Ｂの処理は、「通常動作の制御プログラム」により実行されていたが、それ以降のステップＳ１２乃至Ｓ１５の処理は、「ブートプログラム」により実行されることになる。
【０１４１】
ステップＳ５２の処理が終了すると、処理は、図９のステップＳ１２の処理に戻り、ステップＳ１３以降の処理が実行される。
【０１４２】
ステップＳ１３において、書換情報受信部３３は、プログラム書換装置２から送信されてくる書換え情報を受信する。
【０１４３】
ここで、図１１のフローチャートを参照して、図９のステップＳ１３の処理に対応する書換え情報受信処理の詳細について説明する。
【０１４４】
ステップＳ６１において、書換情報受信部３３は、プログラム書換装置２から送信されてくる書換え情報を受信する。書換情報受信部３３は、ステップＳ６２において、あらかじめ定められた受信時間を経過したか否かを判定することで、タイムアウトとなったか否かを判定する。
【０１４５】
ステップＳ６２において、タイムアウトになっていないと判定された場合、ステップＳ６３において、書換情報受信部３３は、プログラム書換装置２から書換え情報が受信されたか否かを判定し、書換え情報が受信されていないと判定された場合、処理は、ステップＳ６１に戻り、上述した、ステップＳ６１乃至Ｓ６３の処理が繰り返される。すなわち、書換情報受信部３３は、プログラム書換装置２から書換え情報が受信されていない場合、タイムアウトするまで、書換え情報の受信処理を継続することになる。
【０１４６】
一方、ステップＳ６２において、書換え情報を受信できずに、タイムアウトしたと判定された場合、書換結果判定部３９は、メインCPU１１−１の書換え情報のタイムアウトを判定し（ステップＳ６４の処理）、書換え情報のタイムアウトエラーを、書換結果記録部４０に記録する（ステップＳ６５の処理）。
【０１４７】
書換え情報が受信されたと判定された場合（ステップＳ６３の「Yes」）又はステップＳ６５の処理が終了すると、処理は、図９のステップＳ１３に戻り、ステップＳ１４以降の処理が実行される。
【０１４８】
ステップＳ１４において、書換データ抽出部３４は、書換情報受信部３３から供給される書換え情報から、書換えデータ（制御装置IDと更新データ）を抽出する。
【０１４９】
ここで、図１２のフローチャートを参照して、図９のステップＳ１４の処理に対応する書換えデータ抽出処理について説明する。
【０１５０】
書換えデータ抽出処理においては、はじめに、プログラム書換装置２から書換え情報が受信されたか否かが判定され（ステップＳ７０の処理）、書換え情報が受信されたと判定された場合（ステップＳ７０の「Yes」）、処理は、ステップＳ７１に進む。書換データ抽出部３４は、書換え情報から制御装置IDを抽出し（ステップＳ７１の処理）、抽出された制御装置IDが、自機の制御装置IDと一致するか否かを判定する（ステップＳ７２の処理）。
【０１５１】
ステップＳ７２において、自機の制御装置IDと一致すると判定された場合、書換データ抽出部３４は、書換え情報から１CPU用更新データを抽出し（ステップＳ７３の処理）、抽出された１CPU用更新データに格納された書換対象識別情報と、更新データをさらに抽出する（ステップＳ７４の処理）。
【０１５２】
ステップＳ７５において、書換データ抽出部３４は、抽出された書換対象識別情報のメインCPU１１−１用の更新フラグを参照して、メインCPU１１−１の更新をする必要があるか否かを判定する。
【０１５３】
ステップＳ７５において、メインCPU１１−１用の更新フラグが立っており、メインCPU１１−１の更新をする必要があると判定された場合、書換データ抽出部３４は、更新データから、メインCPU用書換えプログラムと、メインCPU更新用制御プログラムを抽出する（ステップＳ７６，Ｓ７７）。これにより、メインCPU１１−１の更新がある場合には、更新データから、メインCPU用書換えプログラムと、メインCPU更新用制御プログラムが抽出される。
【０１５４】
一方、ステップＳ７５において、メインCPU１１−１の更新をする必要がないと判定された場合、メインCPU１１−１用の更新データを抽出する必要がないので、ステップＳ７６，Ｓ７７をスキップして、処理は、ステップＳ７８に進む。
【０１５５】
続いて、ステップＳ７８において、書換データ抽出部３４は、抽出された書換対象識別情報のサブCPU１１−２用の更新フラグを参照して、サブCPU１１−２の更新をする必要があるか否かを判定する。
【０１５６】
ステップＳ７８において、サブCPU１１−２用の更新フラグが立っており、サブCPU１１−２の更新をする必要があると判定された場合、書換データ抽出部３４は、更新データから、サブCPU用書換えプログラムと、サブCPU更新用制御プログラムを抽出する（ステップＳ７９，Ｓ８０）。これにより、サブCPU１１−２の更新がある場合には、更新データから、サブCPU用書換えプログラムと、サブCPU更新用制御プログラムが抽出される。
【０１５７】
一方、ステップＳ７８において、サブCPU１１−２の更新をする必要がないと判定された場合、サブCPU１１−２用の更新データを抽出する必要がないので、ステップＳ７９，Ｓ８０はスキップされる。
【０１５８】
そして、書換え情報が受信されていないと判定されるか（ステップＳ７０の「No」）、ステップＳ８０の処理が終了するか、あるいは、ステップＳ７９，Ｓ８０の処理がスキップされる（ステップＳ７８の「No」）と、処理は、図９のステップＳ１４に戻り、ステップＳ１５以降の処理が実行される。
【０１５９】
ステップＳ１５において、動作状態切替部３２は、更新データから抽出されたメインCPU用書換えプログラムを起動して、メインCPU１１−１が実行するプログラムを、ブートプログラムから、メインCPU用書換えプログラムに切替える。
【０１６０】
すなわち、図９のフローチャートの各ステップの左側に記述しているように、ステップＳ１２乃至Ｓ１５の処理は、「ブートプログラム」により実行されていたが、それ以降のステップＳ１６乃至Ｓ２１の処理は、「書換えプログラム」により実行されることになる。
【０１６１】
ステップＳ１６において、書換対象判定部３５は、書換え対象判定処理を行う。
【０１６２】
ここで、図１３のフローチャートを参照して、図９のステップＳ１６の処理に対応する書換え対象判定処理の詳細について説明する。
【０１６３】
ステップＳ９１において、書換対象判定部３５は、書換データ抽出部３４の抽出結果に基づいて、書換え情報に書換えデータ（制御装置IDと更新データ）が格納されていたるか否かを判定する。ステップＳ９１において、書換えデータが格納されていると判定された場合、処理は、ステップＳ９２に進む。一方、ステップＳ９１において、書換えデータが格納されていないと判定された場合、以降の判定処理を行う必要がないので、ステップＳ９２乃至Ｓ１０１をスキップする。
【０１６４】
ステップＳ９２において、書換対象判定部３５は、メインCPU１１−１の更新をする必要があるか否かを判定する。ステップＳ９２において、メインCPU１１−１の更新をする必要があると判定された場合、処理はステップＳ９３に進む。一方、ステップＳ９２において、メインCPU１１−１の更新をする必要がないと判定された場合、メインCPU１１−１に関する判定処理を行う必要がないので、ステップＳ９３乃至Ｓ９６をスキップして、処理は、ステップＳ９７に進む。
【０１６５】
ステップＳ９３において、書換対象判定部３５は、例えば、メインCPU１１−１を識別するためにあらかじめ割り当てられている識別子（ID）と、更新データに格納されたメインCPU用書換えプログラム又はメインCPU更新用制御プログラムのIDとを比較することで、メインCPU１１−１のIDが正常であるか否かを判定する。
【０１６６】
ステップＳ９３において、メインCPU１１−１のIDが正常であると判定された場合、ステップＳ９４において、書換対象判定部３５は、メインCPU１１−１の更新を行うと判定し、判定結果を第１の不揮発性メモリ書き込み部３６に供給する。一方、メインCPU１１−１のIDが異常であると判定された場合、書換対象判定部３５は、判定結果を書換結果判定部３９に供給し、処理は、ステップＳ９５に進む。書換結果判定部３９は、メインCPU１１−１のIDの異常を判定し（ステップＳ９５の処理）、メインCPU１１−１のIDエラーを、書換結果記録部４０に記録する（ステップＳ９６の処理）。
【０１６７】
ステップＳ９４又はＳ９６の処理が終了すると、処理は、ステップＳ９７に進む。ステップＳ９７において、書換対象判定部３５は、サブCPU１１−２の更新をする必要があるか否かを判定する。ステップＳ９７において、サブCPU１１−２の更新をする必要があると判定された場合、処理は、ステップＳ９８に進む。一方、ステップＳ９７において、サブCPU１１−２の更新をする必要がないと判定された場合、サブCPU１１−２に関する判定処理を行う必要がないので、ステップＳ９８乃至Ｓ１０１をスキップする。
【０１６８】
ステップＳ９８において、書換対象判定部３５は、例えば、サブCPU１１−２を識別するためにあらかじめ割り当てられている識別子（ID）と、更新データに格納されたサブCPU用書換えプログラム又はサブCPU更新用制御プログラムのIDとを比較することで、サブCPU１１−２のIDが正常であるか否かを判定する。
【０１６９】
ステップＳ９８において、サブCPU１１−２のIDが正常であると判定された場合、ステップＳ９９において、書換対象判定部３５は、サブCPU１１−２の更新を行うと判定し、判定結果を第２の不揮発性メモリ書き込み部３８に供給する。一方、サブCPU１１−２のIDが異常であると判定された場合、書換対象判定部３５は、判定結果を書換結果判定部３９に供給し、処理は、ステップＳ１００に進む。書換結果判定部３９は、サブCPU１１−２のIDの異常を判定し（ステップＳ１００の処理）、サブCPU１１−２のIDエラーを、書換結果記録部４０に記録する。
【０１７０】
そして、更新データが存在しないと判定された場合（ステップＳ９１の「Yes」）、サブCPU１１−２を更新しないと判定された場合（ステップＳ９７の「No」）、又は、ステップＳ９９若しくはＳ１０１の処理が終了した場合、処理は、図９のステップＳ１６に戻り、ステップＳ１７以降の処理が実行される。
【０１７１】
ステップＳ１７において、第１の不揮発性メモリ書き込み部３６は、メインCPU不揮発性メモリ書き込み処理を行う。
【０１７２】
ここで、図１４のフローチャートを参照して、図９のステップＳ１７の処理に対応するメインCPU不揮発性メモリ書き込み処理の詳細について説明する。
【０１７３】
ステップＳ１１１において、第１の不揮発性メモリ書き込み部３６は、書換対象判定部３５からの判定結果に基づいて、メインCPU１１−１の更新を行うか否かを判定する。
【０１７４】
ステップＳ１１１において、メインCPU１１−１の更新を行うと判定された場合、第１の不揮発性メモリ書き込み部３６は、第１の不揮発性メモリ３７の更新領域のデータを消去し（ステップＳ１１２の処理）、その消去された領域に、メインCPU更新用制御プログラムを書き込む（ステップＳ１１３の処理）。
【０１７５】
そして、ステップＳ１１４において、第１の不揮発性メモリ書き込み部３６は、メインCPU書き込み結果確認処理を行う。
【０１７６】
ここで、図１５のフローチャートを参照して、メインCPU書き込み結果確認処理の詳細を説明する。
【０１７７】
ステップＳ１２１において、第１の不揮発性メモリ書き込み部３６は、書換対象判定部３５からの判定結果に基づいて、メインCPU１１−１の更新を行うか否かを判定する。ステップＳ１２１において、メインCPU１１−１の更新を行うと判定された場合、処理は、ステップＳ１２２に進み、チェックサム検証が行われる。一方、ステップＳ１２１において、メインCPU１１−１の更新を行わないと判定された場合、チェックサム検証を行う必要がないため、ステップＳ１２２乃至Ｓ１２５をスキップする。
【０１７８】
ステップＳ１２２において、第１の不揮発性メモリ書き込み部３６は、メインCPU１１−１の制御プログラム領域のチェックサム検証を実行する。なお、ここでは、制御プログラム領域の検証方法の一例として、チェックサム検証を述べたが、他の検証方法を用いることも勿論可能である。
【０１７９】
ステップＳ１２３において、第１の不揮発性メモリ書き込み部３６は、制御プログラム領域のチェックサムがチェックされ、正常であるか否かを判定する。ステップＳ１２３において、制御プログラム領域のチェックサムがチェックされ、異常であると判定された場合、第１の不揮発性メモリ書き込み部３６は、チェックサム検証の結果を書換結果判定部３９に供給し、処理は、ステップＳ１２４に進む。書換結果判定部３９は、メインCPU１１−１の書き込みエラーを判定し（ステップＳ１２４の処理）、メインCPU１１−１の書き込みエラーを、書換結果記録部４０に記録する（ステップＳ１２５の処理）。
【０１８０】
そして、メインCPU１１−１の更新を行わないと判定された場合（ステップＳ１２１の「No」）、制御プログラム領域のチェックサムがチェックされ、正常であると判定された場合（ステップＳ１２３の「Yes」）、又は、ステップＳ１２５の処理が終了した場合、処理は、図１４のステップＳ１１４に戻る。そしてさらに、処理は、図９のステップＳ１７に戻り、ステップＳ１８以降の処理が実行される。
【０１８１】
ステップＳ１８において、第２の不揮発性メモリ書き込み部３８は、サブCPU不揮発性メモリ書き込み処理を行う。
【０１８２】
ここで、図１６のフローチャートを参照して、図９のステップＳ１８の処理に対応するサブCPU不揮発性メモリ書き込み処理の詳細について説明する。
【０１８３】
ステップＳ１３１において、第２の不揮発性メモリ書き込み部３８は、書換対象判定部３５からの判定結果に基づいて、サブCPU１１−２の更新を行うか否かを判定する。
【０１８４】
ステップＳ１３１において、サブCPU１１−２の更新を行うと判定された場合、ステップＳ１３２において、第２の不揮発性メモリ書き込み部３８は、サブCPU１１−２に対して書換えの開始を通知するための書換え指令を、サブCPU１１−２に通知する。
【０１８５】
サブCPU１１−２への書換え指令の通知が完了すると、第２の不揮発性メモリ書き込み部３８は、書換データ抽出部３４により抽出されたサブCPU用書換えプログラムと、サブCPU更新制御プログラムを、書換え情報として、サブCPU１１−２に送信する（ステップＳ１３３，Ｓ１３４の処理）。
【０１８６】
そして、ステップＳ１３５において、第２の不揮発性メモリ書き込み部３８は、サブCPU書き込み結果確認処理を行う。
【０１８７】
ここで、図１７のフローチャートを参照して、サブCPU書き込み結果確認処理を行う。
【０１８８】
ステップＳ１４１において、第２の不揮発性メモリ書き込み部３８は、書換対象判定部３５からの判定結果に基づいて、サブCPU１１−２の更新を行うか否かを判定する。ステップＳ１４１において、サブCPU１１−２の更新を行うと判定された場合、処理は、ステップＳ１４２に進み、第２の不揮発性メモリ書き込み部３８は、サブCPU１１−２に対し確認要求を送信して、制御プログラムの書換えの確認を行う。一方、ステップＳ１４１において、サブCPU１１−２の更新を行わないと判定された場合、制御プログラムの書換えの確認を行う必要がないため、ステップＳ１４２乃至Ｓ１４８をスキップする。
【０１８９】
ステップＳ１４２において、第２の不揮発性メモリ書き込み部３８は、書換えの確認要求を、サブCPU１１−２に送信する。
【０１９０】
ステップＳ１４３において、第２の不揮発性メモリ書き込み部３８は、サブCPU１１−２から確認要求に対する応答があったか否かを判定する。ステップＳ１４３において、確認要求に対する応答がないと判定された場合、第２の不揮発性メモリ書き込み部３８は、応答の可否の結果を、書換結果判定部３９に供給し、処理は、ステップＳ１４４に進む。
【０１９１】
書換結果判定部３９は、第２の不揮発性メモリ書き込み部３８からのサブCPU１１−２の応答の可否の結果に基づいて、サブCPU１１−２の書き込み後エラーを判定し（ステップＳ１４４の処理）、サブCPU１１−２からの応答がないということは、サブCPU１１−２の書き込み後にエラーが発生したものと考えられるため、サブCPU１１−２の書き込みエラーを、書換結果記録部４０に記録する（ステップＳ１４５の処理）。
【０１９２】
続いて、ステップＳ１４６において、第２の不揮発性メモリ書き込み部３８は、サブCPU１１−２から送信されてくる応答に基づいて、サブCPU１１−２の制御プログラム領域のチェックサム検証の結果を判定する。ステップＳ１４６において、サブCPU１１−２の制御プログラム領域のチェックサムがチェックされ、異常であると判定された場合、第２の不揮発性メモリ書き込み部３８は、チェックサム検証の結果を書換結果判定部３９に供給し、処理は、ステップＳ１４７に進む。書換結果判定部３９は、第２の不揮発性メモリ書き込み部３８からのチェックサム検証の結果に基づいて、サブCPU１１−２の書き込みエラーを判定し（ステップＳ１４７の処理）、サブCPU１１−２の書き込みエラーを、書換結果記録部４０に記録する（ステップＳ１４８の処理）。
【０１９３】
そして、サブCPU１１−２の更新を行わないと判定された場合（ステップＳ１４１の「No」）、サブCPU１１−１から応答があって、制御プログラム領域のチェックサムがチェックされ、正常であると判定された場合（ステップＳ１４６の「Yes」）、又は、ステップＳ１４８の処理が終了した場合、処理は、図１６のステップＳ１３５に戻る。そしてさらに、処理は、図９のステップＳ１８に戻り、ステップＳ１９以降の処理が実行される。
【０１９４】
ステップＳ１９において、書換結果判定部３９は、書換結果記録部４０に記録された判定結果に基づいて、書換え結果判定処理を行う。このステップＳ１９の処理は、例えば、プログラム書換装置２から確認要求を受信した場合に実行される。
【０１９５】
ここで、図１８のフローチャートを参照して、図９のステップＳ１９の処理に対応する書換え結果判定処理の詳細について説明する。
【０１９６】
ステップＳ１５１，Ｓ１５２において、書換結果判定部３９は、書換結果記録部４０に記録された判定結果を参照して、タイムアウトエラーが記録されている場合、図８の例に示したビット列のうちの、「タイムアウトエラー」のビットを立てて、フラグをオンする。
【０１９７】
同様に、書換結果判定部３９は、制御装置IDの不一致エラーが記録されている場合、図８に示したビット列のうちの、「制御装置IDの不一致エラー」のビットを立てて、フラグをオンし（ステップＳ１５３，Ｓ１５４の処理）、更新なしエラーが記録されている場合、図８に示したビット列のうちの、「更新なしエラー」のビットを立てて、フラグをオンする（ステップＳ１５５，Ｓ１５６の処理）。
【０１９８】
続いて、ステップＳ１５７，Ｓ１５８において、図８に示したビット列について、メインCPU１１−１のIDエラーが記録されている場合には、「メインCPUのIDエラー」のビットが立てられて、フラグがオンされ、ステップＳ１５９，Ｓ１６０において、サブCPU１１−２のIDエラーが記録されている場合には、「サブCPUのIDエラー」のビットが立てられ、フラグがオンされる。同様に、ステップＳ１６１，Ｓ１６２において、図８に示したビット列について、メインCPU１１−１の書き込み後エラーが記録されている場合には、「メインCPUの書き込み後エラー」のビットが立てられて、フラグがオンされ、ステップＳ１６３，Ｓ１６４において、サブCPU１１−２の書き込み後エラーが記録されている場合には、「サブCPUの書き込み後エラー」のビットが立てられて、フラグがオンされる。ステップＳ１６５，Ｓ１６６において、図８に示したビット列について、メインCPU１１−１の書き込みエラーが記録されている場合には、「メインCPUの書き込みエラー」のビットが立てられて、フラグがオンされ、ステップＳ１６７，Ｓ１６８において、サブCPU１１−２の書き込みエラーが記録されている場合には、「サブCPUの書き込みエラー」のビットが立てられ、フラグがオンされる。
【０１９９】
すなわち、書換え結果判定処理が行われることで、図８に示したビット列のうちの、発生したエラー内容に対応するビットが１となり、発生していないエラー内容についてはビットが０のままとなるので、発生したエラー内容のすべてをビット列により通知することが可能となる。なお、当然ながら、ビット列がすべて０の場合には、エラーが発生しておらず、書換え処理が正常に終了したことを意味する。
【０２００】
そして、すべてのエラーについて判定処理が終了すると、上述したビット列が、書換え結果として、書換結果記録部４０に記録される。その後、処理は、図９のステップＳ１９に戻り、ステップＳ２０以降の処理が実行される。
【０２０１】
ステップＳ２０において、書換結果送受信部４１は、書換え結果を送信する書換え結果送信処理を行う。
【０２０２】
ここで、図１９のフローチャートを参照して、図９のステップＳ２０の処理に対応する書換え結果送信処理の詳細について説明する。
【０２０３】
ステップＳ１７１において、書換結果送受信部４１は、書換結果記録部４０に記録された書換え結果を読み出す。ステップＳ１７２において、書換結果送受信部４１は、読み出した書換え結果を、プログラム書換装置２に送信する。
【０２０４】
書換え結果が送信されると、処理は、図９のステップＳ２０に戻り、ステップＳ２１以降の処理が実行される。
【０２０５】
ステップＳ２１において、リセット部４２は、書換え後の制御プログラムを起動（再起動）するためのリセット処理を行う。
【０２０６】
ここで、図２０のフローチャートを参照して、図９のステップＳ２１の処理に対応するリセット処理の詳細について説明する。
【０２０７】
ステップＳ１８１において、リセット部４２は、例えば書換結果記録部４０に記録された書換え結果を参照して、CPU１１−１又はCPU１１−２における制御プログラムの書換えがあったか否かを判定する。
【０２０８】
ステップＳ１８１において、制御プログラムの書換えが行われたと判定された場合、処理は、ステップＳ１８２に進み、リセット処理が行われる。一方、制御プログラムの書換えが行われていないと判定された場合、以降のリセット処理を行う必要がないので、ステップＳ１８２乃至Ｓ１８６をスキップする。
【０２０９】
ステップＳ１８２において、リセット部４２は、プログラム書換装置２からリセット要求を受信したか否かを判定する。ステップＳ１８２において、リセット要求を受信したと判定された場合、ステップＳ１８３において、リセット部４２は、例えば書換結果記録部４０に記録された書換え結果を参照して、サブCPU１１−２の書換え（更新）が行われたか否かを判定する。ステップＳ１８３において、サブCPU１１−２の書換え（更新）が行われたと判定された場合、ステップＳ１８４において、リセット部４２は、サブCPU１１−２のリセットを行う。すなわち、リセット部４２により実行されるサブCPU１１−２のリセット処理では、リセット要求がサブCPU１１−２に送信されることになる。
【０２１０】
一方、ステップＳ１８３において、サブCPU１１−２の書換え（更新）が行われていないと判定された場合、サブCPU１１−２のリセットを行う必要がないので、ステップＳ１８４をスキップする。
【０２１１】
ステップＳ１８５において、リセット部４２は、メインCPU１１−１の書換え（更新）が行われたか否かを判定する。ステップＳ１８５において、メインCPU１１−１の書換え（更新）が行われたと判定された場合、ステップＳ１８６において、リセット部４２は、メインCPU１１−１のリセットを行う。これにより、再起動後のメインCPU１１−１では、書換え後の制御プログラムが起動されることになる。
【０２１２】
そして、制御プログラムの書換えが行われていないと判定された場合（ステップＳ１８１の「No」）、又は、ステップＳ１８６の処理が終了した場合、処理は、図９のステップＳ２１に戻り、ステップＳ１１Ａ以降の処理が実行される。すなわち、メインCPU１１−１では、リセット処理により書換え後の制御プログラムが起動され、通常動作を開始することになる（ステップＳ１１Ａの処理）。つまり、図９のフローチャートの各ステップの左側に記述しているように、ステップ１６乃至Ｓ２１の処理は、「書換えプログラム」により実行されていたが、それ以降のステップＳ１１Ａ，Ｓ１１Ｂの処理は、「書換え後の通常動作のプログラム」により実行されることになる。これにより、メインCPU１１−１では、書換えモードから通常モードに切り替わることになる。
【０２１３】
以上のように、メインCPU１１−１においては、プログラム書換装置２から制御プログラムの書換えが指示された場合、その指示に自身の制御プログラムを書換える指示が含まれているときには、自身の制御プログラムが書換えられるようにするとともに、その指示にサブCPU１１−２の制御プログラムを書換える指示が含まれているときには、サブCPU１１−２の制御プログラムが書換えられるようにする。
【０２１４】
次に、図２１乃至図２５のフローチャートを参照して、サブCPU１１−２により実行される処理の詳細について説明する。
【０２１５】
まず、図２１のフローチャートを参照して、サブCPU１１−２の処理を説明するが、基本的には、図６に示したステップＳ３１乃至Ｓ３９の処理と同様である。
【０２１６】
すなわち、サブCPU１１−２では、メインCPU１１−１から制御プログラムの書換え指令を受けない場合には、通常動作として、制御対象の制御が行われる（ステップＳ３１Ａの処理）。一方、書換指令受信部５１によって、メインCPU１１−１から制御プログラムの書換え開始指令が受信された場合（ステップＳ３１Ｂの「Yes」）、処理は、ステップＳ３２に進む。そして、サブCPU１１−２では、制御プログラムの書換え処理が開始される。
【０２１７】
ここで、図２２のフローチャートを参照して、図２１のステップＳ３２の処理に対応する書換え開始処理の詳細について説明する。
【０２１８】
ステップＳ２０１において、動作状態切替部５２は、サブCPU１１−２で実行されるプログラムを、通常動作の制御プログラムから、専用のブートプログラムに切り替えて、ブートプログラムによる動作が行われるようにする。これにより、サブCPU１１−２では、書換えモードでの動作を開始することになる（ステップＳ２０２の処理）。
【０２１９】
すなわち、図２１のフローチャートの各ステップの左側に記述しているように、ステップＳ３１Ａ乃至Ｓ３１Ｂの処理は、「通常動作の制御プログラム」により実行されていたが、それ以降のステップＳ３２乃至Ｓ３４の処理は、「ブートプログラム」により実行されることになる。
【０２２０】
ステップＳ２０２の処理が終了すると、処理は、図２１のステップＳ３２の処理に戻り、ステップＳ３３以降の処理が実行される。
【０２２１】
ステップＳ３３において、書換情報受信部５３は、メインCPU１１−１から送信されてくる書換え情報を受信する書換え情報受信処理を行う。
【０２２２】
ここで、図２３のフローチャートを参照して、図２１のステップＳ３３の処理に対応する書換え情報受信処理の詳細について説明する。
【０２２３】
ステップＳ２１１において、書換情報受信部５３は、メインCPU１１−１から送信されてくる書換え情報（サブCPU用書換えプログラム、サブCPU更新制御プログラム）を受信する。書換情報受信部５３は、ステップＳ２１２において、あらかじめ定められた受信時間を経過したか否かを判定することで、タイムアウトとなったか否かを判定する。
【０２２４】
ステップＳ２１２において、タイムアウトになっていないと判定された場合、ステップＳ２１３において、書換情報受信部５３は、メインCPU１１−１から書換え情報が受信されたか否かを判定し、書換え情報が受信されていないと判定された場合、処理は、ステップＳ２１１に戻り、上述した、ステップＳ２１１乃至Ｓ２１３の処理が繰り返される。すなわち、書換情報受信部５３は、メインCPU１１−１から書換え情報を受信されていない場合、タイムアウトするまで、書換え情報の受信処理を継続することになる。
【０２２５】
一方、ステップＳ２１２において、書換え情報を受信できずに、タイムアウトしたと判定された場合、書換結果判定部５６は、サブCPU１１−２の書換え情報のタイムアウトを判定し（ステップＳ２１４の処理）、書換え情報のタイムアウトエラーを、書換結果記録部５７に記録する（ステップＳ２１５の処理）。
【０２２６】
図２３のフローチャートに戻り、書換え情報が受信されたと判定された場合（ステップＳ２１３の「Yes」）又はステップＳ２１５の処理が終了すると、処理は、図２１のステップＳ３３に戻り、ステップＳ３４以降の処理が実行される。すなわち、書換情報受信部５３により、書換え情報として、サブCPU用書換えプログラムとサブCPU更新制御プログラムが受信され、動作状態切替部５２により、サブCPU用書換えプログラムが起動される（ステップＳ３４の処理）。
【０２２７】
すなわち、図２１のフローチャートの各ステップの左側に記述しているように、ステップＳ３２乃至Ｓ３４の処理は、「ブートプログラム」により実行されていたが、それ以降のステップ３５乃至Ｓ３８の処理は、「書換えプログラム」により実行されることになる。
【０２２８】
ステップＳ３５において、第２の不揮発性メモリ書き込み部５４は、サブCPU不揮発性メモリ書き込み処理を行う。
【０２２９】
ここで、図２４のフローチャートを参照して、サブCPU不揮発性メモリ書き込み処理の詳細について説明する。
【０２３０】
サブCPU不揮発性メモリ書き込み処理においては、はじめに、メインCPU１１−１から書換え情報が受信されたか否かが判定され（ステップＳ２２０の処理）、書換え情報が受信されたと判定された場合（ステップＳ２２０の「Yes」）、処理は、ステップＳ２２１に進む。
【０２３１】
そして、第２の不揮発性メモリ書き込み部５４は、第２の不揮発性メモリ５５の更新領域のデータを消去し（ステップＳ２２１の処理）、その消去された領域に、書換え情報として受信されたサブCPU更新制御プログラムを書き込む（ステップＳ２２２の処理）。続いて第２の不揮発性メモリ書き込み部５４は、ステップＳ２２３において、サブCPU書き込み結果確認処理を行う。
【０２３２】
ここで、図２５のフローチャートを参照して、サブCPU書き込み結果確認処理の詳細を説明する。
【０２３３】
ステップＳ２３１において、第２の不揮発性メモリ書き込み部５４は、書換結果判定部５６を介して書換結果送受信部５８に問い合わせて、書換結果送受信部５８によりメインCPU１１−１から書換えの確認要求が受信されたか否かを判定する。この確認要求は、上述した図１７のステップＳ１４２に対応する要求である。確認要求が受信されるまで、ステップＳ２３１の判定処理が繰り返され、確認要求が受信されたと判定された場合（ステップＳ２３１の「Yes」）、処理は、ステップＳ２３２に進む。
【０２３４】
ステップＳ２３２において、第２の不揮発性メモリ書き込み部５４は、サブCPU１１−２の制御プログラム領域のチェックサム検証を実行する。
【０２３５】
ステップＳ２３３において、第２の不揮発性メモリ書き込み部５４は、制御プログラム領域のチェックサムがチェックされ、正常であるか否かを判定する。ステップＳ２３３において、制御プログラム領域のチェックサムがチェックされ、異常であると判定された場合、第２の不揮発性メモリ書き込み部５４は、チェックサム検証の結果を書換結果判定部５６に供給し、処理は、ステップＳ２３４に進む。書換結果判定部５６は、サブCPU１１−２の書き込みエラーを判定し（ステップＳ２３４の処理）、サブCPU１１−２の書き込みエラーを、書換結果記録部４０に記録する（ステップＳ２３５の処理）。
【０２３６】
そして、制御プログラム領域のチェックサムがチェックされ、正常であると判定された場合（ステップＳ２３３の「Yes」）、又は、ステップＳ２３５の処理が終了した場合、処理は、図２４のステップＳ２２３に戻る。さらに、書換え情報が受信されていないと判定されるか（ステップＳ２２０の「No」）、あるいは、ステップＳ２２３の処理が終了すると、処理は、図２１のステップＳ３５の処理に戻り、ステップＳ３６以降の処理が実行される。
【０２３７】
ステップＳ３６において、書換結果判定部５６は、書換結果記録部４０に記録された判定結果に基づいて、書換え結果判定処理を行う。この書換え結果判定処理の書換え結果は、書換結果送受信部５８によりメインCPU１１−１に送信される（ステップＳ３７の処理）。
【０２３８】
ステップＳ３８において、リセット部５９は、メインCPU１１−１から送信されてくるリセット要求（図２０のステップＳ１８４の処理）に応じて、サブCPU１１−１のリセットを行う。これにより、サブCPU１１−１では、書換え後の制御プログラムが起動されることになる。
【０２３９】
そして、処理は、ステップＳ３１Ａに戻り、ステップＳ３１Ａ以降の処理が実行される。すなわち、サブCPU１１−２では、リセット処理により書換え後の制御プログラムが起動され、通常動作を開始することになる（ステップＳ３１Ａの処理）。つまり、図２１のフローチャートの各ステップの左側に記述しているように、ステップ３５乃至Ｓ３８の処理は、「書換えプログラム」により実行されていたが、それ以降のステップＳ３１Ａ，Ｓ３１Ｂの処理は、「書換え後の通常動作のプログラム」により実行されることになる。これにより、サブCPU１１−２では、書換えモードから通常モードに切り替わることになる。
【０２４０】
以上のように、サブCPU１１−２においては、自身の制御プログラムを書換える場合、メインCPU１１−１からその指示と書換え情報が送られてくるので、メインCPU１１−１からの指示に応じて制御プログラムの書換えを行う。
【０２４１】
このように、プログラム書換システムでは、プログラム書換装置２によって、制御装置１の制御装置IDと、１つのCPUのためのプログラム書換え情報（すなわち、メインCPU１１−１のための書換え情報）で構成された書換え情報を用いて、制御装置１の制御プログラムの書換えを行う場合に、制御装置１に対して、１回の書き込み指令を行って、書換え情報を送信するだけで、メインCPU１１−１によって、適切なプログラムが識別され、メインCPU１１−１、サブCPU１１−２の制御プログラムを一括して書換えることができる。換言すれば、メインCPU１１−１によって、制御装置１のIDと、マスタCPU１１−１のプログラム識別用のID、サブCPU１１−２のプログラム識別用のIDのそれぞれがチェックされ、適切な制御プログラムのみが更新されることになる。
【０２４２】
その結果、効率よく、制御プログラムの書換えを行うことができる。
【０２４３】
なお、上述した説明では、プログラム書換装置２により制御プログラムが書換えられる制御装置として、メインCPU１１−１とサブCPU１１−２の２つのCPUが搭載された制御装置１について説明したが、３つ以上のCPUが搭載された制御装置であっても同様に制御プログラムを書換えることができる。
【０２４４】
例えば、メインCPU１１−１に加えて、サブCPU１１−２乃至サブCPU１１−４が搭載された制御装置の場合、メインCPU１１−１によって、プログラム書換装置２からの書換え情報が受信され、その書換え情報から抽出される各サブCPU用のサブCPU用書換えプログラムと、サブCPU用書換え制御プログラムが、各サブCPUのIDにより識別され、サブCPU１１−２乃至サブCPU１１−４にそれぞれ送信されることになる。そして、メインCPU１１−１からの書換え情報を受信したサブCPU１１−２乃至サブCPU１１−４のそれぞれでは、上述したサブCPU１１−２と同様の処理が実行される。
【０２４５】
また、上述した図４のプログラム書換システムの構成例では、説明の都合上、第１の不揮発性メモリ３７と、第２の不揮発性メモリ５５は、メインCPU１１−１及びサブCPU１１−２の内部にそれぞれ設けられているように記載されているが、図１及び図２に示したROM１３−１及びROM１３−２のように、CPUとは別に設けるようにしてもよい。
【０２４６】
なお、本明細書において、フローチャートに記述された各ステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０２４７】
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【０２４８】
さらに、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
【符号の説明】
【０２４９】
１  制御装置
２  プログラム書換装置
１１−１  メインCPU
１１−２  サブCPU
１３−１，１３−２  ROM
２１  CPU
３１  書換指令受信部
３２  動作状態切替部
３３  書換情報受信部
３４  書換データ抽出部
３５  書換対象判定部
３６  第１の不揮発性メモリ書き込み部
３７  第１の不揮発性メモリ
３８  第２の不揮発性メモリ書き込み部
３９  書換結果判定部
４０  書換結果記録部
４１  書換結果送受信部
４２  リセット部
５１  書換指令受信部
５２  動作状態切替部
５３  書換情報受信部
５４  第２の不揮発性メモリ書き込み部
５５  第２の不揮発性メモリ
５６  書換結果判定部
５７  書換結果記録部
５８  書換結果送受信部
５９  リセット部
７１  書換指令送信部
７２  書換情報取得部
７３  書換情報送信部
７４  書換結果確認部
７５  書換結果表示部
７６  リセット部
【図１】
2012093961.tif 000003
【図２】
2012093961.tif 000004
【図３】
2012093961.tif 000005
【図４】
2012093961.tif 000006
【図５】
2012093961.tif 000007
【図６】
2012093961.tif 000008
【図７】
2012093961.tif 000009
【図８】
2012093961.tif 000010
【図９】
2012093961.tif 000011
【図１０】
2012093961.tif 000012
【図１１】
2012093961.tif 000013
【図１２】
2012093961.tif 000014
【図１３】
2012093961.tif 000015
【図１４】
2012093961.tif 000016
【図１５】
2012093961.tif 000017
【図１６】
2012093961.tif 000018
【図１７】
2012093961.tif 000019
【図１８】
2012093961.tif 000020
【図１９】
2012093961.tif 000021
【図２０】
2012093961.tif 000022
【図２１】
2012093961.tif 000023
【図２２】
2012093961.tif 000024
【図２３】
2012093961.tif 000025
【図２４】
2012093961.tif 000026
【図２５】
2012093961.tif 000027