MBDプロセス研修
目次
Part1 MATLAB/Simulinkによるモデル構築
コンフィギュレーションパラメーターの位置が動画と私が使っているソフトで異なっている。
本件,テキストのバージョンが古く,ご迷惑をおかけしてしまい申し訳ありません.すでにご確認をいただいていると思いますが,MATLABおよびSimulinkのインターフェースが変わったことにより,モデルコンフィギュレーションパラメータの位置が以下のように変更になっております.
コンフィギュレーションパラメータクリック後の設定方法については,これまでと変更ありませんので,恐れ入りますが適宜ご対応をいただけますと幸いです.

好みのグラフ、背景、色、線、などのセットを保存して、次に読み込むことはできますか?
「Scope の変更した色・線種などのをデフォルトの設定として使用する方法」として回答します。
Simulink の Library にあるパーツを変更することは、可能ですが問題が発生したときに対処が難しくなるのでお勧めできません。
一方、本講義で説明する MBD の活用法の一つに、作成したパーツ(block)は再利用できるようにしておく、があります。
この実現方法として、パーツをライブラリ化し、Simulink Library から参照できる方法を示しています。
テキスト P.124(スライド 3-18)、あるいは、講義ビデオの「Part3_02_01_DCモータディスクモデルの作成とカスタムライブラリへの登録1」で
す。この自作ライブラリに、変更した Scope を置くことで再利用できます。
MATLAB/Simulinkは同じワークスペースを介しているということでしたが、これもMATLABで実行(信号発信)したものがワークスペースで拾われ、何らかの形に変換され出力し、Simulinkに入り、モデルに従って値(図)が出力されるイメージでしょうか?
今回の研修においては「信号 = 時間的に変動する値」ととらえていただくとよいと思います。 ワークスペースの変数は原則として時間的に変動しない固定のパラメータです。えば,Part2で説明するタンクモデルにおいて,流入/流出流量,液位などは時間的に変動する信号,断面積Cや流量抵抗Rは時間的に変化しないパラメータです。そのため,ワークスペースは一種のパラメータマップととらえていただくとよいかもしれません。
実機に接続し制御する場合は、入出力インターフェースブロックを用いるという点以外に、ブロック線図に追加要素や変更点はありますか?
ターゲットハードウェアに応じて書き込み設定などが必要になります。これらの設定は基本的に「コンフィギュレーションパラメータ」の設定画面で行います。
今回は,Arduinoと呼ばれるマイコンボードを対象にSimulinkモデルの書き込みを行います。詳細についてはPart 4でご説明をさせていただきます。なお,書き込みの手順についてはターゲットとなるハードウェアによって異なりますので,詳細についてはハードウェアメーカ等のマニュアルをご参照ください。

私がイメージしていたようなmファイルで書いたものをSimulinkブロックとして自動的に描き出すことはできないようですがMATLAB/Simulinkそれぞれの長所を活かして効率的にモデル構築からシミュレーションまでを完了するということでしょうか?
mファイルを自動でSimulinkブロックとして書き出すことは難しいですが,MATLABコードで動作が記述されたMATLAB Functionブロックを定義することができます。ブロックの動作についての可視性は悪くなりますが,ご自身で書かれたMatlabコードによるアルゴリズムをSimulinkブロックとして実装できます。
変数をMATLABで連続的に変える方法が知りたいです。
Simulink動作中にMATLABから変数を変えることは原則としてできません。
ただし,From WorkspaceブロックやRepeating SequenceブロックなどはMATLABで定義されたベクトルに基づいて信号を連続変化する信号として出力ができます。

MATLAB/Simulinkは同じワークスペースを介しているということでしたが、これもMATLABで実行(信号発信)したものがワークスペースで拾われ、何らかの形に変換され出力し、Simulinkに入り、モデルに従って値(図)が出力されるイメージでしょうか?
今回の研修においては「信号 = 時間的に変動する値」ととらえていただくとよいと思います。ワークスペースの変数は原則として時間的に変動しない固定のパラメータです。例えば,Part2で説明するタンクモデルにおいて,流入/流出流量,液位などは時間的に変動する信号,断面積Cや流量抵抗Rは時間的に変化しないパラメータです。そのため,ワークスペースは一種のパラメータマップととらえていただくとよいかもしれません。
変数に関してはSimulinkにKなどの変数設定を行い、MATLAB側で変更できるとのことでしたが、定数部分(Simulinkで置いたSineWaveやScopeの周波数など)はやはりSimulinkでブロックを置いて手打ちなのでしょうか?それともMATLABで定数部分も設定できたりするのでしょうか?
Sinwaveブロックなどに含まれるパラメータ(ブロックパラメータ)の多くは,変数で置き換えることができます。これらの具体的な値は,ワークスペースに同じ変数名が存在するとき,その変数に含まれる値がセットされます。
手打ちであった場合、気を付けておかないとmファイルとブロック内の値のズレが出てきてしまいそうに思いました。
基本的に,Simulinkブロック内のパラメータにおいて,変更の可能性があるものは,変数として一元管理(今回のケースですとmファイル)することをお勧めします。Simulinkのモデルおよびパラメータ管理は非常に重要で,Mathworksでも2日間にわたる講義(Simulink モデルの管理とアーキテクチャ)を実施しています。将来はこのようなトレーニングを受講されることをお勧めします。
ブロックパラメータの設定を変数にすることでmatlab上で一気に設定できることが分かった。
不明点として、様々な変数のパターンを試す場合、どのように保存されるのかが分からなかった。
matlab上の記述(1-30ページ)のシステムパラメータの設定からsimulinkの実行までをfor文で回せば、様々な変数のパターンで実行されると考えたが
①Scopeの設定でワークスペースにデータのログを作成では、for文が一回まわるごとにログが上書きされてしまわないのか。
②また、エクセルファイルなどに出力することが出来ないのか
上記の2点が分かりませんでした。
質問内容にあるように,for文を用いた方法で複数の変数の値における出力結果を観測することができます。
また,Simulinkでは変数のパラメータとしてベクトルをセットできるものがあります。
たとえば,複数の周波数(1Hz, 2Hz, 3Hz)における出力を観測したい場合以下の方法があります。
詳細な動作はサンプルを参照してください。
① for文を用いてシミュレーションを複数実行する方法(「1_複数回シミュレーションを行う場合」※)
② 周波数fをベクトル化し,1回のシミュレーションですべての結果を取得する方法(「2_1回のシミュレーションを行う場合」※)
ただし,シミュレーション内容によっては②がうまくいかないケースもありますが,これについてはシミュレーションの内容にも詳細についてはMathworksのサポートなどを利用してください。
なお,ファイル出力については,「3_ファイル出力の例※」およびテキストの1-49 ~ 1-51を参考にしてください。
※はサンプルフォルダ名です
システムゲイン[-]の[-]は何を表しているのでしょうか。

ソルバーオプションのタイプは、固定ステップの方が複数条件での結果比較、再現性の面で優れているのではないかと感じたのですが、基本的には固定ステップを使用すれば良いのでしょうか。また、可変ステップを用いた方が良さそうな場面があれば教えて頂きたく、宜しくお願い致します。
一概に固定ステップの方が良いとは言い難いがたいのですが,おっしゃるように可変ステップはSimulink内部で独自の計算が行われているために,検証においてはその再現性に不安が残る可能性があります。一方,時間的な変化が速い信号(高周波信号)を一部に含むシステムのシミュレーションを行う場合,固定ステップでは,これらの変化の速い信号に合わせてサンプル時間を決定する必要があるため,必然的に計算コストが上がってしまうデメリットがあります。システムの応答速度(特に高周波の応答)が全く分からない場合は,可変ステップを用いるほうが良い場合もあります。
可変ステップの場合、単一のシミュレーションの中でもステップ間隔が変わることがあるのでしょうか。
また、固定ステップでステップの間隔を任意に変化させることはできるのでしょうか。
はい,可変ステップはステップ間隔がシミュレーション中に可変となります。
固定ステップの間隔は,「コンフィギュレーションパラメータ」 → 「ソルバー」において,固定ステップサイズ(基本サンプル時間)の設定を変えることで変更できます。

とても素朴で細かい疑問なのですが、周波数を大文字のFで記述することに理由はございますか。
Frequency(周波数)の頭文字からとっています。
ステップサイズについて、出力が今回のsin波のような単純な出力ではなく複雑な出力の場合、意図した出力になっているか、どのように確認してステップサイズを決定するのでしょうか。
・ 固定ステップについて、本実習では先生から指示があるとのことですが、 実際の業務においてはどのようにしてステップサイズを決めていくのでしょうか。
一般的に,可変ステップサイズを選択する場合はステップサイズについてそこまで気にする必要はありません。固定ステップサイズの場合もautoを選択することで自動的に最適なステップサイズが選択されます。ただし,意図した波形となっているか否かの判断は非常に難しく,HILシミュレータの設計等では実験データなどと見比べながらステップサイズを決定する必要がある場合も少なくありません。
変数を設定する際、使用できない文字もしくは使用するべきではない文字はありますか?
例えば,下に示すような変数名が有効です.

今回の演習でMATLABとSimulinkを連携させる際に両方のTest2のファイルが同じフォルダに保存されていますが基本的に連携させるときは同じフォルダ内でなくてはいけないのでしょうか?
ファイル名をパスで繋げば別フォルダでも連携は可能なのでしょうか?
MATLABでは,ファイルのパスを指定しない場合,現在のフォルダまたは検索パス上のファイルを検索するようになっています.
そのため,mファイルのsimコマンド経由で実行したい.slxファイルが格納されているフォルダを検索パスに設定することで,現在のフォルダに無いファイルを実行することができます.
また,mファイル上で絶対パスや相対パスを指定する方法でも現在のフォルダに無いファイルを実行することができます.

mファイルとslxファイルを1対1で作成するとの説明がありましたが、複数のファイルを相互に参照するようなプログラムの作り方もあるのでしょうか。
(複数のモデルを別々に作成したあと、それらを合わせてシミュレーションしたい場合、一つのmファイルやslxで完結するように記述し直す?)
一つのmファイルで複数のslxファイルを実行することは可能です.
また,slxファイルでは,下に示すように別のslxファイルをサブシステムとして参照することができます.

Simlinkのパラメータ変更する際にそのままOKとしてウィンドウを閉じず、適用してからOKとするのはどういった理由からでしょうか。
基本的にはパラメータ変更を行ってすぐに「OK」ボタンを押下しても,その変更は反映されます。ただし,場合によっては変更がうまく反映されない可能性もあるので,「適用」ボタンによって確実に変更を反映するようにしています。
演習課題において、変数に置き換えて動作を確認する内容でした。変数に置き換えることは理解できますが、置き換える数値の設定がいまいち理解が出来ていません。次の例題の数値が、演習課題の設定数値という理解でよかったのでしょうか。
また、可変・固定ステップサイズの説明において、説明しやすいとのことで、各設定を変えてご説明されていましたが、マネして試そうとしたら、足りない数値などあった為か、適切に動きませんでした。
sin Waveの設定もモデルの元を新たに使い、今回新たな変数設定が必要だったのでしょうか。
ご説明が不足しており失礼しました。演習の意図としては,下図のようにSimulinkモデルの内容を任意の変数で記述いただき,MATLAB側で自由に変数の値を変更していただくことを想定しております。下記の例では,Simulinkのデフォルトパラメータの値をそのまま変数に格納しております。Simulink上に変数に置き換えた部分は必ずMATLABコード側でその値を設定する(正確にはワークスペース上に値が入ったパラメータが展開されている)必要がございます。

プロセス研修テキストp.1‐14のスクリプトをmatlabへ記述し実行したのですが結果がグラフとして出力されません。
P.1‐14のスクリプトは全てを表示していないということで良いでしょうか?
スクリプトについては,全てのスクリプトを記載しておりますので,結果が自動表示されるかと思います。ただし,プログラム後半部分のtf関数,feedback関数,step関数を利用するにあたっては,Control System Toolboxが必要になります。もし,本ツールボックスがインストールされていない場合,上記関数の実行時にエラーが発生し表示がされません。
MATLABのバージョンについて、下位互換がないため、ファイル名にバージョン名を書いておくことを推奨されていましたが、古いバージョンで作成したmファイルやSimulinkを新しいバージョンで使う場合も互換性はないのでしょうか?
新しいバージョンのMatlab/Simulinkでは,古いバージョンで作成したmファイルやSimulinkを実行することが可能です。
MATLABとSimlinkの扱い方の導入についてとても分かりやすかったです。
このシミュレーション結果は、リアルタイムで別のソフトと連携することは可能でしょうか?
(Unityなどのゲーム開発ツールを始めとしたツールと連携することは可能なのか気になりました。)
UnityとMatlab/Simulinkは連携することが可能です。例えば,3D描画はUnityで実行し,その具体的な動作の演算はMatlab/Simulinkで実行することが考えられます。
mファイル上で; を行の最後につけるのは変数のときのみであるという理解であってますか?
matlabで記述する際,文末に;があるのとないのがあるのはなぜですか?
どういった時に;が必要ですか?
「;」は,代入結果や演算結果などをコマンドウィンドウに表示しない役割となっております。つきましては,演算を伴わないコマンド(例:clear)については「;」は不要となります(もちろん「;」があってもエラーにはなりません)。
ビデオの中でMATLABからSimulinkの変数を操作する場合、ExcelからMATLABに数値を取り込めると言われていましたが、Excelから数値を取り込みMATLABとSimulinkで解析し結果をExcelに送る方法を教えて頂きたいのですが、宜しくお願い致します。
質問の背景ですが、社内のデータは、ほとんどExcelやCSVのため、Excelでフォームを決めれば直接、MATLABに必要データを読み込ませ、解析結果をExcelに戻すことで既存のデータ環境を変えずに業務の効率化ができるのではないかと考えたためです。 以上 宜しくお願い致します。
csvファイルの出力方法については,スライド番号1-50(配布テキストp.50)にまとめておりますのでご参考にして頂ければ幸いです。
csvファイルの読み込み方法については下記の通り「readmatrix」コマンドや「load」コマンドを利用致します。
詳細については,下記URLをご確認ください。

実際メカトロ開発を行う上で、メカ機構の部分で想定外の現象(異物噛み込みや外的要因による異常回転)が発生しエラーを引き起こすのですが、メカ部分を考慮したシミュレーションは可能なのでしょうか?
MATLAB and Simulinkの場合,simscape Multibodyと呼ばれるソフトウェアを用いることで,構造を伴う(いわゆるメカ部分)の構造のモデル化が可能です(CADモデル等もインポートできるようです)。
ただし,simscapeはSimulinkの使い方に十分に慣れてからでないと扱いが難しいためその点についてはご留意ください。
導入前にMathworks社のトレーニング等を受講されることをお勧めします。
Mathworks社 HP(simscape)
https://jp.mathworks.com/products/simscape.html
Mathworks社 HP(simscape基礎トレーニングページ: 受講料¥75,000,1日)
https://jp.mathworks.com/learn/training/modeling-physical-systems-with-simscape.html
Mathworks社 HP(Simscape™ Multibody™ による機械システムのモデリングトレーニングページ: 受講料¥75,000,1日)
https://jp.mathworks.com/learn/training/modeling-multibody-mechanical-systems-with-simscape.html
Simulinkのブロック図をMATLABコードへ変換することは可能でしょうか?
残念ながら下記のリンクにありますように,Simulinkを直接MATLABコードに変換することは難しいようです。
https://jp.mathworks.com/matlabcentral/answers/381231-simulink-matlab
しかしながら,上記の回答についてはMathworksの公式回答ではありませんので,最新の情報についてはMathworksへお問い合わせを頂けますと幸いです。
MATLABのスクリプト上で、”Enter” キーを押してしまうとスクリプト上で改行してしまい、戻すのが面倒です。簡単に1行表示に戻す方法があれば教えてください。
コマンドウィンドウ内で実行をしてしまうと過去の実行前の状態に戻れないことをご指摘いただいていると推察します。
残念ながら私の知る範囲ではコマンドウィンドウで実行した内容を戻すことは難しいため,複数行にわたるプログラムを作成される場合にはスクリプトを用いたコーディングをお勧めいたします。
なお,最新の情報についてはMathworksへお問い合わせを頂けますと幸いです。
テキスト 1-48ページ では、”Scope”の機能でデータをワークスペースに出力とありますが、どの変数(構造)として格納されますか?
変数構造は,保存形式によって異なります。テキストの場合は,時間付き構造体を選んでいるため,時間付き構造体の形式でWorkspaceに格納されます。なお,To Workspaceでも保存形式の選択肢は変わりません。
それぞれの形式の特徴は下記URLをご参照ください。
https://jp.mathworks.com/help/simulink/ug/data-format-for-logged-simulation-data.html#bs40i1i-7

