Real-Time Workshop User's Guide | ![]() ![]() |
アキュムレータ
Simulinkは、図 8-8のブロック線図をアキュムレータとして認識します。アキュムレータ構成 -- Constantブロック、SumブロックおよびUnit Delayブロックを通したフィードバックで構成されます -- は、ブロック線図または低レベルのサブシステム内で認識されます。
Block reductionオプションを利用して、アキュムレータから生成されたコードを著しく最適化することができます。図 8-9のように、SimulinkのSimulation parametersダイアログのAdvancedページでこのオプションをオンにします。
Block reduction オプションがオンのとき、Simulinkは統合されたブロック Sum_sythesized_accumulatorを作成します。この統合されたブロックは、図 8-8のブロック線図を置き換えて、簡単なインクリメントの計算にします。
/* Compute block outputs */ void MdlOutputs(int_T tid) { /* UnadornAccum Block: <Root>/Sum_sythesized_accumulator */ rtB.Sum_sythesized_accumulator++; /* Outport Block: <Root>/Out1 */ rtY.Out1 = rtB.Sum_sythesized_accumulator; }
Block reductionがオフのとき、生成されたコードは、ブロック線図の通りに反映されますが、効率的ではありません。
/* Compute block outputs */ void MdlOutputs(int_T tid) { /* local block i/o variables */ real_T rtb_Unit_Delay; /* UnitDelay Block: <Root>/Unit Delay */ rtb_Unit_Delay = rtDWork.Unit_Delay_DSTATE; /* Sum Block: <Root>/Sum */ rtB.Sum = rtC_Constant + rtb_Unit_Delay; /* Outport Block: <Root>/Out1 */ rtY.Out1 = rtB.Sum; } /* Perform model update */ void MdlUpdate(int_T tid) { /* UnitDelay Block: <Root>/Unit Delay */ rtDWork.Unit_Delay_DSTATE = rtB.Sum; }
![]() | ルックアップテーブルと多項式 | データタイプの使用法 | ![]() |