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

📄 dtc_svm_416_acc.c

📁 关于永磁同步电机DTC系统的无速度传感器
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
 * 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.
 */

/*
 * Real-Time Workshop code generation for Simulink model "dtc_svm_416_acc.mdl".
 *
 * Model Version                        : 1.617
 * Real-Time Workshop file version      : 5.0 $Date: 2002/05/30 19:21:33 $
 * Real-Time Workshop file generated on : Fri Apr 17 08:48:05 2009
 * TLC version                          : 5.0 (Jun 18 2002)
 * C source code generated on           : Fri Apr 17 08:48:06 2009
 */

#include <math.h>
#include <string.h>
#include "dtc_svm_416_acc.h"
#include "dtc_svm_416_acc_private.h"
#include <stdio.h>
#include "simstruc.h"

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

real_T rtInf;

/* Output and update for enable system:   
 *   '<S11>/Phasor Measurements'
 *   '<S12>/Phasor Measurements'
 *   '<S13>/Phasor Measurements'
 */
void dtc_svm_416_Phasor_Measur(SimStruct *S, int_T tid, real_T fu0, real_T
 measure, rtDW_dtc_svm_416_Phasor_Measur *localDW, rtP_dtc_svm_416_Phasor_Measur
 *localP)
{
  /* local block i/o variables */
  real_T rtb_temp127;
  real_T rtb_temp128;

  /* detect enable/disable transitions */
  if (ssIsSampleHit(S, 4, tid)) {
    EnableStates prevEnableState = (EnableStates) localDW->Phasor_Mea_a_MODE[0];
    EnableStates enableState;

    if (ssIsSampleHit(S, 4, tid)) {     /* Sample time: [0.00001, 0.0] */
     localDW->Phasor_Mea_a_MODE[1] = (fu0 > 0.0) ? SUBSYS_ENABLED :
        SUBSYS_DISABLED;
    }

    enableState = (EnableStates) localDW->Phasor_Mea_a_MODE[1];
    if (enableState == SUBSYS_ENABLED) {
      if (prevEnableState == SUBSYS_DISABLED) {
        /* SUBSYS_BECOMING_ENABLED */

        if ( ssGetT(S) != ssGetTStart(S) ) {
          ssSetSolverNeedsReset(S);
        }
        /* (system enable function is empty) */
        localDW->Phasor_Mea_a_MODE[0] = (int_T) SUBSYS_ENABLED;
      }
    } else {
      if (prevEnableState == SUBSYS_ENABLED) {
        /* SUBSYS_BECOMING_DISABLED */
        ssSetSolverNeedsReset(S);

        /* (system disable function is empty) */
        localDW->Phasor_Mea_a_MODE[0] = (int_T) SUBSYS_DISABLED;
      }
    }
  }

  /* run blocks if enabled */
  if (localDW->Phasor_Mea_a_MODE[0] == SUBSYS_ENABLED) {
    if (ssIsSampleHit(S, 4, tid)) {

      /* ComplexToMagnitudeAngle: '<S31>/Complex to Magnitude-Angle' */
      rtb_temp127 = fabs(measure);
      if (measure >= 0.0) {
        rtb_temp128 = 0.0;
      } else {
        rtb_temp128 = RT_PI;
      }

      /* Gain: '<S31>/180//pi'
       *
       * Regarding '<S31>/180//pi':
       *   Gain value: localP->pi_Gain
       */
      rtb_temp128 *= localP->pi_Gain;

      /* ComplexToRealImag: '<S31>/Complex to Real-Imag' */
      rtb_temp128 = measure;
      rtb_temp127 = 0.0;
    } }
}