ワークスペースへのデータ出力を行う場合、”To Workspace” ブロックを配置すれば、上記3.の設定は不要という理解でよいでしょうか?
はい,To Workspaceブロックであれば,Scopeによる設定はデータ出力の設定は不要です。
1-50 ファイル出力時に各変数を行ベクトルとして扱う理由を教えてください。 (MATLABのTimetabledata形式 などでは、時間ベクトル、Tableデータは基本的に列ベクトルして扱う理解ですので、それとは考えが異なっていますので疑問に思いました。
fprintfの仕様によるもので,行列の場合は列方向に順番に読み込みがなされるようです。
下記URLの「リテラル テキストと配列の値を表示」のA2の表示をご参照ください。
https://jp.mathworks.com/help/matlab/ref/fprintf.html#btf8xsy-1-A1An
1-51 のプログラムを実行すると、 Matlabの%データ取得 (from simout)の 「x1 = simout.signals.values(:, 1);」 行のところで、下記エラーがでます。 対処方法を教えていただきたいです。 エラー: 「クラス ‘timeseries’ に対する適切なメソッド、プロパティ、またはフィールド ‘signals’ がありません。」 simoutにはデータが入っていて、sin波形に問題はなさそうです。
エラーの内容から,出力されたsimoutの保存形式がデフォルトの「時系列」となっている可能性があります。
下図のように,保存形式が「時間付き構造体」に変更されていることをご確認ください.

Part2 物理モデリングの基礎
近似積分による誤差が実際に影響することはありますか?
誤差の影響は様々な問題を引き起こします。特に,長時間のシミュレーションにおいては累積誤差の影響がシミュレーション結果に大きく影響しますので,注意をする必要があります。
PCによる積分は数値積分で厳密値ではないとありましたが、厳密でないことによる問題点と対策などの例はありますか?
積分は積み重ねの演算ですので,各計算で生じた誤差が累積(累積誤差)します。そのため長時間のシミュレーションをおこなうとシミュレーション精度が悪化する恐れがあります。
Simulinkの ”積分器” の表記が 1/S となっています。積分は ”掛ける” ものかと思っていたのでイメージと合いません。どのように理解すれば、腑に落ちますでしょうか?
「1/s」はPart 5で示すラプラス変換において,積分演算「∫」のラプラス変換の結果を表しております。詳細は,Part 5でご確認いただきたく思いますが,ラプラス変換後の世界では信号に「1/s」を乗じることにより,積分結果を取り出すことができます。
そのため,基本的には積分記号がブロック状に表示されているという理解で結構です。
(なぜ,Simulinkが積分のみラプラス変換後の記号を使っているかは不明です。)
流出流量は液位に比例する…という部分をどう描けばいいかがちょっとまだわかっていない。物理的におかしなところはないか?(h=0なのに、qoutに値が入る構図)という点で見ればいいのか?その「アタリ」の付け方のコツを知りたいと思います。言われてみればわかる…という感じでした。
非常に重要かつ難しいご質問です。一つの見方として,ユーザが任意の時間で自由のその値を決定できる信号かどうか(すなわちいかなる状況においても独立に設定できる信号かどうか)という視点から考察されるとよいと思います。
また,Part 2で説明するアナロジーによる物理現象の理解ができるようになると,類似する物理現象との対応関係から,システムの状態に異存する信号をより見つけやすくなると思います。
演習2-1(2)ですが比較演算してからh[m]>=H[m]になったときにquotをH[m]にするで合っていますでしょうか?しかし、比較演算はまだ出てきていない?
上記の比較演算は飽和(Saturation)ブロックを用いることで実現できますが,実際には解答にあるように積分ブロックの設定によって実現しなければなりません。以下に飽和ブロックを用いた場合と積分ブロックの飽和機能を利用した場合の結果の差を示しますのでご参考にしてください。

Q H(タンク高さ)をパラメータとして設定していますが、モデルには含まれていません。何のための定義になりますか?
こちらのパラメータは演習課題 2-1(2)のために利用します。
演習問題2-1(2)について、水位があふれる液位なったときに頭打ちでh[m]の最大値を H[m]というシステムを作成しようとしているが、.mファイルのほうでhの最大値をHに設定すればよろしいでしょうか。
はい,Hも直径などと同様にタンク固有のパラメータの一種ですので,mファイル上で管理をすることをお勧めします。
この液位ブロック線図では、変化量(q_in – h(t)/R)がマイナスにできるのか、不思議に思った。出口抵抗の概念が完全に理解できず、水位を減らそうと考えたとき難しいと感じた。

液位プロセスの演習問題をif関数で解決できないか検討していました。ifブロック1つでモデル化可能であると想定していたのですが、回答と比べるとかなり複雑なモデルになりました。if関数の複雑さから、Simulinkにおいてif関数はあまり使われないものなのでしょうかという疑問を持ちました。または、本演習問題においてブロック1つでモデル化可能なif関数のブロックがあるのでしょうか。
if関数など,もともとプログラミング言語がベースにある命令についてはSimulinkモデルにすることによりその記述が複雑になるケースがございます。このような場合,MATLAB Function Blockを使って該当する動作をコードで記述するという方法があります。
ただし,MATLAB Functionを多用するとモデル全体の動作が分かりにくくなってしまうため適切な場面で利用する必要があります。

本演習では、解答を見るまで飽和機能をもつ積分ブロックを発見できませんでした。
最適なブロックを検索・発見するコツや方法などございましたらご教示お願いします。
最適な方法かは断言ができませんが,私の場合は以下の点を考慮しながらライブラリブラウザのカテゴリから所望のブロックを探します。
・ 該当するブロックの動作に求める機能がある場合は当該ブロックの「ブロックパラメータ」を開き中身を調べる
特に,「初期値設定」,「飽和設定」,「外部トリガ」などはブロックパラメータにその機能が含まれている場合が多いです。
・ 所望の動作を実現するブロックを探す場合は,そのブロックがライブラリブラウザのどのカテゴリに属するかを推測する
例えば,連続系(Continuous),離散系(Discrete),数学系(Math Operations)など

MATLABのスクリプトでのコード記述にて、Simulinkファイル名の読み込み時に拡張子の記載がありませんが、なぜでしょうか?拡張子は読み込ませてはいけないのでしょうか?
結論から申し上げますと,ファイル名にはモデルの拡張子(.slx)を含んでも実行可能です。
ご指摘の部分については,以下のMathworksヘルプを参照しつつサンプルプログラムを作成していたという経緯があり,こちらのサンプルプログラムには拡張子が含まれていないため,そちらの記述方法を踏襲しておりました。
https://jp.mathworks.com/help/simulink/slref/sim.html
※個人的には,ファイルの種類を明示するために拡張子を含んだ方が良いかと思います。
タンクの液位のモデルで出てきたシステムパラメータですが、例題としてはすでにR=500[s/m^2]などのように与えられていましたが、実際の問題ではRの値が不明なケースが多いと思います。そのような場合、どのようにRの値を決めるのでしょうか?
ご指摘の通り,モデルのパラメータにおいて,タンクの直径や高さなど直接計測できるパラメータがある一方で,出口抵抗のように直接計測できないようなパラメータも多く存在します.このようなパラメータを推定する方法(数式モデルを作成する方法)の一つとして,
「システム同定」があげられます.


Matlab Simlinkのモデルを使ってパラメータスタディを行う際に、複数の条件を一度に回す方法(バッチラン)はありますか?
例えば,関数parsimを用いることで,一つのSimulinkモデルに対して,異なる条件のシミュレーションを一度に実行することができます.
また,Parallel Computing Toolbox (有料)を用いることで,シミュレーションを並列に計算させること(シミュレーション時間の短縮)ができるようです.
参考:
複数のシミュレーションの実行
https://jp.mathworks.com/help/Simulink/ug/introduction_bvnw33f.html
関数parsim
https://jp.mathworks.com/help/simulink/slref/parsim.html
詳細については,MathWorks社のサポートまでお問い合わせいただけますと幸いです.
タンクモデルで初期水位を与えたいときはどうすればよいのでしょうか。
下図のように,該当する変数を出力にとる積分ブロック(今回の場合,水位ℎを出力にとる積分ブロック)の初期条件を変更することで初期値を与えることができます。

mファイルのRを例えば 500から 1200へ変更する、ということが答えになりますか。
基本的には,下限が0,上限がHの飽和関数を利用することが回答となります。
ただし,飽和機能は「Saturation」ブロックを利用する場合と,「Integrator」ブロックの出力制限機能を利用する場合でその計算結果が異なるので注意が必要です。
本件の詳細については,学習支援システム(etudes)内の
MBDプロセス研修
→ 演習課題解答(1)
→ MBDプロセス研修_演習課題解答.pdf
中のA2-1-2に記載がございますので参考にしてください。
値を調べることが困難なシステムパラメータがあると、シミュレーションの実行が出来なかったり、シミュレーション結果の信ぴょう性が失われてしまうのではないかと感じました。
おっしゃるとおり,摩擦や出口抵抗などは実際に測定をすることが難しいため,シミュレーションの信ぴょう性に影響します。
実際にはシステム同定と呼ばれる方法を用いることで,装置のパラメータを推定することができるため,このような結果をもとにシステムパラメータの範囲を絞り込むことが重要となります。
保存則に基づいてモデルを作成する際、出力部分の立式は入力の結果どうなるかわかるように設定するという理解で正しいでしょうか?
モデリングの目的によりますが,今回のように入出力関係のモデリングを行いたい場合は,左辺に結果,右辺にその原因となる要素(例えば入力)を記述するケースが多いかと思います。
テキストのP.76の液位プロセスモデルのステップ応答の上側のグラフ(液位側)について質問です。
0.5[m]から一定で変化がありませんが、「hによって変化するq_outがq_inと釣り合ある点」という状態で合っていますでしょうか?
例)h=1(タンクの高さ)で変化がない状態であれば、溢れている状態を表現しており、直感的に分かりやすかった思ったのですが、
そうではなかったので確認してみました。よろしくお願いします。

各ブロックのパラメータ設定などが多々ありますが、このテキストで紹介されていない物でも知っていた方がいいものとかのリストであったりしますか?
入門レベルでは、テキストで紹介された物で十分と思います。
数値積分における基本サンプル時間Δτの決め方の定量的な指針はありますか?

サブシステムの解除方法が分からない。誤って作成してしまった場合などのために。
右図の Tank Model を解除してみます。手順は次です。
サブシステムを選択し、マウスの右ボタンを押して、「システムとモデル参照」 > 「サブシステムの展開」 と選択します(下左図)。
この操作で、下中図のように、紫色の領域で囲まれた部分になります。
この領域をマウスの左ボタンで選択し、マウスの右ボタンから「削除」(あるいは Delete キー)することで、下右図のように解除できます。
FAQ の 「 FAQ (Part3) 」 に詳細な解説があります。
こちらも併せてごらんください。

流出流量qout(t) = 1/R * h(t)になることが少し理解できませんでした。自分が思った流出流量を決めるパラメータが二つがあり、液体の高さh(t)で決められる水の圧力とバルブ開閉の断面積です。確かに、水の圧力がh(t)で決められて、Rがバルブ開閉の断面積で決められることが理解できたが、その二つを掛け算にして、1/R*h(t)で流出流量qout(t)を決まることがちょっと理解できなかった。よろしくお願いします。
重要なご指摘ありがとうございます。
次にベルヌーイの定理からタンクの入出力関係について立式を行いますので,ご参考にしてください。


流出の抵抗部分等、よくわからない場合、比例定数を仮定するとのことでしたが、線形にならないこともあると思いますが、線形化することの、具体的なメリットを知りたいです。
計算だけなら複雑でもできてしまうのではないかと思ったので、メリットが気になりました。
モデル構築にはいくつかの目的がございます。ご質問の通り,シミュレーションすることが目的であれば,近似がないモデルの方が詳細なシミュレーションが可能です。一方,制御対象から制御パラメータ(例:PIDゲイン)を算出することが目的であれば,線形近似したモデルの方が比較的容易にPIDゲインを算出することが可能です。したがって,目的によってモデルを適切に使い分ける必要がございます。このことについては,一部Part 5(下記スライド抜粋)でも取り扱われます。また,「PID制御研修」においては,近似モデルを用いた具体的な制御パラメータ算出法についても取り扱っております。

タンクモデルの流出水量が水位と比例する理由が難しかった。
タンクモデルにおける液位と流出流量の関係については,ベルヌーイの定理に基づいて考えることができます.
つぎをご参考にしてください.


物理法則の中で「保存則」以外によく取り扱われる基本法則はあるか。
物体を構成する物質の力学的特性を数理式として表現した,材料の構成式(構成則)と呼ばれるものがあります。
バネにおけるフックの法則や,ダンパにおけるニュートンの粘性法則などは構成則のひとつになります。
数値積分の際などに影響を及ぼすΔτは、どのように決めるのでしょうか。およそ100msecといった基準があるのでしょうか。
計算精度の観点からはΔτはできるだけ小さい方が望ましいですが,計算に要する時間が長くなるといったトレードオフが生じます。
そのため,計算精度と計算時間のバランスの良い時間が望まれますが,この時間は主にシステムの応答特性に依存します。例えば,立ち上がり時間(Part5の時定数に相当するもの,温度システムなどであれば,数十ms~数s,機械系であれば数us~数ms)が短ければ,Δτは立ち上がり時間よりも短い時間を設定する必要があります。

MATLABで設定などする際に、「適用」→「OK」とする理由はあるのでしょうか。 「OK」だけでも良い気がします。
基本的には「OK」でもよいですが,過去に変更が有効にならなかったケースなどがあり念のために「適用」を押下することを推奨しています。
外力f(t)と対抗する力{fg+fk+fD}がつりあったところで速度v(t)が0になる考えでよい?

比例する物理量(式では変数):バネおよびダンパが、変位および速度に比例するのは何故でしょうか。
フックの法則やニュートンの粘性法則と呼ばれる法則であり,一種の物理法則として知られています。
これらの説明の詳細については,マクロスケールやミクロスケールによる説明があるようですが私の専門外のため詳細にお答えすることができません。申し訳ございません。
今回の演習モデルでは、Addブロックを使って、複数の信号を演算しているが、なぜ、sumブロックを使いませんか。そこについて、何か制約がありますか。
講義では”sum”ブロックを使っていましたが、”add”ブロックを使っても動作は同じでしょうか?
Sumの代わりにAddというモデルを使用したのですが、中身同じでしょうか?
Simulink では,機能が同じでも名称が異なるブロックがいくつか存在します。AddおよびSumは説明が双方ともSumとなっており基本的にどちらを利用しても構いません。

位相遅延10sがどこから来たのかが気になります。
パルスブロックは通常,ON (振幅設定値)→ OFF (0)の順番で出力を行います。
今回は,OFF (0)→ ON(振幅値)の順番で出力を行いたかったのですが,そのような設定がなかったため,位相遅延を使って信号をずらし前期の信号を実現しています。このとき,ON区間とOFF区間はデューティ比を50%に設定しているため,周期の1/2の時間で切り替わります(例えば,周期が20sとすると,ON時間10s, OFF時間10s)。そのため,Off信号を

