Main Content

Simulink モデルでの単位の指定

Simulink® では、モデル コンポーネントの境界で信号に属性として物理単位を指定することができます。該当するコンポーネントは以下のいずれかです。

  • サブシステム

  • 参照 Simulink モデル

  • Simulink と Simscape™ およびその関連物理モデリング製品で作成されたコンポーネントとの間のインターフェイスである Simulink-PS Converter (Simscape) ブロックと PS-Simulink Converter (Simscape) ブロック

  • Stateflow® チャート、状態遷移表、真理値表

  • MATLAB Function ブロック

  • Constant ブロック

  • Data Store Memory ブロック、Data Store Read ブロックおよび Data Store Write ブロック。

  • C MEX S-Function

信号単位を指定、制御、可視化することで、モデルのさまざまなコンポーネント間で計算の整合性を確保できます。たとえば、レベルを高めた整合性チェックは、別々に作成された多くのコンポーネントを大規模で全体的なシステム モデルに統合する場合に役立ちます。

Simulink モデルでは、"単位データベース" から単位を指定します。単位データベースは、次の単位系の単位で構成されます。

  • SI — 国際単位系

  • SI (extended) — 国際単位系 (拡張)

  • English — 英語単位系

  • CGS — センチメートル・グラム・秒単位系

モデル化しているシステムのタイプに基づいて、これらのサポートされる単位系の任意の組み合わせを使用できます。サポートされる単位系とそれらの単位系に含まれる単位の詳細については、Allowed Units を参照してください。

以下のブロックを介して単位を信号に割り当てることができます。

以下のオブジェクトを介して単位を信号に割り当てることができます。

サポートされるブロックをモデルに追加すると、ブロックの [単位] パラメーターが既定で [inherit] に設定されます。この設定で、ブロックは明示的に指定された単位をもつ接続先の信号から単位を継承します。

サポートされるブロックの [単位] パラメーターを使用して信号の単位を明示的に指定できます。このパラメーターでは、ダイアログ ボックスに次のように便利な一致候補が示されます。

正しい形式の単位式を指定しないと、エラーが表示されます。正しい形式の単位式は、単位名または記号と、適切に一致する小かっこ、および */^ 文字の組み合わせです。[]{}<>\"& などの特殊文字はサポートされません。

既定では、ブロック端子に "空の" (未指定の) 単位があり、[単位] パラメーターは [inherit] に設定されています。1 つの端子の単位を指定すると、Simulink では接続されている端子の単位設定がチェックされます。端子が空の単位をもつ場合、その端子をサポートされる単位をもつ別の端子に接続できます。端子の [単位] パラメーターが [inherit] に設定されている場合は、指定された単位をもつ接続先の端子から単位が継承されます。

モデル内の Simulink ラインに単位を表示するには、[デバッグ] タブで [情報のオーバーレイ][単位] をクリックします。

単位なし、無次元、および単位量なしのガイドライン

単位なし、無次元、または単位量なしを扱う場合、以下のガイドラインを考慮してください。

  • 単位なしの純粋な数値

    SI の標準的な無次元単位である [1] の使用を検討します。Simulink は単位をチェックして、他の無次元数量がその単位で伝播されていることを確認します。これらのタイプの数値を追加、乗算、および操作できます。

  • 未指定の単位

    [単位] パラメーターが空白である、空の単位の使用を検討します。このパラメーターが空白の場合、Simulink は警告を返すことなく端子に伝播する任意の単位を受け入れます。

  • 整数をカウントする数値単位

    整数をカウントする数値単位を表すために [カウント] の使用を検討します。この単位は、熱が到達可能なステートや PWM カウントなど、記述するのは困難であるが、単位なしまたは無次元とみなされる数量に使用します。詳細については、Allowed Units[カウント] を参照してください。

  • 無次元物理量

    無次元物理量は、特定の物理量を表します。物理量 velocity_factorrefractive_indexrelative_permeabilitystrainReynolds_number、および logical の使用を検討します。これらの物理量のうち、strain Reynolds_number には、対応する単位があります。その他の物理量に単位を指定するには、たとえば 1@refractive_index のように、1@physical quantity などの形式を使用します。Simulink は伝播時に物理量のチェックを実行します。たとえば、モデルで次元の物理量を追加しようとすると、Simulink で警告が返されます。

  • スケーリングされた純粋な数値

    [ppm][ppb][ppt] の使用を検討してください。

