CAN入門(1)
社命です。今日からCANを使った開発をしなさい。
などと言われる事もあるでしょう。サラリーマン的な選択肢は、ハイかYesしか無いわけで、どうにかしないといけません。
私なら、まずは次の事を調べます。
・CANとは、そもそも何なのか?
・CAN開発のための環境をどう揃えたらいいのか?
そこで、今回からのシリーズでは、これらの疑問にザックリと答えてみます。(ザックリすぎると思うので、あとからちゃんとした資料にあたってください。)
CANって?
通信規格です。ECU同士を通信させるのに、CANを使ったりします。
イメージとしては、イーサネットとか、RS232Cみたいな感じです。
CAN構成と、その振る舞い
構成
CANとは何かを理解するにあたり、3つのキーワードを頭に入れます。
・CANノード ECUなどの通信ノードです
・CANバス 通信線です
・CANメッセージ 通信線をつたわるパケットです。8バイトくらいのデータを運べます。
「CANメッセージ」が「CANバス」を伝わり「CANノード」に届く
振る舞い
やる事はただ1つ。CANノードから、別のCANノードにデータを送信する。それだけです。
1.とあるCANノードが、CANバス上にCANメッセージを送信する
2.CANメッセージが、CANバスを通して全てのCANノードに届く
3.全てのCANノードは、CANメッセージをいったん受け取る。値を見るか無視するかは、ご自由にどうぞ。
まとめ
CANメッセージを送信したら、全てのCANノードに届く。CANってば、だいたいこんなものです。
お疲れ様でした。
質疑応答
さすがにザックリすぎると思うので、疑問に思われるであろう点を補足します。
気になったポイントのみご覧下さい。
全てのCANノードにデータが届くと、混乱しない?
回答
どんどんデータを送られても、「これって何のデータ?」かが分からないと混乱しちゃいます。
そうならないよう、全てのCANノードにはIDがついています。IDというのは、「このCANメッセージには、どんなデータが載っているのか?」をあらわすものです。
たとえば、
メッセージID=001 のCANメッセージ: エンジンの状態をあらわす
メッセージID=002のCANメッセージ: 走行距離をあらわす
・・・
といった形で、CANメッセージのメッセージIDを見れば、どんなデータが載っているのか?が分かります。
整理
CANメッセージは、
・メッセージID(11ビット)
・データ(0~8バイト)
を持ちます。
どのメッセージIDに、何バイトのデータを持たせるかは、自由に決められます。
そのデータがどんな意味を持つのか?も自由に決められます。
どのCANメッセージが、どんな意味を持つのか分からん!
回答
どのIDに、どんなデータが載っているのか?は、ユーザーが自由に決められます。
逆に言うと、全てのCANノードが、暗黙の前提として、「このCANメッセージは、こういう意味なんだなー」という共通認識をもっておく必要があります。
車両開発の場合は、OEMさんがエイヤと決めて、部品メーカーさんがそれに従う、という感じだったりします。
この対応表は、Excelだったりもしますが、CANdb形式という業界標準(だと思う)のファイルに書かれていたりもします。
全てのCANノードは、1つのCANdbを参照して作られる
これは、各CANノードにCANdbが埋め込まれているという意味ではありません。CANdbを参照するのはエンジニアであって、走行距離を受け取るにはどのCANメッセージを見たら良いだろう?という判断に使用します。
なお、CANメッセージには8バイトまでのデータを載せられます。しかし、車両情報で8バイトも必要なものは少ないです。むしろ、1ビットとか4ビットとか、そういうレベルのものが多数です。
そのため、CANdbでは、「このデータの、○ビット目~○ビット目までは、こういうデータ」という情報を持っています。
CANメッセージは、さらに細かい「シグナル」に分かれる
こういった細かいデータは、「シグナル」と呼ばれます。
整理
CANメッセージは、
・メッセージID(11ビット)
・データ(0~8バイト)
を持ちます。
データ(0~8バイト)の中には、
・シグナル(0~63ビット)2011/3/22訂正(1~64ビット)
が(通常は、多数)含まれます。
各シグナルが、符号ありかなしか?ビッグエンディアンかリトルエンディアンか?は、CANdbで定義されます。
どんなCANメッセージに、どんなシグナルが含まれるか?は、ExcelやCANdbなどに集約されます。そして、各CANノードを作成するエンジニアが、同じものを参照してプログラミングを行います。
余談
どのCANメッセージに、どんなシグナルが含まれるか?といった情報は、企業秘密です。ものすごく秘密です。
もしもコレが分かっちゃったら、ライバル会社のクルマを買ってきて、CANバスをモニターすれば、どんな制御をしているのかが丸分かりになってしまいます。
だから、とても秘密です。(キーワード:リバースエンジニアリング)
どういうタイミングで、CANメッセージを送信したらいいの?
回答
自由です。好きなタイミングでどうぞ。
ただし、メッセージIDなどと同様、「このメッセージは、○ms間隔で送信する」という取り決めがなされるのが普通です。
ほかにも色々なタイミングの取り方があるのですが、なんだか機密情報のような気がしないでもないので、書かないでおきます。
会社から渡された仕様書があれば、たぶんそこにCANメッセージの送信タイミングが書いてあると思います。
RS232Cだと、ボーレートとかあるんだけど、CANは?
回答
CANにもボーレートがあります。1つのCANバスは、1種類のボーレートを持ちます。全てのCANノードは、そのボーレートでもって通信を行います。
おそいものだと125kbpsとか、もっと遅いレベル。はやいものだと1Mbpsです。
注意点として、125kbpsまでのCANと、125k~1MbpsまでのCANとでは、CANバスのハードウェア構成が異なります。
とは言え、会社から「ほれ、これ使え」とハードウェアを渡されている場合には、特に気にする必要はないと思います。
どうにも通信が不安定で、おかしいなー?と思われた場合のみ、低速系と高速系の違いを疑ってみてください。
CCPとかXCPとか、はたまたGMLANとかあるけど、CANとの関係は?
前提
会社から渡された仕様書に、CCPだのXCPだのと書いてあった場合のみ、どうぞ。そうでなければ、ムシしちゃってOKです。
回答
CANメッセージは、どのIDにどんな意味を持たせるかは、完全に自由です。
そうであれば、「このメッセージIDが来たら、ECUのメモリ値を、CANバス上に送信しよう」と決めるのもまた自由です。
CCP、XCP、GMLANなどの規格は、CAN規格の上になりたっています。
「こういうメッセージを送ってくれたら、こういう応答をするよー!」と決められたサーバーが、ECUのメモリを読み書きしてくれたりします。
このときのやり取り方法を決めたのが、CCP、XCP、GMLANなどです。
ちなみに、GMLANだけは、ちょいとCAN規格を逸脱するような特殊モードをもっていたりもしますが、気にする必要はないと思います。(というか、GMLAN使うような人はここ読んでないと思う)
まとめ
とりとめがなくなってきたので、ここまでにしておきます。CAN規格はよく出来ていて、たとえば「複数のCANノードが、同時にCANメッセージを送信した」場合にも、うまく対処できるようになっています。
そういった情報に関しては、ネットでCAN入門書とか、車載ネットワーク入門とか、立派な記事はいくつも見つけられますし、良い書籍も存在していますので、ぜひそちらを当たってください。
次回は、CANを使った開発をする際、どういったツールをどう使うか?についてご説明します。
CANツールは何種類もありますが、たまたま仲良くさせていただいている、ICS社のVehicle Spyを使ってやってみます。