解説ではsumで、入力をまとめましたが、addじゃだめですか? 計算は同様になりましたが違いはなんでしょう?
Addとsumでは,基本的に信号の総和を出力しますので,どちらを利用しても構いません。Simulinkにはブロック名が異なっても同じ内容のブロックがいくつか存在します。
既に動いている状態(速度、加速度が初期の時点で値をもっている)からシミュレーションしたい場合でも、初期値の与え方次第ではそのシミュレーションが可能なのか気になりました。
Simulinkモデリングにおいて初期値の設定が必要なものは,基本的に積分器の初期値の設定になります。
速度および位置に対して任意の初期値を与えることにより,運動中の物体の応答をシミュレーションすることが可能です。
Simulinkのコンフィギュレーションパラメータにて、ソルバー選択で、”固定ステップ”に変更していますが、なぜでしょうか?固定ステップサイズも任意に入れていますが、可変ステップ+Autoのままでは、不具合が生じやすいのでしょうか?
上記での設定の時間ステップ幅の妥当性の確認方法として、”Scope” で可視化したグラフ上でのプロット点(実際には離散値となっている計算点)を表記することはできますでしょうか?
今回の研修では,シミュレーション結果が滑らかな応答になるように(つまり,比較的細かなステップ数で)ソルバーを設定しております。
高周波成分を含むシステムの応答(たとえば,マス・バネ・ダンパ系の振動応答など)を含む場合,「可変ステップ+Auto」を選択すると,下図の左側のような応答が出力されます(Part 1のsin派の出力と同じような現象)。そのため,より物理現象をイメージをしやすくするために,滑らかな応答が出力される「固定ステップ+サンプリング時間」をあらかじめこちらで設定し,ご提示をしております。

また,Scopeで可視化したグラフ上でのプロットの表示はScopeの「スタイル」の「マーカー」の設定を変更することで設定可能です。

熱抵抗は容器を通過するときの抵抗のため流入時は考慮する必要がない?今後実践も考えていくとこの構成の場合だと遮蔽物のない上側からの放射熱についても考慮する必要ある?

水温y(t)と外気温d_0の差の際に出てきた比例定数αを意味を持たせるために1/Rに書き換えましたが、αのままでもαの値が高い、低いで意味を持たせることは可能だと感じました。αのままでは何か不都合があるのでしょうか、それとも何か物理学的な背景があるのでしょうか

システムの最終の安定状態は50℃になりましたが、この安定状態はどうやって演算で求められますか。

自分の理解不足で大変申し訳ございませんが、演習問題2-2の問題を読むと研修動画でやった問題と同じに見えるのですが、その認識で合っていますでしょうか。

simulinkのScopeブロックのスタイル等を一括で変更する(もしくは初期設定しておく)方法はありますでしょうか
申し訳ございません,スタイルの自動的な変更方法については存じ上げませんのでMathworkのサポートにお問い合わせをいただけますと幸いです。
Partが進む度に自分の理解度がどのように進んでいるのか知りたいのですが、これまで自分が答えた理解度のアンケート結果の推移を確認することはできますか?
残念ながらご自身のページで確認をする手段がございません。アンケート結果の推移をお送りしますのでお申し付けください。
お問い合わせ先:MBD研修事務局(mbdjimukyoku@digication.or.jp)
MATLABのスクリプトで、最後にセミコロンがある行とない行の違いは何でしょうか?

演習課題2-1(2)回答では、積分ブロックで飽和の上限Hを設定してあふれをモデル化していますが、ifブロックを用い、液位hがHよりも高くなった場合、高くなった分(h-H)に比例して、あふれの流出流量q_overflowが決まるようにし、あふれをモデル化する事も可能でしょうか?
自分でモデル化を試みましたが、知識が足りず断念しました。可能であればモデル例を示してもらえないでしょうか?




「モデリングする」という言葉の意味は「対象の物理現象を立式する」ということと同義でしょうか。「モデリング」「モデリングする」という言葉を使った時に、どこまでの範囲を指すのか、もし一般的な定義、もしくは本講座での意味合いでもよいので、教えて頂けると大変助かります。単にSimulinkなどのツールを使ってブロックを線で繋ぐ作業のことを指すのではないとの認識をしています。
本件は言われている通りです。狭義に申し上げると,対象の物理現象(システムの入出力関係)を式で記述するということになるかと思います。このとき,この式を「モデル」と呼び,このモデルを構築することを「モデリング」と言います。Simulinkを例題にあげられていますが,このブロックの中身をつくることがモデリングになろうかと思います。ただ、モデルと言うのは,必ずしも数式である必要はありません。場合によってはルールとして表現する場合もあります。そういったものを含めて広義のモデルと捉えて頂いてよろしいかと思います。
演習2-2(2)の問題でなぜMgが無くなるのかが分かりません。教えていただきたいです。

① 比例以外の関係はあるのか、もしある場合、どのようにしてどんな依存関係があるのか見つければよいか
② 異なる物理量同士に依存関係があり、比例定数を考える際は、経験則に基づいて値を決定することが多いでしょうか。
① 物理量間の明確な関係性を自力で見つけ出すことは,その物理現象に対する基礎知識が必要です。ただし,アナロジーによって,新しく直面する物理現象を説明するための仮説は立てやすくなると思います。最終的に,仮説を検証するためには実験をする必要が生じます。
② もし,対象となる物理量の間の関係性が式として記述できる場合,実験データからシステム同定という方法を用いて推定することが可能です。特に変数間の関係が線形(比例)関係の場合は,システム同定に最小二乗法が適用できます(詳細は補足資料を参照してください)。
Partが異なるかもしれませんが、「MATLAB/Simulinkは時間軸以外のシミュレーション(時間に依存しない物理現象)は適さない」という認識でよろしいでしょうか?
また、時間に依存しない現象を扱う上でも、大切となるとなる考え・知見等ございましたらご教授いただけますと幸いです。
【意図】
業務上、強度解析や固有値解析、流れ場解析(定常)がメインとなっており、時間に依存しない物理現象を扱うことが大半です。
そういった場合でもMBDプロセス開発として重要なことを学んでおきたく。
・モデリングができるようになる
・モデルの共通項を把握し整理する
・現象をシンプルに考える
等々はMATLAB以外でも重要だと思っておりますが、他にあればこの機会に伺いたく。
また、本講義でせっかくMATLABを使えるようになったので今後も使用していきたいのですが、上記理由につき使える場をイメージできておらず、時間軸シミュレーション以外でも使えるところがあれば教えていただきたく。
Simulinkは時間の変化に伴う信号の変化をモデリングするツールですので,ご質問のように時間的に依存しない関係のシミュレーションを行うことには適していません。さらに,Simulinkでは時間tを独立変数とする常微分方程式を対象としている(いわゆる1Dモデリング)ことから,特殊な場合を除いて空間的な変化を伴う偏微分方程式(3Dモデリング)の解析にも利用されるケースは少ないです。
一方で,MATLABは数式の解析や固有値計算等の解析が可能ですので時間依存の有無に関係なく解析が行えます。一般にMATLABは,機械学習や統計解析,信号処理,数式処理やテキストマイニング等などの多様な解析において利用されます。
サスペンションモデルにおいて、入力ステップが切り替わったタイミングの出力の振動を抑さえようと思うとばね定数を大きくすればよいという理解です。
他のモデルでも、平衡状態の式から何のパラメータを操作すれば振動を抑えることができるか導くことができるのでしょうか?

サスペンションモデルのダンパの制動力について、自身がダンパというものをよく知らないため最初こちらも復元力と同様に変位を用いて記述するのかと思っていましたが、実際は速度を用いた式で表現されていました。
これはダンパが特性として粘性減衰係数を持っており、その単位に速度の要素が含まれているから、速度の因子が式に含まれているニュートンの粘性法則を活用するといった考えなのでしょうか?
であれば今後自力で微分方程式を導出するにあたり、まずは各モデルがどんな特性(および単位)を持っているかを確認してから、その単位系を含んだ物理法則を引っ張ってくるといったストーリーで考えていったのでよいでしょうか?(要はどんな物理法則を用いればよいかの決め手みたいなものが知りたいという思いです。)
ご質問頂いた通り,微分方程式を導出する際は,各モデルの特性を確認後,必要な物理法則を用いて立式することになります。一例とはなりますが,下記の[step 1]~[step 3]のように,全体の運動方程式を立式し,徐々に細かな要素に分解し各物理法則を採用する方法が考えられます。

サブシステムを解除するにはどうすれば良いのでしょうか。
Mathworksのヘルプより以下の方法でサブシステムを解除(展開)が可能です。
「サブシステムを対話形式で展開するには、Subsystem ブロックを右クリックし、コンテキスト メニューから [サブシステムとモデル参照] 、 [サブシステムの展開] を選択します。」

SimulinkのSubsystemであるモデル構成に関して、あまり分からない事があります。
時々にSumの入力はまだ計算していない値があります。計算されていない値をFeedbackとして得ることが出来るという認識ですが、Feedbackの計算方法をあまり理解できていない。


Simulinkのスコープにのばす矢印に物理量や単位を記入するとき、編集時に字が見えなくなってしまう現象が発生しました。
なお、編集終了後は問題なく表示されます。対処法などございますか。
申し訳ございませんが,私どもの環境で当該現象を再現することができませんでした。恐れ入りますが,バグの可能性がありますのでMathworksサポートへお問い合わせをいただけますと幸いです。
Part3 MILSによるDCモーター制御システムの設計
要求仕様から逆算してシステムの粒度を徐々に細かくしていく中で、プラントモデルは1Dモデルから3Dモデルへと変わっていくイメージができますが、コントローラモデルの方はどのように変わっていくのでしょうか。宜しくお願い致します。
コントローラは基本的に1Dモデルのまま設計・実装を行います。今回のPart3 ~ Part4の内容のプロセスが基本的な設計の流れになるとご理解ください。
1Dモデルが正しく作成できているかの検証はどうやってするのでしょうか。HILシミュレータでテストするまでわからないのでしょうか。
既存の要素に対する1Dモデルの動作保証は,その要素の実験データなどとの照合によって検証を行うことになります。また,近年では,Modelicaやsimscapeなどの非因果モデリングツール(物理ドメイン連携)が充実しているため,基本方程式などは事前にコンポーネントモデルに含まれているケースも多くなっています。非因果モデリングツールの詳細については,6日の講義で説明がございます。

パスの登録はできませんでした。
誠に申し訳ございませんが,
「Part3_02_補足_ライブラリがパスに登録できない場合のライブラリ利用方法(約7分)」をご確認いただき,試していただけますと幸いです。
ライブラリブラウザからSubsystemブロックを4つ作成するときに、コピーしてはいけないのはなぜでしょうか。
ライブラリにおけるブロックは,コピーをするとコピー元のモデルをリンクされます(ライブラリンク)。ライブラリリンクされたモデルでは,コピー元のモデルの変更がすべてのモデルに伝播します(下図参照)。
ライブラリ内部でモデルのコピーを行った場合も,モデル間において上記の関係が成り立つため,コピー元の編集結果がコピーされたモデルに伝播するほか,コピー先のモデルを編集しようとするとリンクの無効化等が発生しモデルの関係性が崩れてしまいます。
そのためコピー元のモデルはすべて新規に作成することをお勧めします。

今回は「空のライブラリ」を選択しましたが「空のモデル」でも同じことができるんじゃないのかな?と思いました。
「空のモデル」と「空のライブラリ」を比較したところ,下記のような違いがございました。特に,モデル編集のロック機能の有無については重要と考えています。そのため,拡張子は同じですが目的に応じて使い分けをされることをお勧めします。

「ライブラリブラウザへカスタムライブラリを登録した際のリポジトリ情報のないライブラリがあります。」の警告が出ることがありますが,これはどのような場合に発生するのでしょうか?
以前,Mathworks社に問い合わせた際に以下のような回答がありましたので,展開いたします。詳細については,Mathworks社にお問い合わせをお願いいたします。また,そのあとのページにて現在,講師側で確認している対処法について掲載させていただきますのでご参照ください。
【質問回答1】
ライブラリブラウザーの上部に「リポジトリ情報のないライブラリがあります」というメッセージが表示される場合、以下のいずれかが考えられます。
・古いバージョンで作成された mdl 形式のライブラリモデルが存在する場合
・EnableLBRepository プロパティを on にせずに保存したライブラリモデルが存在する場合
いずれの場合も、ライブラリモデルがライブラリブラウザーに正しく登録されておらず、ライブラリブラウザーに表示されていない状況です。
メッセージ内の「修正」をクリックし、「SLX ファイル形式でライブラリを再保存します」にチェックを入れてOK ボタンをクリックすることで、ライブラリモデルがライブラリブラウザーに登録され、リストに表示されるようになります。
逆に「スキップ」にチェックを入れて OK ボタンをクリックすると、ライブラリブラウザーにモデルを登録せずにメッセージを非表示にすることができます。
ライブラリブラウザーへの登録方法の詳細については、下記ドキュメントをご参照ください。
・ライブラリ ブラウザーへのライブラリの追加
web(fullfile(docroot, 'simulink/ug/adding-libraries-to-the-library-browser.html'))
【Mathworksへの追加質問1】
古いバージョンで作成された mdl 形式のライブラリモデルが存在する場合の件でもう一つお伺いさせてください。
①ライブラリブラウザーは,MATLABのパスで登録されたフォルダの中で,slblocksファイルを含むフォルダを検索しslblocksの内容をライブラリーブラウザに登録していると思いますが,これらの各フォルダにあるライブラリファイルはmdl形式でどこかのフォルダ(CドライブのMATLAB関連)に保存されるのでしょうか?
②というのも,ライブラリファイルはslxで保存をしており,また,編集時に常に上書き保存をするので,mdlファイルのバージョンが古い(そもそも作成していない)という部分に引っ掛かります。
【追加質問1 回答】
質問①
いいえ、mdl 形式で保存されることはございません。
質問②
"・mdlファイルのバージョンが古い場合"というのは、古いバージョンで作成されたカスタムライブラリが存在する場合に「リポジトリ情報のないライブラリがあります」というメッセージが表示されることがある、という意味であり、.mdl ファイルが保存されません。
【Mathworksへの追加質問2】
古いバージョンで作成されたカスタムライブラリが存在する場合に「リポジトリ情報のないライブラリがあります」というメッセージが表示されることがある
これは例えば2016aで作成されたライブラリを2020aでライブラリブラウザーを表示した際に上記のメッセージが出る可能性があるということだと理解しました。
一方で,2020aで作成したライブラリは2016aで呼び出すことは不可能という理解で間違いありませんでしょうか?
【追加質問2 回答】
上位バージョンで作成したライブラリが下位バージョンで呼び出し可能かどうかは、Simulink の設定に依存いたします。
MATLAB デスクトップ上から、[環境] > [設定] を選択して設定画面を開き、左側ペインから Simulink を選択し、右側ペインの[Simulink 設定を開く] を選択し表示される ‘Simulink 設定’ ウィンドウで、[Simulink の新規バージョンで作成されたモデルの読み込みを禁止] にチェックが入っておりますとエラーとなり呼び出されませんが、チェックが外れている場合は呼び出されます。
恐れ入りますが、複数のバージョンのライブラリやモデルがMATLAB パス上に混在しないように、バージョンが異なるモデルはバージョン毎にフォルダにまとめていただき、パス上に存在しないよう、運用いただくことをご推奨いたします。


ビデオを聞き逃してしまったのかもしれませんが、なぜサブシステム4つ作成する際に、コピー&ペーストではいけないのでしょうか。クイック検索あるいはライブラリから追加しなければいけない理由を教えてください。
ビデオでは詳細に説明をしませんでしたが,ライブラリで定義をしたブロックをコピーすると,そのコピーされたブロックは「参照ブロック」となり,元のブロックの変更がすべて反映されてしまいます。この問題を回避するため,動画中ではブロックのコピー&ペーストを行わないようにお願いをしています。
参考URL:ライブラリ ブロックと参照ブロックの要件リンク
https://jp.mathworks.com/help/slrequirements/ug/requirements-links-for-library-blocks-and-reference-blocks.html

