【上流検証】最小構成のモデルベース開発事例 その24【ネットワークMILS③】

【上流検証】最小構成のモデルベース開発事例 その24【ネットワークMILS③】 事例

バックナンバーはこちら
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のツールってところからでも起動できるっぽい。

candb++エディタ起動
フクさん
フクさん

新規作成ってので新しくdbcファイルと作ることになるけど、
テンプレートを選ぶような画面になると思う。
今回は「Vector_IL_Basic Template.dbc」というのを選んでおこう。

CANdbネットワーク(dbc)のtemplate選択
太郎くん
太郎くん

選んだ。

シグナル定義

フクさん
フクさん

そしたら次はシグナルを定義する。

太郎くん
太郎くん

速度指令、実車速、アクセル開度のことだね。

フクさん
フクさん

左側のツリーの一番下に「シグナル」ってのがあるんで、
これを右クリックして「新規」を選と以下のようなウィンドウが出てくる。

CANdb++シグナル追加
太郎くん
太郎くん

お、名前とかビット長とか設定できそうな画面が出てきた。

フクさん
フクさん

今回は「アクセル開度」の定義をする。
アクセル開度のCAN上での仕様は前回以下のように決めてある。
尚、\(2^{-15}\)という記載の仕方はできないと思うので、
\(0.000030517578125\)を入れることになる。

シグナルCANID符号ByteOrderBit/Scale備考
アクセル開度0x333unsignedMotorola\(2^{-15}\)1.0で全開
フクさん
フクさん

記入後の結果がこれ。

CANdb++シグナル追加
フクさん
フクさん

同じように「速度指令」、「実車速」も定義してしまう。
左側のツリーに3つのシグナルが表示された状態になる。

太郎くん
太郎くん

VehicleSpeedReqが速度指令、
VehicleSpeedが実車速、
AcceleratorPedalPositionがアクセル開度
だね。

メッセージ定義

フクさん
フクさん

次にメッセージことCANフレームの定義をする。
同じようにツリーのメッセージのところで右クリックし、新規を選択。

CANdb++メッセージ追加
太郎くん
太郎くん

このタイプのStandardとExtendって何?

フクさん
フクさん

CANのCANIDには11bit長のStandard ID29bit長のExtend IDってのがあるんだ。
今回はStandardのままで良いよ。

フクさん
フクさん

とりあえず、名前とIDの欄を埋める。

CANdb++メッセージ編集
太郎くん
太郎くん

あれ?

送信周期のところが編集できないよ?

フクさん
フクさん

そうなんだよね。
ここら辺の仕様は良く分かってないが、
送信周期を設定する場合は「属性」ってタブを選択後、
「GenMsgCycleTime」を編集すれば良い。
今回の場合だと\(10[ms]\)なんで、「10」と入力すれば良い。

メッセージのシグナルレイアウト

フクさん
フクさん

次に、最初に定義したシグナルをさっき定義したメッセージへ割り当てる。

太郎くん
太郎くん

割り当てる?
それぞれ別の程度だったってこと?

フクさん
フクさん

うん。メッセージとシグナルは定義上は別物。
一見すると面倒に見えるが、
異なるCANIDにシグナルを移す局面とかを考えると、
こちらの方がありがたいと思う。

太郎くん
太郎くん

なるほど。

フクさん
フクさん

「シグナル」ってタブを選択して、
下の方にある「追加」ってボタンを押すと、
定義済みのシグナルが選択できるので、
「AcceleratorPedalPosition」を選択。
以下の状態になっていればOK。

CANdb++シグナル選択
太郎くん
太郎くん

これで割り当てが出来たと。

フクさん
フクさん

いや。厳密にはまだだよ。
まぁ今回はたまたまこのままでも良いんだけど。

太郎くん
太郎くん

なんか必要な作業があるんだね。

フクさん
フクさん

「レイアウト」ってダブをクリックすると以下の画面になる。

CANdb++シグナルレイアウト
太郎くん
太郎くん

ん?
上の方だけ青いね?

フクさん
フクさん

さっき選択した「AcceleratorPedalPosition」シグナルが、
メッセージの0~15bitに割り当てられている状態を示している。
ちなみにマウスでドラックして移動できたりする。

太郎くん
太郎くん

あ、ほんとだ。面白い。

フクさん
フクさん

今回は特に変更せずにこのままでOKだ。

太郎くん
太郎くん

前詰めって言ってたもんね。

ネットワークノードの定義

フクさん
フクさん

次はノードの定義だ。

太郎くん
太郎くん

これも左側のツリーにネットワークノードってのがあるから、
これに追加していく感じかな?

フクさん
フクさん

そうそう。

CANdb++ノード定義
太郎くん
太郎くん

これは名前を付けるだけなのかな?

太郎くん
太郎くん

あ!
Txメッセージってタブのところにさっき定義したメッセージを割り当てるんだね?

フクさん
フクさん

大体分かってきたみたいだね。

太郎くん
太郎くん

うん。
ノードにメッセージがぶら下がって、
メッセージにシグナルがぶら下がるイメージだね。

フクさん
フクさん

その通り。
今回は分かり易いように下の階層から定義していったけど、
慣れてくると上の階層から定義した方が早いと思う。

太郎くん
太郎くん

これは前回フクさんが書いた絵をそのまま定義している感じなのか。
ということは、先に概要レベルでも絵を描いておいたほうが混乱しなくて済みそうだね。

フクさん
フクさん

そうだね。
CANdb++の編集状態だと各ノードの位置関係や依存関係が見えにくいことがあるんで、
概念図があった方がミスしなくて良いよ。

太郎くん
太郎くん

これで、大体OKな感じ?

フクさん
フクさん

dbcファイルの作成はね。

太郎くん
太郎くん

ということはまだあるのか。

フクさん
フクさん

次回はこのdbcを使ってCANoe上にネットワークを構築する。

太郎くん
太郎くん

あー、それはなんか面白そう。

まとめ

フクさん
フクさん

まとめだよ。

  • CANoeでネットワーク構造を定義するにはdbcファイルを作成する必要がある。
    • dbcファイルはCANdb++で作成。
  • ネットワーク定義はノード、メッセージ、シグナルの階層構造になる。
    • ノードにメッセージをぶら下げる。
    • メッセージにシグナルをぶら下げる。

バックナンバーはこちら

コメント

タイトルとURLをコピーしました