MATLAB System ブロックと System object を使用したカスタム ブロックの作成
このトピックでは、MATLAB System ブロックについて紹介します。このブロックを使用して System object™ を実装する方法を説明し、このブロックを Simulink® モデル用に構成する方法を示します。
System object
System object を使用すると、MATLAB® 言語でアルゴリズムを実装できます。MATLAB System ブロックでは、Simulink で System object を使用できます。
MATLAB System ブロックを使用する前に、System object を MATLAB System ブロックに関連付けなければなりません。System object は特殊な種類の MATLAB クラスです。System object は入力が時間経過とともに変化する動的システムを実装およびシミュレーションするために特別に設計されています。System object の作成の詳細については、System object の Simulink 向けのカスタマイズを参照してください。
MATLAB System ブロックを使用する理由
MATLAB System ブロックでは次のことができます。
Simulink との System object の統合
MATLAB と Simulink での同じ System object の共有
Simulink で使用する前の MATLAB でのアルゴリズムの単体テスト
ダイアログ ボックス カスタマイズのカスタマイズ
初期化の改善による効率的なシミュレーション
状態の管理
端子ラベルによるブロック アイコンのカスタマイズ
2 つのシミュレーション モードへのアクセス
System object は、他の MATLAB 製品に存在します。MATLAB System ブロックは、MATLAB 言語で記述された System object のみをサポートします。また、System object に対応する Simulink ブロックがある場合は、その System object の MATLAB System ブロックを実装することはできません。
メモ
Simulink 環境で MATLAB System ブロックと共に System object を使用するには、引数なしで呼び出すことができるコンストラクターがなければなりません。System object コンストラクターは既定でこの機能を備えており、独自のコンストラクターを定義する必要はありません。ただし、独自の System object コンストラクターを作成する場合は、引数なしで呼び出すことができなければなりません。
MATLAB アルゴリズムを Simulink に含める適切なブロック タイプの選択
MATLAB アルゴリズムを Simulink に含めるメカニズムは、次のように複数存在します。
MATLAB System ブロック
MATLAB Function ブロック
Interpreted MATLAB Function ブロック
Level-2 MATLAB S-Function ブロック
適切なブロックを選択する方法のヘルプについては、カスタム ブロックの機能の比較を参照してください。
MATLAB System ブロックを使用した Simulink での System object の実装
カスタムのブロック動作をもつ System object を Simulink で実装するには、MATLAB System ブロックを使用し、以下の手順に従います。
新しいモデルを作成し、そのモデルに MATLAB System ブロックを追加します。

テンプレートから新しい System object を作成する場合は、ブロックのダイアログ ボックスで、[新規] リストから、
[標準]、[詳細設定]または[Simulink 拡張]を選択します。必要に応じてテンプレートを変更し、System object を保存します。[System object 名] に System object の絶対パス名を入力します。リスト矢印をクリックします。現在のフォルダーに有効な System object があれば、それらの名前がリストに表示されます。
MATLAB System ブロックのアイコンと端子ラベルが、対応する System object のアイコンと端子ラベルに更新されます。たとえば、現在のフォルダーで
lmsSysObjという名前の System object を選択したとします。ブロックは次の図に示すように更新されます。
ブロックをダブルクリックします。MATLAB System ブロックのダイアログ ボックスに、System object パラメーターが反映されます。System object で MATLAB 言語を使用している場合、ダイアログ ボックスに [ソース コード] が含まれます。
以下の場合には表示されません。
System object を P コードに変換した場合。
getHeaderImplメソッドを使用して既定の動作をオーバーライドした場合。

[ソース コード] をクリックし、System object のパブリック プロパティとアクティブ プロパティが MATLAB System ブロックのダイアログ ボックスにブロック パラメーターとして表示されることを確認します。
[シミュレーション実行方法] パラメーターで、モデルでのブロックのシミュレーション方法を選択します (このパラメーターは、タブが 1 つしかない場合には各 MATLAB System ブロックの下部に表示され、タブが複数ある場合には最初のタブの下部に表示されます)。
メモ
ブロックを System object クラス名と関連付けた後、MATLAB System ブロックの同じダイアログ ボックスを使用して新しい System object を割り当てることはできません。代わりに MATLAB System ブロックを右クリックして [ブロック パラメーター (MATLABSystem)] を選択し、[System object 名] に新しいクラス名を入力してください。
別の System object でブロックを実装するには、MATLAB System ブロックを右クリックして [ブロック パラメーター (MATLABSystem)] を選択します。次に、ブロックのダイアログ ボックスを使用して、[System object 名] で新しいクラス名を特定します。詳細については、MATLAB System ブロックを使用した Simulink での System object の実装を参照してください。