モデルファイル xxxx.slxファイルを更新した場合、自動的にモデルライブラリの中身も更新されますか?更新されない場合、手順を教えてください。
今回のケースでは,「MBDLib_2016a.slx」の内部でライブラリのモデルを管理しています。そのため,単体テストで作成したモデル「xxxx.slx」の変更はライブラリに反映されません。
「xxxx.slx」で作成したモデルの変更をライブラリに反映させるには「モデル参照」といわれる構造を用いることで実現可能ですが,モデルの構造について併せて理解する必要が生じますのでここでは詳細について割愛させていただきます。
なお,これらのモデル構造や管理に関してはMathworks公式が主催する「Simulink モデルの管理とアーキテクチャ」で演習付きで詳しく解説がされますので,こちらの受講を強くお勧めします。
モデル参照
https://jp.mathworks.com/help/simulink/slref/model.html
Simulinkモデルの管理とアーキテクチャ
https://jp.mathworks.com/learn/training/simulink-model-management-and-architecture.html
今回の演習ではモデルライブラリ”MBDLibrary” を作成しましたが、”slblocks.m”ファイルの役割を教えてください。mファイルは特に実行しておりませんでしたが、このコードがどのタイミングで読み込まれて、どのような指令となっているのかご説明をお願いします。(MATLAB, Simulink内でのそれぞれの指令が何を意味しているのか理解しておきたい。)
“slblocks.m”の役割は,Simulinkのライブラリブラウザにslblocks.mで登録されたライブラリ用のモデル「MBDLib_2016a.slx」を登録および表示することを目的としています。具体的には“slblocks.m”を含むフォルダのパスを通したうえで,ライブラリブラウザ上で更新(F5キー)を行った際に,“slblocks.m”の内容が読み込まれ,ライブラリ用のモデルが表示されます。なお,「MBDLib_2016a.slx」の内容を更新した際には再度ライブラリブラウザ上で更新(F5キー)を行い,モデルを再度読み込む必要があります。
ライブラリ ブラウザーへのライブラリの追加
https://jp.mathworks.com/help/simulink/ug/adding-libraries-to-the-library-browser.html
3-32ページ 6.0e-5 と記入とありますが、6e-5でも問題ありませんか?注意点があれば教えてください。
はい,6e-5でも問題なく小数点の有無についてあまり気にする必要はありません。なお,通常のMATLAB演算は倍精度演算となっております。
https://jp.mathworks.com/help/matlab/matlab_prog/floating-point-numbers.html
Scope出力がv_N[V]と指定されているが、サブシステムの出力はv_T[V]と指定されている。どういう意図か確認しておきたい。
同じ回転数を表す電圧が二つのコンポーネント(タコジェネレータと分圧回路)から出力されていたため,異なる名称を付けております。
ここでは,タコジェネレータ(Tachogenerator)から直接出力される電圧をv_T [V]としました。また,分圧回路から出力された電圧はA/D変換器からデコーダを通って,N [rpm]に変換されるため,v_N [V]としております。
2. 演習3-1の単体テストはシミュレーションはデフォルト値の10でよいか。テキストのシミュレーション時間は2の様に見受けられる。
シミュレーション終了時間に指定はありません。1Hzのsin信号の振幅が確認できれば問題ありません。
CurrentSensorのモデルで自分で作成した際には先にi[A]に1/10をかけて、その結果に2.5[V]を足すようなモデルを作成しました。モデルとしての考え方としては間違いないでしょうか?
上記のような考え方でも問題ないようであれば、今後今回のように複数の作り方でモデルを作ることができるような場合に組み立て方のポイントやおすすめの考え方があれば教えていただきたいです。
はい,物理的な単位を用いて説明ができるのであれば問題ないと考えます。
画一的な作り方というのは難しいですが,構成要素のメカニズムがわかっているのであれば,それに従ったモデル作りが良いかと思います。
例えば,今回のご質問の例ですと以下のメカニズムが考えられます。

1D-CAEにおいて、適正なPWM周波数を導出する場合、電圧の推移の近似値以外に何か着眼点は何かありますか?
また、その数値をダミー扱いとし、極端に大きな値で検証を進めた場合、発生しうる問題は何が考えられるでしょうか。
本来,PWM信号には高周波成分が含まれており(特にON-OFFが切り替わる部分)これらの影響が出力に高周波ノイズとして重畳することがあります。これらの影響をきちんと調べるには,やはり当該PWMをきちんと再現したモデルが必要になります
MATLAB & Simulinkの場合,Simscape Electricalと呼ばれるToolboxでサポートされている「PWM Generator」ブロックを用いることで,実際のPWM周波数信号を発生させることができます(下図参照)。ただし,計算負荷が高くなることや,高周波ノイズといった新たな外乱因子の影響を考慮する必要性が生じるので,今回のような簡易なモデルで全体の動作を抑えたうえで検討されるのが良いと思います。
Scopeで表示されるグラフの縦軸がテキストと違い、シュミレータが間違っていると勘違いしてしまいました。
見やすいように表示する場合、縦軸は変更できるのでしょうか?
コンフィギュレーションプロパティの設定によって縦軸は変更できます。下記の手順を参考にしてください。

周波数は基本が1000Hzなのでしょうか
機器によって一般的に用いられる周波数は異なります。モータドライバの場合は,20kHzが用いられることが多いです。
モーターに関して明るくないのですが、今想定しているモーターはどのような形のものなのかイメージつかないです。パルスに変えて電圧の方向を制御できる姿がモデル化されたことは理解できますが、2極だろうと12極だろうと、制御対象が増えるだけで考え方は変わらないので省略している、ということでしょうか。あと、電流は不問とする、ということは今回のモデルの目的からすると電流は、電圧を上げるための手段であって、その大小の揺れは解析結果に影響しないのでしょうか。
今回の例では,DCモータであるということ以外はその構造を特に限定しているわけではなく,あくまで,流れる電流と発生トルク(または逆起電力)の関係のみに着目してモデリングをしております。また,通常,電源側は許容される電力容量や内部抵抗の関係で,モータに所望の電圧が印加できない可能性がありますが,今回はそのような制約は考慮せず,理想電源(モータへの両端電圧は24Vで一定,電流量に制約はなし)という条件で駆動することとしています(実際の機器の方でも,十分に大きな容量を持った安定化電源を使用しています)。
そのため,電源の容量等を考慮する場合は,電源モデルを単純なConstantやStepブロックなどではなく,より複雑なモデルとして考慮する必要が生じます。
パスの設定ができなかった。
変更にはPCのパスワードが必要といわれた。テキストを読んだが対応策がわからなかった。
ご不便をおかけしております。PCによってはセキュリティの関係で管理者権限でないとパスが登録できないケースが確認されております。
この場合,ライブラリのファイルを開いたまま,該当するSimulinkモデルを編集することでライブラリに登録されたモデルが利用できます。
詳細については,Part3動画の
「Part3_02_補足_ライブラリがパスに登録できない場合のライブラリ利用方法(約7分)」で説明しておりますのでご確認をいただけますと幸いです。

Actuator画面ではInterfaceにも表示されていますが、表示間違いなのでしょうか。
Dモーター・ディスクモデル⇒Plant[142P] 、タコジェネレータモデル&電流センサーモデル⇒Sensor [150P.]、モータードライバー⇒Actuator[160P.] のため、
Interfaceが使われていない気がしますが、間違ったら教えていただきたく存じます。
ごしてきいただきありがとうございます.
Simulinkライブラリブラウザーに表示されているInterfaceの項目は,以降で設計するコントローラモデルのA/D Converter,Pulse Generatorを格納するために使用します.
しかしながら,Interfaceの項目が表示されていると,混乱を招く可能性があるため,テキスト修正の参考にさせていただきます
タコジェネレータのωに対応するセンサ出力などにおいて、敢えて約分をしない表記でモデルを書く方が、計算過程が明確になったので分かりやすかったです。ただそのような表記を多く用いた場合、計算負荷がかかってしまう可能性はないのか気になりました。
冗長なコードは計算性能を低下させる可能性がありますが,多くの場合はコンパイラ側の最適化処理でこれらの単純な演算については最適化されることが予想されます。そのため,計算時間についてシビアな場合を除いては,あまり気にされなくてもよいかと思います。
プラントモデルの結合テストの講義のなかで、「モーター回転数3000rpmはまあまあ合っているが200rpmのずれをどうとるかは議論の余地がある」とのことでした。実際の所、この200rpmの誤差は良いのか悪いのかはどのように判断すべきでしょうか?
機能の評価(モデルの妥当性の評価)の判断基準は,モデルの用途に依存するかと思います.
今回の研修では,MBDのプロセスを体験していただくことが目的であり,モデルに厳密な精度を求めておらず,過渡・定常特性が大まかに一致していれば良いという低い判断基準を定めているため,200rpmの誤差は許容範囲内と判断しております.
しかしながら,位置制御など,正確さ求められる場合は,機能評価の判断基準を高くする必要があります.
モータのCWスイッチとCCWスイッチが同時にONになるとショートするような気がするのですがどのような時に同時にONになるのでしょうか
おっしゃる通り,Hブリッジ回路では,CW信号とCCW信号が同時にONになるとショートしてしまいます.
例えば,下左図のように結線されると,モータに制動力が加わり,モータの停止時間が短くなります.この方法はショートブレーキ(短絡制動)と呼ばれています.
また,下右図のように結線されると,電源はモータを介さずにショートしてしまい,貫通電流と呼ばれる電流が流れます.
この貫通電流は,機器の誤動作や破損につながる可能性がありますが,一般的にモータドライバは,安全性を考慮して,貫通電流が発生しないように設計されています.

電流は先に増加してから、安定までどんどん減少して、最後もとに戻すことは何故ですか。ご回答をお願いいたします。
モータが加速するにつれて内部の逆起電力の値が大きくなります。そのため,キルヒホッフの法則から抵抗やインダクタンスにおける電圧降下が小さくなる(すなわち電流量が小さくなる)ことがわかります。最終的にモータはこれらのバランスが取れるところで一定回転・一定電流になります。

MBDプロセスにて、システム機能設計の後に部品(詳細)設計となっているが、システム機能設計を行うには質量や慣性モーメント等、後プロセスである部品設計が完了していないと定義できない値が必要となる。
演習の様な電気回路の設計等、要素部品の組合せ設計を行うのであれば情報は潤沢にあるが、構成部品含め1から開発する場合は前後ブロセスの行き来は必ず出てくる。
また、要素部品の組み合わせの場合も実質的に後プロセスの部品設計が完了してしまっており、このMBDプロセスは開発プロセスとして成り立っているのか疑問が残る。
大変重要なご指摘ありがとうございます。おっしゃるように実現場においては後工程との兼ね合いなどで,研修のようなプロセスを100%実施することは難しいかと存じます。その中でも,1Dモデルと3Dモデルの往来であれば,試作機の製作やこれにともなう手戻りなども抑制することが期待できます。近年,学会などにおいても,1Dモデルをどのように用いて設計目標を決定するかという点が話題に上がりますが,まだ,画一的な答えが出ているわけではありません。本件についてご意見や御社での取り組み内容があればお聞かせいただけますと幸いです。(脇谷)
理想を言えば、コントローラとプラントを含んだシステム全体での目標を定めた上で、プラントが満足するべき要件を先に定めます。質量もその要件を守れるように部品の(詳細)設計を行うことになりますが、設計の過程でコストなどから当然制約は入ってくるため、改めて前のプロセスに戻り、システムとしての整合を取ることになります。大事なポイントは、この検証サイクルを小さく早く回すことで、物を作る前にV字プロセスの左側でできるだけ設計の確からしさを高めることだと思います。
要素部品の組み合わせで製品を作ると言うケースについてですが、組合せで目標が達成できるのであれば、特に新しい製品を生み出すわけではないと思いますので、MBDのようなプロセスを行う必要は無いと思います。ただし、近年、特に自動車においては、製品=システム全体としての要求が高まっており、単なる組み合わせだけでは全体目標を達成できない状況になっていると考えています。(マツダ株式会社)
以降のHILSにおいて、アクチュエータの動作を模擬した機器(演習のようなモータ動作を模擬する基盤等)でシステム動作の確認をすることとなるが、実物が存在しない状態で動作を模擬できていることをどうやって確認するのか。
ご指摘ありがとうございます。理想的には,HILSを用いた設計について大きく以下の2つのシチュエーションが考えられます。
① すでに実際の機器(プラント)は存在しており,このプラントを模擬したモデルを用いてコントローラ等のアルゴリズムを検証するケース
→ 実機がありますので,実機のデータなどに基づいてモデルを修正することで,シミュレーション環境をよりリアルな状況に近づけることができます。
② コントローラおよびプラントの双方の設計を行う過程でHILSによる検証を行う場合
→ プラントの1Dシミュレーションモデルの動作の妥当性は,3Dモデルなどの比較によって可能になるかと思います。1Dモデルと3Dモデルは一方通行ではなく,何度かの往来を経て設計の最適化が達成されると考えられます。最終的には,プラントモデルの挙動を実現するように実際のハードウェアの製作を行うことになります。(脇谷)
まず前提として、制御設計を行う前に、制御の対象の特性を考える(捉える)必要があります。逆に言えば制御対象が分からないままだと、どういう制御の内容や量を与えるべきかの指針が得られないことになります。そうなると、実物がもしできていない段階であったとしても、その機能的な動作はある程度模擬できると思いますので、定性的な機能検証は行えると考えます。
(例えばミニカーのマブチモーターの制御なのか、実際の車の大きいモーターなのか、対象によって制御は変わってくると思います。)(マツダ株式会社)
課題形式の際、答えの図の背景が白くて見えにくかった。
「If Action」がいきなりでてきて、やり方に手間取ったため少し説明が欲しかったです。
説明が分かりづらく誠に申し訳ございません。今後の資料作成の参考にさせていただきます。
なお,その他,利用方法についてご不明な点がございましたらオンライン質疑もご活用いただけますと幸いです。
どうぞよろしくお願いいたします。
ライブラリ登録でパスを繋げられない場合の説明とモデル作成順序との相関が分からない
(センサモデル等の作成で何に気を付けなければならないのか等)
説明が分かりにくく申し訳ございません。
Part3の演習では,モデルをライブラリに登録し,複数のモデルの結合テストを行う際にライブラリに登録したモデルを流用することで,MBDにおけるモデルの共有化のイメージを実践を通じてご理解いただくことを目的としております。
Simulinkのライブラリブラウザ上に自作のライブラリを表示するためには,MATLABにライブラリのフォルダパスを登録する必要があるのですが,パスの登録には管理者権限が必要になる場合があるため,作業が進められないという受講生の方がおられます。
この場合には,若干イレギュラーな対応にはなりますが「Part3_02_補足_ライブラリがパスに登録できない場合のライブラリ利用方法(約7分)」の操作を行っていただくことで,ライブラリブラウザ上にライブラリが登録できない(パスの登録ができない)状況下でも,ライブラリのモデルを利用することができるため,当初のライブラリを通じてモデルを共有するという体験を行っていただくことができます。
ライブラリのパスが登録できる・できないにかかわらず,ライブラリファイルの作成とモデルの登録は動画の手順に従っていただければ問題なく実施いただけますので,センサモデル等の作成時に上記について特に意識をする必要はありません。
少し説明が長くなりましたので以下,要点をまとめます。

スコープでテキストと異なる結果が出た際(今回は出た波形が±方向が逆でした)、プログラムミスした個所を探すコツなどあれば教えて下さい。
モデルの設計ミスについては色々な要因があるため一概には言えませんが,代表的な例としてステップ(あるいは一定)値をシステムに入力した場合に出力が発散する(一定値に収束しない)現象があります。多くの場合については,出力値が内部で入力端にフィードバックされた際に「+」でフィードバックされたときにおこります(これを正帰還と呼びます)。正帰還はシステム出力がさらに入力を増加させる方向に加えられて,システム内部で積分されることで出力が発散します。このように,よくおこるパターンをノウハウして蓄積しておくと,システムの応答などからそのミスについて推察することができます。

