このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
スイッチ
この例では、Simulink® ブロック、Stateflow® チャート、および MATLAB® Function ブロックを使用して switch
構造を実装する方法を示します。
C コンストラクター
switch (u1) { case 2: y1 = u2; break; case 3: u3; break; default: y1 = u4; break; }
switch のモデル化パターン: Switch Case ブロック
switch
ステートメントを作成する方法の 1 つとして、[Simulink]、[Signal Routing] ライブラリの Switch Case ブロックを使用する方法があります。
1. モデル例 ex_switch_SL
を開きます。
モデルにはSwitch Case Action Subsystemが含まれています。Switch Case ブロックは整数の入力を受け取るため、入力信号 u1
は int32
に型キャストされています。
2. モデルをビルドしてコードを生成するには、Ctrl+B を押します。
switch
構造を実装するコードが ex_switch_SL.c
の関数 ex_switch_SL_step
に含まれています。
/* Exported block signals */ int32_T u1; /* '<Root>/u1' */ /* External inputs (root inport signals with default storage) */ ExternalInputs rtU; /* External outputs (root outports fed by signals with default storage) */ ExternalOutputs rtY; /* Model step function */ void ex_switch_SL_step(void) { /* SwitchCase: '<Root>/Switch Case' incorporates: * Inport: '<Root>/u1' */ switch (u1) { case 2: /* Outputs for IfAction SubSystem: '<Root>/Switch Case Action Subsystem' incorporates: * ActionPort: '<S1>/Action Port' */ /* Outport: '<Root>/y1' incorporates: * Inport: '<Root>/u2' * SignalConversion generated from: '<S1>/u2' */ rtY.y1 = rtU.u2; /* End of Outputs for SubSystem: '<Root>/Switch Case Action Subsystem' */ break; case 3: /* Outputs for IfAction SubSystem: '<Root>/Switch Case Action Subsystem1' incorporates: * ActionPort: '<S2>/Action Port' */ /* Outport: '<Root>/y1' incorporates: * Inport: '<Root>/u3' * SignalConversion generated from: '<S2>/u3' */ rtY.y1 = rtU.u3; /* End of Outputs for SubSystem: '<Root>/Switch Case Action Subsystem1' */ break; default: /* Outputs for IfAction SubSystem: '<Root>/Switch Case Action Subsystem2' incorporates: * ActionPort: '<S3>/Action Port' */ /* Outport: '<Root>/y1' incorporates: * Inport: '<Root>/u4' * SignalConversion generated from: '<S3>/u4' */ rtY.y1 = rtU.u4; /* End of Outputs for SubSystem: '<Root>/Switch Case Action Subsystem2' */ break; } /* End of SwitchCase: '<Root>/Switch Case' */ }
switch のモデル化パターン: MATLAB Function ブロック
1. モデル例 ex_switch_ML
を開きます。
MATLAB Function ブロックには次の関数が含まれています。
function y1 = fcn(u1, u2, u3, u4) switch u1 case 2 y1 = u2; case 3 y1 = u3; otherwise y1 = u4; end
2. モデルをビルドしてコードを生成するには、Ctrl+B を押します。
switch
構造を実装するコードが ex_switch_ML.c
の関数 ex_switch_ML_step
に含まれています。
/* External inputs (root inport signals with default storage) */ ExternalInputs rtU; /* External outputs (root outports fed by signals with default storage) */ ExternalOutputs rtY; /* Model step function */ void ex_switch_ML_step(void) { /* MATLAB Function: '<Root>/MATLAB Function' incorporates: * Inport: '<Root>/u1' */ switch (rtU.u1) { case 2: /* Outport: '<Root>/y1' incorporates: * Inport: '<Root>/u2' */ rtY.y1 = rtU.u2; break; case 3: /* Outport: '<Root>/y1' incorporates: * Inport: '<Root>/u3' */ rtY.y1 = rtU.u3; break; default: /* Outport: '<Root>/y1' incorporates: * Inport: '<Root>/u4' */ rtY.y1 = rtU.u4; break; } /* End of MATLAB Function: '<Root>/MATLAB Function' */ }
if-elseif-else の switch ステートメントへの変換
MATLAB Function ブロックまたは Stateflow チャートで if-elseif-else
判定ロジックを使用している場合、コンフィギュレーション パラメーターを使用して、そのブロックまたはチャートを switch
ステートメントに変換できます。[コンフィギュレーション パラメーター]、[コード生成]、[コード スタイル]、[if-elseif-else のパターンを switch-case ステートメントに変換する] パラメーターを選択します。詳細については、Converting If-Elseif-Else Code to Switch-Case Statementsを参照してください。Stateflow チャートを使用したこの変換の詳細については、Enhance Readability of Code for Flow Chartsを参照してください。