📄 dtc_svm_416_acc.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.
*/
/*
* 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 + -