ドキュメンテーション

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

信号範囲

信号範囲について

多くの Simulink® ブロックでは、出力信号の有効な値の範囲を指定できます。Simulink では、診断を有効にして、シミュレーション中に指定した範囲を超えた信号がブロックによって生成された時期を検出できます。詳細は、次節を参照してください。

信号範囲の指定が可能なブロック

次のブロックでは、出力信号の範囲を指定できます。

信号範囲の指定

通常、ブロックの出力信号の有効な値の範囲を指定するには、ブロックの [出力の最小値] パラメーターと [出力の最大値] パラメーターを使用します。Data Store Memory ブロック、Inport ブロック、Outport ブロック、および Signal Specification ブロックについては、信号範囲を指定するために [最小値] パラメーターと [最大値] パラメーターを使用します。信号範囲を指定可能なブロックの一覧は、信号範囲の指定が可能なブロックを参照してください。

これらのパラメーターにアクセスするには、プロパティ インスペクター ([ツール表示][プロパティ インスペクター])、モデル データ エディター ([ツール表示][モデル データ エディター]) またはブロック ダイアログ ボックスを使用します。各手法を効果的に使用するには、プロパティとパラメーターの設定を参照してください。

最小値または最大値を、スカラーの double データ型の実数に評価される式で指定します。たとえば、次のようなことができます。

  • 98.884 などの数値リテラル。暗黙的にデータ型は double になります。

  • データ型が double である数値ワークスペース変数 (変数の作成によるブロック パラメーター値の共有と再利用を参照)。この手法を使用すると、複数のデータ項目の間で最小値または最大値を共有できます。

    ただし、変数を使用して Simulink.Signal オブジェクトの Min プロパティまたは Max プロパティを設定することはできません。

指定したスカラー値は合成信号の各要素に適用されます (たとえば信号が非スカラーまたはバスの場合)。スカラー拡張の詳細については、入力とパラメーターのスカラー拡張を参照してください。

信号の最小値または最大値を未指定のままにするには、空行列 [] (既定値) を使用します。

モデル構造の範囲の指定

バス信号、データ ストア、Stateflow® チャートなどのモデル構造を使用する場合、さまざまな手法で設計範囲情報を指定できます。次の表の情報を使用してください。

ターゲット信号の説明手法と詳細

数値的な複素信号

複素数である信号について、[出力の最小値] または [出力の最大値] を指定すると、指定した最小値および最大値は、複素数の実数部と虚数部に個別に適用されます。複素数の実数部または虚数部の値が最小値より小さいか、最大値より大きい場合、複素数は指定の範囲外になります。(sqrt(a^2+b^2)) などの実数部と虚数部の組み合わせに対しては、範囲のチェックは行われません。

バス内の信号要素

Bus Creator ブロックを使用してバスを構築する場合、Bus Creator に対して入力を行う上流のブロックで範囲情報を指定できます。

バスの構築に使用する手法にかかわらず、Simulink.Bus オブジェクトを作成してバス信号のデータ型として使用できます。この場合、バス オブジェクト内の Simulink.BusElement オブジェクトの Min プロパティと Max プロパティを使用して範囲情報を指定することを検討します。詳細については、バス オブジェクトを使用する状況を参照してください。

MATLAB Function ブロック内の信号

[端子とデータの管理] を使用してデータの [最小値] プロパティと [最大値] プロパティを指定します。[一般] プロパティの設定を参照してください。

Stateflow チャート内の信号

対応する Stateflow データの [最小値] プロパティと [最大値] プロパティを設定します。[制限範囲] プロパティ (Stateflow)を参照してください。

信号オブジェクト (Simulink.Signal など) と関連付けられた信号

信号オブジェクトの Min プロパティと Max プロパティを設定します。Simulink.Signal を参照してください。

データ ストア (Data Store Memory ブロックまたは Simulink.Signal オブジェクト)

Data Store Memory ブロックの場合、ブロック パラメーター [最小値] および [最大値] を設定します。信号オブジェクトの場合、Min プロパティおよび Max プロパティを設定します。

信号範囲のエラーのチェック

Simulink では、[シミュレーション範囲のチェック] という名前の診断機能があり、この機能を使用して、シミュレーション中に信号が指定した範囲を超えた時期を特定できます。この診断機能が有効な場合、Simulink では、ブロックによって出力された信号値と指定した範囲 (信号範囲の指定を参照) およびブロック データ型を比較します。つまり、Simulink は次のチェックを実行します。

DataTypeMin ≤ MinValue ≤ VALUE ≤ MaxValue ≤ DataTypeMax

ここで、

  • DataTypeMin は、ブロックのデータ型により表される最小値です。

  • MinValue は、[出力の最小値] などにより指定されたブロックが出力する最小値です。

  • VALUE は、ブロックが出力する信号値です。

  • MaxValue は、Output maximum などによって指定される、ブロックから出力される最大値です。

  • DataTypeMax は、ブロック データ型により表される最大値です。

メモ

