Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

サンプル時間継承ルールを指定する S-Function

simulink金宝app®エンジンでは、モデルの S-Function で、サンプル時間がどのように使用されるのかを指定しなければなりません。この情報は、mdlInitializeSizesまたはmdlSetWorkWidthsからマクロssSetModelReferenceSampleTimeInheritanceRuleを呼び出すと指定できます。このマクロを使うには、以下のようにします。

  1. s函数が次のいずれかのマクロを呼び出すかどうかを確認します。

  2. S-Function TLC コードで以下を確認します。

    • LibBlockSampleTime

    • CompiledModel.SampleTime

    • libblockInputSignalSampletime

    • LibBlockInputSignalOffsetTime

    • LibBlockOutputSignalSampleTime

    • LibBlockOutputSignalOffsetTime

  3. 検索結果に応じて、次の表に示されているようにssSetModelReferenceSampleTimeInheritanceRuleを使用します。

    条件 使用する機能
    マクロまたは関数のいずれも存在せず,s函数によってモデルのサンプル時間の継承が阻害されない。
    sssetModelReferencesMampletimeInherItancerule(s,use_default_for_discrete_inheritance)

    マクロまたは関数のいずれかが、次の目的で使用される。

    • サンプル時間が継承されるか、連続か、または定数の場合、エラーをスローする

    • ssIsSampleHitを確認する

    • 設定前にmdlSetInputPortSampleTimeまたはmdlSetOutputPortSampleTimeでサンプル時間が継承されるかどうかを確認する

    ssSetModelReferenceSampleTimeInheritanceRule... (S,USE_DEFAULT_FOR_DISCRETE_INHERITANCE)

    次のmdlOutputsのコードについて考えます。

    static void mdlOutputs(SimStruct *S, int_T tid) { const real_T *u = (const real_T*) ssGetInputPortSignal(S,0); real_T *y = ssGetOutputPortSignal(S,0); y[0] = ssGetSampleTime(S,tid) * u[0]; }
    s函数がパラメーター、出力などの計算にサンプル時間を使用する。
    ssSetModelReferenceSampleTimeInheritanceRule (S, DISALLOW_SAMPLE_TIME_INHERITANCE)

    S-Function の例sfun_multirate.cからのmdlOutputsコードを考えます。

    静态void mdlOutputs(simStruct *s,int_t tid){inputRealPtrStype enableptrs;int *enabled = ssgetiwork(s);int enableTid = ssgetInputportSampleTimeIndex(s,enable_iport);int signaltid = ssgetInputportSampleTimeIndex(s,signal_iport);real_t enablets = ssgetInputportSampletime(s,enable_iport);real_t enableTsOffset = ssgetInputportoffsettime(s,enable_iport);if(enablets ==连续_sample_time && enableTsOffSet == 0.0){if(ssismajortimestep(s)&& sisconcontinuumTask(s,tid)){if(sigraltID == enableTID ||ssgetInputPorterRealSignalPtrs(s,enable_iport);*启用=(*enableptrs [0]> 0.0);}}} else {int enableTid = ssgetInputportsampletsimentex(s,enable_iport); if (ssIsSampleHit(S, enableTid, tid)) { if (enableTid == signalTid || ssIsSpecialSampleHit(S, signalTid, enableTid, tid)) { enablePtrs = ssGetInputPortRealSignalPtrs(S,ENABLE_IPORT); *enabled = (*enablePtrs[0] > 0.0); } } } if (ssIsSampleHit(S, signalTid, tid) && (*enabled)) { InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,SIGNAL_IPORT); real_T signal = *uPtrs[0]; int i; for (i = 0; i < NOUTPUTS; i++) { int outTid = ssGetOutputPortSampleTimeIndex(S,i); if (outTid==signalTid || ssIsSpecialSampleHit(S, outTid, signalTid, tid)) { real_T *y = ssGetOutputPortRealSignal(S,i); *y = signal; } } } } /* end mdlOutputs */

メモ:

s函数がssSetModelReferenceSampleTimeInheritanceRuleマクロを設定しない場合は、既定の設定で Simulink は、その S-Function が S-Function を含んでいるモデルでのサンプル時間の継承を阻害することはないとみなします。ただし、エンジンは、このマクロが設定されていない S-Function がモデルに含まれていることを示す警告を発します。

[诊断][サンプル時間]ペインでコンフィギュレーション パラメーターの設定を使用して、指定されていないサンプル時間継承ルールがある S-Function を検出したときに Simulink エンジンがどのように反応するかを制御できます。[指定のないサンプル時間の継承]诊断を,[なし][警告]または[エラー]に切り替えます。既定の設定は[警告]です。

Modelブロックのサンプル時間の継承の詳細については、参照モデルのサンプル時間を参照してください。

関連するトピック