Simulinkで作成したモデルの妥当性を判断する方法として、一般的な方法はどのようなものがありますか?
また、各所で各要素の説明(センサやアンプ)があり理解できましたが、通常はこのような知識は事前に学習しておくべきでしょうか。
もしくは、目的や機能を明確にした上でモデルを作成していく中で調べながらモデルを作成していった方が良いでしょうか。
もし推奨する学習の進め方があれば教えて頂きたいです。
モデルの妥当性の検証は,極めて重要な部分です。通常取られる方策としては,実データとモデルのデータとの誤差を評価することが考えられます。同じ環境条件・動作条件において,同じ入力信号をシステムとモデルに入力し,その時の出力信号の誤差を評価する方法がとられることが多いです。その誤差の平均、分散など統計的な諸性質を調べるのが最も簡単に評価できることかと思います。誤差の平均が0でない場合は、モデルに偏りがあるということですので,モデルの再考が必要かと思います。一方分散の大きさは、ばらつきを表現しています。ばらつきは少なからず発生しますので、偏りほどは大きな問題ではない場合があります。
各要素をモデルで記述する場合は、何らかの事前情報があるかないかは、モデリングの際に調べながらでも得られた方が宜しいように思います。最近は,簡単に情報が得られるようになっていますので、参考にされながら進めていくことで良いと思います。ただ、複数の情報源を参考にして頂くことが重要かと思います。
elseif{}の箇所で1倍のGainを入れていたが、なくても動作に変わりないと思うのですが何か意味はあるのでしょうか?
符号が回転方向を表すため,回転方向を+1, -1と明示しております(+1のゲインがない場合でも動作に違いはございません)。

if-elseロジックの実装において、ifブロックがあることを初めて知りました。これまでSwitchブロックを用いた実装をしていたのですが、差はあるのでしょうか。
Switchブロックの場合は,2つの条件しか選択できません。一方で,ifブロックの場合は,elseとの組み合わせにより複数の分岐を容易に実現できます。
ifブロックはActionの内容が見えなかったり,Mergeブロックが使用できる信号の条件など少しクセがありますので,単純な分岐の場合はSwitchブロックでもよいと思います。
モータドライバのSimulinkモデル自体を作成することはできたのですが,どの部分から書き始めると良いでしょうか?
モデリングの理解をする上で,どういう手順で処理をすると分かりやすいでしょうか?型みたいなものがあれば教えていただきたいです。

ABSブロックで絶対値へ変換している理由をご教示願います。
ご指摘ありがとうございます。
今回のモデルではabsは不要になります(デューティ比は原則としてマイナスの値にならず,また原則としてVs > 0であるため)。
研修の進行には特に影響はございません。今後の資料では訂正をさせていただきます。
Simulinkのノード(配線)の名前を移動するのが難しいです。 コツがありましたらご教示願います。
基本的には,配線はブロックの入出力ポート付近に記述するようにするとよろしいかと思います。配線の名前をドラッグしながらポート付近に近づけるとラベルがポート付近の一定の場所で自動的に収まることが多いかと思います。
結合テストの最後で実際のモーターのスペックシートとテストデータを比較されていましたが、これはMoter&Diskのサブシステムを作成する際の変数値をこのモーターのスペックと同じに設定したから比較することができるという理解でよいでしょうか?
おっしゃるように,今回はスペックシートをもとにモデルおよびパラメータを作成したためスペックシートとテストデータの比較が成立しています。
モータドライバモデルの簡略化方法を説明頂きましたが、実際の事例の簡略化のプロセスはPWM信号⇒駆動パルス⇒モータ出力を厳密にモデル化してから簡略化可能箇所を検討するという流れでしょうか。
そのような場合は簡略化のポイントはどのように見つけていけばいいでしょうか。
はい,実際にはおっしゃるようなプロセスが望ましいと思います。簡略化については色々なケースが想定され一概には言えないのが現状です(今回のPWM信号の場合は,モータに印加されるPWM信号はモータにかかる平均電力として計算できるという一般的に知られている知識から活用を行っております。)
実務では三相モータを用いたアクチュエータモデル設計を行いたいです。
方程式は回路図を確認しながら作成予定ですが、PWMを再現したモデルが必要となる認識で合っておりますか?
またsimlinkの機能で使えるもの、考え方等あればご教授ください
3相モータの場合,モデルがやや複雑になるためにSimulinkのToolboxなどを活用することをお勧めします。
SimulinkにはSimscapeと呼ばれる非因果モデリング用のToolboxがあり,実際にはこのようなモデルを利用されるケースが多いです。
(本Simulinkのモデリングを因果モデリングと呼びます。そのため,Simscapeの場合,操作やモデリング方法が若干異なります。)
参考:Simscape
https://jp.mathworks.com/products/simscape.html
参考:ブラシレスDCモータのモデリング
https://www.youtube.com/watch?v=ClfQgGZGAVc
参考:Simscape入門
https://jp.mathworks.com/videos/intro-to-physical-modeling-94647.html
PlantModelのCW/CCWなど切り替えをマニュアルで行っていましたが、
これを自動で行い、結果を画像や映像で描画するためのステータスとして使うことはできますか?
意図
Simlinkを使ってシミュレーションを行う際、動いている様子がリアルタイムで視覚的確認することができると
とても便利だと思い、そういうことは可能なのか気になった次第です。
例えば,下記のようなstepブロックを用いたSimulinkを実現すれと,CW/CCWの時間推移をscopeで確認することができます。

マスクの設定の際に,説明欄に画像や資料の添付はできるでしょうか?モデル作成の考え方や,値の根拠などをモデルと共に残したいためです。
ライブラリに登録後,モデルを変更した場合,ライブラリの方に変更は自動反映されず,再度ライブラリに登録し直す必要があるのでしょうか?
説明欄には画像や資料を添付することはできないようです。代案として下記のようにSimulinkファイルに画像を貼り付けることが考えられます。なお,モデルを変更した場合は,ライブラリには自動で反映されませんので,再度ライブラリに登録し直すことが必要になります。

マスク処理によってブロックの使いまわしができ、内部構成の変更時にも1つのブロックを編集すれば効率よく開発を進められることを理解しました。マスクを使うことの利点はそれ以外にもありますか?
マスク処理されたブロックはSimulink Coderが提供する機能を利用することで隠蔽化をすることができます。したがって,内部構造を見られないようにしつつ,外部から必要なパラメータを変更するといった処理が可能となります。
「測定する物理量の単位に気をつける」という点について、単位が異なる場合を想定して複数のライブラリを用意しておいた方が良いのでしょうか。それとも、演習課題3-3の時のように、都度ライブラリの外側で単位にずれが生じないようにGain等を用いて調整を行うべきでしょうか。
単位系については設計者側の会社等で規定があるケースが多いかと思いますので,そちらに準拠したもののみをライブラリに保存し,必要に応じて外側のゲインブロックで単位換算を行うのが良いかと思います。
ライブラリから使用する場合と、モデルをコピペする場合とで違いはあるのでしょうか。単に利便性の問題だけなのでしょうか。
ライブラリからコピーされたモデルは,原則としてライブラリ側でのみ変更が可能です。また,ライブラリ側でモデルを変更した場合は,その変更がすべてのモデルに適用されます。一方で,単純にコピーしたモデルについては,モデルの変更がそのモデルにしか適用されません。
上記の特性を理解しつつ,適切な方法でモデル管理を行う必要があります。
HILSには、モデル計算のRT性が必要という話があったが、事前にどういったモデルなら、どのくらいの速度で計算できるか、という事は分かるのでしょうか?
また、実際に使用したら、計算が遅かった場合は、モデルの簡略化以外に対策はあるのでしょうか?
HILSシミュレータのRT( Real Time )性について考えてみます。
・ HILSシミュレータは、コントローラと同期をとっていません。
すなわち、シミュレータから見ると、いつ変化するか
分からない入力信号に対し、十分短い時間に
反応する必要があります。
・ 上図のように、HILシミュレータの
制御周期が長いときを考えてみます。
このときコントローラでは、指示に対する結果を
すぐに受け取ることができません。これでは間違った結果となります。
・ 右下図のようにHILシミュレータの
制御周期が十分短いと、連続時間のように
計算結果が得られます。究極には
「コントローラから見て、アナログに見えること」に
なるのだと思います。
ご質問中の「モデル計算のRT性が必要」とは、
このように、(短くても)指定された制御周期の間に
すべての処理が終わる性能のことを意味しています。
本講座では、コントローラの制御周期 0.05 [s] に対し、
HILシミュレータでは 0.01 [s] で動作させています。
HILSシミュレータの制御周期が短くできない場合、より演算能力の高いハードウエアへの変更を検討する必要があるかもしれません。

テキストP-P. 3-78 実装ではキャスト(整数型の信号に)するとありますが、実物の機器に信号を送る場合、キャストが必要となる場合があるという理解であっていますか? MILS上では、整数値であれば、計算数値としては問題ないという理解であっていますか?
① 実物の機器に信号を送る場合、キャストが必要となる場合があるという理解であっていますか?
概ね間違いありません。PWMやA/D変換はマイコン内のレジスタにデータを転送することでレジスタの値に応じてハードウェアからの出力が変更されます。たとえば,PIDやAVRなどの8bitマイコンの場合,これらのレジスタにアクセスする変数の型が整数型(たとえば,charやunsigned int)として宣言されています。そのため,float型などによる実数値演算によって得られた結果はcastなどを用いて型変換することが一般的です。
② MILS上では、整数値であれば、計算数値としては問題ないという理解であっていますか?
はい,間違いありません。
同じbit数でA/D変換することを前提とした場合、入力範囲が広いほうが出力の精度が低下するということになるのでしょうか?
おっしゃるように,入力レンジが広がると読み取り誤差が大きくなります。
①量子化誤差について。
分解能を大きくすれば(bit数を増やせば)量子化誤差は小さくなり測定精度は上がると思うのですが、分解能を大きくするデメリットはあるのでしょうか。(計算回数が増えるから処理速度が遅くなる?)
②また、A/D変換器の処理速度は何に依存しているのでしょうか。
(例えばSimulinkで作成したA/D変換器のモデルはPC上で動かすので、CPUやメモリなどに依存しそうな気がしてます。
実際の自動車にもPCと同等以上のCPUがあるのでしょうか?)
① 一般的に分解能と変換速度がトレードオフの関係にあります。A/D変換器の変換速度の尺度はsps(Samples Per Sec)ですが,A/D変換器にも様々な方式があり方式によって分解能重視や速度重視の変換手法が存在します。
参考URL:これだけは知っておきたいアナログ用語
https://ednjapan.com/edn/articles/1003/03/news123.html
② A/D変換器自体は電子回路で構成されますので,電子回路の動作速度が重要になります。また,変換の方法にも様々な手法があり,これらの総合的な動作によって決定されます。また,通常,A/D変換器は複数のチャンネルで構成されていますが,同時サンプリングが可能なものとそうでないものがあります。同時サンプリングができないタイプは安価ですが,前のチャンネルの変換が終わらない限り,次のチャンネルのA/D変換が実行されないため使用するチャンネル数が多いほど,全体の変換にかかる時間が遅くなります。
参考URL:ΔΣ型ADコンバーター(東芝デバイス&ストレージ株式会社)
https://toshiba.semicon-storage.com/jp/semiconductor/knowledge/e-learning/village/ad-converter.html
コントローラモデルのデコーダ部分で、パルス発生器で活用しない i*[A]を出力させている意味がよく分かりませんでした。
今回は,電流を用いた演習をしておりませんので,おっしゃる通りその意図について分かりにくかったかと思います。例えば,電流モニタを行うことについては以下のような意図があります。
・ DCモータの動作原理から,電流のモデリング過程は重要になります。そのため,最終的にモデルと実機(DCモータ)の整合性を確認するためにあえて電流を表示しています。
・DCモータ制御ではトルク制御(いわゆる力制御)と呼ばれる方法があり,この場合は,電流をフィードバックすることで実現することができます。今回の研修ではトルク制御は行いませんが,一般的に,DCモータの制御において速度と電流は重要な信号であるので出力をしています。
業務でどの粒度まで作りこむかが重要で難しく感じました。簡略化し過ぎるとエクセルでも計算できるので、何を達成させるためにMATLAB/simulinkを使うか。
重要なご意見と思います。特に,過渡応答を含む設計においては微分方程式ベースの設計が非常に有用と思います。過渡応答を含むシステムの解析についてはPart5のラプラス変換・伝達関数もご参考にしてください。
DC Motor Systemをマスク化した際、内部に含まれる細部システムのブロックパラメータ、例えば電気子抵抗などをCD Motor Systemのブロックパラメータとして指定することは可能でしょうか。
はい,これまでの同様の方法で可能です。
今回マスク化について特に内容の記載ありませんでしたが、パラメータの設定は必要なしでよろしいでしょうか。
各コンポーネントをマスク化したのちに,テキストにブロックパラメータの指示がある場合はそちらのあたりを設定してください。
(今回のケースですと,内部のモデルパラメータがすべて決まっているので設定は不要です。)

パラメータ設計は、手動か計算機による総当たりかのどちらで設計することが多いのでしょうか。
手動の場合は職人芸になる気がしますし、計算機の場合は計算時間が膨大となって時間がかかってしまう気がします。
パラメータ調整については,様々なケースが想定されます。単純な制御系設計の場合は,制御系設計理論に基づいたパラメータ調整もありますし,パラメータが多数あるシステムの最適調整の場合,ハンドチューニングや各種最適化アルゴリズム(例えば遺伝的アルゴリズムや粒子群最適化)などが用いられるケースもあります。
dutyの分解能を上げるための手段を知っておきたい。
duty比の分解能についでは,利用するマイコンの性能に依存します。事前にマイコンにおけるduty比の分解能についてご検討ください。
分解能は8bitが一般的?それ以上だと、世の中にはどの程度の分解能を有したシステムが存在するか知っている範囲で教えてもらいたい。
一般的に8bitはかなり粗い精度となります(A/D,D/A,PWMのどの要素においても)。PWMはPWM周期などが絡むため一概にどの程度というのがご提示しにくいですが,A/D変換器の場合12bit ~ 16bit(高精度のもので24bit)などがあります。ただし,これらも入力レンジに伴って電圧の分解能が異なりますのでご注意ください。
何故2回Quantizerを入れているのか理解できませんでした。
混乱を招く表現となっており,申し訳ございません。本来ならば,Pulse Generatorブロックには量子化器は不要になります(Pulse Generatorには整数値しか入らないため)。そのため,実際に必要な量子化器は計算値に対して量子化を行っているPulse Generatorの外側の量子化気になります(これは,デコーダ部分でも実装しています)。ただし,Pulse Generatorに量子化器をつけずに少数を含む実数値を入力しても,それに伴ったデューティ比を算出する恐れがあり,今回は念のため量子化器を挿入しました。
受講者の皆様に誤解を与える可能性が大きいため,今後モデルの見直しも含めて検討をさせていただきます。
パルス発生器に入力される整数値(データ)の最大値はパルス発生器の分解能で決まると記載されていましたが、これはパルス発生器に入力できるデータの範囲(上限値)はパルス発生器の分解能によって決定されるという認識でよいのでしょうか?
はい,パルス発生器の分解能で決まります。通常,マイコンにおいてPWM信号はタイマーと閾値で決まります。動作原理を理解すると分解能の意味がより分かると思いますので,例えば,以下のページなどを参考にしてください。
参考URL:H8で学ぶマイコン開発入門(9) モータ制御に欠かせない技術“PWM”って何?
https://monoist.atmarkit.co.jp/mn/articles/0706/06/news132_3.html
アルゴリズムを3つの機能にわけた、とありますが、2つは前後の受け渡しのための必要な処置で、大事なのは中央だけ(いわゆるソフトのノウハウ)と理解します。
高度な機能を実現するという意味では,上記のご理解で正しいです。ただ,この受け渡しの部分を切り離すことによりソフトの可読性が向上しますので,処理部分と変数の変換部分は切り分けることを強くお勧めします。
ゲインのマスクパラメータ値を変数にすると異常なグラフになったのですがパラメータを変数にするのはNGでしょうか?
マスク化されたブロックのブロックパラメータへの値を変数とすることは可能です。
今K_p,K_i,K_dのパラメータは人間でいろいろ調整してやる最適パラメータを選んでいるが、あるアルゴリズムで、誤差信号によりK_p,K_i,K_dを自動更新で最適化することは可能ですか。
誤差からPIDパラメータを調整する方法は適応制御やセルフチューニング制御といわれる研究分野に相当します。
また,モデルベース開発PID制御研修では,制御対象のモデルから最適なPIDゲインを調整する方法についてご紹介します。
PID制御において、比例係数であるKp,Ki,Kdなどの最適値を自動で算出する方法について、気になりました。ザックリとした概要だけでもお聞きしたいです。
PID決定法については様々な方法がありますが,最もオーソドックスな決定法(ステップ応答法)を下記に示します。

