(57)【特許請求の範囲】
【請求項１】
リングバッファ構造を有する複数のバッファを用い、外部ツールとの間で要求データの受信、並びに該要求に対する応答データの送信を行う車両用通信装置であって、
各バッファのリングバッファ部に前記要求データの受信から前記応答データの送信までの一連の処理について処理待ちの状況を含めて現在の進行状況を示すデータである状態データを付与し、要求データの受信処理及び応答データの送信処理にかかるデータ通信に際しては、該通信の状態に応じて予め定められた状態データが付与されているバッファを選択的に使用すると共に、該選択したバッファに付与されている状態データを当該データ通信での処理進行状況を示すように操作することを特徴とする車両用通信装置。
【請求項２】
前記状態データが、前記処理待ちの状況にあることを示すデータである空き状態データ、及び前記要求データの受信処理が実行される状況にあることを示すデータである受信状態データ、及び前記応答データの送信処理が実行される状況にあることを示すデータである送信状態データを含み、前記要求データの受信処理に際しては、前記状態データとして前記空き状態データが付与されているバッファを選択的に使用し、前記応答データの送信処理に際しては、前記状態データとして前記受信状態データが付与されているバッファを選択的に使用する請求項１記載の車両用通信装置。
【請求項３】
外部ツールからの要求データを受信した際、前記状態データに基づいて書き込み先となるバッファを検索して選択し、該選択したバッファの状態データを受信状態データとすべく操作した後、要求データを当該バッファに書き込む手段と、一旦書き込んだ要求データを読み出して応答データを作成する手段と、前記状態データを前記操作した受信状態データから送信状態データに切り替えた後、応答データを当該バッファに書き込む手段と、該書き込んだ応答データを送信のために読み出すと共に前記状態データを前記切り替えた送信状態データから空き状態データとすべく操作する手段と、を備えた請求項２記載の車両用通信装置。
【請求項４】
当該車両用通信装置は、前記作成された応答データがバッファに書き込まれて後、該応答データを複数に分割してバッファから読み出し外部ツールに送信するものであって、前記空き状態データとすべく操作する手段は、全ての応答データの読み出しが完了した後、前記状態データを送信状態データから空き状態データとすべく操作する請求項３記載の車両用通信装置。
【請求項５】
前記要求データの受信処理に際しては、前記空き状態データが付与されているバッファ、及び前記受信状態データが付与されているバッファのいずれかが選択されるかたちでその使用対象となるバッファを検索する請求項２乃至４の何れかに記載の車両用通信装置。
【請求項６】
前記使用対象となるバッファの検索は、前記受信状態データの付与されているバッファが前記空き状態データの付与されているバッファよりも優先的に選択されるかたちで行われる請求項５記載の車両用通信装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＣＡＮプロトコル等を適用した車両用通信装置に関するものである。
【０００２】
【従来の技術】
この種の車両用通信装置では、ＥＣＵ（電子制御ユニット）内の各種の情報をテスタを用いて読み出し、当該情報に基づいて故障の解析等が実施される。この場合、テスタとＥＣＵとの間で実施される通信制御では、受信若しくは送信のデータを一時的に記憶するための領域（「バッファ」と定義する）が受信及び送信それぞれで確保されており、このバッファを通じてデータの受信並びに送信が実施される。
【０００３】
上記従来技術では、受信及び送信それぞれでバッファを所持しているため、受信時に要する最大データ領域と送信時に要する最大データ領域とをそれぞれ確保しなくてはならない。例えば、ＣＡＮプロトコルの受信又は送信で使用される最大４ｋバイトのデータを送受信するためには、合計８ｋバイトもの領域が必要になる。
【０００４】
その対策として、リングバッファを用い、受信及び送信でバッファを共用することが考えられる。このリングバッファでは、全領域が受信データ及び送信データ双方で利用可能となっており、書き込み及び読み出しのアドレスを指定するためのバッファポインタ（書き込みポインタ、読み出しポインタ）が設定されている。例えば、図８に示すように、１バイトのデータ１の書き込みに伴い書き込みポインタが１バイト分進められ、更にデータ１の読み出しに伴い読み出しポインタが１バイト分進められる。
【０００５】
また近年では、ＩＳＯ（国際標準化機構）等により、自動車に用いられるＣＡＮ（コントロールエリアネットワーク）の規格が整備されつつある。例えばＩＳＯ１５７６５−２の規格では、ＣＡＮプロトコルとして送信と受信とを同時に行う全二重通信が定義されている。従って、単純にリングバッファを複数定義すると、どのバッファを送信又は受信に使えばいいか判断できなくなるといった問題が新たに生じる。
【０００６】
【発明が解決しようとする課題】
本発明は、上記問題に着目してなされたものであって、その目的とするところは、効率的な通信制御を実施することができる車両用通信装置を提供することである。
【０００７】
【課題を解決するための手段】
請求項１に記載の車両用通信装置では、リングバッファ構造のバッファを用いることにより受信と送信とでバッファの共用が可能となり、メモリ領域の有効利用が可能となる。また特に、各バッファのリングバッファ部に前記要求データの受信から前記応答データの送信までの一連の処理について処理待ちの状況を含めて現在の進行状況を示すデータである状態データを付与し、要求データの受信処理及び応答データの送信処理にかかるデータ通信に際しては、該通信の状態に応じて予め定められた状態データが付与されているバッファを選択的に使用すると共に、該選択したバッファに付与されている状態データを当該データ通信での処理進行状況を示すように操作することとした。このような状態データをモニタすることにより各バッファが上記一連の処理の如何なる状態（処理待ちの状況や処理中の状況など）にあるかが容易に判断できる。そして、こうした判断に基づいて前記バッファを選択的に使用することとしたため、効率的な通信装置が実現できる。
【０００８】
本発明では請求項２に記載したように、前記状態データが、前記処理待ちの状況にあることを示すデータである空き状態データ、及び前記要求データの受信処理が実行される状況にあることを示すデータである受信状態データ、及び前記応答データの送信処理が実行される状況にあることを示すデータである送信状態データを含み、前記要求データの受信処理に際しては、前記状態データとして前記空き状態データが付与されているバッファを選択的に使用し、前記応答データの送信処理に際しては、前記状態データとして前記受信状態データが付与されているバッファを選択的に使用すると良い。このような構成では、上記バッファの選択に際し、各バッファが上記処理待ちの状況、及び上記受信処理が実行される状況、及び上記送信処理が実行される状況のいずれの処理状況（通信状態）にあるかを把握できるようになり、ひいてはより効率的なバッファ選択を実現できるようになる。
【０００９】
請求項３に記載の発明では、外部ツールからの要求データを受信した際、前記状態データに基づいて書き込み先となるバッファを検索して選択し、該検索したバッファの状態データを受信状態データとすべく操作した後、要求データを当該バッファに書き込む。また、一旦書き込んだ要求データを読み出し、応答データを作成する。そして、前記状態データを前記操作した受信状態データから送信状態データに切り替えた後、応答データを当該バッファに書き込み、更に該書き込んだ応答データを送信のために読み出すと共に前記状態データを前記切り替えた送信状態データから空き状態データとすべく操作する。本構成によれば、要求データの受信後において、バッファを介しての要求データの書き込み及び読み出し、応答データの作成、同一のバッファを介しての応答データの書き込み及び読み出し、更に応答データの送信を好適に実施することができる。
【００１０】
なお、上記請求項３の発明にあって、当該車両用通信装置が、前記作成された応答データがバッファに書き込まれて後、該応答データを複数に分割してバッファから読み出し外部ツールに送信するものであるときは、請求項４に記載したように、前記空き状態データとすべく操作する手段は、全ての応答データの読み出しが完了した後、前記状態データを送信状態データから空き状態データとすべく操作すると良い。
【００１１】
また、請求項２乃至４の何れかに記載の発明においては、請求項５に記載したように、前記要求データの受信処理に際し、前記受信状態データが付与されているバッファ、及び前記空き状態データが付与されているバッファのいずれかが選択されるかたちでその使用対象となるバッファを検索すると良い。また、請求項５に記載の発明においては、請求項６に記載したように、前記使用対象となるバッファの検索を、前記受信状態データの付与されているバッファが前記空き状態データの付与されているバッファよりも優先的に選択されるかたちで行うようにすると良い。
【００１２】
【発明の実施の形態】
以下、この発明の車両用通信装置を具体化した一実施の形態を図面に従って説明する。本実施の形態では車両制御システムに本発明を具体化し、その構成を図１に示す。
【００１３】
図１において、ＥＣＵ１０はマイクロコンピュータを主体とする電子制御ユニットよりなり、このＥＣＵ１０によりエンジン制御やトランスミッション制御等が実施される。また、ＥＣＵ１０は、ダイアグノーシス（故障診断）の機能を有し、そのダイアグ情報は適宜ＥＥＰＲＯＭ等の不揮発性メモリに記憶保持される。ＥＣＵ１０には外部ツールとしてのテスタ２０が接続され、この両者間で全二重通信によりＣＡＮメッセージが送受信される。ＥＣＵ１０とテスタ２０との間のＣＡＮ通信は例えばＩＳＯ１５７６５−２に準拠して実施される。例えばテスタ２０は、ダイアグ情報やエンジン運転情報等を読み出す旨のメッセージ（要求データ）をＥＣＵ１０に送信し、ＥＣＵ１０は応答のメッセージをテスタ２０に返信する。
【００１４】
ＣＡＮ通信に関するＥＣＵ１０の構成を詳しく説明する。ＥＣＵ１０は、テスタ２０との間でＣＡＮ通信を実施するためのＣＡＮ通信制御部１１を備える。このＣＡＮ通信制御部１１は、テスタ２０から要求を受信し、その応答を返すまでの処理を制御するモジュールである。ＣＡＮ通信制御部１１は、基本構成としてＣＡＮメッセージ受信処理、応答データ作成処理、ＣＡＮメッセージ送信処理の各機能を具備する。
【００１５】
ここで、ＣＡＮメッセージ受信処理は、ＣＡＮメッセージ（要求データ）のフォーマットチェックを実施し、後述するバッファ１３に要求データを格納する処理である。応答データ作成処理は、要求データの内容から応答データを作成し、バッファ１３に応答データを格納する処理である。また、ＣＡＮメッセージ送信処理は、バッファ１３から応答データを取得してＣＡＮフォーマットに変換し、テスタ２０に応答する処理である。
【００１６】
また、ＣＡＮ通信制御部１１内にはバッファ管理部１２が設けられ、このバッファ管理部１２には、リングバッファ構造の複数のバッファ１３が設けられている。バッファ１３は、バッファステータス付きの送受信共用バッファであり、図２に示すように、領域Ａ１にはその都度のバッファ１３の状態を示すバッファステータス（状態データ）が格納される。具体的には、バッファ１３が何もしていない空き状態であればバッファステータスが「ＩＤＬＥ」に操作され、その他、メッセージ受信中であればバッファステータスが「受信中」に、メッセージ送信中であればバッファステータスが「送信中」に操作される。
【００１７】
また、図のＡ２領域は、多数のデータ書き込み領域を有するリングバッファ部であり、読み出しポインタと書き込みポインタによりデータ読み出し又は書き込みの位置が制御される。データ書き込み時には、書き込みポインタが指し示す領域にデータが書き込まれ、書き込まれたサイズ分だけポインタが進められる。また、データ読み出し時には、読み出しポインタが指し示す領域からデータが読み出され、読み出されたサイズ分だけポインタが進められる。
【００１８】
次に、ＣＡＮ通信制御部１１における通信制御の概要を図３を用いて説明する。図３では、バッファ管理部１２に２枚のバッファを設け、それら各々をバッファ番号ＢＮ＝０，１とした事例を示す。
【００１９】
さて、図３の（ａ）に示すように、テスタ２０からメッセージを受信すると、ＣＡＮ通信制御部１１では、バッファステータスが「ＩＤＬＥ」であるバッファ１３、すなわち書き込み先となるバッファ１３が検索され、その該当するバッファ１３にメッセージ中の要求データが格納される。このとき、例えばＢＮ＝１のバッファ１３について、バッファステータスが「受信中」に切り替えられ、その後要求データが格納される（図の丸数字１）。その後、同じくＢＮ＝１のバッファ１３から要求データが取得され、それに対応する応答データが作成される（図の丸数字２）。
【００２０】
応答データの作成が完了すると、図３の（ｂ）に示すように、ＢＮ＝１のバッファ１３について、バッファステータスが「受信中」から「送信中」に切り替えられ、その後応答データが格納される。更にその後、同じくＢＮ＝１のバッファ１３から応答データが取得される（図の丸数字４）。そして、この応答データに対応するメッセージがテスタ２０に対して送信される（図の丸数字５）。
【００２１】
図３の（ｃ）に示すように、ＢＮ＝１のバッファ１３が「送信中」である最中に新たなメッセージを受信した場合には、バッファステータスが「ＩＤＬＥ」である他のバッファ１３（この場合は、ＢＮ＝０のバッファ）に要求データが格納される。このとき、ＢＮ＝０のバッファ１３では、バッファステータスが「受信中」に切り替えられる。その後、ＢＮ＝１のバッファ１３について、メッセージの送信が完了すると、バッファステータスが「ＩＤＬＥ」に戻される。
【００２２】
なお、メッセージの送信完了後にバッファステータスを「ＩＤＬＥ」に戻すことに代えて、バッファ１３から応答データを取得した際（応答データの取得後、送信前）にバッファステータスを「ＩＤＬＥ」に戻す構成であっても良い。
【００２３】
図４〜図７は、ＣＡＮ通信制御部１１で実施される処理の流れを示すフローチャートであり、これらの各処理によりＣＡＮメッセージ受信、応答データ作成、ＣＡＮメッセージ送信の各処理が実現される。
【００２４】
テスタ２０からのＣＡＮメッセージを受信すると図４のメッセージ受信処理が起動され、先ずはじめにステップ１０１では、当該メッセージの内容を解析する。このとき、ＣＡＮメッセージが規格（本実施の形態ではＩＳＯ１５７６５−２）で定められたフォーマット通りの要求であるかどうかが解析される。そして、ＣＡＮメッセージがフォーマット通りの要求であること、すなわち当該メッセージが正常であること（ステップ１０２がＹＥＳであること）を条件に、後続のステップ１０３に進む。
【００２５】
ステップ１０３では、データ格納先となるバッファ１３を検索する。バッファ１３の検索は図７のサブルーチンで実施され、ここで図７のバッファ検索処理を説明する。当該検索処理では、データの格納及び取得を実施すべきバッファ番号ＢＮが検索され、そのバッファ番号ＢＮが見つかったかどうかにより「Ｂｕｆｆ有り」又は「Ｂｕｆｆ無し」何れかの戻り値がセットされる。なお本実施の形態では、全てのバッファ１３が「バッファステータス＝ＩＤＬＥ」である場合、最大ＢＮのバッファ１３が選択される。また、「バッファステータス＝受信中」であるバッファ１３が存在する場合、同時に２つの受信処理が発生しないよう、その受信中のバッファ１３が繰り返し用いられてデータが格納される。これは、受信中に新たな受信が発生した場合に、新たな受信を優先するようにしたものである（ＩＳＯ１５７６５−２に準拠）。
【００２６】
図７において、ステップ４０１では、ワーク領域を示すｉに０を、Ｔｍｐに無効値をセットする。その後、ｉ値がバッファ枚数の最大値（ＢＵＦＦ＿ＭＡＸ）以下であること（ステップ４０２がＮＯであること）を条件に、ステップ４０３に進む。ステップ４０３では、バッファステータスが「受信中」であるか否かを判別し、続くステップ４０４では、バッファステータスが「ＩＤＬＥ」であるか否かを判別する。バッファステータスが「受信中」、「ＩＤＬＥ」の何れでもない場合、そのままステップ４０６に進み、ｉ値をインクリメントした後ステップ４０２に戻る。
【００２７】
バッファステータスが「ＩＤＬＥ」であれば、ステップ４０５でその時のｉ値をＴｍｐにセットし、ステップ４０６でｉ値をインクリメントした後ステップ４０２に戻る。
【００２８】
また、バッファステータスが「受信中」であれば、ステップ４０７でその時のｉ値をバッファ番号ＢＮとして決定する。続くステップ４０８では、Ｂｕｆｆ有りとする戻り値をセットし、元の図４に戻る。
【００２９】
ｉ値がバッファ枚数の最大値（ＢＵＦＦ＿ＭＡＸ）に達するとステップ４０９に進み、Ｔｍｐの値が無効値のままであるか否かを判別する。上記ステップ４０２〜４０６の処理でバッファステータス＝ＩＤＬＥのバッファが見つかっていれば、その都度のｉ値がＴｍｐにセットされており、ステップ４０９がＮＯとなる。よって、ステップ４１０でＴｍｐの値をバッファ番号ＢＮとして決定する。続くステップ４１１では、Ｂｕｆｆ有りとする戻り値をセットし、元の図４に戻る。
【００３０】
一方、上記ステップ４０２〜４０６の処理でバッファステータス＝ＩＤＬＥのバッファが見つかってなければ、Ｔｍｐが無効値のままとなっており、ステップ４０９がＹＥＳとなる。よって、ステップ４１２では、Ｂｕｆｆ無しとする戻り値をセットし、元の図４に戻る。
【００３１】
以上図７のバッファ検索処理によれば、バッファステータス＝ＩＤＬＥのバッファ１３が選択され、当該バッファ１３が要求データの書き込み先とされる。或いは、バッファステータス＝受信中のバッファ１３が選択され、当該バッファ１３が要求データの書き込み先とされる。
【００３２】
図４の説明に戻る。上記の如くバッファ検索が実施された後、ステップ１０４では、バッファ検索の結果、Ｂｕｆｆ有りであったか否かを判別する。そして、Ｂｕｆｆ有りであることを条件に後続のステップ１０５に進む。ステップ１０５ではバッファステータスを「受信中」とし、続くステップ１０６ではバッファ１３の書き込みポインタ及び読み出しポインタを初期化する。
【００３３】
その後、ステップ１０７〜１０９では、要求データの全バイトをバッファ１３に格納する。すなわち、要求データを１バイトずつ書き込むと共に書き込みポインタを１バイト分進め（ステップ１０８，１０９）、これを全バイトの書き込み完了となるまで繰り返し実施する。そして、全バイトの書き込みが完了すると図５の応答データ作成処理に移行する。
【００３４】
次に、図５の応答データ作成処理では、ステップ２０１〜２０３でバッファ１３より要求データを取得する。すなわち、要求データをＮバイトずつ読み出すと共に読み出しポインタをＮバイト分進め（ステップ２０１，２０２）、これを全バイトの読み出し完了となるまで繰り返し実施する。そして、全バイトの読み出しが完了すると後続のステップ２０４に進む。
【００３５】
ステップ２０４では、要求データの解析を実施する。このとき、要求データ中に含まれるテストモード情報（ＩＳＯ１５７６５準拠のＳＩＤ，ＰＩＤ等）からどのような情報をテスタ２０に応答すべきかを決定する。その後、ステップ２０５では、応答すべきデータを収集し、それにより応答データを作成する。
【００３６】
ステップ２０６では、バッファステータスを「送信中」に切り替え、続くステップ２０７では、その時の読み出しポインタを書き込みポインタとする。その後、ステップ２０８〜２１０では、応答データの全バイトをバッファ１３に格納する。すなわち、応答データを１バイトずつ書き込むと共に書き込みポインタを１バイト分進め（ステップ２０９，２１０）、これを全バイトの書き込み完了となるまで繰り返し実施する。そして、全バイトの書き込みが完了すると図６の応答データ送信処理に移行する。
【００３７】
図６のメッセージ送信処理では、ステップ３０１〜３０３でバッファ１３より応答データを取得する。すなわち、応答データをＮバイトずつ読み出すと共に読み出しポインタをＮバイト分進め（ステップ３０１，３０２）、これを全バイトの読み出し完了となるまで繰り返し実施する。そして、全バイトの読み出しが完了すると後続のステップ３０４に進む。
【００３８】
ステップ３０４では、バッファステータスを「ＩＤＬＥ」に切り替え、続くステップ３０５ではＣＡＮメッセージを作成する。このとき、ＩＳＯ１５７６５−２で定められたフォーマットに準拠した形で応答データを作成する。最後に、ステップ３０６では、テスタ２０に対して応答を開始する。
【００３９】
以上詳述した本実施の形態によれば、以下に示す効果が得られる。
リングバッファ構造のバッファ１３を用いることにより受信と送信とでバッファの共用が可能となり、メモリ領域（ＲＡＭ領域）の有効利用が可能となる。また、バッファステータスに応じて各バッファ１３を選択的に使用すると共に、バッファステータスをその都度該当する状態に操作するため、バッファステータスをモニタすることにより各バッファ１３が如何なる通信状態にあるかが容易に判断できる。従って、効率的な通信装置が実現できる。この場合、複雑な全二重通信であっても簡易に所望の効果が実現できる。
【００４０】
具体的には、要求データの受信後において、バッファ１３を介しての要求データの書き込み及び読み出し、応答データの作成、同一のバッファ１３を介しての応答データの書き込み及び読み出し、更に応答データの送信を好適に実施することができる。
【００４１】
なお本発明は、上記以外に次の形態にて具体化できる。
上記実施の形態では、バッファステータス（状態データ）として、ＩＤＬＥ（空き状態）、受信中、送信中の３つの状態を定義したが、これに加え、他の状態を定義しても良い。例えば、バッファステータとして、応答データ作成中の状態であることを示すデータや、バッファが異常の状態であることを示すデータ等を定義しても良い。
【００４２】
応答データをバッファ１３に書き込んだ後、複数に分割してバッファ１３から読み出し、テスタ２０に送信することも考えられる。この場合、全ての応答データの読み出しが完了した後、バッファステータスを「送信中」から「ＩＤＬＥ」に切り替えると良い。
【００４３】
ＥＣＵ１０とテスタ２０との間でプログラムの書き換え（いわゆる、リプログラミング）が実施される場合において、そのプログラムデータを送受信する際に本発明を適用することも可能である。
【図面の簡単な説明】
【図１】発明の実施の形態における車両制御システムの概要を示す構成図。
【図２】バッファの構成を示す図。
【図３】通信の様子を説明するための図。
【図４】メッセージ受信処理を示すフローチャート。
【図５】応答データ作成処理を示すフローチャート。
【図６】メッセージ送信処理を示すフローチャート。
【図７】バッファ検索処理を示すフローチャート。
【図８】リングバッファを説明するための図。
【符号の説明】
１０…ＥＣＵ、１１…ＣＡＮ通信制御部、１２…バッファ管理部、１３…バッファ、２０…テスタ。
【図１】
0003801088.tif 000002
【図２】
0003801088.tif 000003
【図３】
0003801088.tif 000004
【図４】
0003801088.tif 000005
【図５】
0003801088.tif 000006
【図６】
0003801088.tif 000007
【図７】
0003801088.tif 000008
【図８】
0003801088.tif 000009