このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
simulink金宝app®エンジンでは、モデルの S-Function で、サンプル時間がどのように使用されるのかを指定しなければなりません。この情報は、mdlInitializeSizes
またはmdlSetWorkWidths
からマクロssSetModelReferenceSampleTimeInheritanceRule
を呼び出すと指定できます。このマクロを使うには、以下のようにします。
s函数が次のいずれかのマクロを呼び出すかどうかを確認します。
S-Function TLC コードで以下を確認します。
LibBlockSampleTime
CompiledModel.SampleTime
libblockInputSignalSampletime
LibBlockInputSignalOffsetTime
LibBlockOutputSignalSampleTime
LibBlockOutputSignalOffsetTime
検索結果に応じて、次の表に示されているようにssSetModelReferenceSampleTimeInheritanceRule
を使用します。
条件 | 使用する機能 | 例 |
---|---|---|
マクロまたは関数のいずれも存在せず,s函数によってモデルのサンプル時間の継承が阻害されない。 |
sssetModelReferencesMampletimeInherItancerule(s,use_default_for_discrete_inheritance) |
|
マクロまたは関数のいずれかが、次の目的で使用される。
|
ssSetModelReferenceSampleTimeInheritanceRule... (S,USE_DEFAULT_FOR_DISCRETE_INHERITANCE) |
次の 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 の例 静态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ブロックのサンプル時間の継承の詳細については、参照モデルのサンプル時間を参照してください。