目標回転数を変えると回転数によってはオーバーシュート量がかなり大きくなるような結果を得ました。回転数によって追従性に差がでるのは理屈的には成立するものでしょうか。この差に起因しているのはコントローラだけでなく全体システムによるもので複雑な問題でしょうか。
おそらく,目標回転数を大きくとることによってワインドアップ現象が発生していると考えられます(Part4でメカニズムを説明しています。シチュエーションは異なりますが,原理は同じです)。ワインドアップは積分器と制御入力に対する最大・最小値への飽和の組み合わせで発生します。そのため,飽和領域付近での動作が多いとワインドアップが起きやすくなり,オーバーシュートが多くなります。
この場合,出力の大きなモータを採用するなどして入力の動作領域を飽和領域から外したり,アンチワインドアップと呼ばれるアルゴリズムを採用してオーバーシュートをおきにくくする対処が必要となります。前者は,システム構成の見直し,後者はソフトウェアの見直しになりますが,どちらを採用するかについては設計者間でよく協議する必要性があるかと思います。
動画の中で、サブシステムだけが先に作られていたのは、どうやって作成したらよいですか?
説明不足で失礼いたしました。ライブラリブラウザの「Commonly Used Blocks」から「Subsystem」ブロックを選択いただくか,クイック検索で「Subsystem」ブロックをお調べいただくことで,空のSubsystemブロックを作ることができます。
本演習では、PIDコントローラにおけるPIDゲインは定数に設定していました。PIDゲインを時間tや入力の関数で設定する場合はございますか。
PIDゲインを時間的に変更するような制御には「適応制御」,「セルフチューニング制御」,「ゲインスケジューリング制御」などがあり,古くから研究されています。下記の記事が参考になると思いますのでご参考にしていただけますと幸いです。
【参考】
・PID制 御から適応制御へ
https://www.jstage.jst.go.jp/article/sicejl1962/23/5/23_5_437/_pdf
・セルフチューニングPIDの制御の動向 (PID制御-理論と応用総合特集号)
https://www.jstage.jst.go.jp/article/isciesci/42/1/42_KJ00001012048/_article/-char/ja/
・ゲインスケジューリングって何?
https://www.jstage.jst.go.jp/article/isciesci/44/11/44_KJ00001012634/_article/-char/ja/
本演習のPLDコントローラにおいて、微分ゲインを0と設定しました。回転数の目標値が一定値であり、目標値に収束すると回転数の変化量が0となるため、PID制御の微分部分を考慮しなくてもうまく制御することが可能になるという認識でよろしいでしょうか。
また、微分ゲインを0以外の定数に設定する場合は、目標値が一定値ではなく増加・減少する場合と考えているのですが、微分ゲインを0以外に設定する場合の例を教えていただきたいです。
大変重要なご指摘ありがとうございます。
まず,大前提としてPID制御によって目標値追従が達成できるのは目標値がステップ状(すなわち一定値)の時のみです。したがって,目標値が連続的に変化するようなケースにおいてPID制御で厳密な目標値追従は達成できません※1。そのため,仮に微分ゲインを設定したとしても連続的に変化する目標値に対して完全追従することは不可能になります。
詳細は省きますが,微分ゲインが必要な場面としては以下の2点を想定していただければと思います。
・システムにバネ項がある場合(微分動作がダンパの役割を果たすため,過渡応答の振動が改善されます)
・システムに「高次遅れ要素」や「むだ時間」が存在する場合(微分動作の位相進み特性によって過渡応答が改善されるケースがありますが,むだ時間が大きい場合は劇的な改善は望めません)
今回取り扱ったDCモータ制御装置では,上記の2つの条件を含まないため微分動作が不要となり0にしております。
D動作を取り扱うケースについてはPIDプロセス研修にて解説をしておりますので是非ともご受講いただけますと幸いです。
※1 証明にはラプラス変換の理解が必要なため詳細は省きます。こちらの内容についてもPIDプロセス研修にて解説をしております。
テキストP-P. 3-85 PID制御は最もオーソドックスな制御手法の一つという理解であっていますか?
はい,分野にもよりますが産業界のフィードバック制御の80%以上で用いられているといわれています。
入力の回転数[rpm]から出力のduty[%]は比例関係にあるためPID制御が使えているのか。
今回の例では、電流や電圧を目標としたPID制御も実施できるのか。
PID制御を用いるには必ず入力と出力に比例関係が必要か
ご質問いただいた通り,比例関係(線形)であるため,PID制御を適用することができます。また,電流や電圧を対象とした場合でも同様に線形であることからPID制御を適用することができます。なお,入出力が線形(下左図)だけではなく,下右図のような非線形であってもPID制御を適用することができます。ただし,非線形システムの場合,固定のPIDゲインでは良好な制御結果が得られない場合がありますので,その場合は,制御したい領域によって適切にPIDゲインを調整する必要があります。

演習3-9 システムパラメータ(モータ特性/ディスク特性)をmファイルで入力していますが、マスク処理した”モデル”においても、mファイル上のシステムパラメータ値の変更でモデルの変数を書き換えることができるということでしょうか?
マスク処理されたモデル内部の変数は基本的にワークスペースにある同じ名前の変数の値を参照します。ただし,マスクを作成した際に,「パラメータダイアログ」にて同様の変数名を持つパラメータを宣言した場合,ブロックパラメータで設定した値が参照されます※。
※次にブロックパラメータの設定の有無によるパラメータ出力の結果の違いを示しましたので参考にしてください。
今回の課題のブロックでは基本的にブロックパラメータの設定がなされていますので,ワークスペースの変更がそのまま反映されません。この場合,マスクをダブルクリックした際に出現するブロックパラメータダイアログにて,パラメータの値ではなくワークスペース上で宣言された変数名に置き換えることで,mファイルから値を書き換えることができるようになります。


今回の説明だとV字の左側はMILS、右側はHILSというイメージだったが、SILSという言葉もあり、SILSはMILSの中の一部と考えるべきでしょうか?
(MILSとHILSで分けたのはハード設計目線だからかもしれませんが)
それとも、SILSはモデルをコードで書いたものだと思うので、制御設計の場合V字の左側にMILSの次にSILSが来るイメージでしょうか?
おっしゃるようにSILSはC言語などのコードの実装・検証にかかわる工程です。したがって,例えばすでに設計されているコードベースで書かれた制御ロジック(またはその改良版)をプラントモデルと結合することでその検証を行います。位置関係としてはMILS内またはその下流のプロセスとして実行されるケースが多いです。
MILSやSILSの関係を記述したwebページなどがたくさんございますが,下記の説明が分かりやすいかと思います。
https://mbd-automobile.com/mils_sils_hils/
V字プロセスの話で、1Dモデルで機能を設計し、そのあと3Dモデルでの設計にはいる(3Dは制約を含むので先に1Dで機能を決定してそれを理想に3Dに入る)という話があった。 たしかにと思う反面、「形のアップデートをしたい!(小型化したい!とか)」から製品の要求が始まったり、形とソフトを平行して作ることで制作期間を減らしたりすることもあるんじゃないかなとおもい、理解はしたが少しもやもやした。
ご質問いただいた通り,形状から製品仕様を決めていく場合などは3Dモデル設計から進めることも有用になります。1Dならびに3Dモデルの特徴を理解し,適切に利用することが重要となります。
Part3 にて取り扱われたPIDコントローラの例では、回転数における目標値と現在値の差e(t) [rpm]から、PID制御ののち、デューティ比u(t) [%]に変換されていることは理解できました。
ただ少なくともP制御においては単位がrpmのままsum(add)ブロックに入っているのに、なぜ出力の単位が%になるのか物理的な観点では腑に落ちません。このように設定する意図等ございましたらお聞きしたいです。

アクセルでの車速調整のような場面(現在値=目標値となった場合に入力が0になる)では比例制御で追従できないとのことでしたが、入力が0になった場合に現在値(計測車速)が低下していくとすると、再度、現在値と目標値に差が生じ、その差を埋めるために入力を大きくするというような制御はできないのでしょうか?目標値との乖離が生じた際に入力するということになるので、結果的に目標値に対して実測値は波打つようなデータになってしまうかもしれませんが、比例制御でもある程度は追従可能なのではないかと思いました。
比例ゲインを上げることでご指摘の現象を起こすことができます(このとき出力が波打つ=ハンチング)が発生します。
ただし,このような現象は入力が激しく振動しますので制御工学的観点からは望ましくない現象となります。
一度お試しいただけますと幸いです。

教材として、すでにモデルのコンテキスト図が用意されているため、大まかなモデル構造をイメージしながら進めることができましたが、
今回のコントローラーモデル・プラントモデルのような「機能」を要素で考えてモデル全体の構成を考えるところが一番工数がかかり、難しいイメージです。
下流のモデル構築も考えて構成を考えないといけないため、「機能」として抜け漏れが発生することもあるかもしれないのですが、未然に防ぐにはどう考えて「機能」を分解していけばいいでしょうか?
大変重要かつ難しい問題かと思います。実際,システムに必要な機能はシステムに依存して異なるため,一概に論ずることが難しいと考えています。少し時間がかかるかもしれませんが,まずは,既存のシステムのモデリングを通じてシステム全体の1Dモデルを構築することで,システムの構成要素(機能)の全体像が見えてくるはずです。まずは,そのモデルを最低限必要な機能として定義をし,抜け漏れ等の防止に利用していくことになろうか思います。
モーターにも種類があるかと思いますが、例えばブラシレスモーターを制御する場合にはパラメータやブロック図はより複雑になりますか?
ブラシレスモータはブラシ付きDCモータと構成が異なりますので,モデル構造が異なります。また,インバータなどを必要とするため単純な伝達関数などの数理モデルで表現することが難しくなります。このような場合,MATLAB & Simulinkには,Simscape Electoricalと呼ばれるToolboxを用いてより簡単にかつ高精度なモデリングが可能となります。
参考:Simscape Electricalモーター制御設計
https://www.youtube.com/watch?v=ClfQgGZGAVc&t=1s
クオンタイザーの量子化間隔の意味がよくわかりません。
Quantizerブロックは,ブロックに入力される実数を与えられた区間で入力を離散化するブロックです。
Mathworks社のヘルプページによると,ブロックへの入力uに対する出力および量子化間隔qの関係は,"y = q ∗ round(u/q)"となっています。
ただし,roundは四捨五入の関数です。以下に一例を示します。結果から,出力が量子化間隔qの倍数で出力されていることがわかります。

制御入力を実現可能な入力とするために、PID制御の計算結果を制限するのはわかるのですが、液位モデルの積分ブロックのように、積分ブロック自体には飽和処理は不要でしょうか?(積分項で制御入力がたまっていくと考えますが)
大変重要なご指摘ありがとうございます。Part4のHILSの際に本件に関するポイントがありますので,ぜひともご指摘の点について実装をいただきその結果の違いについて考察をいただければと思います。
Simlinkによるモデル構築を行う際、モデルが正しく実行されているか確認するために、
データの流れを実行しながら追うことはできますか?
【意図】
実際に業務でSimlinkを使う際、プログラムにおけるデバッグのようなことを行う必要が出てくるのではないかと思いました。
そのような場合、どのようにデバッグするのだろうかと疑問に思った次第です。
以下の手順で信号線上に値を表示することができ,また,シミュレーションをステップ実行することで各ステップの信号を確認することが可能です。

参考URL(情報表示):https://jp.mathworks.com/help/simulink/ug/displaying-block-outputs.html
参考URL(ステップ実行): https://jp.mathworks.com/help/simulink/ug/how-stepping-through-a-simulation-works.html
「Part3_11_コントローラモデル(PID制御モデル)の設計02(PID制御器設計演習:約10分)」では、入力(Step)の初期値は1000ですか。
資料(テキスト)の様に設定したら(初期値→0)Scopeの結果は動画と異なります。
次の様に問題を考えてみました・。
下図の2つのシミュレーション結果のうち、0~1秒の応答が違います。両方とも目標値(SV)は1000ですが、テキストでは時刻1で目標値が1000となるのに対し、ビデオでは時刻0から目標値が1000です。
この違いは、どこで生じているのでしょうか。
回答
このSVは、テキスト P.200(スライド 3-93)のStepのブロックで
作られています(下図)。
このパラメータのうち、ステップ時間(出力が初期値から最終値に
変化する時刻)を1とするとテキストの応答、0とするとビデオの応答
となります。

Simulinkのモデル上で、ADコンバータの分解能と、パルス発生器の分解能をともに変数「n」で定義していますが、競合する問題は発生しないのでしょうか?マスクパラメータはmファイルのワークスペースで管理されていないための、同じ記号nを使っても問題ない、という理解で正しいか確認させてください。
はい。競合しません。
マスクエディタでパラメータを操作(テキスト P.136 スライド 3-30 参照)すると、そのブロックに固有のパラメータとして使用されます。
マスクエディタでパラメータを操作されたパラメータは、ブロックパラメータと呼ばれ区別しています(テキスト P.134 スライド 3-28 他)。
もちろん、MATLABのワークスペースからも独立したパラメータとなります。
微分方程式の立式がとても苦手なので、何か良い方法かアドバイスがあれば教えていただきたいです。

・Quantizerブロックの量子化間隔の単位が何か気になりました。1secという認識で正しいですか?
・実環境ではQuantizerブロックの量子化間隔の単位が何か気になりました。1secという認識で正しいですか?
Quantizerブロックの単位はy軸に関する単位になります(secはx軸に関する単位)。
MATLAB2021aで研修と同様のモデルを作成したところ,以下のような「XXXの‘InitFcn’ コールバックの評価中にエラーが発生しました。」というエラーが発生する。
何らかの理由で,ブロックにコールバック関数「InitFcn」が編集されていたことが原因のようです(通常はブロックパラメータにコールバック関数が記述されることはありません)。該当箇所を削除したところ動作を確認できました。

2章の液位プロセスでSaturationの使用は好ましくないという解説がありましたが、本章では数回Satulationを使用してモデルを構築しています。Saturationの使い分けがわからないので教えてください。
Saturationを用いる際に最も気を付ける必要があるのは,積分演算における飽和処理です(タンクシステムの例題など)。
A/D変換器やパルス発生器等の次元変換(静的な変換)の出力については飽和関数をつかっても問題になることはありません。
ノイズが乗るという話がありましたが、MILSではノイズはあまり考えないべきなのでしょうか。
システムの理想的な動きを検証する際にはノイズモデルを作成する必要はありませんが,より現実的に近い想定でのシステムの挙動を予測する(例えばシステムがセンサノイズに対してどの程度堅牢(ロバスト)かを検証する場合など)には,ノイズを付与した検証を行う場合があります。
コントローラーの設計、にて、安いコントローラーと高いコントローラー、どちらも基本構成は同じという話があったが、じゃあなぜ高いものがあるのかその導入のメリットって何なのだろうと思った。
コントローラの価格は,サンプリング時間や拡張性,各種分解能などのハードウェア性能によって異なり,また,他のソフトウェアとの連携性など開発環境によっても異なります。
Part4 HILSによるDCモータ制御システムの機能評価
HILSでモデルの一部をECUに組み込んで、テストを行っているが、組み込んでいない部分のモデルを簡易化して(組み込んだモデル部分を動くため、最もシンプルなモデル)、検証を行っても構いませんか.組み込んでいない部分のモデルの粒度は決める必要がありますか。
MILSで全く見当をしていないモデルを入れる場合は,そのモデルが外乱因子となるので事前にMILSで検討をしておかれることをお勧めします。一方,MILSモデルで検討されていたモデルで実時間で実行することが困難な場合に簡略化することはよく行います。その場合も,事前にMILSにて予想される応答を事前に把握されておくことが良いと思います。
モデルの1部を実機に置き換えて検証する場合にI/Oは都度作成して実機側とのやりとりをしていく手間は発生しますでしょうか?
ハードウェアとの接続の際には,I/Oを都度作成の上,そのインターフェースの動作を事前に確認する必要があります。
センサ等の応答遅れを再現する為に、モデルをわざと遅延させることも出来るのでしょうか。
はい。「Transport delay」ブロックを用いて遅延を意図的に発生させることが可能です。
実際,センサの応答遅れはPart5で説明する1次遅れ系で近似するケースの方が多いです。
HILシミュレータの導入メリットとして環境を仮想的に実現可能で時間的、コスト的にメリットがあるとのことでしたが、HILSの段階で最初から実機を使ってテストを実施するというのは危険性としては実機を用意するための時間、コストがかかってしまうものであるとの認識ですが、それ以外にも破損等のリスクもはらんでいると考えたほうがいいでしょうか?
はい,特に要素が複雑に入り組んだシステムや,制御系を含むシステムの場合,要素の一部が定格を超えて破損につながる恐れが十分にございます。
「ARDUINOのブロックのSample timeを-1に設定する理由を知りたいです。
-1は継承と呼ばれる設定です。詳細については割愛させていただきますが,今回のケースですとコンフィギュレーションパラメータで設定されているサンプル時間がそのまま適用されます。
sample time = -1 とはどういう意味なのでしょうか?
1は継承と呼ばれる設定です。詳細については割愛させていただきますが,今回のケースですとコンフィギュレーションパラメータで設定されているサンプル時間がそのまま適用されます。
シミュレーションで動いたが、演習3-9のパラメータ設定がおかしかったのか、iやN*が動画と違う数値だった
エンコーダとデコーダの構成について再度ご確認をいただけますと幸いです。
Simulink Support Package for Arduino Hardware はどのようにしたらインストールできますでしょうか?
事務局が貸与しているPCの場合、当該アドオンのインストールは済んでおります。表示されていない場合は、以下の資料に基づき、
フォルダパスの再設定をお願いします。▼
https://digication.etudes.jp/jp/presentationlearning/image_learning/7ECB8ED9-568F-498F-BEC4-AD5FD87EC192/AFB39CB2-A44F-4898-A07B-F8DDD1B55435
ご自身のPC等にインストールされる場合には以下の手順でインストール可能です。MATLABのバージョンによってインストール方法が異なりますので,詳細についてはMathworksホームページ等をご確認ください。

