Simulink.Signal
オブジェクトを使用した信号の属性の指定および制御
Simulink.Signal
オブジェクトを使用すると、データ型、数値型、次元などの、信号や離散状態の属性を指定したり検証したりできます。プログラミング情報および参考情報については、Simulink.Signal
を参照してください。
信号属性の割り当てまたは検証に信号オブジェクトを使用する
この節では、信号属性の割り当てまたは検証に信号オブジェクトを使用する方法について説明します。同じ手法は離散状態にも適用されます。信号属性の割り当てまたは検証に信号オブジェクトを使用するには、以下のようにします。
属性を割り当てまたは検証する信号と同じ名前の
Simulink.Signal
オブジェクトを作成します。モデル エクスプローラーを開きます。
信号オブジェクトに必要なコンテキストに応じて、[モデルの階層構造] ペインで、ベース ワークスペースかモデル ワークスペースのノードを選択します。信号オブジェクトをモデル ワークスペースに作成する場合は、[ストレージ クラス] パラメーターを
自動
を設定しなければなりません。[追加] 、 [Simulink 信号] を選択します。
信号ソースで指定されていない属性に対応するオブジェクト、または検証する属性に対応するオブジェクトのプロパティを設定します。詳細については、プロパティ ダイアログ ボックスを参照してください。
信号の明示的または暗黙的な関連付けを行います。
明示的な関連付け: 信号の [信号プロパティ] ダイアログ ボックスで [信号名を Simulink の信号オブジェクトに関連付ける] をチェックします。これは、推奨手法です。詳細については、明示的または暗黙的な記号関連付けを参照してください。
この手法を使用する場合、[コンフィギュレーション パラメーター]、[診断]、[データ有効性]、[信号の関連付け] を
[なし]
以外の値に設定します。明示的な関連付けのみを使用するには (ベスト プラクティス)、パラメーターを[明示的のみ]
に設定します。暗黙的な関連付け: モデルの [コンフィギュレーション パラメーター]、[診断]、[データ有効性]、[信号の関連付け] オプションを
[明示的と暗黙的]
または[明示的と暗黙的で警告]
に設定します。明示的な関連付けが推奨手法です。
信号オブジェクトをワークスペース変数に割り当てます。
信号オブジェクトをソース信号に関連付けます。
信号に信号オブジェクトを参照するワークスペース変数と同じ名前を付けます。
いくつかの手法を使用して、信号を signal オブジェクトに関連付けられます。例については、信号オブジェクトを使った信号と離散状態の初期化、信号オブジェクトを使用した初期値の調整、およびStruct ストレージ クラスを使用してパラメーター データを構造体に整理する (Embedded Coder)を参照してください。
検証
信号が信号オブジェクトと一致しないときの結果は複数の要因に依存します。Simulink® はブロック線図の更新時やシミュレーションの実行中あるいはその両方で信号プロパティを検証します。検証の起こるタイミングや方法は、変更される可能性がある内部ルールや、場合によってはコンフィギュレーション パラメーター設定に依存します。
すべての信号検証が信号ソースの属性と信号オブジェクトのプロパティを比較するわけではありません。たとえば、信号オブジェクトを利用して [最小値] および [最大値] の信号値を指定する場合は、信号ソースは、信号オブジェクトと同じ値を指定する (またはオブジェクトから値を継承する) 必要がありますが、そのような検証は、ソースとオブジェクト間の一致にのみ関連し、シミュレーション中の最小値と最大値の施行には関連しません。
[コンフィギュレーション パラメーター]、[診断]、[データ有効性]、[シミュレーション範囲のチェック] の値が なし
(既定の設定) の場合、信号オブジェクトが指定または検証しても、Simulink はシミュレーション中に最小値と最大値を適用しません。シミュレーション中の最小と最大の信号値を得るには、[シミュレーション範囲のチェック] を 警告
または エラー
に設定します。詳細については、信号範囲の指定およびモデル コンフィギュレーション パラメーター: データ有効性の診断を参照してください。
複数の信号オブジェクト
信号オブジェクトのストレージ クラスが Auto
または Reusable
の場合に、特定の "信号オブジェクト" を複数の信号に関連付けることができます。ストレージ クラスが Auto
で、[信号ストレージの再利用] などの最適化が外されて、生成コードによって関連するすべての信号にメモリが割り当てられるような場合、各信号は一意の名前をもつグローバル構造体のフィールドとして表示され、信号や状態のデータが含まれます。オブジェクトのストレージ クラスが Auto
または Reusable
以外の場合は、信号オブジェクトを 1 つの信号のみに関連付けることができます。
特定の信号は、1 つの信号に関連付けることができます。信号は、信号オブジェクトを複数回参照できますが、各参照は同じ信号オブジェクトに関連付ける必要があります。完全に同じプロパティをもつ 2 つの信号オブジェクトを参照すると、コンパイル時にエラーが発生します。
モデルが任意の信号をもつ 1 つを超える信号オブジェクトに関連付けられている場合、コンパイル時エラーが発生します。このエラーを回避するには、信号が使用するオブジェクトを決定し、他の信号オブジェクトへのすべての参照を削除または再設定します。それにより残りの参照は、選択された信号オブジェクトに関連付けられます。信号の完全なトレースに使用できる手法の説明については、信号の伝播元と伝播先の強調表示を参照してください。
Signal Specification ブロック: Simulink.Signal
の代替
Simulink.Signal
オブジェクトではなく Signal Specification ブロックを使用して、信号ソースの未指定のプロパティを割り当てることができます。各手法には利点と欠点があります。
信号オブジェクトを使うと、モデルを簡略化し、モデルを編集せずに信号のプロパティ値を変更できますが、信号のプロパティ値をブロック線図に直接表示しません。
Signal Specification ブロックを使うと、信号のプロパティ値をブロック線図に直接表示しますが、モデルが複雑化し、信号のプロパティ値の変更を行う必要があります。
以下の 2 つのモデルは、信号への属性割り当ての 2 つの方法のそれぞれの利点を図示したものです。
最初の例では、Sig1
という名前の信号オブジェクトは入力端子 In1
によって出力される信号のサンプル時間とデータ型を指定します。
Sig1
信号のプロパティを確認するために、モデル エクスプローラーで信号オブジェクトを表示できます。このモデルでは、サンプル時間は -1
で、データ型は auto
です。
信号 Sig1
のサンプル時間とデータ型プロパティを指定するために信号オブジェクトを使用すると、モデルを編集せずにサンプル時間またはデータ型を変更できます。たとえば、モデル エクスプローラー、MATLAB® コマンド ライン、または MATLAB プログラムを使用して、これらのプロパティを変更できます。
2 番目の例では、Signal Specification ブロックを使用して入力端子 In2
によって出力される信号のサンプル時間とデータ型を指定します。Signal Specification ブロックでは、ダイアグラムの中にデータ型と信号のサンプル時間のプロパティ (ここではそれぞれ uint8
と 4
) が表示されます。
バス サポート
バス オブジェクトをデータ型として使用する
Simulink.Signal
では、非バーチャル バスを出力データ型として使用することをサポートしています。
信号オブジェクトの [データ型] をバス オブジェクトに設定すると、信号オブジェクトを非バス信号と関連付けることができません。
初期値に構造体を使用する
バス オブジェクトをデータ型として使用する場合、[初期値] を 0
かバス オブジェクトと一致する MATLAB 構造体に設定します。
指定する構造体には、バス オブジェクトが表すバスのすべての要素の値を含めなければなりません。
Simulink.Bus.createMATLABStruct
を使用すると、バスに対応する完全な構造体を作成できます。
Simulink.Bus.createObject
を使用すると、MATLAB 構造体からバス オブジェクトを作成できます。
プロパティ ダイアログ ボックス
Simulink.Signal
の例とプログラミングの情報については、Simulink.Signal
を参照してください。
- データ型
信号のデータ型。既定のエントリの
auto
は、Simulink がデータ型を判断するべきであることを示します。隣のドロップダウン リストを使用して、組み込みデータ型 (たとえばuint8
) またはデータ型 ('half'
など) を指定します。カスタム データ型を指定するには、この型 (たとえばSimulink.NumericType
オブジェクトを参照するベース ワークスペース変数) を指定する MATLAB 式を入力します。バス オブジェクトを信号オブジェクトのデータ型として指定するには、
Bus: <object_name>
を使用します。バス オブジェクトをデータ型として指定する場合に必要な手順の詳細については、バス サポートを参照してください。[データ型アシスタントを表示] ボタン
をクリックして、[データ型] パラメーターの設定に役立つ [データ型アシスタント] を表示します。(データ型アシスタントを利用したデータ型の指定を参照)。
- 実数/複素数
信号の数値型。有効な値は、
auto
(Simulink により決定)、real
、complex
です。- 次元
この信号の次元。有効な値は、任意の次元を指定する
-1
(既定の設定)、サイズN
のベクトル信号を指定するN
、MxN
行列信号を指定する[M N]
です。- 次元モード
この信号の次元モード。ドロップダウン リストから以下を選択します。
自動 — 可変サイズの信号と固定サイズの信号が許可されます。
固定 — 固定サイズの信号のみが許可されます。可変サイズの信号は許可されません。
変数 — 可変サイズの信号のみが許可されます。
- サンプル時間
この信号の値を計算するレート。詳細については、サンプル時間の指定を参照してください。
- 最小値
この信号がもつことができる最小値。既定値は
[]
(指定なし) です。有限で実数の double のスカラー値を指定します。メモ
信号のデータ型としてバス オブジェクトを指定する場合は信号のプロパティ ダイアログ ボックスでバス データの最小値を設定しないでください。Simulink によりこの設定は無視されます。代わりに、データ型として指定したバス オブジェクトのバス要素の最小値を設定してください。バス要素の [最小値] プロパティの詳細については、
Simulink.BusElement
を参照してください。Simulink はこの値を次のように使用します。
ブロック線図の更新やシミュレーションの開始時に、Simulink は信号の初期値が最小値より小さいか、あるいは最小値が信号のデータ型の範囲外である場合にエラーを表示します。
[シミュレーションの範囲チェック] 診断を有効にすると、Simulink は信号値が最小値より小さい場合、シミュレーション中に警告を出します (シミュレーション範囲のチェックを参照)。
- 最大値
この信号がもつことができる最大値。既定値は
[]
(指定なし) です。有限で実数の double のスカラー値を指定します。メモ
信号のデータ型としてバス オブジェクトを指定する場合は信号のプロパティ ダイアログ ボックスでバス データの最大値を設定しないでください。Simulink によりこの設定は無視されます。代わりに、データ型として指定したバス オブジェクトのバス要素の最大値を設定します。バス要素の [最大値] プロパティの詳細については、
Simulink.BusElement
を参照してください。Simulink はこの値を次のように使用します。
ブロック線図の更新やシミュレーションの開始時に、Simulink は信号の初期値が最大値より大きいか、あるいは最大値が信号のデータ型の範囲外である場合にエラーを表示します。
[シミュレーションの範囲チェック] 診断を有効にすると、Simulink は信号値が最大値より大きい場合、シミュレーション中に警告を出します (シミュレーション範囲のチェックを参照)。
- Stored Integer Minimum
固定小数点データ型の信号オブジェクトについて、信号が取るべき最小値。整数格納値として指定されます。この値は、実際値の [最小値] から導出されます。このプロパティは、プロパティ ダイアログ ボックスでのみ使用できます。
- Stored Integer Maximum
固定小数点データ型の信号オブジェクトについて、信号が取るべき最大値。整数格納値として指定されます。この値は、実際値の [最大値] から導出されます。このプロパティは、プロパティ ダイアログ ボックスでのみ使用できます。
- 初期値
シミュレーション前の信号または状態値は最初のタイム ステップを取ります。ワークスペース変数の名前を含む、スカラー数値または配列と評価される任意の MATLAB 式を指定できます。
信号の初期値は MATLAB コマンド プロンプトを使用して指定できます。数字を使用する場合でも、初期値は文字ベクトルとして指定します。
mySigObject.InitialValue='5.3';
mySigObject.InitialValue = 'myNumericVariable';
double
以外の数値データ型を使用する信号の初期値を指定するには、信号のデータ型に初期値をキャストします。たとえば、データ型がsingle
の信号の初期値として73.3
を使用する場合はsingle(73.3)
と指定できます。バス オブジェクトを信号オブジェクトのデータ型として使用する場合、[初期値] を
0
か、バス オブジェクトと一致する MATLAB 構造体を含む文字ベクトルに設定します。詳細については、バス サポートを参照してください。初期値が MATLAB 構造体として評価される場合、[コンフィギュレーション パラメーター] ダイアログ ボックスで、指定不足の初期化の検出を
[簡易]
に設定します。必要な場合、Simulink は、初期値を変換して、タイプ、実数/複素数、次元が対応するブロック パラメーターの値と整合するようにします。無効な値または式を指定した場合は、モデルの更新時にエラー メッセージが表示されます。また、Simulink は初期値の範囲チェックを行います。信号の初期値が、指定した最小値と最大値およびデータ型に対応する範囲外であるときに警告が表示されます。
クラシック初期化モード: このモードでは、以下の信号と状態を表す信号オブジェクトの初期値設定は、対応するブロック パラメーターの初期値が未定義 (
[]
と指定) の場合はその初期値をオーバーライドします。条件付き実行サブシステムと Merge ブロックの出力信号
ブロックの状態
簡易初期化モード: このモードでは以下のブロックに関連付けられている信号オブジェクトの初期値が無視されます。代わりに、対応するブロックの初期値が使用されます。
条件付き実行サブシステムの Outport ブロック
Merge ブロック
- 単位
この信号の値を表現する物理単位 (たとえば、インチ)。単位を指定するには、テキスト ボックスに入力します。入力中、パラメーターには一致する可能性のある単位が表示されます。詳細については、Simulink モデルでの単位の指定を参照してください。
- ストレージ クラス
この信号のストレージ クラス。詳細については、モデル インターフェイス要素の C コード生成の構成 (Simulink Coder)およびStruct ストレージ クラスを使用してパラメーター データを構造体に整理する (Embedded Coder)を参照してください。
信号オブジェクトをモデル ワークスペースに作成するには、オブジェクトのストレージ クラスに
自動
を設定しなければなりません。- 識別子
この信号の別名。Simulink はこの設定を無視します。このプロパティはコード生成用に使われます。
- 配置
バイト数で指定するデータ配置境界。この信号に割り当てられているデータの開始メモリ アドレスは [配置] 設定の倍数になります。既定値は
-1
です。これは使用に基づいてコード ジェネレーターが最適な配置を決定することを指定します。それ以外の場合は 128 を超えない 2 のべき乗である正の整数を指定します。このフィールドは Simulink Coder™ ソフトウェアで使用するためのものです。Data Alignment for Code Replacement (Embedded Coder)を参照してください。Simulink ソフトウェアはこの設定を無視します。- 説明
この信号の説明。このフィールドは、この信号の説明を記述するためのものですこのプロパティは、Simulink Report Generator コード生成用に使われます。
Embedded Coder® のライセンスがあれば、生成コードの変数宣言に対するコメントとして信号の説明を追加できます。
信号オブジェクトのストレージ クラスを
Auto
以外に指定します。モデルの [コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] 、 [コメント] ペインで、モデル コンフィギュレーション パラメーターの [Simulink データ オブジェクトの説明] を選択します。詳細については、Simulink data object descriptions (Embedded Coder)を参照してください。