bancada-motores/Control/VF Control/VFControl_sg_rtw/VFControl.cpp

3944 lines
135 KiB
C++
Raw Permalink Normal View History

2024-10-28 10:36:48 +00:00
/*
* VFControl.cpp
*
* Academic License - for use in teaching, academic research, and meeting
* course requirements at degree granting institutions only. Not for
* government, commercial, or other organizational use.
*
* Code generation for model "VFControl".
*
* Model version : 1.1
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
* C++ source code generated on : Wed Oct 16 11:33:22 2024
*
* Target selection: speedgoat.tlc
* Note: GRT includes extra infrastructure and instrumentation for prototyping
* Embedded hardware selection: Intel->x86-64 (Linux 64)
* Code generation objectives: Unspecified
* Validation result: Not run
*/
#include "VFControl.h"
#include "VFControl_cal.h"
#include "rtwtypes.h"
#include <cmath>
#include <cstring>
#include "rt_hypotd_snf.h"
#include "rt_invd4x4_snf.h"
#include "rt_look.h"
#include "rt_look1d.h"
#include "rt_remd_snf.h"
#include "rt_modd_snf.h"
#include "VFControl_private.h"
#include "rt_TDelayInterpolate.h"
#include "look1_pbinlxpw.h"
#include "PWMGenerator.h"
extern "C"
{
#include "rt_nonfinite.h"
}
/* Block signals (default storage) */
B_VFControl_T VFControl_B;
/* Block states (default storage) */
DW_VFControl_T VFControl_DW;
/* Real-time model */
RT_MODEL_VFControl_T VFControl_M_ = RT_MODEL_VFControl_T();
RT_MODEL_VFControl_T *const VFControl_M = &VFControl_M_;
/* Model step function for TID0 */
void VFControl_step0(void) /* Sample time: [0.0s, 0.0s] */
{
real_T tmp[16];
real_T tmp_0[16];
real_T Bias;
real_T RLinv_m;
real_T tmp_1;
real_T tmp_2;
real_T xk1;
int32_T i;
int32_T i_0;
int32_T tmp_3;
/* Reset subsysRan breadcrumbs */
srClearBC(VFControl_DW.Saturation_SubsysRanBC);
/* Reset subsysRan breadcrumbs */
srClearBC(VFControl_DW.Rotorreferenceframe_SubsysRan_i);
/* Reset subsysRan breadcrumbs */
srClearBC(VFControl_DW.Stationaryreferenceframe_Subs_n);
/* Reset subsysRan breadcrumbs */
srClearBC(VFControl_DW.Synchronousreferenceframe_Sub_k);
/* Reset subsysRan breadcrumbs */
srClearBC(VFControl_DW.Rotorreferenceframe_SubsysRanBC);
/* Reset subsysRan breadcrumbs */
srClearBC(VFControl_DW.Stationaryreferenceframe_Subsys);
/* Reset subsysRan breadcrumbs */
srClearBC(VFControl_DW.Synchronousreferenceframe_Subsy);
/* Reset subsysRan breadcrumbs */
srClearBC(VFControl_DW.sinbetacosbetasinthcosth_Subsys);
/* Reset subsysRan breadcrumbs */
srClearBC(VFControl_DW.sinthrcosthr_SubsysRanBC);
/* Reset subsysRan breadcrumbs */
srClearBC(VFControl_DW.sinthrcosthr1_SubsysRanBC);
/* UnitDelay: '<S23>/fluxes' */
xk1 = VFControl_DW.fluxes_DSTATE[0];
VFControl_B.xk1[0] = xk1;
/* Gain: '<S21>/Gain' */
xk1 *= VFControl_cal->Gain_Gain;
VFControl_B.Gain[0] = xk1;
/* UnitDelay: '<S21>/fluxes' */
Bias = VFControl_DW.fluxes_DSTATE_l[0];
VFControl_B.fluxes[0] = Bias;
/* Sum: '<S21>/Sum2' */
VFControl_B.Sum2[0] = xk1 - Bias;
/* UnitDelay: '<S23>/fluxes' */
xk1 = VFControl_DW.fluxes_DSTATE[1];
VFControl_B.xk1[1] = xk1;
/* Gain: '<S21>/Gain' */
xk1 *= VFControl_cal->Gain_Gain;
VFControl_B.Gain[1] = xk1;
/* UnitDelay: '<S21>/fluxes' */
Bias = VFControl_DW.fluxes_DSTATE_l[1];
VFControl_B.fluxes[1] = Bias;
/* Sum: '<S21>/Sum2' */
VFControl_B.Sum2[1] = xk1 - Bias;
/* UnitDelay: '<S23>/fluxes' */
xk1 = VFControl_DW.fluxes_DSTATE[2];
VFControl_B.xk1[2] = xk1;
/* Gain: '<S21>/Gain' */
xk1 *= VFControl_cal->Gain_Gain;
VFControl_B.Gain[2] = xk1;
/* UnitDelay: '<S21>/fluxes' */
Bias = VFControl_DW.fluxes_DSTATE_l[2];
VFControl_B.fluxes[2] = Bias;
/* Sum: '<S21>/Sum2' */
VFControl_B.Sum2[2] = xk1 - Bias;
/* UnitDelay: '<S23>/fluxes' */
xk1 = VFControl_DW.fluxes_DSTATE[3];
VFControl_B.xk1[3] = xk1;
/* Gain: '<S21>/Gain' */
xk1 *= VFControl_cal->Gain_Gain;
VFControl_B.Gain[3] = xk1;
/* UnitDelay: '<S21>/fluxes' */
Bias = VFControl_DW.fluxes_DSTATE_l[3];
VFControl_B.fluxes[3] = Bias;
/* Sum: '<S21>/Sum2' */
VFControl_B.Sum2[3] = xk1 - Bias;
/* Outputs for Enabled SubSystem: '<S16>/Saturation' incorporates:
* EnablePort: '<S22>/Enable'
*/
/* Constant: '<S16>/Constant' */
if (VFControl_cal->Constant_Value_e > 0.0) {
/* UnitDelay: '<S22>/Delay' */
VFControl_B.Delay = VFControl_DW.Delay_DSTATE;
/* SignalConversion generated from: '<S24>/Math Function' incorporates:
* Constant: '<S24>/u2'
*
* About SignalConversion generated from '<S24>/Math Function':
* Operator: reciprocal
*/
VFControl_B.TmpSignalConversionAtMathFuncti[0] = VFControl_cal->u2_Value[0];
VFControl_B.TmpSignalConversionAtMathFuncti[1] = VFControl_cal->u2_Value[1];
VFControl_B.TmpSignalConversionAtMathFuncti[2] = VFControl_B.Delay;
/* Math: '<S24>/Math Function'
*
* About '<S24>/Math Function':
* Operator: reciprocal
*/
xk1 = VFControl_B.TmpSignalConversionAtMathFuncti[0];
xk1 = 1.0 / xk1;
/* Math: '<S24>/Math Function'
*
* About '<S24>/Math Function':
* Operator: reciprocal
*/
VFControl_B.MathFunction_p[0] = xk1;
/* Math: '<S24>/Math Function'
*
* About '<S24>/Math Function':
* Operator: reciprocal
*/
xk1 = VFControl_B.TmpSignalConversionAtMathFuncti[1];
xk1 = 1.0 / xk1;
/* Math: '<S24>/Math Function'
*
* About '<S24>/Math Function':
* Operator: reciprocal
*/
VFControl_B.MathFunction_p[1] = xk1;
/* Math: '<S24>/Math Function'
*
* About '<S24>/Math Function':
* Operator: reciprocal
*/
xk1 = VFControl_B.TmpSignalConversionAtMathFuncti[2];
xk1 = 1.0 / xk1;
/* Math: '<S24>/Math Function'
*
* About '<S24>/Math Function':
* Operator: reciprocal
*/
VFControl_B.MathFunction_p[2] = xk1;
/* Sum: '<S24>/Sum2' */
xk1 = VFControl_B.MathFunction_p[0];
xk1 += VFControl_B.MathFunction_p[1];
xk1 += VFControl_B.MathFunction_p[2];
/* Sum: '<S24>/Sum2' */
VFControl_B.Sum2_i = xk1;
/* Math: '<S24>/Math Function1'
*
* About '<S24>/Math Function1':
* Operator: reciprocal
*/
xk1 = VFControl_B.Sum2_i;
/* Math: '<S24>/Math Function1'
*
* About '<S24>/Math Function1':
* Operator: reciprocal
*/
VFControl_B.MathFunction1 = 1.0 / xk1;
/* Product: '<S26>/Product2' incorporates:
* Constant: '<S26>/u1'
*/
VFControl_B.Product2_m[0] = VFControl_cal->u1_Value[0] *
VFControl_B.MathFunction1;
VFControl_B.Product2_m[1] = VFControl_cal->u1_Value[1] *
VFControl_B.MathFunction1;
/* Product: '<S26>/Product' */
VFControl_B.Product_c[0] = VFControl_B.Sum2[0] * VFControl_B.Product2_m[0];
VFControl_B.Product_c[1] = VFControl_B.Product2_m[1] * VFControl_B.Sum2[2];
/* Sum: '<S26>/Sum2' */
xk1 = VFControl_B.Product_c[0];
xk1 += VFControl_B.Product_c[1];
/* Sum: '<S26>/Sum2' */
VFControl_B.phimq = xk1;
/* Product: '<S26>/Product1' */
VFControl_B.Product1_j[0] = VFControl_B.Product2_m[0] * VFControl_B.Sum2[1];
VFControl_B.Product1_j[1] = VFControl_B.Product2_m[1] * VFControl_B.Sum2[3];
/* Sum: '<S26>/Sum1' */
xk1 = VFControl_B.Product1_j[0];
xk1 += VFControl_B.Product1_j[1];
/* Sum: '<S26>/Sum1' */
VFControl_B.phimd = xk1;
/* Math: '<S22>/Math Function' */
VFControl_B.Phisat = rt_hypotd_snf(VFControl_B.phimq, VFControl_B.phimd);
/* Lookup_n-D: '<S22>/1-D Lookup Table' incorporates:
* Math: '<S22>/Math Function'
*/
VFControl_B.Isat = look1_pbinlxpw(VFControl_B.Phisat,
VFControl_cal->uDLookupTable_bp01Data,
VFControl_cal->uDLookupTable_tableData, &VFControl_DW.m_bpIndex_b, 1U);
/* Switch: '<S22>/Switch' */
if (VFControl_B.Isat != 0.0) {
/* Product: '<S22>/Product' */
VFControl_B.Lm = VFControl_B.Phisat / VFControl_B.Isat;
/* Switch: '<S22>/Switch' */
VFControl_B.Switch_g = VFControl_B.Lm;
} else {
/* Switch: '<S22>/Switch' incorporates:
* Constant: '<S22>/Constant1'
*/
VFControl_B.Switch_g = VFControl_cal->Constant1_Value;
}
/* End of Switch: '<S22>/Switch' */
/* Assignment: '<S25>/Lm in rows[1,3] & col[1,3]' incorporates:
* Constant: '<S25>/u1'
*/
std::memcpy(&VFControl_B.Lminrows13col13[0], &VFControl_cal->u1_Value_d[0],
sizeof(real_T) << 4U);
/* Assignment: '<S25>/Lm in rows[1,3] & col[1,3]' */
VFControl_B.Lminrows13col13[0] = VFControl_B.Switch_g;
VFControl_B.Lminrows13col13[2] = VFControl_B.Switch_g;
VFControl_B.Lminrows13col13[8] = VFControl_B.Switch_g;
VFControl_B.Lminrows13col13[10] = VFControl_B.Switch_g;
/* Assignment: '<S25>/Lm in rows[2,4] & col[2,4]' incorporates:
* Assignment: '<S25>/Lm in rows[1,3] & col[1,3]'
*/
std::memcpy(&VFControl_B.Lminrows24col24[0], &VFControl_B.Lminrows13col13[0],
sizeof(real_T) << 4U);
/* Assignment: '<S25>/Lm in rows[2,4] & col[2,4]' */
VFControl_B.Lminrows24col24[5] = VFControl_B.Switch_g;
VFControl_B.Lminrows24col24[7] = VFControl_B.Switch_g;
VFControl_B.Lminrows24col24[13] = VFControl_B.Switch_g;
VFControl_B.Lminrows24col24[15] = VFControl_B.Switch_g;
for (i = 0; i < 16; i++) {
/* Sum: '<S25>/Sum2' incorporates:
* Assignment: '<S25>/Lm in rows[2,4] & col[2,4]'
* Constant: '<S25>/u5'
*/
VFControl_B.Sum2_e[i] = VFControl_B.Lminrows24col24[i] +
VFControl_cal->u5_Value[i];
}
/* Product: '<S22>/inversion' incorporates:
* Sum: '<S25>/Sum2'
*/
rt_invd4x4_snf(VFControl_B.Sum2_e, VFControl_B.Linv_h);
/* Product: '<S22>/Product1' incorporates:
* Constant: '<S22>/u1'
* Product: '<S22>/inversion'
*/
std::memcpy(&tmp[0], &VFControl_cal->u1_Value_e[0], sizeof(real_T) << 4U);
std::memcpy(&tmp_0[0], &VFControl_B.Linv_h[0], sizeof(real_T) << 4U);
for (i = 0; i < 4; i++) {
/* Product: '<S22>/Product1' */
tmp_3 = i << 2;
xk1 = tmp_0[tmp_3];
Bias = tmp_0[tmp_3 + 1];
tmp_1 = tmp_0[tmp_3 + 2];
tmp_2 = tmp_0[tmp_3 + 3];
for (i_0 = 0; i_0 < 4; i_0++) {
/* Product: '<S22>/Product1' */
RLinv_m = xk1 * tmp[i_0];
RLinv_m += tmp[i_0 + 4] * Bias;
RLinv_m += tmp[i_0 + 8] * tmp_1;
RLinv_m += tmp[i_0 + 12] * tmp_2;
/* Product: '<S22>/Product1' */
VFControl_B.RLinv_m[i_0 + tmp_3] = RLinv_m;
}
}
/* Update for UnitDelay: '<S22>/Delay' */
VFControl_DW.Delay_DSTATE = VFControl_B.Switch_g;
srUpdateBC(VFControl_DW.Saturation_SubsysRanBC);
}
/* End of Constant: '<S16>/Constant' */
/* End of Outputs for SubSystem: '<S16>/Saturation' */
for (i = 0; i < 16; i++) {
/* Switch: '<S16>/Switch' incorporates:
* Constant: '<S16>/Constant1'
*/
if (VFControl_cal->Constant1_Value_k >= VFControl_cal->Switch_Threshold) {
/* Switch: '<S16>/Switch' incorporates:
* Product: '<S22>/inversion'
*/
xk1 = VFControl_B.Linv_h[i];
} else {
/* Switch: '<S16>/Switch' incorporates:
* Constant: '<S16>/Constant2'
*/
xk1 = VFControl_cal->Constant2_Value[i];
}
/* End of Switch: '<S16>/Switch' */
/* Switch: '<S16>/Switch' */
VFControl_B.Linv[i] = xk1;
/* Product: '<S16>/Product3' incorporates:
* Switch: '<S16>/Switch'
*/
tmp[i] = xk1;
}
/* Product: '<S16>/Product3' */
Bias = VFControl_B.xk1[0];
tmp_1 = VFControl_B.xk1[1];
tmp_2 = VFControl_B.xk1[2];
RLinv_m = VFControl_B.xk1[3];
for (i = 0; i < 4; i++) {
xk1 = tmp[i] * Bias;
xk1 += tmp[i + 4] * tmp_1;
xk1 += tmp[i + 8] * tmp_2;
xk1 += tmp[i + 12] * RLinv_m;
/* Product: '<S16>/Product3' */
VFControl_B.Product3[i] = xk1;
}
/* DiscreteIntegrator: '<S15>/Rotor angle thetam' */
VFControl_B.Rotoranglethetam = VFControl_DW.Rotoranglethetam_DSTATE;
/* UnitDelay: '<S38>/wm_delay' */
VFControl_B.wm_delay = VFControl_DW.wm_delay_DSTATE;
/* Gain: '<S38>/F2' */
VFControl_B.F2 = VFControl_cal->F2_Gain * VFControl_B.wm_delay;
/* UnitDelay: '<S38>/wm_predict' */
VFControl_B.wm_predict = VFControl_DW.wm_predict_DSTATE;
/* Sum: '<S38>/Sum1' */
VFControl_B.Sum1 = VFControl_B.F2 - VFControl_B.wm_predict;
/* Outputs for Enabled SubSystem: '<S19>/sin(thr),cos(thr)' incorporates:
* EnablePort: '<S36>/Enable'
*/
/* Constant: '<S19>/Constant' */
if (VFControl_cal->Constant_Value_b) {
VFControl_DW.sinthrcosthr_MODE = true;
/* Constant: '<S36>/Constant' */
VFControl_B.Constant_e[0] = VFControl_cal->Constant_Value[0];
VFControl_B.Constant_e[1] = VFControl_cal->Constant_Value[1];
/* Gain: '<S36>/Gain1' */
VFControl_B.Gain1_e = VFControl_cal->Gain1_Gain * VFControl_B.Sum1;
/* Trigonometry: '<S36>/Trigonometric Function' */
xk1 = VFControl_B.Rotoranglethetam;
Bias = std::sin(xk1);
xk1 = std::cos(xk1);
/* Trigonometry: '<S36>/Trigonometric Function' */
VFControl_B.TrigonometricFunction_o1_d = Bias;
/* Trigonometry: '<S36>/Trigonometric Function' */
VFControl_B.TrigonometricFunction_o2_j = xk1;
/* Assignment: '<S36>/W(1,2)=wr' incorporates:
* Constant: '<S36>/u1'
*/
std::memcpy(&VFControl_B.W12wr[0], &VFControl_cal->u1_Value_j[0], sizeof
(real_T) << 4U);
/* Assignment: '<S36>/W(1,2)=wr' */
VFControl_B.W12wr[4] = VFControl_B.Sum1;
/* Assignment: '<S36>/W(2,1)=-wr' incorporates:
* Assignment: '<S36>/W(1,2)=wr'
*/
std::memcpy(&VFControl_B.W21wr[0], &VFControl_B.W12wr[0], sizeof(real_T) <<
4U);
/* Assignment: '<S36>/W(2,1)=-wr' */
VFControl_B.W21wr[1] = VFControl_B.Gain1_e;
srUpdateBC(VFControl_DW.sinthrcosthr_SubsysRanBC);
} else if (VFControl_DW.sinthrcosthr_MODE) {
/* Disable for Trigonometry: '<S36>/Trigonometric Function' incorporates:
* Outport: '<S36>/sin(thr),cos(thr)'
*/
VFControl_B.TrigonometricFunction_o1_d = VFControl_cal->sinthrcosthr_Y0;
/* Disable for Trigonometry: '<S36>/Trigonometric Function' incorporates:
* Outport: '<S36>/sin(thr),cos(thr)'
*/
VFControl_B.TrigonometricFunction_o2_j = VFControl_cal->sinthrcosthr_Y0;
/* Disable for Outport: '<S36>/sin(thr),cos(thr)' incorporates:
* Constant: '<S36>/Constant'
*/
VFControl_B.Constant_e[0] = VFControl_cal->sinthrcosthr_Y0;
VFControl_B.Constant_e[1] = VFControl_cal->sinthrcosthr_Y0;
for (i = 0; i < 16; i++) {
/* Disable for Assignment: '<S36>/W(2,1)=-wr' incorporates:
* Outport: '<S36>/W'
*/
VFControl_B.W21wr[i] = VFControl_cal->W_Y0_m;
}
VFControl_DW.sinthrcosthr_MODE = false;
}
/* End of Constant: '<S19>/Constant' */
/* End of Outputs for SubSystem: '<S19>/sin(thr),cos(thr)' */
/* Outputs for Enabled SubSystem: '<S19>/sin(thr),cos(thr)1' incorporates:
* EnablePort: '<S37>/Enable'
*/
/* Constant: '<S19>/Constant1' */
if (VFControl_cal->Constant1_Value_kj) {
VFControl_DW.sinthrcosthr1_MODE = true;
/* Constant: '<S37>/Constant' */
VFControl_B.Constant[0] = VFControl_cal->Constant_Value_n[0];
VFControl_B.Constant[1] = VFControl_cal->Constant_Value_n[1];
/* Gain: '<S37>/Gain3' */
VFControl_B.Gain3_e = VFControl_cal->Gain3_Gain * VFControl_B.Sum1;
/* Trigonometry: '<S37>/Trigonometric Function' */
xk1 = VFControl_B.Rotoranglethetam;
Bias = std::sin(xk1);
xk1 = std::cos(xk1);
/* Trigonometry: '<S37>/Trigonometric Function' */
VFControl_B.TrigonometricFunction_o1 = Bias;
/* Trigonometry: '<S37>/Trigonometric Function' */
VFControl_B.TrigonometricFunction_o2 = xk1;
/* Assignment: '<S37>/W(3,4)=-wr' incorporates:
* Constant: '<S37>/u4'
*/
std::memcpy(&VFControl_B.W34wr[0], &VFControl_cal->u4_Value[0], sizeof
(real_T) << 4U);
/* Assignment: '<S37>/W(3,4)=-wr' */
VFControl_B.W34wr[14] = VFControl_B.Gain3_e;
/* Assignment: '<S37>/W(4,3)=wr' incorporates:
* Assignment: '<S37>/W(3,4)=-wr'
*/
std::memcpy(&VFControl_B.W43wr[0], &VFControl_B.W34wr[0], sizeof(real_T) <<
4U);
/* Assignment: '<S37>/W(4,3)=wr' */
VFControl_B.W43wr[11] = VFControl_B.Sum1;
srUpdateBC(VFControl_DW.sinthrcosthr1_SubsysRanBC);
} else if (VFControl_DW.sinthrcosthr1_MODE) {
/* Disable for Trigonometry: '<S37>/Trigonometric Function' incorporates:
* Outport: '<S37>/sin(thr),cos(thr)'
*/
VFControl_B.TrigonometricFunction_o1 = VFControl_cal->sinthrcosthr_Y0_h;
/* Disable for Trigonometry: '<S37>/Trigonometric Function' incorporates:
* Outport: '<S37>/sin(thr),cos(thr)'
*/
VFControl_B.TrigonometricFunction_o2 = VFControl_cal->sinthrcosthr_Y0_h;
/* Disable for Outport: '<S37>/sin(thr),cos(thr)' incorporates:
* Constant: '<S37>/Constant'
*/
VFControl_B.Constant[0] = VFControl_cal->sinthrcosthr_Y0_h;
VFControl_B.Constant[1] = VFControl_cal->sinthrcosthr_Y0_h;
VFControl_DW.sinthrcosthr1_MODE = false;
}
/* End of Constant: '<S19>/Constant1' */
/* End of Outputs for SubSystem: '<S19>/sin(thr),cos(thr)1' */
/* Outputs for Enabled SubSystem: '<S19>/sin(beta),cos(beta),sin(th),cos(th)' incorporates:
* EnablePort: '<S35>/Enable'
*/
/* Constant: '<S19>/Constant3' */
if (VFControl_cal->Constant3_Value_h) {
/* DigitalClock: '<S35>/Digital Clock' */
VFControl_B.DigitalClock_kx = VFControl_M->Timing.t[1];
/* Sum: '<S35>/Sum' incorporates:
* Constant: '<S35>/we'
*/
VFControl_B.wewr = VFControl_cal->we_Value - VFControl_B.Sum1;
/* Gain: '<S35>/Gain2' */
VFControl_B.Gain2_k = VFControl_cal->Gain2_Gain * VFControl_B.wewr;
/* Gain: '<S35>/web_psb' */
VFControl_B.th = VFControl_cal->web_psb_Gain * VFControl_B.DigitalClock_kx;
/* Sum: '<S35>/Sum1' */
VFControl_B.beta = VFControl_B.th - VFControl_B.Rotoranglethetam;
/* Trigonometry: '<S35>/Trigonometric Function' */
xk1 = VFControl_B.th;
Bias = std::sin(xk1);
xk1 = std::cos(xk1);
/* Trigonometry: '<S35>/Trigonometric Function' */
VFControl_B.TrigonometricFunction_o1_dn = Bias;
/* Trigonometry: '<S35>/Trigonometric Function' */
VFControl_B.TrigonometricFunction_o2_k = xk1;
/* Trigonometry: '<S35>/Trigonometric Function1' */
xk1 = VFControl_B.beta;
Bias = std::sin(xk1);
xk1 = std::cos(xk1);
/* Trigonometry: '<S35>/Trigonometric Function1' */
VFControl_B.TrigonometricFunction1_o1 = Bias;
/* Trigonometry: '<S35>/Trigonometric Function1' */
VFControl_B.TrigonometricFunction1_o2 = xk1;
/* Assignment: '<S35>/W(3,4)=1-wr' incorporates:
* Constant: '<S35>/u3'
*/
std::memcpy(&VFControl_B.W341wr[0], &VFControl_cal->u3_Value[0], sizeof
(real_T) << 4U);
/* Assignment: '<S35>/W(3,4)=1-wr' */
VFControl_B.W341wr[14] = VFControl_B.wewr;
/* Assignment: '<S35>/W(4,3)=wr-1' incorporates:
* Assignment: '<S35>/W(3,4)=1-wr'
*/
std::memcpy(&VFControl_B.W43wr1[0], &VFControl_B.W341wr[0], sizeof(real_T) <<
4U);
/* Assignment: '<S35>/W(4,3)=wr-1' */
VFControl_B.W43wr1[11] = VFControl_B.Gain2_k;
srUpdateBC(VFControl_DW.sinbetacosbetasinthcosth_Subsys);
}
/* End of Constant: '<S19>/Constant3' */
/* End of Outputs for SubSystem: '<S19>/sin(beta),cos(beta),sin(th),cos(th)' */
/* MultiPortSwitch: '<S19>/Multiport Switch' incorporates:
* Constant: '<S19>/Constant2'
*/
switch (static_cast<int32_T>(VFControl_cal->Constant2_Value_n)) {
case 1:
/* MultiPortSwitch: '<S19>/Multiport Switch' */
VFControl_B.MultiportSwitch[0] = VFControl_B.TrigonometricFunction_o1_d;
VFControl_B.MultiportSwitch[1] = VFControl_B.TrigonometricFunction_o2_j;
VFControl_B.MultiportSwitch[2] = VFControl_B.Constant_e[0];
VFControl_B.MultiportSwitch[3] = VFControl_B.Constant_e[1];
break;
case 2:
/* MultiPortSwitch: '<S19>/Multiport Switch' */
VFControl_B.MultiportSwitch[0] = VFControl_B.TrigonometricFunction_o1;
VFControl_B.MultiportSwitch[1] = VFControl_B.TrigonometricFunction_o2;
VFControl_B.MultiportSwitch[2] = VFControl_B.Constant[0];
VFControl_B.MultiportSwitch[3] = VFControl_B.Constant[1];
break;
default:
/* MultiPortSwitch: '<S19>/Multiport Switch' */
VFControl_B.MultiportSwitch[0] = VFControl_B.TrigonometricFunction1_o1;
VFControl_B.MultiportSwitch[1] = VFControl_B.TrigonometricFunction1_o2;
VFControl_B.MultiportSwitch[2] = VFControl_B.TrigonometricFunction_o1_dn;
VFControl_B.MultiportSwitch[3] = VFControl_B.TrigonometricFunction_o2_k;
break;
}
/* End of MultiPortSwitch: '<S19>/Multiport Switch' */
/* Outputs for Enabled SubSystem: '<S18>/Rotor reference frame' incorporates:
* EnablePort: '<S32>/Enable'
*/
/* Constant: '<S18>/Constant' */
if (VFControl_cal->Constant_Value_px) {
VFControl_DW.Rotorreferenceframe_MODE = true;
/* Fcn: '<S32>/ira' */
VFControl_B.ira_p = VFControl_B.Product3[2];
/* Fcn: '<S32>/irb' */
VFControl_B.irb_n = -(1.7320508075688772 * VFControl_B.Product3[3] +
VFControl_B.Product3[2]) / 2.0;
/* Fcn: '<S32>/isa' */
VFControl_B.isa_m = VFControl_B.Product3[0] * VFControl_B.MultiportSwitch[1]
+ VFControl_B.MultiportSwitch[0] * VFControl_B.Product3[1];
/* Fcn: '<S32>/isb' */
VFControl_B.isb_p = ((1.7320508075688772 * VFControl_B.MultiportSwitch[0] -
VFControl_B.MultiportSwitch[1]) *
VFControl_B.Product3[0] + (-1.7320508075688772 *
VFControl_B.MultiportSwitch[1] - VFControl_B.MultiportSwitch[0]) *
VFControl_B.Product3[1]) / 2.0;
srUpdateBC(VFControl_DW.Rotorreferenceframe_SubsysRanBC);
} else if (VFControl_DW.Rotorreferenceframe_MODE) {
/* Disable for Fcn: '<S32>/ira' incorporates:
* Outport: '<S32>/ira,irb'
*/
VFControl_B.ira_p = VFControl_cal->irairb_Y0;
/* Disable for Fcn: '<S32>/irb' incorporates:
* Outport: '<S32>/ira,irb'
*/
VFControl_B.irb_n = VFControl_cal->irairb_Y0;
/* Disable for Fcn: '<S32>/isa' incorporates:
* Outport: '<S32>/isa,isb'
*/
VFControl_B.isa_m = VFControl_cal->isaisb_Y0;
/* Disable for Fcn: '<S32>/isb' incorporates:
* Outport: '<S32>/isa,isb'
*/
VFControl_B.isb_p = VFControl_cal->isaisb_Y0;
VFControl_DW.Rotorreferenceframe_MODE = false;
}
/* End of Constant: '<S18>/Constant' */
/* End of Outputs for SubSystem: '<S18>/Rotor reference frame' */
/* Outputs for Enabled SubSystem: '<S18>/Stationary reference frame' incorporates:
* EnablePort: '<S33>/Enable'
*/
/* Constant: '<S18>/Constant1' */
if (VFControl_cal->Constant1_Value_b) {
VFControl_DW.Stationaryreferenceframe_MODE = true;
/* Fcn: '<S33>/ira' */
VFControl_B.ira_g = VFControl_B.MultiportSwitch[1] * VFControl_B.Product3[2]
- VFControl_B.MultiportSwitch[0] * VFControl_B.Product3[3];
/* Fcn: '<S33>/irb' */
VFControl_B.irb_g = ((-VFControl_B.MultiportSwitch[1] - 1.7320508075688772 *
VFControl_B.MultiportSwitch[0]) *
VFControl_B.Product3[2] + (VFControl_B.MultiportSwitch
[0] - 1.7320508075688772 * VFControl_B.MultiportSwitch[1]) *
VFControl_B.Product3[3]) / 2.0;
/* Fcn: '<S33>/isa' */
VFControl_B.isa_a = VFControl_B.Product3[0];
/* Fcn: '<S33>/isb' */
VFControl_B.isb_f = -(1.7320508075688772 * VFControl_B.Product3[1] +
VFControl_B.Product3[0]) / 2.0;
srUpdateBC(VFControl_DW.Stationaryreferenceframe_Subsys);
} else if (VFControl_DW.Stationaryreferenceframe_MODE) {
/* Disable for Fcn: '<S33>/ira' incorporates:
* Outport: '<S33>/ira,irb'
*/
VFControl_B.ira_g = VFControl_cal->irairb_Y0_d;
/* Disable for Fcn: '<S33>/irb' incorporates:
* Outport: '<S33>/ira,irb'
*/
VFControl_B.irb_g = VFControl_cal->irairb_Y0_d;
/* Disable for Fcn: '<S33>/isa' incorporates:
* Outport: '<S33>/isa,isb'
*/
VFControl_B.isa_a = VFControl_cal->isaisb_Y0_k;
/* Disable for Fcn: '<S33>/isb' incorporates:
* Outport: '<S33>/isa,isb'
*/
VFControl_B.isb_f = VFControl_cal->isaisb_Y0_k;
VFControl_DW.Stationaryreferenceframe_MODE = false;
}
/* End of Constant: '<S18>/Constant1' */
/* End of Outputs for SubSystem: '<S18>/Stationary reference frame' */
/* Outputs for Enabled SubSystem: '<S18>/Synchronous reference frame' incorporates:
* EnablePort: '<S34>/Enable'
*/
/* Constant: '<S18>/Constant2' */
if (VFControl_cal->Constant2_Value_d) {
VFControl_DW.Synchronousreferenceframe_MODE = true;
/* Fcn: '<S34>/ira' */
VFControl_B.ira = VFControl_B.MultiportSwitch[1] * VFControl_B.Product3[2] +
VFControl_B.MultiportSwitch[0] * VFControl_B.Product3[3];
/* Fcn: '<S34>/irb' */
VFControl_B.irb = ((1.7320508075688772 * VFControl_B.MultiportSwitch[0] -
VFControl_B.MultiportSwitch[1]) * VFControl_B.Product3[2]
+ (-1.7320508075688772 * VFControl_B.MultiportSwitch[1] -
VFControl_B.MultiportSwitch[0]) *
VFControl_B.Product3[3]) / 2.0;
/* Fcn: '<S34>/isa' */
VFControl_B.isa = VFControl_B.Product3[0] * VFControl_B.MultiportSwitch[3] +
VFControl_B.Product3[1] * VFControl_B.MultiportSwitch[2];
/* Fcn: '<S34>/isb' */
VFControl_B.isb = ((1.7320508075688772 * VFControl_B.MultiportSwitch[2] -
VFControl_B.MultiportSwitch[3]) * VFControl_B.Product3[0]
+ (-1.7320508075688772 * VFControl_B.MultiportSwitch[3] -
VFControl_B.MultiportSwitch[2]) *
VFControl_B.Product3[1]) / 2.0;
srUpdateBC(VFControl_DW.Synchronousreferenceframe_Subsy);
} else if (VFControl_DW.Synchronousreferenceframe_MODE) {
/* Disable for Fcn: '<S34>/ira' incorporates:
* Outport: '<S34>/ira,irb'
*/
VFControl_B.ira = VFControl_cal->irairb_Y0_h;
/* Disable for Fcn: '<S34>/irb' incorporates:
* Outport: '<S34>/ira,irb'
*/
VFControl_B.irb = VFControl_cal->irairb_Y0_h;
/* Disable for Fcn: '<S34>/isa' incorporates:
* Outport: '<S34>/isa,isb'
*/
VFControl_B.isa = VFControl_cal->isaisb_Y0_m;
/* Disable for Fcn: '<S34>/isb' incorporates:
* Outport: '<S34>/isa,isb'
*/
VFControl_B.isb = VFControl_cal->isaisb_Y0_m;
VFControl_DW.Synchronousreferenceframe_MODE = false;
}
/* End of Constant: '<S18>/Constant2' */
/* End of Outputs for SubSystem: '<S18>/Synchronous reference frame' */
/* MultiPortSwitch: '<S18>/Multiport Switch' incorporates:
* Constant: '<S18>/Constant3'
*/
switch (static_cast<int32_T>(VFControl_cal->Constant3_Value_e)) {
case 1:
/* MultiPortSwitch: '<S18>/Multiport Switch' */
VFControl_B.MultiportSwitch_p[0] = VFControl_B.ira_p;
VFControl_B.MultiportSwitch_p[1] = VFControl_B.irb_n;
break;
case 2:
/* MultiPortSwitch: '<S18>/Multiport Switch' */
VFControl_B.MultiportSwitch_p[0] = VFControl_B.ira_g;
VFControl_B.MultiportSwitch_p[1] = VFControl_B.irb_g;
break;
default:
/* MultiPortSwitch: '<S18>/Multiport Switch' */
VFControl_B.MultiportSwitch_p[0] = VFControl_B.ira;
VFControl_B.MultiportSwitch_p[1] = VFControl_B.irb;
break;
}
/* End of MultiPortSwitch: '<S18>/Multiport Switch' */
/* MultiPortSwitch: '<S18>/Multiport Switch1' incorporates:
* Constant: '<S18>/Constant4'
*/
switch (static_cast<int32_T>(VFControl_cal->Constant4_Value_c)) {
case 1:
/* MultiPortSwitch: '<S18>/Multiport Switch1' */
VFControl_B.MultiportSwitch1[0] = VFControl_B.isa_m;
VFControl_B.MultiportSwitch1[1] = VFControl_B.isb_p;
break;
case 2:
/* MultiPortSwitch: '<S18>/Multiport Switch1' */
VFControl_B.MultiportSwitch1[0] = VFControl_B.isa_a;
VFControl_B.MultiportSwitch1[1] = VFControl_B.isb_f;
break;
default:
/* MultiPortSwitch: '<S18>/Multiport Switch1' */
VFControl_B.MultiportSwitch1[0] = VFControl_B.isa;
VFControl_B.MultiportSwitch1[1] = VFControl_B.isb;
break;
}
/* End of MultiPortSwitch: '<S18>/Multiport Switch1' */
/* Gain: '<S18>/ib' */
VFControl_B.ib[0] = VFControl_cal->ib_Gain * VFControl_B.MultiportSwitch_p[0];
xk1 = VFControl_cal->ib_Gain * VFControl_B.MultiportSwitch1[0];
VFControl_B.ib[2] = xk1;
/* Gain: '<S13>/Gain Vr_Vs1' */
VFControl_B.GainVr_Vs1[0] = VFControl_cal->GainVr_Vs1_Gain[0] * xk1;
/* Gain: '<S18>/ib' */
VFControl_B.ib[1] = VFControl_cal->ib_Gain * VFControl_B.MultiportSwitch_p[1];
xk1 = VFControl_cal->ib_Gain * VFControl_B.MultiportSwitch1[1];
VFControl_B.ib[3] = xk1;
/* Gain: '<S13>/Gain Vr_Vs1' */
VFControl_B.GainVr_Vs1[1] = VFControl_cal->GainVr_Vs1_Gain[1] * xk1;
/* S-Function (sfun_spssw_discc): '<S96>/State-Space' incorporates:
* Constant: '<S39>/DC'
* Constant: '<S98>/SwitchCurrents'
*/
/* S-Function block: <S96>/State-Space */
{
real_T accum;
/* Circuit has switches */
int_T *switch_status = (int_T*) VFControl_DW.StateSpace_PWORK.SWITCH_STATUS;
int_T *switch_status_init = (int_T*)
VFControl_DW.StateSpace_PWORK.SWITCH_STATUS_INIT;
int_T *SwitchChange = (int_T*) VFControl_DW.StateSpace_PWORK.SW_CHG;
int_T *gState = (int_T*) VFControl_DW.StateSpace_PWORK.G_STATE;
real_T *yswitch = (real_T*)VFControl_DW.StateSpace_PWORK.Y_SWITCH;
int_T *switchTypes = (int_T*) VFControl_DW.StateSpace_PWORK.SWITCH_TYPES;
int_T *idxOutSw = (int_T*) VFControl_DW.StateSpace_PWORK.IDX_OUT_SW;
real_T *DxCol = (real_T*)VFControl_DW.StateSpace_PWORK.DX_COL;
real_T *tmp2 = (real_T*)VFControl_DW.StateSpace_PWORK.TMP2;
real_T *uswlast = (real_T*)VFControl_DW.StateSpace_PWORK.USWLAST;
int_T newState;
int_T swChanged = 0;
int loopsToDo = 20;
real_T temp;
/* keep an initial copy of switch_status*/
memcpy(switch_status_init, switch_status, 6 * sizeof(int_T));
memcpy(uswlast, &VFControl_B.StateSpace_o1[0], 6*sizeof(real_T));
do {
if (loopsToDo == 1) { /* Need to reset some variables: */
swChanged = 0;
/* return to the original switch status*/
{
int_T i1;
for (i1=0; i1 < 6; i1++) {
swChanged = ((SwitchChange[i1] = switch_status_init[i1] -
switch_status[i1]) != 0) ? 1 : swChanged;
switch_status[i1] = switch_status_init[i1];
}
}
} else {
/*
* Compute outputs:
* ---------------
*/
real_T *Ds = (real_T*)VFControl_DW.StateSpace_PWORK.DS;
{
int_T i1;
real_T *y0 = &VFControl_B.StateSpace_o1[0];
for (i1=0; i1 < 14; i1++) {
accum = 0.0;
{
int_T i2;
const real_T *u0 = &VFControl_cal->SwitchCurrents_Value[0];
for (i2=0; i2 < 6; i2++) {
accum += *(Ds++) * u0[i2];
}
accum += *(Ds++) * VFControl_B.GainVr_Vs1[0];
accum += *(Ds++) * VFControl_B.GainVr_Vs1[1];
accum += *(Ds++) * VFControl_cal->DCVoltageSource_Amplitude;
}
y0[i1] = accum;
}
}
swChanged = 0;
{
int_T i1;
real_T *y0 = &VFControl_B.StateSpace_o1[0];
for (i1=0; i1 < 6; i1++) {
newState = ((y0[i1] > 0.0) && (gState[i1] > 0)) || (y0[i1] < 0.0) ?
1 : (((y0[i1] > 0.0) && gState[i1] == 0) ? 0 : switch_status[i1]);
swChanged = ((SwitchChange[i1] = newState - switch_status[i1]) != 0)
? 1 : swChanged;
switch_status[i1] = newState;/* Keep new state */
}
}
}
/*
* Compute new As, Bs, Cs and Ds matrixes:
* --------------------------------------
*/
if (swChanged) {
real_T *Ds = (real_T*)VFControl_DW.StateSpace_PWORK.DS;
real_T a1;
{
int_T i1;
for (i1=0; i1 < 6; i1++) {
if (SwitchChange[i1] != 0) {
a1 = 1000.0*SwitchChange[i1];
temp = 1/(1-Ds[i1*10]*a1);
{
int_T i2;
for (i2=0; i2 < 14; i2++) {
DxCol[i2]= Ds[i2 * 9 + i1]*temp*a1;
}
}
DxCol[i1] = temp;
/* Copy row nSw of Ds into tmp2 and zero it out in Ds */
memcpy(tmp2, &Ds[i1 * 9], 9 * sizeof(real_T));
memset(&Ds[i1 * 9], '\0', 9 * sizeof(real_T));
/* Cs = Cs + DxCol * tmp1, Ds = Ds + DxCol * tmp2 *******************/
{
int_T i2;
for (i2=0; i2 < 14; i2++) {
a1 = DxCol[i2];
{
int_T i3;
for (i3=0; i3 < 9; i3++) {
Ds[i2 * 9 + i3] += a1 * tmp2[i3];
}
}
}
}
}
}
}
} /* if (swChanged) */
} while (swChanged > 0 && --loopsToDo > 0);
if (loopsToDo == 0) {
real_T *Ds = (real_T*)VFControl_DW.StateSpace_PWORK.DS;
{
int_T i1;
real_T *y0 = &VFControl_B.StateSpace_o1[0];
for (i1=0; i1 < 14; i1++) {
accum = 0.0;
{
int_T i2;
const real_T *u0 = &VFControl_cal->SwitchCurrents_Value[0];
for (i2=0; i2 < 6; i2++) {
accum += *(Ds++) * u0[i2];
}
accum += *(Ds++) * VFControl_B.GainVr_Vs1[0];
accum += *(Ds++) * VFControl_B.GainVr_Vs1[1];
accum += *(Ds++) * VFControl_cal->DCVoltageSource_Amplitude;
}
y0[i1] = accum;
}
}
}
/* Output new switches states */
{
int_T i1;
real_T *y1 = &VFControl_B.StateSpace_o2[0];
for (i1=0; i1 < 6; i1++) {
y1[i1] = (real_T)switch_status[i1];
}
}
}
/* Gain: '<S20>/1-1' */
VFControl_B.iqsids[0] = VFControl_cal->u1_Gain[0] * VFControl_B.Product3[0];
VFControl_B.iqsids[1] = VFControl_cal->u1_Gain[1] * VFControl_B.Product3[1];
/* Product: '<S20>/Mult1' */
VFControl_B.Mult1[0] = VFControl_B.iqsids[0] * VFControl_B.xk1[1];
VFControl_B.Mult1[1] = VFControl_B.xk1[0] * VFControl_B.iqsids[1];
/* Switch: '<S16>/Switch2' incorporates:
* Constant: '<S16>/Constant5'
*/
if (VFControl_cal->Constant5_Value >= VFControl_cal->Switch2_Threshold) {
/* Switch: '<S16>/Switch2' */
VFControl_B.Switch2 = VFControl_B.Switch_g;
} else {
/* Switch: '<S16>/Switch2' incorporates:
* Constant: '<S16>/Lm_nosat'
*/
VFControl_B.Switch2 = VFControl_cal->Lm_nosat_Value;
}
/* End of Switch: '<S16>/Switch2' */
/* Sum: '<S20>/Sum2' */
xk1 = VFControl_B.Mult1[0];
/* Gain: '<S13>/Gain Vr_Vs' */
Bias = VFControl_cal->GainVr_Vs_Gain[0] * VFControl_B.StateSpace_o1[6];
VFControl_B.GainVr_Vs[0] = Bias;
/* Gain: '<S17>/1_Vb' incorporates:
* Constant: '<S31>/Constant6'
*/
VFControl_B.u_Vb[0] = VFControl_cal->u_Vb_Gain *
VFControl_cal->Constant6_Value[0];
VFControl_B.u_Vb[2] = VFControl_cal->u_Vb_Gain * Bias;
/* Sum: '<S20>/Sum2' */
xk1 += VFControl_B.Mult1[1];
/* Gain: '<S13>/Gain Vr_Vs' */
Bias = VFControl_cal->GainVr_Vs_Gain[1] * VFControl_B.StateSpace_o1[7];
VFControl_B.GainVr_Vs[1] = Bias;
/* Gain: '<S17>/1_Vb' incorporates:
* Constant: '<S31>/Constant6'
*/
VFControl_B.u_Vb[1] = VFControl_cal->u_Vb_Gain *
VFControl_cal->Constant6_Value[1];
VFControl_B.u_Vb[3] = VFControl_cal->u_Vb_Gain * Bias;
/* Sum: '<S20>/Sum2' */
VFControl_B.Sum2_k = xk1;
/* Outputs for Enabled SubSystem: '<S17>/Rotor reference frame' incorporates:
* EnablePort: '<S28>/Enable'
*/
/* Constant: '<S17>/Constant' */
if (VFControl_cal->Constant_Value_j) {
VFControl_DW.Rotorreferenceframe_MODE_m = true;
/* Fcn: '<S28>/vdr' */
VFControl_B.vdr_l = -0.57735026918962573 * VFControl_B.u_Vb[1];
/* Fcn: '<S28>/vds' */
VFControl_B.vds_f = ((VFControl_B.MultiportSwitch[0] - 1.7320508075688772 *
VFControl_B.MultiportSwitch[1]) * VFControl_B.u_Vb[3]
+ 2.0 * VFControl_B.MultiportSwitch[0] *
VFControl_B.u_Vb[2]) * 0.33333333333333331;
/* Fcn: '<S28>/vqr' */
VFControl_B.vqr_j = (2.0 * VFControl_B.u_Vb[0] + VFControl_B.u_Vb[1]) *
0.33333333333333331;
/* Fcn: '<S28>/vqs' */
VFControl_B.vqs_l = ((1.7320508075688772 * VFControl_B.MultiportSwitch[0] +
VFControl_B.MultiportSwitch[1]) * VFControl_B.u_Vb[3]
+ 2.0 * VFControl_B.MultiportSwitch[1] *
VFControl_B.u_Vb[2]) * 0.33333333333333331;
srUpdateBC(VFControl_DW.Rotorreferenceframe_SubsysRan_i);
} else if (VFControl_DW.Rotorreferenceframe_MODE_m) {
/* Disable for Fcn: '<S28>/vqr' incorporates:
* Outport: '<S28>/vqr,vdr'
*/
VFControl_B.vqr_j = VFControl_cal->vqrvdr_Y0;
/* Disable for Fcn: '<S28>/vdr' incorporates:
* Outport: '<S28>/vqr,vdr'
*/
VFControl_B.vdr_l = VFControl_cal->vqrvdr_Y0;
/* Disable for Fcn: '<S28>/vqs' incorporates:
* Outport: '<S28>/vqs,vds'
*/
VFControl_B.vqs_l = VFControl_cal->vqsvds_Y0;
/* Disable for Fcn: '<S28>/vds' incorporates:
* Outport: '<S28>/vqs,vds'
*/
VFControl_B.vds_f = VFControl_cal->vqsvds_Y0;
VFControl_DW.Rotorreferenceframe_MODE_m = false;
}
/* End of Constant: '<S17>/Constant' */
/* End of Outputs for SubSystem: '<S17>/Rotor reference frame' */
/* Outputs for Enabled SubSystem: '<S17>/Stationary reference frame' incorporates:
* EnablePort: '<S29>/Enable'
*/
/* Constant: '<S17>/Constant1' */
if (VFControl_cal->Constant1_Value_f) {
VFControl_DW.Stationaryreferenceframe_MODE_p = true;
/* Fcn: '<S29>/vdr' */
VFControl_B.vdr_p = ((-VFControl_B.MultiportSwitch[0] - 1.7320508075688772 *
VFControl_B.MultiportSwitch[1]) * VFControl_B.u_Vb[1]
+ -2.0 * VFControl_B.MultiportSwitch[0] *
VFControl_B.u_Vb[0]) * 0.33333333333333331;
/* Fcn: '<S29>/vds' */
VFControl_B.vds_i = -0.57735026918962573 * VFControl_B.u_Vb[3];
/* Fcn: '<S29>/vqr' */
VFControl_B.vqr_l = ((VFControl_B.MultiportSwitch[1] - 1.7320508075688772 *
VFControl_B.MultiportSwitch[0]) * VFControl_B.u_Vb[1]
+ 2.0 * VFControl_B.MultiportSwitch[1] *
VFControl_B.u_Vb[0]) * 0.33333333333333331;
/* Fcn: '<S29>/vqs' */
VFControl_B.vqs_i = (2.0 * VFControl_B.u_Vb[2] + VFControl_B.u_Vb[3]) *
0.33333333333333331;
srUpdateBC(VFControl_DW.Stationaryreferenceframe_Subs_n);
} else if (VFControl_DW.Stationaryreferenceframe_MODE_p) {
/* Disable for Fcn: '<S29>/vqr' incorporates:
* Outport: '<S29>/vqr,vdr'
*/
VFControl_B.vqr_l = VFControl_cal->vqrvdr_Y0_a;
/* Disable for Fcn: '<S29>/vdr' incorporates:
* Outport: '<S29>/vqr,vdr'
*/
VFControl_B.vdr_p = VFControl_cal->vqrvdr_Y0_a;
/* Disable for Fcn: '<S29>/vqs' incorporates:
* Outport: '<S29>/vqs,vds'
*/
VFControl_B.vqs_i = VFControl_cal->vqsvds_Y0_m;
/* Disable for Fcn: '<S29>/vds' incorporates:
* Outport: '<S29>/vqs,vds'
*/
VFControl_B.vds_i = VFControl_cal->vqsvds_Y0_m;
VFControl_DW.Stationaryreferenceframe_MODE_p = false;
}
/* End of Constant: '<S17>/Constant1' */
/* End of Outputs for SubSystem: '<S17>/Stationary reference frame' */
/* Outputs for Enabled SubSystem: '<S17>/Synchronous reference frame' incorporates:
* EnablePort: '<S30>/Enable'
*/
/* Constant: '<S17>/Constant2' */
if (VFControl_cal->Constant2_Value_kn) {
VFControl_DW.Synchronousreferenceframe_MOD_l = true;
/* Fcn: '<S30>/vdr' */
VFControl_B.vdr = ((VFControl_B.MultiportSwitch[0] - 1.7320508075688772 *
VFControl_B.MultiportSwitch[1]) * VFControl_B.u_Vb[1] +
2.0 * VFControl_B.MultiportSwitch[0] * VFControl_B.u_Vb[0])
/ 3.0;
/* Fcn: '<S30>/vds' */
VFControl_B.vds = ((VFControl_B.MultiportSwitch[2] - 1.7320508075688772 *
VFControl_B.MultiportSwitch[3]) * VFControl_B.u_Vb[3] +
2.0 * VFControl_B.MultiportSwitch[2] * VFControl_B.u_Vb[2])
/ 3.0;
/* Fcn: '<S30>/vqr' */
VFControl_B.vqr = ((1.7320508075688772 * VFControl_B.MultiportSwitch[0] +
VFControl_B.MultiportSwitch[1]) * VFControl_B.u_Vb[1] +
2.0 * VFControl_B.MultiportSwitch[1] * VFControl_B.u_Vb[0])
/ 3.0;
/* Fcn: '<S30>/vqs' */
VFControl_B.vqs = ((1.7320508075688772 * VFControl_B.MultiportSwitch[2] +
VFControl_B.MultiportSwitch[3]) * VFControl_B.u_Vb[3] +
2.0 * VFControl_B.MultiportSwitch[3] * VFControl_B.u_Vb[2])
/ 3.0;
srUpdateBC(VFControl_DW.Synchronousreferenceframe_Sub_k);
} else if (VFControl_DW.Synchronousreferenceframe_MOD_l) {
/* Disable for Fcn: '<S30>/vqr' incorporates:
* Outport: '<S30>/vqr,vdr'
*/
VFControl_B.vqr = VFControl_cal->vqrvdr_Y0_am;
/* Disable for Fcn: '<S30>/vdr' incorporates:
* Outport: '<S30>/vqr,vdr'
*/
VFControl_B.vdr = VFControl_cal->vqrvdr_Y0_am;
/* Disable for Fcn: '<S30>/vqs' incorporates:
* Outport: '<S30>/vqs,vds'
*/
VFControl_B.vqs = VFControl_cal->vqsvds_Y0_p;
/* Disable for Fcn: '<S30>/vds' incorporates:
* Outport: '<S30>/vqs,vds'
*/
VFControl_B.vds = VFControl_cal->vqsvds_Y0_p;
VFControl_DW.Synchronousreferenceframe_MOD_l = false;
}
/* End of Constant: '<S17>/Constant2' */
/* End of Outputs for SubSystem: '<S17>/Synchronous reference frame' */
/* MultiPortSwitch: '<S17>/Multiport Switch1' incorporates:
* Constant: '<S17>/Constant4'
*/
switch (static_cast<int32_T>(VFControl_cal->Constant4_Value_i)) {
case 1:
/* MultiPortSwitch: '<S17>/Multiport Switch1' */
VFControl_B.MultiportSwitch1_f[0] = VFControl_B.vqs_l;
VFControl_B.MultiportSwitch1_f[1] = VFControl_B.vds_f;
break;
case 2:
/* MultiPortSwitch: '<S17>/Multiport Switch1' */
VFControl_B.MultiportSwitch1_f[0] = VFControl_B.vqs_i;
VFControl_B.MultiportSwitch1_f[1] = VFControl_B.vds_i;
break;
default:
/* MultiPortSwitch: '<S17>/Multiport Switch1' */
VFControl_B.MultiportSwitch1_f[0] = VFControl_B.vqs;
VFControl_B.MultiportSwitch1_f[1] = VFControl_B.vds;
break;
}
/* End of MultiPortSwitch: '<S17>/Multiport Switch1' */
/* MultiPortSwitch: '<S17>/Multiport Switch' incorporates:
* Constant: '<S17>/Constant3'
*/
switch (static_cast<int32_T>(VFControl_cal->Constant3_Value_g)) {
case 1:
/* MultiPortSwitch: '<S17>/Multiport Switch' */
VFControl_B.MultiportSwitch_p2[0] = VFControl_B.vqr_j;
VFControl_B.MultiportSwitch_p2[1] = VFControl_B.vdr_l;
break;
case 2:
/* MultiPortSwitch: '<S17>/Multiport Switch' */
VFControl_B.MultiportSwitch_p2[0] = VFControl_B.vqr_l;
VFControl_B.MultiportSwitch_p2[1] = VFControl_B.vdr_p;
break;
default:
/* MultiPortSwitch: '<S17>/Multiport Switch' */
VFControl_B.MultiportSwitch_p2[0] = VFControl_B.vqr;
VFControl_B.MultiportSwitch_p2[1] = VFControl_B.vdr;
break;
}
/* End of MultiPortSwitch: '<S17>/Multiport Switch' */
/* UnitDelay: '<S23>/voltages' */
VFControl_B.voltages[0] = VFControl_DW.voltages_DSTATE[0];
VFControl_B.voltages[1] = VFControl_DW.voltages_DSTATE[1];
VFControl_B.voltages[2] = VFControl_DW.voltages_DSTATE[2];
VFControl_B.voltages[3] = VFControl_DW.voltages_DSTATE[3];
/* DigitalClock: '<S23>/Digital Clock' */
VFControl_B.DigitalClock = VFControl_M->Timing.t[1];
/* Switch: '<S23>/IC' incorporates:
* Constant: '<S16>/Constant3'
* Switch: '<S16>/Switch1'
*/
if (VFControl_B.DigitalClock >= VFControl_cal->IC_Threshold) {
/* Sum: '<S23>/sum' */
VFControl_B.ukuk1[0] = VFControl_B.MultiportSwitch1_f[0] +
VFControl_B.voltages[0];
VFControl_B.ukuk1[2] = VFControl_B.MultiportSwitch_p2[0] +
VFControl_B.voltages[2];
VFControl_B.ukuk1[1] = VFControl_B.MultiportSwitch1_f[1] +
VFControl_B.voltages[1];
VFControl_B.ukuk1[3] = VFControl_B.MultiportSwitch_p2[1] +
VFControl_B.voltages[3];
if (VFControl_cal->Constant3_Value >= VFControl_cal->Switch1_Threshold) {
/* Switch: '<S16>/Switch1' incorporates:
* Product: '<S22>/Product1'
*/
std::memcpy(&VFControl_B.RLinv[0], &VFControl_B.RLinv_m[0], sizeof(real_T)
<< 4U);
} else {
/* Switch: '<S16>/Switch1' incorporates:
* Constant: '<S16>/Constant4'
*/
std::memcpy(&VFControl_B.RLinv[0], &VFControl_cal->Constant4_Value[0],
sizeof(real_T) << 4U);
}
/* MultiPortSwitch: '<S19>/Multiport Switch1' incorporates:
* Constant: '<S16>/Constant3'
* Constant: '<S19>/Constant4'
* Switch: '<S16>/Switch1'
*/
switch (static_cast<int32_T>(VFControl_cal->Constant4_Value_e)) {
case 1:
/* MultiPortSwitch: '<S19>/Multiport Switch1' incorporates:
* Assignment: '<S36>/W(2,1)=-wr'
*/
std::memcpy(&VFControl_B.MultiportSwitch1_l[0], &VFControl_B.W21wr[0],
sizeof(real_T) << 4U);
break;
case 2:
/* MultiPortSwitch: '<S19>/Multiport Switch1' incorporates:
* Assignment: '<S37>/W(4,3)=wr'
*/
std::memcpy(&VFControl_B.MultiportSwitch1_l[0], &VFControl_B.W43wr[0],
sizeof(real_T) << 4U);
break;
default:
/* MultiPortSwitch: '<S19>/Multiport Switch1' incorporates:
* Assignment: '<S35>/W(4,3)=wr-1'
*/
std::memcpy(&VFControl_B.MultiportSwitch1_l[0], &VFControl_B.W43wr1[0],
sizeof(real_T) << 4U);
break;
}
/* End of MultiPortSwitch: '<S19>/Multiport Switch1' */
for (i = 0; i < 16; i++) {
/* Sum: '<S16>/Sum1' incorporates:
* MultiPortSwitch: '<S19>/Multiport Switch1'
* Switch: '<S16>/Switch1'
*/
xk1 = (0.0 - VFControl_B.MultiportSwitch1_l[i]) - VFControl_B.RLinv[i];
VFControl_B.A[i] = xk1;
/* Gain: '<S27>/wbase*Ts//2' incorporates:
* Sum: '<S16>/Sum1'
*/
xk1 *= VFControl_cal->wbaseTs2_Gain;
VFControl_B.wbaseTs2[i] = xk1;
/* Sum: '<S27>/Sum1' incorporates:
* Constant: '<S27>/u5'
* Gain: '<S27>/wbase*Ts//2'
*/
VFControl_B.Sum1_k[i] = VFControl_cal->u5_Value_l[i] - xk1;
}
/* Product: '<S27>/inversion' incorporates:
* Sum: '<S27>/Sum1'
*/
rt_invd4x4_snf(VFControl_B.Sum1_k, VFControl_B.inversion);
for (i = 0; i < 16; i++) {
/* Gain: '<S27>/wbase*Ts//2 ' incorporates:
* Product: '<S27>/inversion'
*/
xk1 = VFControl_cal->wbaseTs2_Gain_c * VFControl_B.inversion[i];
VFControl_B.wbaseTs2_c[i] = xk1;
/* Product: '<S23>/Product1' incorporates:
* Gain: '<S27>/wbase*Ts//2 '
*/
tmp[i] = xk1;
}
/* Product: '<S23>/Product1' */
Bias = VFControl_B.ukuk1[0];
tmp_1 = VFControl_B.ukuk1[1];
tmp_2 = VFControl_B.ukuk1[2];
RLinv_m = VFControl_B.ukuk1[3];
for (i = 0; i < 4; i++) {
xk1 = tmp[i] * Bias;
xk1 += tmp[i + 4] * tmp_1;
xk1 += tmp[i + 8] * tmp_2;
xk1 += tmp[i + 12] * RLinv_m;
/* Product: '<S23>/Product1' */
VFControl_B.Product1_d[i] = xk1;
}
for (i = 0; i < 16; i++) {
/* Sum: '<S27>/Sum5' incorporates:
* Constant: '<S27>/u5'
* Gain: '<S27>/wbase*Ts//2'
*/
xk1 = VFControl_cal->u5_Value_l[i] + VFControl_B.wbaseTs2[i];
VFControl_B.Sum5[i] = xk1;
/* Product: '<S27>/Product4' incorporates:
* Product: '<S27>/inversion'
* Sum: '<S27>/Sum5'
*/
tmp[i] = VFControl_B.inversion[i];
tmp_0[i] = xk1;
}
for (i = 0; i < 4; i++) {
/* Product: '<S27>/Product4' */
tmp_3 = i << 2;
xk1 = tmp_0[tmp_3];
Bias = tmp_0[tmp_3 + 1];
tmp_1 = tmp_0[tmp_3 + 2];
tmp_2 = tmp_0[tmp_3 + 3];
for (i_0 = 0; i_0 < 4; i_0++) {
/* Product: '<S27>/Product4' */
RLinv_m = xk1 * tmp[i_0];
RLinv_m += tmp[i_0 + 4] * Bias;
RLinv_m += tmp[i_0 + 8] * tmp_1;
RLinv_m += tmp[i_0 + 12] * tmp_2;
/* Product: '<S27>/Product4' */
VFControl_B.Product4_k[i_0 + tmp_3] = RLinv_m;
}
}
/* Product: '<S23>/Product2' incorporates:
* Product: '<S27>/Product4'
*/
std::memcpy(&tmp[0], &VFControl_B.Product4_k[0], sizeof(real_T) << 4U);
Bias = VFControl_B.xk1[0];
tmp_1 = VFControl_B.xk1[1];
tmp_2 = VFControl_B.xk1[2];
RLinv_m = VFControl_B.xk1[3];
for (i = 0; i < 4; i++) {
xk1 = tmp[i] * Bias;
xk1 += tmp[i + 4] * tmp_1;
xk1 += tmp[i + 8] * tmp_2;
xk1 += tmp[i + 12] * RLinv_m;
/* Product: '<S23>/Product2' */
VFControl_B.Product2_o[i] = xk1;
/* Sum: '<S23>/Ad*x(k-1) + Bd*( u(k-1) + u(k))' */
xk1 += VFControl_B.Product1_d[i];
VFControl_B.xk[i] = xk1;
/* Switch: '<S23>/IC' */
VFControl_B.IC[i] = xk1;
}
/* End of Product: '<S23>/Product2' */
} else {
/* Switch: '<S23>/IC' */
VFControl_B.IC[0] = VFControl_B.xk1[0];
VFControl_B.IC[1] = VFControl_B.xk1[1];
VFControl_B.IC[2] = VFControl_B.xk1[2];
VFControl_B.IC[3] = VFControl_B.xk1[3];
}
/* End of Switch: '<S23>/IC' */
/* Sum: '<S18>/Sum2' */
xk1 = 0.0 - VFControl_B.MultiportSwitch_p[0];
xk1 -= VFControl_B.MultiportSwitch_p[1];
/* Sum: '<S18>/Sum2' */
VFControl_B.Sum2_l = xk1;
/* Gain: '<S13>/unit conversion' */
VFControl_B.unitconversion[2] = VFControl_cal->unitconversion_Gain[2] *
VFControl_B.Sum2_l;
/* Sum: '<S18>/Sum3' */
xk1 = 0.0 - VFControl_B.MultiportSwitch1[0];
/* Gain: '<S13>/unit conversion' */
VFControl_B.unitconversion[0] = VFControl_cal->unitconversion_Gain[0] *
VFControl_B.MultiportSwitch_p[0];
VFControl_B.unitconversion[3] = VFControl_B.Product3[2] *
VFControl_cal->unitconversion_Gain[3];
VFControl_B.unitconversion[5] = VFControl_B.xk1[2] *
VFControl_cal->unitconversion_Gain[5];
VFControl_B.unitconversion[7] = VFControl_B.MultiportSwitch_p2[0] *
VFControl_cal->unitconversion_Gain[7];
VFControl_B.unitconversion[9] = VFControl_B.MultiportSwitch1[0] *
VFControl_cal->unitconversion_Gain[9];
VFControl_B.unitconversion[12] = VFControl_B.Product3[0] *
VFControl_cal->unitconversion_Gain[12];
VFControl_B.unitconversion[14] = VFControl_B.xk1[0] *
VFControl_cal->unitconversion_Gain[14];
VFControl_B.unitconversion[16] = VFControl_B.MultiportSwitch1_f[0] *
VFControl_cal->unitconversion_Gain[16];
/* Sum: '<S18>/Sum3' */
xk1 -= VFControl_B.MultiportSwitch1[1];
/* Gain: '<S13>/unit conversion' */
VFControl_B.unitconversion[1] = VFControl_cal->unitconversion_Gain[1] *
VFControl_B.MultiportSwitch_p[1];
VFControl_B.unitconversion[4] = VFControl_B.Product3[3] *
VFControl_cal->unitconversion_Gain[4];
VFControl_B.unitconversion[6] = VFControl_B.xk1[3] *
VFControl_cal->unitconversion_Gain[6];
VFControl_B.unitconversion[8] = VFControl_B.MultiportSwitch_p2[1] *
VFControl_cal->unitconversion_Gain[8];
VFControl_B.unitconversion[10] = VFControl_B.MultiportSwitch1[1] *
VFControl_cal->unitconversion_Gain[10];
VFControl_B.unitconversion[13] = VFControl_B.Product3[1] *
VFControl_cal->unitconversion_Gain[13];
VFControl_B.unitconversion[15] = VFControl_B.xk1[1] *
VFControl_cal->unitconversion_Gain[15];
VFControl_B.unitconversion[17] = VFControl_B.MultiportSwitch1_f[1] *
VFControl_cal->unitconversion_Gain[17];
/* Sum: '<S18>/Sum3' */
VFControl_B.Sum3 = xk1;
/* Gain: '<S13>/unit conversion' */
VFControl_B.unitconversion[11] = VFControl_cal->unitconversion_Gain[11] *
VFControl_B.Sum3;
VFControl_B.unitconversion[18] = VFControl_cal->unitconversion_Gain[18] *
VFControl_B.Switch2;
/* Gain: '<S15>/1\p' */
VFControl_B.up = VFControl_cal->up_Gain * VFControl_B.Rotoranglethetam;
/* Gain: '<S15>/1\p1' */
VFControl_B.wTethr[0] = VFControl_cal->up1_Gain[0] * VFControl_B.Sum1;
VFControl_B.wTethr[1] = VFControl_cal->up1_Gain[1] * VFControl_B.Sum2_k;
VFControl_B.wTethr[2] = VFControl_cal->up1_Gain[2] * VFControl_B.up;
/* Gain: '<S15>/Unit conversion' */
VFControl_B.Unitconversion = VFControl_cal->Unitconversion_Gain * 0.0;
/* Gain: '<S15>/F' */
VFControl_B.F = VFControl_cal->F_Gain * VFControl_B.Sum1;
/* Sum: '<S15>/Sum' */
VFControl_B.Sum = (VFControl_B.Sum2_k - VFControl_B.Unitconversion) -
VFControl_B.F;
/* Gain: '<S15>/1_2H' */
VFControl_B.u_2H = VFControl_cal->u_2H_Gain * VFControl_B.Sum;
/* DiscreteIntegrator: '<S15>/Rotor speed(wm)' */
if (VFControl_DW.Rotorspeedwm_SYSTEM_ENABLE != 0) {
/* DiscreteIntegrator: '<S15>/Rotor speed(wm)' */
VFControl_B.Rotorspeedwm = VFControl_DW.Rotorspeedwm_DSTATE;
} else {
/* DiscreteIntegrator: '<S15>/Rotor speed(wm)' */
VFControl_B.Rotorspeedwm = VFControl_cal->Rotorspeedwm_gainval *
VFControl_B.u_2H + VFControl_DW.Rotorspeedwm_DSTATE;
}
/* End of DiscreteIntegrator: '<S15>/Rotor speed(wm)' */
/* Gain: '<S15>/web_psb' */
VFControl_B.web_psb = VFControl_cal->web_psb_Gain_n * VFControl_B.Sum1;
/* DigitalClock: '<S57>/Digital Clock' */
VFControl_B.DigitalClock_k = VFControl_M->Timing.t[1];
/* Lookup: '<S57>/Look-Up Table' */
VFControl_B.LookUpTable = rt_Lookup(&VFControl_cal->LookUpTable_XData[0], 8,
VFControl_B.DigitalClock_k, &VFControl_cal->LookUpTable_YData[0]);
/* RelationalOperator: '<S49>/Relational Operator3' incorporates:
* Constant: '<S49>/Constant6'
* Constant: '<S49>/valp_nom1'
*/
VFControl_B.RelationalOperator3 = (VFControl_cal->valp_nom1_Value ==
VFControl_cal->Constant6_Value_k);
/* RelationalOperator: '<S46>/Relational Operator' incorporates:
* Constant: '<S46>/Constant'
* Constant: '<S46>/valp_nom3'
*/
VFControl_B.Amplitude = (VFControl_cal->valp_nom3_Value ==
VFControl_cal->Constant_Value_nw);
/* Logic: '<S49>/Logical Operator1' */
VFControl_B.LogicalOperator1 = (VFControl_B.RelationalOperator3 &&
VFControl_B.Amplitude);
/* Step: '<S56>/Step1' */
Bias = VFControl_M->Timing.t[1];
if (Bias < VFControl_cal->Variationvaluesteprampmod_Toff_) {
/* Step: '<S56>/Step1' */
VFControl_B.Toff = VFControl_cal->Step1_Y0;
} else {
/* Step: '<S56>/Step1' */
VFControl_B.Toff = VFControl_cal->Step1_YFinal;
}
/* End of Step: '<S56>/Step1' */
/* DataTypeConversion: '<S56>/Data Type Conversion2' */
VFControl_B.DataTypeConversion2 = (VFControl_B.Toff != 0.0);
/* Logic: '<S56>/Logical Operator1' */
VFControl_B.LogicalOperator1_l = !VFControl_B.DataTypeConversion2;
/* RelationalOperator: '<S56>/Relational Operator1' incorporates:
* Constant: '<S47>/valp_nom5'
* Constant: '<S56>/Constant3'
*/
VFControl_B.RelationalOperator1 = (VFControl_cal->valp_nom5_Value ==
VFControl_cal->Constant3_Value_ey);
/* DataTypeConversion: '<S56>/Data Type Conversion1' */
VFControl_B.DataTypeConversion1_f = VFControl_B.RelationalOperator1;
/* Logic: '<S56>/Logical Operator' */
VFControl_B.LogicalOperator = (VFControl_B.LogicalOperator1_l &&
VFControl_B.DataTypeConversion1_f);
/* Step: '<S56>/Step' */
Bias = VFControl_M->Timing.t[1];
if (Bias < VFControl_cal->Variationvaluesteprampmod_Ton_V) {
/* Step: '<S56>/Step' */
VFControl_B.Ton = VFControl_cal->Step_Y0;
} else {
/* Step: '<S56>/Step' */
VFControl_B.Ton = VFControl_cal->Step_YFinal;
}
/* End of Step: '<S56>/Step' */
/* DiscreteIntegrator: '<S47>/Discrete-Time Integrator1' */
VFControl_B.DiscreteTimeIntegrator1 =
VFControl_DW.DiscreteTimeIntegrator1_DSTATE;
/* UnitDelay: '<S47>/Unit Delay1' */
VFControl_B.UnitDelay1 = VFControl_DW.UnitDelay1_DSTATE;
/* Switch: '<S56>/Switch2' */
if (VFControl_B.Toff >= VFControl_cal->Switch2_Threshold_a) {
/* MultiPortSwitch: '<S56>/Multiport Switch1' incorporates:
* Constant: '<S47>/valp_nom5'
*/
switch (static_cast<int32_T>(VFControl_cal->valp_nom5_Value)) {
case 1:
/* Product: '<S56>/Product2' incorporates:
* Constant: '<S56>/valp_nom6'
*/
VFControl_B.Step = VFControl_cal->Variationvaluesteprampmod_Var_n *
VFControl_B.Ton;
/* MultiPortSwitch: '<S56>/Multiport Switch1' */
VFControl_B.MultiportSwitch1_b = VFControl_B.Step;
break;
case 2:
/* MultiPortSwitch: '<S56>/Multiport Switch1' */
VFControl_B.MultiportSwitch1_b = VFControl_B.DiscreteTimeIntegrator1;
break;
case 3:
/* Gain: '<S56>/Gain1' incorporates:
* Constant: '<S56>/valp_nom9'
*/
VFControl_B.Gain1_f = VFControl_cal->Gain1_Gain_n *
VFControl_cal->Variationvaluesteprampmod_Varia;
/* Product: '<S56>/Product1' */
VFControl_B.Product1_f = VFControl_B.DiscreteTimeIntegrator1 *
VFControl_B.Gain1_f;
/* Trigonometry: '<S56>/Trigonometric Function1' */
VFControl_B.TrigonometricFunction1_l = std::sin(VFControl_B.Product1_f);
/* Product: '<S56>/Product' incorporates:
* Constant: '<S56>/valp_nom8'
*/
VFControl_B.Mod = VFControl_cal->Variationvaluesteprampmod_Var_l *
VFControl_B.TrigonometricFunction1_l;
/* MultiPortSwitch: '<S56>/Multiport Switch1' */
VFControl_B.MultiportSwitch1_b = VFControl_B.Mod;
break;
default:
/* MultiPortSwitch: '<S56>/Multiport Switch1' incorporates:
* Constant: '<S56>/Constant5'
*/
VFControl_B.MultiportSwitch1_b = VFControl_cal->Constant5_Value_c;
break;
}
/* End of MultiPortSwitch: '<S56>/Multiport Switch1' */
/* Switch: '<S56>/Switch2' */
VFControl_B.Switch2_d = VFControl_B.MultiportSwitch1_b;
} else {
/* Switch: '<S56>/Switch2' */
VFControl_B.Switch2_d = VFControl_B.UnitDelay1;
}
/* End of Switch: '<S56>/Switch2' */
/* Switch: '<S56>/Switch3' */
if (VFControl_B.LogicalOperator) {
/* Switch: '<S56>/Switch3' incorporates:
* Constant: '<S56>/Constant1'
*/
VFControl_B.Switch3 = VFControl_cal->Constant1_Value_a;
} else {
/* Switch: '<S56>/Switch3' */
VFControl_B.Switch3 = VFControl_B.Switch2_d;
}
/* End of Switch: '<S56>/Switch3' */
/* Switch: '<S41>/Switch2' */
if (VFControl_B.Amplitude) {
/* Switch: '<S41>/Switch2' */
VFControl_B.Switch2_a = VFControl_B.Switch3;
} else {
/* Switch: '<S41>/Switch2' incorporates:
* Constant: '<S41>/Constant1'
*/
VFControl_B.Switch2_a = VFControl_cal->Constant1_Value_j;
}
/* End of Switch: '<S41>/Switch2' */
/* Sum: '<S41>/Sum3' incorporates:
* Constant: '<S41>/valp_nom2'
*/
VFControl_B.Sum3_e = VFControl_B.Switch2_a + VFControl_cal->valp_nom2_Value;
/* Switch: '<S49>/Switch1' */
if (VFControl_B.LogicalOperator1) {
/* Switch: '<S49>/Switch1' */
VFControl_B.Switch1 = VFControl_B.LookUpTable;
} else {
/* Switch: '<S49>/Switch1' */
VFControl_B.Switch1 = VFControl_B.Sum3_e;
}
/* End of Switch: '<S49>/Switch1' */
/* Switch: '<S50>/Switch5' */
VFControl_B.Switch5[0] = VFControl_B.Switch1;
/* Switch: '<S50>/Switch5' incorporates:
* Constant: '<S50>/SinglePhase'
*/
if (VFControl_cal->SinglePhase_Value >= VFControl_cal->Switch5_Threshold) {
/* Switch: '<S50>/Switch5' */
VFControl_B.Switch5[1] = VFControl_B.Sum3_e;
VFControl_B.Switch5[2] = VFControl_B.Sum3_e;
} else {
/* Switch: '<S50>/Switch5' */
VFControl_B.Switch5[1] = VFControl_B.Switch1;
VFControl_B.Switch5[2] = VFControl_B.Switch1;
}
/* DigitalClock: '<S42>/t' */
VFControl_B.t = VFControl_M->Timing.t[1];
/* Gain: '<S42>/Gain' incorporates:
* Constant: '<S42>/valp_nom1'
*/
VFControl_B.Gain_p = VFControl_cal->Gain_Gain_k *
VFControl_cal->valp_nom1_Value_g;
/* Product: '<S42>/Product' */
VFControl_B.Product = VFControl_B.t * VFControl_B.Gain_p;
/* DiscreteIntegrator: '<S42>/Discrete-Time Integrator' */
VFControl_B.DiscreteTimeIntegrator =
VFControl_DW.DiscreteTimeIntegrator_DSTATE;
/* Sum: '<S42>/Sum' */
VFControl_B.Sum_n = VFControl_B.Product + VFControl_B.DiscreteTimeIntegrator;
/* RelationalOperator: '<S54>/Relational Operator3' incorporates:
* Constant: '<S54>/Constant6'
* Constant: '<S54>/valp_nom1'
*/
VFControl_B.RelationalOperator3_f = (VFControl_cal->valp_nom1_Value_c ==
VFControl_cal->Constant6_Value_h);
/* RelationalOperator: '<S46>/Relational Operator1' incorporates:
* Constant: '<S46>/Constant2'
* Constant: '<S46>/valp_nom3'
*/
VFControl_B.Phase = (VFControl_cal->valp_nom3_Value ==
VFControl_cal->Constant2_Value_b);
/* Logic: '<S54>/Logical Operator1' */
VFControl_B.LogicalOperator1_b = (VFControl_B.RelationalOperator3_f &&
VFControl_B.Phase);
/* Gain: '<S45>/Gain3' incorporates:
* Constant: '<S45>/valp_nom'
*/
VFControl_B.Gain3 = VFControl_cal->Gain3_Gain_e *
VFControl_cal->valp_nom_Value;
/* Switch: '<S45>/Switch3' */
if (VFControl_B.Phase) {
/* Gain: '<S45>/Gain4' */
VFControl_B.Gain4 = VFControl_cal->Gain4_Gain * VFControl_B.Switch3;
/* Switch: '<S45>/Switch3' */
VFControl_B.Switch3_o = VFControl_B.Gain4;
} else {
/* Switch: '<S45>/Switch3' incorporates:
* Constant: '<S45>/Constant4'
*/
VFControl_B.Switch3_o = VFControl_cal->Constant4_Value_l;
}
/* End of Switch: '<S45>/Switch3' */
/* Sum: '<S45>/Sum2' incorporates:
* Constant: '<S45>/P1'
*/
VFControl_B.Sum2_j[0] = (VFControl_B.Gain3 + VFControl_cal->P1_Value_e[0]) +
VFControl_B.Switch3_o;
VFControl_B.Sum2_j[1] = (VFControl_B.Gain3 + VFControl_cal->P1_Value_e[1]) +
VFControl_B.Switch3_o;
VFControl_B.Sum2_j[2] = (VFControl_B.Gain3 + VFControl_cal->P1_Value_e[2]) +
VFControl_B.Switch3_o;
/* Switch: '<S54>/Switch1' */
if (VFControl_B.LogicalOperator1_b) {
/* Gain: '<S54>/Gain3' */
VFControl_B.Gain3_n = VFControl_cal->Gain3_Gain_c * VFControl_B.LookUpTable;
/* Sum: '<S54>/Sum2' incorporates:
* Constant: '<S54>/P1'
*/
xk1 = VFControl_B.Gain3_n + VFControl_cal->P1_Value[0];
VFControl_B.Sum2_lw[0] = xk1;
/* Switch: '<S54>/Switch1' */
VFControl_B.Switch1_a[0] = xk1;
/* Sum: '<S54>/Sum2' incorporates:
* Constant: '<S54>/P1'
*/
xk1 = VFControl_B.Gain3_n + VFControl_cal->P1_Value[1];
VFControl_B.Sum2_lw[1] = xk1;
/* Switch: '<S54>/Switch1' */
VFControl_B.Switch1_a[1] = xk1;
/* Sum: '<S54>/Sum2' incorporates:
* Constant: '<S54>/P1'
*/
xk1 = VFControl_B.Gain3_n + VFControl_cal->P1_Value[2];
VFControl_B.Sum2_lw[2] = xk1;
/* Switch: '<S54>/Switch1' */
VFControl_B.Switch1_a[2] = xk1;
} else {
/* Switch: '<S54>/Switch1' */
VFControl_B.Switch1_a[0] = VFControl_B.Sum2_j[0];
VFControl_B.Switch1_a[1] = VFControl_B.Sum2_j[1];
VFControl_B.Switch1_a[2] = VFControl_B.Sum2_j[2];
}
/* End of Switch: '<S54>/Switch1' */
/* Switch: '<S55>/Switch5' incorporates:
* Constant: '<S55>/SinglePhase'
*/
if (VFControl_cal->SinglePhase_Value_i >= VFControl_cal->Switch5_Threshold_m)
{
/* Switch: '<S55>/Switch5' */
VFControl_B.Switch5_b[0] = VFControl_B.Switch1_a[0];
VFControl_B.Switch5_b[1] = VFControl_B.Sum2_j[1];
VFControl_B.Switch5_b[2] = VFControl_B.Sum2_j[2];
} else {
/* Switch: '<S55>/Switch5' */
VFControl_B.Switch5_b[0] = VFControl_B.Switch1_a[0];
VFControl_B.Switch5_b[1] = VFControl_B.Switch1_a[1];
VFControl_B.Switch5_b[2] = VFControl_B.Switch1_a[2];
}
/* End of Switch: '<S55>/Switch5' */
/* Sum: '<S40>/Sum7' */
VFControl_B.Sum7[0] = VFControl_B.Sum_n + VFControl_B.Switch5_b[0];
/* Trigonometry: '<S40>/Trigonometric Function1' */
xk1 = std::sin(VFControl_B.Sum7[0]);
VFControl_B.TrigonometricFunction1[0] = xk1;
/* Product: '<S40>/Product2' */
VFControl_B.Product2[0] = VFControl_B.Switch5[0] * xk1;
/* Sum: '<S40>/Sum7' */
VFControl_B.Sum7[1] = VFControl_B.Sum_n + VFControl_B.Switch5_b[1];
/* Trigonometry: '<S40>/Trigonometric Function1' */
xk1 = std::sin(VFControl_B.Sum7[1]);
VFControl_B.TrigonometricFunction1[1] = xk1;
/* Product: '<S40>/Product2' */
VFControl_B.Product2[1] = VFControl_B.Switch5[1] * xk1;
/* Sum: '<S40>/Sum7' */
VFControl_B.Sum7[2] = VFControl_B.Sum_n + VFControl_B.Switch5_b[2];
/* Trigonometry: '<S40>/Trigonometric Function1' */
xk1 = std::sin(VFControl_B.Sum7[2]);
VFControl_B.TrigonometricFunction1[2] = xk1;
/* Product: '<S40>/Product2' */
VFControl_B.Product2[2] = VFControl_B.Switch5[2] * xk1;
/* Step: '<S51>/Step' */
Bias = VFControl_M->Timing.t[1];
if (Bias < VFControl_cal->Step_Time) {
/* Step: '<S51>/Step' */
VFControl_B.Ton_e = VFControl_cal->Step_Y0_k;
} else {
/* Step: '<S51>/Step' */
VFControl_B.Ton_e = VFControl_cal->Step_YFinal_d;
}
/* End of Step: '<S51>/Step' */
/* Step: '<S51>/Step1' */
Bias = VFControl_M->Timing.t[1];
if (Bias < VFControl_cal->Step1_Time) {
/* Step: '<S51>/Step1' */
VFControl_B.Toff_e = VFControl_cal->Step1_Y0_i;
} else {
/* Step: '<S51>/Step1' */
VFControl_B.Toff_e = VFControl_cal->Step1_YFinal_k;
}
/* End of Step: '<S51>/Step1' */
/* Sum: '<S51>/Sum4' */
VFControl_B.Sum4 = VFControl_B.Ton_e + VFControl_B.Toff_e;
/* DataTypeConversion: '<S51>/Data Type Conversion1' */
VFControl_B.DataTypeConversion1_j = (VFControl_B.Sum4 != 0.0);
/* DataTypeConversion: '<S51>/Data Type Conversion2' incorporates:
* Constant: '<S51>/valp_nom7'
*/
VFControl_B.DataTypeConversion2_m = (VFControl_cal->valp_nom7_Value != 0.0);
/* Logic: '<S51>/Logical Operator' */
VFControl_B.LogicalOperator_l = (VFControl_B.DataTypeConversion1_j &&
VFControl_B.DataTypeConversion2_m);
/* DataTypeConversion: '<S51>/Data Type Conversion' */
VFControl_B.DataTypeConversion = VFControl_B.LogicalOperator_l;
/* Gain: '<S52>/Gain1' */
VFControl_B.Gain1 = VFControl_cal->HarmonicAgeneration_n_Harmo *
VFControl_B.Sum_n;
/* Gain: '<S52>/Gain3' incorporates:
* Constant: '<S52>/Phase_Harmo'
*/
VFControl_B.Gain3_f = VFControl_cal->Gain3_Gain_l *
VFControl_cal->HarmonicAgeneration_Phase_Harmo;
/* Sum: '<S52>/Sum1' incorporates:
* Constant: '<S52>/Phase_Harmo2'
* Constant: '<S52>/valp_nom2'
*/
VFControl_B.Sum1_m = VFControl_cal->HarmonicAgeneration_Seq_Harmo +
VFControl_cal->valp_nom2_Value_i;
/* MultiPortSwitch: '<S52>/Multiport Switch' */
switch (static_cast<int32_T>(VFControl_B.Sum1_m)) {
case 1:
/* MultiPortSwitch: '<S52>/Multiport Switch' incorporates:
* Constant: '<S52>/Zero-sequence'
*/
VFControl_B.MultiportSwitch_h[0] = VFControl_cal->Zerosequence_Value[0];
VFControl_B.MultiportSwitch_h[1] = VFControl_cal->Zerosequence_Value[1];
VFControl_B.MultiportSwitch_h[2] = VFControl_cal->Zerosequence_Value[2];
break;
case 2:
/* MultiPortSwitch: '<S52>/Multiport Switch' incorporates:
* Constant: '<S52>/Positive-sequence'
*/
VFControl_B.MultiportSwitch_h[0] = VFControl_cal->Positivesequence_Value[0];
VFControl_B.MultiportSwitch_h[1] = VFControl_cal->Positivesequence_Value[1];
VFControl_B.MultiportSwitch_h[2] = VFControl_cal->Positivesequence_Value[2];
break;
default:
/* MultiPortSwitch: '<S52>/Multiport Switch' incorporates:
* Constant: '<S52>/Negative-sequence'
*/
VFControl_B.MultiportSwitch_h[0] = VFControl_cal->Negativesequence_Value[0];
VFControl_B.MultiportSwitch_h[1] = VFControl_cal->Negativesequence_Value[1];
VFControl_B.MultiportSwitch_h[2] = VFControl_cal->Negativesequence_Value[2];
break;
}
/* End of MultiPortSwitch: '<S52>/Multiport Switch' */
/* Sum: '<S52>/Sum' */
xk1 = VFControl_B.Gain1 + VFControl_B.Gain3_f;
/* Sum: '<S52>/Sum' */
VFControl_B.Sum_j[0] = xk1 + VFControl_B.MultiportSwitch_h[0];
/* Trigonometry: '<S52>/Trigonometric Function1' */
Bias = std::sin(VFControl_B.Sum_j[0]);
VFControl_B.TrigonometricFunction1_d[0] = Bias;
/* Product: '<S52>/Product1' incorporates:
* Constant: '<S52>/Phase_Harmo1'
*/
tmp_1 = VFControl_B.DataTypeConversion *
VFControl_cal->HarmonicAgeneration_Mag_Harmo;
/* Product: '<S52>/Product1' */
VFControl_B.Product1[0] = tmp_1 * Bias;
/* Sum: '<S52>/Sum' */
VFControl_B.Sum_j[1] = xk1 + VFControl_B.MultiportSwitch_h[1];
/* Trigonometry: '<S52>/Trigonometric Function1' */
Bias = std::sin(VFControl_B.Sum_j[1]);
VFControl_B.TrigonometricFunction1_d[1] = Bias;
/* Product: '<S52>/Product1' */
VFControl_B.Product1[1] = tmp_1 * Bias;
/* Sum: '<S52>/Sum' */
VFControl_B.Sum_j[2] = xk1 + VFControl_B.MultiportSwitch_h[2];
/* Trigonometry: '<S52>/Trigonometric Function1' */
Bias = std::sin(VFControl_B.Sum_j[2]);
VFControl_B.TrigonometricFunction1_d[2] = Bias;
/* Product: '<S52>/Product1' */
VFControl_B.Product1[2] = tmp_1 * Bias;
/* Gain: '<S53>/Gain1' */
VFControl_B.Gain1_m = VFControl_cal->HarmonicBgeneration_n_Harmo *
VFControl_B.Sum_n;
/* Gain: '<S53>/Gain3' incorporates:
* Constant: '<S53>/Phase_Harmo'
*/
VFControl_B.Gain3_a = VFControl_cal->Gain3_Gain_j *
VFControl_cal->HarmonicBgeneration_Phase_Harmo;
/* Sum: '<S53>/Sum1' incorporates:
* Constant: '<S53>/Phase_Harmo2'
* Constant: '<S53>/valp_nom2'
*/
VFControl_B.Sum1_m3 = VFControl_cal->HarmonicBgeneration_Seq_Harmo +
VFControl_cal->valp_nom2_Value_c;
/* MultiPortSwitch: '<S53>/Multiport Switch' */
switch (static_cast<int32_T>(VFControl_B.Sum1_m3)) {
case 1:
/* MultiPortSwitch: '<S53>/Multiport Switch' incorporates:
* Constant: '<S53>/Zero-sequence'
*/
VFControl_B.MultiportSwitch_n[0] = VFControl_cal->Zerosequence_Value_h[0];
VFControl_B.MultiportSwitch_n[1] = VFControl_cal->Zerosequence_Value_h[1];
VFControl_B.MultiportSwitch_n[2] = VFControl_cal->Zerosequence_Value_h[2];
break;
case 2:
/* MultiPortSwitch: '<S53>/Multiport Switch' incorporates:
* Constant: '<S53>/Positive-sequence'
*/
VFControl_B.MultiportSwitch_n[0] = VFControl_cal->Positivesequence_Value_o[0];
VFControl_B.MultiportSwitch_n[1] = VFControl_cal->Positivesequence_Value_o[1];
VFControl_B.MultiportSwitch_n[2] = VFControl_cal->Positivesequence_Value_o[2];
break;
default:
/* MultiPortSwitch: '<S53>/Multiport Switch' incorporates:
* Constant: '<S53>/Negative-sequence'
*/
VFControl_B.MultiportSwitch_n[0] = VFControl_cal->Negativesequence_Value_k[0];
VFControl_B.MultiportSwitch_n[1] = VFControl_cal->Negativesequence_Value_k[1];
VFControl_B.MultiportSwitch_n[2] = VFControl_cal->Negativesequence_Value_k[2];
break;
}
/* End of MultiPortSwitch: '<S53>/Multiport Switch' */
/* Sum: '<S53>/Sum' */
xk1 = VFControl_B.Gain1_m + VFControl_B.Gain3_a;
/* Sum: '<S53>/Sum' */
VFControl_B.Sum_i[0] = xk1 + VFControl_B.MultiportSwitch_n[0];
/* Trigonometry: '<S53>/Trigonometric Function1' */
tmp_1 = std::sin(VFControl_B.Sum_i[0]);
VFControl_B.TrigonometricFunction1_c[0] = tmp_1;
/* Product: '<S53>/Product1' incorporates:
* Constant: '<S53>/Phase_Harmo1'
*/
Bias = VFControl_B.DataTypeConversion *
VFControl_cal->HarmonicBgeneration_Mag_Harmo;
/* Product: '<S53>/Product1' */
tmp_1 *= Bias;
VFControl_B.Product1_i[0] = tmp_1;
/* Sum: '<S43>/Sum4' */
tmp_1 += VFControl_B.Product1[0];
VFControl_B.Sum4_o[0] = tmp_1;
/* Sum: '<S40>/Sum8' */
VFControl_B.Sum8[0] = VFControl_B.Product2[0] + tmp_1;
/* Sum: '<S53>/Sum' */
VFControl_B.Sum_i[1] = xk1 + VFControl_B.MultiportSwitch_n[1];
/* Trigonometry: '<S53>/Trigonometric Function1' */
tmp_1 = std::sin(VFControl_B.Sum_i[1]);
VFControl_B.TrigonometricFunction1_c[1] = tmp_1;
/* Product: '<S53>/Product1' */
tmp_1 *= Bias;
VFControl_B.Product1_i[1] = tmp_1;
/* Sum: '<S43>/Sum4' */
tmp_1 += VFControl_B.Product1[1];
VFControl_B.Sum4_o[1] = tmp_1;
/* Sum: '<S40>/Sum8' */
VFControl_B.Sum8[1] = VFControl_B.Product2[1] + tmp_1;
/* Sum: '<S53>/Sum' */
VFControl_B.Sum_i[2] = xk1 + VFControl_B.MultiportSwitch_n[2];
/* Trigonometry: '<S53>/Trigonometric Function1' */
tmp_1 = std::sin(VFControl_B.Sum_i[2]);
VFControl_B.TrigonometricFunction1_c[2] = tmp_1;
/* Product: '<S53>/Product1' */
tmp_1 *= Bias;
VFControl_B.Product1_i[2] = tmp_1;
/* Sum: '<S43>/Sum4' */
tmp_1 += VFControl_B.Product1[2];
VFControl_B.Sum4_o[2] = tmp_1;
/* Sum: '<S40>/Sum8' */
VFControl_B.Sum8[2] = VFControl_B.Product2[2] + tmp_1;
/* Clock: '<S73>/Clock' */
VFControl_B.Clock = VFControl_M->Timing.t[0];
/* Sum: '<S73>/Add1' incorporates:
* Constant: '<S73>/Constant3'
*/
VFControl_B.Add1 = VFControl_B.Clock + VFControl_cal->Constant3_Value_m;
/* Math: '<S73>/Math Function' incorporates:
* Constant: '<S73>/Constant4'
*/
VFControl_B.MathFunction = rt_remd_snf(VFControl_B.Add1,
VFControl_cal->Constant4_Value_p);
/* Gain: '<S73>/1\ib1' */
VFControl_B.uib1 = VFControl_cal->uib1_Gain * VFControl_B.MathFunction;
/* Lookup_n-D: '<S73>/1-D Lookup Table' incorporates:
* Gain: '<S73>/1\ib1'
*/
VFControl_B.uDLookupTable = look1_pbinlxpw(VFControl_B.uib1,
VFControl_cal->uDLookupTable_bp01Data_k,
VFControl_cal->uDLookupTable_tableData_d, &VFControl_DW.m_bpIndex, 2U);
/* Sum: '<S73>/Add3' incorporates:
* Constant: '<S73>/Constant2'
*/
VFControl_B.Add3 = VFControl_B.uDLookupTable -
VFControl_cal->Constant2_Value_a;
/* ModelReference: '<Root>/Model' incorporates:
* Constant: '<Root>/Constant'
*/
PWMGenerator(&VFControl_B.Sum8[0], &VFControl_B.Add3,
&VFControl_cal->Constant_Value_c, &VFControl_B.Model_o1,
&VFControl_B.Model_o2, &VFControl_B.Model_o3,
&(VFControl_DW.Model_InstanceData.rtb));
/* DigitalClock: '<S74>/Digital Clock' */
VFControl_B.DigitalClock_m = VFControl_M->Timing.t[1];
/* Sum: '<S74>/Add1' incorporates:
* Constant: '<S74>/Constant3'
*/
VFControl_B.Add1_e = VFControl_B.DigitalClock_m +
VFControl_cal->Constant3_Value_ej;
/* Math: '<S74>/Math Function' incorporates:
* Constant: '<S74>/Constant1'
*/
VFControl_B.MathFunction_l = rt_remd_snf(VFControl_B.Add1_e,
VFControl_cal->Constant1_Value_o);
/* Gain: '<S74>/1\ib1' */
VFControl_B.uib1_h = VFControl_cal->uib1_Gain_i * VFControl_B.MathFunction_l;
/* Lookup_n-D: '<S74>/1-D Lookup Table' incorporates:
* Gain: '<S74>/1\ib1'
*/
VFControl_B.uDLookupTable_b = look1_pbinlxpw(VFControl_B.uib1_h,
VFControl_cal->uDLookupTable_bp01Data_i,
VFControl_cal->uDLookupTable_tableData_f, &VFControl_DW.m_bpIndex_e, 2U);
/* Sum: '<S74>/Add3' incorporates:
* Constant: '<S74>/Constant2'
*/
VFControl_B.Add3_h = VFControl_B.uDLookupTable_b -
VFControl_cal->Constant2_Value_at;
/* ModelReference: '<Root>/Model1' incorporates:
* Constant: '<Root>/Constant1'
*/
PWMGenerator(&VFControl_B.Sum8[1], &VFControl_B.Add3_h,
&VFControl_cal->Constant1_Value_ah, &VFControl_B.Model1_o1,
&VFControl_B.Model1_o2, &VFControl_B.Model1_o3,
&(VFControl_DW.Model1_InstanceData.rtb));
/* DigitalClock: '<S75>/Digital Clock' */
VFControl_B.DigitalClock_ms = VFControl_M->Timing.t[1];
/* Sum: '<S75>/Add1' incorporates:
* Constant: '<S75>/Constant3'
*/
VFControl_B.Add1_l = VFControl_B.DigitalClock_ms +
VFControl_cal->Constant3_Value_mm;
/* Math: '<S75>/Math Function' incorporates:
* Constant: '<S75>/Constant1'
*/
VFControl_B.MathFunction_o = rt_remd_snf(VFControl_B.Add1_l,
VFControl_cal->Constant1_Value_p);
/* Gain: '<S75>/1\ib1' */
VFControl_B.uib1_e = VFControl_cal->uib1_Gain_c * VFControl_B.MathFunction_o;
/* Lookup_n-D: '<S75>/1-D Lookup Table' incorporates:
* Gain: '<S75>/1\ib1'
*/
VFControl_B.uDLookupTable_bk = look1_pbinlxpw(VFControl_B.uib1_e,
VFControl_cal->uDLookupTable_bp01Data_m,
VFControl_cal->uDLookupTable_tableData_h, &VFControl_DW.m_bpIndex_p, 2U);
/* Sum: '<S75>/Add3' incorporates:
* Constant: '<S75>/Constant2'
*/
VFControl_B.Add3_n = VFControl_B.uDLookupTable_bk -
VFControl_cal->Constant2_Value_k;
/* ModelReference: '<Root>/Model2' incorporates:
* Constant: '<Root>/Constant2'
*/
PWMGenerator(&VFControl_B.Sum8[2], &VFControl_B.Add3_n,
&VFControl_cal->Constant2_Value_a1, &VFControl_B.Model2_o1,
&VFControl_B.Model2_o2, &VFControl_B.Model2_o3,
&(VFControl_DW.Model2_InstanceData.rtb));
/* TransportDelay: '<S3>/Transport Delay' */
{
real_T **uBuffer = (real_T**)
&VFControl_DW.TransportDelay_PWORK.TUbufferPtrs[0];
real_T simTime = VFControl_M->Timing.t[0];
real_T tMinusDelay = simTime - VFControl_cal->TransportDelay_Delay;
VFControl_B.TransportDelay = rt_TDelayInterpolate(
tMinusDelay,
0.0,
*uBuffer,
VFControl_DW.TransportDelay_IWORK.CircularBufSize,
&VFControl_DW.TransportDelay_IWORK.Last,
VFControl_DW.TransportDelay_IWORK.Tail,
VFControl_DW.TransportDelay_IWORK.Head,
(VFControl_cal->TransportDelay_InitOutput),
1,
0);
}
/* TransportDelay: '<S4>/Transport Delay' */
{
real_T **uBuffer = (real_T**)
&VFControl_DW.TransportDelay_PWORK_m.TUbufferPtrs[0];
real_T simTime = VFControl_M->Timing.t[0];
real_T tMinusDelay = simTime - VFControl_cal->TransportDelay_Delay_l;
VFControl_B.TransportDelay_i = rt_TDelayInterpolate(
tMinusDelay,
0.0,
*uBuffer,
VFControl_DW.TransportDelay_IWORK_g.CircularBufSize,
&VFControl_DW.TransportDelay_IWORK_g.Last,
VFControl_DW.TransportDelay_IWORK_g.Tail,
VFControl_DW.TransportDelay_IWORK_g.Head,
(VFControl_cal->TransportDelay_InitOutput_l),
1,
0);
}
/* TransportDelay: '<S5>/Transport Delay' */
{
real_T **uBuffer = (real_T**)
&VFControl_DW.TransportDelay_PWORK_f.TUbufferPtrs[0];
real_T simTime = VFControl_M->Timing.t[0];
real_T tMinusDelay = simTime - VFControl_cal->TransportDelay_Delay_c;
VFControl_B.TransportDelay_n = rt_TDelayInterpolate(
tMinusDelay,
0.0,
*uBuffer,
VFControl_DW.TransportDelay_IWORK_m.CircularBufSize,
&VFControl_DW.TransportDelay_IWORK_m.Last,
VFControl_DW.TransportDelay_IWORK_m.Tail,
VFControl_DW.TransportDelay_IWORK_m.Head,
(VFControl_cal->TransportDelay_InitOutput_le),
1,
0);
}
/* S-Function (sg_fpga_do_sf_a2): '<Root>/Digital output1' */
/* Level2 S-Function Block: '<Root>/Digital output1' (sg_fpga_do_sf_a2) */
{
SimStruct *rts = VFControl_M->childSfunctions[0];
sfcnOutputs(rts,0);
}
/* S-Function (sg_fpga_do_sf_a2): '<Root>/Digital output2' */
/* Level2 S-Function Block: '<Root>/Digital output2' (sg_fpga_do_sf_a2) */
{
SimStruct *rts = VFControl_M->childSfunctions[1];
sfcnOutputs(rts,0);
}
/* Switch: '<S84>/Switch' */
if (VFControl_B.StateSpace_o2[0] >= VFControl_cal->Switch_Threshold_e) {
/* Gain: '<S84>/1//Rsw' */
VFControl_B.uRsw_k = VFControl_cal->uRsw_Gain * VFControl_B.StateSpace_o1[0];
/* Switch: '<S84>/Switch' */
VFControl_B.Switch = VFControl_B.uRsw_k;
} else {
/* Switch: '<S84>/Switch' incorporates:
* Constant: '<S84>/0 4'
*/
VFControl_B.Switch = VFControl_cal->u4_Value_l;
}
/* End of Switch: '<S84>/Switch' */
/* Saturate: '<S76>/Saturation' */
if (VFControl_B.Model_o1 > VFControl_cal->Saturation_UpperSat) {
xk1 = VFControl_cal->Saturation_UpperSat;
} else if (VFControl_B.Model_o1 < VFControl_cal->Saturation_LowerSat) {
xk1 = VFControl_cal->Saturation_LowerSat;
} else {
xk1 = VFControl_B.Model_o1;
}
/* Saturate: '<S76>/Saturation' */
VFControl_B.Saturation[0] = xk1;
/* Saturate: '<S76>/Saturation' */
if (VFControl_B.TransportDelay > VFControl_cal->Saturation_UpperSat) {
xk1 = VFControl_cal->Saturation_UpperSat;
} else if (VFControl_B.TransportDelay < VFControl_cal->Saturation_LowerSat) {
xk1 = VFControl_cal->Saturation_LowerSat;
} else {
xk1 = VFControl_B.TransportDelay;
}
/* Saturate: '<S76>/Saturation' */
VFControl_B.Saturation[1] = xk1;
/* Saturate: '<S76>/Saturation' */
if (VFControl_B.Model1_o1 > VFControl_cal->Saturation_UpperSat) {
xk1 = VFControl_cal->Saturation_UpperSat;
} else if (VFControl_B.Model1_o1 < VFControl_cal->Saturation_LowerSat) {
xk1 = VFControl_cal->Saturation_LowerSat;
} else {
xk1 = VFControl_B.Model1_o1;
}
/* Saturate: '<S76>/Saturation' */
VFControl_B.Saturation[2] = xk1;
/* Saturate: '<S76>/Saturation' */
if (VFControl_B.TransportDelay_i > VFControl_cal->Saturation_UpperSat) {
xk1 = VFControl_cal->Saturation_UpperSat;
} else if (VFControl_B.TransportDelay_i < VFControl_cal->Saturation_LowerSat)
{
xk1 = VFControl_cal->Saturation_LowerSat;
} else {
xk1 = VFControl_B.TransportDelay_i;
}
/* Saturate: '<S76>/Saturation' */
VFControl_B.Saturation[3] = xk1;
/* Saturate: '<S76>/Saturation' */
if (VFControl_B.Model2_o1 > VFControl_cal->Saturation_UpperSat) {
xk1 = VFControl_cal->Saturation_UpperSat;
} else if (VFControl_B.Model2_o1 < VFControl_cal->Saturation_LowerSat) {
xk1 = VFControl_cal->Saturation_LowerSat;
} else {
xk1 = VFControl_B.Model2_o1;
}
/* Saturate: '<S76>/Saturation' */
VFControl_B.Saturation[4] = xk1;
/* Saturate: '<S76>/Saturation' */
if (VFControl_B.TransportDelay_n > VFControl_cal->Saturation_UpperSat) {
xk1 = VFControl_cal->Saturation_UpperSat;
} else if (VFControl_B.TransportDelay_n < VFControl_cal->Saturation_LowerSat)
{
xk1 = VFControl_cal->Saturation_LowerSat;
} else {
xk1 = VFControl_B.TransportDelay_n;
}
/* Saturate: '<S76>/Saturation' */
VFControl_B.Saturation[5] = xk1;
/* RelationalOperator: '<S77>/Compare' incorporates:
* Constant: '<Root>/Constant6'
* Constant: '<S77>/Constant'
*/
VFControl_B.Compare = (VFControl_cal->Constant6_Value_e <=
VFControl_cal->CompareToConstant_const);
/* DataTypeConversion: '<S76>/Data Type Conversion1' */
VFControl_B.DataTypeConversion1 = VFControl_B.Compare;
for (i = 0; i < 6; i++) {
/* DataTypeConversion: '<S76>/Data Type Conversion' */
xk1 = VFControl_B.Saturation[i];
VFControl_B.DataTypeConversion_p[i] = xk1;
/* Product: '<S76>/Product4' */
VFControl_B.Product4[i] = xk1 * VFControl_B.DataTypeConversion1;
}
/* DataTypeConversion: '<S84>/Data Type Conversion' */
VFControl_B.DataTypeConversion_f = VFControl_B.Product4[0];
/* Switch: '<S86>/Switch' */
if (VFControl_B.StateSpace_o2[1] >= VFControl_cal->Switch_Threshold_p) {
/* Gain: '<S86>/1//Rsw' */
VFControl_B.uRsw_c = VFControl_cal->uRsw_Gain_e * VFControl_B.StateSpace_o1
[1];
/* Switch: '<S86>/Switch' */
VFControl_B.Switch_e = VFControl_B.uRsw_c;
} else {
/* Switch: '<S86>/Switch' incorporates:
* Constant: '<S86>/0 4'
*/
VFControl_B.Switch_e = VFControl_cal->u4_Value_j;
}
/* End of Switch: '<S86>/Switch' */
/* DataTypeConversion: '<S86>/Data Type Conversion' */
VFControl_B.DataTypeConversion_l = VFControl_B.Product4[1];
/* Switch: '<S88>/Switch' */
if (VFControl_B.StateSpace_o2[2] >= VFControl_cal->Switch_Threshold_i) {
/* Gain: '<S88>/1//Rsw' */
VFControl_B.uRsw_g = VFControl_cal->uRsw_Gain_l * VFControl_B.StateSpace_o1
[2];
/* Switch: '<S88>/Switch' */
VFControl_B.Switch_k = VFControl_B.uRsw_g;
} else {
/* Switch: '<S88>/Switch' incorporates:
* Constant: '<S88>/0 4'
*/
VFControl_B.Switch_k = VFControl_cal->u4_Value_c;
}
/* End of Switch: '<S88>/Switch' */
/* DataTypeConversion: '<S88>/Data Type Conversion' */
VFControl_B.DataTypeConversion_h = VFControl_B.Product4[2];
/* Switch: '<S90>/Switch' */
if (VFControl_B.StateSpace_o2[3] >= VFControl_cal->Switch_Threshold_o) {
/* Gain: '<S90>/1//Rsw' */
VFControl_B.uRsw_i = VFControl_cal->uRsw_Gain_k * VFControl_B.StateSpace_o1
[3];
/* Switch: '<S90>/Switch' */
VFControl_B.Switch_i = VFControl_B.uRsw_i;
} else {
/* Switch: '<S90>/Switch' incorporates:
* Constant: '<S90>/0 4'
*/
VFControl_B.Switch_i = VFControl_cal->u4_Value_m;
}
/* End of Switch: '<S90>/Switch' */
/* DataTypeConversion: '<S90>/Data Type Conversion' */
VFControl_B.DataTypeConversion_k = VFControl_B.Product4[3];
/* Switch: '<S92>/Switch' */
if (VFControl_B.StateSpace_o2[4] >= VFControl_cal->Switch_Threshold_a) {
/* Gain: '<S92>/1//Rsw' */
VFControl_B.uRsw_n = VFControl_cal->uRsw_Gain_m * VFControl_B.StateSpace_o1
[4];
/* Switch: '<S92>/Switch' */
VFControl_B.Switch_a = VFControl_B.uRsw_n;
} else {
/* Switch: '<S92>/Switch' incorporates:
* Constant: '<S92>/0 4'
*/
VFControl_B.Switch_a = VFControl_cal->u4_Value_lk;
}
/* End of Switch: '<S92>/Switch' */
/* DataTypeConversion: '<S92>/Data Type Conversion' */
VFControl_B.DataTypeConversion_i = VFControl_B.Product4[4];
/* Switch: '<S94>/Switch' */
if (VFControl_B.StateSpace_o2[5] >= VFControl_cal->Switch_Threshold_n) {
/* Gain: '<S94>/1//Rsw' */
VFControl_B.uRsw = VFControl_cal->uRsw_Gain_k4 * VFControl_B.StateSpace_o1[5];
/* Switch: '<S94>/Switch' */
VFControl_B.Switch_a4 = VFControl_B.uRsw;
} else {
/* Switch: '<S94>/Switch' incorporates:
* Constant: '<S94>/0 4'
*/
VFControl_B.Switch_a4 = VFControl_cal->u4_Value_o;
}
/* End of Switch: '<S94>/Switch' */
/* DataTypeConversion: '<S94>/Data Type Conversion' */
VFControl_B.DataTypeConversion_c = VFControl_B.Product4[5];
/* Product: '<S3>/Product' incorporates:
* Constant: '<S3>/Constant'
*/
VFControl_B.Product_n = VFControl_B.Model_o1 * VFControl_cal->Constant_Value_a;
/* Product: '<S4>/Product' incorporates:
* Constant: '<S4>/Constant'
*/
VFControl_B.Product_b = VFControl_B.Model1_o1 *
VFControl_cal->Constant_Value_g;
/* Product: '<S5>/Product' incorporates:
* Constant: '<S5>/Constant'
*/
VFControl_B.Product_l = VFControl_B.Model2_o1 *
VFControl_cal->Constant_Value_n5;
/* RelationalOperator: '<S46>/Relational Operator2' incorporates:
* Constant: '<S46>/Constant3'
* Constant: '<S46>/valp_nom3'
*/
VFControl_B.Frequency = (VFControl_cal->valp_nom3_Value ==
VFControl_cal->Constant3_Value_n);
/* Switch: '<S42>/Switch4' */
if (VFControl_B.Frequency) {
/* Switch: '<S42>/Switch4' */
VFControl_B.Switch4 = VFControl_B.Switch3;
} else {
/* Switch: '<S42>/Switch4' incorporates:
* Constant: '<S42>/Constant5'
*/
VFControl_B.Switch4 = VFControl_cal->Constant5_Value_ct;
}
/* End of Switch: '<S42>/Switch4' */
/* Gain: '<S42>/Gain2' */
VFControl_B.Gain2 = VFControl_cal->Gain2_Gain_h * VFControl_B.Switch4;
/* Sum: '<S42>/Sum1' incorporates:
* Constant: '<S42>/valp_nom1'
*/
VFControl_B.Sum1_o = VFControl_cal->valp_nom1_Value_g + VFControl_B.Switch4;
/* Gain: '<S40>/Gain3' */
VFControl_B.Gain3_m[0] = VFControl_cal->Gain3_Gain_i * VFControl_B.Switch5_b[0];
VFControl_B.Gain3_m[1] = VFControl_cal->Gain3_Gain_i * VFControl_B.Switch5_b[1];
VFControl_B.Gain3_m[2] = VFControl_cal->Gain3_Gain_i * VFControl_B.Switch5_b[2];
/* Math: '<S44>/Math Function' incorporates:
* Constant: '<S44>/Constant7'
*/
VFControl_B.wtrad = rt_modd_snf(VFControl_B.Sum7[0],
VFControl_cal->Constant7_Value);
/* Switch: '<S56>/Switch' */
if (VFControl_B.Ton >= VFControl_cal->Switch_Threshold_d) {
/* RelationalOperator: '<S56>/Relational Operator' incorporates:
* Constant: '<S47>/valp_nom5'
* Constant: '<S56>/Constant'
*/
VFControl_B.RelationalOperator = (VFControl_cal->valp_nom5_Value ==
VFControl_cal->Constant_Value_p);
/* Switch: '<S56>/Switch1' */
if (VFControl_B.RelationalOperator) {
/* Switch: '<S56>/Switch1' incorporates:
* Constant: '<S56>/valp_nom7'
*/
VFControl_B.Switch1_j = VFControl_cal->Variationvaluesteprampmod_Var_p;
} else {
/* Switch: '<S56>/Switch1' incorporates:
* Constant: '<S56>/Constant2'
*/
VFControl_B.Switch1_j = VFControl_cal->Constant2_Value_i;
}
/* End of Switch: '<S56>/Switch1' */
/* Switch: '<S56>/Switch' */
VFControl_B.Switch_c = VFControl_B.Switch1_j;
} else {
/* Switch: '<S56>/Switch' incorporates:
* Constant: '<S56>/Constant4'
*/
VFControl_B.Switch_c = VFControl_cal->Constant4_Value_f;
}
/* End of Switch: '<S56>/Switch' */
/* Gain: '<S64>/do not delete this gain' */
VFControl_B.donotdeletethisgain = VFControl_cal->donotdeletethisgain_Gain *
VFControl_B.StateSpace_o1[8];
/* Gain: '<S65>/do not delete this gain' */
VFControl_B.donotdeletethisgain_k = VFControl_cal->donotdeletethisgain_Gain_d *
VFControl_B.StateSpace_o1[9];
/* Gain: '<S66>/do not delete this gain' */
VFControl_B.donotdeletethisgain_o = VFControl_cal->donotdeletethisgain_Gain_h *
VFControl_B.StateSpace_o1[10];
/* Gain: '<S7>/Kv1' */
VFControl_B.Kv1[0] = VFControl_cal->Kv1_Gain * VFControl_B.donotdeletethisgain;
VFControl_B.Kv1[1] = VFControl_cal->Kv1_Gain *
VFControl_B.donotdeletethisgain_k;
VFControl_B.Kv1[2] = VFControl_cal->Kv1_Gain *
VFControl_B.donotdeletethisgain_o;
/* Gain: '<S61>/do not delete this gain' */
VFControl_B.donotdeletethisgain_kv = VFControl_cal->donotdeletethisgain_Gain_j
* VFControl_B.StateSpace_o1[11];
/* Gain: '<S62>/do not delete this gain' */
VFControl_B.donotdeletethisgain_b = VFControl_cal->donotdeletethisgain_Gain_n *
VFControl_B.StateSpace_o1[12];
/* Gain: '<S63>/do not delete this gain' */
VFControl_B.donotdeletethisgain_h = VFControl_cal->donotdeletethisgain_Gain_p *
VFControl_B.StateSpace_o1[13];
/* Gain: '<S7>/Kv' */
VFControl_B.Kv[0] = VFControl_cal->Kv_Gain *
VFControl_B.donotdeletethisgain_kv;
VFControl_B.Kv[1] = VFControl_cal->Kv_Gain * VFControl_B.donotdeletethisgain_b;
VFControl_B.Kv[2] = VFControl_cal->Kv_Gain * VFControl_B.donotdeletethisgain_h;
/* user code (Output function Trailer for TID0) */
{
if (0) {
io3xx_sgdma_feedSequential(1);
}
}
/* Update for UnitDelay: '<S23>/fluxes' */
VFControl_DW.fluxes_DSTATE[0] = VFControl_B.IC[0];
/* Update for UnitDelay: '<S21>/fluxes' */
VFControl_DW.fluxes_DSTATE_l[0] = VFControl_B.xk1[0];
/* Update for UnitDelay: '<S23>/fluxes' */
VFControl_DW.fluxes_DSTATE[1] = VFControl_B.IC[1];
/* Update for UnitDelay: '<S21>/fluxes' */
VFControl_DW.fluxes_DSTATE_l[1] = VFControl_B.xk1[1];
/* Update for UnitDelay: '<S23>/fluxes' */
VFControl_DW.fluxes_DSTATE[2] = VFControl_B.IC[2];
/* Update for UnitDelay: '<S21>/fluxes' */
VFControl_DW.fluxes_DSTATE_l[2] = VFControl_B.xk1[2];
/* Update for UnitDelay: '<S23>/fluxes' */
VFControl_DW.fluxes_DSTATE[3] = VFControl_B.IC[3];
/* Update for UnitDelay: '<S21>/fluxes' */
VFControl_DW.fluxes_DSTATE_l[3] = VFControl_B.xk1[3];
/* Update for DiscreteIntegrator: '<S15>/Rotor angle thetam' */
VFControl_DW.Rotoranglethetam_DSTATE +=
VFControl_cal->Rotoranglethetam_gainval * VFControl_B.web_psb;
/* Update for UnitDelay: '<S38>/wm_delay' */
VFControl_DW.wm_delay_DSTATE = VFControl_B.Rotorspeedwm;
/* Update for UnitDelay: '<S38>/wm_predict' */
VFControl_DW.wm_predict_DSTATE = VFControl_B.wm_delay;
/* Update for S-Function (sfun_spssw_discc): '<S96>/State-Space' incorporates:
* Constant: '<S39>/DC'
* Constant: '<S98>/SwitchCurrents'
*/
{
int_T *gState = (int_T*)VFControl_DW.StateSpace_PWORK.G_STATE;
/* Store switch gates values for next step */
*(gState++) = (int_T) VFControl_B.DataTypeConversion_f;
*(gState++) = (int_T) VFControl_B.DataTypeConversion_l;
*(gState++) = (int_T) VFControl_B.DataTypeConversion_h;
*(gState++) = (int_T) VFControl_B.DataTypeConversion_k;
*(gState++) = (int_T) VFControl_B.DataTypeConversion_i;
*(gState++) = (int_T) VFControl_B.DataTypeConversion_c;
}
/* Update for UnitDelay: '<S23>/voltages' */
VFControl_DW.voltages_DSTATE[0] = VFControl_B.MultiportSwitch1_f[0];
VFControl_DW.voltages_DSTATE[2] = VFControl_B.MultiportSwitch_p2[0];
VFControl_DW.voltages_DSTATE[1] = VFControl_B.MultiportSwitch1_f[1];
VFControl_DW.voltages_DSTATE[3] = VFControl_B.MultiportSwitch_p2[1];
/* Update for DiscreteIntegrator: '<S15>/Rotor speed(wm)' */
VFControl_DW.Rotorspeedwm_SYSTEM_ENABLE = 0U;
VFControl_DW.Rotorspeedwm_DSTATE = VFControl_cal->Rotorspeedwm_gainval *
VFControl_B.u_2H + VFControl_B.Rotorspeedwm;
/* Update for DiscreteIntegrator: '<S47>/Discrete-Time Integrator1' */
VFControl_DW.DiscreteTimeIntegrator1_DSTATE +=
VFControl_cal->DiscreteTimeIntegrator1_gainval * VFControl_B.Switch_c;
/* Update for UnitDelay: '<S47>/Unit Delay1' */
VFControl_DW.UnitDelay1_DSTATE = VFControl_B.Switch2_d;
/* Update for DiscreteIntegrator: '<S42>/Discrete-Time Integrator' */
VFControl_DW.DiscreteTimeIntegrator_DSTATE +=
VFControl_cal->DiscreteTimeIntegrator_gainval * VFControl_B.Gain2;
/* Update for TransportDelay: '<S3>/Transport Delay' */
{
real_T **uBuffer = (real_T**)
&VFControl_DW.TransportDelay_PWORK.TUbufferPtrs[0];
real_T simTime = VFControl_M->Timing.t[0];
VFControl_DW.TransportDelay_IWORK.Head =
((VFControl_DW.TransportDelay_IWORK.Head <
(VFControl_DW.TransportDelay_IWORK.CircularBufSize-1)) ?
(VFControl_DW.TransportDelay_IWORK.Head+1) : 0);
if (VFControl_DW.TransportDelay_IWORK.Head ==
VFControl_DW.TransportDelay_IWORK.Tail) {
VFControl_DW.TransportDelay_IWORK.Tail =
((VFControl_DW.TransportDelay_IWORK.Tail <
(VFControl_DW.TransportDelay_IWORK.CircularBufSize-1)) ?
(VFControl_DW.TransportDelay_IWORK.Tail+1) : 0);
}
(*uBuffer + VFControl_DW.TransportDelay_IWORK.CircularBufSize)
[VFControl_DW.TransportDelay_IWORK.Head] = simTime;
(*uBuffer)[VFControl_DW.TransportDelay_IWORK.Head] = VFControl_B.Product_n;
}
/* Update for TransportDelay: '<S4>/Transport Delay' */
{
real_T **uBuffer = (real_T**)
&VFControl_DW.TransportDelay_PWORK_m.TUbufferPtrs[0];
real_T simTime = VFControl_M->Timing.t[0];
VFControl_DW.TransportDelay_IWORK_g.Head =
((VFControl_DW.TransportDelay_IWORK_g.Head <
(VFControl_DW.TransportDelay_IWORK_g.CircularBufSize-1)) ?
(VFControl_DW.TransportDelay_IWORK_g.Head+1) : 0);
if (VFControl_DW.TransportDelay_IWORK_g.Head ==
VFControl_DW.TransportDelay_IWORK_g.Tail) {
VFControl_DW.TransportDelay_IWORK_g.Tail =
((VFControl_DW.TransportDelay_IWORK_g.Tail <
(VFControl_DW.TransportDelay_IWORK_g.CircularBufSize-1)) ?
(VFControl_DW.TransportDelay_IWORK_g.Tail+1) : 0);
}
(*uBuffer + VFControl_DW.TransportDelay_IWORK_g.CircularBufSize)
[VFControl_DW.TransportDelay_IWORK_g.Head] = simTime;
(*uBuffer)[VFControl_DW.TransportDelay_IWORK_g.Head] = VFControl_B.Product_b;
}
/* Update for TransportDelay: '<S5>/Transport Delay' */
{
real_T **uBuffer = (real_T**)
&VFControl_DW.TransportDelay_PWORK_f.TUbufferPtrs[0];
real_T simTime = VFControl_M->Timing.t[0];
VFControl_DW.TransportDelay_IWORK_m.Head =
((VFControl_DW.TransportDelay_IWORK_m.Head <
(VFControl_DW.TransportDelay_IWORK_m.CircularBufSize-1)) ?
(VFControl_DW.TransportDelay_IWORK_m.Head+1) : 0);
if (VFControl_DW.TransportDelay_IWORK_m.Head ==
VFControl_DW.TransportDelay_IWORK_m.Tail) {
VFControl_DW.TransportDelay_IWORK_m.Tail =
((VFControl_DW.TransportDelay_IWORK_m.Tail <
(VFControl_DW.TransportDelay_IWORK_m.CircularBufSize-1)) ?
(VFControl_DW.TransportDelay_IWORK_m.Tail+1) : 0);
}
(*uBuffer + VFControl_DW.TransportDelay_IWORK_m.CircularBufSize)
[VFControl_DW.TransportDelay_IWORK_m.Head] = simTime;
(*uBuffer)[VFControl_DW.TransportDelay_IWORK_m.Head] = VFControl_B.Product_l;
}
/* Update absolute time */
/* The "clockTick0" counts the number of times the code of this task has
* been executed. The absolute time is the multiplication of "clockTick0"
* and "Timing.stepSize0". Size of "clockTick0" ensures timer will not
* overflow during the application lifespan selected.
* Timer of this task consists of two 32 bit unsigned integers.
* The two integers represent the low bits Timing.clockTick0 and the high bits
* Timing.clockTickH0. When the low bit overflows to 0, the high bits increment.
*/
if (!(++VFControl_M->Timing.clockTick0)) {
++VFControl_M->Timing.clockTickH0;
}
VFControl_M->Timing.t[0] = VFControl_M->Timing.clockTick0 *
VFControl_M->Timing.stepSize0 + VFControl_M->Timing.clockTickH0 *
VFControl_M->Timing.stepSize0 * 4294967296.0;
/* Update absolute time */
/* The "clockTick1" counts the number of times the code of this task has
* been executed. The absolute time is the multiplication of "clockTick1"
* and "Timing.stepSize1". Size of "clockTick1" ensures timer will not
* overflow during the application lifespan selected.
* Timer of this task consists of two 32 bit unsigned integers.
* The two integers represent the low bits Timing.clockTick1 and the high bits
* Timing.clockTickH1. When the low bit overflows to 0, the high bits increment.
*/
if (!(++VFControl_M->Timing.clockTick1)) {
++VFControl_M->Timing.clockTickH1;
}
VFControl_M->Timing.t[1] = VFControl_M->Timing.clockTick1 *
VFControl_M->Timing.stepSize1 + VFControl_M->Timing.clockTickH1 *
VFControl_M->Timing.stepSize1 * 4294967296.0;
}
/* Model step function for TID2 */
void VFControl_step2(void) /* Sample time: [0.0005s, 0.0s] */
{
/* UnitDelay: '<S73>/Unit Delay' */
VFControl_B.UnitDelay = VFControl_DW.UnitDelay_DSTATE;
/* Update for UnitDelay: '<S73>/Unit Delay' */
VFControl_DW.UnitDelay_DSTATE = VFControl_B.UnitDelay;
/* Update absolute time */
/* The "clockTick2" counts the number of times the code of this task has
* been executed. The resolution of this integer timer is 0.0005, which is the step size
* of the task. Size of "clockTick2" ensures timer will not overflow during the
* application lifespan selected.
* Timer of this task consists of two 32 bit unsigned integers.
* The two integers represent the low bits Timing.clockTick2 and the high bits
* Timing.clockTickH2. When the low bit overflows to 0, the high bits increment.
*/
VFControl_M->Timing.clockTick2++;
if (!VFControl_M->Timing.clockTick2) {
VFControl_M->Timing.clockTickH2++;
}
}
/* Model initialize function */
void VFControl_initialize(void)
{
/* Registration code */
/* initialize non-finites */
rt_InitInfAndNaN(sizeof(real_T));
/* Set task counter limit used by the static main program */
(VFControl_M)->Timing.TaskCounters.cLimit[0] = 1;
(VFControl_M)->Timing.TaskCounters.cLimit[1] = 1;
(VFControl_M)->Timing.TaskCounters.cLimit[2] = 5;
{
/* Setup solver object */
rtsiSetSimTimeStepPtr(&VFControl_M->solverInfo,
&VFControl_M->Timing.simTimeStep);
rtsiSetTPtr(&VFControl_M->solverInfo, &rtmGetTPtr(VFControl_M));
rtsiSetStepSizePtr(&VFControl_M->solverInfo, &VFControl_M->Timing.stepSize0);
rtsiSetErrorStatusPtr(&VFControl_M->solverInfo, (&rtmGetErrorStatus
(VFControl_M)));
rtsiSetRTModelPtr(&VFControl_M->solverInfo, VFControl_M);
}
rtsiSetSimTimeStep(&VFControl_M->solverInfo, MAJOR_TIME_STEP);
rtsiSetIsMinorTimeStepWithModeChange(&VFControl_M->solverInfo, false);
rtsiSetIsContModeFrozen(&VFControl_M->solverInfo, false);
rtsiSetSolverName(&VFControl_M->solverInfo,"FixedStepDiscrete");
VFControl_M->solverInfoPtr = (&VFControl_M->solverInfo);
/* Initialize timing info */
{
int_T *mdlTsMap = VFControl_M->Timing.sampleTimeTaskIDArray;
mdlTsMap[0] = 0;
mdlTsMap[1] = 1;
mdlTsMap[2] = 2;
/* polyspace +2 MISRA2012:D4.1 [Justified:Low] "VFControl_M points to
static memory which is guaranteed to be non-NULL" */
VFControl_M->Timing.sampleTimeTaskIDPtr = (&mdlTsMap[0]);
VFControl_M->Timing.sampleTimes = (&VFControl_M->Timing.sampleTimesArray[0]);
VFControl_M->Timing.offsetTimes = (&VFControl_M->Timing.offsetTimesArray[0]);
/* task periods */
VFControl_M->Timing.sampleTimes[0] = (0.0);
VFControl_M->Timing.sampleTimes[1] = (0.0001);
VFControl_M->Timing.sampleTimes[2] = (0.0005);
/* task offsets */
VFControl_M->Timing.offsetTimes[0] = (0.0);
VFControl_M->Timing.offsetTimes[1] = (0.0);
VFControl_M->Timing.offsetTimes[2] = (0.0);
}
rtmSetTPtr(VFControl_M, &VFControl_M->Timing.tArray[0]);
{
int_T *mdlSampleHits = VFControl_M->Timing.sampleHitArray;
int_T *mdlPerTaskSampleHits = VFControl_M->Timing.perTaskSampleHitsArray;
VFControl_M->Timing.perTaskSampleHits = (&mdlPerTaskSampleHits[0]);
mdlSampleHits[0] = 1;
VFControl_M->Timing.sampleHits = (&mdlSampleHits[0]);
}
rtmSetTFinal(VFControl_M, -1);
VFControl_M->Timing.stepSize0 = 0.0001;
VFControl_M->Timing.stepSize1 = 0.0001;
VFControl_M->solverInfoPtr = (&VFControl_M->solverInfo);
VFControl_M->Timing.stepSize = (0.0001);
rtsiSetFixedStepSize(&VFControl_M->solverInfo, 0.0001);
rtsiSetSolverMode(&VFControl_M->solverInfo, SOLVER_MODE_MULTITASKING);
/* block I/O */
(void) std::memset((static_cast<void *>(&VFControl_B)), 0,
sizeof(B_VFControl_T));
/* states (dwork) */
(void) std::memset(static_cast<void *>(&VFControl_DW), 0,
sizeof(DW_VFControl_T));
/* child S-Function registration */
{
RTWSfcnInfo *sfcnInfo = &VFControl_M->NonInlinedSFcns.sfcnInfo;
VFControl_M->sfcnInfo = (sfcnInfo);
rtssSetErrorStatusPtr(sfcnInfo, (&rtmGetErrorStatus(VFControl_M)));
VFControl_M->Sizes.numSampTimes = (3);
rtssSetNumRootSampTimesPtr(sfcnInfo, &VFControl_M->Sizes.numSampTimes);
VFControl_M->NonInlinedSFcns.taskTimePtrs[0] = (&rtmGetTPtr(VFControl_M)[0]);
VFControl_M->NonInlinedSFcns.taskTimePtrs[1] = (&rtmGetTPtr(VFControl_M)[1]);
VFControl_M->NonInlinedSFcns.taskTimePtrs[2] = (&rtmGetTPtr(VFControl_M)[2]);
rtssSetTPtrPtr(sfcnInfo,VFControl_M->NonInlinedSFcns.taskTimePtrs);
rtssSetTStartPtr(sfcnInfo, &rtmGetTStart(VFControl_M));
rtssSetTFinalPtr(sfcnInfo, &rtmGetTFinal(VFControl_M));
rtssSetTimeOfLastOutputPtr(sfcnInfo, &rtmGetTimeOfLastOutput(VFControl_M));
rtssSetStepSizePtr(sfcnInfo, &VFControl_M->Timing.stepSize);
rtssSetStopRequestedPtr(sfcnInfo, &rtmGetStopRequested(VFControl_M));
rtssSetDerivCacheNeedsResetPtr(sfcnInfo, &VFControl_M->derivCacheNeedsReset);
rtssSetZCCacheNeedsResetPtr(sfcnInfo, &VFControl_M->zCCacheNeedsReset);
rtssSetContTimeOutputInconsistentWithStateAtMajorStepPtr(sfcnInfo,
&VFControl_M->CTOutputIncnstWithState);
rtssSetSampleHitsPtr(sfcnInfo, &VFControl_M->Timing.sampleHits);
rtssSetPerTaskSampleHitsPtr(sfcnInfo, &VFControl_M->Timing.perTaskSampleHits);
rtssSetSimModePtr(sfcnInfo, &VFControl_M->simMode);
rtssSetSolverInfoPtr(sfcnInfo, &VFControl_M->solverInfoPtr);
}
VFControl_M->Sizes.numSFcns = (2);
/* register each child */
{
(void) std::memset(static_cast<void *>
(&VFControl_M->NonInlinedSFcns.childSFunctions[0]), 0,
2*sizeof(SimStruct));
VFControl_M->childSfunctions =
(&VFControl_M->NonInlinedSFcns.childSFunctionPtrs[0]);
VFControl_M->childSfunctions[0] =
(&VFControl_M->NonInlinedSFcns.childSFunctions[0]);
VFControl_M->childSfunctions[1] =
(&VFControl_M->NonInlinedSFcns.childSFunctions[1]);
/* Level2 S-Function Block: VFControl/<Root>/Digital output1 (sg_fpga_do_sf_a2) */
{
SimStruct *rts = VFControl_M->childSfunctions[0];
/* timing info */
time_T *sfcnPeriod = VFControl_M->NonInlinedSFcns.Sfcn0.sfcnPeriod;
time_T *sfcnOffset = VFControl_M->NonInlinedSFcns.Sfcn0.sfcnOffset;
int_T *sfcnTsMap = VFControl_M->NonInlinedSFcns.Sfcn0.sfcnTsMap;
(void) std::memset(static_cast<void*>(sfcnPeriod), 0,
sizeof(time_T)*1);
(void) std::memset(static_cast<void*>(sfcnOffset), 0,
sizeof(time_T)*1);
ssSetSampleTimePtr(rts, &sfcnPeriod[0]);
ssSetOffsetTimePtr(rts, &sfcnOffset[0]);
ssSetSampleTimeTaskIDPtr(rts, sfcnTsMap);
{
ssSetBlkInfo2Ptr(rts, &VFControl_M->NonInlinedSFcns.blkInfo2[0]);
}
_ssSetBlkInfo2PortInfo2Ptr(rts,
&VFControl_M->NonInlinedSFcns.inputOutputPortInfo2[0]);
/* Set up the mdlInfo pointer */
ssSetRTWSfcnInfo(rts, VFControl_M->sfcnInfo);
/* Allocate memory of model methods 2 */
{
ssSetModelMethods2(rts, &VFControl_M->NonInlinedSFcns.methods2[0]);
}
/* Allocate memory of model methods 3 */
{
ssSetModelMethods3(rts, &VFControl_M->NonInlinedSFcns.methods3[0]);
}
/* Allocate memory of model methods 4 */
{
ssSetModelMethods4(rts, &VFControl_M->NonInlinedSFcns.methods4[0]);
}
/* Allocate memory for states auxilliary information */
{
ssSetStatesInfo2(rts, &VFControl_M->NonInlinedSFcns.statesInfo2[0]);
ssSetPeriodicStatesInfo(rts,
&VFControl_M->NonInlinedSFcns.periodicStatesInfo[0]);
}
/* inputs */
{
_ssSetNumInputPorts(rts, 3);
ssSetPortInfoForInputs(rts,
&VFControl_M->NonInlinedSFcns.Sfcn0.inputPortInfo[0]);
ssSetPortInfoForInputs(rts,
&VFControl_M->NonInlinedSFcns.Sfcn0.inputPortInfo[0]);
_ssSetPortInfo2ForInputUnits(rts,
&VFControl_M->NonInlinedSFcns.Sfcn0.inputPortUnits[0]);
ssSetInputPortUnit(rts, 0, 0);
ssSetInputPortUnit(rts, 1, 0);
ssSetInputPortUnit(rts, 2, 0);
_ssSetPortInfo2ForInputCoSimAttribute(rts,
&VFControl_M->NonInlinedSFcns.Sfcn0.inputPortCoSimAttribute[0]);
ssSetInputPortIsContinuousQuantity(rts, 0, 0);
ssSetInputPortIsContinuousQuantity(rts, 1, 0);
ssSetInputPortIsContinuousQuantity(rts, 2, 0);
/* port 0 */
{
ssSetInputPortRequiredContiguous(rts, 0, 1);
ssSetInputPortSignal(rts, 0, &VFControl_B.TransportDelay);
_ssSetInputPortNumDimensions(rts, 0, 1);
ssSetInputPortWidthAsInt(rts, 0, 1);
}
/* port 1 */
{
ssSetInputPortRequiredContiguous(rts, 1, 1);
ssSetInputPortSignal(rts, 1, &VFControl_B.TransportDelay_i);
_ssSetInputPortNumDimensions(rts, 1, 1);
ssSetInputPortWidthAsInt(rts, 1, 1);
}
/* port 2 */
{
ssSetInputPortRequiredContiguous(rts, 2, 1);
ssSetInputPortSignal(rts, 2, &VFControl_B.TransportDelay_n);
_ssSetInputPortNumDimensions(rts, 2, 1);
ssSetInputPortWidthAsInt(rts, 2, 1);
}
}
/* path info */
ssSetModelName(rts, "Digital output1");
ssSetPath(rts, "VFControl/Digital output1");
ssSetRTModel(rts,VFControl_M);
ssSetParentSS(rts, (NULL));
ssSetRootSS(rts, rts);
ssSetVersion(rts, SIMSTRUCT_VERSION_LEVEL2);
/* parameters */
{
mxArray **sfcnParams = (mxArray **)
&VFControl_M->NonInlinedSFcns.Sfcn0.params;
ssSetSFcnParamsCount(rts, 6);
ssSetSFcnParamsPtr(rts, &sfcnParams[0]);
ssSetSFcnParam(rts, 0, (mxArray*)VFControl_cal->Digitaloutput1_P1_Size);
ssSetSFcnParam(rts, 1, (mxArray*)VFControl_cal->Digitaloutput1_P2_Size);
ssSetSFcnParam(rts, 2, (mxArray*)VFControl_cal->Digitaloutput1_P3_Size);
ssSetSFcnParam(rts, 3, (mxArray*)VFControl_cal->Digitaloutput1_P4_Size);
ssSetSFcnParam(rts, 4, (mxArray*)VFControl_cal->Digitaloutput1_P5_Size);
ssSetSFcnParam(rts, 5, (mxArray*)VFControl_cal->Digitaloutput1_P6_Size);
}
/* work vectors */
ssSetPWork(rts, (void **) &VFControl_DW.Digitaloutput1_PWORK[0]);
{
struct _ssDWorkRecord *dWorkRecord = (struct _ssDWorkRecord *)
&VFControl_M->NonInlinedSFcns.Sfcn0.dWork;
struct _ssDWorkAuxRecord *dWorkAuxRecord = (struct _ssDWorkAuxRecord *)
&VFControl_M->NonInlinedSFcns.Sfcn0.dWorkAux;
ssSetSFcnDWork(rts, dWorkRecord);
ssSetSFcnDWorkAux(rts, dWorkAuxRecord);
ssSetNumDWorkAsInt(rts, 1);
/* PWORK */
ssSetDWorkWidthAsInt(rts, 0, 2);
ssSetDWorkDataType(rts, 0,SS_POINTER);
ssSetDWorkComplexSignal(rts, 0, 0);
ssSetDWork(rts, 0, &VFControl_DW.Digitaloutput1_PWORK[0]);
}
/* registration */
sg_fpga_do_sf_a2(rts);
sfcnInitializeSizes(rts);
sfcnInitializeSampleTimes(rts);
/* adjust sample time */
ssSetSampleTime(rts, 0, 0.0001);
ssSetOffsetTime(rts, 0, 0.0);
sfcnTsMap[0] = 1;
/* set compiled values of dynamic vector attributes */
ssSetNumNonsampledZCsAsInt(rts, 0);
/* Update connectivity flags for each port */
_ssSetInputPortConnected(rts, 0, 1);
_ssSetInputPortConnected(rts, 1, 1);
_ssSetInputPortConnected(rts, 2, 1);
/* Update the BufferDstPort flags for each input port */
ssSetInputPortBufferDstPort(rts, 0, -1);
ssSetInputPortBufferDstPort(rts, 1, -1);
ssSetInputPortBufferDstPort(rts, 2, -1);
}
/* Level2 S-Function Block: VFControl/<Root>/Digital output2 (sg_fpga_do_sf_a2) */
{
SimStruct *rts = VFControl_M->childSfunctions[1];
/* timing info */
time_T *sfcnPeriod = VFControl_M->NonInlinedSFcns.Sfcn1.sfcnPeriod;
time_T *sfcnOffset = VFControl_M->NonInlinedSFcns.Sfcn1.sfcnOffset;
int_T *sfcnTsMap = VFControl_M->NonInlinedSFcns.Sfcn1.sfcnTsMap;
(void) std::memset(static_cast<void*>(sfcnPeriod), 0,
sizeof(time_T)*1);
(void) std::memset(static_cast<void*>(sfcnOffset), 0,
sizeof(time_T)*1);
ssSetSampleTimePtr(rts, &sfcnPeriod[0]);
ssSetOffsetTimePtr(rts, &sfcnOffset[0]);
ssSetSampleTimeTaskIDPtr(rts, sfcnTsMap);
{
ssSetBlkInfo2Ptr(rts, &VFControl_M->NonInlinedSFcns.blkInfo2[1]);
}
_ssSetBlkInfo2PortInfo2Ptr(rts,
&VFControl_M->NonInlinedSFcns.inputOutputPortInfo2[1]);
/* Set up the mdlInfo pointer */
ssSetRTWSfcnInfo(rts, VFControl_M->sfcnInfo);
/* Allocate memory of model methods 2 */
{
ssSetModelMethods2(rts, &VFControl_M->NonInlinedSFcns.methods2[1]);
}
/* Allocate memory of model methods 3 */
{
ssSetModelMethods3(rts, &VFControl_M->NonInlinedSFcns.methods3[1]);
}
/* Allocate memory of model methods 4 */
{
ssSetModelMethods4(rts, &VFControl_M->NonInlinedSFcns.methods4[1]);
}
/* Allocate memory for states auxilliary information */
{
ssSetStatesInfo2(rts, &VFControl_M->NonInlinedSFcns.statesInfo2[1]);
ssSetPeriodicStatesInfo(rts,
&VFControl_M->NonInlinedSFcns.periodicStatesInfo[1]);
}
/* inputs */
{
_ssSetNumInputPorts(rts, 3);
ssSetPortInfoForInputs(rts,
&VFControl_M->NonInlinedSFcns.Sfcn1.inputPortInfo[0]);
ssSetPortInfoForInputs(rts,
&VFControl_M->NonInlinedSFcns.Sfcn1.inputPortInfo[0]);
_ssSetPortInfo2ForInputUnits(rts,
&VFControl_M->NonInlinedSFcns.Sfcn1.inputPortUnits[0]);
ssSetInputPortUnit(rts, 0, 0);
ssSetInputPortUnit(rts, 1, 0);
ssSetInputPortUnit(rts, 2, 0);
_ssSetPortInfo2ForInputCoSimAttribute(rts,
&VFControl_M->NonInlinedSFcns.Sfcn1.inputPortCoSimAttribute[0]);
ssSetInputPortIsContinuousQuantity(rts, 0, 0);
ssSetInputPortIsContinuousQuantity(rts, 1, 0);
ssSetInputPortIsContinuousQuantity(rts, 2, 0);
/* port 0 */
{
ssSetInputPortRequiredContiguous(rts, 0, 1);
ssSetInputPortSignal(rts, 0, &VFControl_B.Model_o1);
_ssSetInputPortNumDimensions(rts, 0, 1);
ssSetInputPortWidthAsInt(rts, 0, 1);
}
/* port 1 */
{
ssSetInputPortRequiredContiguous(rts, 1, 1);
ssSetInputPortSignal(rts, 1, &VFControl_B.Model1_o1);
_ssSetInputPortNumDimensions(rts, 1, 1);
ssSetInputPortWidthAsInt(rts, 1, 1);
}
/* port 2 */
{
ssSetInputPortRequiredContiguous(rts, 2, 1);
ssSetInputPortSignal(rts, 2, &VFControl_B.Model2_o1);
_ssSetInputPortNumDimensions(rts, 2, 1);
ssSetInputPortWidthAsInt(rts, 2, 1);
}
}
/* path info */
ssSetModelName(rts, "Digital output2");
ssSetPath(rts, "VFControl/Digital output2");
ssSetRTModel(rts,VFControl_M);
ssSetParentSS(rts, (NULL));
ssSetRootSS(rts, rts);
ssSetVersion(rts, SIMSTRUCT_VERSION_LEVEL2);
/* parameters */
{
mxArray **sfcnParams = (mxArray **)
&VFControl_M->NonInlinedSFcns.Sfcn1.params;
ssSetSFcnParamsCount(rts, 6);
ssSetSFcnParamsPtr(rts, &sfcnParams[0]);
ssSetSFcnParam(rts, 0, (mxArray*)VFControl_cal->Digitaloutput2_P1_Size);
ssSetSFcnParam(rts, 1, (mxArray*)VFControl_cal->Digitaloutput2_P2_Size);
ssSetSFcnParam(rts, 2, (mxArray*)VFControl_cal->Digitaloutput2_P3_Size);
ssSetSFcnParam(rts, 3, (mxArray*)VFControl_cal->Digitaloutput2_P4_Size);
ssSetSFcnParam(rts, 4, (mxArray*)VFControl_cal->Digitaloutput2_P5_Size);
ssSetSFcnParam(rts, 5, (mxArray*)VFControl_cal->Digitaloutput2_P6_Size);
}
/* work vectors */
ssSetPWork(rts, (void **) &VFControl_DW.Digitaloutput2_PWORK[0]);
{
struct _ssDWorkRecord *dWorkRecord = (struct _ssDWorkRecord *)
&VFControl_M->NonInlinedSFcns.Sfcn1.dWork;
struct _ssDWorkAuxRecord *dWorkAuxRecord = (struct _ssDWorkAuxRecord *)
&VFControl_M->NonInlinedSFcns.Sfcn1.dWorkAux;
ssSetSFcnDWork(rts, dWorkRecord);
ssSetSFcnDWorkAux(rts, dWorkAuxRecord);
ssSetNumDWorkAsInt(rts, 1);
/* PWORK */
ssSetDWorkWidthAsInt(rts, 0, 2);
ssSetDWorkDataType(rts, 0,SS_POINTER);
ssSetDWorkComplexSignal(rts, 0, 0);
ssSetDWork(rts, 0, &VFControl_DW.Digitaloutput2_PWORK[0]);
}
/* registration */
sg_fpga_do_sf_a2(rts);
sfcnInitializeSizes(rts);
sfcnInitializeSampleTimes(rts);
/* adjust sample time */
ssSetSampleTime(rts, 0, 0.0001);
ssSetOffsetTime(rts, 0, 0.0);
sfcnTsMap[0] = 1;
/* set compiled values of dynamic vector attributes */
ssSetNumNonsampledZCsAsInt(rts, 0);
/* Update connectivity flags for each port */
_ssSetInputPortConnected(rts, 0, 1);
_ssSetInputPortConnected(rts, 1, 1);
_ssSetInputPortConnected(rts, 2, 1);
/* Update the BufferDstPort flags for each input port */
ssSetInputPortBufferDstPort(rts, 0, -1);
ssSetInputPortBufferDstPort(rts, 1, -1);
ssSetInputPortBufferDstPort(rts, 2, -1);
}
}
/* Model Initialize function for ModelReference Block: '<Root>/Model' */
PWMGenerator_initialize(rtmGetErrorStatusPointer(VFControl_M),
&(VFControl_DW.Model_InstanceData.rtm),
&(VFControl_DW.Model_InstanceData.rtb));
/* Model Initialize function for ModelReference Block: '<Root>/Model1' */
PWMGenerator_initialize(rtmGetErrorStatusPointer(VFControl_M),
&(VFControl_DW.Model1_InstanceData.rtm),
&(VFControl_DW.Model1_InstanceData.rtb));
/* Model Initialize function for ModelReference Block: '<Root>/Model2' */
PWMGenerator_initialize(rtmGetErrorStatusPointer(VFControl_M),
&(VFControl_DW.Model2_InstanceData.rtm),
&(VFControl_DW.Model2_InstanceData.rtb));
/* Start for S-Function (sfun_spssw_discc): '<S96>/State-Space' incorporates:
* Constant: '<S39>/DC'
* Constant: '<S98>/SwitchCurrents'
*/
/* S-Function block: <S96>/State-Space */
{
VFControl_DW.StateSpace_PWORK.DS = (real_T*)calloc(14 * 9, sizeof(real_T));
VFControl_DW.StateSpace_PWORK.DX_COL = (real_T*)calloc(14, sizeof(real_T));
VFControl_DW.StateSpace_PWORK.TMP2 = (real_T*)calloc(9, sizeof(real_T));
VFControl_DW.StateSpace_PWORK.SWITCH_STATUS = (int_T*)calloc(6, sizeof(int_T));
VFControl_DW.StateSpace_PWORK.SW_CHG = (int_T*)calloc(6, sizeof(int_T));
VFControl_DW.StateSpace_PWORK.G_STATE = (int_T*)calloc(6, sizeof(int_T));
VFControl_DW.StateSpace_PWORK.Y_SWITCH = (real_T*)calloc(6, sizeof(real_T));
VFControl_DW.StateSpace_PWORK.SWITCH_TYPES = (int_T*)calloc(6, sizeof(int_T));
VFControl_DW.StateSpace_PWORK.IDX_OUT_SW = (int_T*)calloc(6, sizeof(int_T));
VFControl_DW.StateSpace_PWORK.SWITCH_STATUS_INIT = (int_T*)calloc(6, sizeof
(int_T));
VFControl_DW.StateSpace_PWORK.USWLAST = (real_T*)calloc(6, sizeof(real_T));
}
/* Start for TransportDelay: '<S3>/Transport Delay' */
{
real_T *pBuffer = &VFControl_DW.TransportDelay_RWORK.TUbufferArea[0];
VFControl_DW.TransportDelay_IWORK.Tail = 0;
VFControl_DW.TransportDelay_IWORK.Head = 0;
VFControl_DW.TransportDelay_IWORK.Last = 0;
VFControl_DW.TransportDelay_IWORK.CircularBufSize = 1024;
pBuffer[0] = (VFControl_cal->TransportDelay_InitOutput);
pBuffer[1024] = VFControl_M->Timing.t[0];
VFControl_DW.TransportDelay_PWORK.TUbufferPtrs[0] = (void *) &pBuffer[0];
}
/* Start for TransportDelay: '<S4>/Transport Delay' */
{
real_T *pBuffer = &VFControl_DW.TransportDelay_RWORK_d.TUbufferArea[0];
VFControl_DW.TransportDelay_IWORK_g.Tail = 0;
VFControl_DW.TransportDelay_IWORK_g.Head = 0;
VFControl_DW.TransportDelay_IWORK_g.Last = 0;
VFControl_DW.TransportDelay_IWORK_g.CircularBufSize = 1024;
pBuffer[0] = (VFControl_cal->TransportDelay_InitOutput_l);
pBuffer[1024] = VFControl_M->Timing.t[0];
VFControl_DW.TransportDelay_PWORK_m.TUbufferPtrs[0] = (void *) &pBuffer[0];
}
/* Start for TransportDelay: '<S5>/Transport Delay' */
{
real_T *pBuffer = &VFControl_DW.TransportDelay_RWORK_m.TUbufferArea[0];
VFControl_DW.TransportDelay_IWORK_m.Tail = 0;
VFControl_DW.TransportDelay_IWORK_m.Head = 0;
VFControl_DW.TransportDelay_IWORK_m.Last = 0;
VFControl_DW.TransportDelay_IWORK_m.CircularBufSize = 1024;
pBuffer[0] = (VFControl_cal->TransportDelay_InitOutput_le);
pBuffer[1024] = VFControl_M->Timing.t[0];
VFControl_DW.TransportDelay_PWORK_f.TUbufferPtrs[0] = (void *) &pBuffer[0];
}
/* Start for S-Function (sg_fpga_do_sf_a2): '<Root>/Digital output1' */
/* Level2 S-Function Block: '<Root>/Digital output1' (sg_fpga_do_sf_a2) */
{
SimStruct *rts = VFControl_M->childSfunctions[0];
sfcnStart(rts);
if (ssGetErrorStatus(rts) != (NULL))
return;
}
/* Start for S-Function (sg_fpga_do_sf_a2): '<Root>/Digital output2' */
/* Level2 S-Function Block: '<Root>/Digital output2' (sg_fpga_do_sf_a2) */
{
SimStruct *rts = VFControl_M->childSfunctions[1];
sfcnStart(rts);
if (ssGetErrorStatus(rts) != (NULL))
return;
}
{
int32_T i;
/* InitializeConditions for UnitDelay: '<S23>/fluxes' */
VFControl_DW.fluxes_DSTATE[0] = VFControl_cal->fluxes_InitialCondition[0];
/* InitializeConditions for UnitDelay: '<S21>/fluxes' */
VFControl_DW.fluxes_DSTATE_l[0] = VFControl_cal->fluxes_InitialCondition_a[0];
/* InitializeConditions for UnitDelay: '<S23>/fluxes' */
VFControl_DW.fluxes_DSTATE[1] = VFControl_cal->fluxes_InitialCondition[1];
/* InitializeConditions for UnitDelay: '<S21>/fluxes' */
VFControl_DW.fluxes_DSTATE_l[1] = VFControl_cal->fluxes_InitialCondition_a[1];
/* InitializeConditions for UnitDelay: '<S23>/fluxes' */
VFControl_DW.fluxes_DSTATE[2] = VFControl_cal->fluxes_InitialCondition[2];
/* InitializeConditions for UnitDelay: '<S21>/fluxes' */
VFControl_DW.fluxes_DSTATE_l[2] = VFControl_cal->fluxes_InitialCondition_a[2];
/* InitializeConditions for UnitDelay: '<S23>/fluxes' */
VFControl_DW.fluxes_DSTATE[3] = VFControl_cal->fluxes_InitialCondition[3];
/* InitializeConditions for UnitDelay: '<S21>/fluxes' */
VFControl_DW.fluxes_DSTATE_l[3] = VFControl_cal->fluxes_InitialCondition_a[3];
/* InitializeConditions for DiscreteIntegrator: '<S15>/Rotor angle thetam' */
VFControl_DW.Rotoranglethetam_DSTATE = VFControl_cal->Rotoranglethetam_IC;
/* InitializeConditions for UnitDelay: '<S38>/wm_delay' */
VFControl_DW.wm_delay_DSTATE = VFControl_cal->wm_delay_InitialCondition;
/* InitializeConditions for UnitDelay: '<S38>/wm_predict' */
VFControl_DW.wm_predict_DSTATE = VFControl_cal->wm_predict_InitialCondition;
/* InitializeConditions for S-Function (sfun_spssw_discc): '<S96>/State-Space' incorporates:
* Constant: '<S39>/DC'
* Constant: '<S98>/SwitchCurrents'
*/
{
int32_T i, j;
real_T *Ds = (real_T*)VFControl_DW.StateSpace_PWORK.DS;
/* Copy and transpose D */
for (i=0; i<14; i++) {
for (j=0; j<9; j++)
Ds[i*9 + j] = (VFControl_cal->StateSpace_DS_param[i + j*14]);
}
{
/* Switches work vectors */
int_T *switch_status = (int_T*)
VFControl_DW.StateSpace_PWORK.SWITCH_STATUS;
int_T *gState = (int_T*)VFControl_DW.StateSpace_PWORK.G_STATE;
real_T *yswitch = (real_T*)VFControl_DW.StateSpace_PWORK.Y_SWITCH;
int_T *switchTypes = (int_T*)VFControl_DW.StateSpace_PWORK.SWITCH_TYPES;
int_T *idxOutSw = (int_T*)VFControl_DW.StateSpace_PWORK.IDX_OUT_SW;
int_T *switch_status_init = (int_T*)
VFControl_DW.StateSpace_PWORK.SWITCH_STATUS_INIT;
/* Initialize work vectors */
switch_status[0] = 0;
switch_status_init[0] = 0;
gState[0] = (int_T) 0.0;
yswitch[0] = 1/0.001;
switchTypes[0] = (int_T)7.0;
idxOutSw[0] = ((int_T)0.0) - 1;
switch_status[1] = 0;
switch_status_init[1] = 0;
gState[1] = (int_T) 0.0;
yswitch[1] = 1/0.001;
switchTypes[1] = (int_T)7.0;
idxOutSw[1] = ((int_T)0.0) - 1;
switch_status[2] = 0;
switch_status_init[2] = 0;
gState[2] = (int_T) 0.0;
yswitch[2] = 1/0.001;
switchTypes[2] = (int_T)7.0;
idxOutSw[2] = ((int_T)0.0) - 1;
switch_status[3] = 0;
switch_status_init[3] = 0;
gState[3] = (int_T) 0.0;
yswitch[3] = 1/0.001;
switchTypes[3] = (int_T)7.0;
idxOutSw[3] = ((int_T)0.0) - 1;
switch_status[4] = 0;
switch_status_init[4] = 0;
gState[4] = (int_T) 0.0;
yswitch[4] = 1/0.001;
switchTypes[4] = (int_T)7.0;
idxOutSw[4] = ((int_T)0.0) - 1;
switch_status[5] = 0;
switch_status_init[5] = 0;
gState[5] = (int_T) 0.0;
yswitch[5] = 1/0.001;
switchTypes[5] = (int_T)7.0;
idxOutSw[5] = ((int_T)0.0) - 1;
}
}
/* InitializeConditions for UnitDelay: '<S23>/voltages' */
VFControl_DW.voltages_DSTATE[0] = VFControl_cal->voltages_InitialCondition;
VFControl_DW.voltages_DSTATE[1] = VFControl_cal->voltages_InitialCondition;
VFControl_DW.voltages_DSTATE[2] = VFControl_cal->voltages_InitialCondition;
VFControl_DW.voltages_DSTATE[3] = VFControl_cal->voltages_InitialCondition;
/* InitializeConditions for DiscreteIntegrator: '<S15>/Rotor speed(wm)' */
VFControl_DW.Rotorspeedwm_DSTATE = VFControl_cal->Rotorspeedwm_IC;
/* InitializeConditions for DiscreteIntegrator: '<S47>/Discrete-Time Integrator1' */
VFControl_DW.DiscreteTimeIntegrator1_DSTATE =
VFControl_cal->DiscreteTimeIntegrator1_IC;
/* InitializeConditions for UnitDelay: '<S47>/Unit Delay1' */
VFControl_DW.UnitDelay1_DSTATE = VFControl_cal->UnitDelay1_InitialCondition;
/* InitializeConditions for DiscreteIntegrator: '<S42>/Discrete-Time Integrator' */
VFControl_DW.DiscreteTimeIntegrator_DSTATE =
VFControl_cal->DiscreteTimeIntegrator_IC;
/* InitializeConditions for UnitDelay: '<S73>/Unit Delay' */
VFControl_DW.UnitDelay_DSTATE = VFControl_cal->UnitDelay_InitialCondition;
/* SystemInitialize for Enabled SubSystem: '<S16>/Saturation' */
/* InitializeConditions for UnitDelay: '<S22>/Delay' */
VFControl_DW.Delay_DSTATE = VFControl_cal->Delay_InitialCondition;
/* SystemInitialize for Switch: '<S22>/Switch' incorporates:
* Outport: '<S22>/Lm'
*/
VFControl_B.Switch_g = VFControl_cal->Lm_Y0;
/* End of SystemInitialize for SubSystem: '<S16>/Saturation' */
/* SystemInitialize for Enabled SubSystem: '<S17>/Rotor reference frame' */
/* SystemInitialize for Fcn: '<S28>/vqr' incorporates:
* Outport: '<S28>/vqr,vdr'
*/
VFControl_B.vqr_j = VFControl_cal->vqrvdr_Y0;
/* SystemInitialize for Fcn: '<S28>/vdr' incorporates:
* Outport: '<S28>/vqr,vdr'
*/
VFControl_B.vdr_l = VFControl_cal->vqrvdr_Y0;
/* SystemInitialize for Fcn: '<S28>/vqs' incorporates:
* Outport: '<S28>/vqs,vds'
*/
VFControl_B.vqs_l = VFControl_cal->vqsvds_Y0;
/* SystemInitialize for Fcn: '<S28>/vds' incorporates:
* Outport: '<S28>/vqs,vds'
*/
VFControl_B.vds_f = VFControl_cal->vqsvds_Y0;
/* End of SystemInitialize for SubSystem: '<S17>/Rotor reference frame' */
/* SystemInitialize for Enabled SubSystem: '<S17>/Stationary reference frame' */
/* SystemInitialize for Fcn: '<S29>/vqr' incorporates:
* Outport: '<S29>/vqr,vdr'
*/
VFControl_B.vqr_l = VFControl_cal->vqrvdr_Y0_a;
/* SystemInitialize for Fcn: '<S29>/vdr' incorporates:
* Outport: '<S29>/vqr,vdr'
*/
VFControl_B.vdr_p = VFControl_cal->vqrvdr_Y0_a;
/* SystemInitialize for Fcn: '<S29>/vqs' incorporates:
* Outport: '<S29>/vqs,vds'
*/
VFControl_B.vqs_i = VFControl_cal->vqsvds_Y0_m;
/* SystemInitialize for Fcn: '<S29>/vds' incorporates:
* Outport: '<S29>/vqs,vds'
*/
VFControl_B.vds_i = VFControl_cal->vqsvds_Y0_m;
/* End of SystemInitialize for SubSystem: '<S17>/Stationary reference frame' */
/* SystemInitialize for Enabled SubSystem: '<S17>/Synchronous reference frame' */
/* SystemInitialize for Fcn: '<S30>/vqr' incorporates:
* Outport: '<S30>/vqr,vdr'
*/
VFControl_B.vqr = VFControl_cal->vqrvdr_Y0_am;
/* SystemInitialize for Fcn: '<S30>/vdr' incorporates:
* Outport: '<S30>/vqr,vdr'
*/
VFControl_B.vdr = VFControl_cal->vqrvdr_Y0_am;
/* SystemInitialize for Fcn: '<S30>/vqs' incorporates:
* Outport: '<S30>/vqs,vds'
*/
VFControl_B.vqs = VFControl_cal->vqsvds_Y0_p;
/* SystemInitialize for Fcn: '<S30>/vds' incorporates:
* Outport: '<S30>/vqs,vds'
*/
VFControl_B.vds = VFControl_cal->vqsvds_Y0_p;
/* End of SystemInitialize for SubSystem: '<S17>/Synchronous reference frame' */
/* SystemInitialize for Enabled SubSystem: '<S18>/Rotor reference frame' */
/* SystemInitialize for Fcn: '<S32>/ira' incorporates:
* Outport: '<S32>/ira,irb'
*/
VFControl_B.ira_p = VFControl_cal->irairb_Y0;
/* SystemInitialize for Fcn: '<S32>/irb' incorporates:
* Outport: '<S32>/ira,irb'
*/
VFControl_B.irb_n = VFControl_cal->irairb_Y0;
/* SystemInitialize for Fcn: '<S32>/isa' incorporates:
* Outport: '<S32>/isa,isb'
*/
VFControl_B.isa_m = VFControl_cal->isaisb_Y0;
/* SystemInitialize for Fcn: '<S32>/isb' incorporates:
* Outport: '<S32>/isa,isb'
*/
VFControl_B.isb_p = VFControl_cal->isaisb_Y0;
/* End of SystemInitialize for SubSystem: '<S18>/Rotor reference frame' */
/* SystemInitialize for Enabled SubSystem: '<S18>/Stationary reference frame' */
/* SystemInitialize for Fcn: '<S33>/ira' incorporates:
* Outport: '<S33>/ira,irb'
*/
VFControl_B.ira_g = VFControl_cal->irairb_Y0_d;
/* SystemInitialize for Fcn: '<S33>/irb' incorporates:
* Outport: '<S33>/ira,irb'
*/
VFControl_B.irb_g = VFControl_cal->irairb_Y0_d;
/* SystemInitialize for Fcn: '<S33>/isa' incorporates:
* Outport: '<S33>/isa,isb'
*/
VFControl_B.isa_a = VFControl_cal->isaisb_Y0_k;
/* SystemInitialize for Fcn: '<S33>/isb' incorporates:
* Outport: '<S33>/isa,isb'
*/
VFControl_B.isb_f = VFControl_cal->isaisb_Y0_k;
/* End of SystemInitialize for SubSystem: '<S18>/Stationary reference frame' */
/* SystemInitialize for Enabled SubSystem: '<S18>/Synchronous reference frame' */
/* SystemInitialize for Fcn: '<S34>/ira' incorporates:
* Outport: '<S34>/ira,irb'
*/
VFControl_B.ira = VFControl_cal->irairb_Y0_h;
/* SystemInitialize for Fcn: '<S34>/irb' incorporates:
* Outport: '<S34>/ira,irb'
*/
VFControl_B.irb = VFControl_cal->irairb_Y0_h;
/* SystemInitialize for Fcn: '<S34>/isa' incorporates:
* Outport: '<S34>/isa,isb'
*/
VFControl_B.isa = VFControl_cal->isaisb_Y0_m;
/* SystemInitialize for Fcn: '<S34>/isb' incorporates:
* Outport: '<S34>/isa,isb'
*/
VFControl_B.isb = VFControl_cal->isaisb_Y0_m;
/* End of SystemInitialize for SubSystem: '<S18>/Synchronous reference frame' */
/* SystemInitialize for Enabled SubSystem: '<S19>/sin(beta),cos(beta),sin(th),cos(th)' */
/* SystemInitialize for Trigonometry: '<S35>/Trigonometric Function1' incorporates:
* Outport: '<S35>/sin(beta),cos(beta), sin(th),cos(th)'
*/
VFControl_B.TrigonometricFunction1_o1 =
VFControl_cal->sinbetacosbetasinthcosth_Y0;
/* SystemInitialize for Trigonometry: '<S35>/Trigonometric Function1' incorporates:
* Outport: '<S35>/sin(beta),cos(beta), sin(th),cos(th)'
*/
VFControl_B.TrigonometricFunction1_o2 =
VFControl_cal->sinbetacosbetasinthcosth_Y0;
/* SystemInitialize for Trigonometry: '<S35>/Trigonometric Function' incorporates:
* Outport: '<S35>/sin(beta),cos(beta), sin(th),cos(th)'
*/
VFControl_B.TrigonometricFunction_o1_dn =
VFControl_cal->sinbetacosbetasinthcosth_Y0;
/* SystemInitialize for Trigonometry: '<S35>/Trigonometric Function' incorporates:
* Outport: '<S35>/sin(beta),cos(beta), sin(th),cos(th)'
*/
VFControl_B.TrigonometricFunction_o2_k =
VFControl_cal->sinbetacosbetasinthcosth_Y0;
/* End of SystemInitialize for SubSystem: '<S19>/sin(beta),cos(beta),sin(th),cos(th)' */
/* SystemInitialize for Enabled SubSystem: '<S19>/sin(thr),cos(thr)' */
/* SystemInitialize for Trigonometry: '<S36>/Trigonometric Function' incorporates:
* Outport: '<S36>/sin(thr),cos(thr)'
*/
VFControl_B.TrigonometricFunction_o1_d = VFControl_cal->sinthrcosthr_Y0;
/* SystemInitialize for Trigonometry: '<S36>/Trigonometric Function' incorporates:
* Outport: '<S36>/sin(thr),cos(thr)'
*/
VFControl_B.TrigonometricFunction_o2_j = VFControl_cal->sinthrcosthr_Y0;
/* SystemInitialize for Outport: '<S36>/sin(thr),cos(thr)' incorporates:
* Constant: '<S36>/Constant'
*/
VFControl_B.Constant_e[0] = VFControl_cal->sinthrcosthr_Y0;
VFControl_B.Constant_e[1] = VFControl_cal->sinthrcosthr_Y0;
/* End of SystemInitialize for SubSystem: '<S19>/sin(thr),cos(thr)' */
/* SystemInitialize for Enabled SubSystem: '<S19>/sin(thr),cos(thr)1' */
/* SystemInitialize for Trigonometry: '<S37>/Trigonometric Function' incorporates:
* Outport: '<S37>/sin(thr),cos(thr)'
*/
VFControl_B.TrigonometricFunction_o1 = VFControl_cal->sinthrcosthr_Y0_h;
/* SystemInitialize for Trigonometry: '<S37>/Trigonometric Function' incorporates:
* Outport: '<S37>/sin(thr),cos(thr)'
*/
VFControl_B.TrigonometricFunction_o2 = VFControl_cal->sinthrcosthr_Y0_h;
/* SystemInitialize for Outport: '<S37>/sin(thr),cos(thr)' incorporates:
* Constant: '<S37>/Constant'
*/
VFControl_B.Constant[0] = VFControl_cal->sinthrcosthr_Y0_h;
VFControl_B.Constant[1] = VFControl_cal->sinthrcosthr_Y0_h;
/* SystemInitialize for Enabled SubSystem: '<S19>/sin(thr),cos(thr)' */
/* SystemInitialize for Enabled SubSystem: '<S19>/sin(beta),cos(beta),sin(th),cos(th)' */
/* SystemInitialize for Enabled SubSystem: '<S16>/Saturation' */
for (i = 0; i < 16; i++) {
/* SystemInitialize for Product: '<S22>/inversion' incorporates:
* Outport: '<S22>/Linv'
*/
VFControl_B.Linv_h[i] = VFControl_cal->Linv_Y0;
/* SystemInitialize for Product: '<S22>/Product1' incorporates:
* Outport: '<S22>/R*Linv'
*/
VFControl_B.RLinv_m[i] = VFControl_cal->RLinv_Y0;
/* SystemInitialize for Assignment: '<S35>/W(4,3)=wr-1' incorporates:
* Outport: '<S35>/W'
*/
VFControl_B.W43wr1[i] = VFControl_cal->W_Y0;
/* SystemInitialize for Assignment: '<S36>/W(2,1)=-wr' incorporates:
* Outport: '<S36>/W'
*/
VFControl_B.W21wr[i] = VFControl_cal->W_Y0_m;
/* SystemInitialize for Assignment: '<S37>/W(4,3)=wr' incorporates:
* Outport: '<S37>/W'
*/
VFControl_B.W43wr[i] = VFControl_cal->W_Y0_o;
}
/* End of SystemInitialize for SubSystem: '<S16>/Saturation' */
/* End of SystemInitialize for SubSystem: '<S19>/sin(beta),cos(beta),sin(th),cos(th)' */
/* End of SystemInitialize for SubSystem: '<S19>/sin(thr),cos(thr)' */
/* End of SystemInitialize for SubSystem: '<S19>/sin(thr),cos(thr)1' */
}
/* Enable for DiscreteIntegrator: '<S15>/Rotor speed(wm)' */
VFControl_DW.Rotorspeedwm_SYSTEM_ENABLE = 1U;
}
/* Model terminate function */
void VFControl_terminate(void)
{
/* Terminate for S-Function (sfun_spssw_discc): '<S96>/State-Space' incorporates:
* Constant: '<S39>/DC'
* Constant: '<S98>/SwitchCurrents'
*/
/* S-Function block: <S96>/State-Space */
{
/* Free memory */
free(VFControl_DW.StateSpace_PWORK.DS);
free(VFControl_DW.StateSpace_PWORK.DX_COL);
free(VFControl_DW.StateSpace_PWORK.TMP2);
/*
* Circuit has switches*/
free(VFControl_DW.StateSpace_PWORK.G_STATE);
free(VFControl_DW.StateSpace_PWORK.SWITCH_STATUS);
free(VFControl_DW.StateSpace_PWORK.SW_CHG);
free(VFControl_DW.StateSpace_PWORK.SWITCH_STATUS_INIT);
}
/* Terminate for S-Function (sg_fpga_do_sf_a2): '<Root>/Digital output1' */
/* Level2 S-Function Block: '<Root>/Digital output1' (sg_fpga_do_sf_a2) */
{
SimStruct *rts = VFControl_M->childSfunctions[0];
sfcnTerminate(rts);
}
/* Terminate for S-Function (sg_fpga_do_sf_a2): '<Root>/Digital output2' */
/* Level2 S-Function Block: '<Root>/Digital output2' (sg_fpga_do_sf_a2) */
{
SimStruct *rts = VFControl_M->childSfunctions[1];
sfcnTerminate(rts);
}
/* user code (Terminate function Trailer) */
{
uintptr_t bar2Addr;
volatile io3xx_pull *ptrIO31x_pull;
volatile io3xx_2x *ptrio3xx_2x;
uint16_t moduleArchitecture;
sg_fpga_io3xxModuleIdT moduleId;
static char msg[500];
// Get module IDs (PIC info)
sg_fpga_IO3xxGetModuleId(39750, &moduleId);
moduleArchitecture = moduleId.moduleArchitecture;
SG_PRINTF(DEBUG, "moduleArchitecture %d\n",moduleArchitecture);
if (moduleArchitecture == TEWS_TXMC) {
// Get pointer to io31x_pull
bar2Addr = (uintptr_t)io3xxGetAddressSgLib((int32_t)1, SG_FPGA_IO3XX_BAR2);
if (bar2Addr == 0) {
sprintf(msg, "%s", pSgErrorStr);
rtmSetErrorStatus(VFControl_M, msg);
SG_PRINTF(ERROR,msg);
return;
}
ptrIO31x_pull = (io3xx_pull *)((uintptr_t)bar2Addr + IO3xx_PULL_BASE);
// Disable pull resistors
ptrIO31x_pull->enable = 0x0; // disable
}
// Pull down and disable DIOs
if ((1 == 2) || (1 == 3)) {
bar2Addr = (uintptr_t)io3xxGetAddressSgLib((int32_t)1, SG_FPGA_IO3XX_BAR2);
if (bar2Addr == 0) {
sprintf(msg, "%s", pSgErrorStr);
rtmSetErrorStatus(VFControl_M, msg);
SG_PRINTF(ERROR,msg);
return;
}
ptrio3xx_2x = (io3xx_2x *)((uintptr_t)bar2Addr +IO3xx_2x_BASE);
ptrio3xx_2x->pull = 0xffffffff; // pull down
ptrio3xx_2x->dir = 0x0; // input
ptrio3xx_2x->update = 0x1;
sg_wait_s(SG_FPGA_WAIT_TIME_100us);
ptrio3xx_2x->update = 0x0;
sg_wait_s(SG_FPGA_WAIT_TIME_1ms);
#if DEBUGGING
// For debugging output port register of IO-Expander
sg_wait_s(SG_FPGA_WAIT_TIME_100ms);
SG_PRINTF(INFO, "last configuration from mdl start\n");
SG_PRINTF(INFO, "rxData of Expander1: 0x%X\n",
ptrio3xx_2x->rxDataExpander1);
SG_PRINTF(INFO, "rxData of Expander2: 0x%X\n",
ptrio3xx_2x->rxDataExpander2);
SG_PRINTF(INFO, "rxData of Expander3: 0x%X\n",
ptrio3xx_2x->rxDataExpander3);
SG_PRINTF(INFO, "rxData of Expander4: 0x%X\n",
ptrio3xx_2x->rxDataExpander4);
#endif
} else if (1 == 4) {
IO3xx_24_terminate(1);
}
freeFPGAModuleSgLib((uint32_t)1);
}
}