If
if-else ステートメントに類似したロジックを使用してサブシステムの実行を選択する
ライブラリ:
Simulink /
Ports & Subsystems
説明
If ブロックは、Action Port ブロックを含む If Action Subsystem ブロックと同様に、if-else ロジックを実装してサブシステムの実行を制御します。If ブロックを使用する例については、選択サブシステムの実行を参照してください。

例
Simulink Subsystem のセマンティクス
この一連の例では、さまざまなタイプの Simulink® Subsystem と、これらのサブシステムのシミュレーション実行時にどのようなセマンティクスが使用されるかという例を示します。各例では、モデルと、そのモデルの実行方法に関する違いを説明しています。
If-Then-Else ブロック
この例では、正弦波をIf Action Subsystemブロックに入力した場合の影響を示します。これは、If Action Subsystem ブロックとEnabled Subsystemブロックの類似度を示すよう設計されています。
If ブロックを使ったクラッチ ロックアップのモデル化
この例では、If/Else サブシステムを使用してクラッチ モデルを作成する方法を示します。If サブシステムがクラッチ ダイナミクスをロック位置でモデル化するのに対して、Else サブシステムはロック解除位置でモデル化します。If ブロックを使用していずれかを有効にします。If ブロックからの一点鎖線は、制御信号を示しています。この信号は、If/Else (または他の条件付き) サブシステムを有効にするために使用されます。GUI 上のボックスのいずれかをチェックすると、(時間に対して) 選択された変数のいずれかのプロットが生成されます。
制限
メモ
このセクションに記載されている制限は、R2025b 以前のバージョンにのみ適用されます。
If ブロックには次の制限があります。
調整可能なパラメーターをサポートしません。
if式またはelseif式の値は、通常モードまたはアクセラレータ モードでのシミュレーション中、または生成コードの実行時に調整することはできません。調整可能な if-else 式を実装するには、その式を If ブロックの外で調整するようにしてください。たとえば、Relational Operator ブロックを使用して If ブロックの外部で式を評価します。または、If ブロックへの入力として、調整可能なパラメーターを追加します。
カスタム ストレージ クラスをサポートしません。Struct ストレージ クラスを使用してパラメーター データを構造体に整理する (Embedded Coder)を参照してください。
if 式および elseif 式では、
+、-、*、/などの特定の演算子は受け入れられません。
端子
入力
R2026a 以降のバージョンでは、ブロック内部で使用される論理式に従って入力端子のラベルを変更できます。端子のラベルを編集するには、既定のテキストである u1,u2,...,un にカーソルを合わせ、テキストを変更します。

