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

📄 dtc_svm_416_acc.c

📁 关于永磁同步电机DTC系统的无速度传感器
💻 C
📖 第 1 页 / 共 5 页
字号:
      break;
     case 6:

      dtc_svm_416_B->Multiport_Switch_b = rtb_temp186;
      break;
     default:
      /* Result undefined */
#if defined(MATLAB_MEX_FILE)
      (void)mexPrintf("Error: Invalid control input for block:"
       "<S26>/Multiport Switch\n"
       "Result is undefined.");
#endif
      break;
    }
  }

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

    /* Sum: '<S28>/Sum' */
    dtc_svm_416_B->Sum_f = dtc_svm_416_B->temp117
      - dtc_svm_416_B->Multiport_Switch_b;

    /* Relay: '<S28>/Relay' */

    if (ssIsMajorTimeStep(S)) {
      if (dtc_svm_416_DWork->Relay_MODE == 0) { /* off */
        if (dtc_svm_416_B->Sum_f >= dtc_svm_416_P->Relay_OnVal) {
          dtc_svm_416_DWork->Relay_MODE = 1; /* turn on */
        }
      } else {
        if (dtc_svm_416_B->Sum_f <= dtc_svm_416_P->Relay_OffVal) {
          dtc_svm_416_DWork->Relay_MODE = 0; /* turn off */
        }
      }
    }
    if (dtc_svm_416_DWork->Relay_MODE == 0) { /* off */
      rtb_Relay = dtc_svm_416_P->Relay_YOff;
    } else {
      rtb_Relay = dtc_svm_416_P->Relay_YOn;
    }

    /* DataTypeConversion: '<S28>/Data Type Conversion1' incorporates:
     *   Logic: '<S28>/Logical Operator'
     */
    rtb_temp188 = (real_T)(!rtb_Relay);
  }

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

    /* MultiPortSwitch: '<S26>/Multiport Switch1' */
    switch ((int_T)dtc_svm_416_B->temp116) {
     case 1:

      dtc_svm_416_B->Multiport_Switch1_b = rtb_temp190;
      break;
     case 2:

      dtc_svm_416_B->Multiport_Switch1_b = rtb_temp185;
      break;
     case 3:

      dtc_svm_416_B->Multiport_Switch1_b = rtb_temp186;
      break;
     case 4:

      dtc_svm_416_B->Multiport_Switch1_b = rtb_temp186;
      break;
     case 5:

      dtc_svm_416_B->Multiport_Switch1_b = rtb_temp190;
      break;
     case 6:

      dtc_svm_416_B->Multiport_Switch1_b = rtb_temp185;
      break;
     default:
      /* Result undefined */
#if defined(MATLAB_MEX_FILE)
      (void)mexPrintf("Error: Invalid control input for block:"
       "<S26>/Multiport Switch1\n"
       "Result is undefined.");
#endif
      break;
    }
  }

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

    /* Sum: '<S28>/Sum1' */
    dtc_svm_416_B->Sum1_d = dtc_svm_416_B->temp117
      - dtc_svm_416_B->Multiport_Switch1_b;

    /* Relay: '<S28>/Relay1' */

    if (ssIsMajorTimeStep(S)) {
      if (dtc_svm_416_DWork->Relay1_MODE == 0) { /* off */
        if (dtc_svm_416_B->Sum1_d >= dtc_svm_416_P->Relay1_OnVal) {
          dtc_svm_416_DWork->Relay1_MODE = 1; /* turn on */
        }
      } else {
        if (dtc_svm_416_B->Sum1_d <= dtc_svm_416_P->Relay1_OffVal) {
          dtc_svm_416_DWork->Relay1_MODE = 0; /* turn off */
        }
      }
    }
    if (dtc_svm_416_DWork->Relay1_MODE == 0) { /* off */
      rtb_Relay1 = dtc_svm_416_P->Relay1_YOff;
    } else {
      rtb_Relay1 = dtc_svm_416_P->Relay1_YOn;
    }

    /* DataTypeConversion: '<S28>/Data Type Conversion' incorporates:
     *   Logic: '<S28>/Logical Operator1'
     */
    rtb_temp187 = (real_T)(!rtb_Relay1);
  }

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

    /* MultiPortSwitch: '<S26>/Multiport Switch2' */
    switch ((int_T)dtc_svm_416_B->temp116) {
     case 1:

      dtc_svm_416_B->Multiport_Switch2 = rtb_temp185;
      break;
     case 2:

      dtc_svm_416_B->Multiport_Switch2 = rtb_temp186;
      break;
     case 3:

      dtc_svm_416_B->Multiport_Switch2 = rtb_temp185;
      break;
     case 4:

      dtc_svm_416_B->Multiport_Switch2 = rtb_temp190;
      break;
     case 5:

      dtc_svm_416_B->Multiport_Switch2 = rtb_temp186;
      break;
     case 6:

      dtc_svm_416_B->Multiport_Switch2 = rtb_temp190;
      break;
     default:
      /* Result undefined */
#if defined(MATLAB_MEX_FILE)
      (void)mexPrintf("Error: Invalid control input for block:"
       "<S26>/Multiport Switch2\n"
       "Result is undefined.");
#endif
      break;
    }
  }

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

    /* Sum: '<S28>/Sum2' */
    dtc_svm_416_B->Sum2_d = dtc_svm_416_B->temp117
      - dtc_svm_416_B->Multiport_Switch2;

    /* Relay: '<S28>/Relay2' */

    if (ssIsMajorTimeStep(S)) {
      if (dtc_svm_416_DWork->Relay2_MODE == 0) { /* off */
        if (dtc_svm_416_B->Sum2_d >= dtc_svm_416_P->Relay2_OnVal) {
          dtc_svm_416_DWork->Relay2_MODE = 1; /* turn on */
        }
      } else {
        if (dtc_svm_416_B->Sum2_d <= dtc_svm_416_P->Relay2_OffVal) {
          dtc_svm_416_DWork->Relay2_MODE = 0; /* turn off */
        }
      }
    }
    if (dtc_svm_416_DWork->Relay2_MODE == 0) { /* off */
      rtb_Relay2 = dtc_svm_416_P->Relay2_YOff;
    } else {
      rtb_Relay2 = dtc_svm_416_P->Relay2_YOn;
    }

    /* DataTypeConversion: '<S28>/Data Type Conversion2' incorporates:
     *   Logic: '<S28>/Logical Operator2'
     */
    rtb_temp191 = (real_T)(!rtb_Relay2);

    /* DataTypeConversion: '<S38>/Data Type  Conversion4' */
    dtc_svm_416_B->Data_Type_Conversion4[0] = (rtb_Relay != 0.0);
    dtc_svm_416_B->Data_Type_Conversion4[1] = (rtb_temp188 != 0.0);
    dtc_svm_416_B->Data_Type_Conversion4[2] = (rtb_Relay1 != 0.0);
    dtc_svm_416_B->Data_Type_Conversion4[3] = (rtb_temp187 != 0.0);
    dtc_svm_416_B->Data_Type_Conversion4[4] = (rtb_Relay2 != 0.0);
    dtc_svm_416_B->Data_Type_Conversion4[5] = (rtb_temp191 != 0.0);
  }

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

    /* Constant: '<S38>/2' */
    dtc_svm_416_B->id_a = dtc_svm_416_P->id_a_Value;
  }

  /* SubSystem: '<S38>/Tail discrete' */

  /* Outputs for enable system: '<S38>/Tail discrete' */
  {
    /* simstruct variables */
    dtc_svm_416_BlockIO *dtc_svm_416_B = (dtc_svm_416_BlockIO *)
      _ssGetBlockIO(S);
    dtc_svm_416_D_Work *dtc_svm_416_DWork = (dtc_svm_416_D_Work *)
      ssGetRootDWork(S);
    dtc_svm_416_PrevZCSigStates *dtc_svm_416_PrevZCSigState =
      (dtc_svm_416_PrevZCSigStates *) _ssGetPrevZCSigState(S);
    dtc_svm_416_Parameters *dtc_svm_416_P = (dtc_svm_416_Parameters *)
      ssGetDefaultParam(S);

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

      if (ssIsSampleHit(S, 1, tid)) {   /* Sample time: [0.0, 1.0] */
        dtc_svm_416_DWork->Tail_discret_MODE[1] = (dtc_svm_416_B->id_a) ?
          SUBSYS_ENABLED : SUBSYS_DISABLED;
      }

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

          if ( ssGetT(S) != ssGetTStart(S) ) {
            ssSetSolverNeedsReset(S);
          }
          /* protect against calling initialize function twice at startup */
          if (!(ssIsFirstInitCond(S))) {

            /* Initial conditions for enable system: '<S38>/Tail discrete' */
            {
              /* simstruct variables */
              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);

              /* DiscreteIntegrator Block: <S41>/Discrete-Time Integrator */
              {
                int_T i1;

                real_T *dw_DSTATE =
                  &dtc_svm_416_DWork->Discrete_Time_Int_DSTATE[0];

                for (i1=0; i1 < 6; i1++) {
                  dw_DSTATE[i1] = dtc_svm_416_P->Discrete_Time_Int_IC;
                }
              }

              /* UnitDelay Block: <S41>/Unit Delay3 */
              {
                int_T i1;

                real_T *dw_DSTATE = &dtc_svm_416_DWork->Unit_Delay3_b_DSTATE[0];

                for (i1=0; i1 < 6; i1++) {
                  dw_DSTATE[i1] = dtc_svm_416_P->Unit_Delay3_b_X0;
                }
              }
            }
          }

          /* Enable for enable system: '<S38>/Tail discrete' */
          {
            /* simstruct variables */
            dtc_svm_416_D_Work *dtc_svm_416_DWork = (dtc_svm_416_D_Work *)
              ssGetRootDWork(S);

            /* DiscreteIntegrator Block: <S41>/Discrete-Time Integrator */
            dtc_svm_416_DWork->Discrete_Time_Int_SYSTEM_ENABLE = true;
          }

          dtc_svm_416_DWork->Tail_discret_MODE[0] = (int_T) SUBSYS_ENABLED;
        }
      } else {
        if (prevEnableState == SUBSYS_ENABLED) {
          /* SUBSYS_BECOMING_DISABLED */
          ssSetSolverNeedsReset(S);

          /* Disable for enable system: '<S38>/Tail discrete' */
          {
            /* simstruct variables */
            dtc_svm_416_D_Work *dtc_svm_416_DWork = (dtc_svm_416_D_Work *)
              ssGetRootDWork(S);

            /* DisableFcn of enable SubSystem Block: <S38>/Tail discrete */
            dtc_svm_416_DWork->Tail_discret_MODE[0] = (int_T) SUBSYS_DISABLED;
          }
        }
      }
    }

    /* run blocks if enabled */
    if (dtc_svm_416_DWork->Tail_discret_MODE[0] == SUBSYS_ENABLED) {
      if (ssIsContinuousTask(S, tid) || ssIsSampleHit(S, 4, tid)) {

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

          /* Constant: '<S41>/1' */
          dtc_svm_416_B->id_j = dtc_svm_416_P->id_j_Value;

          /* DiscreteIntegrator: '<S41>/Discrete-Time Integrator'
           *
           * Regarding '<S41>/Discrete-Time Integrator':
           *    Unlimited, w/o Saturation Port
           */
          (void)memset(&dtc_svm_416_DWork->Discrete_Time_Int_MODE[0], 0,
           6*sizeof(int_T));

          {
            ZCEventType zcEvent;

            /* evaluate zero-crossings */
            {
              int_T i1;

              real_T *dw_DSTATE =
                &dtc_svm_416_DWork->Discrete_Time_Int_DSTATE[0];
              const boolean_T *u1 = &dtc_svm_416_B->Data_Type_Conversion4[0];
              ZCSigState *pzc =
                &dtc_svm_416_PrevZCSigState->Discrete_Time_Int_ZCE[0];
              int_T *mode = &dtc_svm_416_DWork->Discrete_Time_Int_MODE[0];

              for (i1=0; i1 < 6; i1++) {
                zcEvent = ((ZCEventType) (!u1[i1] && pzc[i1]));
                pzc[i1] = (ZCSigState) u1[i1];
                if ( zcEvent ) {
                  dw_DSTATE[i1] = dtc_svm_416_P->Discrete_Time_Int_IC;
                  mode[i1] = 1;
                }
              }
            }
          }
          /* system was just enabled */
          if ( dtc_svm_416_DWork->Discrete_Time_Int_SYSTEM_ENABLE) {
            dtc_svm_416_DWork->Discrete_Time_Int_SYSTEM_ENABLE = false;
            {
              int_T i1;

              real_T *y0 = &dtc_svm_416_B->Discrete_Time_Int[0];
              real_T *dw_DSTATE =
                &dtc_svm_416_DWork->Discrete_Time_Int_DSTATE[0];

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

              real_T *y0 = &dtc_svm_416_B->Discrete_Time_Int[0];
              real_T *dw_DSTATE =
                &dtc_svm_416_DWork->Discrete_Time_Int_DSTATE[0];
              int_T *mode = &dtc_svm_416_DWork->Discrete_Time_Int_MODE[0];

              for (i1=0; i1 < 6; i1++) {
                if ( mode[i1] ) {
                  y0[i1] = dw_DSTATE[i1];
                } else {
                  y0[i1] = dw_DSTATE[i1] + 5.0E-006 * dtc_svm_416_B->id_j;
                }
              }
            }
          }

          /* Lookup: '<S41>/Look-Up Table' */

          {
            int_T i1;

            const real_T *u0 = &dtc_svm_416_B->Discrete_Time_Int[0];
            real_T *y0 = &dtc_svm_416_B->Look_Up_Table[0];

            for (i1=0; i1 < 6; i1++) {
              y0[i1] = rt_Lookup(dtc_svm_416_P->Look_Up_Table_XData, 4, u0[i1],
                dtc_svm_416_P->Look_Up_Table_YData);
            }
          }

          /* UnitDelay: '<S41>/Unit Delay3' */
          {
            int_T i1;

            real_T *y0 = &dtc_svm_416_B->Unit_Delay3_b[0];
            real_T *dw_DSTATE = &dtc_svm_416_DWork->Unit_Delay3_b_DSTATE[0];

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

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

          /* Switch: '<S41>/Switch' */
          {
            int_T i1;

            const real_T *u0 = &dtc_svm_416_B->Unit_Delay_a[0];
            const boolean_T *u1 = &dtc_svm_416_B->Data_Type_Conversion4[0];
            const real_T *u2 = &dtc_svm_416_B->Unit_Delay3_b[0];
            real_T *y0 = &dtc_svm_416_B->Switch_d[0];

            for (i1=0; i1 < 6; i1++) {
              if (u1[i1]) {
                y0[i1] = u0[i1];
              } else {
                y0[i1] = u2[i1];
              }
            }

⌨️ 快捷键说明

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