Matlabユザコミュニティ

MATLAB & 万博1manbetxSimulinkユ,ザ,コミュニティ,向け日本語ブログ

万博1manbetxSimulink Testによるテスト駆動モデリングのすすめ

本日は,いまや”仿万博1manbetx真软件の中の人“として爆発的な人気を誇る古原さんより仿真软件测试についての記事です。ハンズオン形式なので皆さんも一緒に手を動かしながら読んでみてください。


こんには。toshi | 万博1manbetxSimulinkの中の人です。

皆さん,万博1manbetxSimulinkでモデルを作ってますでしょうか?最近はTwitterやYouTubeなどで仿真软件の万博1manbetx便利機能をたくさん紹介しているのですが,今回はその中でも,間違いなく業務効率と成果物品質の向上に繋がる,とっておきのテクニックを紹介したいと思います。

このテクニックを身に着けた時,あなたはS万博1manbetximulinkの真の価値を理解できるようになります

目次

1.万博1manbetxSimulink Testとテストハ,ネス
2.準備
3.テスト駆動モデリングを体験
3.1.テストハ,ネスをサブシステムに対して作成する
3.2.実行しながら作る
3.3.ブロックの機能を調べる
3.4.機能を完成させる
4.まとめ

1.万博1manbetxSimulink Testとテストハ,ネス

万博1manbetx仿真软件测试とは,万博1manbetx仿真软件を使って構築したモデルをテストする際に,その業務を効率化するツールボックスになります。

万博1manbetx仿真软件测试にはたくさんの機能がありますが,その中でも今回は“テストハーネス”という機能を紹介します。テストハーネスは,モデルやサブシステムに対して“テストを行うための独立したモデルファイル”を作り,それを管理する機能になります。

万博1manbetx仿真软件测试は,残念ながら家里ライセンスには入っておらず,主に企業の量産開発部署で使われており情報が表に出にくい(?)ため,ご存知ない方も多いのではないでしょうか。実はこの仿万博1manbetx真软件测试は、Stateflow Simscapeと並ぶ,仿真软件に必須の汎用機能拡張ツールなのです。

テストハーネスを使うと,万博1manbetx仿真软件モデルを部分ごとに独立して実行することができるようになります。それにより,ちょっと作っては実行して確認し,修正しては実行して確認し,を繰り返して機能を構築していくことができます。このモデリング手法をここでは“テスト駆動モデリング”と呼んでいます(私の造語です)。

これの威力は,体感した人でないと分からないと思いますので,今回は,そのワークフローを初心者の方にも分かりやすく,事例を交えて紹介します。

2.準備

今回はせっかくなので,皆さんにも手を動かして体験していただこうと思い,コンテンを用意しています。ただし,体験していただくためには以下のルボックスが必要になります。ルボックスがない,もしくは読むだけでいいよ,という人は,3.テスト駆動モデリングを体験に飛んでくださって大丈夫です。

バ,ジョン:R2022a .

必要なルボックス:MATLAB、Sim万博1manbetxulink、Stateflow、Simscape、Simscape多体、控制系统工具箱、模型预测控制工具箱、Simulink测试

2.1.カスタムタブをダウンロ,ドして有効化

GitHubにある,カスタムタブを用いたS万博1manbetximulinkのモデリング業務効率向上というデモモデルをクロ,ン,もしくはダウンロ,ドしてください。

ReadMeに書かれている指示に従って,カスタムタブを有効化してください。万博1manbetxSimulinkモデルを開いた時に" ACCEL "というタブが表示されていればOKです。

2.2.“オンラaapl . exeン推定モデルを利用した適応mpcの設計”をダウンロ,ドして開く

GitHubにある,オンラesc escの設計というデモモデルをクロ,ン,もしくはダウンロ,ドしてください。

" rls_mpc_ball_control.prj "をダブルクリックしてプロジェクトを起動します。その後,自動的に開かれる“RLS_MPC_index.mlxにて,“適応MPCによる軌道追従制御”をクリックします。