R2025b 以前のバージョンでは、ブロックでは既定の入力端子ラベルである u1,u2,...,un のみが許可されます。入力 u1,u2,...,un は同じデータ型でなければなりません。入力は、列挙型のような、ユーザー定義のタイプにはできません。
If ブロックは、固定小数点データ型を直接的にはサポートしません。ただし、この制限を解決するために、Compare To Constant ブロックを使用することができます。選択サブシステムの実行を参照してください。
データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean
出力
if、else および elseif 端子からの出力は If Action Subsystem ブロックに対するアクション信号です。
パラメーター
11 つの入力端子を指定します。
- 整数
入力端子の数を指定します。ブロック端子には文字
'u'の後に番号1,2,...,nが続くラベルが付けられます。nは、指定した入力数です。
プログラムでの使用
ブロック パラメーター: NumInputs |
| 型: 文字ベクトル |
値: '1' | 引用符で囲んだ整数 |
既定の設定: '1' |
if 端子とすべての elseif 端子の式が false である場合、else 端子はアクション信号を送信し、接続された If Action Subsystem ブロックを実行します。
- オン
else 端子を表示します。
- オフ
else 端子を表示しません。
プログラムでの使用
ブロック パラメーター: ShowElse |
| 型: 文字ベクトル |
値: 'on' | 'off' |
既定値: 'on' |
ゼロクロッシング検出を制御します。
- オン
ゼロクロッシングを検出します。
- オフ
ゼロクロッシングを検出しません。
プログラムでの使用
ブロック パラメーター: ZeroCross |
| 型: 文字ベクトル |
値: 'on' | 'off' |
既定の設定: 'on' |
R2025a 以降
このパラメーターを選択すると、If ブロックから生成されるコードに必ず if-else ステートメントだけが含まれるようになります。
- オン
生成コードに if-else ステートメントだけが含まれます。このオプションにより、switch-case ステートメントは生成コードに含まれなくなります。
- オフ
このパラメーターがオフの場合、If ブロックから生成されるコードに switch-case ステートメントが含まれることがあります。このステートメントは If ブロックと同じ演算を実行します。
プログラムでの使用
ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。
ブロック パラメーター: EnsureIfElseCode |
| 型: 文字ベクトル |
値: 'on' | 'off' |
既定の設定: 'off' |
if 端子に接続された If Action Subsystem ブロックは、関連付けられた if 式が true になる場合に実行されます。
u1 > 0入力
u1が0より大きい場合に出力端子のアクション信号を送信することを指定します。
論理式 (R2026a 以降)
以下を使用する式など、さまざまな論理式を使用します。
調整可能なパラメーター。
x1 > x2 + 5など、一般的な MATLAB® 式。カスタム ストレージ クラスをもつ
Simulink.ParameterやSimulink.Signalなどのデータ オブジェクト。詳細については、ユーザー定義パッケージで定義されたストレージ クラスの作成と適用 (Embedded Coder)を参照してください。固定小数点データ型。
列挙データ型。
MATLAB 構造体配列。
以下を含む式:
算術関数 —
ceil、floor、abs、およびsign。三角関数 —
sin、cos、tan、asin、acos、atan、atan2、sinh、cosh、およびtanh。指数関数、対数関数、および平方根関数 —
log、log10、exp、およびsqrt。
論理式 (R2025b 以前)
メモ
R2025a 以降、[if] の既定の式 (u1 > 0) の編集には [式] テーブルを使用します。入力と演算子が複数ある複雑な式の場合は、[if] の式を選択し、それを [式エディター] ボックスで編集します。
R2025a より前のバージョンでは、このパラメーターは [If expressions] としてブロック ダイアログ ボックスに表示されます。このパラメーターを使用して論理式を指定できます。
ただし、Simulink® のいずれのバージョンでも、if 出力端子に隣接する If ブロックにこの式が表示されます。
式に含めることができる演算子は <, <=, ==, ~=, >, >=, &, |, ~, () , unary-minus だけです。+, -, *, / や ^ などの演算子は許可されません。この式は、たとえば int8(6) などのデータ型式を含むことはできません。また、データ型が double または single 以外のいずれかであるワークスペース変数を参照することはできません。
プログラムでの使用
ブロック パラメーター: IfExpression |
| 型: 文字ベクトル |
値: 'u1 > 0' | 引用符で囲んだ論理式 |
既定の設定: 'u1 > 0' |
elseif 端子に接続された If Action Subsystem ブロックは、関連付けられた elseif 式が true になり、他のすべての if 式と elseif 式が false の場合に実行されます。
- 空
論理式は指定されません。
論理式のリスト (R2026a 以降)
以下を使用する式など、以前はサポートされていなかったさまざまな論理式を使用します。
調整可能なパラメーター。
x1 > x2 + 5など、一般的な MATLAB 式。カスタム ストレージ クラスをもつ
Simulink.ParameterやSimulink.Signalなどのデータ オブジェクト。詳細については、ユーザー定義パッケージで定義されたストレージ クラスの作成と適用 (Embedded Coder)を参照してください。固定小数点データ型。
列挙データ型。
MATLAB 構造体配列。
以下を含む式:
算術関数 —
ceil、floor、abs、およびsign。三角関数 —
sin、cos、tan、asin、acos、atan、atan2、sinh、cosh、およびtanh。指数関数、対数関数、および平方根関数 —
log、log10、exp、およびsqrt。
論理式 (R2025b 以前)
メモ
R2025a 以降、[elseif] の式の追加や編集には [式] テーブルを使用します。式を追加、削除、移動するには、テーブルの左にあるアクション ボタンを使用します。テーブルでは、[elseif] の各式をコンマ区切りのリストとしてではなく個別に記述し、モデル化の要件に応じて式を整理できます。入力と演算子が複数ある複雑な式の場合は、[elseif] の式を含む行を選択し、それを [式エディター] ボックスで編集します。
R2025a より前のバージョンでは、このパラメーターは [Else expressions] としてブロック ダイアログ ボックスに表示されます。それらのバージョンでは、コンマで区切られた論理式のリストを指定します。
ただし、Simulink のいずれのバージョンでも、[else 条件の表示] チェック ボックスをオンにすると、If ブロックの if 端子の下および else 端子の上に式が表示されます。
式に含めることができる演算子は <, <=, ==, ~=, >, >=, &, |, ~, (), unary-minus だけです。+, -, *, / や ^ などの演算子は許可されません。この式は、たとえば int8(6) などのデータ型式を含むことはできません。また、データ型が double または single 以外のいずれかであるワークスペース変数を参照することはできません。
プログラムでの使用
ブロック パラメーター: ElseIfExpressions |
| 型: 文字ベクトル |
値: '' | 引用符で囲んだ論理式のコンマ区切りのリスト |
既定の設定: '' |
ブロックの特性
データ型 |
|
直達 |
|
多次元信号 |
|
可変サイズの信号 |
|
ゼロクロッシング検出 |
|
詳細
If Action Subsystem ブロックを実行させる If ブロックは、条件カバレッジ、判定カバレッジ、および MCDC カバレッジの対象となるほか、以下の場合が対象となります。
if条件および各elseif条件 (存在する場合) は判定カバレッジの対象となります。複数の条件をもつ論理式 (
u1 && u2など) を含むif条件またはelseif条件も、式の中の各条件について MCDC カバレッジと条件カバレッジの対象となります。else条件は直接的にはカバレッジの対象となりません。if条件または最後のelseif条件 (存在する場合) の偽のケースは、else条件の真のケースであり、その逆も同様です。したがって、If ブロックの残りにおけるフル カバレッジは、else条件のフル カバレッジも意味します。
Simulink Coverage™ は、各 if 条件および elseif 条件が真および偽に評価されたタイム ステップの総数を報告します。if 条件または elseif 条件が少なくとも 1 回真に評価され、かつ少なくとも 1 回偽に評価された場合、判定カバレッジは 100% になります。if 条件または elseif 条件が一度も真に評価されなかった場合、あるいは if 条件または elseif 条件が一度も偽に評価されなかった場合、判定カバレッジは 50% になります。前の if 条件または elseif 条件がどのタイム ステップでも偽にならなかった場合、elseif 条件の判定カバレッジは 0% になることがあります。
If ブロックはその入力信号を比較するため、[関係演算子の境界] カバレッジ メトリクスを選択すると、If ブロックは関係演算子の境界カバレッジの対象になります。詳細については、関係演算子の境界カバレッジ (Simulink Coverage)を参照してください。
カバレッジ レポートには、Simulink Coverage で評価された式が表示され、その式が真および偽であったタイム ステップの数が報告されます。たとえば、入力がゼロに等しくないかどうかを If ブロックで評価するケースを考えると、カバレッジ レポートには判定として if(u1 ~= 0) が表示されます。