単純な興味でお聞きしたいのですが、古い扇風機は始動時は高速で回転し、数秒後に「弱」程度の回転になるような動きをしていた記憶があります。これは今回の実験で起こっていた現象と同様の現象なのでしょうか?
通常,旧式の扇風機は交流モータ(ACモータ)が採用されているので,DCモータと根本的に動作原理が異なります。そのため,今回のケースとの関連性についてはすぐにお答えすることが難しく,申し訳ございません。
演習2-1でタンクフローしたあとは積分をしないよう積分ブロックに上限を設ける処理を追加しましたがその処理を追加しないのは実際には100%を超えるデューティ比になることはなく、立下り時にリセットを掛けるため問題ないから?
はい,今回のケースは積分のリセットによって問題を解決しています。おっしゃるように,タンクモデルのケースと今回のワインドアップ現象は,その原理が本質的に同じです。本来ならば積分動作に上下限を与えたいのですが,PID制御器は,P動作,I動作,D動作の各出力のバランスで成り立つために,I動作の上下限値が単純に0-100%になりません。したがって,今回は積分リセットという方法を採用しています。
しかし,この方法は制御系設計において本質的な問題解決にはなりません。
「モデルベースPID制御系設計研修」では,上記についての根本的な解決方法について説明していますので,ご興味があれば是非ともご受講ください。
口頭で述べられていたが、微分に対してはワインドアップ現象の様な特異な現象は存在しない認識でよいでしょうか。
微分の場合は特異な現象(デメリット)として「出力に重畳するノイズの増幅」があげられます。
この場合,微分の前にローパスフィルタを前置した「不完全微分」と呼ばれる微分を採用するケースが多くあります。
演習4-1のオーバーシュート発生原因とメカニズムがわかりませんでした。
最終パートの問題は,実務において制御器設計をしていると必ず遭遇する現象です。「ワインドアップ現象」というキーワードで調べていただき,ぜひとも自分の中でそのメカニズムを明らかにしてください(レポート課題にもなっています)。
ワインドアップの原因は「I動作」と「プラント入力(コントローラ出力)の上下限制約」

回転数が減少するとき、HILSのときは目標値に収束するように(変化率が小さくなるように)減少していましたが、実験では直線的に(変化率が一定で)減少していたように見受けられました。この原因として、積分値が0を下回っていることと、回転体が回転速度を保とうとする力が発生していることの2通りの原因を考えました。実験における回転数が直線的に減少するのはどのような原因によるのでしょうか。
重要なご指摘ありがとうございます。原因のひとつにモータドライバのブレーキ特性が考えられます。モータドライバには正転・逆転動作に加えて「ショートブレーキ」および「フリー」という動作があります。
下記の参考サイトの図を引用して説明をします。モータが回転している際には回転体(アルミ円板)に運動エネルギーが蓄えられています。このとき,モータの配線を回路から切り離すと蓄えられた運動エネルギーはベアリングにおける摩擦等の影響(すなわち機械損失)で徐々に減速されます(この時,モータを含む電気回路内では電流が発生しません)。一方で,モータの配線を,図2のようにショートさせると,逆起電力の影響で電流が流れることにより回転方向と反対方向のトルクが生じます。したがって,モータには上述の機械損失の影響に加えて,ブレーキトルクが発生することによって高速に減速することになります(これをショートブレーキといいます)。本研修におけるモデルは電圧が0となっても電流が発生するためにショートブレーキ動作が再現されます。一方で,動画の実験装置は装置構成の都合上,フリー動作となっているため,減速速度が緩やかとなります。その際,モデル化されていない機械的な要素の影響もあり直線的な応答となっていると考えられます。