物理量の指定

物理システムをモデル化する場合、異なる物理量を表す 2 つ以上の信号に同じ単位式を使用できます。たとえば、N*m の単位式はトルクやエネルギーを表すことができます。単位は同じでも物理量が異なる 2 つの端子を誤って接続しないように、物理量を単位式に追加できます。たとえば、同じ単位 N*m の場合は、N*m@torqueN*m@energy の別の物理量を指定できます。単位と同様に、ダイアログ ボックスには物理量の名前を入力すると候補が示されます。

物理量を使用すると、接続されている端子間での単位の整合性チェックのレベルを強化できます。物理量が異なる端子を接続しようとすると、モデルで警告が表示されます。

オブジェクトでの単位の指定

既定では、Simulink.ValueTypeSimulink.SignalSimulink.BusElement、および Simulink.Parameter オブジェクトは空の単位をもちます。次の場合があります。

  • Simulink.ValueType オブジェクトの場合、そのオブジェクトは単位を対応する信号に付加しません。

  • Simulink.Signal オブジェクトの場合、空の単位は、対応する信号が上流端子または下流端子から単位を継承できることを意味します。

  • Simulink.BusElement オブジェクトの場合、空の単位は、対応するバス要素も空の単位をもつことを意味します。いずれかの単位をもつ端子に要素を接続できますが、要素は端子から単位を継承しません。

  • Simulink.Parameter オブジェクトの場合、そのオブジェクトは単位を対応するパラメーター値に付加しません。

Simulink.ValueTypeSimulink.Signal、または Simulink.BusElement オブジェクトで単位を指定すると、Simulink では次の場合に対応する信号線に属性が適用されます。

  • Simulink.ValueType オブジェクトでモデルの信号のプロパティが指定されている。

  • Simulink.Signal オブジェクトがモデルの信号に関連付けられている。

  • Simulink.BusElement オブジェクトが Simulink.Bus オブジェクトに関連付けられていて、Simulink.Bus オブジェクトを適用する Bus CreatorBus Selector、または Bus Assignment ブロックで対応するバス要素を使用している。

Simulink.Parameter オブジェクトの場合、Simulink では属性は適用されません。すべてのオブジェクトで、[単位] パラメーターに正しい形式の値を指定しないと、エラーになります。単位の形式が正しくても未定義の場合は、モデルをコンパイルするときに警告が表示されます。単位式に []{}<>\"& などの特殊文字が含まれる場合、Simulink ではそれらの特殊文字がアンダースコア (_) に置き換えられます。

カスタム単位のプロパティ

R2016a 以降の Unit プロパティおよび DocUnits プロパティについてのメモ:

  • DocUnits プロパティは、Simulink.Parameter オブジェクトおよび Simulink.Signal オブジェクト向けの Unit になっています。以前のリリースで Simulink.Parameter オブジェクトまたは Simulink.Signal オブジェクトの DocUnits パラメーターを使用して、現在では単位仕様に準拠していないテキストを含めた場合、モデルのシミュレーション時に警告が返されます。

    こうした警告を非表示にするには、コンフィギュレーション パラメーター単位の不一致メッセージnone に設定します。この設定によって、単位の不一致チェックのすべての警告が非表示になります。

  • 以前に定義した Unit プロパティをもつ Simulink.ParameterSimulink.Signal または Simulink.BusElement から派生したクラスがある場合、Simulink は次のようなエラーを返します。

    ​Cannot define property 'Unit' in class 'classname' because
     the property has already been defined in the superclass 'superclass'.

    このプロパティを使用して信号の物理単位を表す場合、R2016a 以降のリリースでは、その派生クラスの Unit プロパティを削除します。正しくない形式の単位式を Unit フィールドに割り当てていない限り、既存のスクリプトは引き続き機能します。この場合、引き続き単位式を割り当てることができるようにするには、Unit の使用を DocUnits で置換します。

    メモ

    既存のデータを MAT ファイルまたは .sldd ファイルに保存する場合、R2016a より前のリリースで、まず Unit プロパティのコンテンツを DocUnits にコピーします。次に、R2016a 以降のリリースでモデルを読み込む前に、そのファイルを以前のリリースで保存します。