/* Outputs for root system: '<Root>' */
static void mdlOutputs(SimStruct *S, int_T tid)
{
  /* simstruct variables */
  dtc_svm_416_BlockIO *dtc_svm_416_B = (dtc_svm_416_BlockIO *) _ssGetBlockIO(S);
  dtc_svm_416_ContinuousStates *dtc_svm_416_X = (dtc_svm_416_ContinuousStates*)
    ssGetContStates(S);
  dtc_svm_416_D_Work *dtc_svm_416_DWork = (dtc_svm_416_D_Work *)
    ssGetRootDWork(S);
  dtc_svm_416_Parameters *dtc_svm_416_P = (dtc_svm_416_Parameters *)
    ssGetDefaultParam(S);

  /* local block i/o variables */
  real_T rtb_Integrator_a;
  real_T rtb_Integrator1_a;
  real_T rtb_Clock;
  real_T rtb_Sum2_a;
  real_T rtb_Sum_b;
  real_T rtb_Switch1_a;
  real_T rtb_Switch2;
  real_T rtb_Multiport_Switch_a;
  real_T rtb_Multiport_Switch1_a;
  real_T rtb_Relay;
  real_T rtb_Relay1;
  real_T rtb_Relay2;
  real_T rtb_Sum4;
  real_T rtb_Sum1_g;
  real_T rtb_Sum2_e;
  real_T rtb_Fcn_h;
  real_T rtb_Fcn1_j;
  real_T rtb_Integrator3_a;
  real_T rtb_Gain2_c;
  real_T rtb_Gain3_c;
  real_T rtb_Sum8;
  real_T rtb_Sum_g;
  real_T rtb_Gain3_d;
  real_T rtb_temp183;
  real_T rtb_temp184;
  real_T rtb_temp185;
  real_T rtb_temp186;
  real_T rtb_temp187;
  real_T rtb_temp188;
  real_T rtb_temp189;
  real_T rtb_temp190;
  real_T rtb_temp191;
  real_T rtb_temp192;
  real_T rtb_temp193;
  real_T rtb_temp194;
  real_T rtb_temp195;
  real_T rtb_temp196;
  boolean_T rtb_Data_Type_Conversion3_a;
  boolean_T rtb_id_g[6];
  boolean_T rtb_id_i[6];
  boolean_T rtb_Blockinkg[6];

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Integrator: '<S50>/Integrator2' */
    dtc_svm_416_B->Integrator2_a = dtc_svm_416_X->Integrator2_a_CSTATE;

    /* Gain: '<Root>/Gain4'
     *
     * Regarding '<Root>/Gain4':
     *   Gain value: dtc_svm_416_P->Gain4_a_Gain
     */
    dtc_svm_416_B->Gain4_a = dtc_svm_416_B->Integrator2_a *
      dtc_svm_416_P->Gain4_a_Gain;
  }

  if (ssIsSampleHit(S, 3, tid)) {       /* Sample time: [2.0E-006, 0.0] */

    /* DiscreteIntegrator: '<S19>/Discrete-Time Integrator2'
     *
     * Regarding '<S19>/Discrete-Time Integrator2':
     *    Unlimited, w/o Saturation Port
     */
    dtc_svm_416_B->Discrete_Time_Integrat_a =
      dtc_svm_416_DWork->Discrete_Time_Integrat_a_DSTATE;

    /* DiscreteIntegrator: '<S19>/Discrete-Time Integrator3'
     *
     * Regarding '<S19>/Discrete-Time Integrator3':
     *    Unlimited, w/o Saturation Port
     */
    dtc_svm_416_B->Discrete_Time_Integrat_b =
      dtc_svm_416_DWork->Discrete_Time_Integrat_b_DSTATE;
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Integrator: '<S50>/Integrator' */
    rtb_Integrator_a = dtc_svm_416_X->Integrator_a_CSTATE;

    /* Integrator: '<S50>/Integrator1' */
    rtb_Integrator1_a = dtc_svm_416_X->Integrator1_a_CSTATE;

    /* Integrator: '<S50>/Integrator3' */
    rtb_Integrator3_a = dtc_svm_416_X->Integrator3_a_CSTATE;

    /* Fcn: '<S45>/Fcn5'
     *
     * Regarding '<S45>/Fcn5':
     *   Expression: u(1)*cos(u(3))-u(2)*sin(u(3))
     */
    dtc_svm_416_B->Fcn5 = rtb_Integrator_a * cos( rtb_Integrator3_a ) -
      rtb_Integrator1_a * sin( rtb_Integrator3_a );

    /* Fcn: '<S45>/Fcn6'
     *
     * Regarding '<S45>/Fcn6':
     *   Expression: u(1)*sin(u(3))+u(2)*cos(u(3))
     */
    dtc_svm_416_B->Fcn6 = rtb_Integrator_a * sin( rtb_Integrator3_a ) +
      rtb_Integrator1_a * cos( rtb_Integrator3_a );

    /* Fcn: '<S10>/Fcn1'
     *
     * Regarding '<S10>/Fcn1':
     *   Expression: (u(1)*u(4)-u(2)*u(3))*9/2
     */
    dtc_svm_416_B->Fcn1_a = ( dtc_svm_416_B->Discrete_Time_Integrat_a *
      dtc_svm_416_B->Fcn6 - dtc_svm_416_B->Discrete_Time_Integrat_b *
      dtc_svm_416_B->Fcn5 ) * 9.0 / 2.0;
  }

  if (ssIsSampleHit(S, 6, tid)) {       /* Sample time: [0.0001, 0.0] */

    /* ZeroOrderHold: '<Root>/Zero-Order Hold1' */
    dtc_svm_416_B->Zero_Order_Hold1[0] = dtc_svm_416_B->Discrete_Time_Integrat_a;
    dtc_svm_416_B->Zero_Order_Hold1[1] = dtc_svm_416_B->Discrete_Time_Integrat_b;

    /* Fcn: '<S3>/Fcn7'
     *
     * Regarding '<S3>/Fcn7':
     *   Expression: sqrt((u[1])^2+(u[2])^2)
     */
    dtc_svm_416_B->Fcn7_a = sqrt( pow(
      dtc_svm_416_B->Zero_Order_Hold1[0] , 2.0) + pow(
      dtc_svm_416_B->Zero_Order_Hold1[1] , 2.0) );
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Scope: '<Root>/Speed Te Flux' */
    /* Call into Simulink for Scope */
    ssCallAccelRunBlock(S, 8, 12, SS_CALL_MDL_OUTPUTS);
  }

  if (ssIsSampleHit(S, 7, tid)) {       /* Sample time: [0.0003333, 0.0] */

    /* ToFile: '<Root>/To File1' */
    /* Call into Simulink for To File */
    ssCallAccelRunBlock(S, 8, 13, SS_CALL_MDL_OUTPUTS);
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Fcn: '<S46>/Fcn3'
     *
     * Regarding '<S46>/Fcn3':
     *   Expression: u(1)
     */
    dtc_svm_416_B->Fcn3_a = dtc_svm_416_B->Fcn5;

    /* Fcn: '<S46>/Fcn2'
     *
     * Regarding '<S46>/Fcn2':
     *   Expression: -1/2*u(1)+sqrt(3)/2*u(2)
     */
    dtc_svm_416_B->temp115 = ( -1.0) / 2.0 * dtc_svm_416_B->Fcn5 +
      sqrt( 3.0) / 2.0 * dtc_svm_416_B->Fcn6;

    /* Fcn: '<S46>/Fcn4'
     *
     * Regarding '<S46>/Fcn4':
     *   Expression: -1/2*u(1)-sqrt(3)/2*u(2)
     */
    dtc_svm_416_B->temp117 = ( -1.0) / 2.0 * dtc_svm_416_B->Fcn5 -
      sqrt( 3.0) / 2.0 * dtc_svm_416_B->Fcn6;

    /* Scope: '<Root>/U I scope' */
    /* Call into Simulink for Scope */
    ssCallAccelRunBlock(S, 8, 17, SS_CALL_MDL_OUTPUTS);
  }

  if (ssIsSampleHit(S, 4, tid)) {       /* Sample time: [0.00001, 0.0] */

    /* UnitDelay: '<S38>/Unit Delay' */
    {
      int_T i1;

      real_T *y0 = &dtc_svm_416_B->Unit_Delay_a[0];
      real_T *dw_DSTATE = &dtc_svm_416_DWork->Unit_Delay_a_DSTATE[0];

      for (i1=0; i1 < 6; i1++) {
        y0[i1] = dw_DSTATE[i1];
      }
    }
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Clock: '<S30>/Clock' */
    rtb_Clock = ssGetT(S);

    /* S-Function (sfun_tstart): '<S30>/startTime' */

    /* S-Function Block (sfun_tstart): <S30>/startTime */
    dtc_svm_416_B->startTime = ssGetTStart(S);

    /* Lookup: '<S30>/Look-Up Table1' incorporates:
     *   Fcn: '<S30>/Fcn1'
     *   Sum: '<S30>/Sum'
     *
     * Regarding '<S30>/Fcn1':
     *   Expression: rem(u[1],period)
     */

    dtc_svm_416_B->temp117 = rt_Lookup(dtc_svm_416_P->Look_Up_Table1_XData, 3,
      (fmod( (rtb_Clock - dtc_svm_416_B->startTime) , 0.0002) ),
      dtc_svm_416_P->Look_Up_Table1_YData);
  }

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

    /* Constant: '<S25>/Constant2' */
    dtc_svm_416_B->Constant2_a = dtc_svm_416_P->Constant2_a_Value;
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Step: '<Root>/Flux_ref' */
    if (ssIsMajorTimeStep(S)) {
      if (ssGetTaskTime(S,tid) >= dtc_svm_416_P->Flux_ref_Time) {
        dtc_svm_416_DWork->Flux_ref_MODE = 1;
      } else {
        dtc_svm_416_DWork->Flux_ref_MODE = 0;
      }
    }
    /* Output value */
    dtc_svm_416_B->Flux_ref = (dtc_svm_416_DWork->Flux_ref_MODE == 1) ?
      dtc_svm_416_P->Flux_ref_YFinal : dtc_svm_416_P->Flux_ref_Y0;

    /* Step: '<Root>/Speed_ref' */
    if (ssIsMajorTimeStep(S)) {
      if (ssGetTaskTime(S,tid) >= dtc_svm_416_P->Speed_ref_Time) {
        dtc_svm_416_DWork->Speed_ref_MODE = 1;
      } else {
        dtc_svm_416_DWork->Speed_ref_MODE = 0;
      }
    }
    /* Output value */
    rtb_temp188 = (dtc_svm_416_DWork->Speed_ref_MODE == 1) ?
      dtc_svm_416_P->Speed_ref_YFinal : dtc_svm_416_P->Speed_ref_Y0;
  }

  if (ssIsSampleHit(S, 6, tid)) {       /* Sample time: [0.0001, 0.0] */

    /* ZeroOrderHold: '<Root>/Zero-Order Hold3' */
    dtc_svm_416_B->Zero_Order_Hold3 = dtc_svm_416_B->Gain4_a;
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Sum: '<Root>/Sum2' */
    rtb_Sum2_a = rtb_temp188 - dtc_svm_416_B->Zero_Order_Hold3;
  }

  if (ssIsSampleHit(S, 6, tid)) {       /* Sample time: [0.0001, 0.0] */

    /* DiscreteIntegrator: '<S5>/Discrete-Time Integrator'
     *
     * Regarding '<S5>/Discrete-Time Integrator':
     *    Limited, w/o Saturation Port
     */
    dtc_svm_416_B->Discrete_Time_Integrat_c =
      dtc_svm_416_DWork->Discrete_Time_Integrat_c_DSTATE;
    if ( dtc_svm_416_B->Discrete_Time_Integrat_c >=
     dtc_svm_416_P->Discrete_Time_Integrat_c_UpperS ) {
      dtc_svm_416_B->Discrete_Time_Integrat_c =
        dtc_svm_416_P->Discrete_Time_Integrat_c_UpperS;
    } else if ( dtc_svm_416_B->Discrete_Time_Integrat_c <=
     dtc_svm_416_P->Discrete_Time_Integrat_c_LowerS ) {
      dtc_svm_416_B->Discrete_Time_Integrat_c =
        dtc_svm_416_P->Discrete_Time_Integrat_c_LowerS;
    }
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Sum: '<S5>/Sum6' incorporates:
     *   Gain: '<S5>/Kp4'
     *
     * Regarding '<S5>/Kp4':
     *   Gain value: dtc_svm_416_P->Kp4_a_Gain
     */
    dtc_svm_416_B->Sum6_a = (rtb_Sum2_a * dtc_svm_416_P->Kp4_a_Gain)
      + dtc_svm_416_B->Discrete_Time_Integrat_c;

    /* Saturate: '<S5>/Saturation2'
     *
     * Regarding '<S5>/Saturation2':
     *   Lower limit: dtc_svm_416_P->Saturation2_a_LowerSat
     *   Upper limit: dtc_svm_416_P->Saturation2_a_UpperSat
     */
    if (ssIsMajorTimeStep(S)) {
      if (dtc_svm_416_B->Sum6_a >= dtc_svm_416_P->Saturation2_a_UpperSat) {
        dtc_svm_416_DWork->Saturation2_a_MODE = 1;
      } else if (dtc_svm_416_B->Sum6_a <= dtc_svm_416_P->Saturation2_a_LowerSat)
      {
        dtc_svm_416_DWork->Saturation2_a_MODE = -1;
      } else {
        dtc_svm_416_DWork->Saturation2_a_MODE = 0;
      }
    }
    /* Output value */
    if (dtc_svm_416_DWork->Saturation2_a_MODE == 1) {
      dtc_svm_416_B->Saturation2_a = dtc_svm_416_P->Saturation2_a_UpperSat;
    } else if (dtc_svm_416_DWork->Saturation2_a_MODE == -1) {
      dtc_svm_416_B->Saturation2_a = dtc_svm_416_P->Saturation2_a_LowerSat;
    } else {
      dtc_svm_416_B->Saturation2_a = dtc_svm_416_B->Sum6_a;

⌨️ 快捷键说明

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