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

事例

バックナンバーはこちら

スポンサーリンク

はじめに

前回はMicroAutoBoxで使用されているSimulinkモデルの主要ロジックだけを抜き出して単体テストをしてみた。
シミュレーションした結果、想定される振る舞いであった。
今回は、多回線出力の問題について取り扱う。

登場人物

博識フクロウのフクさん

イラスト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

ネットワークMILSと一緒?

太郎くん
太郎くん

前回からの流れで今回のやることを予想すると、
ネットワークMILSのシリーズでやったCANoeI/OブロックをつないでSimulinkDLLを作成するってことになるのかな?

フクさん
フクさん

いいね。
まさしくその通り。

太郎くん
太郎くん

ん?
とすると今回はあんまり新しい話は出てこない感じ?

フクさん
フクさん

むしろSimulinkDLL作成については飛ばして、
例の多回線出力の対策の話がメインになる。
ちょっとややこしんで、

概念的な話で終わってしまうと思うけど。

多回線化の方法

太郎くん
太郎くん

あー、そういえばそうだった。
モデルの出力を2つのCANにそれぞれ\(10[ms]\)周期、\(100[ms]\)周期で出力するんだった。

太郎くん
太郎くん

でも、これって、

CANoeI/OのSignal Outputブロックを二つ繋げばOKとか言ってなかったっけ?

フクさん
フクさん

うん。それでも良いよ。

太郎くん
太郎くん

”それでも”ってことは別の方法があるの?

フクさん
フクさん

うん。
CANoe自体にCANのシグナル定義とは別にシステム変数というものを独自に定義できるんだ。
システム変数自体は特にどこかに出力されるわけではないのだけど、
CANoe内でプログラミングするCAPLという言語で読み書きができる

太郎くん
太郎くん

あー、CAPLはネットワークMILSの時にも話には出たね。
テスト自動化する時に利用すると良いとかなんとか。

フクさん
フクさん

うん。
テスト自動化以外に、

今回のようなちょっとした信号の伝達の調整に使用することも多い。

太郎くん
太郎くん

なんとなくわかってきたぞ!
バッファとしてシステム変数を定義して、
SimulinkDLLからシステム変数に一旦出力。
それをCAPLで読み出して、それぞれの回線のシグナルにコピーする感じか!

フクさん
フクさん

正解。

一つのノードに二つのインターフェース

フクさん
フクさん

ここで一つ問題がある。

太郎くん
太郎くん

どんな?

フクさん
フクさん

SimulinkDLLはCANoe上で定義したノードと一対になる。
ノードは回線毎に定義される。
普通にやると1ノードが複数の回線を制御することはできない。

太郎くん
太郎くん

え?じゃあ2回線出力ができないんじゃない?

フクさん
フクさん

そこでゲートウェイノードというのを設置する。

太郎くん
太郎くん

ほう?

フクさん
フクさん

まぁそんなに難しい話では無く、
dbcで回線毎のノード定義をする際に、ノード名を同一にしておけば、自動的にゲートウェイノードとして認識される。
以下の感じになる。

太郎くん
太郎くん

ということは、
このゲートウェイノードってのは複数の回線のシグナルにアクセスできると思って良い?

フクさん
フクさん

うん。
よって、SimulinkDLLを割り当てるならば、このゲートウェイノードに割り当てると良い。
ちなみにCAPLもノード毎定義なんで、このゲートウェイノードに信号分配用のCAPLを割り当てることになる。

太郎くん
太郎くん

このノードって概念はややこしいねぇ。
便利な概念なんだろうけど、
どうしても物理的な回線ベースで考えちゃうんで、頭がこんがらがってしまいそう。

フクさん
フクさん

具体的な回線に対して、抽象的なものだからね。
こればっかりは慣れるしかないね。

まとめ

フクさん
フクさん

まとめだよ。

  • SimulinkDLLの出力を2つのシグナルに渡すには2つの手法がある。
    • Signal Outputブロックを2つ使用。
      システム変数に書き込んでからCAPLで各シグナルへ分配。
  • 複数の回線のシグナルを扱うにはゲートウェイノードを定義する必要がある。
    • SimulinkDLL、CAPLのどっちを使うにしても同様の対応が必要。

バックナンバーはこちら

コメント

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