バックナンバーはこちら
https://www.simulationroom999.com/blog/model-based-of-minimum-backnumber/
はじめに
前回、CANネットワークのノードとCANフレームとシグナルの仕様を決めた。
今回はこれらをdbcというネットワーク構成定義ファイルを作成する。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
CANdb++?
で、
dbcというネットワーク構成定義ファイルを作るんだっけ?
何で書くの?メモ帳?
まぁそれでもいいけど、
修羅の道だな。
じゃーどうするのさ?
CANoeをインストールした時にCANdb++ってのもインストールされているはずなんで、
これを使用する。
CANdb++起動とテンプレート選択
うん。たしかにCANdb++ってのがあった。
CANoeのツールってところからでも起動できるっぽい。
新規作成ってので新しくdbcファイルと作ることになるけど、
テンプレートを選ぶような画面になると思う。
今回は「Vector_IL_Basic Template.dbc」というのを選んでおこう。
選んだ。
シグナル定義
そしたら次はシグナルを定義する。
速度指令、実車速、アクセル開度のことだね。
左側のツリーの一番下に「シグナル」ってのがあるんで、
これを右クリックして「新規」を選と以下のようなウィンドウが出てくる。
お、名前とかビット長とか設定できそうな画面が出てきた。
今回は「アクセル開度」の定義をする。
アクセル開度のCAN上での仕様は前回以下のように決めてある。
尚、\(2^{-15}\)という記載の仕方はできないと思うので、
\(0.000030517578125\)を入れることになる。
シグナル | CANID | 符号 | ByteOrder | Bit/Scale | 備考 |
---|---|---|---|---|---|
アクセル開度 | 0x333 | unsigned | Motorola | \(2^{-15}\) | 1.0で全開 |
記入後の結果がこれ。
同じように「速度指令」、「実車速」も定義してしまう。
左側のツリーに3つのシグナルが表示された状態になる。
VehicleSpeedReqが速度指令、
VehicleSpeedが実車速、
AcceleratorPedalPositionがアクセル開度
だね。
メッセージ定義
次にメッセージことCANフレームの定義をする。
同じようにツリーのメッセージのところで右クリックし、新規を選択。
このタイプのStandardとExtendって何?
CANのCANIDには11bit長のStandard IDと29bit長のExtend IDってのがあるんだ。
今回はStandardのままで良いよ。
とりあえず、名前とIDの欄を埋める。
あれ?
送信周期のところが編集できないよ?
そうなんだよね。
ここら辺の仕様は良く分かってないが、
送信周期を設定する場合は「属性」ってタブを選択後、
「GenMsgCycleTime」を編集すれば良い。
今回の場合だと\(10[ms]\)なんで、「10」と入力すれば良い。
メッセージのシグナルレイアウト
次に、最初に定義したシグナルをさっき定義したメッセージへ割り当てる。
割り当てる?
それぞれ別の程度だったってこと?
うん。メッセージとシグナルは定義上は別物。
一見すると面倒に見えるが、
異なるCANIDにシグナルを移す局面とかを考えると、
こちらの方がありがたいと思う。
なるほど。
「シグナル」ってタブを選択して、
下の方にある「追加」ってボタンを押すと、
定義済みのシグナルが選択できるので、
「AcceleratorPedalPosition」を選択。
以下の状態になっていればOK。
これで割り当てが出来たと。
いや。厳密にはまだだよ。
まぁ今回はたまたまこのままでも良いんだけど。
なんか必要な作業があるんだね。
「レイアウト」ってダブをクリックすると以下の画面になる。
ん?
上の方だけ青いね?
さっき選択した「AcceleratorPedalPosition」シグナルが、
メッセージの0~15bitに割り当てられている状態を示している。
ちなみにマウスでドラックして移動できたりする。
あ、ほんとだ。面白い。
今回は特に変更せずにこのままでOKだ。
前詰めって言ってたもんね。
ネットワークノードの定義
次はノードの定義だ。
これも左側のツリーにネットワークノードってのがあるから、
これに追加していく感じかな?
そうそう。
これは名前を付けるだけなのかな?
あ!
Txメッセージってタブのところにさっき定義したメッセージを割り当てるんだね?
大体分かってきたみたいだね。
うん。
ノードにメッセージがぶら下がって、
メッセージにシグナルがぶら下がるイメージだね。
その通り。
今回は分かり易いように下の階層から定義していったけど、
慣れてくると上の階層から定義した方が早いと思う。
これは前回フクさんが書いた絵をそのまま定義している感じなのか。
ということは、先に概要レベルでも絵を描いておいたほうが混乱しなくて済みそうだね。
そうだね。
CANdb++の編集状態だと各ノードの位置関係や依存関係が見えにくいことがあるんで、
概念図があった方がミスしなくて良いよ。
これで、大体OKな感じ?
dbcファイルの作成はね。
ということはまだあるのか。
次回はこのdbcを使ってCANoe上にネットワークを構築する。
あー、それはなんか面白そう。
まとめ
まとめだよ。
- CANoeでネットワーク構造を定義するにはdbcファイルを作成する必要がある。
- dbcファイルはCANdb++で作成。
- ネットワーク定義はノード、メッセージ、シグナルの階層構造になる。
- ノードにメッセージをぶら下げる。
- メッセージにシグナルをぶら下げる。
バックナンバーはこちら
コメント