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

📄 ps_flc3_controla0515_acc.c

📁 其中提到遺傳學的程式碼與應用提供給次淚相向的研究者參考下載
💻 C
字号:
/*
 * This file is not available for use in any application other than as a
 * MATLAB(R) MEX file for use with the Simulink(R) Accelerator product.
 */

/*
 * PS_flc3_controlA0515_acc.c
 * 
 * Real-Time Workshop code generation for Simulink model "PS_flc3_controlA0515_acc.mdl".
 *
 * Model Version              : 1.105
 * Real-Time Workshop version : 6.1  (R14SP1)  05-Sep-2004
 * C source code generated on : Fri May 13 21:17:16 2005
 */

#include <math.h>
#include <string.h>
#include "PS_flc3_controlA0515_acc.h"
#include "PS_flc3_controlA0515_acc_private.h"
#include <stdio.h>
#include "simstruc.h"
#include "fixedpoint.h"

#define CodeFormat                      S-Function
#define AccDefine1                      Accelerator_S-Function

/* Outputs for root system: '<Root>' */
static void mdlOutputs(SimStruct *S, int_T tid)
{
  /* simstruct variables */
  PS_flc3_controlA0515_BlockIO *PS_flc3_controlA0515_B =
    (PS_flc3_controlA0515_BlockIO *) _ssGetBlockIO(S);
  PS_flc3_controlA0515_ContinuousStates *PS_flc3_controlA0515_X =
    (PS_flc3_controlA0515_ContinuousStates*) ssGetContStates(S);
  PS_flc3_controlA0515_D_Work *PS_flc3_controlA0515_DWork =
    (PS_flc3_controlA0515_D_Work *) ssGetRootDWork(S);
  PS_flc3_controlA0515_Parameters *PS_flc3_controlA0515_P =
    (PS_flc3_controlA0515_Parameters *) ssGetDefaultParam(S);

  /* local block i/o variables */

  real_T rtb_PulseGenerator;
  real_T rtb_Derivative1;
  real_T rtb_Product[2];
  real_T rtb_Sum_j;
  real_T rtb_Product_i[2];
  real_T rtb_Sum_k;
  real_T rtb_Product_n[2];
  real_T rtb_Sum_o;
  real_T rtb_Product_b[2];
  real_T rtb_Sum_e;
  real_T rtb_Product_bw[2];
  real_T rtb_Sum_la;
  real_T rtb_netsum[5];
  real_T rtb_Product_h[5];
  real_T rtb_Sum_g;
  real_T rtb_Derivative;
  real_T rtb_Integral;

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

    /* DiscretePulseGenerator: '<Root>/Pulse Generator' */
    rtb_PulseGenerator =
      (PS_flc3_controlA0515_DWork->clockTickCounter <
      PS_flc3_controlA0515_P->PulseGenerator_Duty &&
      PS_flc3_controlA0515_DWork->clockTickCounter >= 0) ?
     PS_flc3_controlA0515_P->PulseGenerator_Amp :
      0.0;
    if (PS_flc3_controlA0515_DWork->clockTickCounter >=
     PS_flc3_controlA0515_P->PulseGenerator_Period-1) {
      PS_flc3_controlA0515_DWork->clockTickCounter = 0;
    } else {
      (PS_flc3_controlA0515_DWork->clockTickCounter)++;
    }

    PS_flc3_controlA0515_B->Constant = PS_flc3_controlA0515_P->Constant_Value;

    PS_flc3_controlA0515_B->Gain = (rtb_PulseGenerator -
      PS_flc3_controlA0515_B->Constant) * PS_flc3_controlA0515_P->Gain_Gain;
  }

  /* TransferFcn Block: <Root>/Transfer Fcn2 */
  PS_flc3_controlA0515_B->TransferFcn2 =
    PS_flc3_controlA0515_P->TransferFcn2_C*PS_flc3_controlA0515_X->TransferFcn2_CSTATE[2];

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

    /* Scope: '<Root>/Scope' */
    /* Call into Simulink for Scope */
    ssCallAccelRunBlock(S, 0, 5, SS_CALL_MDL_OUTPUTS);
  }

  PS_flc3_controlA0515_B->SigLog = PS_flc3_controlA0515_B->TransferFcn2 *
    PS_flc3_controlA0515_P->Gain2_Gain;

  PS_flc3_controlA0515_B->Sum = PS_flc3_controlA0515_B->Gain -
    PS_flc3_controlA0515_B->TransferFcn2;

  /* Derivative Block: <S1>/Derivative1 */
  {
    real_T t = ssGetTaskTime(S,tid);
    real_T timeStampA = PS_flc3_controlA0515_DWork->Derivative1_RWORK.TimeStampA;
    real_T timeStampB = PS_flc3_controlA0515_DWork->Derivative1_RWORK.TimeStampB;

    if (timeStampA >= t && timeStampB >= t) {
      rtb_Derivative1 = 0.0;
    } else {
      real_T deltaT;
      real_T *lastBank =
        &PS_flc3_controlA0515_DWork->Derivative1_RWORK.TimeStampA;
      if (timeStampA < timeStampB) {
        if (timeStampB < t) {
          lastBank += 2;
        }
      } else if (timeStampA >= t) {
        lastBank += 2;
      }
      deltaT = t - *lastBank++;
      rtb_Derivative1 = (PS_flc3_controlA0515_B->Sum - *lastBank++) / deltaT;
    }
  }

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

    PS_flc3_controlA0515_B->IW111[0] = PS_flc3_controlA0515_P->IW111_Value[0];
    PS_flc3_controlA0515_B->IW111[1] = PS_flc3_controlA0515_P->IW111_Value[1];

    PS_flc3_controlA0515_B->IW112[0] = PS_flc3_controlA0515_P->IW112_Value[0];
    PS_flc3_controlA0515_B->IW112[1] = PS_flc3_controlA0515_P->IW112_Value[1];

    PS_flc3_controlA0515_B->IW113[0] = PS_flc3_controlA0515_P->IW113_Value[0];
    PS_flc3_controlA0515_B->IW113[1] = PS_flc3_controlA0515_P->IW113_Value[1];

    PS_flc3_controlA0515_B->IW114[0] = PS_flc3_controlA0515_P->IW114_Value[0];
    PS_flc3_controlA0515_B->IW114[1] = PS_flc3_controlA0515_P->IW114_Value[1];

    PS_flc3_controlA0515_B->IW115[0] = PS_flc3_controlA0515_P->IW115_Value[0];
    PS_flc3_controlA0515_B->IW115[1] = PS_flc3_controlA0515_P->IW115_Value[1];
  }

  PS_flc3_controlA0515_B->SE1 = PS_flc3_controlA0515_B->Sum *
    PS_flc3_controlA0515_P->SE1_Gain;

  PS_flc3_controlA0515_B->SDE001 = rtb_Derivative1 *
    PS_flc3_controlA0515_P->SDE001_Gain;

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

    rtb_Product[0] = PS_flc3_controlA0515_B->IW111[0] *
      PS_flc3_controlA0515_B->SE1;
    rtb_Product[1] = PS_flc3_controlA0515_B->IW111[1] *
      PS_flc3_controlA0515_B->SDE001;

    /* Sum: '<S15>/Sum' */
    rtb_Sum_j = rtb_Product[0];
    rtb_Sum_j += rtb_Product[1];

    rtb_Product_i[0] = PS_flc3_controlA0515_B->IW112[0] *
      PS_flc3_controlA0515_B->SE1;
    rtb_Product_i[1] = PS_flc3_controlA0515_B->IW112[1] *
      PS_flc3_controlA0515_B->SDE001;

    /* Sum: '<S16>/Sum' */
    rtb_Sum_k = rtb_Product_i[0];
    rtb_Sum_k += rtb_Product_i[1];

    rtb_Product_n[0] = PS_flc3_controlA0515_B->IW113[0] *
      PS_flc3_controlA0515_B->SE1;
    rtb_Product_n[1] = PS_flc3_controlA0515_B->IW113[1] *
      PS_flc3_controlA0515_B->SDE001;

    /* Sum: '<S17>/Sum' */
    rtb_Sum_o = rtb_Product_n[0];
    rtb_Sum_o += rtb_Product_n[1];

    rtb_Product_b[0] = PS_flc3_controlA0515_B->IW114[0] *
      PS_flc3_controlA0515_B->SE1;
    rtb_Product_b[1] = PS_flc3_controlA0515_B->IW114[1] *
      PS_flc3_controlA0515_B->SDE001;

    /* Sum: '<S18>/Sum' */
    rtb_Sum_e = rtb_Product_b[0];
    rtb_Sum_e += rtb_Product_b[1];

    rtb_Product_bw[0] = PS_flc3_controlA0515_B->IW115[0] *
      PS_flc3_controlA0515_B->SE1;
    rtb_Product_bw[1] = PS_flc3_controlA0515_B->IW115[1] *
      PS_flc3_controlA0515_B->SDE001;

    /* Sum: '<S19>/Sum' */
    rtb_Sum_la = rtb_Product_bw[0];
    rtb_Sum_la += rtb_Product_bw[1];

    {
      real_T cg_in_0_28_0[5];
      int32_T i1;

      for(i1=0; i1<5; i1++) {
        PS_flc3_controlA0515_B->b1[i1] = PS_flc3_controlA0515_P->b1_Value[i1];
      }

      cg_in_0_28_0[0] = rtb_Sum_j;
      cg_in_0_28_0[1] = rtb_Sum_k;
      cg_in_0_28_0[2] = rtb_Sum_o;
      cg_in_0_28_0[3] = rtb_Sum_e;
      cg_in_0_28_0[4] = rtb_Sum_la;
      for(i1=0; i1<5; i1++) {
        rtb_netsum[i1] = cg_in_0_28_0[i1] + PS_flc3_controlA0515_B->b1[i1];

        PS_flc3_controlA0515_B->IW211[i1] =
          PS_flc3_controlA0515_P->IW211_Value[i1];

        rtb_Product_h[i1] = PS_flc3_controlA0515_B->IW211[i1] *
          rt_SATURATE(rtb_netsum[i1],
         PS_flc3_controlA0515_P->Saturation_LowerSat,
         PS_flc3_controlA0515_P->Saturation_UpperSat);
      }
    }

    /* Sum: '<S24>/Sum' */
    rtb_Sum_g = rtb_Product_h[0];
    rtb_Sum_g += rtb_Product_h[1];
    rtb_Sum_g += rtb_Product_h[2];
    rtb_Sum_g += rtb_Product_h[3];
    rtb_Sum_g += rtb_Product_h[4];

    PS_flc3_controlA0515_B->b2 = PS_flc3_controlA0515_P->b2_Value;

    PS_flc3_controlA0515_B->SU1 = (rtb_Sum_g + PS_flc3_controlA0515_B->b2) *
      PS_flc3_controlA0515_P->SU1_Gain;
  }

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

  PS_flc3_controlA0515_B->D = PS_flc3_controlA0515_B->Sum1 *
    PS_flc3_controlA0515_P->D_Gain;

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

    if (timeStampA >= t && timeStampB >= t) {
      rtb_Derivative = 0.0;
    } else {
      real_T deltaT;
      real_T *lastBank =
        &PS_flc3_controlA0515_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_controlA0515_B->D - *lastBank++) / deltaT;
    }
  }

  /* TransferFcn Block: <S2>/Integral */
  rtb_Integral =
    PS_flc3_controlA0515_P->Integral_C*PS_flc3_controlA0515_X->Integral_CSTATE;

  PS_flc3_controlA0515_B->Sum_l = (PS_flc3_controlA0515_B->Sum1 *
    PS_flc3_controlA0515_P->Proportional_Gain + rtb_Integral) + rtb_Derivative;
}

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

  /* simstruct variables */
  PS_flc3_controlA0515_BlockIO *PS_flc3_controlA0515_B =
    (PS_flc3_controlA0515_BlockIO *) _ssGetBlockIO(S);
  PS_flc3_controlA0515_D_Work *PS_flc3_controlA0515_DWork =
    (PS_flc3_controlA0515_D_Work *) ssGetRootDWork(S);

  /* Derivative Block: <S1>/Derivative1 */
  {
    real_T timeStampA = PS_flc3_controlA0515_DWork->Derivative1_RWORK.TimeStampA;
    real_T timeStampB = PS_flc3_controlA0515_DWork->Derivative1_RWORK.TimeStampB;
    real_T *lastBank = &PS_flc3_controlA0515_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_controlA0515_B->Sum;
  }

  /* Derivative Block: <S2>/Derivative */
  {
    real_T timeStampA = PS_flc3_controlA0515_DWork->Derivative_RWORK.TimeStampA;
    real_T timeStampB = PS_flc3_controlA0515_DWork->Derivative_RWORK.TimeStampB;
    real_T *lastBank = &PS_flc3_controlA0515_DWork->Derivative_RWORK.TimeStampA;

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

/* Derivatives for root system: '<Root>' */
#define MDL_DERIVATIVES
static void mdlDerivatives(SimStruct *S)
{
  /* simstruct variables */
  PS_flc3_controlA0515_BlockIO *PS_flc3_controlA0515_B =
    (PS_flc3_controlA0515_BlockIO *) _ssGetBlockIO(S);
  PS_flc3_controlA0515_ContinuousStates *PS_flc3_controlA0515_X =
    (PS_flc3_controlA0515_ContinuousStates*) ssGetContStates(S);
  PS_flc3_controlA0515_StateDerivatives *PS_flc3_controlA0515_Xdot =
    (PS_flc3_controlA0515_StateDerivatives*) ssGetdX(S);
  PS_flc3_controlA0515_Parameters *PS_flc3_controlA0515_P =
    (PS_flc3_controlA0515_Parameters *) ssGetDefaultParam(S);

  /* TransferFcn Block: <Root>/Transfer Fcn2 */
  {

    PS_flc3_controlA0515_Xdot->TransferFcn2_CSTATE[0] =
      PS_flc3_controlA0515_P->TransferFcn2_B*PS_flc3_controlA0515_B->Sum_l;
    PS_flc3_controlA0515_Xdot->TransferFcn2_CSTATE[0] +=
      (PS_flc3_controlA0515_P->TransferFcn2_A[0])*PS_flc3_controlA0515_X->TransferFcn2_CSTATE[0]
      +
      (PS_flc3_controlA0515_P->TransferFcn2_A[1])*PS_flc3_controlA0515_X->TransferFcn2_CSTATE[1]
      +
      (PS_flc3_controlA0515_P->TransferFcn2_A[2])*PS_flc3_controlA0515_X->TransferFcn2_CSTATE[2];

    PS_flc3_controlA0515_Xdot->TransferFcn2_CSTATE[1] =
      (PS_flc3_controlA0515_P->TransferFcn2_A[3])*PS_flc3_controlA0515_X->TransferFcn2_CSTATE[0];

    PS_flc3_controlA0515_Xdot->TransferFcn2_CSTATE[2] =
      (PS_flc3_controlA0515_P->TransferFcn2_A[4])*PS_flc3_controlA0515_X->TransferFcn2_CSTATE[1];
  }

  /* TransferFcn Block: <S2>/Integral */
  {

    PS_flc3_controlA0515_Xdot->Integral_CSTATE =
      PS_flc3_controlA0515_P->Integral_B*PS_flc3_controlA0515_B->Sum1;
  }
}

/* Function to initialize sizes */
static void mdlInitializeSizes(SimStruct *S)
{

  /* checksum */
  ssSetChecksumVal(S, 0, 2944462588U);
  ssSetChecksumVal(S, 1, 1491110367U);
  ssSetChecksumVal(S, 2, 3000242492U);
  ssSetChecksumVal(S, 3, 21878708U);

  /* options */
  ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);

  /* Accelerator check memory map size match for DWork */
  if (ssGetSizeofDWork(S) != sizeof(PS_flc3_controlA0515_D_Work)) {
    ssSetErrorStatus(S,"Unexpected error: Internal DWork sizes do "
     "not match for accelerator mex file.");
  }

  /* Accelerator check memory map size match for BlockIO */
  if (ssGetSizeofGlobalBlockIO(S) != sizeof(PS_flc3_controlA0515_BlockIO)) {
    ssSetErrorStatus(S,"Unexpected error: Internal BlockIO sizes do "
     "not match for accelerator mex file.");
  }

  /* model parameters */
  _ssSetDefaultParam(S, (real_T *) &PS_flc3_controlA0515_DefaultParameters);

  /* non-finites */
  rt_InitInfAndNaN(sizeof(real_T));
}

/* Empty mdlInitializeSampleTimes function (never called) */
static void mdlInitializeSampleTimes(SimStruct *S) { }

/* Empty mdlTerminate function (never called) */
static void mdlTerminate(SimStruct *S) { }

/* MATLAB MEX Glue */
#include "simulink.c"

⌨️ 快捷键说明

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