MBDプロセス研修
Part1:MBD概論
説明を聞けば,なんとなくは理解できるものの,自分はできるのか若干半信半疑状態です。世界的にみて,MBD がどれだけの開発手戻りや予算の削減に
つながっているのかを含めて,インパクトを知りたいです。
MBDの効果は,実際に導入した企業の事例と学術研究の双方で報告されています。以下,その一例を示します。
・DENSO(日本/自動車・モーター制御)
補機モーターの制御開発にSystem ComposerとSimulinkを用い,コア部とカスタム部を分けてモデル化。工数を3分の1に削減(1)。
・CSIR-NAL(インド/航空宇宙・組込み制御)
MathWorks 公開事例。フライト制御ソフトウェアをSimulinkとEmbedded Coderで開発し,従来の手書きコード比で機能追加工数75%減・解析時間
48%減・設計時間50%減(2)。
・ボンバルディア・トランスポーテーション(現アルストム,カナダ/鉄道・モーター制御)
鉄道車両の推進制御システムをModel-Based Designで開発し,設計・実装・テストの反復を削減。コストを45%,リードタイムを35%削減(3)。
・ダイキン工業(日本/空調機・インバータモータ制御)
エアコンのモータ制御にSimulinkとStateflowを用いてモデル化し,Embedded Coderで量産コードを生成。MAABガイドライン準拠でROM/RAM
使用率を約40%削減(4)。
いずれも,本研修で扱うSimulinkベースのモデル化・検証の延長線上にある取り組みです。こうした削減は,主に不具合を見つける工程の早さから生じ
ます。IEEE Computer 誌に掲載されたBoehm&Basiliの分析では,要求定義・設計段階に比べ,リリース後に見つかった不具合の修正は100倍近いコス
トになることが多いと報告されています(5)。MBDは早期のシミュレーションと検証によって,後工程に持ち越す不具合を減らします。
ご自身で扱えるかという点については,個々のコンポーネントの振る舞いを方程式として正しく記述し,それらを組み合わせて全体の挙動を再現するとい
う地道な作業が必要です。本研修ではタンクモデルやRC回路のような小さな例題から始め,因果・非因果モデリングや代数ループの扱いを一つずつ練習
していきます。慣れるまでは少し大変ですが,一つずつ積み重ねていくことが,ここでご紹介したような成果につながる土台になります。
(1) MathWorks. DENSO Builds System Architecture Model for Auxiliary Motor.
https://www.mathworks.com/company/user_stories/denso-builds-system-architecture-model-for-auxiliary-motor-to-accelerate-control-design-and-verification.html
(2) MathWorks. National Aerospace Laboratories Proves Benefits of Model-Based Design for DO-178B.
https://www.mathworks.com/company/user_stories/national-aerospace-laboratories-proves-benefits-of-model-based-design-for-do-178b-flight-software-development.html
(3) MathWorks. Bombardier Transportation Implements Model-Based Design to Accelerate Rail Propulsion System Development.
https://www.mathworks.com/company/user_stories/bombardier-transportation-implements-model-based-design-to-accelerate-rail-propulsion-system-development.html
(4) MathWorks. Daikin Increases Development Efficiency Using Production Code Generation for Air Conditioner Controls.
https://www.mathworks.com/company/user_stories/enhancing-efficiency-and-sustainability-in-hvac-systems.html
(5) Boehm, B., Basili, V. Software Defect Reduction Top 10 List. IEEE Computer, 34(1), 135–137, 2001.
https://www.cs.umd.edu/projects/SoftEng/ESEG/papers/82.78.pdf
Part2:MATLAB/ Simulink の基本操作
part2の内容とは少し離れるのですが、mファイルとmatファイルの違いを教えていただきたいです。
具体的には、できることの違いとどういった場面で使用するのかが知りたいです。

Simulinkのシミュレーション作成でsin関数が出てきません。(バージョン:2016b)
下記に示す「Simulink>Math Operations>Trigonometric Function」ブロックを用いると動画と同じ波形が得られます。

少し細かい質問かもしれません。
ファイル名が同じ時の実行エラーですが、スクリプト側15行目の呼び出しファイル名とファイルパネルで変更したファイル名が一致していませんでした。
これは、スクリプト側に記載したファイル名がフォルダに存在しないことによる参照エラーよりもMATLAB/Simulinkのファイル名が同じことによるエラーの方が優先的されているのでしょうか。
ご質問頂いた通り,「MATLAB/Simulinkのファイル名が同じことによるエラー」が優先されます。理由としては,①mファイルを実行,②1行目から順番に実行 となるためです。ご質問頂いた場合は①の段階でエラーとなります。
Part3:プラントモデリングの基礎
タンクでは流量を入力として扱っているのに,RC回路では電圧を入力として扱うのはなぜでしょうか。電流を入力にすることはできないのでしょうか。
結論から申し上げますと,入力は「外部からどの量を強制するか」によって決まるものであり,電流を入力とするモデルも記述できます。

因果モデルと非因果モデルは何が違うのでしょうか。

因果モデリングツールではできなくて,非因果モデリングツールでできることは何ですか?

例題4として車輪の回転モデルが出てきたのでお聞きします。将来的には,自転車のふらつきのような挙動を3Dモデルで解析してみたいと考えています。このような単純な回転モデルから3Dマルチボディモデルへ発展させる場合,どのような簡略モデルを段階的に構築しながら理解を深めていくのが一般的でしょうか。3Dシミュレーションに至るまでの一般的なロードマップも教えてください。
結論から申し上げますと,3Dモデルにいきなり挑戦する必要はありません。「いま見たい現象に必要な分だけ,モデルを少しずつ育てていく」のが一般的な進め方です。
例題4の車輪モデルは,「車輪がトルクを受けるとどう回り出し,どう落ち着くか」だけを見る,いちばん基本のモデルです。