拡張機能
C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。
HDL Coder™ には、HDL の実装および合成されたロジックに影響する追加のコンフィギュレーション オプションがあります。
このブロックには 1 つの既定の HDL アーキテクチャがあります。
| ConstrainedOutputPipeline | 既存の遅延を設計内で移動することによって出力に配置するレジスタの数。分散型パイプラインではこれらのレジスタは再分散されません。既定の設定は |
| InputPipeline | 生成されたコードに挿入する入力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
| OutputPipeline | 生成されたコードに挿入する出力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
| SynthesisAttributes | モデルのブロックとブロック出力信号の合成属性を指定します。生成された HDL コードには、これらの属性が含まれます。詳細については、SynthesisAttributes (HDL Coder)を参照してください。 |
バージョン履歴
R2006a より前に導入[SynthesisAttributes] HDL ブロック プロパティを使用して、ブロックとその出力信号の合成属性を指定します。HDL Coder は、生成される HDL コードにこれらの属性を含めます。
R2026a 以降、ブロックで以下を行うことができます。
モデル化の要件に応じて、If ブロックの入力端子のラベルをカスタマイズする。以前は、入力端子ラベルとして
u1、u2などの既定の名前しか使用できませんでした。if 条件および elseif 条件に対して、以前はサポートされていなかったさまざまな論理式を使用する。式のリストの詳細については、ifパラメーターを参照してください。
更新されたブロック ダイアログ ボックスでは、論理式をテーブルで指定できます。elseif 式をコンマ区切りリストで指定する必要はなくなりました。この変更により、ロジックの流れ全体の可視化と解析が簡単になります。テーブルには、if-else 式の追加、削除、上下への移動が可能な新しいアクション ボタンもあります。これらのボタンは、モデル化の要件に応じて式を整理するのに役立ちます。さらに、新しい式エディター ボックスで複雑な式を編集できます。
生成コードには if-else 式が含まれます。この変更により、switch-case ステートメントは含まれなくなり、生成コードの可読性が高まります。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)


