#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; } } }