以下に添付図面を参照して、本発明に係る通信装置および通信システムの実施例を詳細に説明する。まず、実施例の詳細な説明に先立ち、本願に係る通信手法の概要について図1を用いて説明する。図1は、本願に係る通信手法の概要を示す図である。なお、図1の(A)には、送信状態の切り替えタイミングを、図1の(B)には、送信エラーとなったフレームデータと適用される閾値との関係を、それぞれ示している。
従来の通信手法では、第1の通信装置および第2の通信装置が所定の通信周期でデータの送受信を行う場合に、送信エラーが発生して再送処理が繰り返されると、通信周期内に受信すべきデータの受信を通信周期内に行うことができない状態が発生するおそれがあった。特に、送信エラーとなったデータの優先順位が高いと、かかるデータの再送が繰り返されている間、かかるデータよりも優先順位の低いデータが送信されなくなる。
たとえばCAN通信のような、同時に複数の装置からの送信が行えない通信手法では、高い優先度のデータを送信して送信エラーを発生させている通信装置において、送信エラーが発生しているデータよりも低い優先順位のデータの送信が行われない状態となるとともに、同じ通信バスに接続された他の通信装置でも、通信バスが占有されているため、送信エラーが発生しているデータよりも低い優先順位のデータの送信ができない状態となる。このため、優先順位の低いデータを通信周期内に送信することができない状態が発生する可能性が高い。
そこで、本願に係る通信手法では、通信周期における1周期内に検出された送信エラーの検出回数が第1の閾値を超えた場合に、かかる通信周期における再送処理を禁止するとともに、かかる通信周期が終了して次の通信周期が開始されると再送処理の禁止を解除することとした。
図1の(A)に示すように、本願に係る通信手法では、データの送信エラーが検出されると(図1の(1)参照)、かかるデータの再送処理を行う(図1の(2)参照)。また、本願に係る通信手法では、今回の通信周期内における送信エラーの検出回数が第1の閾値を超えると(図1の(3)参照)、再送処理を禁止する(図1の(4)参照)。
さらに、本願に係る通信手法では、たとえば次回の通信周期が開始された場合に、再送処理の禁止状態を解除する(図1の(5)参照)。これにより、再送処理の禁止状態は、今回の通信周期においてのみ適用されることとなる。
このように、本願に係る通信手法では、データの送信エラーが検出された場合に、当該データの再送処理を行い、所定の通信周期における1周期内に検出された送信エラーの検出回数が第1の閾値を超えた場合に、当該通信周期における再送処理を禁止するとともに、当該通信周期が終了して次の通信周期が開始されると再送処理の禁止を解除することとした。
すなわち、本願に係る通信手法では、1周期内における送信エラーの検出回数が第1の閾値を超えると、他のデータの送信に問題が生じる可能性があると判断して再送処理を禁止することとした。これにより、再送処理の繰り返しによってデータ受信が阻害されることを防止することができる。ただし、かかる判定は、通信装置の故障等の永続的なエラーを判定するものではなく、受信データの取りこぼしを防止するための判定である。このため、再送処理を次回の通信周期において解除することとした。
ところで、許容する送信エラーの検出回数(すなわち、所定の閾値)は、フレームデータの種別に応じて異ならせることが望ましい。たとえば、マスタノードである第1の通信装置が、通信周期の開始を示す特定のIDを含んだフレームデータをスレーブノードである第2の通信装置へ送信することによって、第2の通信装置が、通信周期におけるデータの送信処理を開始する手法を採ったとする。
かかる場合、上記の特定のIDを含んだフレームデータに対して適用する第1の閾値は、他のフレームデータに対して適用する第1の閾値よりも甘くする(すなわち、許容する送信エラーの検出回数を多くする)ことが望ましい。これは、上記の特定のIDを含んだフレームデータが第2の通信装置へ到達しないと、第2の通信装置によるデータの送信処理が行われないためである。かかる場合、第1の通信装置は、第2の通信装置から通信周期内に受信すべきデータを全て取りこぼしてしまうこととなり、好ましくない。
そこで、本願に係る通信手法では、図1の(B)に示すように、送信エラーとなったフレームデータが、特定のIDを含んだフレームデータである場合には、第1の閾値Aを適用し、その他のフレームデータである場合には、第1の閾値Aよりも小さい第1の閾値Bを適用することとした。これにより、送信エラーが発生した場合であっても、所定の通信周期において受信すべきデータの受信を通信周期内に行うことができない状態が発生することをより適切に防止することができる。
また、ここでは、送信エラーの検出回数が第1の閾値を超えた場合に再送処理を禁止する場合の例を示したが、これに限ったものではなく、送信エラーの継続時間が第1の閾値を超えた場合に再送処理を禁止することとしてもよい。
以下では、本願に係る通信手法を適用した通信装置および通信システムについての実施例を詳細に説明する。なお、以下の実施例では、通信システムの一例として、車載ECU間の通信システムを用いて説明するが、これに限定されるものではなく、本願に係る通信手法は、他の通信装置間の通信システムにも適用可能である。
また、以下では、パワートレイン系ECUを制御するHV−ECU(Hybrid Vehicle−ECU)を第1の通信装置の一例とし、パワートレイン系ECUの一つであるモータECUを第2の通信装置の一例として説明する。
まず、実施例1に係る通信システムの構成例について図2を用いて説明する。図2は、実施例1に係る通信システムの構成例を示す図である。
図2に示すように、本実施例に係る通信システムでは、HV−ECU1とモータECU2とが、CANバスを介して相互に接続される。CANバスは、CAN_HiラインおよびCAN_Loラインからなる2線式の通信線である。また、モータECU2には、モータ3が接続されている。
かかる通信システムでは、マスタノードであるHV−ECU1が、モータECU2等の車両に設けられた各種ECUと連携してモータ3やエンジン等の全体的な制御を行い、スレーブノードであるモータECU2が、HV−ECU1からの命令に従ってモータ3の具体的な制御を行う。
たとえば、HV−ECU1は、モータ3のトルク指令値をCANバス経由でモータECU2へ送信する。また、モータECU2は、HV−ECU1からCANバス経由でトルク指令値を受信すると、受信したトルク指令値に基づいてモータ3の制御を行う。また、モータECU2は、モータ3への制御結果をHV−ECU1へ送信する。かかる一連の処理はあらかじめ決められた所定の通信周期内で行われる。
このように、本願の通信装置は、所定の制御周期で行われる所定の演算処理に用いるデータとして、通信周期における1周期内に、所定量のデータを受信する必要がある制御装置に対して設けられる。
ここで、「制御周期」とは、第1の通信装置で行われる所定の制御処理の処理周期のことであり、またここでは、所定の制御処理のために必要な、第1の通信装置および第2の通信装置間で行われる通信処理を完了させる必要がある期間のことでもある。「通信処理周期」とは、通信周期内に通信のために行う処理の処理周期である。なお、以下では、制御周期が通信周期と同じである場合の例について説明するが、制御周期は、通信周期と周期の長さや開始タイミングが異なってもよい。
HV−ECU1は、CANトランシーバ11とマイコン12とを備える。また、モータECU2も同様に、CANトランシーバ21とマイコン22とを備える。ここで、CANトランシーバ11,21、マイコン12,22内のハードウェア部、CANバスといったハードウェアは、CAN通信用のハードウェアをそのまま流用したものである。すなわち、本実施例に係る通信システムは、CAN通信と同様、安価な構成を用いて実現することが可能である。
なお、図2に示すように、HV−ECU1は、モータECU2と接続するためのCANバスとは別に、たとえばエンジンECU4や電池ECU5といった車両に設けられた様々なECUと接続するためのバス(たとえば、CANバス)とも接続する。
また、図2に示すように、HV−ECU1とモータECU2とを接続するCANバスには、HV−ECU1およびモータECU2のみが接続されるものとするが、CANバスには3つ以上の通信装置(ECU)を接続することも可能である。
次に、HV−ECU1およびモータECU2の構成について図3を用いて説明する。なお、図3では、HV−ECU1およびモータECU2の特徴を説明するために必要な構成要素のみを示しており、一般的な構成要素についての記載を省略している。
図3に示すように、HV−ECU1は、CANトランシーバ11およびマイコン12を備える。マイコン12は、通信部121と、送信バッファ122と、受信バッファ123と、レジスタ126と、プラットフォーム124と、制御部125とを備える。また、制御部125は、データ格納処理部125aと、受信完了処理部125bと、再送制御部125cとを備える。
また、モータECU2は、CANトランシーバ21と、マイコン22とを備える。また、マイコン22は、通信部221と、送信バッファ222と、受信バッファ223と、プラットフォーム224と、制御部225とを備える。また、制御部225は、ID読取部225aと、データ格納処理部225bとを備える。
まず、HV−ECU1の構成について説明する。CANトランシーバ11は、マイコン12およびCANバス間のインタフェース用IC(Integrated Circuit)である。具体的には、CANトランシーバ11は、マイコン12で生成されたデータをCANバスへ出力するとともに、CANバスから入力されたデータをマイコン12へ出力する。
マイコン12は、モータECU2との間の通信をCANプロトコルに従って制御するマイクロコンピュータである。ここで、かかるマイコン12のうち、通信部121、送信バッファ122、受信バッファ123およびレジスタ126は、ハードウェアで構成され、プラットフォーム124および制御部125は、ソフトウェアで構成される。
通信部121は、データの送受信をCANプロトコルに従って実行するハードウェア部である。具体的には、通信部121は、送信バッファ122にデータが格納された場合に、かかる送信バッファ122に格納されたデータをCANプロトコルに従ってCANトランシーバ11経由でCANバスへ出力する。また、通信部121は、CANトランシーバ11からデータを受け取った場合には、受け取ったデータを受信バッファ123へ格納する。CANプロトコルに基づき実行されるデータ送信処理(通信調停)の具体例については、図7を用いて後述することとする。
また、通信部121は、データの送信エラーが発生した場合に、かかるデータの再送処理を行う処理部でもある。具体的には、通信部121は、CANバスへの出力したデータを一時的に保持する送信レジスタ121aと、CANバスから入力されたデータを一時的に保持する受信レジスタ121bとを備える。
通信部121が実行する再送処理について説明しておく。なお、かかる再送処理は、CANプロトコルに従って通信部121が自動的に行う処理である。
通信部121は、送信バッファ122に格納されたデータをCANバスへ出力すると、自身がCANバスへ出力したデータをCANバスから取得して受信レジスタ121bへ格納する。
また、通信部121は、受信レジスタ121bに格納されたデータを参照し、CANバスへのデータ出力が正常に行われたか否かをチェックする。そして、CANバスへのデータ出力が正常に行われていない場合に、送信エラーが発生したことを検出し、送信レジスタ121aに格納しておいたデータ、すなわち、送信エラーの対象となったデータを再度CANバスへ出力する。
また、通信部121は、送信エラーを検出した場合には、レジスタ126の送信エラーフラグをオンにする処理を併せて行い、再送処理を行った場合には、送信エラーフラグをオフにする処理を併せて行う。
レジスタ126は、制御部125によって参照される各種のステータスフラグを保持する一時記憶部である。たとえば、レジスタ126は、送信エラーが発生したことを示す送信エラーフラグや、通信周期における最後の通信処理周期であることを示す最終フラグ、送信停止状態であることを示す送信停止フラグ等を保持する。
送信バッファ122は、他のECU(ここでは、モータECU2)に対して送信すべきデータを一時的に記憶するハードウェア部である。また、受信バッファ123は、他のECU(ここでは、モータECU2)から受信したデータを一時的に記憶するハードウェア部である。
なお、CANトランシーバ11、通信部121、送信バッファ122、受信バッファ123およびレジスタ126は、従来のCAN通信で用いられるCANトランシーバ、通信部、送信バッファ、受信バッファおよびレジスタを流用することができるが、これに限ったものではない。すなわち、本実施例に係る通信システム専用のトランシーバ、通信部、送信バッファ、受信バッファおよびレジスタを用いてもよい。
プラットフォーム124は、ソフトウェア部である制御部125によって生成されたデータをハードウェア部である送信バッファ122へ渡す処理を行う処理部である。また、プラットフォーム124は、ハードウェア部である受信バッファ123から受け取ったデータをソフトウェア部である制御部125へ渡す処理を行う処理部でもある。
制御部125は、たとえばCPU(Central Processing Unit)であり、モータECU2との通信に関する処理等を実行するソフトウェア部である。かかる制御部125は、特に、データ格納処理部125aと、受信完了処理部125bと、再送制御部125cとを備える。
データ格納処理部125aは、モータECU2への送信データをプラットフォーム124経由で送信バッファ122へ格納する処理部である。具体的には、データ格納処理部125aは、モータECU2へ送信すべきデータを所定のブロック(たとえば、4フレームごと)に分割し、かかる分割データを通信処理周期ごとに送信バッファ122へ格納する。
特に、データ格納処理部125aは、所定の通信周期の開始時に、かかる通信周期の開始を示す開始IDを含んだデータを送信バッファ122へ格納する。ここで、本実施例に係る通信システムにおいて送受信されるフレームデータのフレーム構成について図4を用いて説明する。図4は、フレームデータのフレーム構成の一例を示す図である。
図4に示すように、フレームデータには、たとえば0〜8Byteのデータ情報が含まれる。また、フレームデータには、IDが含まれる。IDは、たとえば11Bitであらわされる値であり、従来のCAN通信においては、データの種別を示す情報であるとともに、通信調停におけるデータの優先順位を示す情報である。
フレームデータに含まれるIDには、通常のデータであり、「トルク指令値」や「モータ回転数」といったこのデータの種別と、このデータの優先順位を示す「通常ID」と、データの優先順位に加え、所定の通信周期の開始を示す「開始ID」や検査モードにモード移行することを指示する「検査ID」といった制御情報を含む「制御ID」の2種類のIDが存在する。
すなわち、本実施例に係る通信システムでは、従来のCAN通信で用いられるIDに「制御ID」を設け、この「制御ID」のひとつとして「開始ID」を設けることとしている。このように、「開始ID」は、データの優先順位を示す情報であり、かつ、所定の通信周期の開始を示す情報でもある。
なお、制御情報に付与する制御IDを、通常データに付与する通常IDとは別個に設けることとしてもよい。かかる場合の制御IDは、従来のCAN通信で用いられるIDと同じビット数(ここでは、11Bit)である必要はなく、より少ないビット数で表現することとしてもよい。
また、ここでは、所定の通信周期の開始を示す情報をIDに持たせることとしたが、これに限ったものではなく、たとえば、所定の通信周期の開始を示す命令情報をデータとして格納することとしてもよい。かかる場合、IDは、通常IDにおける何らかのデータをあらわすIDで、データ内容だけを命令情報に置き換えるようにしてもよいし、未使用のIDを命令情報送信用のIDとして用いてもよい。
また、データ格納処理部125aは、送信バッファ122へデータを格納する場合、レジスタ126の送信停止フラグを参照し、かかる送信停止フラグがオフになっていれば、送信バッファ122へのデータ格納を行う。一方、データ格納処理部125aは、送信停止フラグがオンになっている場合には、送信バッファ122へのデータ格納を行わない。かかる場合には、HV−ECU1からのデータ送信が行われなくなる。
図3へ戻り、HV−ECU1の制御部125についての説明を続ける。受信完了処理部125bは、モータECU2から所定の通信周期内における最終フレームデータを受信した場合に、受信完了処理を行う処理部である。
たとえば、受信完了処理部125bは、モータECU2から最終フレームデータを受信すると、サムチェックを実施し、モータECU2から全てのフレームデータを正常に受信できたか否かを判定する。
再送制御部125cは、所定の通信周期における送信エラーの検出回数が第1の閾値を超えた場合に、かかる通信周期における再送処理を禁止する処理部である。また、再送制御部125cは、再送処理を禁止した通信周期が終了して次の通信周期が開始された場合に、再送処理の禁止を解除する処理も併せて行う。
具体的には、再送制御部125cは、レジスタ126の送信エラーフラグがオンになるごとに、送信判定カウンタをカウントアップする。そして、送信判定カウンタのカウント値が第1の閾値(以下、「送信停止判定閾値」と記載する)を超えると、通信部121に対して再送禁止命令を通知して、通信部121の再送処理機能をオフする。また、再送制御部125cは、通信部121に対して再送禁止命令を通知すると、送信判定カウンタのカウント値を0に戻す。
また、再送制御部125cは、送信判定カウンタのカウント値が送信停止判定閾値を超えると、レジスタ126の送信停止フラグをオンする。かかる送信停止フラグがオンされると、データ格納処理部125aは、送信バッファ122へのデータ格納を停止する。
また、再送制御部125cは、通信周期における最後の通信処理周期が終了すると(すなわち、通信周期が終了すると)、通信部121に対して再送禁止解除命令を通知して通信部121の再送処理機能をオンする。これにより、通信部121の再送禁止状態が解除される。また、再送制御部125cは、通信周期における最後の通信処理周期が終了すると、レジスタ126の送信停止フラグをオフする。これにより、通信部121は、送信バッファ122へのデータ格納を再開する。
なお、再送制御部125cによって行われる再送制御処理の具体的な動作例については、図8を用いて後述することとする。
また、再送制御部125cは、通信周期内における送信エラーの検出タイミングに基づいて送信停止判定閾値を決定する閾値決定処理も併せて行う。かかる閾値決定処理により、残りのデータの受信に必要な時間を確保しつつ、再送処理をできるだけ長い間、また、多い回数続けさせることが可能となる。なお、かかる閾値決定処理の詳細については、図9を用いて後述する。
なお、図3では、制御部125が備える処理部として、データ格納処理部125a、受信完了処理部125bおよび再送制御部125cのみを示したが、制御部125は、モータECU2から受信したデータを用いて所定の演算を行う演算処理部などの他の処理部を備えていてもよい。
次に、モータECU2の構成について説明する。なお、モータECU2のハードウェア、具体的には、CANトランシーバ21、通信部221、送信バッファ222および受信バッファ223は、HV−ECU1のハードウェアと同一構成であるため、ここでの説明は省略する。また、プラットフォーム224についても、HV−ECU1のプラットフォーム124と同様の処理部であるため、ここでの説明は省略する。
また、モータECU2は、HV−ECU1が備える送信レジスタ121a、受信レジスタ121b、レジスタ126等を備えていてもよい。
モータECU2の制御部225は、たとえばCPUであり、HV−ECU1との通信に関する処理等を実行するソフトウェア部である。かかる制御部225は、ID読取部225aと、データ格納処理部225bなどを備える。なお、制御部225は、HV−ECU1の制御部125が備える受信完了処理部125bや再送制御部125c等を備えていてもよい。
ID読取部225aは、受信バッファ223へ格納されたデータのIDを読み取り、読み取ったIDが開始IDである場合に、かかる開始IDをデータ格納処理部225bへ渡す処理を行う処理部である。なお、どのIDが開始IDであるかは、あらかじめ決められているものとする。
データ格納処理部225bは、HV−ECU1への送信データをプラットフォーム224経由で送信バッファ222へ格納する処理部である。データ格納処理部225bは、ID読取部225aから開始IDを受け取ると、受け取った開始IDに対応するデータ、すなわち、所定の通信周期内に送信すべきデータを、所定ブロックごとではなく一括して送信バッファ222へ格納する処理を行う。
ここで、通信周期内に送信すべきデータと開始IDとの対応関係について図5を用いて説明する。図5は、通信周期内に送信すべきデータと開始IDとの対応関係の一例を示す図である。
図5に示すように、開始IDには、通信周期内に送信すべきデータがあらかじめ対応付けられている。図5に示した例では、開始ID「1111***」には「データA」が、開始ID「1122***」には「データB」がそれぞれ対応付けられている。なお、「データA」や「データB」は、データの値そのものではなく、データの種別をあらわすものである。
たとえば、データ格納処理部225bは、トルク指令値を変更する処理の開始を示す開始ID「1111***」を受け取ると、モータ3のトルク値などを「データA」として取得し、一括して送信バッファ222へ格納する。
なお、図3では、制御部225が備える処理部として、ID読取部225aおよびデータ格納処理部225bのみを示したが、制御部225は、他の制御部を備えていてもよい。たとえば、制御部225は、HV−ECU1から最終フレームデータを受信した場合に、受信完了処理を実行する受信完了処理部や、HV−ECU1から受信した制御命令に従ってモータ3を制御するモータ制御部などを備えていてもよい。
次に、HV−ECU1およびモータECU2の動作例について説明する。図6は、HV−ECU1およびモータECU2の動作例を示す図である。図6の(A)には、HV−ECU1のデータ送信処理時の動作例を、図6の(B)には、モータECU2がHV−ECU1からのデータを受信し、対応するデータを送信バッファ222へ格納するまでの動作例を、それぞれ示している。
図6の(A)に示すように、HV−ECU1は、あらたな通信周期が到来すると、モータECU2へのデータ送信を開始する。具体的には、HV−ECU1では、データ格納処理部125aが、通信周期内に送信すべきデータを4フレームごとに分割した分割データを自装置の通信処理周期ごとに送信バッファ122へ格納する。
また、HV−ECU1では、通信部121が、送信バッファ122に分割データが格納されるごとに、かかる分割データをCANトランシーバ11経由でCANバスへ出力する。
ここで、HV−ECU1からモータECU2に対して最初に送信される分割データの先頭のフレームデータには、かかる通信周期の開始を示す開始IDが含まれている。ここでは、通信周期内に送信すべきデータを4フレームごとに分割することとしたが、データの分割単位は4フレームである必要はない。
なお、HV−ECU1は、今回の通信周期が開始されると、前回の通信周期(制御周期)においてモータECU2から送られてきていた、モータ回転数といったモータの状態に関する情報等や、別のバスから送られてくる運転者のアクセルの踏み込み状態(運転者が求めているトルク量)、電池の充電状態等の車両制御に関する各種情報に基づいて、モータやエンジンで出力する必要があるトルク量(トルク指令値)等を算出する演算処理を行う。
一方、モータECU2では、図6の(B)に示すように、ハードウェア部から受信割り込みを受けると、ID読取部225aが、HV−ECU1から受信した分割データに含まれるIDを読み取る。ID読取部225aは、読み取ったIDの中に開始IDが含まれる場合には、開始IDをデータ格納処理部225bへ渡す。なお、ここでは、開始IDが「1111***」であったとする。
データ格納処理部225bは、ID読取部225aから開始IDを受け取ると、受け取った開始IDに対応するデータを取得し、取得したデータを送信バッファ222へ格納する。ここでは、開始ID「1111***」を受け取ったため、データ格納処理部225bは、かかる開始ID「1111***」に対応するデータAをモータ3などから取得し(図5参照)、取得したデータAを送信バッファ222へ格納する。
なお、モータECU2は、HV−ECU1から開始IDを受信すると、取得した現在のモータ回転数といったモータの状態(前回の通信周期で、HV−ECU1から送られてきたトルク指令値等に基づいてモータを制御した後のモータの状態)に関する情報や、前回の通信周期におけるモータECU2での演算結果のうち、HV−ECU1に送信する必要があるデータ等を、送信バッファ222にセットする。
次に、モータECU2の通信部221が、送信バッファ222に格納されたデータをCANプロトコルに従ってCANバスへ出力する処理の動作例について図7を用いて説明する。図7は、CANプロトコルに基づくデータ出力処理の一例を示す図である。なお、ここでは、送信バッファ222に格納されたデータAがn個のフレームデータで構成される場合の例を示している。
図7に示すように、モータECU2の通信部221は、HV−ECU1との間で通信調停を適宜行いながら、CANバスへのデータ出力を行う。具体的には、通信部221は、送信バッファ222にフレームデータが格納されている状態にあると、CANバスが空き状態であるか否かを確認し、空き状態であれば、送信バッファ222に格納されたデータAを1フレームずつCANバスへ出力していく。図7に示した場合には、フレームデータ1〜4がCANバスへ出力されている。
つづいて、モータECU2の通信部221がフレームデータ5をCANバスへ出力しようとした際に、HV−ECU1との間でCANバスの競合が発生したとする。かかる場合、通信部221は、HV−ECU1のデータ出力を優先させ、CANが空き状態となったのちに、フレームデータ5をCANバスへ出力する。これは、モータECU2からのデータの優先度が、HV−ECU1からのデータの優先度よりも低く設定されているためである。
このように、実施例1に係る通信システムでは、HV−ECU1のデータ格納処理部125aが、所定の通信周期の開始を示す開始IDを含んだデータを送信バッファ122へ格納し、HV−ECU1の通信部121が、送信バッファ122へ格納されたデータをCANプロトコルに従ってCANバスへ出力する。
また、モータECU2の通信部221が、CANバスから入力されたデータの受信バッファ223への格納および送信バッファ222へ格納されたデータのCANバスへの出力をCANプロトコルに従って行い、モータECU2のデータ格納処理部225bが、受信バッファ223へ格納されたデータに開始IDが含まれる場合に、当該開始IDに対応するデータであって、所定の通信周期内に送信すべきデータを送信バッファ222へ格納する処理を開始し、送信バッファ222が空になると送信すべきデータを逐次格納していく。
具体的には、モータECU2の通信部221は、送信バッファ222にフレームデータが格納されている状態にあると、送信バッファ222に格納された各フレームデータを絶えずCANバスへ出力しようとするが、HV−ECU1との間でCANバスの競合が発生した場合には、HV−ECU1からのデータ出力を優先させる。
このように、本実施例1に係る通信システムでは、HV−ECU1およびモータECU2の送信処理が同時に発生した場合には、モータECU2の送信処理よりもHV−ECU1の送信処理が優先される。
なお、ここでは、通信システムにおける通信が、CANプロトコルに従って通信を行うCAN通信であるものとしたが、これに限ったものではなく、CAN通信と同様に、同時に複数の通信装置からの送信を行うことができない通信方式で通信を行うものであればよい。
次に、通信部121および再送制御部125cの動作例について図8を用いて説明する。図8は、通信部121および再送制御部125cの動作例を示す図である。なお、図8の(A)には、通信部121および再送制御部125cの動作例を、図8の(B)には、再送制御部125cの再送制御パターンをそれぞれ示している。
図8の(A)に示すように、通信部121および再送制御部125cが、それぞれ送信エラーを検出したとする(図8の(A)の(1)参照)。具体的には、通信部121は、受信レジスタ121bに保持されたデータを参照することによって送信エラーを検出し、再送制御部125cは、レジスタ126の送信エラーフラグを参照することによって送信エラーを検出する。
通信部121は、送信エラーを検出すると、再送処理を行う(図8の(A)の(2)参照)。また、再送制御部125cは、送信エラーを検出すると、送信停止判定カウンタのカウント処理を行う(図8の(A)の(3)参照)。なお、図8の(A)では、送信エラーが連続して発生しており、再送処理およびカウント処理が連続的に行われているものとする。
ここで、送信停止判定カウンタのカウント値が送信停止判定閾値を超えたとすると(図8の(A)の(4)参照)、再送制御部125cは、通信部121に対して再送禁止命令を通知する(図8の(5)参照)。これにより、再送機能がオフされるため、再送処理が停止する。
また、再送制御部125cは、今回の通信周期における最後の通信処理周期が終わったのち、次回の通信周期の開始時において、再送禁止解除命令を通信部121に対して通知する(図8の(A)の(6)参照)。これにより、再送機能がオンされる。すなわち、通信部121の再送禁止状態は、今回の通信周期においてのみ維持されることとなる。
ところで、図8の(A)では、送信停止判定カウンタのカウント値(すなわち、送信エラーの検出回数や検出時間)が送信停止判定閾値を超えた場合に、再送処理を禁止する場合の例について説明したが、再送制御部125cは、再送処理を禁止するだけでなく、通常のデータ送信処理も併せて停止してもよい。
すなわち、図8の(B)に示すように、再送制御部125cによって行われる再送制御処理には、再送処理のみを禁止するパターンと、再送処理および通常のデータ送信処理(以下、単に「送信処理」と記載する)の双方を禁止するパターンとがある。HV−ECU1の制御部125は、これらの再送制御パターンを任意に変更可能である。
なお、再送制御部125cは、再送処理のみを禁止する場合(再送制御パターン1の場合)には、通信部121に対して再送禁止命令を通知する処理のみを行う。一方、再送制御部125cは、再送処理および送信処理を禁止する場合(再送制御パターン2の場合)には、通信部121に対して再送禁止命令を通知する処理およびレジスタ126の送信停止フラグをオンする処理を行う。
また、再送処理や送信処理を禁止する場合に、必要に応じて送信バッファ122から禁止する対象のフレームデータを削除する処理を行う。
次に、再送制御部125cによる閾値決定処理について図9を用いて説明する。図9は、閾値決定処理の一例を示す図である。なお、図9の(A)には、再送制御パターン2における閾値決定処理の一例を、図9の(B)には、再送制御パターン1における閾値決定処理の一例をそれぞれ示している。
図9の(A)に示すように、再送制御部125cは、通信周期において送信エラーが初めて検出されると、所定の通信周期において受信する必要がある残りのデータ(未受信データ)を全て受信するまでに要する時間(T1)と所定の通信周期の残り時間(T2)とに基づいて送信停止判定閾値を決定する。
たとえば、再送制御部125cは、T2からT1を差し引いた時間を、送信エラーの検出時間間隔(1回の送信処理や再送処理に要する時間)で割ることによって、許容可能な送信エラー検出回数を割り出し、割り出した検出回数、もしくは、その検出回数に基づく時間を送信停止判定閾値として決定する。
これにより、再送制御部125cは、残りのデータの受信に必要な時間を確保しつつ、再送処理をできるだけ長い間続けさせることができる。なお、HV−ECU1は、通信周期内に受信すべきデータの数やサイズおよび1つのフレームデータの受信に要する時間をあらかじめ把握しており、これらの情報からT2を割り出すことができる。また、送信エラーの検出時間間隔もあらかじめ把握しているものとする。
一方、再送制御パターン1の場合(再送処理のみを禁止する場合)、再送制御部125cは、未送信データを全て送信するまでに要する時間(T3)をさらに加味して送信停止判定閾値を決定すればよい。たとえば、再送制御部125cは、T2からT1およびT3を差し引いた時間を、送信エラーの検出時間間隔で割ることによって、許容可能な送信エラー検出回数を割り出し、割り出した検出回数を送信停止判定閾値として決定する。
このように、再送制御部125cは、データの送信エラーが検出された場合に、所定の通信周期において受信すべき残りのデータを全て受信するまでに要する時間と所定の通信周期の残り時間とに基づいて送信停止判定閾値を決定することとしたため、残りのデータの受信に必要な時間を確保しつつ、再送処理をできるだけ長い間続けさせることができる。
なお、図9の(A)および(B)では、T2からT1を差し引いた時間あるいはT2からT1およびT3を差し引いた時間が経過する直前まで再送処理を繰り返すような送信停止判定閾値を決定することとしたが、これに限ったものではない。
具体的には、ここでは、再送処理によってデータの送受信が遅れる場合のみを想定して送信停止判定閾値を決定することとしたが、再送処理以外の要因によってデータの送受信が遅れることも想定される。このため、再送制御部125cは、T2からT1を差し引いた時間あるいはT2からT1およびT3を差し引いた時間からさらに所定のオフセット時間を差し引いた時間に基づいて送信停止判定閾値を決定することとしてもよい。
次に、HV−ECU1およびモータECU2の通信周期内における通信タイミングについて図10を用いて説明しておく。図10は、所定の通信周期におけるHV−ECU1およびモータECU2の通信タイミングの一例を示すタイミングチャートである。
ここで、図10では、HV−ECU1およびモータECU2の通信処理周期がそれぞれ1msであり、通信周期(制御周期)が8周期分の通信処理周期に相当する8msであるものとする。また、図10では、HV−ECU1とモータECU2との間で、通信周期の開始・終了タイミングの同期を取ることなく、通信処理周期および通信周期の長さのみを同じ長さに設定する場合の例を示している。また、図10には、図8の(B)に示す再送制御パターン2の場合について示している。
図10に示すように、HV−ECU1の制御部125は、通信周期が到来すると、前回の通信周期において取得したデータをラッチ(保持)する処理や今回の通信周期において送信する予定のデータのSUM値を算出する処理を行う(図10の(1a)参照)。
ここで、SUM値とは、各フレームデータのうちSUM値を除いた情報(IDやデータ等)を0および1の2進数であらわした情報とした場合に、その値を全て足し合わせた値である。算出されたSUM値は、各フレームデータに付加されることとなる。
また、HV−ECU1の制御部125は、かかる処理を終えると、モータECU2へ送信するデータの分割データのうち、最初の分割データを送信バッファ122へ格納する(図10の(1b)参照)。ここで、かかる分割データの先頭のフレームデータには、開始IDが含まれている。
HV−ECU1の送信バッファ122に分割データが格納されると、HV−ECU1の通信部121は、送信バッファ122に格納された分割データをCANバスへ出力する(図10の(1c)参照)。CANバスへ出力された分割データは、モータECU2の通信部221へ入力され、かかる通信部221によって受信バッファ223へ格納される。
モータECU2の制御部225は、受信バッファ223に分割データが格納されると、受信割り込みを発生させ、受信バッファ223に格納された分割データのIDを読み取る(図10の(2a)参照)。
このとき、モータECU2の制御部225は、読み取ったIDに開始IDが含まれていれば、開始IDに対応するデータの一部(分割データ)を送信バッファ222へ格納する(図10の(2b)参照)。
モータECU2の通信部221は、送信バッファ222にデータが格納されると、送信バッファ222に格納されたデータを1フレームずつCANバスへ出力していく。ただし、HV−ECU1との間でCANバスの競合が発生した場合には、HV−ECU1からのデータ出力が完了するのを待ってからデータ出力を再開させる。
なお、開始IDは、所定の通信周期においてHV−ECU1から最初に送信されるフレームデータに埋め込まれている。このため、モータECU2は、通信周期内に送信すべきデータを送信バッファ222へ格納する処理を通信周期における早い段階で開始することができる。
これにより、HV−ECU1からの最初の通信処理周期における最終フレームがCANバスへ出力されてから、モータECU2からの最初のデータがCANバスへ出力されるまでの間に、CANバスの空き時間が生じることを確実に防止することができる。
ここで、HV−ECU1においてフレームデータの送信エラーが発生したとする(図10の(1d)参照)。かかる場合、HV−ECU1の通信部121は、送信エラーが検出されている間、再送処理を続ける(図10の(1e)参照)。この結果、CANバスには、同一のフレームデータが出力され続けることとなる。
そして、HV−ECU1は、送信エラーの検出回数が送信停止判定閾値を超えた場合には、通信部121による再送処理を次の通信周期が開始されるまで禁止するとともに、通常のデータ送信も次の通信周期が開始されるまで禁止する(図10の(1f)参照)。
これにより、モータECU2の送信バッファ222に格納されたデータのCANバスへの出力は、HV−ECU1からの再送データや通常のデータによって阻害されることなく行われることとなる。したがって、HV−ECU1は、送信エラーが発生した場合であっても、モータECU2からのデータを確実に受信することができる。
なお、HV−ECU1の制御部125は、通信周期内に受信すべきデータの最終フレームをモータECU2から受信すると、受信完了処理を実行する(図10の(1g)参照)。具体的には、HV−ECU1では、受信完了処理部125bが、通信周期内に受信したデータのSUM値を算出し、算出したSUM値をHV−ECU1から送信されたSUM値と比較することで、かかるSUM値が正常であるか否かのサムチェックを行う。
なお、ここでは、1つの通信周期で受信した全てのフレームデータのSUMチェックをまとめて行う場合の例を示したが、これに限らず、フレームデータを受信するごとにSUMチェックを実行することとしてもよい。
また、HV−ECU1は、次の通信周期が到来すると、再送処理および送信処理の禁止状態を解除する。これにより、HV−ECU1の制御部125は、次の通信周期においてモータECU2へ送信すべきデータの送信処理を開始する。
すなわち、HV−ECU1は、データのラッチ処理やSUM値の算出処理を行い(図10の(1h)参照)、モータECU2へ送信するデータの分割データのうち、最初の分割データを送信バッファ122へ格納する(図10の(1i)参照)。送信バッファ122へ格納された分割データは、CANバスを介してモータECU2の通信部221へ入力され、かかる通信部221によって受信バッファ223へ格納される。
モータECU2の制御部225は、受信バッファ223に分割データが格納されると、受信割り込みを発生させ、受信バッファ223に格納された分割データのIDを読み取り(図10の(2c)参照)、読み取ったIDに開始IDが含まれていれば、開始IDに対応するデータを送信バッファ222へ格納する(図10の(2d)参照)。送信バッファ222へ格納されたデータは、CANバスが空いていれば、順次CANバスへ出力される。
なお、HV−ECU1は、たとえば再送処理以外の要因によって、今回の通信周期において受信すべきデータの受信を完了させることができなかった場合には、かかる所定の通信周期よりも前の通信周期(たとえば、前回の通信周期)において受信したデータを今回の通信周期において受信したデータとして取り扱い、演算処理等を行うこととしてもよい。
これにより、今回の通信周期において受信したデータおよび前回の通信周期において受信したデータが混在した状態で演算処理が行われることで、異常な演算結果が出力される事態を防ぐことができる。
次に、HV−ECU1が実行する送信処理の処理手順について図11を用いて説明する。図11は、送信処理の処理手順を示すフローチャート(その1)である。なお、図11には、再送制御パターンがパターン1(再送処理のみを禁止するパターン)である場合の処理手順を示している。また、図11に示す送信処理は、所定時間(通信処理周期よりも短い時間)ごとに実施される。
図11に示すように、再送制御部125cは、通信処理周期の開始タイミングであるか否かを判定する(ステップS101)。具体的には、再送制御部125cは、前回の通信処理周期の開始タイミングからの時間を計時することで通信処理周期の開始タイミングであると判定する。
かかる処理において通信処理周期の開始タイミングであると判定すると(ステップS101,Yes)、再送制御部125cは、通信周期の開始タイミングであるか否かを判定する(ステップS102)。具体的には、再送制御部125cは、通信処理周期の開始タイミングにおいて、通信周期における最後の通信処理周期の処理を行う際にオンされるフラグである、判定レジスタ126の最終フラグがオンになっている場合に、新たな通信周期の開始タイミングであると判定する。
かかる処理において、通信周期の開始タイミングであると判定すると(ステップS102,Yes)、再送制御部125cは、通信部121に対して再送禁止解除命令を通知するとともに(ステップS103)、レジスタ126の送信停止フラグをオフする(ステップS104)。また、再送制御部125cは、送信停止判定カウンタをリセットする(ステップS105)。
なお、前回の通信周期において再送禁止命令を通知していない場合には、ステップS103,S104の処理を省略してもよい。
ステップS105の処理を終えたとき、あるいは、ステップS102において通信周期の開始タイミングでない場合(ステップS102,No)、データ格納処理部125aは、送信データを抽出し(ステップS106)、抽出した送信データを送信バッファ122にセットする(ステップS107)。
ステップS107の処理を終えたとき、あるいは、ステップS101において通信処理周期の開始タイミングではない場合(ステップS101,No)、再送制御部125cは、送信エラーを検出したか否かを判定する(ステップS108)。具体的には、再送制御部125cは、レジスタ126の送信エラーフラグがオンされている場合に、送信エラーを検出したと判定する。
かかる処理において、送信エラーを検出したと判定すると(ステップS108,Yes)、再送制御部125cは、送信停止判定カウンタをカウントアップする(ステップS109)。また、再送制御部125cは、送信停止フラグがオフされているか否かを判定し(ステップS110)、オフされていると判定した場合に(ステップS110,Yes)、閾値が決定済みであるか否かを判定する(ステップS111)。そして、閾値が決定済みでなければ(ステップS111,No)、閾値決定処理を行って閾値を決定する(ステップS112)。
ステップS112の処理を終えた場合、あるいは、ステップS111において閾値が決定済みである場合(ステップS111,Yes)、再送制御部125cは、送信判定カウンタのカウント値が送信停止判定閾値を超えたか否かを判定する(ステップS113)。
送信判定カウンタのカウント値が送信停止判定閾値を超えたと判定した場合(ステップS113,Yes)、再送制御部125cは、通信部121に対して再送禁止命令を通知するとともに(ステップS114)、送信エラーが発生したデータを送信バッファ122から削除する(ステップS115)。そして、再送制御部125cは、レジスタ126の送信停止フラグをオンして(ステップS116)、処理を終了する。
なお、再送制御部125cは、ステップS108において送信エラーが検出されていない場合(ステップS108,No)、あるいは、ステップS113において送信判定カウンタのカウント値が送信停止判定閾値を超えていない場合にも(ステップS113,No)、処理を終了する。
また、再送制御部125cは、ステップS110において送信停止フラグがオフされていない(オンされている)場合には(ステップS110,No)、送信エラーが発生したデータを送信バッファ122から削除して(ステップS117)、処理を終了する。
つづいて、送信処理を禁止する場合の送信処理の処理手順について図12を用いて説明する。図12は、送信処理の処理手順を示すフローチャート(その2)である。
図12に示すように、再送制御部125cは、通信処理周期の開始タイミングであるか否かを判定する(ステップS201)。具体的には、再送制御部125cは、前回の通信処理周期の開始タイミングからの時間を計時することで通信処理周期の開始タイミングであると判定する。
かかる処理において通信処理周期の開始タイミングであると判定すると(ステップS201,Yes)、再送制御部125cは、通信周期の開始タイミングであるか否かを判定する(ステップS202)。具体的には、再送制御部125cは、通信処理周期の開始タイミングにおいて、通信周期における最後の通信処理周期の処理を行う際にオンされるフラグである、判定レジスタ126の最終フラグがオンになっている場合に、新たな通信周期の開始タイミングであると判定する。
かかる処理において、通信周期の開始タイミングであると判定すると(ステップS202,Yes)、再送制御部125cは、レジスタ126の送信停止フラグをオフし(ステップS203)、送信停止判定カウンタをリセットする(ステップS204)。
ステップS204の処理を終えたとき、あるいは、ステップS202において通信周期の開始タイミングではない場合(ステップS202,No)、データ格納処理部125aは、送信停止フラグがオフされているか否かを判定する(ステップS205)。
かかる処理において送信停止フラグがオフされていると判定すると(ステップS205,Yes)、データ格納処理部125aは、送信データを抽出し(ステップS206)、抽出した送信データを送信バッファ122にセットする(ステップS207)。
ステップS207の処理を終えたとき、ステップS205において送信停止フラグがオフされていない場合(ステップS205,No)、あるいは、ステップS201において通信処理周期の開始タイミングではない場合(ステップS201,No)、再送制御部125cは、送信エラーを検出したか否かを判定する(ステップS208)。具体的には、再送制御部125cは、レジスタ126の送信エラーフラグがオンされている場合に、送信エラーを検出したと判定する。
かかる処理において、送信エラーを検出したと判定すると(ステップS208,Yes)、再送制御部125cは、送信停止判定カウンタをカウントアップする(ステップS209)。
また、再送制御部125cは、送信停止フラグがオフされているか否かを判定し(ステップS210)、オフされていると判定した場合に(ステップS210,Yes)、閾値が決定済みであるか否かを判定する(ステップS211)。そして、閾値が決定済みでなければ(ステップS211,No)、閾値決定処理を行って閾値を決定する(ステップS212)。
ステップS212の処理を終えた場合、あるいは、ステップS211において閾値が決定済みである場合(ステップS211,Yes)、再送制御部125cは、送信停止判定カウンタのカウント値が送信停止判定閾値を超えたか否かを判定する(ステップS213)。
送信停止判定カウンタのカウント値が送信停止判定閾値を超えたと判定した場合(ステップS213,Yes)、再送制御部125cは、送信バッファ122に格納されている未送信のデータを全て削除し(ステップS214)、レジスタ126の送信停止フラグをオンして(ステップS215)、処理を終了する。
なお、再送制御部125cは、ステップS206において送信エラーが検出されていない場合(ステップS208,No)、ステップS208において送信停止フラグがオフされていない場合(ステップS210,No)、ステップS213において送信判定カウンタのカウント値が送信停止判定閾値を超えていない場合にも(ステップS213,No)、処理を終了する。
上述してきたように、実施例1では、HV−ECUの通信部が、データの送信エラーが検出された場合に、当該データの再送処理を行い、HV−ECUの再送制御部が、所定の通信周期における送信エラーの検出回数が送信停止判定閾値を超えた場合に、当該通信周期における再送処理を禁止するとともに、当該通信周期が終了して次の通信周期が開始された場合に再送処理の禁止を解除することとした。
したがって、送信エラーが発生した場合であっても、所定の通信周期において受信すべきデータの取りこぼしを防止することができる。
なお、上述してきた実施例1では、送信エラーの検出回数が送信停止判定閾値を超えた場合に再送処理を禁止する場合の例について説明したが、これに限ったものではなく、再送制御部125cは、送信エラーの継続時間が送信停止判定閾値を超えた場合に再送処理を禁止することとしてもよい。かかる場合には、たとえば図9の(A)に示したように、所定の通信周期の残り時間(T2)から所定の通信周期において受信すべき残りのデータを全て受信するまでに要する時間(T1)を差し引いた時間を送信停止判定閾値として決定すればよい。
ところで、実施例1および2では、通信周期内に受信すべきデータの取りこぼしを防止するために、通信周期内における送信エラーの検出回数または継続時間が送信停止判定閾値を超えると他のデータの送信(特に、他の通信装置からのデータの送信)に問題が生じる可能性があると判断して、かかる通信周期における再送処理を所定期間だけ禁止することとした。
しかしながら、実施例1および2のように、他のデータの送信を優先するためにデータ送信を一時的に停止させることとすると、従来から行っている異常検出処理、たとえば、一時的な異常(電気ノイズが一時的に混入する場合)なのか永続的な異常なのかを判定する異常検出処理において、正確に判定することが難しくなり、そのときの通信の状態に応じた適切な対応ができなるおそれがある。
具体的には、永続的な通信異常を送信エラーの検出回数等によって判定することとした場合、実施例1および2のように、送信処理が一時的に停止されると、送信処理が行われないのが、たとえば、通信部やCANトランシーバ等に永続的な異常が発生したために送信できなくなったからなのか、電気ノイズ等によって一時的に送信エラーが発生したために送信が禁止されたからなのかを区別し、適切な異常検出処理を行わなければ、永続的な通信異常を正確に検出できないおそれがある。
そこで、実施例3では、永続的な通信異常状態(以下、「異常状態」と記載する)を判定するためのカウンタ(以下、「異常判定カウンタ」と記載する)を、送信処理の一時的な停止を判定するための送信停止判定カウンタと別個に設けることとした。以下では、かかる場合の実施例3について説明する。
まず、実施例3に係るHV−ECUおよびモータECUの構成について図14を用いて説明する。図14は、実施例3に係るHV−ECUおよびモータECUの構成を示すブロック図である。なお、以下の説明では、既に説明した部分と同様の部分については、既に説明した部分と同一の符号を付し、重複する説明を省略する。
図14に示したように、実施例3に係るHV−ECU1’の制御部125’は、異常検出部125dをさらに備える。異常検出部125dは、複数の通信周期に亘る送信エラーの検出回数が、送信停止判定閾値よりも高い異常判定閾値を超えた場合に、以降のデータ送信を停止する処理部である。
ここで、再送制御部125cの動作と比較しながら異常検出部125dの動作を説明する。図15は、再送制御部125cおよび異常検出部125dの動作例を示す図(その1)である。
図15に示すように、再送制御部125cは、送信エラーが検出されるごとに、送信停止判定カウンタのカウント値をカウントアップしていく。そして、通信周期における送信エラーの検出回数または継続時間が送信停止判定閾値を超えると(図15の(1)参照)、通信部121からのデータ送信(再送を含む)を一時的に停止させる(図15の(2)参照)。
また、再送制御部125cは、次の通信周期の開始時において送信判定カウンタのカウント値をリセットする(図15の(3)参照)。これにより、次の通信周期では、送信エラーの検出回数をゼロからカウントしていくこととなる。なお、かかる再送制御処理の具体的な動作は、実施例1および2において説明した通りである。
一方、異常検出部125dも、再送制御部125cと同様に、送信エラーが検出されるごとに、異常判定カウンタのカウント値をカウントアップしていく。異常判定カウンタのカウント値は、送信停止判定カウンタのカウント値がリセットされた場合であってもリセットされない(図15の(4)参照)。
具体的には、異常検出部125dは、再送制御部125cによって通信部121からのデータ送信が一時的に停止された場合には、異常判定カウンタのカウント処理を一時的に中断して、異常判定カウンタのカウント値を保持する。
そして、異常検出部125dは、異常判定カウンタのカウント値が異常判定閾値を超えると(図15の(5)参照)、通信異常が発生していると判定し、通信部121からのデータ送信(再送を含む)を禁止する。異常検出部125dは、通信異常を検出して送信処理を禁止した通信周期が終了して次の通信周期が開始されても送信処理の禁止を解除しない(図15の(6)参照)。
なお、異常検出部125dは、送信処理を禁止した場合には、再送制御部125cに対して、再送禁止解除命令の通知およびレジスタ126の送信停止フラグのオフ動作を禁止する。これにより、再送制御部125cによって送信停止状態が解除されることがなくなる。
このように、一時的な異常を判定するための送信停止判定カウンタと、永続的な異常を判定するための異常判定カウンタとを別々に設け、異常判定カウンタのカウント処理は、送信停止カウンタのカウント処理に基づく送信停止/再開処理の処理状況を考慮して行うこととした。このため、検出された異常が、一時的な異常(電気ノイズが一時的に混入する場合)なのか永続的な異常なのかを正確に判定することができる。
なお、再送制御部125cによってオンオフされる送信停止フラグとは別に、異常検出部125dによってオンオフされる送信停止フラグ(異常フラグ)をレジスタ126に設けてもよい。かかる場合、データ格納処理部125aは、再送制御部125cによって送信停止フラグがオフされたとしても、異常フラグがオンされていれば、送信バッファ122へのデータ格納を停止する。
ところで、図15では、異常判定後、以後の送信データを停止することとしたが、この場合、何らかの要因(例えば修理を行った場合)で通信システムが正常に戻った場合でも通信を行わないという問題が発生する。そのため、装置の電源、例えば、図示しない車両に取り付けられたIG-SW(イグニッションスイッチ)がオンまたはオフされるごとに、送信処理を復帰するようにしてもよい。
以下では、IG−SWがオフされた場合に送信処理の禁止状態を解除する場合の例について図16を用いて説明する。図16は、再送制御部125cおよび異常検出部125dの動作例を示す図(その2)である。
図15を用いて既に説明した通り、異常判定カウンタのカウント値が異常判定閾値を超えると(図16の(1)参照)、異常検出部125dは、通信異常が発生していると判定し、通信部121からのデータ送信(再送を含む)を禁止する。送信処理が禁止された状態は、送信処理を禁止した通信周期が終了して次の通信周期が開始されても維持される(図16の(2)参照)。
ここで、異常判定がなされた場合には、たとえばウォーニングランプ等によってユーザに対して異常が発生したことが報知される。ユーザは、異常が発生したことを認識すると、車両をディーラー等へ持ち込んで修理をしてもらうこととなる。このとき、修理を行うためにIG−SWがオフされる(図16の(3)参照)。
異常検出部125dは、IG−SWがオフされると、送信処理の禁止を解除するとともに(図16の(4)参照)、異常判定カウンタをリセットする(図16の(5)参照)。なお、送信判定カウンタは、再送制御部125cによって、異常判定がなされた次の通信周期の開始時においてカウント値がリセットされている(図16の(6)参照)。
なお、図16では、IG−SWがオフされたことを契機として送信処理の禁止状態を解除する場合の例について説明したが、これに限ったものではなく、IG−SWがオンされたことを契機として送信処理の禁止状態を解除することとしてもよい。
このように、電源が少なくともオンまたはオフされた際に送信処理の禁止を解除することとすれば、送信処理の禁止状態を適切なタイミングで解除することができる。
ところで、図15や図16では、送信エラーが検出されるごとに、異常判定カウンタのカウント値をカウントアップすることとしたが、異常判定カウンタのカウント値をカウントアップするタイミングは、これに限ったものではない。たとえば、再送制御部125cがデータ送信を一時的に停止させるごとに、異常判定カウンタのカウント値をカウントアップするようにしてもよい。
さらに、異常検出部125dは、異常判定カウンタのカウント値をカウントアップするだけでなく、所定の条件に従ってカウントダウンすることとしてもよい。そこで、異常判定カウンタのカウントパターンについて図17を用いて説明する。図17は、異常判定カウンタのカウントパターンの一例を示す図である。
図17に示すように、異常検出部125dは、たとえば、再送制御部125cと同様に、送信エラーを検出するごとに、異常判定カウンタのカウント値をカウントアップしてもよい(図17のパターン1)。また、かかる場合において異常検出部125dは、フレームデータの送信が正常に行われるごとに、異常判定カウンタのカウント値をカウントダウンしてもよい(図17のパターン2)。
また、異常検出部125dは、送信エラーが検出された通信周期ごとに異常判定カウンタのカウント値をカウントアップさせてもよい(図17のパターン3)。かかる場合、異常検出部125dは、通信周期における最初の送信エラーを検出してから次の通信周期が到来するまでの間、カウント処理を行わなくてよい。すなわち、カウント処理の頻度がパターン1や2と比較して少なくなるため、処理負荷を低減することができる。また、異常検出部125dは、通信周期内において送信エラーが検出されなかった場合に、異常判定カウンタのカウント値をカウントダウンさせてもよい(図17のパターン4)。
また、異常検出部125dは、送信エラーが検出され、かつ、通信周期内にかかる送信エラーから復帰しなかった場合に、異常判定カウンタのカウント値をカウントアップすることとしてもよい(図17のパターン5)。このようにすれば、送信エラーとなったが通信周期内にエラー復帰した場合をカウントアップの対象から除外することができる。
また、異常検出部125dは、通信周期内において送信エラーが検出されなかった場合、または、送信エラーが検出されたが通信周期内にエラー復帰した場合に、異常判定カウンタのカウント値をカウントダウンさせてもよい(図17のパターン6)。なお、異常検出部125dは、送信エラーが検出されたが通信周期内にエラー復帰した場合には、異常判定カウンタのカウント値をカウントダウンさせずに維持することとしてもよい。
また、図17に図示していないパターンとして、異常検出部125dは、所定時間ごとに送信エラーとフレームデータの正常送信の有無を検出し、以前に送信エラーが検出されてからフレームデータの正常送信が検出されていない場合に、異常判定カウンタのカウント値をカウントアップし、以前にフレームデータの正常送信が検出されてから送信エラーが検出されていない場合に、異常判定カウンタのカウント値をカウントダウンするようにしてもよい。この場合には、送信エラーに基づく異常状態とフレームデータの正常送信に基づく正常状態のそれぞれの継続時間応じた異常検出が可能になる。
また、上記した各カウントアップ条件とカウントダウン条件は、各パターンに記載したような組み合わせに限定されるものではなく、上記したパターンにないカウントアップ条件とカウントダウン条件の組み合わせにしてもよい。
また、異常時にカウントアップ、正常時にカウントダウンという構成にしているが、正常時にカウントアップ、異常時カウントダウンするように構成してもよい。また、異常状態のカウントを行うカウンタと正常状態のカウントを行うカウンタとをそれぞれ別に設ける構成にしてもよい。この場合には、たとえば、正常状態をカウントするカウンタが所定閾値を超えると異常時をカウントするカウンタをリセットするように構成される。
ここで、図17のパターン2について図18を用いて説明する。図18は、再送制御部および異常検出部の動作例を示す図(その3)である。ここで、図18では、異常判定カウンタのカウント値が異常判定閾値を超える前に、送信状態が正常に戻った場合の例を示している(図18の(1)参照)。
図18に示すように、異常検出部125dは、データ送信が正常に完了するごとに、異常判定カウンタのカウント値を1ずつカウントダウンする(図18の(2)参照)。そして、異常検出部125dは、異常判定カウンタのカウント値が「0」になると、カウント値「0」を維持する(図18の(3)参照)。
このように、異常判定カウンタのカウント値を所定の条件に従ってカウントダウンすることとすれば、一時的な送信エラーの検出が長期に亘って蓄積されることによって本異常状態(永続的な異常状態)であると誤判定してしまうことを防止することができる。
なお、異常検出部125dは、再送制御部125cがデータ送信を一時的に停止させるごとに、異常判定カウンタのカウント値をカウントアップすることとしてもよい。かかる場合、異常検出部125dは、通信周期においてデータ送信が一時停止させられなかった場合に、異常判定カウンタのカウント値をカウントダウンすることとしてもよい。
次に、実施例3に係る送信処理の処理手順について図19を用いて説明する。図19は、実施例3に係る送信処理の処理手順を示すフローチャートである。
図19に示すように、再送制御部125cは、異常フラグがオフされているか否かを判定し(ステップS301)、異常フラグがオフされていれば(ステップS301,Yes)、通信処理周期の開始タイミングであるか否かを判定する(ステップS302)。
ステップS302において、通信処理周期の開始タイミングであると判定すると(ステップS302,Yes)、再送制御部125cは、通信周期の開始タイミングであるか否かを判定する(ステップS303)。
かかる処理において、通信周期の開始タイミングであると判定すると(ステップS303,Yes)、再送制御部125cは、レジスタ126の送信停止フラグをオフし(ステップS304)、送信停止判定カウンタをリセットする(ステップS305)。
ステップS305の処理を終えたとき、あるいは、ステップS303において通信周期の開始タイミングではない場合(ステップS303,No)、データ格納処理部125aは、送信停止フラグがオフされているか否かを判定する(ステップS306)。
かかる処理において送信停止フラグがオフされていると判定すると(ステップS306,Yes)、データ格納処理部125aは、送信データを抽出し(ステップS307)、抽出した送信データを送信バッファ122にセットする(ステップS308)。
ステップS308の処理を終えたとき、ステップS306において送信停止フラグがオフされていない場合(ステップS306,No)、あるいは、ステップS302において通信処理周期の開始タイミングではない場合(ステップS302,No)、再送制御部125cは、送信エラーを検出したか否かを判定する(ステップS309)。具体的には、再送制御部125cは、レジスタ126の送信エラーフラグがオンされている場合に、送信エラーを検出したと判定する。
かかる処理において、送信エラーを検出したと判定すると(ステップS309,Yes)、再送制御部125cは、送信停止判定カウンタをカウントアップする(ステップS310)。また、再送制御部125cは、送信停止フラグがオフされているか否かを判定し(ステップS311)、オフされていると判定した場合に(ステップS311,Yes)、閾値が決定済みであるか否かを判定する(ステップS312)。そして、閾値が決定済みでなければ(ステップS312,No)、閾値決定処理を行って閾値を決定する(ステップS313)。
ステップS313の処理を終えた場合、あるいは、ステップS312において閾値が決定済みである場合(ステップS312,Yes)、再送制御部125cは、送信停止判定カウンタのカウント値が送信停止判定閾値を超えたか否かを判定する(ステップS314)。
送信停止判定カウンタのカウント値が送信停止判定閾値を超えたと判定した場合(ステップS314,Yes)、再送制御部125cは、送信バッファ122に格納されている未送信のデータを全て削除し(ステップS315)、レジスタ126の送信停止フラグをオンして(ステップS316)、処理を終了する。
なお、再送制御部125cは、ステップS301において異常フラグがオフされていない場合(ステップS301,No)、ステップS309において送信エラーが検出されていない場合(ステップS309,No)、ステップS311において送信停止フラグがオフされていない場合(ステップS311,No)、ステップS314において送信判定カウンタのカウント値が送信停止判定閾値を超えていない場合にも(ステップS314,No)、処理を終了する。
つづいて、異常判定処理に関する処理手順について図20を用いて説明する。図20は、異常判定処理の処理手順を示すフローチャート(その1)である。なお、異常検出部125dは、図20に示す処理手順を図19に示す処理手順と並行して行うものとする。
図20に示すように、異常検出部125dは、送信停止フラグがオフされているか否かを判定し(ステップS401)、送信停止フラグがオフされている場合には(ステップS401,Yes)、送信エラーを検出したか否かを検出する(ステップS402)。
ステップS402において、送信エラーを検出すると(ステップS402,Yes)、異常検出部125dは、異常判定カウンタをカウントアップする(ステップS403)。つづいて、異常検出部125dは、異常フラグがオフされているか否かを判定し(ステップS404)、異常フラグがオフされている場合には(ステップS404,Yes)、異常判定カウンタのカウント値が異常判定閾値を超えたか否かを判定する(ステップS405)。
そして、ステップS405において、異常判定カウンタのカウント値が異常判定閾値を超えた場合には(ステップS405,Yes)、異常フラグをオンして(ステップS406)、処理を終了する。
一方、異常検出部125dは、ステップS402において送信エラーを検出していない場合には(ステップS402,No)、異常判定カウンタをカウントダウンして(ステップS407)、処理を終了する。
なお、異常検出部125dは、ステップS401において送信停止フラグがオフされていない場合(ステップS401,No)、ステップS404において異常フラグがオンされていない場合(ステップS404,No)、ステップS405において異常判定カウント値が異常判定閾値を終えていない場合にも(ステップS405,No)、処理を終了する。
また、異常判定処理の処理手順の他の例について図21を用いて説明する。図21は、異常判定処理の処理手順を示すフローチャート(その2)である。図21では、異常判定カウンタをカウントダウンする場合に、データが正常に送信されたか否かを判定する点で図20と異なる。ここで、図21のステップS501〜S506の処理は、図20のステップS401〜S406の処理と同様であるため、ここでの説明は省略する。
図21に示すように、異常検出部125dは、ステップS502において送信エラーを検出していない場合(ステップS502,No)、データの正常送信を検出したか否かを判定し(ステップS507)、正常送信を検出した場合には(ステップS507,Yes)、異常判定カウンタをカウントダウンして(ステップS508)、処理を終了する。なお、異常検出部125dは、ステップS507において、データの正常送信を検出していない場合には(ステップS507,No)、そのまま処理を終了する。
上述してきたように、実施例3では、再送制御部125cが、通信周期における1周期内に検出された送信エラーの検出回数または継続時間が送信停止判定閾値を超えた場合に、当該通信周期における送信処理を禁止し、異常検出部125dが、複数の通信周期における送信エラーの検出回数または継続時間の検出を、再送制御部125cによって送信処理が禁止された期間を除外して行い、検出した検出回数または継続時間が送信停止判定閾値よりも高い異常判定閾値を超えた場合に、通信異常が発生していると判断することとした。したがって、通信異常を正確に判定することができる。
以上、本発明に係る通信システムの実施例のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。
たとえば、上述してきた各実施例では、データ通信の効率を高めることを目的として、HV−ECU1,1’が開始IDを含んだフレームデータを送信し、モータECU2が開始IDを含むフレームデータを受信すると、開始IDに対応するデータの送信を行うこととした。しかしながら、このように送受信処理を必ずしも行う必要はない。すなわち、上述した各実施例に係る通信システムは、第1の通信装置および第2の通信装置が所定の通信周期でデータの送受信を行う通信システムであればよい。
また、上述してきた各実施例では、閾値決定処理によって送信停止判定閾値を動的に決定する場合の例について説明したが、再送制御部125cは、閾値決定処理を行わずに、あらかじめ決められた送信停止判定閾値を用いることとしてもよい。
また、上述してきた各実施例では、マスタノードであるHV−ECU1,1’からのデータの優先度が、スレーブノードであるモータECU2からのデータの優先度よりも高く設定される場合の例について説明してきたが、これに限ったものではない。
また、上述してきた各実施例では、HV−ECU1,1’およびモータECU2がCANプロトコルに従って通信を行うこととしたが、HV−ECU1,1’およびモータECU2は、CANプロトコルと同様の通信調停を行う他の通信プロトコルに従って通信を行うこととしてもよい。また、ここでは、HV−ECU1,1’およびモータECU2がCANバスを介して通信を行うこととしたが、CANバスに類するものであれば他の通信線を用いてもよい。