ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Simulink モデル作成時の一般的な注意事項

無効ループの回避

ブロックの出力を直接的または間接的に (すなわち、他のブロックを介して) ブロックの入力に接続することによりループを作成することができます。ループは非常に有用性が高くなっています。たとえば、ループを使用して、微分方程式をブロック線図で解いたり (簡単な連続システムのモデル作成を参照)、フィードバック制御システムのモデルを作成したりすることができます。しかし、シミュレーション対象にできないループを作成することも可能です。一般的な無効ループのタイプは次のとおりです。

  • 無効な関数呼び出し接続を作成する、または関数呼び出しの入出力引数を修正しようとするループ (Function-call Subsystem の詳細は、Function-Call Subsystem の使用を参照)。

  • 非ラッチ式 Triggered Subsystem を含む自己トリガー型のサブシステムおよびループ (Triggered Subsystem の詳細については、『Simulink® ユーザー ガイド』ドキュメンテーションのTriggered Subsystem の使用、ラッチ式入力の詳細については、『Simulink リファレンス』の関数 Inport を参照)。

  • アクション サブシステムを含むループ

Ports & Subsystems ライブラリの Subsystem Examples ブロック ライブラリには、Triggered Subsystem と Function-call Subsystem を含む有効ループと無効ループの例を説明するモデルがあります。無効ループの例には、以下のモデルがあります。

  • simulink/Ports&Subsystems/sl_subsys_semantics/Triggered subsystem/sl_subsys_trigerr1 (sl_subsys_trigerr1)

  • simulink/Ports&Subsystems/sl_subsys_semantics/Triggered subsystem/sl_subsys_trigerr2 (sl_subsys_trigerr2)

  • simulink/Ports&Subsystems/sl_subsys_semantics/Function-call systems/sl_subsys_fcncallerr3 (sl_subsys_fcncallerr3)

ユーザー独自のモデルの中で無効ループを作成しないように、これらの例について学習することも有益かもしれません。

無効ループの検出

ユーザーのモデルに無効ループが含まれているかどうかを検出するために、モデルの [シミュレーション] メニューから [ブロック線図の更新] を選択します。モデルに無効ループが含まれている場合は、その無効ループが強調表示されます。これを次のモデル (open) で説明します。

またこのとき、診断ビューアーにエラー メッセージが表示されます。

優先順位の低いファイル

MATLAB® パスに同じ名前 (たとえば、mylibrary.slx) のモデル ファイルが 2 つある場合は、パスの上位のファイルが読み込まれ、下位のファイルは「優先順位が低い」とみなされます。

ヒント

優先順位の低いファイルの問題を回避するためには、Simulink 設定 [MATLAB パス上の優先順位の低いモデルを読み込まない] を有効にします。MATLAB パス上の優先順位の低いモデルを読み込まないを参照してください。

Simulink がモデル ファイルの検索に使用するルールは、MATLAB ソフトウェアで使用されるルールに似ています。MATLAB ドキュメンテーションの MATLAB 検索パスとは (MATLAB)を参照してください。ただし、Simulink のブロック線図と MATLAB 関数の処理方法には、読み込まれたブロック線図は、MATLAB パス上の位置に関係なく、読み込まれていないブロック線図よりも優先される、という重要な違いがあります。これは、パフォーマンス上の理由から、Simulink のインクリメンタル読み込み処理の一部として実行されます。

読み込まれたブロック線図がその他のブロック線図よりも優先されるのは、特に、ブロック線図は、対応する Simulink ウィンドウを表示しなくても読み込むことができるため重要な意味をもちます。

正しいブロック線図が読み込まれていることの確認

ライブラリと参照モデルを使用している場合は、ウィンドウを表示せずにブロック線図を読み込むことができます。ブロック線図がメモリ内にあるときに MATLAB パスまたは MATLAB の現在のフォルダーが変更されると、これらのブロック線図は、同じ名前の他のファイルの使用を妨げる可能性があります。

たとえば、mylib という名前のライブラリをもつモデルを開き、別のフォルダーを変更した後に、mylib という同じ名前のライブラリをもつ別のモデルを開いたとします。最初のモデルを実行すると、2 つ目のモデルに関連付けられているライブラリが使用されます。

これにより、次のような問題が発生する場合があります。

  • シミュレーション エラー

  • ライブラリ リンクであるブロック上の "未解決のリンク" アイコン

  • 誤った結果

問題の検出と修正

優先順位の低いファイルの問題を回避するためには、Simulink 設定 [MATLAB パス上の優先順位の低いモデルを読み込まない] を有効にします。MATLAB パス上の優先順位の低いモデルを読み込まないを参照してください。

ブロック線図を更新する場合、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
MATLAB スクリプトを含む、MATLAB パス上にある mylibrary と呼ばれるファイルをすべて表示するには、次の入力を行います。

which -all mylibrary

C:\work\Model1\mylibrary.slx
C:\work\Model2\mylibrary.slx  % Shadowed

mylibrary という名前のブロック線図を閉じて、Simulink が MATLAB パスで最上位のファイルを読み込むようにするには、次のコマンドを入力します。
close_system('mylibrary')

モデル作成のヒント

ここでは、モデル作成に役立つヒントを紹介します。

  • メモリに関して

    一般に、メモリが多いほど、パフォーマンスは向上します。

  • 階層の使用

    サブシステムの階層をモデルに追加すると、多くの場合、複雑なモデルほどその恩恵が得られます。ブロックをグループ化すると、最上位のモデルが単純化され、モデルが読みやすく理解しやすくなります。詳細については、サブシステムの作成を参照してください。モデル ブラウザー (モデル ブラウザーを使用したモデルの階層構造の調査を参照) は、複雑なモデルについての有効な情報を提供します。

  • モデルのクリーニング

    組織化されドキュメントが付けられたモデルは、読みやすく理解しやすいものです。信号ラベルとモデルの注釈は、モデルで起こっていることを説明するのに役立ちます。詳細については、信号名とラベル注釈を使用してモデルを説明するを参照してください。

  • モデル作成戦略

    モデルのいくつかが同じブロックを使用する傾向がある場合、モデル内のこれらのブロックの保存を簡単にできます。その場合、新規モデルを作成するときに、このモデルを開くだけで、共通して使用するブロックをそこからコピーすることができます。ブロックの集合をシステム内に配置し、そのシステムを保存することによって、ブロック ライブラリを作成することができます。そうすると、その名前を MATLAB コマンド ウィンドウに入力することによって、システムにアクセスできます。

    一般にモデルを作成する場合、まず紙面上でそれを設計した後で、コンピューターを使ってそれを作成します。次に、ブロックを 1 つのモデルにまとめる場合、ブロックを結線するラインを追加する前にブロックをモデル ウィンドウに追加します。このようにすると、ブロック ライブラリを開く頻度を少なくすることができます。

関連する例

詳細