自転車のふらつきは,これに「前に進む」「曲がる」「左右に傾く」「ハンドルを切る」「タイヤが路面をつかむ」といった動き
が重なって生じる現象です。一度に全部を扱うと複雑すぎるため,次のように動きを1つずつ足していきます。
①まず例題4のように,車輪が回る様子だけを見ます。
②次に「回る」と「進む」をつなぎます。タイヤが滑らなければ,車輪の回転から自転車の速さが次の簡単な関係で決まります。

③上から見た動き(曲がる)を加えます。ハンドルを切ると進む向きがどう変わるか,を平面の中で扱います。
④左右の傾き(ロール)を加えます。ここまで来ると,「傾く→ハンドルで立て直す→速く走るほど安定する」という,自
転車らしいふらつきが見え始めます。
⑤車体・前輪・後輪・乗る人を別々の部品として組み合わせます(簡略マルチボディモデル)。部品どうしのつなぎ方と,タイ
ヤと路面の接し方がポイントになります。
⑥最後にSimscape Multibody などで3D化し,接触・重力・タイヤ特性を加えて仕上げます。
大切なのは,各段階で「何が見たいのか」をはっきりさせ,それに必要な要素だけを足していくことです。例題4の車輪モデ
ルは,この道のりの確かな第一歩と位置づけていただければと思います。
積分に1/s を使うことが多かったですが,1/s が十分なのかどうかの判断基準を知りたいです。センサやモータの応答をシンプルにモデリングするのに1/s で十分なのかと思いました。単純にモデリングするのに1/s をよく使う認識でよろしいでしょうか?
結論から言うと,「単純化のために1/sをよく使う」という認識は少し修正が必要です。1/sは,過渡応答を表現するための蓄積要素(積分要素)です。右図(本研修テキストPart3 スライド3-23)のように,多くの物理システムは,この積分要素に加えて自身の出力を負帰還する構造を持ちます。1/s単体では一定入力に対して出力が際限なく増加してしまうのに対し,負帰還を加えることで,定常値に収束する現実的な過渡応答,すなわち一次遅れの標準形(ゲインK,時定数T)が得られます(本研修テキストPart3スライド3-81)。

Part4:DCモータ制御システムのMBD
ADCのモデリングにて「floor」のブロックを使用していますが,検索をかけても見当たりません。バージョ
ンは2016aですが,別の手段はありますか?
テキストで「floor」と表示されているブロックは,実際には「RoundingFunction」(Simulink/MathOperations)
です。Rounding Function ブロックはアイコンに選択した関数名が表示されるため,2016a では「floor」と
いう名前で検索しても見つかりません。ただし検索の挙動はバージョンによって異なり,R2025bなど新し
いバージョンでは「floor」でもヒットする場合があります。
下図のように,Rounding Function ブロックを呼び出し,パラメーターの「関数」でfloor を選択すること
でご利用いただけます。2016a でも同様にご利用いただけます。

バージョン2016aを使用しているんですが,HILSの準備の中で「ハードウェアのタブ」が増えるとのこと
ですが,テキストとバージョン画面が違いすぎて理解できません。どこにあるのか教えてください。
「ハードウェアのタブ」はR2019b以降で追加された画面(ツールストリップ)で,2016aにはこのタブ自体
がありません。そのため,2016aでは下記の通り「エクスターナル」の選択で同じ操作を行います。
2016a:赤点線枠の箇所 →「エクスターナル」を選択→「実行」
2023a:(1)「ハードウェア」タブ → 赤枠の「監視と調整」をクリック

PID制御の実装の中で,RateTransitionブロックで定数目標値のサンプル時間を揃えるくだりがありました。
これについて質問です。
1 連続的に変化する値のサンプルが粗いと確かに計算結果がおかしくなったりしそうですが,定数であ
れば問題ないように思います。サンプル時間の管理はどこまで力を入れないといけないのでしょうか。
2 今回のケースに限らずですが,サンプル時間を揃えなかった場合に計算に及ぶ可能性のある悪影響の
例をご教示お願いします。
【1】
一定の信号であっても,Simulinkでは予期せぬエラーを防ぐという意味でも,サンプリング時間を統一す
ることを推奨いたします。また,Simulink作成当初は「一定値信号」を想定していたとしても,開発が進ん
だ場合に「連続的に変化する信号」を取り扱う可能性もあるため,サンプリング時間の統一を推奨いたし
ます。
【2】
サンプル時間を揃えなかった場合の悪影響は以下が考えられます。
・Simulinkでの警告やエラーが発生します。
・偏差e(t) =r(t)−y(t) の計算時に r(t) と y(t) のサンプル時刻がずれると,本来は同時刻の値どうしを引
き算すべきところ,「更新前の値」と「更新後の値」が引き算されてしまいます。その結果,一瞬だけ偏
差が本来より大きくなり,制御出力にスパイク状の乱れが生じることがあります。
・MILSでの検証結果と実機(HILS・実機検証)の挙動に差異が生じます。
・低速な信号を高速なタスクへ渡す際に暗黙のレート変換が入ると,既定設定(決定論的データ転送)では
低速側1周期分の遅れが生じます。この遅れが,応答の遅れやオーバーシュートの増加につながることが
あります。