matlab_23550/Inu/Src2/main/edrk_main.c

2737 lines
78 KiB
C
Raw Blame History

#include <281xEvTimersInit.h>
#include <adc_tools.h>
#include <alg_simple_scalar.h>
#include <break_regul.h>
#include <calc_rms_vals.h>
#include <calc_tempers.h>
#include <can_bs2bs.h>
#include <detect_errors.h>
#include <detect_errors_adc.h>
#include <detect_overload.h>
#include <detect_overload.h>
#include <edrk_main.h>
//#include <log_to_mem.h>
#include <math.h>
#include <message_modbus.h>
#include <modbus_hmi.h>
#include <modbus_hmi_update.h>
#include <modbus_svu_update.h>
#include <optical_bus.h>
#include <overheat_limit.h>
#include <params.h>
#include <params_alg.h>
#include <params_norma.h>
#include <params_pwm24.h>
#include <params_temper_p.h>
#include <project.h>
#include <pump_control.h>
#include <PWMTMSHandle.h>
#include <PWMTools.h>
#include <sync_tools.h>
#include <v_rotor.h>
#include <vector.h>
#include "mathlib.h"
#include "params_hwp.h"
//#include "modbus_fill_table.h"
#include "big_dsp_module.h"
#include "control_station.h"
#include "CAN_Setup.h"
#include "global_time.h"
#include "IQmathLib.h"
#include "mathlib.h"
#include "modbus_table_v2.h"
#include "oscil_can.h"
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#include "DSP281x_SWPrioritizedIsrLevels.h" // DSP281x Examples Include File
#include "DSP281x_Device.h"
#include "alg_pll.h"
#include "vector_control.h"
#include "CRC_Functions.h"
#include "RS_Functions.h"
#include "xp_project.h"
#include "sbor_shema.h"
#include "alarm_log_can.h"
#include "pwm_test_lines.h"
#include "master_slave.h"
#include "xp_write_xpwm_time.h"
#include "v_rotor_22220.h"
#include "log_to_memory.h"
#include "log_params.h"
#include "build_version.h"
#include "profile_interrupt.h"
#include "limit_power.h"
#include "pwm_logs.h"
#include "logs_hmi.h"
#include "alarm_log.h"
#include "can_protocol_ukss.h"
#include "ukss_tools.h"
#include "another_bs.h"
#include "temper_p_tools.h"
#include "digital_filters.h"
#include "pll_tools.h"
#include "ramp_zadanie_tools.h"
#include "uom_tools.h"
#include "synhro_tools.h"
#if (_SIMULATE_AC==1)
#include "sim_model.h"
#endif
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
//#pragma DATA_SECTION(ccc, ".slow_vars")
//int ccc[40] = {0,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1};
#pragma DATA_SECTION(f, ".slow_vars")
FLAG f = FLAG_DEFAULTS;
int cur1=0;
int cur2=0;
unsigned int old_time_edrk1 = 0, old_time_edrk2 = 0, prev_flag_special_mode_rs = 0;
#pragma DATA_SECTION(edrk, ".slow_vars")
EDRK edrk = EDRK_DEFAULT;
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PLUS, MINUS
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
void set_oborots_from_zadat4ik(void)
{
static unsigned int old_time_edrk3 = 0, prev_PROVOROT;
if (!(detect_pause_milisec(100,&old_time_edrk3)))
return;
}
//////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
#define RASCEPITEL_MANUAL_ALWAYS_ON_2 1 // 1
#define TIME_ON_OFF_FOR_IMITATION_RASCEPITEL 50 // 5 <20><><EFBFBD>.
#define TIME_FILTER_UMP_SIGNALS 5 // 0.5 <20><><EFBFBD>
#define TIME_FILTER_ALL_SIGNALS 5 // 0.5 <20><><EFBFBD>
#pragma DATA_SECTION(count_wait_filter, ".slow_vars")
unsigned int count_wait_filter[16] = {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0};
unsigned int counter_imit_rascepitel = 0;
void update_input_edrk(void)
{
static unsigned int flag_imit_rascepitel = 0;
static int st1=0;
// ANOTHER PCH
edrk.from_second_pch.bits.RASCEPITEL = !FROM_ING_ANOTHER_RASCEPITEL;
edrk.from_second_pch.bits.MASTER = FROM_ING_ANOTHER_MASTER_PCH;
// ING
#if (_FLOOR6==1)
if (st1==0)
{
edrk.from_zadat4ik.all = 0;
edrk.from_vpu.all = 0;
edrk.from_ing1.bits.ALL_KNOPKA_AVARIA = 0;//!FROM_ALL_KNOPKA_AVARIA;
edrk.from_ing1.bits.BLOCK_IZOL_AVARIA = 0;//!FROM_ING_BLOCK_IZOL_AVARIA;
edrk.from_ing1.bits.BLOCK_IZOL_NORMA = 1;//!FROM_ING_BLOCK_IZOL_NORMA;
edrk.from_ing1.bits.LOCAL_REMOUTE = 1;//0;//!FROM_ING_LOCAL_REMOUTE;
edrk.from_ing1.bits.NAGREV_ON = 1;//!FROM_ING_NAGREV_ON;
edrk.from_ing1.bits.NASOS_NORMA = 1;//!FROM_ING_NASOS_NORMA;
edrk.from_ing1.bits.NASOS_ON = 0;//!FROM_ING_NASOS_ON;
edrk.from_ing1.bits.OHLAD_UTE4KA_WATER = 0;//!FROM_ING_OHLAD_UTE4KA_WATER;
edrk.from_ing1.bits.UPC_24V_NORMA = 1;//!FROM_ING_UPC_24V_NORMA;
edrk.from_ing1.bits.OP_PIT_NORMA = 1;//!FROM_ING_OP_PIT_NORMA;
edrk.from_ing1.bits.VENTIL_ON = 0;//!FROM_ING_VENTIL_ON;
edrk.from_ing1.bits.VIPR_PREDOHR_NORMA = 1;//!FROM_ING_VIPR_PREDOHR_NORMA;
edrk.from_ing1.bits.ZARYAD_ON = 0;//!FROM_ING_ZARYAD_ON;
edrk.from_ing1.bits.ZAZEML_OFF = 1;//!FROM_ING_ZAZEML_OFF;
edrk.from_ing1.bits.ZAZEML_ON = 0;//!FROM_ING_ZAZEML_ON;
edrk.from_ing2.bits.KEY_MINUS = 0;//FROM_ING_OBOROTS_MINUS;
edrk.from_ing2.bits.KEY_PLUS = 0;//!FROM_ING_OBOROTS_PLUS;
edrk.from_ing2.bits.KEY_KVITIR = 0;//FROM_ING_LOCAL_KVITIR;
edrk.from_ing2.bits.KEY_SBOR = 0;//FROM_ING_SBOR_SHEMA;
edrk.from_ing2.bits.KEY_RAZBOR = 0;//FROM_ING_RAZBOR_SHEMA;
// edrk.from_ing1.bits.RASCEPITEL_ON = 0;//FROM_ING_RASCEPITEL_ON_OFF;
// edrk.from_ing2.bits.SOST_ZAMKA = !edrk.to_ing.bits.BLOCK_KEY_OFF;//1;//!FROM_ING_SOST_ZAMKA;
// SHEMA
edrk.from_shema.bits.RAZBOR_SHEMA = 0;//FROM_BSU_RAZBOR_SHEMA;
edrk.from_shema.bits.SBOR_SHEMA = 0;//FROM_BSU_SBOR_SHEMA;
edrk.from_shema.bits.ZADA_DISPLAY = 0;//!FROM_BSU_ZADA_DISPLAY;
edrk.from_shema.bits.SVU = 0;//!FROM_BSU_SVU;
// edrk.from_shema.bits.KNOPKA_AVARIA = FROM_ALL_KNOPKA_AVARIA;
edrk.from_shema.bits.QTV_ON_OFF = 0;//!FROM_SHEMA_QTV_ON_OFF;
edrk.from_shema.bits.UMP_ON_OFF = 0;//!FROM_SHEMA_UMP_ON_OFF;
edrk.from_shema.bits.READY_UMP = 1;//!FROM_SHEMA_READY_UMP;
edrk.from_shema.bits.SVU_BLOCK_QTV = 0;//!FROM_SVU_BLOCK_QTV;
st1 = 1;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (edrk.to_ing.bits.RASCEPITEL_ON)
flag_imit_rascepitel = 1;
if (edrk.to_ing.bits.RASCEPITEL_OFF)
flag_imit_rascepitel = 0;
edrk.from_ing1.bits.RASCEPITEL_ON = imit_signals_rascepitel(&counter_imit_rascepitel, TIME_ON_OFF_FOR_IMITATION_RASCEPITEL, flag_imit_rascepitel, 0);
/////
edrk.from_ing2.bits.SOST_ZAMKA = !edrk.to_ing.bits.BLOCK_KEY_OFF;
if (edrk.to_ing.bits.NASOS_2_ON || edrk.to_ing.bits.NASOS_1_ON)
{
edrk.from_ing1.bits.VENTIL_ON = 1;
edrk.from_ing1.bits.NASOS_ON = 1;
}
else
{
edrk.from_ing1.bits.VENTIL_ON = 0;
edrk.from_ing1.bits.NASOS_ON = 0;
}
#else
// ZADAT4IK
if (control_station.alive_control_station[CONTROL_STATION_ZADATCHIK_CAN])
edrk.from_zadat4ik.all = Unites[ZADATCHIK_CAN][16];
else
edrk.from_zadat4ik.all = 0;
if (control_station.alive_control_station[CONTROL_STATION_VPU_CAN])
edrk.from_vpu.all = Unites[VPU_CAN][16];
else
edrk.from_vpu.all = 0;
edrk.from_ing1.bits.ALL_KNOPKA_AVARIA = !FROM_ALL_KNOPKA_AVARIA;
edrk.from_ing1.bits.BLOCK_IZOL_AVARIA = !FROM_ING_BLOCK_IZOL_AVARIA;
edrk.from_ing1.bits.BLOCK_IZOL_NORMA = !FROM_ING_BLOCK_IZOL_NORMA;
edrk.from_ing1.bits.LOCAL_REMOUTE = !FROM_ING_LOCAL_REMOUTE;
edrk.from_ing1.bits.NAGREV_ON = !FROM_ING_NAGREV_ON;
edrk.from_ing1.bits.NASOS_NORMA = !FROM_ING_NASOS_NORMA;
edrk.from_ing1.bits.NASOS_ON = !FROM_ING_NASOS_ON;
edrk.from_ing1.bits.OHLAD_UTE4KA_WATER = !FROM_ING_OHLAD_UTE4KA_WATER;
edrk.from_ing1.bits.UPC_24V_NORMA = !FROM_ING_UPC_24V_NORMA;
edrk.from_ing1.bits.OP_PIT_NORMA = !FROM_ING_OP_PIT_NORMA;
edrk.from_ing1.bits.VENTIL_ON = !FROM_ING_VENTIL_ON;
edrk.from_ing1.bits.VIPR_PREDOHR_NORMA = !FROM_ING_VIPR_PREDOHR_NORMA;
edrk.from_ing1.bits.ZARYAD_ON = !FROM_ING_ZARYAD_ON;
edrk.from_ing1.bits.ZAZEML_OFF = !FROM_ING_ZAZEML_OFF;
edrk.from_ing1.bits.ZAZEML_ON = !FROM_ING_ZAZEML_ON;
edrk.from_ing2.bits.KEY_MINUS = FROM_ING_OBOROTS_MINUS;
edrk.from_ing2.bits.KEY_PLUS = !FROM_ING_OBOROTS_PLUS;
edrk.from_ing2.bits.KEY_KVITIR = FROM_ING_LOCAL_KVITIR;
edrk.from_ing2.bits.KEY_SBOR = FROM_ING_SBOR_SHEMA;
edrk.from_ing2.bits.KEY_RAZBOR = FROM_ING_RAZBOR_SHEMA;
#if(RASCEPITEL_MANUAL_ALWAYS_ON_2)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (edrk.to_ing.bits.RASCEPITEL_ON)
flag_imit_rascepitel = 1;
if (edrk.to_ing.bits.RASCEPITEL_OFF)
flag_imit_rascepitel = 0;
edrk.from_ing1.bits.RASCEPITEL_ON = imit_signals_rascepitel(&counter_imit_rascepitel, TIME_ON_OFF_FOR_IMITATION_RASCEPITEL, flag_imit_rascepitel, 0);
#else
edrk.from_ing1.bits.RASCEPITEL_ON = FROM_ING_RASCEPITEL_ON_OFF;
#endif
edrk.from_ing2.bits.SOST_ZAMKA = !FROM_ING_SOST_ZAMKA;
// SHEMA
edrk.from_shema.bits.RAZBOR_SHEMA = FROM_BSU_RAZBOR_SHEMA;
edrk.from_shema.bits.SBOR_SHEMA = FROM_BSU_SBOR_SHEMA;
if (edrk.from_shema.bits.RAZBOR_SHEMA==1 && edrk.from_shema.bits.SBOR_SHEMA)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
edrk.from_shema.bits.RAZBOR_SHEMA = 0;
edrk.from_shema.bits.SBOR_SHEMA = 0;
}
edrk.from_shema_filter.bits.RAZBOR_SHEMA = filter_digital_input( edrk.from_shema_filter.bits.RAZBOR_SHEMA,
&count_wait_filter[0],
TIME_FILTER_ALL_SIGNALS,
edrk.from_shema.bits.RAZBOR_SHEMA);
edrk.from_shema_filter.bits.SBOR_SHEMA = filter_digital_input( edrk.from_shema_filter.bits.SBOR_SHEMA,
&count_wait_filter[1],
TIME_FILTER_ALL_SIGNALS,
edrk.from_shema.bits.SBOR_SHEMA);
edrk.from_shema.bits.ZADA_DISPLAY = !FROM_BSU_ZADA_DISPLAY;
edrk.from_shema_filter.bits.ZADA_DISPLAY = filter_digital_input( edrk.from_shema_filter.bits.ZADA_DISPLAY,
&count_wait_filter[2],
TIME_FILTER_ALL_SIGNALS,
edrk.from_shema.bits.ZADA_DISPLAY);
edrk.from_shema.bits.SVU = !FROM_BSU_SVU;
edrk.from_shema_filter.bits.SVU = filter_digital_input( edrk.from_shema_filter.bits.SVU,
&count_wait_filter[3],
TIME_FILTER_ALL_SIGNALS,
edrk.from_shema.bits.SVU);
// edrk.from_shema.bits.KNOPKA_AVARIA = FROM_ALL_KNOPKA_AVARIA;
edrk.from_shema.bits.QTV_ON_OFF = !FROM_SHEMA_QTV_ON_OFF;
edrk.from_shema_filter.bits.QTV_ON_OFF = filter_digital_input( edrk.from_shema_filter.bits.QTV_ON_OFF,
&count_wait_filter[4],
TIME_FILTER_ALL_SIGNALS,
edrk.from_shema.bits.QTV_ON_OFF);
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FROM_SHEMA_UMP_ON_OFF
// edrk.local_ump_on_off = !FROM_SHEMA_UMP_ON_OFF;
//
// if (edrk.local_ump_on_off)
// {
// if (edrk.local_ump_on_off_count>=TIME_FILTER_UMP_SIGNALS)
// edrk.from_shema.bits.UMP_ON_OFF = 1;
// else
// edrk.local_ump_on_off_count++;
// }
// else
// {
// if (edrk.local_ump_on_off_count==0)
// edrk.from_shema.bits.UMP_ON_OFF = 0;
// else
// edrk.local_ump_on_off_count--;
// }
//
//
edrk.from_shema.bits.UMP_ON_OFF = !FROM_SHEMA_UMP_ON_OFF;
edrk.from_shema_filter.bits.UMP_ON_OFF = filter_digital_input( edrk.from_shema_filter.bits.UMP_ON_OFF,
&count_wait_filter[5],
TIME_FILTER_UMP_SIGNALS,
edrk.from_shema.bits.UMP_ON_OFF);
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FROM_SHEMA_READY_UMP
// edrk.local_ready_ump = !FROM_SHEMA_READY_UMP;
//
// if (edrk.local_ready_ump)
// {
// if (edrk.local_ready_ump_count>=TIME_FILTER_UMP_SIGNALS)
// edrk.from_shema.bits.READY_UMP = 1;
// else
// edrk.local_ready_ump_count++;
// }
// else
// {
// if (edrk.local_ready_ump_count==0)
// edrk.from_shema.bits.READY_UMP = 0;
// else
// edrk.local_ready_ump_count--;
// }
//
edrk.from_shema.bits.READY_UMP = !FROM_SHEMA_READY_UMP;
edrk.from_shema_filter.bits.READY_UMP = filter_digital_input( edrk.from_shema_filter.bits.READY_UMP,
&count_wait_filter[6],
TIME_FILTER_UMP_SIGNALS,
edrk.from_shema.bits.READY_UMP);
edrk.from_shema.bits.SVU_BLOCK_QTV = !FROM_SVU_BLOCK_QTV;
edrk.from_shema_filter.bits.SVU_BLOCK_QTV = filter_digital_input( edrk.from_shema_filter.bits.SVU_BLOCK_QTV,
&count_wait_filter[7],
TIME_FILTER_ALL_SIGNALS,
edrk.from_shema.bits.SVU_BLOCK_QTV);
#endif
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
void get_where_oborots(void)
{
//// if (CAN_timeout[get_real_out_mbox(MPU_TYPE_BOX,0)-1]==0)
// if (CAN_timeout[get_real_in_mbox(MPU_TYPE_BOX,0)]==0)
// {
// edrk.W_from_SVU = modbus_table_can_in[14].all;
// edrk.W_from_DISPLAY = modbus_table_can_in[16].all;
// }
// else
// {
// edrk.W_from_SVU = 0;
// edrk.W_from_DISPLAY = 0;
// }
//
//
//
//
// if (edrk.from_shema.bits.SVU)
// {
// edrk.W_from_all = edrk.W_from_SVU;
// edrk.W_from_ZADAT4IK = edrk.W_from_all;
// }
// else
// {
// if (edrk.from_shema.bits.ZADA_DISPLAY)
// {
// edrk.W_from_all = edrk.W_from_DISPLAY;
// edrk.W_from_ZADAT4IK = edrk.W_from_all;
// }
// else
// edrk.W_from_all = edrk.W_from_ZADAT4IK;
// }
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
unsigned int toggle_status_lamp(unsigned int bb1, unsigned int flag)
{
if (bb1==1 && flag==0)
{
return 0;
}
if (bb1==0 && flag==0)
{
return 0;
}
if (bb1==1 && flag==1)
{
return 0;
}
if (bb1==0 && flag==1)
{
return 1;
}
return 0;
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
void update_output_edrk(void)
{
unsigned int b;
static unsigned int time_toggle1=0,time_toggle2=0;
//to ingetim
TO_ING_NAGREV_OFF = !edrk.to_ing.bits.NAGREV_OFF;
TO_ING_NASOS_1_ON = !edrk.to_ing.bits.NASOS_1_ON;
TO_ING_NASOS_2_ON = !edrk.to_ing.bits.NASOS_2_ON;
// TO_ING_RESET_BLOCK_IZOL = !edrk.to_ing.bits.RESET_BLOCK_IZOL;
TO_ING_SMALL_LAMPA_AVARIA = edrk.to_ing.bits.SMALL_LAMPA_AVARIA;
if (edrk.disable_rascepitel_work)
{
}
else
{
TO_ING_RASCEPITEL_OFF = !edrk.to_ing.bits.RASCEPITEL_OFF;
TO_ING_RASCEPITEL_ON = !edrk.to_ing.bits.RASCEPITEL_ON;
}
// ANOTHER PCH
TO_SECOND_PCH_MASTER = edrk.to_second_pch.bits.MASTER;
TO_SECOND_PCH_ALARM = !edrk.to_second_pch.bits.ALARM;
//to_shema
//
//#if (ENABLE_USE_QTV==1)
// TO_STEND_QM_ON_INVERS = !edrk.to_shema.bits.QTV_ON;
//#endif
TO_ING_LAMPA_ZARYAD = !edrk.Status_Ready.bits.Batt;
TO_ING_ZARYAD_ON = !edrk.to_ing.bits.ZARYAD_ON;
TO_ING_BLOCK_KEY_OFF = !edrk.to_ing.bits.BLOCK_KEY_OFF;
#if (MODE_QTV_UPRAVLENIE==1)
TO_SHEMA_QTV_ON_OFF = !edrk.to_shema.bits.QTV_ON_OFF;
#endif
#if (MODE_QTV_UPRAVLENIE==2)
TO_SHEMA_QTV_OFF = !edrk.to_shema.bits.QTV_OFF;
TO_SHEMA_QTV_ON = !edrk.to_shema.bits.QTV_ON;
#endif
TO_SHEMA_ENABLE_QTV = !edrk.to_shema.bits.ENABLE_QTV;
TO_SHEMA_UMP_ON_OFF = !edrk.to_shema.bits.UMP_ON_OFF;
//lamps APL
// if (edrk.Sbor)// && edrk.from_ing.bits2.GED_NAMAGNI4EN==0)
// {
// if (edrk.Status_Ready.bits.ready5==0)
// edrk.to_zadat4ik.APL_LAMS0.bits.SBOR_SIL_SHEMA = 1;
// else
// edrk.to_zadat4ik.APL_LAMS0.bits.SBOR_SIL_SHEMA = 0;
// }
// else
// {
// edrk.to_zadat4ik.APL_LAMS0.bits.SBOR_SIL_SHEMA = 0;
// }
edrk.to_vpu.BIG_LAMS.bits.GOTOV2 = edrk.Status_Ready.bits.ready_final;
edrk.to_vpu.BIG_LAMS.bits.PEREGRUZKA = edrk.to_zadat4ik.BIG_LAMS.bits.OGRAN_POWER;
edrk.to_vpu.BIG_LAMS.bits.PODDERG_OBOROTS = 0;//
edrk.to_vpu.BIG_LAMS.bits.VPU = edrk.to_zadat4ik.APL_LAMS0.bits.OBOROT_VPU;
}
///////////////////////////////////////////////
///////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
void update_lamp_alarm(void)
{
if ((edrk.errors.e0.all)
|| (edrk.errors.e1.all)
|| (edrk.errors.e2.all)
|| (edrk.errors.e3.all)
|| (edrk.errors.e4.all)
|| (edrk.errors.e5.all)
|| (edrk.errors.e6.all)
|| (edrk.errors.e7.all)
|| (edrk.errors.e8.all)
|| (edrk.errors.e9.all)
|| (edrk.errors.e10.all)
|| (edrk.errors.e11.all)
|| (edrk.errors.e12.all)
)
{
edrk.to_ing.bits.SMALL_LAMPA_AVARIA = 1;
// edrk.to_second_pch.bits.ALARM = 1;
edrk.summ_errors = 1;
edrk.Stop |= 1;
}
else
{
edrk.to_ing.bits.SMALL_LAMPA_AVARIA = 0;
edrk.to_second_pch.bits.ALARM = 0;
edrk.summ_errors = 0;
}
}
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
#define TIME_WAIT_RELE_QTV_ON 30 //2 sec
#define TIME_WAIT_RELE_QTV_OFF 30 //2 sec
#define TIME_WAIT_ANSWER_QTV_ON TIME_WAIT_ERROR_QTV //150 //15 sec
#define TIME_WAIT_ANSWER_QTV_OFF 50 //4 sec
///////////////////////////////////////////////
int qtv_on_off(unsigned int flag)
{
static unsigned int time_wait_rele_on_qtv=0;
static unsigned int time_wait_rele_off_qtv=0;
static unsigned int time_wait_answer_on_qtv=0;
static unsigned int time_wait_answer_off_qtv=0;
static unsigned int count_err_on = 0;
int cmd_qtv=0;//,cmd_p2=0;
static int QTV_Ok = 0;
static int prev_error = 0;
cmd_qtv = 0;
// cmd_p2 = 0;
if ( flag==1 && edrk.summ_errors==0)
{
cmd_qtv = 1;
}
else
{
cmd_qtv = 0;
}
edrk.cmd_to_qtv = cmd_qtv;
if (cmd_qtv)
{
edrk.to_shema.bits.ENABLE_QTV = 1;
edrk.to_shema.bits.QTV_OFF = 1;
if ((pause_detect_error(&time_wait_rele_on_qtv,TIME_WAIT_RELE_QTV_ON,1)==0) && edrk.from_shema_filter.bits.QTV_ON_OFF==0)
{
#if (MODE_QTV_UPRAVLENIE==2)
edrk.to_shema.bits.QTV_ON = 1;
#endif
#if (MODE_QTV_UPRAVLENIE==1)
edrk.to_shema.bits.QTV_ON_OFF = 1;
#endif
}
else
edrk.to_shema.bits.QTV_ON = 0;
if (pause_detect_error(&time_wait_answer_on_qtv,TIME_WAIT_ANSWER_QTV_ON,1)==0)
{
if (edrk.from_shema_filter.bits.QTV_ON_OFF==1)
QTV_Ok = 1;
}
else
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (edrk.from_shema_filter.bits.QTV_ON_OFF==0)
{
#if (WORK_ON_STEND_D)
if (pause_detect_error(&count_err_on,TIME_WAIT_ANSWER_QTV_ON,1))
{
edrk.errors.e6.bits.QTV_ERROR_NOT_ANSWER |= 1;
QTV_Ok = 0;
}
#else
edrk.errors.e6.bits.QTV_ERROR_NOT_ANSWER |= 1;
QTV_Ok = 0;
#endif
}
else
count_err_on = 0;
}
time_wait_rele_off_qtv = 0;
time_wait_answer_off_qtv = 0;
}
else
{
QTV_Ok = 0;
edrk.to_shema.bits.ENABLE_QTV = 0;
time_wait_rele_on_qtv = 0;
time_wait_answer_on_qtv = 0;
edrk.to_shema.bits.QTV_ON = 0;
edrk.to_shema.bits.QTV_ON_OFF = 0;
// if (pause_detect_error(&time_wait_rele_off_qtv,TIME_WAIT_RELE_QTV_OFF,1)==0)
// edrk.to_shema.bits.QTV_OFF = 1;
// else
edrk.to_shema.bits.QTV_OFF = 0;
if (pause_detect_error(&time_wait_answer_off_qtv,TIME_WAIT_ANSWER_QTV_OFF,1)==0)
{
}
else
{
if (edrk.from_shema_filter.bits.QTV_ON_OFF==1)
edrk.errors.e6.bits.QTV_ERROR_NOT_ANSWER |= 1;
}
if (prev_error!=edrk.summ_errors && edrk.summ_errors)
{
if (pause_detect_error(&time_wait_rele_off_qtv,TIME_WAIT_RELE_QTV_OFF,1)==1)
time_wait_rele_off_qtv = 0;
}
}
prev_error = edrk.summ_errors;
return (QTV_Ok);
}
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
void detect_kvitir_from_all(void)
{
static int prev_kvitir=0;
edrk.Kvitir = control_station.active_array_cmd[CONTROL_STATION_CMD_CHECKBACK]
|| edrk.from_ing2.bits.KEY_KVITIR
|| edrk.from_zadat4ik.bits.KVITIR;
/*
if (edrk.RemouteFromRS)
edrk.Kvitir = edrk.KvitirRS;
if (edrk.RemouteFromVPU)
edrk.Kvitir = edrk.KvitirVPU;
if (edrk.RemouteFromDISPLAY)
edrk.Kvitir = edrk.from_display.bits.KVITIR;//edrk.KvitirDISPLAY;
if (edrk.RemouteFromMPU)
edrk.Kvitir = edrk.KvitirMPU;
*/
if (edrk.Kvitir==1 && prev_kvitir==0)
{
if (edrk.Status_Ready.bits.ready_final==0 && edrk.Go==0 && edrk.Stop == 1)
{
edrk.KvitirProcess = 1;
project.clear_errors_all_plates();
clear_errors();
edrk.KvitirProcess = 0;
}
clear_warnings();
/* edrk.KvitirDISPLAY = 0;
edrk.KvitirVPU = 0;
edrk.KvitirMPU = 0;
edrk.KvitirSVU = 0;
edrk.KvitirRS = 0;
*/
}
prev_kvitir = edrk.Kvitir;
}
///////////////////////////////////////////////
unsigned int get_ready_1(void)
{
unsigned int r1, r2;
if (project.cds_in[0].status == component_Ready
&& project.cds_in[1].status == component_Ready
&& project.cds_out[0].status == component_Ready
&& project.cds_tk[0].status == component_Ready
&& project.cds_tk[1].status == component_Ready
&& project.cds_tk[2].status == component_Ready
&& project.cds_tk[3].status == component_Ready
&& project.adc[0].status == component_Ready
&& project.adc[1].status == component_Ready
&& project.hwp[0].status == component_Ready
)
r2 = 1;
else
r2 = 0;
r1 = (edrk.ms.ready1 && edrk.from_ing1.bits.NASOS_NORMA
&& edrk.from_ing1.bits.ZAZEML_ON==0 && edrk.from_ing1.bits.ZAZEML_OFF==1
&& edrk.from_ing1.bits.VIPR_PREDOHR_NORMA
&& edrk.from_ing1.bits.BLOCK_IZOL_NORMA
&& edrk.from_ing1.bits.OP_PIT_NORMA
&& edrk.from_ing1.bits.UPC_24V_NORMA
&& r2);
return r1;
}
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
void set_zadanie_u_charge(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);
}
///////////////////////////////////////////////
///////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///////////////////////////////////////////////
///////////////////////////////////////////////
////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
#define TIME_WAIT_SBOR_1 1
#define TIME_WAIT_SBOR_2 3
void get_sumsbor_command(void)
{
static unsigned int prev_SBOR_SHEMA = 0;
static unsigned int prev_SBOR_SHEMA_ANOTHER_BS = 0;
unsigned int SBOR_SHEMA_ANOTHER_BS = 0;
static unsigned int Sbor, first=1, w_sbor = 0, Sbor_f = 0;
Sbor = edrk.SumSbor;
if (Sbor == 0)
edrk.run_razbor_shema = 0;
SBOR_SHEMA_ANOTHER_BS = read_cmd_sbor_from_bs();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (edrk.Status_Ready.bits.ImitationReady2==0 &&
control_station.active_array_cmd[CONTROL_STATION_CMD_CHARGE]==1 && (prev_SBOR_SHEMA==0)
&& edrk.from_ing1.bits.ALL_KNOPKA_AVARIA==0 && edrk.summ_errors==0
&& control_station.active_array_cmd[CONTROL_STATION_CMD_UNCHARGE]==0
)
{
Sbor = 1;
}
if (control_station.active_array_cmd[CONTROL_STATION_CMD_UNCHARGE]==1
// || edrk.from_shema_filter.bits.RAZBOR_SHEMA // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
)
{
edrk.run_razbor_shema = 1;
// Sbor = 0;
}
if (edrk.StartGEDfromZadanie==0 && edrk.run_razbor_shema)
Sbor = 0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>?
if (SBOR_SHEMA_ANOTHER_BS==0 && prev_SBOR_SHEMA_ANOTHER_BS==1)
{
Sbor = 0;
}
prev_SBOR_SHEMA = control_station.active_array_cmd[CONTROL_STATION_CMD_CHARGE];
prev_SBOR_SHEMA_ANOTHER_BS = SBOR_SHEMA_ANOTHER_BS;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
if (edrk.from_ing1.bits.ALL_KNOPKA_AVARIA || edrk.summ_errors)
{
Sbor = 0;
}
if (Sbor)
{
// if (edrk.flag_second_PCH == 0)
// {
// if (w_sbor<TIME_WAIT_SBOR_1)
// w_sbor++;
// else
// Sbor_f = 1;
// }
// else
// {
// if (w_sbor<TIME_WAIT_SBOR_2)
// w_sbor++;
// else
// Sbor_f = 1;
// }
Sbor_f = 1;
}
else
{
Sbor_f = 0;
w_sbor = 0;
}
/////////////////////////////////
/////////////////////////////////
/////////////////////////////////
if (Sbor_f)
{
if (first)
{
if (optical_read_data.data.cmd.bit.ready_cmd==CODE_READY_CMD_READY1TO2) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
edrk.flag_another_bs_first_ready12 = 1;
else
edrk.flag_this_bs_first_ready12 = 1;
}
first = 0;
}
else
{
edrk.flag_another_bs_first_ready12 = 0;
edrk.flag_this_bs_first_ready12 = 0;
first = 1;
}
edrk.SumSbor = Sbor_f;
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
void edrk_init(void)
{
edrk.Uzad_max = _IQ(K_STATOR_MAX); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = DEF_PERIOD_MIN_MKS
edrk.iq_bpsi_normal = _IQ(BPSI_NORMAL/NORMA_FROTOR);
// edrk.iq_bpsi_max = _IQ(BPSI_MAXIMAL/NORMA_FROTOR);
// edrk.iq_f_provorot = _IQ(F_PROVOROT/NORMA_FROTOR);
init_simple_scalar();
edrk.flag_enable_update_hmi = 1;
edrk.zadanie.ZadanieU_Charge = NOMINAL_U_ZARYAD;
edrk.zadanie.iq_ZadanieU_Charge = _IQ(NOMINAL_U_ZARYAD/NORMA_ACP);
edrk.zadanie.iq_set_break_level = _IQ(NOMINAL_U_BREAK_LEVEL/NORMA_ACP);
control_station.setup_time_detect_active[CONTROL_STATION_TERMINAL_RS232] = 50;
#if (_SIMULATE_AC==1)
sim_model_init();
#endif
}
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
void edrk_init_variables(void) {
unsigned int i = 0, size_data_logs = 0;
int *pf = (int*)&f;
for (i = 0; i < sizeof(f) / sizeof(int); i++) {
*(pf + i) = 0;
}
init_profile_interrupt();
edrk_clear_cmd_ukss();
edrk.flag_second_PCH = get_adr_pcb_controller();
edrk.number_can_box_terminal_cmd = 1;
edrk.number_can_box_terminal_oscil = 0;
edrk.buildDay = build_day;
edrk.buildMonth = build_month;
edrk.buildYear = build_year;
/* if (edrk.flag_second_PCH==0)
{
edrk.number_can_box_terminal_cmd = 1;
edrk.number_can_box_terminal_oscil = 0;
}
else
{
edrk.number_can_box_terminal_cmd = 3;
edrk.number_can_box_terminal_oscil = 2;
}
*/
// clear_all_i_phase();
#if(SENSOR_ALG==SENSOR_ALG_23550)
rotorInit();
#endif
#if(SENSOR_ALG==SENSOR_ALG_22220)
// 22220
rotorInit_22220();
#endif
clear_table_remoute();
initModbusTable();
clear_modbus_table_in();
clear_modbus_table_out();
// init_global_time_struct(FREQ_PWM);
// fillLogArea();
oscil_can.clear(&oscil_can);
oscil_can.number_can_box_terminal_oscil = edrk.number_can_box_terminal_oscil;
oscil_can.number_can_box_terminal_cmd = edrk.number_can_box_terminal_cmd;
control_station.clear(&control_station);
init_detect_overloads();
edrk_init();
size_data_logs = prepare_data_to_logs();
initLogSize(size_data_logs, size_data_logs );
init_ramp_all_zadanie();
init_analog_protect_levels();
init_detect_overloads();
init_50hz_input_net50hz();
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 (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();
init_Uin_rms();
}
//////////////////////////////////////////////////////////
void edrk_init_before_loop(void)
{
#if (MODE_DISABLE_ENABLE_WDOG==1)
stop_wdog();
#else
#if (_FLOOR6==1)
#else
start_wdog();
#endif
#endif
disable_flag_special_mode_rs = 0;
}
//////////////////////////////////////////////////////////
#define FREQ_TIMER_3 (FREQ_PWM*2)
void edrk_init_before_main(void)
{
static int f_cmd1 = 0;
static int f_cmd2 = 0;
static int f_cmd3 = 0;
static int p_f_cmd1 = 0;
static int p_f_cmd2 = 0;
static int p_f_cmd3 = 0;
volatile int final_code = 0;
int i = 0, k = 0;
setup_sync_line();
edrk.disable_interrupt_sync = -1;
edrk_init_variables();
////////////////////////////////////////
// global timer
////////////////////////////////////////
init_global_time_struct(FREQ_TIMER_3);
init_evb_timer3(FREQ_TIMER_3,&global_time_interrupt);
start_evb_timer3();// run global_time_interrupt
///////////////////////////////////////
/// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 2
/*
while(1)
{
static int f_s_set = 0;
static int f_s_read = 0;
if (f_s_set)
i_sync_pin_on();
else
i_sync_pin_off();
f_s_read = get_status_sync_line();
}
*/
/// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 1
/*
project.enable_all_interrupt();
//start_sync_interrupt();
while(1)
{
static int f_s_set = 0;
static int f_s_read = 0;
if (f_s_set)
i_sync_pin_on();
else
i_sync_pin_off();
f_s_read = get_status_sync_line();
if (f_cmd1 != p_f_cmd1)
{
if (f_cmd1)
{
start_evb_timer3();
}
else
{
stop_evb_timer3();
}
p_f_cmd1 = f_cmd1;
}
if (f_cmd2 != p_f_cmd2)
{
if (f_cmd2)
{
start_eva_timer2();
}
else
{
stop_eva_timer2();
}
p_f_cmd2 = f_cmd2;
}
if (f_cmd3 != p_f_cmd3)
{
if (f_cmd3)
{
start_sync_interrupt();
}
else
{
stop_sync_interrupt();
}
p_f_cmd3 = f_cmd3;
}
}
/// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
*/
project.enable_all_interrupt();
final_code = update_progress_load_hmi(1);
project.disable_all_interrupt();
InitXilinxSpartan2E(&PWM_interrupt_main);
project.enable_all_interrupt();
final_code = update_progress_load_hmi(2);
init_can_box_between_bs1_bs2();
initVectorControl();
/////////////////////////////
if (edrk.flag_second_PCH==0)
InitCan(CAN_BASE_ADR_UNITS_PCH_1, CAN_BASE_ADR_MPU_PCH_1, CAN_BASE_ADR_ALARM_LOG_PCH_1, CAN_BASE_ADR_TERMINAL_PCH_1);
else
InitCan(CAN_BASE_ADR_UNITS_PCH_2, CAN_BASE_ADR_MPU_PCH_2, CAN_BASE_ADR_ALARM_LOG_PCH_2, CAN_BASE_ADR_TERMINAL_PCH_2);
/////////////////////////////
KickDog();
// clear_mem(FAST_LOG);
/*
//TODO: remove (for test)
logpar.start_write_fast_log = 1;
for (k = 0; k < 7000; k++) {
for (i = 0; i < 21; i++) {
if (i==0)
// write_to_mem(FAST_LOG, k);
write_to_mem(FAST_LOG, 0);
else
// write_to_mem(FAST_LOG, 10 + i);
write_to_mem(FAST_LOG, 0);
}
if (logpar.start_write_fast_log) {
get_log_params_count();
logpar.start_write_fast_log = 0;
}
}
//END for test
*/
//Init ADC
// Init_Adc_Variables();
// init_eva_timer2(1000, acp_Handler);
final_code = update_progress_load_hmi(3);
/////////////////////////////////////////
project.read_errors_controller(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADR_ERRORS_TOTAL_INFO
project.init();
// project_prepare_config();
final_code = update_progress_load_hmi(4);
// initRotPlane();
// project_prepare_config();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CDS, ADC, HWP <20> <20>.<2E>.
project.reload_all_plates_with_reset();
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// project.find_all_cds();
project_prepare_config();
project_run_init_all_plates();
project.load_cfg_to_plates();
project.clear_errors_all_plates();
final_code = update_progress_load_hmi(5);
/////////////////////////////////////////////
enable_er0_control();
project.read_errors_controller();
project_read_errors_controller(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADR_ERRORS_TOTAL_INFO
if(project.controller.read.errors.all || project.controller.read.errors_buses.all)
{
xerror(main_er_ID(3),(void *)0);
}
final_code = update_progress_load_hmi(6);
////////////////////////////////////////////
project.reset_errors_controller();
project.read_errors_controller();
project.start_parallel_bus();
project.read_errors_controller();
project.reset_errors_controller();
project.read_errors_controller();
project.stop_parallel_bus();
project.reset_errors_controller();
project.read_errors_controller();
project.start_parallel_bus();
project.read_errors_controller();
final_code = update_progress_load_hmi(7);
////////////////////////////////////////////////
#if (TMSPWMGEN==1)
setup_pwm_out();// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
setup_pwm_int(FREQ_PWM, 0 ,0);
#else //TMSPWMGEN
#if (XPWMGEN==1)
InitXPWM(FREQ_PWM);
stop_wdog();
#else
#error "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>!!!"
#endif //XPWMGEN
#endif //TMSPWMGEN
InitPWM_Variables(edrk.flag_second_PCH);
break_resistor_managment_init(FREQ_PWM);
// start_int13_interrupt();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SYNC
setup_sync_int(); //use timer4
//start_sync_interrupt();
edrk.disable_interrupt_sync = 0;
// pause_1000(100000);
final_code = update_progress_load_hmi(8);
// project.enable_all_interrupt();
// status_interrupts = __enable_interrupts();
// pause_1000(100000);
project.read_errors_controller();
x_parallel_bus_project.read_status(&x_parallel_bus_project);
// err_main = ReadMemory(ADR_ERRORS_TOTAL_INFO);
// if(enable_er0_control() || err_main)
if (project.controller.read.errors.bit.error_pbus
|| project.controller.read.errors_buses.bit.slave_addr_error
|| project.controller.read.errors_buses.bit.count_error_pbus)
{
xerror(xparall_bus_er_ID(2),(void *)0);
project.stop_parallel_bus();
project.reset_errors_controller();
project.read_errors_controller();
project.start_parallel_bus();
project.read_errors_controller();
}
/*
while(1)
{
project.adc[0].read_pbus(&project.adc[0]);
// project.adc[1].read_pbus(&project.adc[1]);
project.cds_tk[3].read_pbus(&project.cds_tk[3]);
project.read_errors_controller();
}
*/
// project_stop_parallel_bus();
project.start_parallel_bus();
x_parallel_bus_project.read_status(&x_parallel_bus_project);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PBUS <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Init_Adc_Variables();
final_code = update_progress_load_hmi(9);
/////////////////////////////
// optical bus timer
/////////////////////////////
if (edrk.flag_second_PCH==0)
init_eva_timer2(FREQ_PWM*20*2, &optical_bus_read_write_interrupt);
if (edrk.flag_second_PCH==1)
init_eva_timer2(FREQ_PWM*20*2, &optical_bus_read_write_interrupt);
//start_eva_timer2();// run global_time_interrupt
/////////////////////////////
/////////////////////////////
// add bus timer
init_eva_timer1(FREQ_PWM*50,&async_pwm_ext_interrupt);
start_eva_timer1();// run global_time_interrupt
/////////////////////////////
run_can_from_mpu();
i_led1_on_off(1);
i_led2_on_off(0);
final_code = update_progress_load_hmi(10);
#if (XPWMGEN==1)
project.enable_int13();
#endif
start_int13_interrupt();
pause_1000(10000);
// project.enable_all_interrupt();
//#if (MODE_DISABLE_ENABLE_WDOG==1)
// stop_wdog();
//#else
// start_wdog();
//#endif
// static unsigned int ccc = 0;
// static STATUS_DATA_READ_OPT_BUS optbus_status = {0};
//
// project.disable_all_interrupt();
// while(1)
// {
//
//
// if (edrk.flag_second_PCH==1)
// {
// project.cds_tk[3].read_pbus(&project.cds_tk[3]);
// optbus_status = optical_bus_get_status_and_read();
// }
// if (edrk.flag_second_PCH==0)
// {
//
// ccc++;
// optical_write_data.data.angle_pwm = ccc;
//
// optical_bus_write();
//
// }
// }
start_sync_interrupt(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SYNC
start_eva_timer2();// run global_time_interrupt optical_bus_read_write_interrupt
start_can_interrupt();
prev_flag_special_mode_rs = flag_special_mode_rs;
}
//////////////////////////////////////////////////////////
void edrk_go_main(void)
{
static int disable_can=0;
static int pbus_cmd=1;
static int prev_pbus_cmd=1;
static int f_reset = 0;
static int np_reset = 0;
static int level_go_main = 0;
if(f_reset)
{
ResetNPeriphPlane(np_reset);
f_reset = 0;
}
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_21_ON;
#endif
// new_fifo_calc_load();
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_23_ON;
#endif
project.read_errors_controller();
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_23_OFF;
#endif
// project.read_all_pbus();
// project.read_all_hwp();
if (edrk.flag_slow_in_main==0 || level_go_main==0)
project.read_all_sbus(); //22 msec
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_23_ON;
#endif
x_parallel_bus_project.read_status(&x_parallel_bus_project);
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_23_OFF;
#endif
// project.write_all_sbus();
//////////////////////
if ((prev_pbus_cmd != pbus_cmd) && pbus_cmd==0)
{
// project.disable_int13();
project.stop_parallel_bus();
}
if ((prev_pbus_cmd != pbus_cmd) && pbus_cmd==1)
{
// project.enable_int13();
project.start_parallel_bus();
}
prev_pbus_cmd = pbus_cmd;
prev_flag_special_mode_rs = flag_special_mode_rs;
/////////////////////
if (flag_special_mode_rs==0)
{
xpwm_time.disable_sync_out = 0;
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_22_ON;
#endif
// if (level_go_main==1)
project.read_all_hwp(); //800 mks
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_23_ON;
#endif
if (edrk.flag_slow_in_main==0 || level_go_main==20)
project.write_all_sbus(); //5msec
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_23_OFF;
#endif
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_22_OFF;
#endif
run_edrk();
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_23_ON;
#endif
// if (at==1)
// {
// SendAll2SecondBS();
// oscil_can.send(&oscil_can);
// at=0;
// }
//<2F><><EFBFBD><EFBFBD><EFBFBD> <20><> CAN
if (disable_can==0)
CAN_may_be_send_cycle_fifo();
}
else
{
xpwm_time.disable_sync_out = 1;
project.read_all_pbus();
project.read_all_hwp();
project.write_all_sbus();
// project.disable_int13();
RS232_WorkingWith(0,1,0);
}
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_23_OFF;
#endif
#if(_ENABLE_PWM_LINES_FOR_TESTS_RS)
PWM_LINES_TK_21_OFF;
#endif
level_go_main++;
if (level_go_main>=40)
level_go_main = 0;
}
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//#pragma CODE_SECTION(get_start_ged_from_zadanie,".fast_run");
int get_start_ged_from_zadanie(void)
{
// uf const
if (edrk.Mode_ScalarVectorUFConst == ALG_MODE_UF_CONST)
{
if (edrk.zadanie.iq_fzad_rmp!=0 && edrk.zadanie.iq_kzad_rmp!=0)
return 1;
else
return 0;
}
else
// scalar oborots
if (edrk.Mode_ScalarVectorUFConst == ALG_MODE_SCALAR_OBOROTS)
{
if (edrk.MasterSlave==MODE_SLAVE)
{
if (edrk.zadanie.iq_Izad_rmp!=0
&& edrk.zadanie.iq_limit_power_zad_rmp!=0)
return 1;
else
return 0;
}
else
{
if (edrk.zadanie.iq_oborots_zad_hz_rmp!=0 && edrk.zadanie.iq_Izad_rmp!=0
&& edrk.zadanie.iq_power_zad_rmp!=0 && edrk.zadanie.iq_limit_power_zad_rmp!=0)
return 1;
else
return 0;
}
}
else
// scalar power
if (edrk.Mode_ScalarVectorUFConst == ALG_MODE_SCALAR_POWER)
{
if (edrk.zadanie.iq_oborots_zad_hz_rmp!=0 && edrk.zadanie.iq_Izad_rmp!=0
&& edrk.zadanie.iq_power_zad_rmp!=0 && edrk.zadanie.iq_limit_power_zad_rmp!=0)
return 1;
else
return 0;
}
else
// foc oborots
if (edrk.Mode_ScalarVectorUFConst == ALG_MODE_FOC_OBOROTS)
{
if (edrk.zadanie.iq_oborots_zad_hz_rmp!=0 && edrk.zadanie.iq_Izad_rmp!=0
&& edrk.zadanie.iq_power_zad_rmp!=0 && edrk.zadanie.iq_limit_power_zad_rmp!=0)
return 1;
else
return 0;
}
else
// foc power
if (edrk.Mode_ScalarVectorUFConst == ALG_MODE_FOC_POWER)
{
if (edrk.zadanie.iq_oborots_zad_hz_rmp!=0 && edrk.zadanie.iq_Izad_rmp!=0
&& edrk.zadanie.iq_power_zad_rmp!=0 && edrk.zadanie.iq_limit_power_zad_rmp!=0)
return 1;
else
return 0;
}
else
{
return 0;
}
}
//////////////////////////////////////////////////////////
void cross_stend_automats(void)
{
unsigned int g;
edrk.to_shema.bits.CROSS_UMP_ON_OFF = 0;
edrk.to_shema.bits.CROSS_QTV_ON_OFF = 0;
}
#define MAX_ERRORS_DETECT_CHANGE_ACTIVE_CONTROL 50
void check_change_post_upravl(void)
{
static int prev_active_post_upravl = -1, prev_active_post_upravl_another_bs = -1;
int active_post_upravl = -1, active_post_upravl_another_bs = -1;
static unsigned int count_err = 0;
active_post_upravl = get_code_active_post_upravl();
active_post_upravl_another_bs = edrk.active_post_upravl_another_bs;
if (edrk.Status_Ready.bits.ready_final && edrk.Ready2_another_bs)
{
if ((active_post_upravl_another_bs==0 || active_post_upravl==0) && (active_post_upravl==2 || active_post_upravl_another_bs==2))
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><> <20> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
edrk.errors.e9.bits.CHANGE_ACTIVE_CONTROL_TO_LOCAL_FROM_SVU |=
filter_err_count(&count_err,
MAX_ERRORS_DETECT_CHANGE_ACTIVE_CONTROL,
1,
0);
}
else
count_err = 0;
}
prev_active_post_upravl = active_post_upravl;
prev_active_post_upravl_another_bs = active_post_upravl_another_bs;
edrk.active_post_upravl = active_post_upravl;
}
int get_code_active_post_upravl(void)
{
if (control_station.active_control_station[CONTROL_STATION_TERMINAL_RS232])
return 3;
else
if (control_station.active_control_station[CONTROL_STATION_TERMINAL_CAN])
return 4;
else
if (control_station.active_control_station[CONTROL_STATION_INGETEAM_PULT_RS485])//(edrk.RemouteFromDISPLAY)
return 0;
else
if (control_station.active_control_station[CONTROL_STATION_MPU_KEY_CAN])
return 5;
else
if (control_station.active_control_station[CONTROL_STATION_ZADATCHIK_CAN])
return 6;
else
if (control_station.active_control_station[CONTROL_STATION_VPU_CAN])
return 1;
else
if (control_station.active_control_station[CONTROL_STATION_MPU_SVU_CAN])
return 2;
else
return 10; //error
}
#define MAX_COUNT_DETECTS_ZERO_U_ZPT 5
void auto_detect_zero_u_zpt(void)
{
static unsigned int old_time_u_zpt1=0, count_detects = 0, flag_detect_zero_u_zpt = 0;
static _iq prev_uzpt1=0;
static _iq prev_uzpt2=0;
static _iq delta_u = _IQ(3.0/NORMA_ACP);
static _iq minimal_detect_u = _IQ(40.0/NORMA_ACP);
if (edrk.SumSbor==0 && flag_detect_zero_u_zpt==0)
{
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Uzpt
if (detect_pause_sec(5,&old_time_u_zpt1))
{
if ( filter.iqU_1_long>=minimal_detect_u ||
filter.iqU_2_long>=minimal_detect_u ||
(prev_uzpt1-filter.iqU_1_long)>=delta_u ||
(prev_uzpt2-filter.iqU_2_long)>=delta_u )
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
count_detects = 0;
}
else
{
if (count_detects<MAX_COUNT_DETECTS_ZERO_U_ZPT)
count_detects++;
else
{
if (flag_detect_zero_u_zpt==0)
{
if (filter.iqU_1_long<=minimal_detect_u &&
filter.iqU_2_long<=minimal_detect_u)
{
analog_zero.iqU_1 = filter.iqU_1_long;
analog_zero.iqU_2 = filter.iqU_2_long;
}
}
flag_detect_zero_u_zpt = 1;
}
}
prev_uzpt1 = filter.iqU_1_long;
prev_uzpt2 = filter.iqU_2_long;
} // 1 sec end
}
else
{
if (flag_detect_zero_u_zpt)
{
if (filter.iqU_1_long<-delta_u || filter.iqU_2_long<-delta_u)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
flag_detect_zero_u_zpt = 0;
analog_zero.iqU_1 = 0;
analog_zero.iqU_2 = 0;
}
}
count_detects = 0;
}
}
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
void reinit_before_sbor(void)
{
static unsigned int prev_sbor = 0;
if (edrk.SumSbor && edrk.SumSbor!=prev_sbor )
{
init_50hz_input_net50hz();
init_all_limit_koeffs();
}
prev_sbor = edrk.SumSbor;
}
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
#define MINIMAL_POWER_TO_DISPLAY 10 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10 <20><><EFBFBD>
#define PAUSE_COMUNICATION 100
void run_edrk(void)
{
// static unsigned int prev_SumSbor = 0, prev_AllStart = 0, prev_VozbudOnOff = 0, prev_SBOR_SHEMA_VPU = 0,prev_SBOR_SHEMA_RS=0, prev_SBOR_SHEMA_DISPLAY = 0;
int ff =0;
static unsigned int filter_count_error_control_station_select_active = 0;
static int flag_enable_update_mpu = 1;
static unsigned int external_cmd_alarm_log = 0;
static int prev_enable_pwm_test_lines=0;
int power_kw_full = 0;
float max_oborots, local_oborots, local_power, max_power;
static float float_oborots = 0, koef_p1 = 0, koef_p2 = 0, koef_p3 = 27.391304347826086956521739130435;
static unsigned int prev_rs_a_count_recive_ok = 0;
static unsigned int pause_comunication = PAUSE_COMUNICATION;
static unsigned int time_pause_modbus_can_zadatchik_vpu = TIME_PAUSE_MODBUS_CAN_ZADATCHIK_VPU;
static unsigned int time_pause_modbus_can_ukss_setup = TIME_PAUSE_MODBUS_CAN_UKSS_SETUP;
static unsigned int time_pause_modbus_can_bs2bs = TIME_PAUSE_MODBUS_CAN_BS2BS;
static int fa_0 = 1;
static int fa_1 = 1;
static int fa_2 = 1;
static int prev_cmd_very_slow_start = 0;
// static float fff = 0;
reinit_before_sbor();
if (edrk.SumSbor || edrk.Status_Ready.bits.ready_final)
{
disable_flag_special_mode_rs = 1;
}
else
disable_flag_special_mode_rs = 0;
if (f.Prepare || f.terminal_prepare) {
project.clear_errors_all_plates();
}
// fff = my_satur_float(fff,MAX_ZADANIE_LIMIT_POWER, MIN_ZADANIE_LIMIT_POWER, 0);
// slow_vector_update();
read_plane_errors();
// if (flag_enable_update_hmi)
// update_tables_HMI();
// if (flag_enable_update_mpu)
// update_modbus_table();
// modbusNetworkSharing(1);
// get_command_HMI();
// return;
// i_led1_on_off(1);
if (edrk.flag_disable_pult_485==0)
{
i_led2_on_off(1);
modbusNetworkSharing(0);
}
// i_led1_on_off(0);
// if (ccc[0])
// {
// i_led2_on_off(0);
// return;
// }
if (!(detect_pause_milisec(pause_comunication, &old_time_edrk2)))
return;
if (edrk.get_new_data_from_hmi2)
{
get_command_HMI();
edrk.get_new_data_from_hmi2 = 0;
}
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> 100 <20><><EFBFBD><EFBFBD>.
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
// external_cmd_alarm_log = modbus_table_can_in[11].all;
// test_send_alarm_log(external_cmd_alarm_log);
// modbusNetworkSharing(0);
// i_led2_on_off(1);
modbusNetworkSharingCAN();
#if (ENABLE_CAN_SEND_TO_UKSS_FROM_MAIN)
// <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
update_ukss_can(time_pause_modbus_can_zadatchik_vpu);
update_ukss_can_moment_kgnc(time_pause_modbus_can_zadatchik_vpu*3);
update_ukss_setup(time_pause_modbus_can_ukss_setup);
#endif
#if (ENABLE_CAN_SEND_TO_ANOTHER_BSU_FROM_MAIN)
// <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
update_bsu_can(time_pause_modbus_can_bs2bs);
#endif
check_all_power_limits();
calc_p_water_edrk();
calc_temper_edrk();
calc_temper_acdrive();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
update_input_edrk();
detect_kvitir_from_all();
detect_error_all();
calc_limit_overheat();
calc_RMS_values_main();
update_lamp_alarm();
set_zadanie_u_charge();
reinit_protect_I_and_U_settings();
nagrev_auto_on_off();
auto_block_key_on_off();
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
edrk.f_rotor_hz = _IQtoF(edrk.iq_f_rotor_hz) * NORMA_FROTOR;
if (edrk.Status_Ready.bits.ImitationReady2)
{
// edrk.oborots = edrk.zadanie.oborots_zad;
// koef_p1 = 54.78260869565217391304347826087/(edrk.count_bs_work+1);
// koef_p2 = 54.78260869565217391304347826087/4;
koef_p3 = 27.39130;
if (control_station.active_array_cmd[CONTROL_STATION_CMD_ROTOR_POWER]==0) // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (edrk.count_bs_work==0)
max_power = my_satur_float(edrk.zadanie.limit_power_zad, MAX_ZADANIE_POWER/2, MIN_ZADANIE_POWER/2, 0);
else
max_power = my_satur_float(edrk.zadanie.limit_power_zad, MAX_ZADANIE_POWER, MIN_ZADANIE_POWER, 0);
max_oborots = max_power/koef_p3;
if (edrk.count_bs_work==0)
max_oborots = my_satur_float(max_oborots,MAX_ZADANIE_OBOROTS_ROTOR/2,MIN_ZADANIE_OBOROTS_ROTOR/2, 0);
else
max_oborots = my_satur_float(max_oborots,MAX_ZADANIE_OBOROTS_ROTOR,MIN_ZADANIE_OBOROTS_ROTOR, 0);
local_oborots = fast_round(_IQtoF(edrk.zadanie.iq_oborots_zad_hz)*60.0*NORMA_FROTOR);
if (local_oborots>=0)
{
if (local_oborots>max_oborots)
local_oborots = max_oborots;
}
else
{
if (local_oborots<-max_oborots)
local_oborots = -max_oborots;
}
float_oborots = zad_intensiv(1.0, 1.0, float_oborots, local_oborots);
edrk.oborots = float_oborots;
edrk.power_kw = edrk.oborots * koef_p3/(edrk.count_bs_work+1);
//
// max_oborots = edrk.zadanie.limit_power_zad/koef_p2;
// max_oborots = my_satur_float(max_oborots,MAX_ZADANIE_OBOROTS_ROTOR,MIN_ZADANIE_OBOROTS_ROTOR, 0);
//
// local_oborots = fast_round(_IQtoF(edrk.zadanie.rmp_oborots_imitation_rmp)*60.0*NORMA_FROTOR);
// if (local_oborots>=0)
// {
// if (local_oborots>max_oborots)
// local_oborots = max_oborots;
// }
// else
// {
// if (local_oborots<-max_oborots)
// local_oborots = -max_oborots;
// }
}
else
{
local_power = fast_round(_IQtoF(edrk.zadanie.iq_power_zad_rmp) * NORMA_ACP * NORMA_ACP / 1000.0);
if (edrk.count_bs_work==0)
local_power = my_satur_float(local_power, MAX_ZADANIE_POWER/2, MIN_ZADANIE_POWER/2, 0);
else
local_power = my_satur_float(local_power, MAX_ZADANIE_POWER, MIN_ZADANIE_POWER, 0);
local_oborots = local_power/koef_p3;
float_oborots = zad_intensiv(1.0, 1.0, float_oborots, local_oborots);
edrk.oborots = float_oborots;
edrk.power_kw = local_power/(edrk.count_bs_work+1);//edrk.oborots * koef_p3;
// local_power = fast_round(_IQtoF(edrk.zadanie.iq_power_zad_rmp) * NORMA_ACP * NORMA_ACP / 1000.0);
// local_oborots = local_power/koef_p1;
}
// float_oborots = zad_intensiv(0.5, 0.5, float_oborots, local_oborots);
// edrk.oborots = float_oborots;
//
// if (edrk.oborots>=0)
// edrk.power_kw = edrk.oborots * koef_p2;
// else
// edrk.power_kw = edrk.oborots * koef_p2;
//
//
//
// if (edrk.oborots>=0)
// edrk.power_kw = edrk.oborots * koef_p;
// else
// edrk.power_kw = edrk.oborots * (+koef_p);
}
else
{
edrk.oborots = fast_round(_IQtoF(WRotor.iqWRotorSumFilter3)*60.0*NORMA_FROTOR);
// local_power = fast_round(_IQtoF(filter.PowerScalarFilter2) * NORMA_ACP * NORMA_ACP / 1000.0);
//
// if (edrk.oborots>=0)
// edrk.power_kw = local_power;
// else
// edrk.power_kw = -local_power;
edrk.power_kw = fast_round(_IQtoF(edrk.iq_power_kw_one_filter_znak) * NORMA_ACP * NORMA_ACP / 1000.0);
}
power_kw_full = edrk.power_kw + edrk.power_kw_another_bs;
// if (power_kw_full < MINIMAL_POWER_TO_DISPLAY)
// edrk.power_kw_full = 0;
// else
edrk.power_kw_full = power_kw_full;
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
edrk.Status_Ready.bits.ready1 = get_ready_1();
pump_control();
if (control_station_select_active())
{
if (filter_count_error_control_station_select_active<30)
filter_count_error_control_station_select_active++;
else
edrk.errors.e7.bits.NOT_VALID_CONTROL_STATION |= 1;
}
else
filter_count_error_control_station_select_active = 0;
edrk.current_active_control = get_current_station_control();
if (edrk.current_active_control<CONTROL_STATION_LAST)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
parse_parameters_from_all_control_station();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
load_parameters_from_active_control_station(edrk.current_active_control);
// <20><><EFBFBD><EFBFBD> <20><> slave <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> CAN <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> active_control_station
parse_data_from_master_to_alg();
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;
}
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
// <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> QTV <20> QPU <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// cross_stend_automats();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> CAN
read_data_from_bs();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> edrk.
parse_analog_data_from_active_control_station_to_alg();
// if (flag_enable_update_hmi)
// update_tables_HMI();
if (flag_enable_update_mpu)
{
update_svu_modbus_table();
}
// modbusNetworkSharing(0);
if (flag_enable_can_from_mpu)
{
// write_all_data_to_mpu_485(0);
// read_all_data_from_mpu_485(0);
// write_all_data_to_mpu_can(1);
// test_rs_can_with_svu_mpu();
}
//
if (edrk.test_mode)
{
return;
}
get_sumsbor_command();
sbor_shema(edrk.SumSbor);
auto_select_master_slave();
who_select_sync_signal();
check_change_post_upravl();
get_freq_50hz_float();
auto_detect_zero_u_zpt();
if (detect_pause_sec(2,&old_time_edrk1))
{
update_nPCH();
if (control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_WDOG_OFF])
stop_wdog();
else
start_wdog();
if (rs_a.count_recive_ok != prev_rs_a_count_recive_ok)
control_station.time_detect_active[CONTROL_STATION_TERMINAL_RS232] = 0;
prev_rs_a_count_recive_ok = rs_a.count_recive_ok;
} // 1 sec end
update_zadat4ik();
// update_uom();
calc_count_build_revers();
run_store_slow_logs();
prepare_logger_pult();
update_LoggerParams();
send_alarm_log_pult();
////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
////////////////////////////////////////////////////////////
update_output_edrk();
read_can_error();
check_temper_break();
check_breaker_ged();
// change_ramp_zadanie
if (edrk.cmd_very_slow_start != prev_cmd_very_slow_start)
{
change_ramp_zadanie();
}
prev_cmd_very_slow_start = edrk.cmd_very_slow_start;
// i_led2_on_off(0);
#if (_ENABLE_PWM_LINES_FOR_TESTS==1 \
|| _ENABLE_PWM_LINES_FOR_TESTS_ROTOR==1 \
|| _ENABLE_PWM_LINES_FOR_TESTS_PWM==1 \
|| _ENABLE_PWM_LINES_FOR_TESTS_RS \
|| _ENABLE_PWM_LINES_FOR_TESTS_SYNC \
|| _ENABLE_PWM_LINES_FOR_TESTS_GO)
if (edrk.enable_pwm_test_lines != prev_enable_pwm_test_lines)
{
if (edrk.enable_pwm_test_lines)
pwm_test_lines_start();
else
pwm_test_lines_stop();
}
prev_enable_pwm_test_lines = edrk.enable_pwm_test_lines;
#endif
#if (_FLOOR6==1)
if (fa_0)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
control_station.time_detect_active[7] = 0;
control_station.alive_control_station[7] = 1;
}
if (fa_1)
{
control_station.time_detect_active[CONTROL_STATION_MPU_SVU_CAN] = 0;
control_station.alive_control_station[CONTROL_STATION_MPU_SVU_CAN] = 1;
}
if (fa_2)
{
control_station.time_detect_active[CONTROL_STATION_MPU_KEY_CAN] = 0;
control_station.alive_control_station[CONTROL_STATION_MPU_KEY_CAN] = 1;
}
#endif
i_led2_on_off(0);
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
void run_can_from_mpu(void)
{
int i;
for (i=0;i<MPU_UNIT_QUA_UNITS;i++)
mpu_can_setup.adr_detect_refresh[i] = 123 - 1;
flag_enable_can_from_mpu = 1;
}
void update_maz_level_i_af(int n_af, unsigned int new_maz_level)
{
#if (USE_HWP_0)
if (n_af == 0)
{
project.hwp[0].write.values[2].plus = new_maz_level;
project.hwp[0].write.values[2].minus = new_maz_level;
project.hwp[0].write.values[3].plus = new_maz_level;
project.hwp[0].write.values[3].minus = new_maz_level;
project.hwp[0].write.values[4].plus = new_maz_level;
project.hwp[0].write.values[4].minus = new_maz_level;
project.hwp[0].write.values[5].plus = new_maz_level;
project.hwp[0].write.values[5].minus = new_maz_level;
project.hwp[0].write.values[6].plus = new_maz_level;
project.hwp[0].write.values[6].minus = new_maz_level;
project.hwp[0].write.values[7].plus = new_maz_level;
project.hwp[0].write.values[7].minus = new_maz_level;
}
else
{
}
#endif
}
void set_new_level_i_protect(int n_af, int level)
{
static int i_af_protect_d = 0, prev_level_all = 0, prev_level_2 = 0;
if (level>LEVEL_HWP_I_AF) level = LEVEL_HWP_I_AF;
if (level<0) level = 0;
if (n_af == 0)
{
if (level != prev_level_all)
{
i_af_protect_d = convert_real_to_mv_hwp(2,level);
if (i_af_protect_d>1500) i_af_protect_d = 1500; // max 1500 mV
update_maz_level_i_af(n_af, i_af_protect_d);
project.write_all_hwp();
}
prev_level_all = level;
}
// else
// {
// if (level != prev_level_2)
// {
// i_af_protect_d = convert_real_to_mv_hwp(4,level);
// if (i_af_protect_d>1500) i_af_protect_d = 1500; // max 1500 mV
//
// update_maz_level_i_af(n_af, i_af_protect_d);
// project.write_all_hwp();
// }
// prev_level_2 = level;
//
// }
}
void calc_count_build_revers(void)
{
static unsigned int prev_b = 0, prev_r = 0;
if (edrk.Status_Ready.bits.ImitationReady2)
{
detect_work_revers(((edrk.oborots>=0) ? 1 : -1), edrk.zadanie.iq_oborots_zad_hz_rmp, edrk.oborots);
}
else
detect_work_revers(WRotor.RotorDirectionSlow, edrk.zadanie.iq_oborots_zad_hz_rmp, WRotor.iqWRotorSumFilter2);
if (edrk.count_revers != prev_r)
inc_count_revers();
if (edrk.count_sbor != prev_b)
inc_count_build();
prev_r = edrk.count_revers;
prev_b = edrk.count_sbor;
}
void prepare_logger_pult(void)
{
edrk.pult_data.logger_params[0] = fast_round(_IQtoF(simple_scalar1.iq_decr_mzz_power_filter)*1000.0);//edrk.zadanie.oborots_zad;
edrk.pult_data.logger_params[1] = fast_round(_IQtoF(edrk.Kplus)*1000.0);
edrk.pult_data.logger_params[2] = fast_round(_IQtoF(pll1.vars.pll_Ud)*NORMA_ACP);
edrk.pult_data.logger_params[3] = fast_round(_IQtoF(edrk.f_stator)*NORMA_FROTOR*100.0);
edrk.pult_data.logger_params[4] = fast_round(_IQtoF(edrk.k_stator1)*10000.0);
edrk.pult_data.logger_params[5] = fast_round(_IQtoF(pll1.vars.pll_Uq)*NORMA_ACP);
edrk.pult_data.logger_params[6] = edrk.period_calc_pwm_int2;
edrk.pult_data.logger_params[7] = fast_round(_IQtoF(simple_scalar1.pidF.OutMax)*NORMA_ACP);//edrk.power_kw_full;
edrk.pult_data.logger_params[8] = edrk.Sbor_Mode;
edrk.pult_data.logger_params[9] = edrk.Stage_Sbor;
edrk.pult_data.logger_params[10] = fast_round(_IQtoF(edrk.Izad_out)*NORMA_ACP);
edrk.pult_data.logger_params[11] = edrk.period_calc_pwm_int1;
edrk.pult_data.logger_params[12] = fast_round(_IQtoF(simple_scalar1.pidF.Out)*NORMA_ACP);
edrk.pult_data.logger_params[13] = fast_round(_IQtoF(simple_scalar1.pidF.OutMin)*NORMA_ACP);
edrk.pult_data.logger_params[14] = fast_round(_IQtoF(simple_scalar1.pidPower.Out)*NORMA_ACP);
edrk.pult_data.logger_params[15] = fast_round(_IQtoF(simple_scalar1.pidPower.OutMax)*NORMA_ACP);
edrk.pult_data.logger_params[16] = fast_round(_IQtoF(simple_scalar1.pidF.Ref)*NORMA_FROTOR*1000.0);// //modbus_table_can_in[123].all;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
edrk.pult_data.logger_params[17] = modbus_table_can_in[124].all;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
edrk.pult_data.logger_params[18] = modbus_table_can_in[125].all;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
edrk.pult_data.logger_params[19] = modbus_table_can_in[134].all;//<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
edrk.pult_data.logger_params[20] = fast_round(_IQtoF(simple_scalar1.bpsi_curent)*NORMA_FROTOR*1000.0);
edrk.pult_data.logger_params[21] = fast_round(_IQtoF(edrk.from_uom.iq_level_value_kwt)*NORMA_ACP*NORMA_ACP/1000.0);
edrk.pult_data.logger_params[22] = fast_round(_IQtoF(simple_scalar1.iqKoefOgran)*1000.0);//fast_round(_IQtoF(rotor_22220.iqFout)*NORMA_FROTOR*1000.0);
edrk.pult_data.logger_params[23] = fast_round(_IQtoF(simple_scalar1.iqKoefOgranIzad)*1000.0); //fast_round(_IQtoF(edrk.zadanie.iq_limit_power_zad)*NORMA_ACP*NORMA_ACP/1000.0);
edrk.pult_data.logger_params[24] = fast_round(_IQtoF(edrk.all_limit_koeffs.sum_limit)*1000.0);
edrk.pult_data.logger_params[25] = fast_round(_IQtoF(edrk.all_limit_koeffs.uom_limit)*1000.0);
edrk.pult_data.logger_params[26] = fast_round(_IQtoF(edrk.all_limit_koeffs.uin_freq_limit)*1000.0);
edrk.pult_data.logger_params[27] = fast_round(_IQtoF(simple_scalar1.pidF.Fdb)*NORMA_FROTOR*1000.0); //
}
int calc_auto_moto_pump(void)
{
volatile long sum_minutes_pump1, sum_minutes_pump2, set_delta_minutes, cur_delta_minutes;
sum_minutes_pump1 = 0;
if (edrk.pult_data.data_from_pult.moto[12]>=0)
sum_minutes_pump1 += edrk.pult_data.data_from_pult.moto[12] * 1440;
if (edrk.pult_data.data_from_pult.moto[3]>=0)
sum_minutes_pump1 += edrk.pult_data.data_from_pult.moto[3];
sum_minutes_pump2 = 0;
if (edrk.pult_data.data_from_pult.moto[13]>=0)
sum_minutes_pump2 += edrk.pult_data.data_from_pult.moto[13] * 1440;
if (edrk.pult_data.data_from_pult.moto[4]>=0)
sum_minutes_pump2 += edrk.pult_data.data_from_pult.moto[4];
cur_delta_minutes = sum_minutes_pump1 - sum_minutes_pump2;
set_delta_minutes = edrk.pult_data.data_to_pult.TimeToChangePump;
if (set_delta_minutes==0)
{
return 0;
}
if (cur_delta_minutes>set_delta_minutes)
{
return 2;
}
else
if (cur_delta_minutes<-set_delta_minutes)
{
return 1;
}
else
if (edrk.pult_data.data_from_pult.LastWorkPump==0)
{
if (cur_delta_minutes>0)
{
return 1;
}
else
if (cur_delta_minutes<=0)
{
return 2;
}
else
return 0;
}
else
{
if (edrk.pult_data.data_from_pult.LastWorkPump == 1)
return 1;
else
if (edrk.pult_data.data_from_pult.LastWorkPump == 2)
return 2;
else
return 0;
}
//
//
// if (cur_delta_minutes>0)
// {
// //T1>T2
// if (_IQabs(cur_delta_minutes) >= set_delta_minutes)
// {
// // T1+delta>T2
// return 2;
// }
// else
// return 1;
// }
// else
// {
// //T2>T1
// if (_IQabs(cur_delta_minutes) >= set_delta_minutes)
// {
// //T2+delta>T1
// return 1;
// }
// else
// return 2;
// }
// if (_IQabs(cur_delta_minutes) > set_delta_minutes)
// {
// if (cur_delta_minutes>)
// return 2;
// else
// return 1;
//
//
// }
// if (cur_delta_minutes>=0)
// {
// if (_IQabs(cur_delta_minutes) > set_delta_minutes)
// return 2;
// else
// return 1;
// }
// else
// {
// if (_IQabs(cur_delta_minutes) > set_delta_minutes)
// return 1;
// else
// return 2;
// }
}
void read_can_error(void)
{
EALLOW;
edrk.canes_reg = ECanaRegs.CANES.all;
edrk.canrec_reg = ECanaRegs.CANREC.all;
edrk.cantec_reg = ECanaRegs.CANTEC.all;
EDIS;
cmd_clear_can_error();
}
void clear_can_error(void)
{
// EALLOW;
// ECanaRegs.CANES.all=0xffffffff;
InitCanSoft();
//EDIS;
}
void cmd_clear_can_error(void)
{
static int prev_cmd_clear_can_error = 0;
if (edrk.cmd_clear_can_error && prev_cmd_clear_can_error==0)
{
clear_can_error();
}
prev_cmd_clear_can_error = edrk.cmd_clear_can_error;
}
void check_temper_break(void)
{
if ( (edrk.break_tempers[0] > ABNORMAL_TEMPER_BREAK_INT)
|| (edrk.break_tempers[1] > ABNORMAL_TEMPER_BREAK_INT)
|| (edrk.break_tempers[2] > ABNORMAL_TEMPER_BREAK_INT)
|| (edrk.break_tempers[3] > ABNORMAL_TEMPER_BREAK_INT)
)
edrk.warnings.e9.bits.BREAK_TEMPER_WARNING = 1;
else
{
if ( (edrk.break_tempers[0] < ABNORMAL_TEMPER_BREAK_INT-DELTA_TEMPER_BREAK_INT)
&& (edrk.break_tempers[1] < ABNORMAL_TEMPER_BREAK_INT-DELTA_TEMPER_BREAK_INT)
&& (edrk.break_tempers[2] < ABNORMAL_TEMPER_BREAK_INT-DELTA_TEMPER_BREAK_INT)
&& (edrk.break_tempers[3] < ABNORMAL_TEMPER_BREAK_INT-DELTA_TEMPER_BREAK_INT)
)
edrk.warnings.e9.bits.BREAK_TEMPER_WARNING = 0;
}
if ( (edrk.break_tempers[0] > ALARM_TEMPER_BREAK_INT)
|| (edrk.break_tempers[1] > ALARM_TEMPER_BREAK_INT)
|| (edrk.break_tempers[2] > ALARM_TEMPER_BREAK_INT)
|| (edrk.break_tempers[3] > ALARM_TEMPER_BREAK_INT)
)
edrk.warnings.e9.bits.BREAK_TEMPER_ALARM = 1;
else
{
//DELTA_TEMPER_BREAK_INT
if ( (edrk.break_tempers[0] < ALARM_TEMPER_BREAK_INT-DELTA_TEMPER_BREAK_INT)
&& (edrk.break_tempers[1] < ALARM_TEMPER_BREAK_INT-DELTA_TEMPER_BREAK_INT)
&& (edrk.break_tempers[2] < ALARM_TEMPER_BREAK_INT-DELTA_TEMPER_BREAK_INT)
&& (edrk.break_tempers[3] < ALARM_TEMPER_BREAK_INT-DELTA_TEMPER_BREAK_INT)
)
edrk.warnings.e9.bits.BREAK_TEMPER_ALARM = 0;
}
}
#define TIME_FILTER_BREAKER_SIGNALS 10
void check_breaker_ged(void)
{
static unsigned int count_wait_breaker = 0;
edrk.warnings.e9.bits.BREAKER_GED_ON = filter_digital_input( edrk.warnings.e9.bits.BREAKER_GED_ON,
&count_wait_breaker,
TIME_FILTER_BREAKER_SIGNALS,
edrk.breaker_on);
// if (edrk.breaker_on)
// edrk.warnings.e9.bits.BREAKER_GED_ON = 1;
// else
// edrk.warnings.e9.bits.BREAKER_GED_ON = 0;
}