diff --git a/Inu/Src/N12_Xilinx/RS_Functions.h b/Inu/Src/N12_Xilinx/RS_Functions.h index df08ebe..e98725e 100644 --- a/Inu/Src/N12_Xilinx/RS_Functions.h +++ b/Inu/Src/N12_Xilinx/RS_Functions.h @@ -113,9 +113,9 @@ enum { CMD_RS232_LAST }; -enum { - false = 0, true - }; +//enum { +// false = 0, true +// }; #define RS_LEN_CMD CMD_RS232_LAST @@ -131,7 +131,7 @@ void resetup_rs_on_timeout_lost(int rsp); void resetup_rs(RS_DATA_STRUCT *rs_arr); void resetup_mpu_rs(RS_DATA_STRUCT *rs_arr); int test_rs_live(RS_DATA_STRUCT *rs_arr); -void RS_SetControllerLeading(RS_DATA_STRUCT *RS232_Arr,int bool); +void RS_SetControllerLeading(RS_DATA_STRUCT *RS232_Arr,int boool); void RS_SetAdrAnswerController(RS_DATA_STRUCT *RS232_Arr,int set_addr_answer); void SetCntrlAddr (int cntrl_addr,int cntrl_addr_for_all); diff --git a/Inu/Src/main_matlab/DSP281x_Device.h b/Inu/Src/main_matlab/DSP281x_Device.h index 557612b..23c0d11 100644 --- a/Inu/Src/main_matlab/DSP281x_Device.h +++ b/Inu/Src/main_matlab/DSP281x_Device.h @@ -1,3 +1,4 @@ #include "DSP2833x_Device.h" //#define int16 int +#define interrupt \ No newline at end of file diff --git a/Inu/Src/main_matlab/init28335.c b/Inu/Src/main_matlab/init28335.c index ed2e47a..756ee53 100644 --- a/Inu/Src/main_matlab/init28335.c +++ b/Inu/Src/main_matlab/init28335.c @@ -8,7 +8,6 @@ **************************************************************************/ -#include "def.h" #include "init28335.h" #define FREQ_TIMER_3 (FREQ_PWM*2) @@ -20,6 +19,7 @@ void init28335(void) { edrk_init_variables_matlab(); init_global_time_struct(FREQ_TIMER_3); + Init_Adc_Variables(); } //void init28335(void) @@ -45,6 +45,44 @@ void edrk_init_variables_matlab(void) init_ramp_all_zadanie(); init_all_limit_koeffs(); + + + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_IZAD] = NOMINAL_SET_IZAD; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_KM] = 0; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_U_ZARYAD] = NOMINAL_U_ZARYAD; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_K_U_DISBALANCE] = NOMINAL_SET_K_U_DISBALANCE; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_K_PLUS_U_DISBALANCE] = 0; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_LIMIT_POWER] = NOMINAL_SET_LIMIT_POWER; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_UFCONST_VECTOR] = 1; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SCALAR_FOC] = 0; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_ENABLE_ON_CHARGE] = 0; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_GO] = 1; + + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_DISABLE_ON_PUMP] = 0; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_ENABLE_ON_CHARGE] = 0; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_DISABLE_ON_QTV] = 0; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_DISABLE_ON_UMP] = 0; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_MANUAL_DISCHARGE] = 0; + + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_ROTOR_POWER] = 0; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_DISABLE_INTERRUPT_SYNC] = 0; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_DISABLE_INTERRUPT_TIMER2] = 0; + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_STOP_LOGS] = 0; + + control_station.array_cmd[CONTROL_STATION_INGETEAM_PULT_RS485][CONTROL_STATION_CMD_SET_U_ZARYAD] = NOMINAL_U_ZARYAD; + control_station.array_cmd[CONTROL_STATION_MPU_SVU_CAN][CONTROL_STATION_CMD_SET_U_ZARYAD] = NOMINAL_U_ZARYAD; + + control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_WDOG_OFF] = 0; + + + for (int i = 0; i < CONTROL_STATION_CMD_LAST; i++) + control_station.array_cmd[CONTROL_STATION_TERMINAL_CAN][i] = control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][i]; + + + ramp_all_zadanie(2); + + set_zadanie_u_charge_matlab(); + init_Uin_rms(); } void edrk_init_matlab(void) @@ -64,4 +102,46 @@ void edrk_init_matlab(void) edrk.zadanie.iq_set_break_level = _IQ(NOMINAL_U_BREAK_LEVEL / NORMA_ACP); control_station.setup_time_detect_active[CONTROL_STATION_TERMINAL_RS232] = 50; +} + +void set_zadanie_u_charge_matlab(void) +{ + + // edrk.ZadanieU_Charge = edrk.ZadanieU_Charge_RS; + + // edrk.iq_ZadanieU_Charge = _IQ(edrk.ZadanieU_Charge/NORMA_ACP); + + if (edrk.zadanie.ZadanieU_Charge <= 100) + { + edrk.iqMIN_U_ZPT = _IQ(-50.0 / NORMA_ACP); + edrk.iqMIN_U_IN = _IQ(-50.0 / NORMA_ACP); + } + else + { + + edrk.iqMIN_U_ZPT = _IQ(edrk.zadanie.ZadanieU_Charge * MIN_U_PROC / NORMA_ACP); + edrk.iqMIN_U_IN = _IQ(edrk.zadanie.ZadanieU_Charge * MIN_U_PROC / NORMA_ACP); + + } + + if (edrk.zadanie.ZadanieU_Charge < LEVEL_DETECT_U_SMALL) + { + edrk.iqMAX_U_ZPT_Predzaryad = _IQ(edrk.zadanie.ZadanieU_Charge * MAX_U_PROC_SMALL / NORMA_ACP); + edrk.iqMAX_U_ZPT_Global = edrk.iqMAX_U_ZPT_Predzaryad + _IQ(ADD_U_MAX_GLOBAL_SMALL / NORMA_ACP); // +500V + + } + else + { + edrk.iqMAX_U_ZPT_Predzaryad = _IQ(edrk.zadanie.ZadanieU_Charge * MAX_U_PROC / NORMA_ACP); + edrk.iqMAX_U_ZPT_Global = edrk.iqMAX_U_ZPT_Predzaryad + _IQ(ADD_U_MAX_GLOBAL / NORMA_ACP); // +200V + + if (edrk.iqMAX_U_ZPT_Global > U_D_MAX_ERROR_GLOBAL) + edrk.iqMAX_U_ZPT_Global = U_D_MAX_ERROR_GLOBAL; + } + + edrk.iqMAX_U_ZPT = edrk.iqMAX_U_ZPT_Global;//_IQ(edrk.zadanie.ZadanieU_Charge*MAX_U_PROC/NORMA_ACP); + edrk.iqMAX_U_IN = _IQ(edrk.zadanie.ZadanieU_Charge * MAX_U_PROC / NORMA_ACP); + + edrk.zadanie.iq_set_break_level = _IQ(NOMINAL_U_BREAK_LEVEL / NORMA_ACP); + } \ No newline at end of file diff --git a/Inu/Src/main_matlab/init28335.h b/Inu/Src/main_matlab/init28335.h index f6abce1..3e59e12 100644 --- a/Inu/Src/main_matlab/init28335.h +++ b/Inu/Src/main_matlab/init28335.h @@ -7,4 +7,6 @@ void init28335(void); void edrk_init_matlab(void); void edrk_init_variables_matlab(void); +void set_zadanie_u_charge_matlab(void); +void init_Uin_rms(void); #endif //INIT28335 diff --git a/Inu/Src/main_matlab/main_matlab.c b/Inu/Src/main_matlab/main_matlab.c index 6b22dcd..eb2bc3f 100644 --- a/Inu/Src/main_matlab/main_matlab.c +++ b/Inu/Src/main_matlab/main_matlab.c @@ -1,15 +1,16 @@ -#include "DSP281x_Device.h" +#include "controller.h" +//#include "edrk_main.h" +//#include "vector.h" +//#include "vector_control.h" +// +//#include "xp_project.h" +//#include "xp_write_xpwm_time.h" +//#include "edrk_main.h" +//#include "vector.h" +//#include "vector_control.h" +//#include "v_rotor.h" -#include "edrk_main.h" -#include "vector.h" -#include "vector_control.h" -#include "xp_project.h" -#include "xp_write_xpwm_time.h" -#include "edrk_main.h" -#include "vector.h" -#include "vector_control.h" -#include "v_rotor.h" T_project project = {0}; @@ -20,6 +21,71 @@ FLAG f = FLAG_DEFAULTS; WRotorValues WRotor = WRotorValues_DEFAULTS; + + + +void mcu_simulate_step(void) +{ + int ff = 0; + static _iq Uzad1 = 0, Fzad = 0, Uzad2 = 0, Izad_out = 0, Uzad_from_master = 0; + _iq wd; + + if (edrk.flag_second_PCH == 0) { + wd = uf_alg.winding_displacement_bs1; + } + else { + wd = uf_alg.winding_displacement_bs2; + } + + //parse_parameters_from_all_control_station(); + + //ff = control_station.active_array_cmd[CONTROL_STATION_CMD_SET_ROTOR]; + //control_station.array_cmd[CONTROL_STATION_INGETEAM_PULT_RS485][CONTROL_STATION_CMD_SET_ROTOR] = ff; + //control_station.array_cmd[CONTROL_STATION_VPU_CAN][CONTROL_STATION_CMD_SET_ROTOR] = ff; + //control_station.array_cmd[CONTROL_STATION_ZADATCHIK_CAN][CONTROL_STATION_CMD_SET_ROTOR] = ff; + + //ff = control_station.active_array_cmd[CONTROL_STATION_CMD_SET_POWER]; + //control_station.array_cmd[CONTROL_STATION_INGETEAM_PULT_RS485][CONTROL_STATION_CMD_SET_POWER] = ff; + + + //if (control_station.active_array_cmd[CONTROL_STATION_CMD_ROTOR_POWER]) + //{ + // control_station.array_cmd[CONTROL_STATION_ZADATCHIK_CAN][CONTROL_STATION_CMD_SET_ROTOR] = 0; + // control_station.array_cmd[CONTROL_STATION_VPU_CAN][CONTROL_STATION_CMD_SET_ROTOR] = 0; + //} + //parse_analog_data_from_active_control_station_to_alg(); + + calc_norm_ADC_0(0); + + vectorControlConstId(edrk.zadanie.iq_power_zad_rmp, edrk.zadanie.iq_oborots_zad_hz_rmp, + WRotor.RotorDirectionSlow, WRotor.iqWRotorSumFilter, + edrk.Mode_ScalarVectorUFConst, + edrk.MasterSlave, edrk.zadanie.iq_Izad, wd, + edrk.master_theta, edrk.master_Iq, edrk.iq_power_kw_another_bs, + &edrk.tetta_to_slave, &edrk.Iq_to_slave, &edrk.P_to_master, + 0, 0); + + test_calc_vect_dq_pwm24_Ing(vect_control.iqTheta, vect_control.iqUdKm, vect_control.iqUqKm, + edrk.disable_alg_u_disbalance, + edrk.zadanie.iq_kplus_u_disbalance_rmp, edrk.zadanie.iq_k_u_disbalance_rmp, + filter.iqU_1_fast, filter.iqU_2_fast, + 0, + edrk.Uzad_max, + edrk.MasterSlave, + edrk.flag_second_PCH, + &edrk.Kplus, &edrk.Uzad_to_slave); + analog.PowerFOC = edrk.P_to_master; + Fzad = vect_control.iqFstator; + Izad_out = edrk.Iq_to_slave; +} + + + + + + + + void project_read_all_pbus2() { @@ -130,7 +196,9 @@ void WriteMemory(unsigned long addr, unsigned int data) //(*(volatile int *)( addr )) = data; } - +void func_unpack_answer_from_Ingeteam(unsigned int a) {} +void unpack_answer_from_MPU_SVU_CAN(unsigned int a) {} +int get_real_in_mbox(int a, int b) {} void start_pwm(void) { diff --git a/Inu/Src/main_matlab/main_matlab.h b/Inu/Src/main_matlab/main_matlab.h index f44848b..59a6c39 100644 --- a/Inu/Src/main_matlab/main_matlab.h +++ b/Inu/Src/main_matlab/main_matlab.h @@ -4,9 +4,8 @@ #include "edrk_main.h" +void mcu_simulate_step(void); void init_flag_a(void); - - diff --git a/Inu/Src/main_matlab/param.c b/Inu/Src/main_matlab/param.c new file mode 100644 index 0000000..24392f4 --- /dev/null +++ b/Inu/Src/main_matlab/param.c @@ -0,0 +1,53 @@ +/************************************************************************** + Description: Функции для приёма и выдачи параметров. + + Автор: Улитовский Д.И. + Дата последнего обновления: 2021.11.08 +**************************************************************************/ + +#include "param.h" + +int Unites[UNIT_QUA_UNITS][UNIT_LEN]; +int CAN_timeout[UNIT_QUA]; +RS_DATA_STRUCT rs_a = RS_DATA_STRUCT_DEFAULT, rs_b = RS_DATA_STRUCT_DEFAULT; + +// Изменяет значение параметра +void readInputParameters(const real_T *u) { + int nn = 0; + + iq_norm_ADC[0][0] = _IQ(u[nn++]/NORMA_ACP); + iq_norm_ADC[0][1] = _IQ(u[nn++]/NORMA_ACP); + iq_norm_ADC[0][2] = _IQ(u[nn++]/NORMA_ACP); + iq_norm_ADC[0][3] = _IQ(u[nn++]/NORMA_ACP); + iq_norm_ADC[0][4] = _IQ(u[nn++]/NORMA_ACP); + iq_norm_ADC[0][5] = _IQ(u[nn++]/NORMA_ACP); + iq_norm_ADC[0][6] = _IQ(u[nn++]/NORMA_ACP); + iq_norm_ADC[0][7] = _IQ(u[nn++]/NORMA_ACP); + + WRotor.iqWRotorSumFilter = _IQ(u[nn++] / PI2 / NORMA_FROTOR); + + u[nn++]; + + edrk.Go = u[nn++]; + + u[nn++]; + + edrk.Mode_ScalarVectorUFConst = ALG_MODE_FOC_OBOROTS; + + edrk.zadanie.iq_power_zad_rmp = _IQ(u[nn++]); + edrk.zadanie.iq_oborots_zad_hz_rmp = _IQ(u[nn++]); + + edrk.MasterSlave = MODE_MASTER; + edrk.master_theta; + edrk.master_Iq; + edrk.iq_power_kw_another_bs; + edrk.tetta_to_slave; + edrk.Iq_to_slave; + edrk.P_to_master; + + uf_alg.winding_displacement_bs1; +} //void input_param(unsigned short num, unsigned short val) + + +void writeOutputParameters(real_T* xD) { +} \ No newline at end of file diff --git a/Inu/Src/main_matlab/param.h b/Inu/Src/main_matlab/param.h new file mode 100644 index 0000000..713a32d --- /dev/null +++ b/Inu/Src/main_matlab/param.h @@ -0,0 +1,16 @@ +#include "simstruc.h" +#include "controller.h" + +#ifndef PARAM +#define PARAM + + +void readInputParameters(const real_T* u); + +extern int Unites[UNIT_QUA_UNITS][UNIT_LEN]; +extern int CAN_timeout[UNIT_QUA]; +extern RS_DATA_STRUCT rs_a; +extern RS_DATA_STRUCT rs_b; +extern _iq iq_norm_ADC[COUNT_ARR_ADC_BUF][16]; +#endif //PARAM + diff --git a/Inu/controller.c b/Inu/controller.c index cc5f471..ef0e290 100644 --- a/Inu/controller.c +++ b/Inu/controller.c @@ -12,6 +12,7 @@ #include "simstruc.h" #include "controller.h" #include "init28335.h" +#include "param.h" extern UMotorMeasure motor; @@ -54,68 +55,15 @@ int timers_pwm = 0; - -void readInputParameters(const real_T *u) { - // int t; - //// ВХОДЫ (begin) - //nn = 0; - //// аналоговые величины - //motor.udc1_ml = u[nn++];//В - //motor.udc2_ml = u[nn++];//В - - //motor.ia1_ml = u[nn++];//А - //motor.ib1_ml = u[nn++];//А - //motor.ic1_ml = u[nn++];//А - //motor.ia2_ml = u[nn++];//А - //motor.ib2_ml = u[nn++];//А - //motor.ic2_ml = u[nn++];//А - //motor.wm_ml = u[nn++];//рад/с - - //// управление (например, с ВУ) - //mst.faultReset = (unsigned short)u[nn++]; - //mst.start = (unsigned short)u[nn++]; - //mst.pzMode = (unsigned short)u[nn++]; - //mst.wmZz = u[nn++];//o.e. (от N_BAZ) - //mst.pmZz = u[nn++]*(P_NOM/S_BAZ);//o.e. (от S_BAZ) - //mst.wmLim = u[nn++];//o.e. (от N_BAZ) - //mst.pmLim = u[nn++]*(P_NOM/S_BAZ);//o.e. (от S_BAZ) - //mst.pIncrMaxTy = u[nn++]*TY*DECIM_PSI_WM_PM*(P_NOM/S_BAZ);//o.e. (от S_BAZ) - //mst.pDecrMaxTy = u[nn++]*TY*DECIM_PSI_WM_PM*(P_NOM/S_BAZ);//o.e. (от S_BAZ) - - //// - //mst.off_curr_pi = (unsigned short)u[nn++]; - //mst.only_one_km = (unsigned short)u[nn++]; - //mst.enable_compens_iq1_iq2 = (unsigned short)u[nn++]; - //mst.pi_iq_ki = u[nn++]; - //mst.pi_id_ki = u[nn++]; - //t = (unsigned short)u[nn++]; - //t = (unsigned short)u[nn++]; - //t = (unsigned short)u[nn++]; - //t = (unsigned short)u[nn++]; - //t = (unsigned short)u[nn++]; - - - //// параметры (например, с ПУ) - //paramNo = FIRST_WRITE_PAR_NUM; - //paramNew[paramNo++] = (unsigned short)u[nn++]; - //paramNew[paramNo++] = (unsigned short)u[nn++]; - - - //// ВХОДЫ (end) - - -} - - void processSFunctionIfChanged(SimStruct *S, int_T *iW) { // обрабатываем параметры S-Function каждый раз, когда они изменились if ( iW[0] == 1 ) { iW[0] = 0; - kkk = 0; - for ( lll = 0; lll < NPARAMS; lll++ ) { + int kkk = 0; + for (int lll = 0; lll < NPARAMS; lll++ ) { // определяем кол-во элементов в параметре - dimen = mxGetNumberOfElements(ssGetSFcnParam(S,lll)); + int dimen = mxGetNumberOfElements(ssGetSFcnParam(S,lll)); // обрабатываем параметр в зависимости от его размера if ( dimen > LEN_PARAM_MATR*2 ) { ssSetErrorStatus(S,"В параметре-массиве слишком много элементов"); @@ -125,7 +73,7 @@ void processSFunctionIfChanged(SimStruct *S, int_T *iW) { // запоминаем кол-во элементов параметра-матрицы paramMatrDimen = dimen; // запоминаем значения элементов параметра-матрицы - for ( mmm = 0; mmm < dimen; mmm++ ) + for (int mmm = 0; mmm < dimen; mmm++ ) paramMatr[mmm] = mxGetPr(ssGetSFcnParam(S,lll))[mmm]; } else { @@ -134,8 +82,8 @@ void processSFunctionIfChanged(SimStruct *S, int_T *iW) { } } // ПАРАМЕТРЫ (begin) - nn = 0; - dt = paramScal[nn++];//шаг дискретизации (всегда должен передаваться в S-function последним!) + int nn = 0; + double dt = paramScal[nn++];//шаг дискретизации (всегда должен передаваться в S-function последним!) // ПАРАМЕТРЫ (end) } //if ( iW[0] == 1 ) @@ -970,229 +918,10 @@ void simulateTripZoneSubmodule(void) { } -void writeOutputParameters(real_T *xD) { - -// // ВЫХОДЫ (begin) -// nn = 0; -// // Управление -// // ... INU1 -// xD[nn++] = ci1A_DT; -// xD[nn++] = ci2A_DT; -// xD[nn++] = ci1B_DT; -// xD[nn++] = ci2B_DT; -// -// xD[nn++] = ci3A_DT; -// xD[nn++] = ci4A_DT; -// xD[nn++] = ci3B_DT; -// xD[nn++] = ci4B_DT; -// -// xD[nn++] = ci5A_DT; -// xD[nn++] = ci6A_DT; -// xD[nn++] = ci5B_DT; -// xD[nn++] = ci6B_DT; -// // ... INU2 -// xD[nn++] = ci7A_DT; -// xD[nn++] = ci8A_DT; -// xD[nn++] = ci7B_DT; -// xD[nn++] = ci8B_DT; -// -// xD[nn++] = ci9A_DT; -// xD[nn++] = ci10A_DT; -// xD[nn++] = ci9B_DT; -// xD[nn++] = ci10B_DT; -// -// xD[nn++] = ci11A_DT; -// xD[nn++] = ci12A_DT; -// xD[nn++] = ci11B_DT; -// xD[nn++] = ci12B_DT; -// -// -//// выходы ацп для контроля -// xD[nn++] = udc1_ml; -// xD[nn++] = udc2_ml; -// xD[nn++] = udc3_ml; -// xD[nn++] = udc4_ml; -// -// xD[nn++] = idc1_ml; -// xD[nn++] = idc2_ml; -// xD[nn++] = idc3_ml; -// xD[nn++] = idc4_ml; -// -// xD[nn++] = _IQtoF(analog.iqIa1_1) * NORMA_ACP; -// xD[nn++] = _IQtoF(analog.iqIb1_1) * NORMA_ACP; -// xD[nn++] = _IQtoF(analog.iqIc1_1) * NORMA_ACP; -// xD[nn++] = _IQtoF(analog.iqIa2_1) * NORMA_ACP; -// xD[nn++] = _IQtoF(analog.iqIb2_1) * NORMA_ACP; -// xD[nn++] = _IQtoF(analog.iqIc2_1) * NORMA_ACP; -// -//// timers out -// -// xD[nn++] = timers_adc; -// xD[nn++] = timers_pwm; -// xD[nn++] = Tadc; -// xD[nn++] = dt; -// -// // Только для просмотра -// xD[nn++] = _IQtoF(rp.pmZ); -// xD[nn++] = _IQtoF(rs.wmZ); -// -// xD[nn++] = mst.start; -// xD[nn++] = inuWork; -// xD[nn++] = mst.pzMode; -// -// xD[nn++] = psi; -// xD[nn++] = rf.psiZ; -// -// xD[nn++] = wm; -// xD[nn++] = _IQtoF(vect_control.koeff_correct_Id);//rs.wmZ; -// xD[nn++] = _IQtoF(vect_control.iqFrot) * NORMA_FROTOR * 60.0 / N_BAZ;//csp.wmLimZi; -// -// xD[nn++] = pm*S_BAZ;///P_NOM; -// xD[nn++] = rp.pmZ*S_BAZ;///P_NOM; -// xD[nn++] = csp.pmLimZi*S_BAZ;///P_NOM; -// -// xD[nn++] = _IQtoF(analog.iqId1)* NORMA_ACP;//_IQtoF(vect_control.iqPzad); -// xD[nn++] = _IQtoF(analog.iqIq1)* NORMA_ACP;// * NORMA_ACP; -// xD[nn++] = _IQtoF(analog.iqId2)* NORMA_ACP;//_IQtoF(vect_control.iqUqCompensation1);// -// xD[nn++] = _IQtoF(analog.iqIq2)* NORMA_ACP; -// xD[nn++] = _IQtoF(vect_control.iqId_zad)* NORMA_ACP; -// xD[nn++] = _IQtoF(vect_control.iqIq_zad)* NORMA_ACP;//iqZ; -// -// xD[nn++] = me*M_BAZ/M_NOM; -// -// xD[nn++] = _IQtoF(vect_control.iqPzad) * NORMA_ACP * NORMA_ACP / 1000.0;; -// xD[nn++] = _IQtoF(vect_control.iqPizm) * NORMA_ACP * NORMA_ACP / 1000.0;; -// // xD[nn++] = sqrt(idZ*idZ + iqZ*iqZ); -// // xD[nn++] = IzLim; -// -// // xD[nn++] = EPwm2Regs.CMPA.half.CMPA;//xpwm_time.Ta0_0;//cc.yd1; -// // xD[nn++] = xpwm_time.Ta0_0; -// // xD[nn++] = xpwm_time.Ta0_1; -// // xD[nn++] = _IQtoF(cos_fi.cos_fi_nom);//cc.yd1; -// // xD[nn++] = _IQtoF(cos_fi.cos_fi_nom_squared);//cc.yq1; -// // xD[nn++] = _IQtoF(tetta_calc.k_t); -// xD[nn++] = _IQtoF(vect_control.iqUzad1);//cc.yd1; -// xD[nn++] = _IQtoF(vect_control.iqUzad2);//cc.yd1; -//// xD[nn++] = _IQtoF(vect_control.iqUdKm1Out);//cc.yq1; -//// xD[nn++] = _IQtoF(vect_control.iqUqKm1Out); -// -// xD[nn++] = _IQtoF(vect_control.iqUdKm1);//sqrt(cc.yd1*cc.yd1 + cc.yq1*cc.yq1); -// xD[nn++] = _IQtoF(vect_control.iqUqKm1);//sqrt(cc.yd2*cc.yd2 + cc.yq2*cc.yq2); -// xD[nn++] = _IQtoF(vect_control.iqUdKm2);//Y_LIM; -// xD[nn++] = _IQtoF(vect_control.iqUqKm2);//Y_LIM; -// -// -// xD[nn++] = _IQtoF(vect_control.iqUdKm1Out);//sqrt(cc.yd1*cc.yd1 + cc.yq1*cc.yq1); -// xD[nn++] = _IQtoF(vect_control.iqUqKm1Out);//sqrt(cc.yd2*cc.yd2 + cc.yq2*cc.yq2); -// xD[nn++] = _IQtoF(vect_control.iqUdKm2Out);//Y_LIM; -// xD[nn++] = _IQtoF(vect_control.iqUqKm2Out);//Y_LIM; -// -// xD[nn++] = _IQtoF(vect_control.k_modul_max);//Y_LIM; -// -// xD[nn++] = _IQtoF(vect_control.k_modul_max_def); -// xD[nn++] = _IQtoF(vect_control.maxUq1); -// xD[nn++] = _IQtoF(vect_control.maxUq2); -// xD[nn++] = _IQtoF(vect_control.Uq1Out); -// xD[nn++] = _IQtoF(vect_control.Uq2Out); -//// xD[nn++] = _IQtoF(vect_control.K_MODUL_MAX); -//// xD[nn++] = _IQtoF(vect_control.K_MODUL_MAX); -//// xD[nn++] = _IQtoF(vect_control.K_MODUL_MAX); -// -// -// // xD[nn++] = sqrt(cc.yd1*cc.yd1 + cc.yq1*cc.yq1); -// // xD[nn++] = sqrt(cc.yd2*cc.yd2 + cc.yq2*cc.yq2); -// // xD[nn++] = Y_LIM; -// // ВЫХОДЫ (end) -// -// -///////////////// new -// xD[nn++] = _IQtoF(f.iq_mzz_zad) * NORMA_ACP;// -// xD[nn++] = _IQtoF(pidPvect.OutMax) * NORMA_ACP; -// xD[nn++] = _IQtoF(pidPvect.OutMin) * NORMA_ACP; -// xD[nn++] = _IQtoF(pidPvect.Out) * NORMA_ACP; -// xD[nn++] = _IQtoF(vect_control.mzz_zad_int) * NORMA_ACP ; -// xD[nn++] = _IQtoF(filter.iqIm_1) * NORMA_ACP; -// xD[nn++] = _IQtoF(filter.iqIm_2) * NORMA_ACP; -// -// xD[nn++] = _IQtoF(vect_control.Pzad_rmp) * NORMA_ACP * NORMA_ACP / 1000.0; -// xD[nn++] = _IQtoF(f.iq_p_rampa) * NORMA_ACP * NORMA_ACP / 1000.0; -// xD[nn++] = _IQtoF(analog.iqPvsi1) * NORMA_ACP * NORMA_ACP / 1000.0; -// xD[nn++] = _IQtoF(analog.iqPvsi1) * NORMA_ACP * NORMA_ACP / 1000.0; -// -// xD[nn++] = _IQtoF(analog.iqW1) * NORMA_ACP * NORMA_ACP / 1000.0; -// xD[nn++] = _IQtoF(analog.iqW2) * NORMA_ACP * NORMA_ACP / 1000.0; -// xD[nn++] = _IQtoF(analog.iqW) * NORMA_ACP * NORMA_ACP / 1000.0; -// xD[nn++] = _IQtoF(filter.iqW1) * NORMA_ACP * NORMA_ACP / 1000.0; -// xD[nn++] = _IQtoF(filter.iqW2) * NORMA_ACP * NORMA_ACP / 1000.0; -// xD[nn++] = _IQtoF(filter.iqW) * NORMA_ACP * NORMA_ACP / 1000.0; -// -// -// -// xD[nn++] = _IQtoF(vect_control.iqFrot) * NORMA_FROTOR * 60.0; -// xD[nn++] = vect_control.flag_reverse;//_IQtoF(0); -// -// xD[nn++] = _IQtoF(vect_control.koeff_correct_Id); -// xD[nn++] = _IQtoF(cos_fi.cos_fi_nom); -// -// xD[nn++] = _IQtoF(filter.Fsl) * NORMA_FROTOR; -// -// xD[nn++] = _IQtoF(filter.iqIa1_1) * NORMA_ACP; -// xD[nn++] = _IQtoF(filter.iqIb1_1) * NORMA_ACP; -// xD[nn++] = _IQtoF(filter.iqIc1_1) * NORMA_ACP; -// -// xD[nn++] = _IQtoF(filter.iqIa2_1) * NORMA_ACP; -// xD[nn++] = _IQtoF(filter.iqIb2_1) * NORMA_ACP; -// xD[nn++] = _IQtoF(filter.iqIc2_1) * NORMA_ACP; -// -// xD[nn++] = _IQtoF(tetta_calc.Imds); -// xD[nn++] = _IQtoF(tetta_calc.tetta); -// -// xD[nn++] = _IQtoF(vect_control.Is) * NORMA_ACP; -// xD[nn++] = _IQtoF(vect_control.Ids) * NORMA_ACP; -// xD[nn++] = _IQtoF(vect_control.Id_ref_fw) * NORMA_ACP; -// xD[nn++] = _IQtoF(vect_control.Id_ref_1) * NORMA_ACP; -// xD[nn++] = _IQtoF(vect_control.Is_max) * NORMA_ACP; -// -// xD[nn++] = vect_control.flag_fw; -// -// xD[nn++] = _IQtoF(vect_control.ws_Iq1) * NORMA_ACP; -// xD[nn++] = _IQtoF(vect_control.ws_Id_filter1) * NORMA_ACP; -// xD[nn++] = _IQtoF(vect_control.ws_Id_filter2) * NORMA_ACP; -// -// xD[nn++] = _IQtoF(vect_control.ws_ws_t1) * NORMA_FROTOR; -// -// xD[nn++] = _IQtoF(analog.Fsl) * NORMA_FROTOR; -// xD[nn++] = _IQtoF(filter.Fsl) * NORMA_FROTOR; -// -// xD[nn++] = vect_control.tmp1; -// xD[nn++] = vect_control.tmp2; -// xD[nn++] = vect_control.tmp3; -// //xD[nn++] = _IQtoF(0) * NORMA_ACP; -// //xD[nn++] = _IQtoF(0) * NORMA_ACP; -// xD[nn++] = _IQtoF(0) * NORMA_ACP; -// -// -// -// xD[nn++] = _IQtoF(svgen_dq_1.Ta)*1000.0; -// xD[nn++] = _IQtoF(svgen_dq_1.Tb)*1000.0; -// xD[nn++] = _IQtoF(svgen_dq_1.Tc)*1000.0; -// -// xD[nn++] = _IQtoF(svgen_dq_2.Ta)*1000.0; -// xD[nn++] = _IQtoF(svgen_dq_2.Tb)*1000.0; -// xD[nn++] = _IQtoF(svgen_dq_2.Tc)*1000.0; -// - - - - -} - void controller(SimStruct *S, const real_T *u, real_T *xD, real_T *rW, int_T *iW) { - static _iq Uzad1 = 0, Fzad = 0, Uzad2 = 0, Izad_out = 0, Uzad_from_master = 0; - _iq wd; readInputParameters(u); processSFunctionIfChanged(S, iW); @@ -1213,33 +942,5 @@ void controller(SimStruct *S, const real_T *u, real_T *xD, real_T *rW, int_T *iW writeOutputParameters(xD); - if (edrk.flag_second_PCH == 0) { - wd = uf_alg.winding_displacement_bs1; - } - else { - wd = uf_alg.winding_displacement_bs2; - } - - vectorControlConstId(edrk.zadanie.iq_power_zad_rmp, edrk.zadanie.iq_oborots_zad_hz_rmp, - WRotor.RotorDirectionSlow, WRotor.iqWRotorSumFilter, - edrk.Mode_ScalarVectorUFConst, - edrk.MasterSlave, edrk.zadanie.iq_Izad, wd, - edrk.master_theta, edrk.master_Iq, edrk.iq_power_kw_another_bs, - &edrk.tetta_to_slave, &edrk.Iq_to_slave, &edrk.P_to_master, - 0, 1); - - test_calc_vect_dq_pwm24_Ing(vect_control.iqTheta, vect_control.iqUdKm, vect_control.iqUqKm, - edrk.disable_alg_u_disbalance, - edrk.zadanie.iq_kplus_u_disbalance_rmp, edrk.zadanie.iq_k_u_disbalance_rmp, - filter.iqU_1_fast, filter.iqU_2_fast, - 0, - edrk.Uzad_max, - edrk.MasterSlave, - edrk.flag_second_PCH, - &edrk.Kplus, &edrk.Uzad_to_slave); - analog.PowerFOC = edrk.P_to_master; - Fzad = vect_control.iqFstator; - Izad_out = edrk.Iq_to_slave; - - + mcu_simulate_step(); } //void controller(SimStruct ... diff --git a/Inu/controller.h b/Inu/controller.h index 3db497d..a16fe3b 100644 --- a/Inu/controller.h +++ b/Inu/controller.h @@ -1,3 +1,5 @@ +#include "DSP281x_Device.h" + #include "wrapper_inu.h" #include "def.h" #include "edrk_main.h" @@ -9,6 +11,10 @@ #include "v_rotor_22220.h" #include "v_pwm24_v2.h" #include "control_station.h" +#include "control_station_project.h" +#include "CAN_Setup.h" +#include "RS_Functions.h" +#include "master_slave.h" #include #include @@ -28,15 +34,6 @@ double paramScal[NPARAMS]; double paramMatr[LEN_PARAM_MATR*2]; int paramMatrDimen; -// Индекс входного и выходного массива, а также массива параметров -int nn; -// Шаг интегрирования -double dt; -// Для обработки параметров -int kkk, lll, mmm, dimen; - - - // Переменные, которые определены в controller.c (begin) //######################################################################### // Параметры diff --git a/Inu/param.c b/Inu/param.c deleted file mode 100644 index 4ebbffa..0000000 --- a/Inu/param.c +++ /dev/null @@ -1,426 +0,0 @@ -/************************************************************************** - Description: Функции для приёма и выдачи параметров. - - Автор: Улитовский Д.И. - Дата последнего обновления: 2021.11.08 -**************************************************************************/ - - -#include "def.h" -#include "param.h" - - -#pragma CODE_SECTION(input_param, "ramfuncs"); -#pragma CODE_SECTION(output_param, "ramfuncs"); - - -extern short test_param(void); -extern void process_sgm_parameters(void); - - -// Изменяет значение параметра -void input_param(unsigned short num, unsigned short val) { - switch ( num ) { - case 180://rf.PsiZ, %*10 от PSI_BAZ - if ( (val <= 2000) && (val != param[num]) ) { - param[num] = val; - rf.PsiZ = (float)val*0.001;//%*10 -> o.e. - eprom.writeRequestNumber += 1; - } - break; - case 200://offset.Ia1, ед. АЦП - if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) { - offset.Ia1 = param[num] = val; - eprom.writeRequestNumber += 1; - } - break; - case 201://offset.Ib1, ед. АЦП - if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) { - offset.Ib1 = param[num] = val; - eprom.writeRequestNumber += 1; - } - break; - case 202://offset.Ic1, ед. АЦП - if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) { - offset.Ic1 = param[num] = val; - eprom.writeRequestNumber += 1; - } - break; - case 203://offset.Udc1, ед. АЦП - if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) { - offset.Udc1 = param[num] = val; - eprom.writeRequestNumber += 1; - } - break; - case 206://offset.Ia2, ед. АЦП - if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) { - offset.Ia2 = param[num] = val; - eprom.writeRequestNumber += 1; - } - break; - case 207://offset.Ib2, ед. АЦП - if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) { - offset.Ib2 = param[num] = val; - eprom.writeRequestNumber += 1; - } - break; - case 208://offset.Ic2, ед. АЦП - if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) { - offset.Ic2 = param[num] = val; - eprom.writeRequestNumber += 1; - } - break; - case 209://offset.Udc2, ед. АЦП - if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) { - offset.Udc2 = param[num] = val; - eprom.writeRequestNumber += 1; - } - break; - case 210://cc.Kp, % - if ( (val <= 5000) && (val != param[num]) ) { - param[num] = val; - cc.Kp = (float)val*cc.KpOrig; - eprom.writeRequestNumber += 1; - } - break; - case 211://cc.Ki, % - if ( (val <= 5000) && (val != param[num]) ) { - param[num] = val; - cc.Ki = (float)val*cc.KiOrig; - eprom.writeRequestNumber += 1; - } - break; - case 212://cf.Kp, % - if ( (val <= 5000) && (val != param[num]) ) { - param[num] = val; - cf.Kp = (float)val*cf.KpOrig; - eprom.writeRequestNumber += 1; - } - break; - case 213://cf.Ki, % - if ( (val <= 5000) && (val != param[num]) ) { - param[num] = val; - cf.Ki = (float)val*cf.KiOrig; - eprom.writeRequestNumber += 1; - } - break; - case 214://csp.Kp, % - if ( (val <= 5000) && (val != param[num]) ) { - param[num] = val; - csp.Kp = (float)val*csp.KpOrig; - eprom.writeRequestNumber += 1; - } - break; - case 215://csp.Ki, % - if ( (val <= 5000) && (val != param[num]) ) { - param[num] = val; - csp.Ki = (float)val*csp.KiOrig; - eprom.writeRequestNumber += 1; - } - break; - case 220://protect.IacMax, % от IAC_SENS_MAX - if ( (val <= 99) && (val != param[num]) ) { - param[num] = val; - protect.IacMax = (short)(2047.*(float)val*0.01);//% -> ед. АЦП - protect.IacMin = -protect.IacMax; - eprom.writeRequestNumber += 1; - } - break; - case 221://protect.UdcMax, % от U_NOM - if ( (val <= 136) && (val != param[num]) ) { - param[num] = val; - protect.UdcMax = (float)val*0.01;//% -> o.e. - eprom.writeRequestNumber += 1; - } - break; - case 222://IzLim, % от I_BAZ - if ( (val <= 200) && (val != param[num]) ) { - param[num] = val; - IzLim = (float)val*0.01;//% -> o.e. - eprom.writeRequestNumber += 1; - } - break; - case 223://cf.IdLim, % от I_BAZ - if ( (val <= 200) && (val != param[num]) ) { - param[num] = val; - cf.IdLim = (float)val*0.01;//% -> o.e. - cf.IdLimNeg = cf.IdLim*(-0.4); - eprom.writeRequestNumber += 1; - } - break; - case 224://csp.IqLim, % от I_BAZ - if ( (val <= 200) && (val != param[num]) ) { - param[num] = val; - csp.IqLim = (float)val*0.01;//% -> o.e. - csp.IqLimNeg = -csp.IqLim; - eprom.writeRequestNumber += 1; - } - break; - case 225://protect.UdcMin, % от U_NOM - if ( (val <= 110) && (val != param[num]) ) { - param[num] = val; - protect.UdcMin = (float)val*0.01;//% -> o.e. - eprom.writeRequestNumber += 1; - } - break; - case 226://protect.WmMax, % от N_NOM - if ( (val <= 200) && (val != param[num]) ) { - param[num] = val; - protect.WmMax = (float)val*0.01;//% -> o.e. - eprom.writeRequestNumber += 1; - } - break; - case 228://rf.WmNomPsi, % от N_NOM - if ( (val <= 200) && (val != param[num]) ) { - param[num] = val; - rf.WmNomPsi = (float)val*0.01;//% -> o.e. - eprom.writeRequestNumber += 1; - } - break; - case 229://rf.YlimPsi, % от Y_LIM - if ( (val <= 101) && (val != param[num]) ) { - param[num] = val; - rf.YlimPsi = (float)val*0.01*Y_LIM;//% -> ед. счётчика таймера - eprom.writeRequestNumber += 1; - } - break; - case 231://protect.TudcMin, мс - if ( (val >= 1) && (val <= 8500) && (val != param[num]) ) { - param[num] = val; - protect.TudcMin = (unsigned short)((float)val*0.001/TY); - eprom.writeRequestNumber += 1; - } - break; - case 233://protect.TwmMax, мс - if ( (val >= 1) && (val <= 8500) && (val != param[num]) ) { - param[num] = val; - protect.TwmMax = (unsigned short)((float)val*0.001/TY); - eprom.writeRequestNumber += 1; - } - break; - case 244://rs.WlimIncr, мс - if ( (val >= 1) && (val != param[num]) ) { - param[num] = val; - // изм. на 1.0 за столько-то мс - rs.WlimIncr = 1.0*TY*DECIM_PSI_WM_PM/((float)val*0.001); - eprom.writeRequestNumber += 1; - } - break; - case 245://csp.IlimIncr, мс - if ( (val >= 1) && (val != param[num]) ) { - param[num] = val; - // изм. на I_BAZ за столько-то мс - csp.IlimIncr = 1.0*TY*DECIM_PSI_WM_PM/((float)val*0.001); - eprom.writeRequestNumber += 1; - } - break; - case 248://rp.PlimIncr, мс - if ( (val >= 1) && (val != param[num]) ) { - param[num] = val; - // изм. на 1.0 за столько-то мс - rp.PlimIncr = 1.0*TY*DECIM_PSI_WM_PM/((float)val*0.001); - eprom.writeRequestNumber += 1; - } - break; - case 269://KmeCorr, %*100 - if ( (val >= 5000) && (val <= 20000) && (val != param[num]) ) { - param[num] = val; - KmeCorr = (float)val*0.0001;//%*100 -> o.e. - eprom.writeRequestNumber += 1; - } - break; - case 285://Kudc, мс*10 - if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) { - param[num] = val; - Kudc = (TY*10000.)/(float)val; - if ( Kudc > 1.0 ) - Kudc = 1.0; - eprom.writeRequestNumber += 1; - } - break; - case 286://Kwm, мс*10 - if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) { - param[num] = val; - Kwm = (TY*10000.)/(float)val; - if ( Kwm > 1.0 ) - Kwm = 1.0; - eprom.writeRequestNumber += 1; - } - break; - case 288://rs.Kwmz, мс - if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) { - param[num] = val; - rs.Kwmz = (TY*DECIM_PSI_WM_PM*1000.)/(float)val; - eprom.writeRequestNumber += 1; - } - break; - case 289://rf.Kpsiz, мс - if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) { - param[num] = val; - rf.Kpsiz = (TY*DECIM_PSI_WM_PM*1000.)/(float)val; - eprom.writeRequestNumber += 1; - } - break; - case 290://Kme, мс - if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) { - param[num] = val; - Kme = (TY*1000.)/(float)val; - eprom.writeRequestNumber += 1; - } - break; - case 292://rp.Kpmz, мс - if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) { - param[num] = val; - rp.Kpmz = (TY*DECIM_PSI_WM_PM*1000.)/(float)val; - eprom.writeRequestNumber += 1; - } - break; - case 303://sgmPar.Rs, мкОм - if ( val != param[num] ) { - param[num] = val; - sgmPar.Rs = (float)val*1e-6;//мкОм -> Ом - eprom.writeRequestNumber += 1; - } - break; - case 304://sgmPar.Lls, мкГн*10 - if ( val != param[num] ) { - param[num] = val; - sgmPar.Lls = (float)val*1e-7;//мкГн*10 -> Гн - process_sgm_parameters(); - eprom.writeRequestNumber += 1; - } - break; - case 305://sgmPar.Rr, мкОм - if ( val != param[num] ) { - param[num] = val; - sgmPar.Rr = (float)val*1e-6;//мкОм -> Ом - process_sgm_parameters(); - eprom.writeRequestNumber += 1; - } - break; - case 306://sgmPar.Llr, мкГн*10 - if ( val != param[num] ) { - param[num] = val; - sgmPar.Llr = (float)val*1e-7;//мкГн*10 -> Гн - process_sgm_parameters(); - eprom.writeRequestNumber += 1; - } - break; - case 307://sgmPar.Lm, мкГн - if ( val != param[num] ) { - param[num] = val; - sgmPar.Lm = (float)val*1e-6;//мкГн -> Гн - process_sgm_parameters(); - eprom.writeRequestNumber += 1; - } - break; - default: - if ( num < PAR_NUMBER ) { - param[num] = val; - } - break; - } //switch ( num ) -} //void input_param(unsigned short num, unsigned short val) - - - -// Выдаёт значение параметра -unsigned short output_param(unsigned short num) { - static unsigned short output; - - switch ( num ) { - case 1: //udc1, o.e. -> o.e.*CONTROLLER_GAIN - if ( state == STATE_SHUTDOWN ) { - output = (unsigned short)(emerg.udc1*CONTROLLER_GAIN); - } - else { - output = (unsigned short)(out.udc1*CONTROLLER_GAIN); - } - break; - case 2: //udc2, o.e. -> o.e.*CONTROLLER_GAIN - if ( state == STATE_SHUTDOWN ) { - output = (unsigned short)(emerg.udc2*CONTROLLER_GAIN); - } - else { - output = (unsigned short)(out.udc2*CONTROLLER_GAIN); - } - break; - case 5: //iac1, o.e. -> o.e.*CONTROLLER_GAIN - if ( state == STATE_SHUTDOWN ) { - output = (unsigned short)(emerg.iac1*CONTROLLER_GAIN); - } - else { - output = (unsigned short)(out.iac1*CONTROLLER_GAIN); - } - break; - case 6: //iac2, o.e. -> o.e.*CONTROLLER_GAIN - if ( state == STATE_SHUTDOWN ) { - output = (unsigned short)(emerg.iac2*CONTROLLER_GAIN); - } - else { - output = (unsigned short)(out.iac2*CONTROLLER_GAIN); - } - break; - case 7: //me, o.e. -> (o.e. + CONTROLLER_BIAS)*CONTROLLER_GAIN - if ( state == STATE_SHUTDOWN ) { - if ( emerg.me > CONTROLLER_BIAS ) - output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else if ( emerg.me > -CONTROLLER_BIAS ) - output = (unsigned short)((emerg.me + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else - output = 0; - } - else { - if ( out.me > CONTROLLER_BIAS ) - output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else if ( out.me > -CONTROLLER_BIAS ) - output = (unsigned short)((out.me + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else - output = 0; - } - break; - case 8: //nm, o.e. -> (o.e. + CONTROLLER_BIAS)*CONTROLLER_GAIN - if ( state == STATE_SHUTDOWN ) { - if ( emerg.wm > CONTROLLER_BIAS ) - output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else if ( emerg.wm > -CONTROLLER_BIAS ) - output = (unsigned short)((emerg.wm + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else - output = 0; - } - else { - if ( out.wm > CONTROLLER_BIAS ) - output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else if ( out.wm > -CONTROLLER_BIAS ) - output = (unsigned short)((out.wm + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else - output = 0; - } - break; - case 9: //pm, o.e. -> (o.e. + CONTROLLER_BIAS)*CONTROLLER_GAIN - if ( state == STATE_SHUTDOWN ) { - if ( emerg.pm > CONTROLLER_BIAS ) - output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else if ( emerg.pm > -CONTROLLER_BIAS ) - output = (unsigned short)((emerg.pm + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else - output = 0; - } - else { - if ( out.pm > CONTROLLER_BIAS ) - output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else if ( out.pm > -CONTROLLER_BIAS ) - output = (unsigned short)((out.pm + CONTROLLER_BIAS)*CONTROLLER_GAIN); - else - output = 0; - } - break; - case 10: //compound - output = faultNo + (inuWork<<7); - break; - default: - output = param[num]; - break; - } //switch ( num ) - return output; -} //unsigned short output_param(unsigned short num) diff --git a/Inu/param.h b/Inu/param.h deleted file mode 100644 index 9dc480e..0000000 --- a/Inu/param.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef PARAM -#define PARAM - -// Переменные, которые определены в param.c (begin) -//######################################################################### -unsigned short param[PAR_NUMBER]; -//######################################################################### -// Переменные, которые определены в param.c (end) - - - - -// Переменные, которые объявлены в param.c (begin) -//######################################################################### -extern volatile short state; -extern volatile short faultNo; -extern short onceFaultReset; -extern struct SgmPar sgmPar; -extern struct Offset offset; -extern float Kudc; -extern float Kwm; -extern short testParamFaultNo; -extern float IzLim; -extern float Kme; -extern struct Protect protect; -extern float KmeCorr; -extern volatile struct Out out; -extern volatile struct Emerg emerg; -extern struct Rf rf; -extern struct Rs rs; -extern struct Rp rp; -extern struct Cf cf; -extern struct Csp csp; -extern struct Cc cc; -// для передачи на ВУ -extern volatile short inuWork; -// для работы с EEPROM -extern struct Eprom eprom; -//######################################################################### -// Переменные, которые объявлены в param.c (end) -#endif //PARAM diff --git a/inu_im_2wnd_3lvl.slx b/inu_im_2wnd_3lvl.slx index a4592ef..38a1ae1 100644 Binary files a/inu_im_2wnd_3lvl.slx and b/inu_im_2wnd_3lvl.slx differ diff --git a/run_mex.bat b/run_mex.bat index 16545dc..fd9494e 100644 --- a/run_mex.bat +++ b/run_mex.bat @@ -22,6 +22,7 @@ set params_o=-outdir "." set params_wrapper_c=.\Inu\controller.c^ .\Inu\Src\main_matlab\init28335.c^ + .\Inu\Src\main_matlab\param.c^ .\Inu\Src\main_matlab\main_matlab.c^ .\Inu\Src\main_matlab\IQmathLib_matlab.c @@ -52,6 +53,9 @@ set params_libs_c=.\Inu\Src\N12_Libs\mathlib.c^ .\Inu\Src\main\limit_power.c^ .\Inu\Src\main\limit_lib.c^ .\Inu\Src\main\pll_tools.c^ + .\Inu\Src\main\calc_rms_vals.c^ + .\Inu\Src\main\alg_simple_scalar.c^ + .\Inu\Src\main\control_station_project.c^ .\Inu\Src\main\ramp_zadanie_tools.c set params_obj=..\device_support_ml\source\C28x_FPU_FastRTS.obj ..\device_support_ml\source\DSP2833x_GlobalVariableDefs.obj