開いた" design_trajectory y_control_mpc。mlx "の14行目をコメントアウトします(Ctrl + Rでコメントアウトできます)。

その後,ラ。途中,力学Explorerが開いてボールがくるくるしていると思いますが,終わるまで待ちます。

実行完了後,“BallAndPlate_AMPC_Controller.slx”を開きます。以下のように2行目の文字を右クリックし,”“~ ~”を開く”をクリックすると素早く開くことができます。

最後に,“RLS_offset_free”というサブシステムを削除します。

この状態でモデルを保存しておいてください。

3.テスト駆動モデリングを体験

今,台の上に乗ったボールのXY位置制御を,モデル予測制御(MPC)で設計し,万博1manbetx仿真软件モデルに実装しています。円を描く軌道を指令値として与え,それに追従させようとしています。ところが,以下のプロットのように,指令値に対してオフセットが生じています。

pos“ここではボールの位置(制御量),“ref”は指令値,“角”はMPCが出力する操作量です。一番上の波形はxyプロットになります。

ではここから,このオフセットを除去する処理を構築しようと思います。“pos”は“ref”に比例して増減することが分かっていますので,“ref”を追加で増減させることによって“pos”を“ref”に一致させることができると考えられます。作ろうとしている機能はざっくり言って以下のような感じです。

3.1.テストハ,ネスをサブシステムに対して作成する

では早速作っていきましょう。“BallAndPlate_AMPC_Controller.slxに以下のようにサブシステムを追加し,ポートを作成し,繋ぎます。名前を" offset_free "と付けました。

ところで,この状態ではこのoffset_freeサブシステムを動作確認する際に,モデル全体を実行しないといけないですよね。2.準備を行った方は分かると思いますが,モデル全体の実行にはそれなりに時間がかかります。動作を確かめるために何度も実行したくないですよね?そうであれば,取る手段は以下のどらかです。

  1. モデルを実行せずに機能を最後まで作りきる。その後実行して確かめる。
  2. offset_freeサブシステムを別ファイルに持っていき,そこで適当な入力を入れて実行できるようにして作る。

1番はとても良くないです。作りきった後に実行して,何かの間違いに気づいても,修正箇所の特定に時間がかかることがよくあります。2番は良いのですが,いいテスト用の環境を作るのが手間ですね。多くの人が億劫になって避けてしまうことだと思います。そこでS万博1manbetximulink Testの出番です。テストハ,ネスを使えば,この2番で行う定型作業を極限にまで少なくできるのです。そのための拡張ルとして,カスタムタブを導入しましたので,それを駆使して進めましょう。

offset_freeサブシステムを選択し,ACCELタブをクリックし,“作成/開く”をクリックします。

これにより,自動的にテストハ,ネスが作成されます。

このテストハーネスは,元のモデルとは独立したモデルファイルになっており,対象のサブシステムにテスト信号を入力して実行するためのインターフェースを備えています。テストハネスは元のモデルファルの中に保存されており,消さない限り残り続けます。テストハ,ネス上で対象のサブシステムの内部を変更すると,元のモデルの方にも自動的に反映されます。

では,このテストハ,ネスを使ってモデルを作ってみましょう。以降は,全部の作業を説明すると長くなりますので,ポesc escントを絞って解説していきます。

3.2.実行しながら作る

指令値と制御量の差分を計算する機能を作ります。それぞれxy位置のベクトルであるため,ベクトル同士の大きさの差を取ります。”点积”ブロックを使うと内積を計算できるので,以下のようにしました。

この時点で,正しく計算できているかを確認します。上の階層(offset_free_harness)に戻り,テスト用の入力信号を入れてみます。

 ということで、合ってますね。

3.3.ブロックの機能を調べる

