#include "system_parameter.h"
|
#include "upper_computer.h"
|
#include "uart.h"
|
#include "mbcrc.h"
|
#include "string.h"
|
#include "master_slave_inter.h"
|
#include "stdlib.h"
|
#include "check_out.h"
|
#include "lcd.h"
|
#include "gprs.h"
|
#include "tim.h"
|
#include "power_manage.h"
|
#include "system_log.h"
|
|
SYS_TIME_T sys_time_g = {RESET};
|
SYS_SOME_FLAG_T sys_some_flag_g = {RESET};
|
SYS_REAL_TIME_DATA_T sys_realtime_data_g = {
|
.measure_para_s = {
|
.compressibility_factor = 1,
|
},
|
};
|
|
TYPE_CHECK_SIZE(MASTER_BASIC_PARA_T,53);//ºË²é½á¹¹Ìå´óС
|
MASTER_BASIC_PARA_T master_basic_papa_g = {
|
.device_type_bcd = DM_HCM_UFG220,
|
.plant_code_bcd = UC_IDEA_CREATED,
|
.factory_number = {0},
|
.specifications_model = "UFG220G10LNVZ ",
|
};
|
TYPE_CHECK_SIZE(MASTER_SOFT_HARD_PARA_T,34);//ºË²é½á¹¹Ìå´óС
|
MASTER_SOFT_HARD_PARA_T master_soft_hard_para_g = {
|
.master_pcb_num = {0x20, 0x23, 0x01, 0x00, 0x10},
|
.master_pcb_type = {0},
|
.master_hardware_ver = {0},
|
.master_firmware_ver = {0},
|
.master_firmware_crc = {0},
|
.master_firmware_time = {0}};
|
TYPE_CHECK_SIZE(SYS_FLOW_ALARM_CFG_T,28);//ºË²é½á¹¹Ìå´óС
|
SYS_FLOW_ALARM_CFG_T sys_flow_alarm_cfg_g = {
|
.sys_flow_up_1 = G10_FLOW_MAX * 0.9f,
|
.sys_flow_up_2 = G10_FLOW_MAX * 1.05f,
|
.sys_flow_down_1 = 0,
|
.flow_up_2_replace_value = G10_FLOW_MAX * 1.2f,
|
.small_flow_excision_value = G10_FLOW_MIN,
|
}; //ÈçÐͺÅÐ޸쬏ù¾ÝÐͺŶø¶¨£¬ÈçÖ±½ÓÐÞ¸ÄÔò¸ù¾ÝÐÞ¸ÄÖµ¶ø¶¨¡£
|
|
TYPE_CHECK_SIZE(SYS_PRESS_ALARM_CFG_T,44);//ºË²é½á¹¹Ìå´óС
|
SYS_PRESS_ALARM_CFG_T sys_press_alarm_cfg_g = {
|
.press_correction_factor = 1.0f,
|
.press_intercept = 0.0f,
|
.press_up_value = SYS_PRESS_MEASURE_MAX * 1.0f,
|
.press_up_up_value = ((SYS_PRESS_MEASURE_MAX - BARO_PRESS) * 1.2f + BARO_PRESS),
|
.press_down_value = SYS_PRESS_MEASURE_MIN,
|
.press_down_down_value = SYS_PRESS_MEASURE_MIN,
|
.press_up_scope = SYS_PRESS_MEASURE_MAX,
|
.press_down_scope = SYS_PRESS_MEASURE_MIN,
|
.press_down_down_replace = SYS_PRESS_MEASURE_MIN};
|
|
TYPE_CHECK_SIZE(SYS_TEMP_ALARM_CFG_T,38);//ºË²é½á¹¹Ìå´óС
|
SYS_TEMP_ALARM_CFG_T sys_temp_alarm_cfg_g = {
|
.temp_correction_factor = 1.0f,
|
.temp_intercept = 0.0f,
|
.temp_up_value = SYS_TEMP_MEASURE_MAX * 1,
|
.temp_up_up_value = SYS_TEMP_MEASURE_MAX * 1.25,
|
.temp_down_value = -10,
|
.temp_down_down_value = SYS_TEMP_MEASURE_MIN,
|
.temp_up_scope = SYS_TEMP_MEASURE_MAX,
|
.temp_down_scope = SYS_TEMP_MEASURE_MIN,
|
.temp_up_up_replace = SYS_TEMP_MEASURE_MAX * 1.25,
|
.temp_drastic_change = 0.0f,
|
.cpu_temp_up_scope = SYS_TEMP_MEASURE_MAX * 1.25,
|
.cpu_temp_down_scope = SYS_TEMP_MEASURE_MIN};
|
|
TYPE_CHECK_SIZE(CAL_PULSE_PARA_T,8);//ºË²é½á¹¹Ìå´óС
|
CAL_PULSE_PARA_T cal_pulse_para_g = {
|
.cal_pulse_factor = CPF_1L,
|
.cal_pulse_width = 50,
|
};
|
|
TYPE_CHECK_SIZE(SECOND_ORDER_CORR_T,80);//ºË²é½á¹¹Ìå´óС
|
SECOND_ORDER_CORR_T sec_order_corr_set_g = {0};
|
SECOND_ORDER_CORR_T sec_order_corr_real_g = {0};
|
|
uint8_t sys_device_flow_max_g = G10_FLOW_MAX;
|
float sys_device_flow_min_g = G10_FLOW_MIN;
|
float sys_device_flow_qt_g = 10 * G10_FLOW_MIN;
|
|
/*ϵͳ»ñµÃ¿Ú¾¶Ðͺųõʼ»¯*/
|
void Sys_GetUnitType_Init(void)
|
{
|
uint8_t device_type = atoi((char *)&master_basic_papa_g.specifications_model[7]);
|
switch(device_type)
|
{
|
case 6:
|
check_cal_g.device_type = G6;
|
sys_device_flow_max_g = G6_FLOW_MAX;
|
sys_device_flow_min_g = G6_FLOW_MIN;
|
break;
|
case 10:
|
check_cal_g.device_type = G10;
|
sys_device_flow_max_g = G10_FLOW_MAX;
|
sys_device_flow_min_g = G10_FLOW_MIN;
|
break;
|
case 16:
|
check_cal_g.device_type = G16;
|
sys_device_flow_max_g = G16_FLOW_MAX;
|
sys_device_flow_min_g = G16_FLOW_MIN;
|
break;
|
case 25:
|
check_cal_g.device_type = G25;
|
sys_device_flow_max_g = G25_FLOW_MAX;
|
sys_device_flow_min_g = G25_FLOW_MIN;
|
break;
|
default:break;
|
}
|
led_para_output_init();
|
Valve_OpenCloseTimeInit();
|
|
// sys_flow_alarm_cfg_g.sys_flow_up_1 = sys_device_flow_max_g * 0.9;
|
// sys_flow_alarm_cfg_g.sys_flow_up_2 = sys_device_flow_max_g * 1.05;
|
// sys_flow_alarm_cfg_g.flow_up_2_replace_value = sys_device_flow_max_g * 1.2;
|
// sys_flow_alarm_cfg_g.small_flow_excision_value = sys_device_flow_min_g;
|
sys_device_flow_qt_g = 10 * sys_device_flow_min_g;
|
|
// micro_constant_flow_para_g.micro_flow_threshold = sys_device_flow_min_g * 1000;
|
// micro_constant_flow_para_g.constant_flow_threshold_down = sys_device_flow_min_g * 1000;
|
// micro_constant_flow_para_g.constant_flow_threshold_up = sys_device_flow_max_g * 1200;
|
#ifdef RS232_PRINTF
|
printf("É豸ÐͺŠ= %d\r\n",check_cal_g.device_type);
|
#endif
|
}
|
|
void Sys_GetUnitType_Set(uint8_t device_type_before)
|
{
|
uint8_t device_type_now = atoi((char *)&master_basic_papa_g.specifications_model[7]);
|
switch(device_type_now)
|
{
|
case 6:
|
check_cal_g.device_type = G6;
|
sys_device_flow_max_g = G6_FLOW_MAX;
|
sys_device_flow_min_g = G6_FLOW_MIN;
|
break;
|
case 10:
|
check_cal_g.device_type = G10;
|
sys_device_flow_max_g = G10_FLOW_MAX;
|
sys_device_flow_min_g = G10_FLOW_MIN;
|
break;
|
case 16:
|
check_cal_g.device_type = G16;
|
sys_device_flow_max_g = G16_FLOW_MAX;
|
sys_device_flow_min_g = G16_FLOW_MIN;
|
break;
|
case 25:
|
check_cal_g.device_type = G25;
|
sys_device_flow_max_g = G25_FLOW_MAX;
|
sys_device_flow_min_g = G25_FLOW_MIN;
|
break;
|
default:break;
|
}
|
led_para_output_init();
|
Valve_OpenCloseTimeInit();
|
|
if(device_type_before != device_type_now)
|
{
|
sys_flow_alarm_cfg_g.sys_flow_up_1 = sys_device_flow_max_g * 0.9;
|
sys_flow_alarm_cfg_g.sys_flow_up_2 = sys_device_flow_max_g * 1.05;
|
sys_flow_alarm_cfg_g.flow_up_2_replace_value = sys_device_flow_max_g * 1.2;
|
sys_flow_alarm_cfg_g.small_flow_excision_value = sys_device_flow_min_g;
|
sys_device_flow_qt_g = 10 * sys_device_flow_min_g;
|
|
micro_constant_flow_para_g.micro_flow_threshold = sys_device_flow_min_g * 1000;
|
micro_constant_flow_para_g.constant_flow_threshold_down = sys_device_flow_min_g * 1000;
|
micro_constant_flow_para_g.constant_flow_threshold_up = sys_device_flow_max_g * 1200;
|
|
Sys_Log_E2pParaMultipleWrite(&sys_store_para_table[PARA_FLOW_ALARM_CFG],1);
|
Sys_Log_E2pParaMultipleWrite(&sys_store_para_table[PARA_MICRO_CONSTANT_FLOW],1);
|
}
|
}
|
|
|
|
__IO uint16_t auto_exit_start_min_time_g = 0;
|
__IO uint16_t cal_mode_exit_cnt_g = 0;//¼ì¶¨Ä£Ê½ÎÞÁ÷Á¿×Ô¶¯Í˳öCNT
|
__IO uint16_t cal_mode_force_exit_cnt_g = 0;//¼ì¶¨Ä£Ê½Ç¿ÖÆÍ˳öCNT
|
uint8_t cal_mode_exit_save_cumulate_flag_g = 0;//¼ì¶¨Ä£Ê½Í˳ö´¢´æ¼ì¶¨×ÜÁ¿±ê־λ
|
|
/*ÉèÖòÎÊýģʽ×Ô¶¯Í˳ö³ÌÐò*/
|
void SetParaMode_AutoExitProcess(TEMP_SYS_MODE_CNV_CMD *pCnv_cmd_flag, __IO RTC_TimeDateTypeDef *calendar_p)
|
{
|
uint16_t now_time_min = 0;
|
if (uc_return_flag_g) // Óн»»¥
|
auto_exit_start_min_time_g = Bcd_2_Hex(calendar_p->Hour) * 60 + Bcd_2_Hex(calendar_p->Minute);
|
else
|
{
|
if (calendar_p->Second == 0x02) // ÿ·ÖÖÓÖ»ÅжÏÒ»´Î
|
{
|
now_time_min = Bcd_2_Hex(calendar_p->Hour) * 60 + Bcd_2_Hex(calendar_p->Minute);
|
if (now_time_min < auto_exit_start_min_time_g) // ¿çÌì
|
{
|
if (now_time_min + 1440 - auto_exit_start_min_time_g > SET_PARA_MODE_TIMEOUT)
|
*pCnv_cmd_flag = CNV_PARA_MODE_EXIT;
|
}
|
else if (now_time_min - auto_exit_start_min_time_g > SET_PARA_MODE_TIMEOUT)
|
*pCnv_cmd_flag = CNV_PARA_MODE_EXIT;
|
}
|
}
|
}
|
|
/*У׼ģʽ×Ô¶¯Í˳ö³ÌÐò*//*ÓÉÓڼ춨ģʽ¹Ø±ÕRTCÃëÖжϣ¬²»ÄÜʵʱ¸üÐÂʱ¼ä£¬ËùÒÔ²»ÄÜÒÔʵʱʱ¼äΪÒÀ¾Ý×Ô¶¯Í˳öУ׼ģʽ*/
|
void CalMode_AutoExitProcess(MEDIA_STATUS medium_flag, TEMP_SYS_MODE_CNV_CMD *pCnv_cmd_flag, __IO RTC_TimeDateTypeDef *calendar_p)
|
{
|
// uint16_t now_time_min = 0;
|
uint32_t min_2_250ms = CAL_MODE_TIMEOUT * 60 * 4;
|
uint32_t min_2_250ms_force = CAL_MODE_FORCE_TIME * 60 * 4;
|
float cal_flow_value_per_hour = cal_display_exit_data_g * 3600 * 4;//У׼Á÷Á¿Êý¾ÝÿСʱ
|
if (cal_flow_value_per_hour > (sys_flow_alarm_cfg_g.small_flow_excision_value * 0.5f)) // ÓÐÁ÷Á¿
|
cal_mode_exit_cnt_g = 0;
|
// auto_exit_start_min_time_g = Bcd_2_Hex(calendar_p->hour) * 60 + Bcd_2_Hex(calendar_p->minute);
|
else
|
{
|
if(cal_mode_exit_cnt_g++ > min_2_250ms)
|
{
|
cal_mode_exit_cnt_g = 0;
|
*pCnv_cmd_flag = CNV_CAL_MODE_EXIT;
|
}
|
// if (calendar_p->second == 0x02) // ÿ·ÖÖÓÖ»ÅжÏÒ»´Î
|
// {
|
// now_time_min = Bcd_2_Hex(calendar_p->hour) * 60 + Bcd_2_Hex(calendar_p->minute);
|
// if (now_time_min < auto_exit_start_min_time_g) // ¿çÌì
|
// {
|
// if (now_time_min + 1440 - auto_exit_start_min_time_g > CAL_MODE_TIMEOUT)
|
// *pCnv_cmd_flag = CNV_CAL_MODE_EXIT;
|
// }
|
// else if (now_time_min - auto_exit_start_min_time_g > CAL_MODE_TIMEOUT)
|
// *pCnv_cmd_flag = CNV_CAL_MODE_EXIT;
|
// }
|
}
|
if (medium_flag != AIR)
|
*pCnv_cmd_flag = CNV_CAL_MODE_EXIT;
|
if(cal_mode_force_exit_cnt_g++ > min_2_250ms_force)
|
{
|
cal_mode_force_exit_cnt_g = 0;
|
*pCnv_cmd_flag = CNV_CAL_MODE_EXIT;
|
}
|
}
|
|
void Master_SoftHardPara_Init(void)
|
{
|
MASTER_SOFT_HARD_PARA_T * master_soft_hard_para_p = &master_soft_hard_para_g;
|
uint8_t firmware_ver_u8[4] = {0};
|
uint32_t firmware_ver_u32[4] = {0};
|
uint16_t firmware_crc;
|
// uint8_t hardware_patch_cnt = 0;
|
// uint16_t hardware_bom_num = 0;
|
// uint32_t hardware_board_num = 0;
|
// Ó²¼þ°æ±¾ºÅ BCD
|
// sscanf(HARDWARE_VERSION,"%x.%x.%x",&hardware_board_num,(uint32_t *)&hardware_bom_num,(uint32_t *)&hardware_patch_cnt);
|
// master_soft_hard_para_p->master_hardware_ver[0] = hardware_board_num >> 12;
|
// master_soft_hard_para_p->master_hardware_ver[1] = hardware_board_num >> 4;
|
// master_soft_hard_para_p->master_hardware_ver[2] = (hardware_board_num << 4) | (hardware_bom_num >> 12);
|
// master_soft_hard_para_p->master_hardware_ver[3] = hardware_bom_num >> 4;
|
// master_soft_hard_para_p->master_hardware_ver[4] = (hardware_bom_num << 4) | hardware_patch_cnt;
|
// Èí¼þ°æ±¾ºÅ ºÍ CRC
|
sscanf(FIRMWARE_VERSION, "%x.%x.%x.%x",&firmware_ver_u32[0], &firmware_ver_u32[1], &firmware_ver_u32[2], &firmware_ver_u32[3]);
|
// HEX
|
for(uint8_t i = 0;i < 4;i ++)
|
firmware_ver_u8[i] = firmware_ver_u32[i];
|
firmware_crc = usMBCRC16(0xFFFF,firmware_ver_u8, 4);
|
master_soft_hard_para_p->master_firmware_crc[0] = firmware_crc;
|
master_soft_hard_para_p->master_firmware_crc[1] = firmware_crc >> 4;
|
memcpy(master_soft_hard_para_p->master_firmware_ver, firmware_ver_u8, 4);
|
// Èí¼þ°æ±¾ÈÕÆÚ
|
master_soft_hard_para_p->master_firmware_time[0] = HEX_2_BCD_U8((OS_YEAR - 2000));
|
master_soft_hard_para_p->master_firmware_time[1] = HEX_2_BCD_U8(OS_MONTH);
|
master_soft_hard_para_p->master_firmware_time[2] = HEX_2_BCD_U8(OS_DAY);
|
}
|
|
void Sys_MappingPara_Init(void)
|
{
|
uint8_t i = 0;
|
/*Ô¶´«±íºÅ¸³Öµ*/
|
memcpy(gprs_protocol_head_tail_g.gprs_protocol_head.device_num,master_basic_papa_g.factory_number,
|
sizeof(gprs_protocol_head_tail_g.gprs_protocol_head.device_num));// É豸±àºÅ
|
/*ÃÜÔ¿*/
|
if(my_memcmp(gprs_network_cfg_para_g.aes128_secret_key[1],&i,8 * 16) > 0)
|
memcpy(KVer_AES_128,gprs_network_cfg_para_g.aes128_secret_key[1],sizeof(KVer_AES_128)); //Õýʽ
|
else
|
memcpy(KVer_AES_128,gprs_network_cfg_para_g.aes128_secret_key[0],sizeof(KVer_AES_128)); //²âÊÔ
|
}
|
|
/*¶þ´ÎÐÞÕýʵ¼Ê²ÎÊý¼ÆËã³õʼ»¯*/
|
void SecondOrder_RealParaCalculate_Init(void)
|
{
|
for(uint8_t count_i = 0; count_i < 5; count_i ++)
|
{
|
if(sec_order_corr_set_g.second_flow_data_point[count_i] != 0)
|
{
|
|
sec_order_corr_real_g.second_corr_factor[count_i] = 1.0f / (1 + sec_order_corr_set_g.second_corr_factor[count_i] / 100);
|
sec_order_corr_real_g.second_flow_data_point[count_i] = sec_order_corr_set_g.second_flow_data_point[count_i] / sec_order_corr_real_g.second_corr_factor[count_i];
|
}
|
else
|
{
|
sec_order_corr_real_g.second_corr_factor[count_i] = 1;
|
sec_order_corr_real_g.second_flow_data_point[count_i] = 0;
|
}
|
}
|
}
|