⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps_flc3_controla0513_acc.c

📁 其中提到遺傳學的程式碼與應用提供給次淚相向的研究者參考下載
💻 C
📖 第 1 页 / 共 4 页
字号:
    real_T t = ssGetTaskTime(S,tid);
    real_T timeStampA =
      PS_flc3_controlA0513_DWork->Derivative1_RWORK_pj.TimeStampA;
    real_T timeStampB =
      PS_flc3_controlA0513_DWork->Derivative1_RWORK_pj.TimeStampB;

    if (timeStampA >= t && timeStampB >= t) {
      rtb_Derivative1_f = 0.0;
    } else {
      real_T deltaT;
      real_T *lastBank =
        &PS_flc3_controlA0513_DWork->Derivative1_RWORK_pj.TimeStampA;
      if (timeStampA < timeStampB) {
        if (timeStampB < t) {
          lastBank += 2;
        }
      } else if (timeStampA >= t) {
        lastBank += 2;
      }
      deltaT = t - *lastBank++;
      rtb_Derivative1_f = (PS_flc3_controlA0513_B->Sum9 - *lastBank++) / deltaT;
    }
  }

  if (ssIsSampleHit(S, 1, tid)) {       /* Sample time: [0.001s, 0.0s] */

    PS_flc3_controlA0513_B->IW111_l[0] =
      PS_flc3_controlA0513_P->IW111_Value_a[0];
    PS_flc3_controlA0513_B->IW111_l[1] =
      PS_flc3_controlA0513_P->IW111_Value_a[1];

    PS_flc3_controlA0513_B->IW112_h[0] =
      PS_flc3_controlA0513_P->IW112_Value_h[0];
    PS_flc3_controlA0513_B->IW112_h[1] =
      PS_flc3_controlA0513_P->IW112_Value_h[1];

    PS_flc3_controlA0513_B->IW113_k[0] =
      PS_flc3_controlA0513_P->IW113_Value_l[0];
    PS_flc3_controlA0513_B->IW113_k[1] =
      PS_flc3_controlA0513_P->IW113_Value_l[1];

    PS_flc3_controlA0513_B->IW114_g[0] =
      PS_flc3_controlA0513_P->IW114_Value_h[0];
    PS_flc3_controlA0513_B->IW114_g[1] =
      PS_flc3_controlA0513_P->IW114_Value_h[1];

    PS_flc3_controlA0513_B->IW115_hq[0] =
      PS_flc3_controlA0513_P->IW115_Value_p[0];
    PS_flc3_controlA0513_B->IW115_hq[1] =
      PS_flc3_controlA0513_P->IW115_Value_p[1];
  }

  PS_flc3_controlA0513_B->SE1_kg = PS_flc3_controlA0513_B->Sum9 *
    PS_flc3_controlA0513_P->SE1_Gain_b;

  PS_flc3_controlA0513_B->SDE001_a = rtb_Derivative1_f *
    PS_flc3_controlA0513_P->SDE001_Gain_l5;

  if (ssIsSampleHit(S, 1, tid)) {       /* Sample time: [0.001s, 0.0s] */

    rtb_Product_dt[0] = PS_flc3_controlA0513_B->IW111_l[0] *
      PS_flc3_controlA0513_B->SE1_kg;
    rtb_Product_dt[1] = PS_flc3_controlA0513_B->IW111_l[1] *
      PS_flc3_controlA0513_B->SDE001_a;

    /* Sum: '<S106>/Sum' */
    rtb_Sum_hw = rtb_Product_dt[0];
    rtb_Sum_hw += rtb_Product_dt[1];

    rtb_Product_bt[0] = PS_flc3_controlA0513_B->IW112_h[0] *
      PS_flc3_controlA0513_B->SE1_kg;
    rtb_Product_bt[1] = PS_flc3_controlA0513_B->IW112_h[1] *
      PS_flc3_controlA0513_B->SDE001_a;

    /* Sum: '<S107>/Sum' */
    rtb_Sum_js = rtb_Product_bt[0];
    rtb_Sum_js += rtb_Product_bt[1];

    rtb_Product_pc[0] = PS_flc3_controlA0513_B->IW113_k[0] *
      PS_flc3_controlA0513_B->SE1_kg;
    rtb_Product_pc[1] = PS_flc3_controlA0513_B->IW113_k[1] *
      PS_flc3_controlA0513_B->SDE001_a;

    /* Sum: '<S108>/Sum' */
    rtb_Sum_gi = rtb_Product_pc[0];
    rtb_Sum_gi += rtb_Product_pc[1];

    rtb_Product_ll[0] = PS_flc3_controlA0513_B->IW114_g[0] *
      PS_flc3_controlA0513_B->SE1_kg;
    rtb_Product_ll[1] = PS_flc3_controlA0513_B->IW114_g[1] *
      PS_flc3_controlA0513_B->SDE001_a;

    /* Sum: '<S109>/Sum' */
    rtb_Sum_l = rtb_Product_ll[0];
    rtb_Sum_l += rtb_Product_ll[1];

    rtb_Product_e1[0] = PS_flc3_controlA0513_B->IW115_hq[0] *
      PS_flc3_controlA0513_B->SE1_kg;
    rtb_Product_e1[1] = PS_flc3_controlA0513_B->IW115_hq[1] *
      PS_flc3_controlA0513_B->SDE001_a;

    /* Sum: '<S110>/Sum' */
    rtb_Sum_hg = rtb_Product_e1[0];
    rtb_Sum_hg += rtb_Product_e1[1];

    {
      real_T cg_in_0_149_0[5];
      int32_T i1;

      for(i1=0; i1<5; i1++) {
        PS_flc3_controlA0513_B->b1_a[i1] =
          PS_flc3_controlA0513_P->b1_Value_a[i1];
      }

      cg_in_0_149_0[0] = rtb_Sum_hw;
      cg_in_0_149_0[1] = rtb_Sum_js;
      cg_in_0_149_0[2] = rtb_Sum_gi;
      cg_in_0_149_0[3] = rtb_Sum_l;
      cg_in_0_149_0[4] = rtb_Sum_hg;
      for(i1=0; i1<5; i1++) {
        rtb_netsum_h[i1] = cg_in_0_149_0[i1] + PS_flc3_controlA0513_B->b1_a[i1];

        PS_flc3_controlA0513_B->IW211_az[i1] =
          PS_flc3_controlA0513_P->IW211_Value_l[i1];

        rtb_Product_cz[i1] = PS_flc3_controlA0513_B->IW211_az[i1] *
          rt_SATURATE(rtb_netsum_h[i1],
         PS_flc3_controlA0513_P->Saturation_LowerSat_p,
         PS_flc3_controlA0513_P->Saturation_UpperSat_g);
      }
    }

    /* Sum: '<S115>/Sum' */
    rtb_Sum_a = rtb_Product_cz[0];
    rtb_Sum_a += rtb_Product_cz[1];
    rtb_Sum_a += rtb_Product_cz[2];
    rtb_Sum_a += rtb_Product_cz[3];
    rtb_Sum_a += rtb_Product_cz[4];

    PS_flc3_controlA0513_B->b2_k5 = PS_flc3_controlA0513_P->b2_Value_d;

    PS_flc3_controlA0513_B->SU1_h = (rtb_Sum_a + PS_flc3_controlA0513_B->b2_k5)
      * PS_flc3_controlA0513_P->SU1_Gain_m;
  }

  PS_flc3_controlA0513_B->Sum1 = PS_flc3_controlA0513_B->SU1 +
    PS_flc3_controlA0513_B->Sum;

  PS_flc3_controlA0513_B->D = PS_flc3_controlA0513_B->Sum1 *
    PS_flc3_controlA0513_P->D_Gain;

  /* Derivative Block: <S6>/Derivative */
  {
    real_T t = ssGetTaskTime(S,tid);
    real_T timeStampA = PS_flc3_controlA0513_DWork->Derivative_RWORK.TimeStampA;
    real_T timeStampB = PS_flc3_controlA0513_DWork->Derivative_RWORK.TimeStampB;

    if (timeStampA >= t && timeStampB >= t) {
      rtb_Derivative = 0.0;
    } else {
      real_T deltaT;
      real_T *lastBank =
        &PS_flc3_controlA0513_DWork->Derivative_RWORK.TimeStampA;
      if (timeStampA < timeStampB) {
        if (timeStampB < t) {
          lastBank += 2;
        }
      } else if (timeStampA >= t) {
        lastBank += 2;
      }
      deltaT = t - *lastBank++;
      rtb_Derivative = (PS_flc3_controlA0513_B->D - *lastBank++) / deltaT;
    }
  }

  /* TransferFcn Block: <S6>/Integral */
  rtb_Integral =
    PS_flc3_controlA0513_P->Integral_C*PS_flc3_controlA0513_X->Integral_CSTATE;

  PS_flc3_controlA0513_B->Sum_h = (PS_flc3_controlA0513_B->Sum1 *
    PS_flc3_controlA0513_P->Proportional_Gain + rtb_Integral) + rtb_Derivative;

  PS_flc3_controlA0513_B->Sum4 = PS_flc3_controlA0513_B->SU1_d +
    PS_flc3_controlA0513_B->Sum3;

  PS_flc3_controlA0513_B->D_f = PS_flc3_controlA0513_B->Sum4 *
    PS_flc3_controlA0513_P->D_Gain_g;

  /* Derivative Block: <S7>/Derivative */
  {
    real_T t = ssGetTaskTime(S,tid);
    real_T timeStampA =
      PS_flc3_controlA0513_DWork->Derivative_RWORK_e.TimeStampA;
    real_T timeStampB =
      PS_flc3_controlA0513_DWork->Derivative_RWORK_e.TimeStampB;

    if (timeStampA >= t && timeStampB >= t) {
      rtb_Derivative_p = 0.0;
    } else {
      real_T deltaT;
      real_T *lastBank =
        &PS_flc3_controlA0513_DWork->Derivative_RWORK_e.TimeStampA;
      if (timeStampA < timeStampB) {
        if (timeStampB < t) {
          lastBank += 2;
        }
      } else if (timeStampA >= t) {
        lastBank += 2;
      }
      deltaT = t - *lastBank++;
      rtb_Derivative_p = (PS_flc3_controlA0513_B->D_f - *lastBank++) / deltaT;
    }
  }

  /* TransferFcn Block: <S7>/Integral */
  rtb_Integral_e =
    PS_flc3_controlA0513_P->Integral_C_f*PS_flc3_controlA0513_X->Integral_i_CSTATE;

  PS_flc3_controlA0513_B->Sum_j = (PS_flc3_controlA0513_B->Sum4 *
    PS_flc3_controlA0513_P->Proportional_Gain_a + rtb_Integral_e) +
    rtb_Derivative_p;

  PS_flc3_controlA0513_B->Sum6 = PS_flc3_controlA0513_B->SU1_df +
    PS_flc3_controlA0513_B->Sum5;

  PS_flc3_controlA0513_B->D_p = PS_flc3_controlA0513_B->Sum6 *
    PS_flc3_controlA0513_P->D_Gain_j;

  /* Derivative Block: <S8>/Derivative */
  {
    real_T t = ssGetTaskTime(S,tid);
    real_T timeStampA =
      PS_flc3_controlA0513_DWork->Derivative_RWORK_k.TimeStampA;
    real_T timeStampB =
      PS_flc3_controlA0513_DWork->Derivative_RWORK_k.TimeStampB;

    if (timeStampA >= t && timeStampB >= t) {
      rtb_Derivative_h = 0.0;
    } else {
      real_T deltaT;
      real_T *lastBank =
        &PS_flc3_controlA0513_DWork->Derivative_RWORK_k.TimeStampA;
      if (timeStampA < timeStampB) {
        if (timeStampB < t) {
          lastBank += 2;
        }
      } else if (timeStampA >= t) {
        lastBank += 2;
      }
      deltaT = t - *lastBank++;
      rtb_Derivative_h = (PS_flc3_controlA0513_B->D_p - *lastBank++) / deltaT;
    }
  }

  /* TransferFcn Block: <S8>/Integral */
  rtb_Integral_c =
    PS_flc3_controlA0513_P->Integral_C_j*PS_flc3_controlA0513_X->Integral_e_CSTATE;

  PS_flc3_controlA0513_B->Sum_f = (PS_flc3_controlA0513_B->Sum6 *
    PS_flc3_controlA0513_P->Proportional_Gain_b + rtb_Integral_c) +
    rtb_Derivative_h;

  PS_flc3_controlA0513_B->Sum8 = PS_flc3_controlA0513_B->SU1_c +
    PS_flc3_controlA0513_B->Sum7;

  PS_flc3_controlA0513_B->D_l = PS_flc3_controlA0513_B->Sum8 *
    PS_flc3_controlA0513_P->D_Gain_e;

  /* Derivative Block: <S9>/Derivative */
  {
    real_T t = ssGetTaskTime(S,tid);
    real_T timeStampA =
      PS_flc3_controlA0513_DWork->Derivative_RWORK_a.TimeStampA;
    real_T timeStampB =
      PS_flc3_controlA0513_DWork->Derivative_RWORK_a.TimeStampB;

    if (timeStampA >= t && timeStampB >= t) {
      rtb_Derivative_o = 0.0;
    } else {
      real_T deltaT;
      real_T *lastBank =
        &PS_flc3_controlA0513_DWork->Derivative_RWORK_a.TimeStampA;
      if (timeStampA < timeStampB) {
        if (timeStampB < t) {
          lastBank += 2;
        }
      } else if (timeStampA >= t) {
        lastBank += 2;
      }
      deltaT = t - *lastBank++;
      rtb_Derivative_o = (PS_flc3_controlA0513_B->D_l - *lastBank++) / deltaT;
    }
  }

  /* TransferFcn Block: <S9>/Integral */
  rtb_Integral_b =
    PS_flc3_controlA0513_P->Integral_C_e*PS_flc3_controlA0513_X->Integral_o_CSTATE;

  PS_flc3_controlA0513_B->Sum_jc = (PS_flc3_controlA0513_B->Sum8 *
    PS_flc3_controlA0513_P->Proportional_Gain_m + rtb_Integral_b) +
    rtb_Derivative_o;

  PS_flc3_controlA0513_B->Sum10 = PS_flc3_controlA0513_B->SU1_h +
    PS_flc3_controlA0513_B->Sum9;

  PS_flc3_controlA0513_B->D_h = PS_flc3_controlA0513_B->Sum10 *
    PS_flc3_controlA0513_P->D_Gain_b;

  /* Derivative Block: <S10>/Derivative */
  {
    real_T t = ssGetTaskTime(S,tid);
    real_T timeStampA =
      PS_flc3_controlA0513_DWork->Derivative_RWORK_p.TimeStampA;
    real_T timeStampB =
      PS_flc3_controlA0513_DWork->Derivative_RWORK_p.TimeStampB;

    if (timeStampA >= t && timeStampB >= t) {
      rtb_Derivative_n = 0.0;
    } else {
      real_T deltaT;
      real_T *lastBank =
        &PS_flc3_controlA0513_DWork->Derivative_RWORK_p.TimeStampA;
      if (timeStampA < timeStampB) {
        if (timeStampB < t) {
          lastBank += 2;
        }
      } else if (timeStampA >= t) {
        lastBank += 2;
      }
      deltaT = t - *lastBank++;
      rtb_Derivative_n = (PS_flc3_controlA0513_B->D_h - *lastBank++) / deltaT;
    }
  }

  /* TransferFcn Block: <S10>/Integral */
  rtb_Integral_f =
    PS_flc3_controlA0513_P->Integral_C_jg*PS_flc3_controlA0513_X->Integral_n_CSTATE;

  PS_flc3_controlA0513_B->Sum_d = (PS_flc3_controlA0513_B->Sum10 *
    PS_flc3_controlA0513_P->Proportional_Gain_o + rtb_Integral_f) +
    rtb_Derivative_n;

  /* TransportDelay Block: <Root>/Transport Delay */
  {

    real_T **uBuffer =
      (real_T**)&PS_flc3_controlA0513_DWork->TransportDelay_PWORK.TUbufferPtrs[0];
    real_T **tBuffer =
      (real_T**)&PS_flc3_controlA0513_DWork->TransportDelay_PWORK.TUbufferPtrs[1];
    real_T simTime = ssGetT(S);
    real_T tMinusDelay = simTime - PS_flc3_controlA0513_P->TransportDelay_Delay;

    PS_flc3_controlA0513_B->TransportDelay = rt_TDelayInterpolate(
      tMinusDelay,
     *tBuffer,
     *uBuffer,
     PS_flc3_controlA0513_DWork->TransportDelay_IWORK.CircularBufSize,
     &PS_flc3_controlA0513_DWork->TransportDelay_IWORK.Last,
     PS_flc3_controlA0513_DWork->TransportDelay_IWORK.Tail,
     PS_flc3_controlA0513_DWork->TransportDelay_IWORK.Head,
     0,
     (boolean_T) (ssIsMinorTimeStep(S) && (ssGetTimeOfLastOutput(S) ==
       ssGetT(S))));
  }
}