続けてモデリングをしていきます。次にこの差分を積分したいと思っています。この時“离散时间积分器”というブロックが使えそうです。ここでふと“このブロックは本当に思った通り動いてくれるのだろうか”と思ったことはないでしょうか?私は仿万博1manbetx真软件マスターなので,もちろん“离散时间积分器”の特性は熟知しているのですが,皆さんの中には初めての人もいると思います。そんな時にもテストハ,ネスを使いましょう。

R2022a時点では,テストハーネスは1個のブロックに対して作成することはできないので,カスタムタブのスクリプトにある細工をしておきました。以下のようにブロックに対して"作成/開く"をクリックすると,

参照サブシステムを介してテストハ,ネスを作成します。

少し解説します。1個のブロックに対してはテストハーネスを作れないため、そのブロックだけを含むサブシステムを作成し、それを参照サブシステムにより別ファイルに分けた上で、テストハーネスを作りました。

ややこしくて申し訳ないですが,こうした方が安全ですので,そうしています。このファ@ @ル同士の関係性が分からなくても大丈夫です。“Discrete_Time_Integrator__s_harness.slxにて,ブロックの動作を確認し,終わったらウィンドウを閉じるだけでよいです。

確認し終わったら,もうこのテストハ,ネスはいらないと思います。元のモデルに戻り”Discrete_Time_Integrator__s“参照サブシステムを削除して,离散时间积分器ブロックに戻します。この時,クリック一で戻せるようにカスタムタブのボタンを用意しておきました。以下のようにしてみてください。

ただし,現在のフォルダーに“Discrete_Time_Integrator__s.slxという参照サブシステムファイルは残っています。残っていても問題はありませんが,気になる場合は削除しておいてください。

3.4.機能を完成させる

続けてモデリングし,機能を完成させます。最終的には以下のようにします。

実はrefは,予測ホライズンと同じ長さの,30ステップ分の2次元ベクトルがまとめて入力されるので,実際は2×30の行列になっています。差分を計算するのはref行列の中の(1,1),(2,1)要素のみとして,かつ得られた調整量はrefの全体にかけるようにします。上記を作成する際には,是非"作っては実行"を心掛けてみてください。少しでも不安を感じたらすぐに実行して確認,です。

(" offset_free_I_gain "はデフォルトでは0になっているので注意してください.)

問題ないことを確認したら,モデルを保存し,テストハ,ネスを閉じます。”offset_free_I_gain“を0.01に設定し,最上位階層の”BallAndPlate_system.slx”を実行すると,以下のようになりました。

平均的にはオフセットを取り除くことができています。

4.まとめ

いかがでしょうか。皆さんはこれまで,ブロック1個単位や,1箇所の設定変更に対して,すぐに動かして試して,というモデリングをあまりやっていなかったのではないでしょうか。やろうと思っても,新しくモデルを作成したりする作業が億劫でやらなかった,というケースもあったと思います。

しかし,万博1manbetxSimulink Testがあれば状況は一変します。どんな細かい動作確認も,テストハ,ネスを使えばすぐにできます。皆さんの実業務でも是非お試しください。やってみると,このテスト駆動モデリングが如何に効率的であるかが分かると思います。

また,今回説明していませんでしたが,きちんとテストシナリオを作っておくと,テストマネージャーというアプリを使って管理できます。そうすると,モデルの変更があった時,問題が無いか確認するために,一括で自動実行と結果の合否判定ができるようになります。

ちなみに,コードベースの開発における“テスト駆動開発”と,考え方は同じですので,そう呼んでも良いのですが,ソフトウェアの領域に留まらない,また仿万博1manbetx真软件ならではの技法ですので,敢えて別の呼び方をさせていただきました。

最後に,最近アップロードしています,モデリングの参考になるテクニック動画集を以下に紹介させていただきます。

项目による継続的なチ,ム開発の実現

万博1manbetxSimulink開発の必須テクニック~テスト駆動開発とグラフィカル表現~

万博1manbetxSimulinkで開発を行うための必須テクニック~エディタ便利機能とショ,トカット~

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。