forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-06-14 d352b1982dc9b4fb2135c64cd909bb9cecc62139
Function/STORAGE/system_mem_para.c
@@ -1,30 +1,49 @@
#include "system_mem_para.h"
#include "mbcrc.h"
#include "mbcrc1.h"
#include "eeprom.h"
#include "system_eep_mem_manage.h"
#include "rs485_data_analysis_pro.h"
#include "pulse_and_alarm_line.h"
#include "system_flash_mem_manage.h"
#include "sizhu_history_record.h"
#include "sizhu_alarm_record.h"
#include "sizhu_event_record.h"
#include "sizhu_para_modify_record.h"
SYSTEM_EEP_IDENTIFICATION_T system_eep_id_g;
EQUIPMENT_BASIC_INF_T              equipment_basic_inf_g={ .product_type= DM_SCM_SZV103,      \
                                                                                    .caliber_type = DN50_TYPE,         \
                                                                                    .valve_type = VM_HADE,               \
                                                                                    .equipment_type = EM_SIFRCT,};
SYSTEM_EEP_IDENTIFICATION_T system_eep_id_g = {         \
   .eep_para_init_config_id = EEP_PARA_INIT_ID,       \
   .eep_para_patch_id = LAST_PATCH_ID,                \
};
EQUIPMENT_BASIC_INF_T              equipment_basic_inf_g={
   .product_type= DM_SCM_SZV103,      \
   .caliber_type = DN50_TYPE,         \
   .serial_number = {0x07,0x10,0x50,0x82,0x40,0x69,0x00,0x01,0xff,0xff},           \
   .valve_type = VM_HADE,               \
   .equipment_type = EM_SIFRCT,};
MAIN_EQUIPM_HARDWARE_SOFTWARE_INF_T        main_equipment_hardware_software_inf_g;
LCD_EQUIPM_HARDWARE_SOFTWARE_INF_T         lcd_equipment_hardware_software_inf_g;
WIRELESS_EQUIPM_HARDWARE_SOFTWARE_INF_T    wireless_equipment_hardware_software_inf_g;
__IO SAVE_REALTIME_DATA_T               save_realtime_data_g;
__IO SAVE_VALVE_PARA_T                     save_valve_para_g={   .valve_status = VALVE_NONE, \
                                                                           .valve_lock_state = VL_UNLOCK,};
__IO SAVE_VALVE_PARA_T                     save_valve_para_g={         \
   .valve_status = VALVE_NONE, \
   .valve_lock_state = VL_UNLOCK,};
FLOW_METER_PARA_T   flow_meter_para_g ={ .flow_meter_conn_type = FLOW_METER_CONN_RS485, \
                                                         .flow_meter_code = SIZHUMODBUSV2_0,                 \
                                                         .pulse_width = 50,                                        \
                                                         .baudrate_code =    BAUDRATE_9600,                       \
                                                         .parity_bit = PARITY_NONE,                               \
                                                         .slave_address = 1, };