特定の範囲を超えた信号をブロックが処理する方法については、条件を指定しすぎる場合があります。たとえば、両方の信号範囲のパラメーターについて値 (既定値以外の値) を指定し、Saturate on integer overflow パラメーターを有効にするとします。この場合、Simulink には、[整数オーバーフローで飽和} パラメーターを無効にするように指示する警告メッセージが表示されます。

シミュレーション範囲のチェックの有効化

[シミュレーション範囲のチェック] 診断を有効にするには、以下のようにします。

  1. モデル ウィンドウで、[シミュレーション][モデル コンフィギュレーション パラメーター] を選択します。

    [コンフィギュレーション パラメーター] ダイアログ ボックスが表示されます。

  2. [コンフィギュレーション パラメーター] ダイアログ ボックスの左側の [選択] ツリーで、[診断][データ有効性] カテゴリをクリックします。[信号] の右下で、[シミュレーション範囲のチェック] 診断を [エラー] または [警告] に設定します。

  3. [OK] をクリックして、変更を適用して [コンフィギュレーション パラメーター] ダイアログ ボックスを閉じます。

詳細については、シミュレーション範囲のチェックを参照してください。

シミュレーション範囲のチェックを使用したモデルのシミュレーション

信号範囲のエラーまたは警告をチェックするには、以下のようにします。

  1. モデルの [シミュレーション範囲のチェック] 診断を有効にします (シミュレーション範囲のチェックの有効化を参照)。

  2. モデル ウィンドウで、[シミュレーション][実行] を選択し、モデルのシミュレーションを実行します。

    Simulink によって、モデルのシミュレーションと信号範囲のチェックが実行されます。[シミュレーション範囲のチェック] 診断で [エラー] が指定されている場合に信号が指定の範囲を超えると、Simulink のシミュレーションが停止し、エラーが (たとえば診断ビューアーに) 生成されます。

    また、[シミュレーション範囲のチェック] 診断で [警告] が指定されている場合に信号が指定の範囲を超えると、Simulink では MATLAB® コマンド ウィンドウに警告メッセージが生成されます。各メッセージによって、指定した範囲を超えた出力信号のブロックと、このエラーが発生したタイム ステップを把握できます。

バーチャル ブロックの信号範囲の伝播

Inport ブロックや Outport ブロックなどの一部のバーチャル ブロック (非バーチャル ブロックとバーチャル ブロックを参照) では、出力信号の範囲を指定できます。このようなブロックを含んでいるモデルに対して [シミュレーション範囲のチェック] が有効な場合、バーチャル ブロックの信号範囲は、出力信号を受信する非バーチャル ブロックの最初のインスタンスに逆伝播します。非バーチャル ブロックでその範囲に別の値が指定されている場合、Simulink では、可能な最も狭い範囲で信号範囲のチェックを実行します。すなわち、Simulink では、大きい方の最小値と小さい方の最大値の範囲で信号をチェックします。

たとえば、以下のモデルを考えます。

このモデルでは、Constant ブロックでは、その Output maximum パラメーターが 300 に指定され、Inport ブロックでは 100 に設定されています。[シミュレーション範囲のチェック] 診断が有効で、モデルのシミュレーションを実行するとします。Inport ブロックによって、Constant ブロックなどの Inport ブロックより前の非バーチャル ブロックに最大値が逆伝播します。Simulink では、2 つの最大値の小さい方の値を使用して、Constant ブロックによって出力された信号をチェックします。Constant ブロックは最も狭い範囲を超える値 (200) の信号を出力するため、Simulink によってエラー メッセージが生成されます。

double よりも高い精度または広い範囲のデータに対する予期しないエラーまたは警告

データ項目 (信号またはパラメーター) で double 以外のデータ型が使用されている場合、比較する前に、Simulink によってデータ項目および各設計範囲 (指定した最小値または最大値) が double 以外のデータ型にキャストされます。この方法は、誤解を招く不必要なエラーや警告の生成を防ぐために役立ちます。

ただし、Simulink では比較の前に設計範囲が double として保存されます。データ項目のデータ型が double よりも高い精度 (語長が 128 ビットで小数部の長さが 126 ビットの固定小数点データ型など) または double よりも広い範囲をもつ場合で double によって設計範囲の値を正確に表現できない場合、Simulink によって予期しない警告およびエラーが生成される可能性があります。

double でない型が高い精度をもつ場合、設計範囲を、double で表現可能なゼロから次に遠い数値に丸めることを検討してください。たとえば、最大値を 98.8847692348509014 に設定した後で、信号によってエラーが生成されると仮定します。double で表現可能なゼロから次に遠い数値をコマンド プロンプトで計算します。

format long
98.8847692348509014 + eps(98.8847692348509014)
ans =

  98.884769234850921

得られた数値 98.884769234850921 を使用して最大値を置き換えます。

生成コードの最適化

Embedded Coder® がある場合、Simulink Coder™ は、信号とパラメーターに指定した最小値と最大値を考慮することで、モデルから生成するコードを最適化できます。この最適化により、アルゴリズム コードが削除され、SIL やエクスターナル モードなどの一部のシミュレーション モードの結果に影響を与えることがあります。詳細については、指定した最小値と最大値を使用した最適化 (Simulink Coder)を参照してください。

関連するトピック