Simulink モデル作成時の一般的な注意事項
無効ループの回避
ブロックの出力を直接的または間接的に (すなわち、他のブロックを介して) ブロックの入力に接続することによりループを作成することができます。ループは非常に有用性が高くなっています。たとえば、ループを使用して、微分方程式をブロック線図で解いたり (簡単な連続システムのモデル作成を参照)、フィードバック制御システムのモデルを作成したりすることができます。しかし、シミュレーション対象にできないループを作成することも可能です。一般的な無効ループのタイプは次のとおりです。
無効な関数呼び出し接続を作成する、または関数呼び出しの入出力引数を修正しようとするループ (Function-call Subsystem の詳細は、Function-Call Subsystem の使用を参照)。
非ラッチ式 Triggered Subsystem を含む自己トリガー型のサブシステムおよびループ (Triggered Subsystem の詳細については、『Simulink® ユーザー ガイド』ドキュメンテーションのTriggered Subsystem の使用、ラッチ式入力の詳細については、『Simulink リファレンス』の関数 Inport を参照)。
アクション サブシステムを含むループ
Triggered Subsystem および Function-Call Subsystem の例については、Simulink Subsystem のセマンティクスを参照してください。
ユーザー独自のモデルの中で無効ループを作成しないように、これらの例について学習することも有益かもしれません。
無効ループの検出
ユーザーのモデルに無効ループが含まれているかどうかを検出するには、ツールストリップの [モデル化] タブから [モデルの更新] を選択します。モデルに無効ループが含まれている場合は、その無効ループが強調表示されます。これを次のモデルで説明します。
またこのとき、診断ビューアーにエラー メッセージが表示されます。
優先順位の低いファイル
MATLAB® パスに同じ名前 (たとえば、mylibrary.slx
) のモデル ファイルが 2 つある場合は、パスの上位のファイルが読み込まれ、下位のファイルは「優先順位が低い」とみなされます。
ヒント
優先順位の低いファイルの問題を回避するためには、Simulink 基本設定 [MATLAB パス上の優先順位の低いモデルを読み込まない] を有効にします。Do not load models that are shadowed on the MATLAB pathを参照してください。
Simulink がモデル ファイルの検索に使用するルールは、MATLAB ソフトウェアで使用されるルールに似ています。MATLAB 検索パスとはを参照してください。ただし、Simulink のブロック線図と MATLAB 関数の処理方法には、読み込まれたブロック線図は、MATLAB パス上の位置に関係なく、読み込まれていないブロック線図よりも優先される、という重要な違いがあります。これは、パフォーマンス上の理由から、Simulink のインクリメンタル読み込み処理の一部として実行されます。
読み込まれたブロック線図がその他のブロック線図よりも優先されるのは、特に、ブロック線図は、対応する Simulink ウィンドウを表示しなくても読み込むことができるため重要な意味をもちます。
正しいブロック線図が読み込まれていることの確認
ライブラリと参照モデルを使用している場合は、ウィンドウを表示せずにブロック線図を読み込むことができます。ブロック線図がメモリ内にあるときに MATLAB パスまたは MATLAB の現在のフォルダーが変更されると、これらのブロック線図は、同じ名前の他のファイルの使用を妨げる可能性があります。
たとえば、mylib
という名前のライブラリをもつモデルを開き、別のフォルダーを変更した後に、mylib
という同じ名前のライブラリをもつ別のモデルを開いたとします。最初のモデルを実行すると、2 つ目のモデルに関連付けられているライブラリが使用されます。
これにより、次のような問題が発生する場合があります。
シミュレーション エラー
ライブラリ リンクであるブロック上の "未解決のリンク" アイコン
誤った結果
問題の検出と修正
優先順位の低いファイルの問題を回避するためには、Simulink 基本設定 [MATLAB パス上の優先順位の低いモデルを読み込まない] を有効にします。Do not load models that are shadowed on the MATLAB pathを参照してください。
ブロック線図を更新する場合、Simulink は MATLAB パス上のファイルの位置を確認して、同じ名前をもつ別のファイルが存在し、MATLAB パス上で上位にあることを検出した場合は、警告を発行します。警告は次のようになります。
The file containing block diagram 'mylibrary' is shadowed by a file of the same name higher on the MATLAB path.
mylibrary.slx
という名前の間違ったファイルが使用されていることを示すことができます。mylibrary.slx
という名前のどのファイルがメモリに読み込まれているかを確認するには、次のコマンドを入力します。which mylibrary C:\work\Model1\mylibrary.slx
mylibrary
と呼ばれるファイルをすべて表示するには、次の入力を行います。which -all mylibrary C:\work\Model1\mylibrary.slx C:\work\Model2\mylibrary.slx % Shadowed
mylibrary
という名前のブロック線図を閉じて、Simulink が MATLAB パスで最上位のファイルを読み込むようにするには、次のコマンドを入力します。close_system('mylibrary')
モデル作成のヒント
ここでは、モデル作成に役立つヒントを紹介します。
メモリに関して
一般に、メモリが多いほど、パフォーマンスは向上します。
階層の使用
サブシステムの階層をモデルに追加すると、多くの場合、複雑なモデルほどその恩恵が得られます。ブロックをグループ化すると、最上位のモデルが単純化され、モデルが読みやすく理解しやすくなります。詳細については、サブシステムの作成を参照してください。モデル ブラウザー (Simulink エディターを参照) は、複雑なモデルについての有効な情報を提供します。
モデルのクリーニング
組織化されドキュメントが付けられたモデルは、読みやすく理解しやすいものです。信号ラベルとモデルの注釈は、モデルで起こっていることを説明するのに役立ちます。詳細については、信号名とラベルとメモと注釈を使用したモデルの説明を参照してください。
モデリング手法
複数のモデルで同じブロックを使用している場合、これらのブロックを保存して簡単に再利用できます。たとえば、ブロックの集合をカスタム ライブラリに保存できます。その後、新しいモデルを作成するときに、これらのブロックをライブラリからコピーできます。
一般にモデルを作成する場合、まず紙面上でそれを設計した後で、コンピューターを使ってそれを作成します。次に、ブロックを 1 つのモデルにまとめる場合、ブロックを結線するラインを追加する前にブロックをモデル ウィンドウに追加します。このようにすると、ブロック ライブラリを開く頻度を少なくすることができます。