【参考サイト】DCモータ・ドライブのエネルギーリサイクル(https://www.monolithicpower.com/jp/energy-recycling-in-dc-motor-drives)
演習課題4-1の解き方が難しかったです。考え方のポイントとしては
・MILSとHILSでの差異を疑う→今回はスイッチ
・関係ありそうな式や数値をscopeで観察する
ということでしょうか?
scopeでどこを見ればいいか、ピンときませんでした。何かコツがあれば教えてください。
ご質問の通り,動作の不具合の原因を見つけることは非常に時間がかかるものになります。MILSでは機能単位でモデル化しておりますので,機能毎に一つ一つ正しく動作しているか確認することが重要になります。その際に,サブシステムの正しい動きを『仮説』として立て,その仮説が正しいかどうかを『検証』していくプロセスが重要になります。今回の課題でいえば,「PID制御器」を一つの機能として確認していくことになり,その中に含まれる各信号をグラフ化し考察していくことで原因を見つけております。なお,適切な仮説を立てるためには,各機能のメカニズムを理解することが重要になります。
テキスト p.4-11 ③.mファイルにて、HIL_Simulater_sim_2016a.slx を開いていますが、
.slxを直接開くと問題がありますか?
モデルをハードウェアに展開する際に多数のファイルが生成されますが,これらのファイルはカレントフォルダの直下に生成されます。
MATLABやSimulinkを開いた直後は,カレントフォルダがデフォルトで生成された「MATLAB」フォルダに指定されているため,そこにファイルが生成されるため,関連するファイルが元のSimulinkファイルとは別にできてしまうこととなり保守性が悪くなります。
そこで,mファイルを実行する際に「フォルダの変更」を強制的に実施することで,カレントフォルダの位置を変更することで,Simulinkで生成されたフォルダが,すべてHILS関連フォルダにまとまることになります。
テキスト p.4-21 今回の実習では、下記の状態として動作させたという理解であっていますでしょうか?
・コントローラの”制御アルゴリズム” だけを simulink(PC) で演算し、HILとのアナログ信号のやり取りはArduino Mega に搭載された機器で行っていた。(エクスターナルモード)
・HILの”モータドライバ” ”モータ&ディスク” ”タコメータ” ”電流センサ” はHILのマイコンで演算実行していた。(RoTH で マイコンにプログラム:モデル書き込み、実行)
ExternalモードとRoTHはどちらも実行されるメインのモデルはマイコン上で実行されます。
Externalモードでは上記のモデルのほかに,Scopeで指定された信号をPC側に送信する機能が併せて書き込まれることで,マイコン内の信号をPCで確認できるようになります。
HILシミュレータにsimモデルを展開するのは電源を入れるたびに実行しないといけないでしょうか?(電源を切ってもsimモデルは記憶されているでしょうか?)
HILシミュレータの場合は,RoTH (Run on Target Hardware)モードで書き込みを行っていますので,電源を切ってもそのプログラムが保持されています。一方で,コントローラはエクスターナルモードで書き込みを行っており,これは,Simulink実行毎にモデルを展開する必要があります。
mファイルを実行したときsimファイル画面に行きますが、計算が実行されていないときがあります。
simファイルの実行ボタンを押せば問題はないのですが、なぜこのようになるのかが不明です。
申し訳ございませんが,詳細な状況が分かりませんので,個別の対応とさせていただけたらと思います.
ソフトウェアの不具合の可能性もありますが,プログラム(mファイルの記述方法)については,下記をご参考ください.
本研修では,mファイル上で下記の関数を用いることで,mファイルを実行するだけで,同時にSimulinkモデル(.slx)を「開き」,「実行」するようにプログラムを構築しています.
※関数を用いてコードを書かないと,mファイルを実行するだけでは,Simulinkモデルは実行されません

今回HILSで検証してみた結果ワインドアップという不具合を見つけて対策するという流れを体験しましたが、そもそもMILSの時点でこういった不具合を見つけることはできないものでしょうか?
また今回はスイッチで電源を入れるという仕組みをHILSで再現していたので不具合を見つけることができましたが、スイッチの再現をHILSモデルに入れ忘れているとHILSのシミュレーションも間違いということになり不具合に気付かないままということがあり得ると思います。こういうケースはどのように回避すべきでしょうか?
MILSでの検証段階で不具合を見つけるためには,様々な使用条件や環境条件のもとで検証すること(徹底的なシミュレーションの実施)が重要だと思います.例えば,今回の研修で取り扱ったワインドアップ現象は,スイッチがオフの状態(制御器による制御入力が反映されていない状態)で,制御器が計算を繰り返す(積分ブロックの出力値が増加する)ことで発生します.このような使用条件があらかじめ想定できていれば,MILSでの検証段階で不具合を見つけ,対策した上で,HILSでの検証に移行できます.
また,MILSやHILSでの検証における利点は,現実では再現することが難しい条件のもとで検証できることです.
例えば,自動車の雪上での走行や石畳みの道路の走行など,過酷な環境や日本では見られないような条件のもとでの検証を容易に,かつ安全に行うことができます.
実務レベルの開発・設計の役に立つような回答をするのは難しいご質問ですが,
つぎのことが重要だと考えております.
ありたい姿(目標)から何をすべきか(設計)を考えるバックキャスティング思考
システムが所望の性能を発揮するように機能の配分(機能を分解)
今回の研修では,スイッチを後出しのように追加しておりますが,ありたい姿を実現するために,
スイッチが必要なのかどうかをV字開発プロセスの左バンク上部で十分に検討した上で,
設計・検証に移ることが重要かと思います.

PC上とHW上の結果を比較することができるので大変有効だと感じました。
HILSでの検証結果がMILSと異なった場合に、その原因を究明できるかが経験値が無くて難しそうと感じました。
(原因究明の方法は,対象システムにも依存しますし,具体的な方法の提示は難しいですが…)
対象システムを理解し,モデルを構築するためには,様々な分野(機械,電気,流体,熱など)の知識・経験が必要になるかと思います.MBDの利点(目指しているところ)は,様々な分野を専門とする技術者集まって,「モデルを共通言語」として横断的な活動・ディスカッションができることだと考えております.
今回の研修を通じて,具体的なモデリング技術の向上だけでなく,MBDの考え方が皆様の今後の業務に少しでもお役に立てれたら幸いです.
HILSとしての使用目的によりますが、「DC Motor System」のHILSとしては"Vs[V]"端子は本来あるべきではないかなと感じました。
(機能検証のシミュレーションにてVs電圧がおかしくないか(印可の有/無等)の検証項目が出てくるはずでは?と思いました。)
ご指摘の通り,DC Motor Systemでは,アンプ(モータドライバ)に電力を供給する外部電源を機能の一つとして考えて検証すべき場合があります.例えば,バッテリーを電源として用いる場合では,電源(バッテリー)のモデル化や機能検証が機能の実現のために重要な要素になります.なお,本研修では,安定化電源を外部電源として用いることで,モータドライバに安定的に24 [V] 供給できるため,外部電源のモデル化,検証を省略しております.
Simulink内で使用している変数を検索して、ヒットした変数が使用されているオブジェクトに飛べる方法はありますでしょうか?
Simulink内のモデルエクスプローラを用いることで,モデルの検索等を行うことができます。

HILSの実機があってとても分かりやすかった。
MILSで見えなかった手戻りをHILSで発生した手戻りをMILSで対策を見つける流れはMBDの流れとしてとてもイメージしやすかった。
MILSやHILS以外にもxILSと呼ばれるものはあると思うが、他にどんなものがあるのかあれば知りたい。(SILSは知っているが他にもあるのか)
この度は研修をご受講いただきありがとうございます。また,実機を用いてイメージがつかめたとのこと大変うれしい限りです。
Part4の最終スライドにも記載をしておりますが,概ね,MILS,SILS,HILSがxILSと呼ばれる部類では基本的な構成になります。
そのほか,制御開発に特化したRCP (Rapid Control Prototyping)と呼ばれる工程があり,これは実機に対して,RCPコントローラ(量産コントローラよりもハイスペックなコントローラとご理解ください)と呼ばれる特殊なハードウェア上にコントローラモデルを実装し,その制御アルゴリズムの検討を行う工程もございます。

Part4_08_モータ制御システムの実演(実習動画)にて、DCモーターの電磁ブレーキ再現が不足しているとあったが、どう不足しているのか、ご教授下さい。(現象・原理理解が追い付いていないです。)
一般的に電磁ブレーキ状態とは左図のような状態を指します。しかしながら実際のDCモータシステムではメインスイッチのON-OFF伴ってモータの通電状態を強制的に切っております。そのため右図のようにスイッチのOFFにした場合は回路内に電流が流れず改正電流による減速トルクが発生しません。MILSならびにHILシミュレータでは,OFFスイッチ時には左側のショート状態のモデルとなっているため,厳密には右図の状態が再現できていないことになります。

要件の定義をする会社とモデル設計をする会社が異なる場合、作成したモデルが要件定義通り正しく作れていることを保証するにはどんな観点でチェックする必要があるのでしょうか?
・MBDが進むと、実機確認(HILS)が必要無くなるようになるのでしょうか?または世の中的にそちら方向に動いているのでしょうか?
(モータ制御のように、問題が無い限りMILSの結果とHILSの結果が変わらず、プロセスのためだけにHILSを実施するような状況があるため)
まずモデルを作成するにあたり各企業同士でプロトコルを規定しこれに準拠したモデルを作成する必要があるかと思います。現在,JMAAB(Japan MBD Automotive Advisory Board)やJAMBE(MBD推進センター)などがモデル作成のガイドラインを作成しており,これらのガイドラインをもとにモデルの作成を進める必要性があるかと思います。モデルの妥当性検証については,検証用のテストケースを作成し実施をする必要がありますが,近年ではMATLAB and Simulinkなどにおいてはテスト用のツールなども普及してきているため,これらのツールを活用することも考えられます。
また,フロントローディングの観点から,MILSによる設計や解析の比重が高くなることが想定されます。ただし,MILSやHILS,RCP(コントローラ設計の場合)の特徴を把握し,適切に運用することが開発の効率化のカギになるかと思います。
参考URL(Simulink Test):https://jp.mathworks.com/products/simulink-test.html
モデルやハードウェアを実際に動かして躓いてみることで、問題点や解決策についてじっくり考えることができ、コントローラやプラントのモデリングへの理解を深めることができた。今回はスイッチによるワインドアップ対策に積分器の外部リセットを使用したが、他にも実装が容易な対応方法があれば、後学のために教えていただきたいです。
積分リセットは,リセットの条件漏れがある場合に有効に作用しない場合があります。そのため,制御則として速度型PID制御則を採用することで,ワインドアップの問題を改善することが可能です。速度型PID制御則については「モデルベース開発PID研修」で説明をしておりますので是非ご受講を検討いただけますと幸いです。
間違えてサブシステムかしたときの元に戻す方法が知りたいです。
該当するサブシステムを右クリックし,「サブシステムとモデル参照」→「サブシステムの展開」をクリックすることでサブシステムを展開することができます。
参考URL(サブシステムの内容の展開):https://jp.mathworks.com/help/simulink/ug/expand-subsystem-contents_ja_JP.html

実施した結果が動画と異なったためモデルを見直すとManual Switchの切り替えが違っていた。
原因がManual Switchであると判明するまで時間がかかったため、実業務ではモデルの状態と結果の結び付けおよび管理が重要であると感じた。
mファイルで変数管理はできるが、Manual Switchの管理も可能なのでしょうか?
また、より複雑なモデルとなったときに変数やモデルの状態を管理する良い方法はあるのでしょうか?
今回のケースですと,set_param関数を用いてMATLABコードからManual Switchの状態を変更することが可能です。
また,複雑なモデル管理についてはSimulink内部の「モデルエクスプローラ」を用いて管理を行います。
モデルエクスプローラの詳細な操作方法についてはMathworksのヘルプなどをご参照ください。
参考URL(Manual Switch):https://jp.mathworks.com/help/simulink/slref/manualswitch.html
参考URL(モデルエクスプローラ):https://jp.mathworks.com/help/simulink/ug/workspace-variables-in-model-explorer.html

・Simulink上の設定をエクスターミナルモードへ変更しましたが、これはそもそも外部機器(HILController)を接続しているからでしょうか?
・HILSでの計測結果とMILSの計測結果の違う場合、Scopeブロックつけての診断方法を学びましたが、地道に原因見つけるのは難しそうに感じました。
・Part0でHILS動作チェック行ったときにお知らせするのを忘れていましたが、動作チェックでSimulink実行し、Scopeで
モニターすると、電流i*[A]が開始0出力からではなく、-1付近から出力していました。
part4はこのまま進み、HILシミュレータの青色ボタンONで回転と電流値はあがってます。何かの設定だったかもしれませんがお知らせします。
・エクスターナルモードはコンピュータで処理をしている信号をリアルタイムモニタリングできます。今回は,コントローラ側の信号(センサ信号値,PIDコントローラ出力など)をモニタリングする目的からエクスターナルモードを利用しております。
・申し訳ございません,電流値のずれ(バイアスが生じる)に関してはハードウェア側の調整不良によるものです(発送前に確認はしておりますが,輸送の段階で校正値がずれてしまった可能性がございます)。今回,電流値は制御に直接関係はございませんので申し訳ございませんが,ご了承をいただけますと幸いです。
①今回の例では、「HILSで不具合発生」→「原因分析」→「MILSで再現試験、対策」→「HILSで対策し、検証」の流れでした。
不具合が発生してすぐに原因が分かった場合はMILSの再現試験を飛ばしてもよいのでしょうか。
②実機検証で、下限方向でもワインドアップ現象があるとご説明がありました。
MILS、HILSでは発生しなかったと思われますが、再現するための条件を教えていただきたいです。
①不具合の原因をモデルに反映し,今後の開発にも利用される場合はMILSによるテストを行うことをお勧めします。モデルは長年にわたって継承がされていきますので,最終的にはMILSで起こりうる不具合がすべて予想できるようにすることが望ましいかと思います。
② 目標値を下図のように,2000→1000→・・・と減速を含むように設定すると,PID制御器によって計算される入力値が100を上回るまたは0を下回ることで,ワインドアップが生じます。そのため,ワインドアップは入力飽和領域を超えるPID制御器の演算値が生じた時点で必ず発生します。この演算値が飽和領域を超える要因は様々であり,演習で行ったモータのスイッチのONタイミングもその要因の一つです。

HILSシミュレータ、コントローラは市販していますか。
テキストに従い、Part3まで別途確認するために、MATLABとSimulink以外に必要なマスワークスのオプションはありますか。
もしくは、ScilabやXcosを使用しても同等のことができますか。
・HILシミュレータは一般社団法人デジケーション(dcoffice@digication.or.jp)にご連絡いただければ購入可能です。ただし,受注生産になりますので,少々お時間を頂戴いたします。
・Part3の内容(MILS)まではMATLAB と Simulinkのみで検証可能です。Part4では,Stateflowおよび無料のアドオンであるSimulink Support Package for Arduino Hardwareが必要です。
・ScilabおよびXcosにで,同等のシミュレーションは可能です。ただし,HILS等の動作保証はできませんのでMILSまでが実習可能です。
温調ユニットの制御定数を決定する際、ユニット単体+コントローラの試験で決定した制御定数を用いると、実機に搭載した際に制御がうまくいかないことがあります。実機に搭載した際の外乱が、温度制御に影響しているためだと考えられます。
これを解決するために、温調ユニットを含む実機全体のプラントモデル+コントローラのMILSで制御定数を決定し、温調ユニット(実機)+温調ユニット以外の実機モデル+コントローラでHILSを行い、制御定数の妥当性を確認する。という方法で検証すれば、実機搭載時の手戻りを少なくできるのではと考えました。
このように、HILSでは、プラントモデルの一部のみを実物で置き換えて、コントローラの動作を確認することもできるのでしょうか?
HILSにおいて,プラントモデルの一部を実物に置き換えて,コントローラの動作検証を実施することは可能です。このとき,インターフェース(熱交換など)をどのように設定するかが重要になるかと思います。本研修で取り扱ったように,電気的なインターフェースであれば比較的容易に導入することが可能だと考えられます。

ワインドアップ現象の対策について質問があります。ワインドアップ現象への対策として、今回はスイッチの切り替えを条件として積分器の累積誤差をリセットしました。その他のシチュエーションには使うことができない手法であるとのことでしたが、他にはどのような対策があるのでしょうか?
【意図】
その他のシチュエーションでは使えないと聞き、別のシチュエーションになった際、積分器にたまった誤差をリセットするという対策手法が変わるのか、それとも、スイッチの切り替えという条件の設定が変わるのか気になった次第です。
本研修では,外部情報としてスイッチ入力情報が利用可能なケースを取り扱いました。このとき,積分リセット条件を全て網羅(スイッチ以外の条件)しなければならず,もし条件が不足していれば,ワインドアップ現象が生じてしまいます。特にワインドアップはPID制御器によって計算された入力が飽和領域にかかった時点で発生するため,その要因は多様です。
この対策として,制御則として速度型PID制御則を採用することで,ワインドアップの問題を改善することが可能です。速度型PID制御則については,「モデルベース開発PID研修」で説明しておりますので,是非ご受講をご検討いただけますと幸いです。また,速度型PID制御則による対応以外にも自動整合型PID制御器などの構造を用いることでワインドアップを抑制することも可能です。
コントローラやMATLABを使用して、実際にモータ制御であり、実測値の測定などに使えることが理解でした。仕事で、別チームがこれを使い実機やベンチに落とし込んでいるのでやっていることがやっと理解できそうです。質問として、もしかしたら別の人が前回聞いていて重複していたら申し訳ないのですが今回のようにinfなどの時間の概念を無限=現場との時間に合わせるとして実行していましたが、一時停止などの機能はありますでしょうか
また、実行後のデータを何かしらの保存する?機能がありますでしょうか?やったことの確認や整理をしたいため。
エクスターナルモードは,現実世界と同様にリアルタイムで実行できるモードとなります。したがって,現実世界でも一時停止ができないように,エクスターナルモードにおいても一時停止機能が付与されていない状況のようです(通常のシミュレーションにおいては,一時停止機能がございます)。
また,シミュレーションデータの保存方法については,配布テキスト『スライド番号1-50, 51』にcsvファイルへの保存方法について記載しておりますので,そちらをご参考にして頂ければ幸いです。

Simulinkモデルから生成したCコードをコンパイルして実行する場合、環境上の制約はありますか?
(Windows向けにしかコンパイルできない、外部ライブラリが必要、等)
正確な知見が無く、以下は推測になります。申し訳ありません。
C (または C++)のコードを出力するには、Embedded Coder Toolbox が必要になります。
https://jp.mathworks.com/products/embedded-coder.html
embeded corder toolbox で検索すると、有用な情報を得ると思います。
計算のみの場合、これで生成したプログラムは多くのコンパイラで動作すると思います。
しかし、Scope などユーザインターフェース、ファイル管理などハードウエアに依存する部分がある場合、これらはOSやハードウエアに依存するため、適切なコンパイラでないと実行できない可能性があります。
以下は、少し上級者向けの解説です。
今回使用している Simulink Support Package for Arduino Hardware では、Arduino 上でプログラムを動作させるために C または C++ のコードが生成されます。しかし、CPU が AVR のため、AVR用のクロスコンパイラが用いられています。
HILSの実験で、作成したモデルを実行するときにできる 〇〇〇_ert_rtw のフォルダの中にある、○○○.mk を適当なエディタで開くと、実行時のビルドに関する情報を見ることができます。
これを見ると、コンパイラは avr-gcc や、avr-g++ が使われているようです。
・エクスターナルモードを選択できないのですが、どのようにしたら選択できるようになるか教えていただきたいです。
・実行モードの「エクスターナル」が見つかりませんでした。「ノーマル」「アクセラレータ」「ラピッドアクセラレータ」はあるのですが、「エクスターナル」がプルダウンに出てきませんでした。(バージョン:2021a) 一応「ノーマル」でも動きはしました。
・エクスターナルモードを選択できないのですが、どのようにしたら選択できるようになるか教えていただきたいです。
Simulink Support Packageが上手くインストールされていない,あるいは,関連するパスが正しく登録されていない可能性があります。
・ モデルコンフィギュレーションパラメータでハードウェアの選択が正しく行われているか確認してください。
・ 「ホーム」→「アドオン」→「アドオンの管理」からSupport Packageのインストール状況について確認ください。
・ お知らせにパスの登録について資料をアップロードしましたのでこちらも確認ください。
ノーマルモードとエクスターナルモードの違いがあまり理解できませんでした。また、2021aではエクスターナルモードでの実行は監視と調整で良いのでしょうか。
ノーマルモードは実時間(リアルタイム)実行はできません。そのため,実時間による実行においてはエクスターナルモード(監視と調整)を選択いただく必要があります。
ワインドアップの影響を軽減するために、積分制御の係数K_iを小さい値に設定することを思いついたのですが、こういった調整はあまり行わないものでしょうか
積分を小さくすると速応性が低下するため,目標値追従特性が悪くなります。また,操作量が飽和領域を超える(あるいは下回る)時点でワインドアップが発生するため根本的な対策にはならないことに注意が必要です。
Simulinkを使って、外部機器を操作するコントローラについて、個人レベルで購入し、使用できるものがありましたら、紹介していただきたいです。
Simulinkを使ったコントローラ開発においては,Mathworks社が「Simulink Support Package for XXXX」という無料のアドオンを提供しているか否かが大事になります。ArduinoおよびRasberry Piはどちらも比較的安価に購入できるのでお勧めです。
また,今回利用したArduino Mega2560は8bitのAVRマイコンベースですが,Arduino MKRなどはコンパクトながら32bit ARMマイコンが搭載されています。
・ Simulink Support Package for Arduino Hardware
・ Simulink Support Package for Raspberry Pi Hardware (Raspberry PiはアナログIOが搭載されていないため注意)
積分器の振る舞いや、モデル化時点で考慮していない要因により意図しない作動が起こる事が体感でき、自分が実現しようとしている制御に関して、どの様な外乱・入力があるかを事前に十分考えておく必要がある、と言う事を演習を通して理解できた。
今回は制御モデルではあったが、機能毎に分けられた物理モデルで有っても、同じであると言えますよね?
その通りでございます。1日目の研修(テキストpp.2-25: 演習2-1)における水があふれるタンクモデルでは,飽和関数を用いると正確な水があふれる現象を表現できておりませんでした。これは,PID制御のワインドアップと同じ現象となります。
Part5 ラプラス変換
この先の講習ででてくるとはおもいますが、Gainにあたる定数が、制御したい対象固有の変化を伴う場合(例:伸ばせば伸ばすほど反力が変化するバネ※実験値により変化率は自明)にはどのような手段があるか知りたいです。

どのような波形であれば動特性が線形と言えるのでしょうか
例えば,下図のようにステップ入力の大きさが変わったとしても,最終値の63.2%に到達するまでの時間(時定数)が変わらないようなものが動特性が線形なシステムにあたります。つまり,伝達関数を構成する動特性に関するパラメータ(時定数,固有周波数,減衰係数)が時間や動作点に応じて変化しないようなシステムが動特性が線形なシステムにあたります。

p5-18のばね・マス・ダンパ系の伝達関数を求めるためのラプラス変換をする際に、重力Mgが考慮されていないのは何故でしょうか。

ラプラス変換表が正しいのか自分で計算してみたところ疑問点がありましたので質問をさせていただきます。


伝達関数が標準形に直せないときはどうするのか気になりました。
標準系にできない伝達関数が存在する場合,たとえば,以下のような分母系列表現を用いることでシステムの立ち上がり時間とシステムゲインを得ることができます。この方法を利用した制御系設計法を「部分的モデルマッチング法」とよび,主にプロセス(液位,圧力,流量など)の制御現場で利用されています。

MILS設計において、どこでTransfer Fcnブロックを使っていくかはまだ理解が追いついていません。これもサブシステムの挙動確認で伝達関数を使いパラメータ決定をするのかなと考えています。
例えば,MILSで行った分圧回路モデルの設計のように,「所望の機能動作」だけがわかっているケースの場合,伝達関数を用いると動特性を含む理想機能をモデルとして表現することができます。
SimulinkにおけるTransfer Fcnブロックについての質問がございます。演習5(1)では、ステップ入力u(t)をそのままブロックに入力し、y(t)が出力されていました。しかし、ブロック自体は伝達関数を表しており、入力U(s)、出力Y(s)が自然だと感じました。ここで質問なのですが、本ブロックは入力をラプラス変換、出力を逆変換しているのでしょうか。また、そうである場合、ラプラス変換だけ行えるブロックは存在しますでしょうか。/
おっしゃるように,厳密には伝達関数への入力はU(s),Y(s)のようなラプラス変換された信号形式で挿入されなければなりません。しかしながら,Simulinkの場合はすべての信号が時間関数(例えばu(t),y(t))として扱われています。したがって,Simulink内部ではsを微分演算子(1/sは積分演算子)として取り扱っているにすぎず,実際には伝達関数に対応する微分方程式を解いていると考えられます(下図)。したがって,ラプラス変換自体を純粋に扱うことはできません。

ラプラス変換を用いてシステムの挙動が解析できるのであれば、Simulinkでシミュレーションする必要がないように思うのですが、使い分けの考え方などあるのでしょうか?
(制御工学,制御器設計の観点から)
伝達関数表現を利用したシステムの解析や制御器設計において,時間空間のシステムを周波数空間の伝達関数に変換するためには,対象とするシステムが線形微分方程式である必要があります.そのため,対象システムが線形システムである場合は,Simulinkでのシミュレーションをすることなく,システムの解析や理論的に所望の制御器を設計することができます.しかしながら,実在するシステムの多くは非線形システムであり,対象システムが非線形システムの場合は,伝達関数を求めることはできません(ラプラス変換による解析ができません)ので,詳細なモデリングや検証のためにSimulinkを用いることが有効な手段の一つになります.
また,非線形システムを線形近似することで伝達関数表現に変換することはできますが,線形近似の際にモデル化誤差が生じます.近似された線形システムに基づいて設計された制御器は,近似された線形システムに対して所望の性能が得られても,実際の非線形システムに対しては所望の性能が得られない可能性があります.この場合においても,Simulinkによってモデル化した非線形システムを対象にシミュレーションを実施することが制御器の性能検証に有効な手段の一つになります.
線系システムの説明の中で、線形システムとは静特性が比例なだけでは線形とは言い切れず、動特性についても線形である必要があるという説明がありありましたが、理解できませんでした。動特性について線形なシステムについて補足を頂きたいです。

講座では一次遅れ系と二次遅れ系について学習しましたが、いったい何次遅れ系まであるのか気になりました。さらに高次な遅れ系だと、伝達関数も一層複雑なものになるのでしょうか。
