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

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

バックナンバーはこちら
https://www.simulationroom999.com/blog/model-based-of-minimum-backnumber/

はじめに

前回はほぼ導入的な話で終了。
今回はもうちょっとだけ踏み込んだ話になる予定。

登場人物

博識フクロウのフクさん

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

おおよその流れ

フクさん
フクさん

まず、おおよその作業の流れを考えるか。

太郎くん
太郎くん

何が欲しいとかある?
ある程度は用意してくれるっぽいよ?

フクさん
フクさん

まずは

元々のラピッドコントローラで使ってるSimulinkモデルがあるなら、
丸ごと欲しいかな。

太郎くん
太郎くん

Simulinkモデルらしいんだけど、
インターフェースとかは専用の作りになっててそのままじゃ移植できないようなこと言ってたよ。

フクさん
フクさん

そのままじゃ無理だけど、
主要部分だけうまく抜き取って再利用したいだけ。
念のため、Simulinkモデル単体で動作確認はするけどね。

太郎くん
太郎くん

じゃー、手配してもらうよ。

フクさん
フクさん

あとはネットワークMILSの回で話した流れと一緒かな。
絵で描くとこんなイメージ。

MicroAutoBoxⅡ、元々これで動作していた、Simulink、振る舞いを精査、CANoe、VN1630A、CAN1、CAN2、ECU
太郎くん
太郎くん

あれ?
ラピッドコントローラはMicroAutoBoxって知ってたの?

フクさん
フクさん

いんや。
でも業界的に選択肢が限られるし、

普通はdSPCASE社のMicroAutoBox使うと思うよ。
というかMicroAutoBoxで実現できてるだったら、

下手なことしないでMicroAutoBoxで運用すればいいのに。

MicroAutoBox II
リアルタイムハードウェア、入出力、およびシグナルコンディショニングを備えた小型スタンドアロンプロトタイピングシステム
太郎くん
太郎くん

まぁ費用対効果の兼ね合いでいろいろあるんじゃない?

フクさん
フクさん

おー、

まさか太郎くんの口から

「費用対効果」

なんて単語がでるなんて!

太郎くん
太郎くん

バカにしてるのか?!

フクさん
フクさん

一応、褒めてるし感心もしたよ。

太郎くん
太郎くん

(うーん、釈然としない。しかも「一応」とか言ってるし)

Simulinkモデルの確認

太郎くん
太郎くん

一応、

MicroAutoBoxで使用していたSimulinkモデルをもらってきたよ。

フクさん
フクさん

うーん、
入出力から追ってくと、ここら辺が主要ロジックかな。

太郎くん
太郎くん

おー。もう特定したの?

フクさん
フクさん

うん。
たぶん合ってる。
どうやら主要ロジックはMATLAB Functionで実現してるっぽいな。

MATLAB Function ブロックを使用すると、使用する MATLAB関数を Simulinkモデルで作成できます。作成した MATLAB 関数は、シミュレーションのために実行されて、Simulink Coderターゲット用のコードを生成します。

MathWorksウェブサイトより
太郎くん
太郎くん

MATLAB Function?
どういったもの?

フクさん
フクさん

Simulink上でMATLAB用スクリプト実行するためのブロック。
以前、S-Funcionってブロックを使ったと思うんだけど、
あれの親戚か兄弟的なブロックだね。

太郎くん
太郎くん

S-FuncionはCコードをMEXというライブラリにしてSimulinkブロックにしたものだっけ?
それのMATLABスクリプト版ってことだね。

フクさん
フクさん

MATLAB Functionの場合はMEXにはしないけどね。
シフトのようにスイッチ的なものは積分、微分のような処理が入らない場合分け的な処理になるんで、

それをMATLABスクリプトで表現したのだろう。

太郎くん
太郎くん

あー、

確かにSimulinkで場合分けしようとすると、
スイッチブロックとかif-actionブロックとかでむしろ読みにくくなることあるよね。
だったら、もうスクリプトの方が良いじゃん!って思ったことはあるよ。

フクさん
フクさん

あとはStateFlowを使う場合もあるけど、

ここでは特に追及しないでおこう。

太郎くん
太郎くん

で、中の振る舞いとかは追えそう?

フクさん
フクさん

うーん。
・・・。
・・・。
・・・。

フクさん
フクさん

!!?

フクさん
フクさん

・・・。

フクさん
フクさん

ふむ。

今回はあえて中は見ない。

太郎くん
太郎くん

そんなカオスなコードだったの?

フクさん
フクさん

(うん)
い、いや。意図的にブラックボックスとしてやってみるのも大事かなって。(震え声)

太郎くん
太郎くん

(これは追及しない方が吉な感じだな)

フクさん
フクさん

とりあえず、
Simulinkモデルの方はうまく抜き出しておくから、

次回に振る舞いを確認かな。

太郎くん
太郎くん

(フクさん・・・ガンバ。)

まとめ

フクさん
フクさん

まとめだよ。

  • 正直言うとまずはMicroAutoBox使った方が良い。
    • すでに精度や性能の見積が出来ているのであれば、費用対効果を意識しだしても良い。
  • プログラマブルな振る舞いの場合、MATLAB Functionブロックを使用した方が楽な場合がある。
    • 可能であれば、StateFlowの利用も検討しておくと状態の見える化が出来て吉。

バックナンバーはこちら

コメント

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