(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0005】
近時、OBD2に対応したエンジンECU(Electronic Control Unit;電子制御装置)が普及しつつある。このECUは、故障コードのみならず、当該故障コードを生成した瞬間のフリーズフレームデータを同時に記憶する。
【0006】
しかしながら、特許文献1で提案された装置では、多数決のために3組の記憶領域を常に用意する必要があるため、2組の場合と比べて、不揮発性メモリの使用容量が50%だけ増加してしまう。この使用容量は、フリーズフレームデータのサイズに概ね比例するため、この問題が顕著に現われる。
【0007】
本発明は上記した問題を解決するためになされたものであり、不揮発性メモリの使用容量を減らしつつ、記憶データの信頼性を確保可能な車両情報記憶装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明に係る車両情報記憶装置は、車両に搭載され、かつ、前記車両の状態を示す車両情報を記憶する装置であって、第1記憶領域及び第2記憶領域を有する不揮発性メモリと、前記不揮発性メモリに対する記憶制御を行う記憶制御部と、を備え、前記第1記憶領域は、前記車両情報が格納される第1車両情報格納領域と、前記車両情報の記憶状態の妥当性を確認するための冗長情報が格納される第1冗長情報格納領域と、を含み、前記第2記憶領域は、前記車両情報が格納される第2車両情報格納領域と、前記冗長情報が格納される第2冗長情報格納領域と、を含み、前記記憶制御部は、前記車両情報と前記冗長情報を、前記第1記憶領域及び前記第2記憶領域にそれぞれ格納する際に、前記車両情報を前記第1車両情報格納領域に書き込み、前記冗長情報を前記第1冗長情報格納領域に書き込み、前記第1記憶領域への格納が完了した後に、前記車両情報を前記第2車両情報格納領域に書き込み、前記冗長情報を前記第2冗長情報格納領域に書き込む記憶制御を行い、前記車両情報を読み出す際に、前記第1車両情報格納領域に格納されている第1記憶車両情報から算出した第1算出冗長情報と、前記第1冗長情報格納領域に格納されている第1記憶冗長情報とが一致するか否かを判断し、前記第1算出冗長情報と前記第1記憶冗長情報とが一致する場合には前記第1記憶車両情報は最新であると判断する。
【0009】
このように構成することで、例えば、電力の瞬断によって更新中の情報が消失した場合であっても、現在格納されている車両情報及び冗長情報の組み合わせに基づいて第1記憶領域の更新状況(最新であるか否か)を判別可能となり、その後に必要な対処を施すことで記憶データを適切に復旧することができる。これにより、不揮発性メモリの使用容量を減らしつつ、記憶データの信頼性を確保することができる。
【0010】
また、前記記憶制御部は、前記車両情報を読み出す際に、前記第1算出冗長情報と前記第1記憶冗長情報とが一致しない場合には、前記第2車両情報格納領域に格納されている第2記憶車両情報から算出した第2算出冗長情報と、前記第2冗長情報格納領域に格納されている第2記憶冗長情報とが一致するか否かを判断し、前記第2算出冗長情報と前記第2記憶冗長情報とが一致する場合には前記第2記憶車両情報は最新であると判断してもよい。
【0011】
これにより、現在格納されている車両情報及び冗長情報の組み合わせに基づいて第2記憶領域の更新状況(最新であるか否か)を判別可能となり、その後に必要な対処を施すことで記憶データを適切に復旧することができる。
【0012】
また、前記記憶制御部は、前記第1記憶車両情報と前記第2記憶車両情報のいずれか一方の記憶車両情報のみが最新であると判断した場合、最新である一方の記憶車両情報に基づいて、他方の記憶車両情報と、該他方の記憶車両情報に対応する他方の冗長情報を更新する記憶制御を行ってもよい。
【0013】
例えば、第1記憶領域が先行して更新中である状態において、第2記憶領域から車両情報を複製することで直近の記憶状態に戻すことができる。一方、第1記憶領域の更新が先に終了し、かつ第2記憶領域が後行して更新中である状態において、第1記憶領域から車両情報を複製することで最新の記憶状態に移行することができる。
【0014】
また、前記記憶制御部は、前記第1記憶車両情報と前記第2記憶車両情報のいずれか一方の記憶車両情報のみが最新であると判断した場合、前記他方の記憶車両情報と前記他方の記憶冗長情報を更新する記憶制御が完了するまでの間、前記更新以外の前記第1記憶領域及び前記第2記憶領域の書き込みを行わないようにしてもよい。記憶データの復旧中に当該更新以外の書き込みを禁止することで、記憶状態に関する異常の発生を防止することができる。
【0015】
また、当該車両情報記憶装置は、前記車両のイグニッションスイッチのオフ動作に応じて電力の供給を停止されてもよい。エンジンを切った後のセルフシャットダウン機能を備えていない車両では、揮発性メモリのデータバックアップを取得できないので特に効果的である。
【発明の効果】
【0016】
本発明に係る車両情報記憶装置によれば、不揮発性メモリの使用容量を減らしつつ、記憶データの信頼性を確保することができる。
【発明を実施するための形態】
【0018】
以下、本発明に係る車両情報記憶装置について好適な実施形態を挙げ、添付の図面を参照しながら説明する。
【0019】
[車両故障診断システム10の構成]
図1は、本発明の一実施形態における車両情報記憶装置が組み込まれた車両故障診断システム10の全体構成図である。車両故障診断システム10は、図示しない車両(例えば、二輪車又は四輪車)に搭載され、かつ、この車両の自己診断機能を有するシステムである。この車両故障診断システム10は、車両情報記憶装置としてのエンジンECU12と、センサ群14と、エンジン16と、電源18と、を含んで構成される。
【0020】
センサ群14は、車両の状態を検出可能な1つ又は複数のセンサから構成される。センサの種類として、例えば、水温センサ、油温センサ、車速センサ、クランク角センサ、吸気圧センサ、大気圧センサ、スロットル開度センサ、O2センサが挙げられる。
【0021】
電源18は、車両の各部(エンジンECU12を含む)に対して電力を供給する。ここでは、電源18は、イグニッションスイッチ20のオン・オフに連動して、エンジンECU12に対して電力を供給し、又はその供給を停止する。
【0022】
エンジンECU12は、車両の駆動源であるエンジン16の運転制御を行い、必要に応じて車両の状態を示す情報(以下、車両情報Iv)を取得し保存する。具体的には、エンジンECU12は、演算処理装置22と、不揮発性メモリ24と、揮発性メモリ26と、を含んで構成される。
【0023】
演算処理装置22は、例えば、CPU(Central Processing Unit)又はMPU(Micro-Processing Unit)から構成される。演算処理装置22は、図示しないROM(Read Only Memory)からプログラムを読み出し実行することで、不揮発性メモリ24及び揮発性メモリ26に対する記憶制御を行う記憶制御部28として機能する。
【0024】
不揮発性メモリ24は、電力を供給しなくても記憶データを保持可能なメモリであり、例えば、EEPROM(Electrically Erasable Programmable Read-Only Memory)、フラッシュメモリから構成される。
【0025】
不揮発性メモリ24は、上記した車両情報Ivの他、車両情報Ivの記憶状態の妥当性を確認するための情報(以下、冗長情報Ir)を記憶可能である。この不揮発性メモリ24は、領域サイズが等しい2つの記憶領域(以下、第1記憶領域30、第2記憶領域32)を有する。
【0026】
第1記憶領域30は、1又は3以上の奇数個分(ここでは、3つ)の冗長情報Ir1が格納される第1冗長情報格納領域30rと、M組(M≧1)の車両情報Iv1が格納される第1車両情報格納領域30vと、を含む。第2記憶領域32は、1又は3以上の奇数個分(ここでは、3つ)の冗長情報Ir2が格納される第2冗長情報格納領域32rと、M組(M≧1)の車両情報Iv2が格納される第2車両情報格納領域32vと、を含む。
【0027】
ここで、冗長情報Ir1は車両情報Iv1に対応する情報であり、冗長情報Ir2は車両情報Iv2に対応する情報である。この冗長情報Ir1、Ir2は、例えば、チェックサム、CRC(Cyclic Redundancy Check)、ハッシュ値であってもよい。また、車両情報Iv1、Iv2は、例えば、故障コード(DTC)及びフリーズフレームデータ(センサ値の時系列)の1セット分の情報に相当する。
【0028】
揮発性メモリ26は、電力が供給された状態下にのみ記憶データを保持可能なメモリであり、例えば、DRAM(Dynamic Random Access Memory)又はSRAM(Static Random Access Memory)から構成される。この揮発性メモリ26には、記憶制御に必要な情報(例えば、最新の車両情報Iv)が一時的に格納される。
【0029】
[エンジンECU12の動作]
車両情報記憶装置としてのエンジンECU12は、以上のように構成される。続いて、エンジンECU12(特に、記憶制御部28)の動作について、
図2及び
図3を参照しながら詳細に説明する。
【0030】
図2は、
図1に示す不揮発性メモリ24の記憶状態に関する遷移図である。より詳しくは、本図は、第1記憶領域30及び第2記憶領域32の格納値が、複数の処理ステップ(ステップS0〜S7)にわたり変化する状態を示す。なお、格納値の更新があった箇所(格納領域)を太線の矩形枠によって表記している。
【0031】
ステップS0は、5回目の書き換えが正常に行われた記憶状態に相当する。この場合、第1記憶領域30の冗長情報Ir1(5回目の車両情報Iv1に対応)は、第2記憶領域32の冗長情報Ir2(5回目の車両情報Iv2に対応)に等しい。以下、n回目の車両情報Iv1(Iv2)に対応する冗長情報Ir1(Ir2)を「#n」と表記する場合がある。
【0032】
また、第1記憶領域30の車両情報Iv1は、第2記憶領域32の車両情報Iv2とすべて一致する。その後、記憶制御部28は、センサ群14からの最新の車両情報Ivを揮発性メモリ26に一時的に記憶させる制御を行う。
【0033】
ステップS1において、記憶制御部28は、一時的に記憶された車両情報Ivを揮発性メモリ26から読み出し、不揮発性メモリ24の第1記憶領域30に書き込む記憶制御を行う。これにより、第1車両情報格納領域30vの格納値(車両情報Iv1)が、「5回目の情報」から「6回目の情報」に更新される。
【0034】
ステップS2において、記憶制御部28は、第1車両情報格納領域30vに格納されている1組以上の車両情報Iv1を用いて、この車両情報Iv1に対応する冗長情報Ir1を生成する。
【0035】
ステップS3において、記憶制御部28は、生成された冗長情報Ir1を不揮発性メモリ24の第1記憶領域30に書き込む記憶制御を行う。これにより、各々の第1冗長情報格納領域30rの格納値(Ir1)が、「#5」から「#6」に更新される。
【0036】
このように、記憶制御部28は、車両情報Iv1を第1車両情報格納領域30vに書き込んだ後、この車両情報Iv1に対応する冗長情報Ir1を第1冗長情報格納領域30rに書き込む記憶制御を順次行う(ステップS1、S3)。
【0037】
ステップS4において、記憶制御部28は、一時的に記憶された車両情報Ivを揮発性メモリ26から読み出し、不揮発性メモリ24の第2記憶領域32に書き込む記憶制御を行う。これにより、第2車両情報格納領域32vの格納値(車両情報Iv2)が、「5回目の情報」から「6回目の情報」に更新される。
【0038】
ステップS5において、記憶制御部28は、第2車両情報格納領域32vに格納されている1組以上の車両情報Iv2を用いて、この車両情報Iv2に対応する冗長情報Ir2を生成する。
【0039】
ステップS6において、記憶制御部28は、生成された冗長情報Ir2を不揮発性メモリ24の第2記憶領域32に書き込む記憶制御を行う。これにより、各々の第2冗長情報格納領域32rの格納値(Ir2)が、「#5」から「#6」に更新される。
【0040】
このように、記憶制御部28は、車両情報Iv2を第2車両情報格納領域32vに書き込んだ後、この車両情報Iv2に対応する冗長情報Ir2を第2冗長情報格納領域32rに書き込む記憶制御を順次行う(ステップS4、S6)。
【0041】
ステップS7は、6回目の書き換えが正常に行われた記憶状態に相当する。この場合、第1記憶領域30の冗長情報Ir1(6回目の車両情報Iv1に対応)は、第2記憶領域32の冗長情報Ir2(6回目の車両情報Iv2に対応)に等しい。また、第1記憶領域30の車両情報Iv1は、第2記憶領域32の車両情報Iv2とすべて一致する。
【0042】
図3は、各々の区間における記憶制御の特徴を模式的に示す図である。より詳しくは、本図は、状態チェック処理を実行した場合における、処理フェーズ毎の記憶制御の挙動(イベント及び結果)を示す。この処理フェーズは、
図2に示す7個の区間(第1〜第7区間)により分類される。
【0043】
ここで、「状態チェック」とは、不揮発性メモリ24の記憶状態に対する確認処理であり、具体的には、車両情報Iv1、Iv2が最新の車両情報Ivであるか否かについて確認することを意味する。この処理は、3つの判断工程から構成される。
【0044】
第1工程として、記憶制御部28は、第1車両情報格納領域30vから読み出した車両情報Iv1を用いて冗長情報Ir1を算出し、得られた冗長情報(第1算出冗長情報)が第1冗長情報格納領域30rの格納値(第1記憶冗長情報)と一致するか否かを判断する。
【0045】
冗長情報Ir1の一致性がある場合に車両情報Iv1の記憶状態は妥当である旨の判断がなされ、冗長情報Ir1の一致性がない場合に車両情報Iv1の記憶状態は妥当でない旨の判断がなされる。なお、車両情報Iv1の記憶状態が妥当ではない場合には、車両情報Iv2が最新である旨の判断がなされる。
【0046】
第2工程として、記憶制御部28は、第2車両情報格納領域32vから読み出した車両情報Iv2を用いて冗長情報Ir2を算出し、得られた冗長情報(第2算出冗長情報)が第2冗長情報格納領域32rの格納値(第2記憶冗長情報)と一致するか否かを判断する。
【0047】
冗長情報Ir2の一致性がある場合に車両情報Iv2の記憶状態は妥当である旨の判断がなされ、冗長情報Ir2の一致性がない場合に車両情報Iv2の記憶状態は妥当でない旨の判断がなされる。なお、車両情報Iv2の記憶状態が妥当ではない場合には、車両情報Iv1が最新である旨の判断がなされる。
【0048】
ところで、第1冗長情報格納領域30rに複数の冗長情報Ir1が格納されている場合は、多数決(最頻値)により格納値を決定してもよい。同様に、第2冗長情報格納領域32rに複数の冗長情報Ir2が格納されている場合は、多数決(最頻値)により格納値を決定してもよい。
【0049】
第3工程として、冗長情報Ir1、Ir2の両方に一致性があった場合に限り、記憶制御部28は、冗長情報Ir1と、冗長情報Ir2とが一致するか否かを判断する。両者の一致性がある場合に両方の車両情報Iv1、Iv2は最新である旨の判断がなされ、両者の一致性がない場合に一方の車両情報Iv1のみ最新である旨の判断がなされる。
【0050】
なお、記憶制御部28は、この状態チェック処理を不定期に実行してもよいし、定期的に実行してもよい。不定期の例としては、[1]不揮発性メモリ24の読み出し要求時、[2]イグニッションスイッチ20のオン動作の直後、或いは[3]
図2に示す一連の動作の終了時点から所定時間が経過した時、が挙げられる。
【0051】
第1区間では、冗長情報Ir1、Ir2を用いたチェックにより、車両情報Iv1、Iv2はいずれも妥当である旨(YES)の判断がなされると共に、冗長情報Ir1、Ir2は一致する(YES)。その結果、車両情報Iv1、Iv2はいずれも最新である旨の判断がなされる。この場合、記憶制御部28は、不揮発性メモリ24に対して特別な処理を行わない。つまり、不揮発性メモリ24は、5回目の車両情報Iv1、Iv2を記憶した状態(データ同期が保たれた状態)を維持する。
【0052】
第2、第3区間では、冗長情報Ir1を用いたチェックにより車両情報Iv1が妥当でない一方(NO)、冗長情報Ir2を用いたチェックにより車両情報Iv2が妥当である旨(YES)の判断がなされる。つまり、第1記憶領域30が先行して更新中である状態において、第2記憶領域32から少なくとも車両情報Iv2を複製することで直近の記憶状態に戻すことができる。
【0053】
この場合、記憶制御部28は、[1](Ir1←Ir2)第2冗長情報格納領域32rの冗長情報Ir2を複製して第1冗長情報格納領域30rに格納すると共に、[2](Iv1←Iv2)第2車両情報格納領域32vの車両情報Iv2を複製して第1車両情報格納領域30vに格納する記憶制御を行う。なお、冗長情報Ir2の複製に代わって、複製後の車両情報Iv1を用いて新たに生成された冗長情報Ir1を第1冗長情報格納領域30rに格納してもよい。
【0054】
その結果、不揮発性メモリ24は、5回目の車両情報Iv1、Iv2を記憶した状態(つまり、データ同期が保たれた状態)に戻る。
【0055】
なお、記憶制御部28は、車両情報Iv2及び冗長情報Ir2を更新する記憶制御が完了するまでの間、この更新以外での第1記憶領域30及び第2記憶領域32の書き込みを行わない。記憶データの復旧中にこの更新以外の書き込みを禁止することで、記憶状態に関する異常の発生を防止することができる。
【0056】
第4区間では、冗長情報Ir1、Ir2を用いたチェックにより、車両情報Iv1、Iv2はいずれも妥当である旨(YES)の判断がなされる一方、冗長情報Ir1、Ir2は一致しない(NO)。つまり、第1記憶領域30が更新後であり、かつ、第2記憶領域32が更新前である状態において、第1記憶領域30から少なくとも車両情報Iv1を複製することで最新の記憶状態に移行することができる。
【0057】
この場合、記憶制御部28は、[1](Ir2←Ir1)第1冗長情報格納領域30rの冗長情報Ir1を複製して第2冗長情報格納領域32rに格納すると共に、[2](Iv2←Iv1)第1車両情報格納領域30vの車両情報Iv1を複製して第2車両情報格納領域32vに格納する記憶制御を行う。
【0058】
第2、第3区間の場合と同様に、記憶制御部28は、車両情報Iv1及び冗長情報Ir1を更新する記憶制御が完了するまでの間、この更新以外での第1記憶領域30及び第2記憶領域32の書き込みを行わない。その結果、不揮発性メモリ24は、6回目の車両情報Iv1、Iv2を記憶した状態(つまり、データ同期が保たれた状態)に移行する。
【0059】
第5、第6区間では、冗長情報Ir1を用いたチェックにより車両情報Iv1が妥当である一方(YES)、冗長情報Ir2を用いたチェックにより車両情報Iv2が妥当ではない旨(NO)の判断がなされるので、車両情報Iv1のみが最新である旨の判断がなされる。つまり、第1記憶領域30の更新が先に終了し、かつ、第2記憶領域32が後行して更新中である状態において、第1記憶領域30から少なくとも車両情報Iv1を複製することで最新の記憶状態に移行することができる。
【0060】
この場合、記憶制御部28は、[1](Ir2←Ir1)第1冗長情報格納領域30rの冗長情報Ir1を複製し、第2冗長情報格納領域32rに格納すると共に、[2](Iv2←Iv1)第1車両情報格納領域30vの車両情報Iv1を複製し、第2車両情報格納領域32vに格納する記憶制御を行う。
【0061】
第4区間の場合と同様に、記憶制御部28は、車両情報Iv1及び冗長情報Ir1を更新する記憶制御が完了するまでの間、この更新以外での第1記憶領域30及び第2記憶領域32の書き込みを行わないようにする。その結果、不揮発性メモリ24は、6回目の車両情報Iv1、Iv2を記憶した状態(つまり、データ同期が保たれた状態)に移行する。
【0062】
第7区間では、冗長情報Ir1、Ir2を用いたチェックにより、車両情報Iv1、Iv2はいずれも最新である旨(YES)の判断がなされると共に、冗長情報Ir1、Ir2は一致する(YES)。この場合、記憶制御部28は、不揮発性メモリ24に対して特別な処理を行わない。つまり、不揮発性メモリ24は、6回目の車両情報Iv1、Iv2を記憶した状態(データ同期が保たれた状態)を維持する。
【0063】
[エンジンECU12(車両情報記憶装置)による効果]
以上のように、エンジンECU12は、車両に搭載され、かつ、車両の状態を示す車両情報Iv1、Iv2を記憶し、[1]第1記憶領域30及び第2記憶領域32を有する不揮発性メモリ24と、[2]不揮発性メモリ24に対する記憶制御を行う記憶制御部28と、を備え、[3]第1記憶領域30は、車両情報Iv1が格納される第1車両情報格納領域30vと、車両情報Iv1の記憶状態の妥当性を確認するための冗長情報Ir1が格納される第1冗長情報格納領域30rと、を含み、[4]第2記憶領域32は、車両情報Iv2が格納される第2車両情報格納領域32vと、車両情報Iv2の記憶状態の妥当性を確認するための冗長情報Ir2が格納される第2冗長情報格納領域32rと、を含む。
【0064】
[5]記憶制御部28は、車両情報Ivと冗長情報Irを、第1記憶領域30及び第2記憶領域32にそれぞれ格納する際に、(5a)車両情報Ivを第1車両情報格納領域30vに書き込み、冗長情報Irを第1冗長情報格納領域30rに書き込み、(5b)第1記憶領域30への格納が完了した後に、車両情報Ivを第2車両情報格納領域32vに書き込み、冗長情報Irを第2冗長情報格納領域32rに書き込む記憶制御を行う。
【0065】
[6]記憶制御部28は、車両情報Ivを読み出す際に、(6a)第1車両情報格納領域30vに格納されている第1記憶車両情報(Iv1)から算出した第1算出冗長情報と、第1冗長情報格納領域30rに格納されている第1記憶冗長情報(Ir1)とが一致するか否かを判断し、(6b)第1算出冗長情報と第1記憶冗長情報とが一致する場合には第1記憶車両情報(Iv1)は最新であると判断する。
【0066】
このように構成することで、例えば、電力の瞬断によって更新中の情報が消失した場合であっても、現在格納されている車両情報Iv1及び冗長情報Ir1の組み合わせに基づいて第1記憶領域30の更新状況(最新であるか否か)を判別可能となり、その後に必要な対処を施すことで記憶データを適切に復旧することができる。これにより、不揮発性メモリ24の使用容量を減らしつつ、記憶データの信頼性を確保することができる。
【0067】
また、[7]記憶制御部28は、車両情報Ivを読み出す際に、(7a)第1算出冗長情報と第1記憶冗長情報とが一致しない場合には、第2車両情報格納領域32vに格納されている第2記憶車両情報(Iv2)から算出した第2算出冗長情報と、第2冗長情報格納領域32rに格納されている第2記憶冗長情報(Ir2)とが一致するか否かを判断し、(7b)第2算出冗長情報と第2記憶冗長情報とが一致する場合には第2記憶車両情報(Iv2)は最新であると判断してもよい。
【0068】
これにより、現在格納されている車両情報Iv2及び冗長情報Ir2の組み合わせに基づいて第2記憶領域32の更新状況(最新であるか否か)を判別可能となり、その後に必要な対処を施すことで記憶データを適切に復旧することができる。
【0069】
また、記憶制御部28は、第1記憶車両情報と第2記憶車両情報のいずれか一方の記憶車両情報のみが最新であると判断した場合、最新である一方の記憶車両情報に基づいて、他方の記憶車両情報と、該他方の記憶車両情報に対応する他方の冗長情報を更新する記憶制御を行ってもよい。
【0070】
例えば、第1記憶領域30が先行して更新中である状態において、第2記憶領域32から車両情報Iv2を複製することで直近の記憶状態に戻すことができる。一方、第1記憶領域30の更新が先に終了し、かつ第2記憶領域32が後行して更新中である状態において、第1記憶領域30から車両情報Iv1を複製することで最新の記憶状態に移行することができる。
【0071】
また、記憶制御部28は、第1記憶車両情報と第2記憶車両情報のいずれか一方の記憶車両情報のみが最新であると判断した場合、他方の記憶車両情報と他方の記憶冗長情報を更新する記憶制御が完了するまでの間、この更新以外での第1記憶領域30及び第2記憶領域32の書き込みを行わないようにしてもよい。記憶データの復旧中に当該更新以外の書き込みを禁止することで、記憶状態に関する異常の発生を防止することができる。
【0072】
また、車両のイグニッションスイッチ20のオフ動作に応じて、電力の供給が停止されるエンジンECU12に適用することがより好ましい。エンジン16を切った後のセルフシャットダウン機能を備えていない車両では、揮発性メモリ26のデータバックアップを取得できないので特に効果的である。
【0073】
[補足]
なお、この発明は、上述した実施形態に限定されるものではなく、この発明の主旨を逸脱しない範囲で自由に変更できることは勿論である。或いは、技術的に矛盾が生じない範囲で各々の構成を任意に組み合わせてもよい。