FLOW_METER_PARA_T   flow_meter_para_g ={                \
   .flow_meter_conn_type = FLOW_METER_CONN_RS485_AND_PULSE, \
   .flow_meter_code = SIZHUMODBUSV2_0,                 \
   .pulse_coe   = 1.0,                             \
   .pulse_width = 50,                                        \
   .baudrate_code =    BAUDRATE_9600,                       \
   .parity_bit = PARITY_NONE,                               \
   .output_voltage_code = RS485_V1_5V,           \
   .slave_address = 1,                                        \
   .broken_line_multiplex = BROKEN_LINE_MUTIPLEX_NONE,    \
};
TEM_PRE_PARA_T tem_pre_para_g = {
TEM_PRE_PARA_T tem_pre_para_g = {    \
   .tem_up_limit = 70,                   \
   .tem_up_up_limit = 70,                 \
   .tem_low_limit = -20,                 \
@@ -37,47 +56,91 @@
   .pre_low_low_limit = 70,              \
};
MEASURE_FREEZE_PARA_T measure_freeze_para_g = {
MEASURE_FREEZE_PARA_T measure_freeze_para_g = {      \
   .freeze_interval = 60,                          \
   .daily_freeze_time_BCD = {0x00,0x00},           \
};
BAT_PARA_T bat_para_g = {
   .lith_bat_low_v = 55,           \
BAT_PARA_T bat_para_g = {                  \
   .lith_bat_low_v = 55,              \
   .lith_bat_under_v = 50,           \
   .alka_bat_low_v = 55,           \
   .alka_bat_low_v = 55,              \
   .alka_bat_under_v = 50,           \
   .lith_bat_max_hour = 26280,           \
   .lith_bat_used_hour = 0,           \
   .lith_bat_max_hour = 26280,       \
   .lith_bat_used_hour = 0,          \
   .lith_bat_used_sec = 0,           \
};
LOGIN_PASSWORD_T login_passeord_g = {
LOGIN_PASSWORD_T login_passeord_g = {                           \
   .PC_general_user_password = {0x68,0x68},           \
   .PC_advanced_user_password = {0x52,0x86},          \
   .PC_manage_user_password = {0x75,0x97},            \
};
WRC_PARA_SIZHU_T wrc_para_sizhu_g = {
   .ip1 = {120,77,85,236},           \
   .ip_port1 = 9692,                    \
   .ip1_connect_type = LINK_TCP,           \
   .ip2 = {120,77,85,236},           \
   .ip_port2 = 9692,                    \
   .ip2_connect_type = LINK_TCP,           \
   .bat_power_data_interval = 60,           \
   .ext_power_data_interval = 60,           \
   .time_start_type = WRC_TIME_START_INTERVAL,           \
   .bat_power_send_interval = 1440,           \
   .ext_power_send_interval = 60,           \
   .send_first_time_BCD ={0x05,0x20}  ,           \
   .timing_send_num = 1,                       \
   .timing_send_time_BCD = {{0x05,0x20}},           \
   .retransmission_interval = 10,           \
   .retransmission_num = 0,                  \
   .comm_timeout_time =120,                 \
UP_COMM_PARA_T   up_comm_para_g = {                  \
   .slave_address = 1,                                \
   .baudrate_code = BAUDRATE_115200,           \
   .parity_bit = PARITY_NONE,                       \
};
WRC_PARA_SIZHU_T wrc_para_sizhu_g = {                     \
   .ip1 = {39,108,81,105},                                  \
   .ip_port1 = 9692,                                            \
   .ip1_connect_type = LINK_TCP,                       \
   .ip2 = {120,77,85,236},                                \
   .ip_port2 = 9692,                                           \
   .ip2_connect_type = LINK_TCP,                       \
   .bat_power_data_interval = 60,                       \
   .ext_power_data_interval = 5,                       \
   .time_start_type = WRC_TIME_START_INTERVAL,     \
   .bat_power_send_interval = 1440,                    \
   .ext_power_send_interval = 60,                       \
   .send_first_time_BCD ={0x05,0x20}  ,              \
   .timing_send_num = 1,                                   \
   .timing_send_time_BCD = {{0x05,0x20}},          \
   .retransmission_interval = 10,                       \
   .retransmission_num = 0,                                 \
   .comm_timeout_time =120,                                \
   .KVer_AES_128[0] ={8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0},  \
};
WRC_DATA_NUM_CTRL_PARA_SIZHU_T   wrc_data_num_ctrl_para_sizhu_g={      \
   .report_data_save_num = 0,         \
   .report_data_left_num = 0,         \
};
BILLING_VALVE_CTRL_PATA_T billing_valve_ctrl_para_g = {   \
   .balance_valve_ctrl_byte = {0},                 \
   .conditional_valve_ctrl_byte = {0},           \
  .balance_small_value = {500,100,0,0,0},       \
  .cumulate_flow_threshold = 0,                    \
  .no_wrc_days = 15,                                        \
  .no_use_gas_days = 0,                                 \
};
LOG_SIZHU_HISTORY_CTRL_T      log_sizhu_history_ctrl_g = {      \
   .per_month_log.log_addr_save = HISTORY_MONTH_START_ADDR,    \
   .per_day_log.log_addr_save = HISTORY_DAY_START_ADDR,    \
   .per_hour_log.log_addr_save = HISTORY_HOUR_START_ADDR,    \
   .per_interval_log.log_addr_save = HISTORY_INTERVAL_START_ADDR,    \
};
LOG_ALARM_CTRL_T log_alarm_ctrl_g ={      \
   .system_alarm_log.log_addr_save = SYSTEM_ALARM_LOG_START_ADDR,    \
};
LOG_EVENT_CTRL_T log_event_ctrl_g ={      \
   .valve_operation_log.log_addr_save = VALVE_OPERATION_EVENT_LOG_START_ADDR,    \
   .factory_reset_log.log_addr_save = FACTORY_RESET_EVENT_LOG_START_ADDR,    \
   .set_time_log.log_addr_save = SET_TIME_EVENT_LOG_START_ADDR,    \
};
LOG_PARA_MODIFY_CTRL_T   log_para_modify_ctrl_g = {      \
   .basic_info_modify_log.log_addr_save = BASIC_INFO_MODIFY_LOG_START_ADDR,    \
   .cumulate_modify_log.log_addr_save = CUMULATE_MODIFY_LOG_START_ADDR,    \
   .balance_modify_log.log_addr_save = BALANCE_MODIFY_LOG_START_ADDR,    \
   .flow_meter_para_modify_log.log_addr_save = FLOWMETER_PARA_MODIFY_LOG_START_ADDR,    \
   .conditional_close_valve_para_modify_log.log_addr_save = CONDITIONAL_CLOSE_VALVE_CTRL_MODIFY_LOG_START_ADDR,    \
   .fun_ctrl_word_modify_log.log_addr_save = FUN_CTRL_MODIFY_LOG_START_ADDR,    \
   .alarm_ctrl_word_modify_log.log_addr_save = ALARM_CTRL_MODIFY_LOG_START_ADDR,    \
   .close_valve_ctrl_word_modify_log.log_addr_save = VALVE_CTRL_BYTES_MODIFY_LOG_START_ADDR,    \
};
//EEPROM²ÎÊýдÈëºÍ¶ÁÈ¡¼ì²é,Ö»Ö§³Ö1024¸ö×Ö½ÚµÄдÈëÓë¶ÁÈ¡¼ì²é
@@ -88,9 +151,11 @@
   if(length >1024)   
      return FAIL;
   
   EEPROM_CTRL_ENABLE;
   EEPROM_MultipleWrite(write_data,addr,length);
   
   EEPROM_MultipleRead(buf_l,addr,length);
   EEPROM_CTRL_DISABLE;
   
   return ucharcmp(write_data,buf_l,length);
}
@@ -99,6 +164,8 @@
ErrorStatus   eepABWriteAndReadCheck(uint8_t * write_data,uint32_t addrA,uint32_t addrB,uint16_t length)
{
   ErrorStatus   return_flag = PASS;
   if(eepWriteAndReadCheck(write_data,addrA,length)==FAIL)
   {
      if(eepWriteAndReadCheck(write_data,addrA,length)==FAIL)
@@ -119,7 +186,7 @@
}
//EEPROM²ÎÊý¶ÁÈ¡²¢¼ì²é£¬Ö»Ö§³Ö×î´ó1024×Ö½Ú¶ÁÈ¡
ErrorStatus   eepABReadCheck(uint8_t * write_data,uint32_t addrA,uint32_t addrB,uint16_t length)
ErrorStatus   eepABReadCheck(uint8_t * read_data,uint32_t addrA,uint32_t addrB,uint16_t length)
{
   ErrorStatus   read_flag = FAIL;
   uint16_t CRC16_MODBUS;
@@ -130,6 +197,7 @@
   if(length >1024)   
      return FAIL;
   
   EEPROM_CTRL_ENABLE;
   for(count_i=0;count_i< read_times;count_i++)
   {
      memset (buf_l,0,sizeof (buf_l));
@@ -142,13 +210,15 @@
         break;
      }
   }
   EEPROM_CTRL_DISABLE;
   
   if(read_flag == PASS)
   {
      arrayA_2_arrayB(buf_l, write_data, length, LITTLE_ENDIAN) ;
      arrayA_2_arrayB(buf_l, read_data, length, LITTLE_ENDIAN) ;
      return PASS;
   }else
   {
      EEPROM_CTRL_ENABLE;
      for(count_i=0;count_i< read_times;count_i++)
      {
         memset (buf_l,0,sizeof (buf_l));
@@ -164,11 +234,13 @@
      
      if(read_flag == PASS)
      {
         arrayA_2_arrayB(buf_l, write_data, length, LITTLE_ENDIAN) ;
         arrayA_2_arrayB(buf_l, read_data, length, LITTLE_ENDIAN) ;
         EEPROM_MultipleWrite(buf_l,addrA,length);//AÇøÐ£Ñé´íÎó£¬BÇøÕýÈ·£¬Ôò½«BÇøÊý¾ÝдÈëAÇø
         EEPROM_CTRL_DISABLE;
         return PASS;
      }else
      {
         EEPROM_CTRL_DISABLE;
         return FAIL;
      }            
   }   
@@ -218,7 +290,285 @@
}
//ËùÓвÎÊý³õʼ»¯ÎªÄ¬ÈÏÖµ²¢Ð´ÈëEEPROM
//É豸»ù´¡ÐÅÏ¢³õʼ»¯Ð´Èë
ErrorStatus   EquipmentBasicInfoDefaultInit(void)
{
   return paraCalcCrcAndWriteEepAB((uint8_t * )&equipment_basic_inf_g,BASIC_INFORMATION_OF_EQUIPMENT_ADDR,BASIC_INFORMATION_OF_EQUIPMENT_ADDR + PARA_EEP_B_OFFSET_ADDR,EQUIPMENT_BASIC_INF_LENGTH);
}
//É豸»ù´¡ÐÅÏ¢¶ÁÈ¡
ErrorStatus   EquipmentBasicInfoReadFromEep(void)
{
   if(   eepABReadCheck((uint8_t * )&equipment_basic_inf_g,BASIC_INFORMATION_OF_EQUIPMENT_ADDR,BASIC_INFORMATION_OF_EQUIPMENT_ADDR + PARA_EEP_B_OFFSET_ADDR,EQUIPMENT_BASIC_INF_LENGTH) == FAIL)
   {
      EquipmentBasicInfoDefaultInit();
      return FAIL;
   }else
   {
      return PASS;
   }
}
//¼¸¸ö¿ØÖÆ×Ö³õʼ»¯Ð´Èë
ErrorStatus   CtrlWordParaDefaultInit(void)
{
   ErrorStatus return_flag = PASS;
   SAVE_FUN_CTRL_WORD_T   save_fun_ctrl_word_l;
   SAVE_ALARM_CTRL_WORD_T   save_alarm_ctrl_word_l;
   SAVE_VALVE_CTRL_WORD_T   save_valve_ctrl_word_l;
//   SYSTEM_FUNCTION_CTRL_WORD_T    system_function_ctrl_word_l = {        \
//      .fun_ctrl_word.billing_type = 0x02,                                       \
//   };
//   SYSTEM_ALARM_CTRL_WORD_T       system_alarm_ctrl_word_l= {.alarm_ctl_word={
//      .system_start = 1,
//      .power_state = 1,
//      .valve_error = 1,
//      .valve_state_change = 1,
//      .set_cumulate_up_to = 1,
//      .no_use_gas_date_up_to = 1,
//      .no_gprs_date_up_to = 1,
//      .balance_small_3 = 1,
//      .lith_low = 1,
//      .lith_down  = 1,
//      .lith_remove = 1,
//      .alka_low = 1,
//      .alka_down = 1,
//      .alka_remove = 1,
//      .gprs_status = 1,  //Ô¶´«Ê§°ÜÖ»±¨¾¯£¬²»Éϱ¨
//      .RS485_err = 1,
//      .RS485_lessen = 1,
//      .broken_line = 1,
//      .temp_err = 1,
//      .cpu_temp_up = 1,
//      .cpu_temp_down = 1,
//      .press_err = 1,
//      .lcd_up = 1,
//      .cl_have_flow = 1,
//      }
//   };
//
//   SYSTEM_ALARM_CTRL_WORD_T     system_alarm_report_ctrl_word_l= {.alarm_ctl_word={
//      .system_start = 1,
//      .power_state = 1,
//      .valve_error = 1,
//      .valve_state_change = 1,
//      .set_cumulate_up_to = 1,
//      .no_use_gas_date_up_to = 1,
//      .no_gprs_date_up_to = 1,
//      .balance_small_3 = 1,
//      .lith_low = 1,
//      .lith_down  = 1,
//      .lith_remove = 1,
//      .alka_low = 1,
//      .alka_down = 1,
//      .alka_remove = 1,
//      //.gprs_status = 1,  //Ô¶´«Ê§°ÜÖ»±¨¾¯£¬²»Éϱ¨
//      .RS485_err = 1,
//      .RS485_lessen = 1,
//      .broken_line = 1,
//      .temp_err = 1,
//      .cpu_temp_up = 1,
//      .cpu_temp_down = 1,
//      .press_err = 1,
//      .lcd_up = 1,
//      .cl_have_flow = 1,
//      }
//   };
//
//   VALVE_CTL_BYTES_UNION_T valve_ctl_bytes_l = {.valve_ctrl_bytes = {
//      {0},
//      {0},
//      {0},
//      {.lith_down_need_close_valve_flag =1,.lith_down_close_valve_type = 1,.lith_remove_need_close_valve_flag =1,.lith_remove_close_valve_type =1,
//      //.alka_down_need_close_valve_flag= 1,.alka_down_close_valve_type = 1,.alka_remove_need_close_valve_flag =1,.alka_remove_close_valve_type =1,
//      },
//      {0},
//      {0},
//      {0},
//      {0},
//      {0},
//      {0},
//      {0},}
//   };
   arrayA_2_arrayB((uint8_t*)&system_function_ctrl_word_g,(uint8_t*)&save_fun_ctrl_word_l.fun_ctrl_word,sizeof(system_function_ctrl_word_g),LITTLE_ENDIAN);
   arrayA_2_arrayB((uint8_t*)&system_alarm_ctrl_word_g,(uint8_t*)&save_alarm_ctrl_word_l.alarm_ctrl_word,sizeof(system_alarm_ctrl_word_g),LITTLE_ENDIAN);
   arrayA_2_arrayB((uint8_t*)&system_alarm_report_ctrl_word_g,(uint8_t*)&save_alarm_ctrl_word_l.alarm_report_ctrl_word,sizeof(system_alarm_report_ctrl_word_g),LITTLE_ENDIAN);
   arrayA_2_arrayB((uint8_t*)&valve_ctl_bytes_g,(uint8_t*)&save_valve_ctrl_word_l.valve_ctrl_word,sizeof(valve_ctl_bytes_g),LITTLE_ENDIAN);
   if(paraCalcCrcAndWriteEepAB((uint8_t * )&save_fun_ctrl_word_l,SYSTEM_FUNCTION_CTRL_WORD_ADDR,SYSTEM_FUNCTION_CTRL_WORD_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(save_fun_ctrl_word_l))==FAIL)
      return_flag = FAIL;
   if(paraCalcCrcAndWriteEepAB((uint8_t * )&save_alarm_ctrl_word_l,SYSTEM_ALARM_CTRL_WORD_ADDR,SYSTEM_ALARM_CTRL_WORD_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(save_alarm_ctrl_word_l))==FAIL)
      return_flag = FAIL;
   if(paraCalcCrcAndWriteEepAB((uint8_t * )&save_valve_ctrl_word_l,VALVE_CTL_BYTES_ADDR,VALVE_CTL_BYTES_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(save_valve_ctrl_word_l))==FAIL)
      return_flag = FAIL;
   return return_flag;
}
//¼¸¸ö¿ØÖÆ×Ö¶ÁÈ¡
ErrorStatus   CtrlWordParaReadFromEep(void)
{
   ErrorStatus return_flag = PASS;
   SAVE_FUN_CTRL_WORD_T   save_fun_ctrl_word_l;
   SAVE_ALARM_CTRL_WORD_T   save_alarm_ctrl_word_l;
   SAVE_VALVE_CTRL_WORD_T   save_valve_ctrl_word_l;
   if(   eepABReadCheck((uint8_t * )&save_fun_ctrl_word_l,SYSTEM_FUNCTION_CTRL_WORD_ADDR,SYSTEM_FUNCTION_CTRL_WORD_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(save_fun_ctrl_word_l)) == FAIL)
   {
      return_flag = FAIL;
   }else
   {
      arrayA_2_arrayB((uint8_t*)&save_fun_ctrl_word_l.fun_ctrl_word,(uint8_t*)&system_function_ctrl_word_g,sizeof(system_function_ctrl_word_g),LITTLE_ENDIAN);
   }
   if(   eepABReadCheck((uint8_t * )&save_alarm_ctrl_word_l,SYSTEM_ALARM_CTRL_WORD_ADDR,SYSTEM_ALARM_CTRL_WORD_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(save_alarm_ctrl_word_l)) == FAIL)
   {
      return_flag = FAIL;
   }else
   {
      arrayA_2_arrayB((uint8_t*)&save_alarm_ctrl_word_l.alarm_ctrl_word,(uint8_t*)&system_alarm_ctrl_word_g,sizeof(system_alarm_ctrl_word_g),LITTLE_ENDIAN);
      arrayA_2_arrayB((uint8_t*)&save_alarm_ctrl_word_l.alarm_report_ctrl_word,(uint8_t*)&system_alarm_report_ctrl_word_g,sizeof(system_alarm_report_ctrl_word_g),LITTLE_ENDIAN);
   }
   if(   eepABReadCheck((uint8_t * )&save_valve_ctrl_word_l,VALVE_CTL_BYTES_ADDR,VALVE_CTL_BYTES_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(save_valve_ctrl_word_l)) == FAIL)
   {
      return_flag = FAIL;
   }else
   {
      arrayA_2_arrayB((uint8_t*)&save_valve_ctrl_word_l.valve_ctrl_word,(uint8_t*)&valve_ctl_bytes_g,sizeof(valve_ctl_bytes_g),LITTLE_ENDIAN);
   }
}
//ÈÕÖ¾¿ØÖƲÎÊý³õʼ»¯Ð´Èë
ErrorStatus   LogCtrlParaDefaultInit(void)
{
   ErrorStatus return_flag = PASS;
   log_sizhu_history_ctrl_g.per_month_log.log_count = 0;
   log_sizhu_history_ctrl_g.per_month_log.log_addr_save = HISTORY_MONTH_START_ADDR;
   log_sizhu_history_ctrl_g.per_day_log.log_count = 0;
   log_sizhu_history_ctrl_g.per_day_log.log_addr_save = HISTORY_DAY_START_ADDR;
   log_sizhu_history_ctrl_g.per_hour_log.log_count = 0;
   log_sizhu_history_ctrl_g.per_hour_log.log_addr_save = HISTORY_HOUR_START_ADDR;
   log_sizhu_history_ctrl_g.per_interval_log.log_count = 0;
   log_sizhu_history_ctrl_g.per_interval_log.log_addr_save = HISTORY_INTERVAL_START_ADDR;
   log_alarm_ctrl_g.system_alarm_log.log_count = 0;
   log_alarm_ctrl_g.system_alarm_log.log_addr_save = SYSTEM_ALARM_LOG_START_ADDR;
   log_event_ctrl_g.valve_operation_log.log_count = 0;
   log_event_ctrl_g.valve_operation_log.log_addr_save = VALVE_OPERATION_EVENT_LOG_START_ADDR;
   log_event_ctrl_g.factory_reset_log.log_count = 0;
   log_event_ctrl_g.factory_reset_log.log_addr_save = FACTORY_RESET_EVENT_LOG_START_ADDR;
   log_event_ctrl_g.set_time_log.log_count = 0;
   log_event_ctrl_g.set_time_log.log_addr_save = SET_TIME_EVENT_LOG_START_ADDR;
   log_para_modify_ctrl_g.basic_info_modify_log.log_count = 0;
   log_para_modify_ctrl_g.basic_info_modify_log.log_addr_save = BASIC_INFO_MODIFY_LOG_START_ADDR;
   log_para_modify_ctrl_g.cumulate_modify_log.log_count = 0;
   log_para_modify_ctrl_g.cumulate_modify_log.log_addr_save = CUMULATE_MODIFY_LOG_START_ADDR;
   log_para_modify_ctrl_g.balance_modify_log.log_count = 0;
   log_para_modify_ctrl_g.balance_modify_log.log_addr_save = BALANCE_MODIFY_LOG_START_ADDR;
   log_para_modify_ctrl_g.flow_meter_para_modify_log.log_count = 0;
   log_para_modify_ctrl_g.flow_meter_para_modify_log.log_addr_save = FLOWMETER_PARA_MODIFY_LOG_START_ADDR;
   log_para_modify_ctrl_g.conditional_close_valve_para_modify_log.log_count = 0;
   log_para_modify_ctrl_g.conditional_close_valve_para_modify_log.log_addr_save = CONDITIONAL_CLOSE_VALVE_CTRL_MODIFY_LOG_START_ADDR;
   log_para_modify_ctrl_g.fun_ctrl_word_modify_log.log_count = 0;
   log_para_modify_ctrl_g.fun_ctrl_word_modify_log.log_addr_save = FUN_CTRL_MODIFY_LOG_START_ADDR;
   log_para_modify_ctrl_g.alarm_ctrl_word_modify_log.log_count = 0;
   log_para_modify_ctrl_g.alarm_ctrl_word_modify_log.log_addr_save = ALARM_CTRL_MODIFY_LOG_START_ADDR;
   log_para_modify_ctrl_g.close_valve_ctrl_word_modify_log.log_count = 0;
   log_para_modify_ctrl_g.close_valve_ctrl_word_modify_log.log_addr_save = VALVE_CTRL_BYTES_MODIFY_LOG_START_ADDR;
   if(paraCalcCrcAndWriteEepAB((uint8_t * )&log_sizhu_history_ctrl_g,LOG_SIZHU_HISTORY_CTRL_ADDR,LOG_SIZHU_HISTORY_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_sizhu_history_ctrl_g))==FAIL)
      return_flag = FAIL;
   if(paraCalcCrcAndWriteEepAB((uint8_t * )&log_alarm_ctrl_g,LOG_ALARM_CTRL_ADDR,LOG_ALARM_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_alarm_ctrl_g))==FAIL)
      return_flag = FAIL;
   if(paraCalcCrcAndWriteEepAB((uint8_t * )&log_event_ctrl_g,LOG_EVENT_CTRL_ADDR,LOG_EVENT_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_event_ctrl_g))==FAIL)
      return_flag = FAIL;
   if(paraCalcCrcAndWriteEepAB((uint8_t * )&log_para_modify_ctrl_g,LOG_PARA_MODIFY_CTRL_ADDR,LOG_PARA_MODIFY_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_para_modify_ctrl_g))==FAIL)
      return_flag = FAIL;
   return return_flag;
}
//ÈÕÖ¾¿ØÖƲÎÊý³õʼ»¯¶ÁÈ¡
ErrorStatus   LogCtrlParaReadFromEep(void)
{
   ErrorStatus return_flag = PASS;
   if(   eepABReadCheck((uint8_t * )&log_sizhu_history_ctrl_g,LOG_SIZHU_HISTORY_CTRL_ADDR,LOG_SIZHU_HISTORY_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_sizhu_history_ctrl_g)) == FAIL)
   {
      log_sizhu_history_ctrl_g.per_month_log.log_count = 0;
      log_sizhu_history_ctrl_g.per_month_log.log_addr_save = HISTORY_MONTH_START_ADDR;
      log_sizhu_history_ctrl_g.per_day_log.log_count = 0;
      log_sizhu_history_ctrl_g.per_day_log.log_addr_save = HISTORY_DAY_START_ADDR;
      log_sizhu_history_ctrl_g.per_hour_log.log_count = 0;
      log_sizhu_history_ctrl_g.per_hour_log.log_addr_save = HISTORY_HOUR_START_ADDR;
      log_sizhu_history_ctrl_g.per_interval_log.log_count = 0;
      log_sizhu_history_ctrl_g.per_interval_log.log_addr_save = HISTORY_INTERVAL_START_ADDR;
      paraCalcCrcAndWriteEepAB((uint8_t * )&log_sizhu_history_ctrl_g,LOG_SIZHU_HISTORY_CTRL_ADDR,LOG_SIZHU_HISTORY_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_sizhu_history_ctrl_g));
      return_flag = FAIL;
   }
   if(   eepABReadCheck((uint8_t * )&log_alarm_ctrl_g,LOG_ALARM_CTRL_ADDR,LOG_ALARM_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_alarm_ctrl_g)) == FAIL)
   {
      log_alarm_ctrl_g.system_alarm_log.log_count = 0;
      log_alarm_ctrl_g.system_alarm_log.log_addr_save = SYSTEM_ALARM_LOG_START_ADDR;
      paraCalcCrcAndWriteEepAB((uint8_t * )&log_alarm_ctrl_g,LOG_ALARM_CTRL_ADDR,LOG_ALARM_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_alarm_ctrl_g));
      return_flag = FAIL;
   }
   if(   eepABReadCheck((uint8_t * )&log_event_ctrl_g,LOG_EVENT_CTRL_ADDR,LOG_EVENT_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_event_ctrl_g)) == FAIL)
   {
      log_event_ctrl_g.valve_operation_log.log_count = 0;
      log_event_ctrl_g.valve_operation_log.log_addr_save = VALVE_OPERATION_EVENT_LOG_START_ADDR;
      log_event_ctrl_g.factory_reset_log.log_count = 0;
      log_event_ctrl_g.factory_reset_log.log_addr_save = FACTORY_RESET_EVENT_LOG_START_ADDR;
      log_event_ctrl_g.set_time_log.log_count = 0;
      log_event_ctrl_g.set_time_log.log_addr_save = SET_TIME_EVENT_LOG_START_ADDR;
      paraCalcCrcAndWriteEepAB((uint8_t * )&log_event_ctrl_g,LOG_EVENT_CTRL_ADDR,LOG_EVENT_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_event_ctrl_g));
      return_flag = FAIL;
   }
   if(   eepABReadCheck((uint8_t * )&log_para_modify_ctrl_g,LOG_PARA_MODIFY_CTRL_ADDR,LOG_PARA_MODIFY_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_para_modify_ctrl_g)) == FAIL)
   {
      log_para_modify_ctrl_g.basic_info_modify_log.log_count = 0;
      log_para_modify_ctrl_g.basic_info_modify_log.log_addr_save = BASIC_INFO_MODIFY_LOG_START_ADDR;
      log_para_modify_ctrl_g.cumulate_modify_log.log_count = 0;
      log_para_modify_ctrl_g.cumulate_modify_log.log_addr_save = CUMULATE_MODIFY_LOG_START_ADDR;
      log_para_modify_ctrl_g.balance_modify_log.log_count = 0;
      log_para_modify_ctrl_g.balance_modify_log.log_addr_save = BALANCE_MODIFY_LOG_START_ADDR;
      log_para_modify_ctrl_g.flow_meter_para_modify_log.log_count = 0;
      log_para_modify_ctrl_g.flow_meter_para_modify_log.log_addr_save = FLOWMETER_PARA_MODIFY_LOG_START_ADDR;
      log_para_modify_ctrl_g.conditional_close_valve_para_modify_log.log_count = 0;
      log_para_modify_ctrl_g.conditional_close_valve_para_modify_log.log_addr_save = CONDITIONAL_CLOSE_VALVE_CTRL_MODIFY_LOG_START_ADDR;
      log_para_modify_ctrl_g.fun_ctrl_word_modify_log.log_count = 0;
      log_para_modify_ctrl_g.fun_ctrl_word_modify_log.log_addr_save = FUN_CTRL_MODIFY_LOG_START_ADDR;
      log_para_modify_ctrl_g.alarm_ctrl_word_modify_log.log_count = 0;
      log_para_modify_ctrl_g.alarm_ctrl_word_modify_log.log_addr_save = ALARM_CTRL_MODIFY_LOG_START_ADDR;
      log_para_modify_ctrl_g.close_valve_ctrl_word_modify_log.log_count = 0;
      log_para_modify_ctrl_g.close_valve_ctrl_word_modify_log.log_addr_save = VALVE_CTRL_BYTES_MODIFY_LOG_START_ADDR;
      paraCalcCrcAndWriteEepAB((uint8_t * )&log_para_modify_ctrl_g,LOG_PARA_MODIFY_CTRL_ADDR,LOG_PARA_MODIFY_CTRL_ADDR + PARA_EEP_B_OFFSET_ADDR,sizeof(log_para_modify_ctrl_g));
      return_flag = FAIL;
   }
   return return_flag;
}
//?ËùÓвÎÊý³õʼ»¯ÎªÄ¬ÈÏÖµ²¢Ð´ÈëEEPROM
void allParaDefaultInit(void)
{
   ErrorStatus   return_flag = PASS;
@@ -227,18 +577,29 @@
   
   
   //É豸»ù´¡ÐÅÏ¢³õʼ»¯Ð´Èë
   if(EquipmentBasicInfoDefaultInit()==FAIL) return_flag = FAIL;
   
   //?¼ÌÐø²¹³ä
   
   //ʵʱÊý¾Ý³õʼ»¯Ð´Èë
   
   //×îÖÕÅжÏreturn_flag==FAIL£¬Ôò±¨¾¯´æ´¢Òì³££¬Èç¹û»¹ÓÐÕâ¸ö±¨¾¯µÄ»°
   //¼¸¸ö¿ØÖÆ×Ö³õʼ»¯Ð´Èë
   if(CtrlWordParaDefaultInit()==FAIL) return_flag = FAIL;
   
   //ÈÕÖ¾¿ØÖƲÎÊý
   if(LogCtrlParaDefaultInit()==FAIL) return_flag = FAIL;
   //×îÖÕÅжÏreturn_flag==FAIL£¬Ôò±¨¾¯´æ´¢Òì³££¬Èç¹û»¹ÓÐÕâ¸ö±¨¾¯µÄ»°
   if(return_flag==FAIL){
      ;
   }
}
//ËùÓвÎÊýÖ±½Ó¶ÁÈ¡
//?ËùÓвÎÊýÖ±½Ó¶ÁÈ¡
void allParaReadFromEep(void)
{
   ErrorStatus   return_flag = PASS;
@@ -246,9 +607,20 @@
   if(systemEepIdReadFromEep()==FAIL) return_flag = FAIL;
   
   //É豸»ù´¡ÐÅÏ¢¶ÁÈ¡
   if(EquipmentBasicInfoReadFromEep()==FAIL) return_flag = FAIL;
   //?¼ÌÐø²¹³ä
   //¼¸¸ö¿ØÖÆ×Ö¶ÁÈ¡
   if(CtrlWordParaReadFromEep()==FAIL) return_flag = FAIL;
   //ÈÕÖ¾¿ØÖÆÐÅÏ¢¶ÁÈ¡
   if(LogCtrlParaReadFromEep()==FAIL) return_flag = FAIL;
   
   //×îÖÕÅжÏreturn_flag==FAIL£¬Ôò±¨¾¯´æ´¢Òì³££¬Èç¹û»¹ÓÐÕâ¸ö±¨¾¯µÄ»°
   if(return_flag==FAIL){
      ;
   }
}