/* Update for root system: '<Root>' */
#define MDL_UPDATE
static void mdlUpdate(SimStruct *S, int_T tid)
{

  /* simstruct variables */
  PS_flc3_controlA0513_BlockIO *PS_flc3_controlA0513_B =
    (PS_flc3_controlA0513_BlockIO *) _ssGetBlockIO(S);
  PS_flc3_controlA0513_D_Work *PS_flc3_controlA0513_DWork =
    (PS_flc3_controlA0513_D_Work *) ssGetRootDWork(S);
  PS_flc3_controlA0513_Parameters *PS_flc3_controlA0513_P =
    (PS_flc3_controlA0513_Parameters *) ssGetDefaultParam(S);

  /* Derivative Block: <S1>/Derivative1 */
  {
    real_T timeStampA = PS_flc3_controlA0513_DWork->Derivative1_RWORK.TimeStampA;
    real_T timeStampB = PS_flc3_controlA0513_DWork->Derivative1_RWORK.TimeStampB;
    real_T *lastBank = &PS_flc3_controlA0513_DWork->Derivative1_RWORK.TimeStampA;

    if (timeStampA != rtInf) {
      if (timeStampB == rtInf) {
        lastBank += 2;
      } else if (timeStampA >= timeStampB) {
        lastBank += 2;
      }
    }
    *lastBank++ = ssGetTaskTime(S,tid);
    *lastBank++ = PS_flc3_controlA0513_B->Sum;
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -