バックナンバーはこちら
https://www.simulationroom999.com/blog/model-based-of-minimum-backnumber/
はじめに
前回、ACG(AutoCodeGenerator:自動コード生成)を実施し、そのコードを委託先へサンプルコードという位置づけで送付。
そろそろ成果物として上がってくるが・・・。
登場人物
博識フクロウのフクさん

イラスト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
ACGを元にした成果物

一応、PIDとフィルタのCコードが仕上がったみたいだよ。

結構早かったね。

でも、
本当にこれが良いか僕も委託先の方々も判断が付かなくてちょっと困ってるんだよね。

まぁ、そうだろうね。
というよりも、
そこに疑問を持てることは良いことだよ。

おー。なんか普通に褒められた!

で、
なんか策があるようなこと言ってたけど。

うん。
SimulinkのS-Functionという機能を利用したSILS(Software In the Loop System)をやってみようと思う。

S-Function?

説明をMathworks社Webサイトから抜粋してきた。
S-Function は MATLAB、C、C++ または Fortran で記述された Simulink ブロックをコンピューター言語で記述したものです。
C、C++、および Fortran S-Function は、mex ユーティリティを使用して MEX ファイルとしてコンパイルされます。
Mathworks社Webサイトより抜粋

????

簡単に言うと、Cコードの関数をSimulinkのブロックとして配置できるってイメージ。
絵で描くとこんなん。


Simulinkブロックの中に
S-Function Builderってのがあるんで、
これを使うと簡単にできるよ。

おー。
ソースコードとヘッダファイルを指定してあげれば良い感じだね。

ちゃんとコンパイルが通れば、
Simulinkのブロックとして動作する。
PIDをS-Function

S-Functionができところでブロックを差し替える。


そして、シミュレーションしてみる。


おー。バッチリなんじゃない?

まぁ、
精査は必要だとは思うが、
とりあえずはOKってところだね。
シグマフィルタのS-Function

次はシグマフィルタだね。
こっちは、元のSimulinkモデルと比較できるよう重ね合わせを想定しておこう。


そして結果。


こっちもバッチリだね。

特性も実際の出力結果も同一だし、
大丈夫と言えるだろう。

手間とかは大してかかってないけど、
なんかすごいことしたような気分になる。

実際すごいことだと思うよ。
これをモデルベース開発の概念無しでやろうと思ったら、
毎回実車で確認することになるから、結構時間が掛かるし、
場合によっては危険なことにもなるかもしれない。

確かにそうだね。
モデルベース開発ってのは、
楽をするための物なんだね。

その発想はとても良い。
「モデルベース開発はすごいもの」というよりも、
「いままで大変だったものが楽になるもの」と捉えた方が現実に即していると思うよ。

うーん。
いろいろと目から鱗だった。
まとめ

まとめだよ。
- CコードをS-Function化することでSimuklinkブロックとして扱えるようになる。
- MILSの一部を差し替えても同様の動きになるかを確認できる。
- 元のSimulinkモデルと同一の入力にして出力を比較することで一致性確認ができる。
バックナンバーはこちら
コメント