ブロックのアイコンと端子ラベルの変更
マスク エディターを使用するか System object に特定のメソッドを追加することで、MATLAB System のアイコン、端子ラベル、ダイアログ ボックスをカスタマイズできます。
MATLAB System のアイコンやダイアログ ボックスの設計には、マスク エディターを使用します (R2023b 以降)。既存のマスクのカスタマイズをマスク エディターに移行することもできます。この機能を使用すると、System object ファイルでメソッドを開発または維持する必要がなくなります。詳細については、Customize MATLAB System Icon and Dialog Box Using Mask Editorを参照してください。
あるいは、System object にメソッドを追加して、ブロックのアイコンの外観やブロック ダイアログ ボックスを変更できます。
ブロックのアイコンの外観と端子ラベルを変更するときは次のようになります。
アイコンを定義するには、
getIconImplメソッドを実装します。端子ラベルを定義するには、入力を変更する
getInputNamesImplメソッドと出力端子ラベルを変更するgetOutputNamesImplメソッドを実装します。
例については、MATLAB System ブロックの外観のカスタマイズを参照してください。
これらのメソッドを実装しない場合、既定では、System object は
stepImplメソッドからの入力端子名および出力端子名を使用します。非直達を使用している場合、既定では、System object はupdateImplからの入力名とoutputImplからの出力端子名を使用します。MATLAB System ブロックのダイアログ ボックスを変更するには、MATLAB System ブロックの System object コードに
getPropertyGroupsImplメソッドを実装します。そのメソッド内に次のクラスを実装します。説明 matlab.system.display メソッド プロパティ グループのヘッダー テキストを定義します。
プロパティをグループ化します。
プロパティを個別のタブにグループ化します。
MATLAB System ブロック アイコンをイメージに変更
MATLAB エディターで MATLAB System ブロックのイメージを変更できます。使用できるイメージ ファイルの一覧については、「image」を参照してください。MATLAB System ブロック用に既存のイメージ ファイルを使用するには、次のようにします。
MATLAB System ブロックをダブルクリックします。
ブロックのダイアログ ボックスの [ソース コード] をクリックします。System object コードを含む MATLAB エディターが開きます。
MATLAB エディターで、[System ブロック] ドロップダウン リストから、[イメージ アイコンの追加] を選択します。
[イメージ アイコンの追加] ダイアログ ボックスで、[参照] をクリックして任意のイメージを選択します。
[OK] をクリックして、System object 内の
getIconImplメソッドに対応するコードを挿入します。
詳細については、プログラムによる System ブロックの外観のカスタマイズを参照してください。
MATLAB システム ブロックのサンプル時間の指定
ブロックのサンプル時間とは、ブロックが出力を生成する時期、そしてその内部状態を更新する時期を示すパラメーターです。MATLAB System ブロックにサンプル時間を指定するには、createSampleTime メソッドを呼び出す getSampleTimeImpl メソッドを実装します。現在のサンプル時間とシミュレーション時間を確認するために MATLAB System ブロックをクエリするには、getSampleTime メソッドと getCurrentTime メソッドを使用します。詳細については、MATLAB System ブロックの System object のサンプル時間の指定を参照してください。
離散サンプル時間を指定するには、
createSampleTimeメソッドで'Type'を'Discrete'に設定して'SampleTime'プロパティを設定します。継承されるサンプル時間を指定するには、
createSampleTimeで'Type'を'Inherited'に設定します。継承されるサンプル時間を使用するとき、'AlternatePropagation'または'ErrorOnPropagation'の名前と値のペアを指定することで、特定のサンプル時間を変更したり、エラー終了させることができます。固定マイナー ステップのサンプル時間を指定するには、
createSampleTimeで'Type'を'Fixed In Minor Step'に設定します。制御可能なサンプル時間を指定するには、ブロックの分解能 Tbase を構成します。Tbase は、ブロック実行間の最小許容時間間隔です。
createSampleTimeメソッドで、'Type'プロパティを'Controllable'に設定し、'TickTime'プロパティを Tbase に設定します。setNumTicksUntilNextHitを使用して、MATLAB System ブロックで n を設定できます。制御可能なサンプル時間を使用するブロックは、Tbase の n 倍時に実行するよう動的に設定できます。ブロックの次の実行は以下のようになります。Tnext = n Tbase + T (1)
詳細については、サンプル時間のタイプを参照してください。System object メソッドを使用する MATLAB System ブロックのサンプル時間を制御する方法の例を確認するには、MATLAB System ブロックの System object のサンプル時間の指定を参照してください。
ブロックのシミュレーション モード
Simulink モデルで MATLAB System ブロックを使用して、インタープリター型実行またはコード生成によるシミュレーションを実行できます。
インタープリター型実行では、ブロックは MATLAB 実行エンジンを使用してシミュレートされます。
メモ
インタープリター型実行では、[固定小数点の正味傾き計算に除算を使用] パラメーターを [コンフィギュレーション パラメーター] ダイアログ ボックスで
[オン]または[整数の逆数の場合にのみ除算を使用]に設定した場合、最適化されていない数値結果が得られることがあります。このような最適化されていない数値結果が得られるのは、MATLAB コードがこのパラメーターをサポートしていないためです。コード生成では、ブロックは生成コードを使用してモデルでシミュレートされます (コード生成をサポートする MATLAB コードのサブセットを使用する必要があります)。サポートされている関数の一覧は、C/C++ コードの生成でサポートされている関数およびオブジェクトを参照してください。
インタープリター型実行とコード生成
有効な System object クラス名を使用して MATLAB System ブロックを実装すると、[シミュレーション実行方法] パラメーターが使用可能になります。このパラメーターは、タブが 1 つしかない場合には MATLAB System ブロック ダイアログ ボックスの下部に表示され、タブが複数ある場合には最初のタブの下部に表示されます。[シミュレーション実行方法] パラメーターを使用してブロックのシミュレーション方法を制御します。次の表では、目的に合った値を選択する方法を説明します。
| アクション | 選択 | 長所 | 短所 |
|---|---|---|---|
モデルを最初に実行するときに、コード生成をサポートする MATLAB 関数のサブセットのみを使用して、MATLAB System のシミュレーションとコード生成を行います。このオプションを選択すると、生成されたコードがシミュレーションで実行されます。 |
| パフォーマンスが向上する可能性があります。 | System object が、コード生成をサポートする MATLAB 関数のサブセットに制限されます。シミュレーションの起動時間が長くなる可能性があります。 |
サポートされるすべての MATLAB 関数を使用してモデルをシミュレートします。このオプションを使用するとシミュレーションのパフォーマンスが遅くなる場合があります。 |
| System object には、サポートされている任意の MATLAB 関数を含めることができます。起動時間が短縮します。 | パフォーマンスが遅くなる可能性があります。System object の MATLAB 関数がコード生成をサポートしていない場合は、System object に伝播メソッドが含まれていなければなりません。 |
パフォーマンスを向上させるには、System object で伝播メソッドを使用することを検討してください。詳細については、伝播メソッドの追加と実装を参照してください。
メモ
Simulink モデルがノーマル モードでシミュレートするように設定されている場合に、コード生成で MATLAB System ブロックを使用すると、個々の MATLAB System ブロックはコード生成で高速化を活用できます。Simulink モデルがアクセラレータ モードまたはその他のターゲット モードでシミュレートするように設定されている場合、MATLAB System ブロックの [シミュレーション実行方法] パラメーターは効果がありません。ただし、例外が 1 つあり、モデルがアクセラレータ モードでシミュレートするように設定されている場合に、インタープリター型実行モードの MATLAB System ブロックを使用すると、このブロックはインタープリター型実行モードで実行されます。
コード生成を使用したシミュレーション
コード生成を使用して MATLAB System ブロックをシミュレートするには、互換性のあるコンパイラがご使用のシステムにインストールされている必要があります。サポートされるコンパイラのリストを確認するには、Supported and Compatible Compilers を開き、ご利用のオペレーティング システムに対応するタブをクリックし、[Simulink 製品ファミリ] テーブルの [For Model Referencing, Accelerator mode, Rapid Accelerator mode, and MATLAB Function blocks] 列を参照してください。
1 つのモデルが同一の MATLAB System ブロックの複数のコピーを保持できます。ブロックが以下に該当する場合、それらのブロックは同一と見なされます。
同じ System object を使用している。
信号、データ型および実数/複素数が同一の入力と調整可能パラメーターを保持している。
同じ値をもつ調整不可能パラメーターを保持している。
モデルが同じブロックの複数のコピーを保持している場合、ソフトウェアは各ブロックのコードを生成しません。そのブロックについて最初に生成されたコードがモデルで再利用されます。
MATLAB System ブロックの既定の入力信号属性
MATLAB System ブロックに、別のブロックの出力端子に接続されていないか指定不足の属性をもつ端子に接続されている 1 つ以上の入力がある場合、指定不足の属性の既定の入力信号属性は次のとおりです。
| データ属性 | 既定の設定 |
|---|---|
| データ型 | double |
| サイズ | [1 1] スカラー |
| 実数/複素数 | 実数 |
MATLAB System ブロックでの非バーチャル バスの使用
MATLAB System ブロックは非バーチャル バスを入出力信号としてサポートします。対応する System object 入力または出力は、非バーチャル バスで定義されたものと一致するフィールドをもつ MATLAB 構造体でなければなりません。System object 出力が MATLAB 構造体の場合、伝播メソッドを定義しなければなりません。また、getOutputDataTypeImpl メソッドは対応するバス オブジェクトの名前を返さなければなりません。このバス オブジェクトはベース ワークスペースまたはモデルにリンクされたデータ ディクショナリに存在しなければなりません。例については、MATLAB System ブロックでのバスの使用を参照してください。
メモ
出力が入力と同じバス型の場合は、propagatedInputDataType メソッドを使用してバス オブジェクトの名前を取得しないでください。代わりに、バス オブジェクトの名前を直接返さなければなりません。
MATLAB System ブロックの制限
以下の機能はサポートされていません。
| カテゴリ | 制限 | 回避方法 |
|---|---|---|
System object | System object の調整可能な文字ベクトルのプロパティは、MATLAB System ブロックでは調整不可能なパラメーターです。 | — |
データ型 |
| — |
サンプル時間 | MATLAB System ブロックを使用して連続時間またはマルチレート システムをモデル化することはできません。 | — |
線形化 | ヤコビアン ベースの線形化は使用できません。 | — |
グローバル変数 | モデル コンフィギュレーション パラメーターの [シミュレーション ターゲット] 、 [カスタム コード] ペインで定義され、System object で参照されるグローバル変数は、Stateflow® および MATLAB Function ブロックと共有されません。 | [コンフィギュレーション パラメーター] ダイアログ ボックスの [シミュレーション ターゲット] ペインの [カスタム コード インポート] をオンにします。 |
デバッグ | コード生成ベースのシミュレーションの MATLAB デバッグ。 | MATLAB System ブロックの [シミュレーション実行方法] パラメーターを |
固定小数点ツール | 固定小数点ツールは、MATLAB System ブロックについて、設計の最小値/最大値、最小/最大ログ作成、またはオートスケーリング情報を返しません。 | — |
モデル カバレッジ解析 (Simulink Coverage™ ソフトウェア) | Simulink Coverage では、[シミュレーション実行方法] パラメーターを | — |
MATLAB System ブロックと System object の例
MATLAB System と System object の例は、以下を参照してください。
| 例 | 説明 |
|---|---|
この例では、MATLAB System ブロックで使用する System object を開発し、ブロックのダイアログ ボックスを対話形式でプレビューする方法を示します。 | |
この例では、MATLAB System ブロックの外観をカスタマイズする方法を示します。 | |
この例では、MATLAB System ブロックのダイアログ ボックスをカスタマイズする方法を示します。 | |
この例では、MATLAB System ブロックの出力サイズ、データ型および実数/複素数を指定する方法を示します。 | |
この例では、System object のメソッドを使用して MATLAB System ブロックのサンプル時間を制御する方法を示します。 | |
この例では、System object を拡張して Simulink® で使用する方法を示します。 |