温度信号の単位の指定

絶対温度をモデル化する場合は、KdegCdegFdegR などの単位を使用します。温度 "差" をモデル化する場合は、deltaKdeltadegCdeltadegFdeltadegR などの単位を使用します。温度差の単位をもつ信号を "絶対" 温度の単位を指定するブロックに接続すると、Simulink で不一致が検出されます。

MATLAB Function ブロックでの単位の指定

MATLAB Function ブロックの入力と出力の単位を指定するには、プロパティ インスペクターの [単位 (m、m/s^2、N*m など)] パラメーターで単位を指定します。MATLAB Function ブロックをダブルクリックして MATLAB Function ブロック エディターを開きます。[モデル化] タブの [設計] セクションで、[[シンボル] ペイン] をクリックします。変数名を右クリックし、[検査] を選択します。既定では、このプロパティは inherit で、単位は端子に送信される信号と等しくなります。出力に対して [データを信号オブジェクトに関連付ける] プロパティを選択した場合は、端子の単位と [名前][スコープ] を除く他のプロパティが出力端子に接続される信号に基づいて決まります。

MATLAB Function ブロックは、Simulink の信号の単位がブロックの対応する入力または出力に割り当てられた単位と一致するかどうかをチェックします。単位が一致しない場合、Simulink でモデルの更新時に警告が表示されます。それ以外の場合、単位の設定は MATLAB Function ブロックの実行に影響しません。

Constant ブロックでの単位の指定

Simulink.Parameter オブジェクトの [単位] プロパティを使用して、Constant ブロックの出力データに単位を指定できます。

信号データのログ記録と読み取りの単位の指定

ログ記録するまたは読み込む信号データに単位を含めることができます。

ログ記録と読み込みの単位を指定するには、Simulink.SimulationData.Unit オブジェクトを使用します。[データセット] または [時系列] 形式を使用してログを記録している場合、Simulink では Simulink.SimulationData.Unit オブジェクトを使用して単位情報が保存されます。読み込む MATLAB® 時系列データを作成する場合は、timeseries オブジェクトの Units プロパティに Simulink.SimulationData.Unit オブジェクトを指定できます。

詳細については、単位を使用する信号データの読み込みを参照してください。

単位系の制限

既定では、サポートされる単位系のいずれかの単位を指定できます。ただし、大規模なモデリング プロジェクトでは、整合性を適用するために、モデルの特定のコンポーネントで使用できる単位系を制限できます。モデルで使用できる単位系を指定するには、コンフィギュレーション パラメーター [許可された単位系] で、all または 1 つ以上の SISI (extended)CGSEnglish で構成されるコンマ区切りのリストを入力します。引用符は使用しないでください。モデルに参照モデルが含まれる場合は、[許可された単位系] を使用して各参照モデルの単位を制限します。モデルにサブシステムが含まれる場合、Unit System Configuration ブロックを使用してサブシステムの単位を制限できます。オプションで、Unit System Configuration ブロックもモデルで使用できます。この場合は、Unit System Configuration ブロックの設定によって、[許可された単位系] で指定した内容がオーバーライドされます。

モデルで単位系を制限するには、以下のようにします。

  1. InportOutport または Signal Specification ブロックの [単位] パラメーターで、リンクをクリックします。

    Unit System Configuration ブロックがモデル内に存在する場合、このリンクでブロックのダイアログ ボックスが開きます。このブロックが存在しない場合、リンクで [許可された単位系] コンフィギュレーション パラメーターが開きます。

  2. 1 つ以上の必要な単位系 (SISI (extended)EnglishCGS) をコンマ区切りリストで指定するか、引用符を使用せずに all を指定します。

親子関係 (参照モデルやサブシステムをもつ最上位モデルなど) では、コンポーネントごとに別の単位系を指定できます。ただし、親に対して指定されている単位系に含まれない単位を子が親に伝播した場合、警告が示されます。

モデルの階層構造内に制限された単位系によって生じた単位の不一致があるかどうかを確認するには、以下を行います。

  • Ctrl + D キーを押して、モデルの警告バッジを視覚的に検査する。

  • モデル アドバイザーの [モデル内の許可されていない単位系を特定] チェックを使用する。

参考

ブロック

オブジェクト

関連するトピック