#include "system_log.h"
|
#include "e2p.h"
|
#include "uart.h"
|
#include "gprs.h"
|
#include "low_pwr_test.h"
|
#include "rtc.h"
|
|
TYPE_CHECK_SIZE(SAVE_DATA_START_PARA_T,6);//ºË²é½á¹¹Ìå´óС
|
SAVE_DATA_START_PARA_T save_day_month_timing_g = {
|
.set_minute_bcd = 0,
|
.set_hour_bcd = 0};
|
|
/*ÉèÖÃĬÈÏʱ¼ä£¬Á÷Á¿ºÍ¼Û¸ñµÈÐÅÏ¢*/
|
TYPE_CHECK_SIZE(SAVE_REALTIME_DATA_T,119);//ºË²é½á¹¹Ìå´óС
|
SAVE_REALTIME_DATA_T save_realtime_data_g = {
|
.record_time_bcd = {0},
|
.realtime_flow_data_s = {0},
|
.realtime_billing_data_s = {0},
|
.lith_bat_working_time_remain_hour = LITH_BAT_WORKING_TIME_MAX, //Ê£Ó๤×÷ʱ¼ä µ¥Î»£ºÐ¡Ê±
|
};
|
|
static SYS_FLOW_DATA_LOG_T sys_flow_data_log_flag_g = SYS_FLOW_DATA_NONE;
|
|
uint8_t pay_flag_g = 0;
|
FlagStatus key_save_send_data_flag_g = RESET;
|
|
/*ʵʱÊý¾Ý¼Ç¼´¢´æ
|
·µ»ØÖµ£ºERROR_1 ʧ°Ü SUCCESS_0 ³É¹¦*/
|
ErrorStatus_STM32 RealTimeData_LogStore(SAVE_REALTIME_DATA_T * save_realtime_data_p,SYS_REAL_TIME_DATA_T *realtime_data_p,
|
BILLING_REAL_PARA_T *billing_realtime_p, __IO RTC_TimeDateTypeDef *calendar_p)
|
{
|
static double last_forward_cumulate_sc = 0;
|
// if(realtime_data_p->measure_para_s.forward_cumulate_sc > last_forward_cumulate_sc)
|
// {
|
save_realtime_data_p->record_time_bcd[0] = calendar_p->Year & 0xFF; // ʱ¼ä¼Ç¼¹¹Ôì
|
save_realtime_data_p->record_time_bcd[1] = calendar_p->Month;
|
save_realtime_data_p->record_time_bcd[2] = calendar_p->Date;
|
save_realtime_data_p->record_time_bcd[3] = calendar_p->Hour;
|
save_realtime_data_p->record_time_bcd[4] = calendar_p->Minute;
|
save_realtime_data_p->record_time_bcd[5] = calendar_p->Second;
|
|
memcpy(&save_realtime_data_p->realtime_flow_data_s,&realtime_data_p->measure_para_s,sizeof(save_realtime_data_p->realtime_flow_data_s));
|
save_realtime_data_p->realtime_flow_data_s.temp_avg = realtime_data_p->measure_para_s.temperature;
|
save_realtime_data_p->realtime_flow_data_s.press_avg = realtime_data_p->measure_para_s.pressure;
|
|
memcpy(&save_realtime_data_p->realtime_billing_data_s,&billing_real_para_g,sizeof(save_realtime_data_p->realtime_billing_data_s));
|
|
return Sys_Log_E2pParaMultipleWrite(&sys_store_para_table[PARA_SAVE_REALTIME_DATA],1);
|
// }
|
// return ERROR_1;
|
}
|
|
/*·¢ËÍÁ÷Á¿Êý¾Ý´æ´¢µÄÌØÊâ´¦Àí
|
write_cnt£ºÐ´´ÎÊý
|
*/
|
ErrorStatus_STM32 SendFlowData_StoreSpecialHandler(uint8_t write_cnt,__IO RTC_TimeDateTypeDef *calendar_p)
|
{
|
SYS_SEND_FLOW_DATA_SYSLOG_FORMAT_T send_data_buffer;
|
SendFlowData_LogRecordCreated(&send_data_buffer, &sys_realtime_data_g, &billing_real_para_g, calendar_p);
|
/*¼ÆËãУÑéºÍ*/
|
send_data_buffer.check_sum = CalcCheckSum(&send_data_buffer.record_time[0],SEND_FLOW_DATA_LOG_FORMAT_SIZE - 1);
|
/*´¢´æ*/
|
return SendFlowData_SpecialWrite((uint8_t *)&send_data_buffer,write_cnt);
|
}
|
|
|
void System_FlowData_CyclicStorageHandler(__IO RTC_TimeDateTypeDef *calendar_p)
|
{
|
SYS_FLOW_DATA_SYSLOG_FORMAT_T data_buffer;
|
if (calendar_p->Second == 0x03)
|
{
|
if ((BCD_2_HEX_U8(calendar_p->Minute) % 5 == 0) || cal_mode_exit_save_cumulate_flag_g) // ϵͳ5·ÖÖÓÖÜÆÚ´¢´æÒ»´Î
|
{
|
cal_mode_exit_save_cumulate_flag_g = 0;
|
E2p_GPIO_Clk_Init();
|
RealTimeData_LogStore(&save_realtime_data_g, &sys_realtime_data_g, &billing_real_para_g, calendar_p);
|
}
|
|
}
|
if(((calendar_p->Second == 0) && (BCD_2_HEX_U8(calendar_p->Minute) % gprs_network_cfg_para_g.save_data_period_min_time == 0))
|
|| key_save_send_data_flag_g)// ·¢ËÍÁ÷Á¿¶³½áÊý¾ÝµÄ´æ´¢
|
{
|
key_save_send_data_flag_g = RESET;
|
E2p_GPIO_Clk_Init();
|
SendFlowData_StoreSpecialHandler(1,calendar_p);
|
gprs_save_send_para_g.send_data_log_save_cnt++; // Éϴε½Õâ´Î·¢Ëͼä¸ôµÄ²É¼¯ÌõÊý
|
}
|
if (calendar_p->Second == 0)
|
{
|
if (calendar_p->Minute == 0) // ÿСʱ´¢´æÒ»´Î
|
{
|
E2p_GPIO_Clk_Init();
|
FlowData_LogRecordCreated(&data_buffer, &sys_realtime_data_g, &billing_real_para_g, calendar_p); // ¹¹ÔìÊý¾Ý
|
Sys_Log_E2pCyclicMultipleWrite(&sys_log_cyclic_table[CYCL_HOUR_FLOW_DATA], (uint8_t *)&data_buffer,1);
|
}
|
if (calendar_p->Hour == save_day_month_timing_g.set_hour_bcd && calendar_p->Minute == save_day_month_timing_g.set_minute_bcd) // ÿÌì
|
{
|
E2p_GPIO_Clk_Init();
|
FlowData_LogRecordCreated(&data_buffer, &sys_realtime_data_g, &billing_real_para_g, calendar_p);
|
Sys_Log_E2pCyclicMultipleWrite(&sys_log_cyclic_table[CYCL_DAY_FLOW_DATA], (uint8_t *)&data_buffer,1);
|
if (calendar_p->Date == 1) // ÿÔÂ
|
Sys_Log_E2pCyclicMultipleWrite(&sys_log_cyclic_table[CYCL_MONTH_FLOW_DATA], (uint8_t *)&data_buffer,1);
|
}
|
}
|
}
|
|
void System_LogProcess(void)
|
{
|
/*ÆÕͨ±¨¾¯ÈÕÖ¾¼Ç¼*/
|
AlarmLog_CyclicStorageHandler(&sys_alarm_id_g, &sys_realtime_data_g, &billing_real_para_g, &calendar_g);
|
/*Á÷Á¿Êý¾Ý¼Ç¼*/
|
System_FlowData_CyclicStorageHandler(&calendar_g);
|
/*·§¿ØÈÕÖ¾¼Ç¼*/
|
System_ValveLog_CyclicStorageHandler(&op_cl_valve_log_flag_g, op_cl_valve_cause_id, &valve_log_g, &calendar_g);
|
/*³äÖµ¼Ç¼*/
|
PayLog_CyclicStorageHandler(&pay_flag_g,&pay_para_g,&calendar_g);
|
/*Уʱ¼Ç¼*/
|
TimingLog_CyclicStorageHandler(&timing_log_g,&calendar_g);
|
/*²ÎÊýÐ޸ļǼ*/
|
ParaAmendLog_CyclicStorageHandler(&sys_para_amend_log_flag_g,¶_amend_log_g,&calendar_g);
|
}
|
|
#define REALTIME_DATA_CUMULATE_LEN sizeof(save_realtime_data_g.realtime_flow_data_s) - \
|
sizeof(save_realtime_data_g.realtime_flow_data_s.temp_avg) - \
|
sizeof(save_realtime_data_g.realtime_flow_data_s.press_avg)
|
/*ϵͳÊ×´ÎÉϵ紦Àí*/
|
void Sys_FirstPower_E2pProcess(void)
|
{
|
E2P_PWR_ON; // ¿ªÆôE2pµçÔ´
|
/*ÅжÏϵͳÊÇ·ñÊ×´ÎÉϵ磬Ê×´ÎÉϵçÐèдÈëĬÈÏÖµ£¬·ÇÊ×´ÎÖ»Ðè´ÓE2PÖжÁÈ¡Êý¾Ý*/
|
if (Sys_Log_E2pParaDataFirstInit() == RESET) // ·ÇÊ×´ÎÉϵç
|
{
|
/*Ë÷ÒýºÍÂúд±ê־λ³õʼ»¯*/
|
Sys_Log_E2pPara_NoFirstPower_FlagInit();
|
Sys_Log_E2pCyclic_NoFirstPower_FlagInit();
|
|
for (uint8_t i = 1; i < SYS_LOG_PARA_TABLE_NUM; i++) // ²ÎÊýÊý¾Ý´Ó´æ´¢ÖжÁ³ö
|
Sys_Log_E2pParaRead_1_Data(&sys_store_para_table[i]);
|
/*¶Áʵʱʱ¼ä£¬×ÜÁ¿£¬Î¶È,ѹÁ¦Êý¾Ý ʵʱ¼Æ·ÑÊý¾Ý*/
|
memcpy(&sys_realtime_data_g.measure_para_s,&save_realtime_data_g.realtime_flow_data_s,REALTIME_DATA_CUMULATE_LEN);
|
sys_realtime_data_g.measure_para_s.temp_avg = sys_realtime_data_g.measure_para_s.temperature = save_realtime_data_g.realtime_flow_data_s.temp_avg;
|
sys_realtime_data_g.measure_para_s.press_avg = sys_realtime_data_g.measure_para_s.pressure = save_realtime_data_g.realtime_flow_data_s.press_avg;
|
|
memcpy(&billing_real_para_g,&save_realtime_data_g.realtime_billing_data_s,sizeof(save_realtime_data_g.realtime_billing_data_s));
|
/*¶ÁÈ¡·§ÃÅ¿ª¹Ø·§´ÎÊý*/
|
Sys_Log_E2pCyclicMultipleReverseRead(&sys_log_cyclic_table[CYCL_VALVE], (uint8_t *)&valve_log_g, 1);
|
/*Éϵç»ñÈ¡·§ÃÅ״̬*/
|
/*ÓÉÓÚûÓÐÓ²¼þÉϵÄ״̬Ðźţ¬ËùÒÔÀûÓ÷§ÃÅÀúÊ·¼Ç¼»ñÈ¡*/
|
op_cl_valve_cause_id = valve_log_g.switch_cause;
|
if(valve_log_g.work_type == VWT_OPEN || valve_log_g.work_type == VWT_NONE)
|
{
|
__SYS_STATUS_BYTES_STATUS(valve_state, VALVE_OP, AV_NORMAL);
|
}
|
else
|
{
|
__SYS_STATUS_BYTES_STATUS(valve_state, VALVE_CL, AV_NORMAL);
|
if(valve_log_g.work_type == VWT_FORCED_CLOSE || valve_log_g.work_type == VWT_LOCK)
|
__SYS_STATUS_BYTES_STATUS(valve_lock, SET, AV_NORMAL); // ÉÏËø
|
}
|
/*¶ÁÈ¡³äÖµ´ÎÊý*/
|
Sys_Log_E2pCyclicMultipleReverseRead(&sys_log_cyclic_table[CYCL_PAY], (uint8_t *)&pay_para_g, 1);
|
}
|
else // Ê×´ÎÉϵç
|
{
|
// /*Ë÷ÒýºÍÂúд±ê־λ³õʼ»¯*/
|
// Sys_Log_E2pCyclic_FirstPower_FlagInit();
|
// /*²¿·Ö²ÎÊýÉèΪĬÈÏÖµ*/
|
// Sys_Log_E2pParaMultipleWrite(&sys_store_para_table[PARA_SAVE_REALTIME_DATA],1);
|
// Sys_Log_E2pCyclicMultipleWrite(&sys_log_cyclic_table[CYCL_VALVE],(uint8_t *)&valve_log_g,1);
|
// Sys_Log_E2pCyclicMultipleWrite(&sys_log_cyclic_table[CYCL_PAY], (uint8_t *)&pay_para_g,1);
|
}
|
/*Óà¶î/Ìõ¼þ¹Ø·§ÅäÖòÎÊýÖеĹط§×Ö¸³Öµ*/
|
billing_alarm_cfg_g.alarm_ctl_byte_2 = sys_alarm_ctl_bytes_g.alarm_ctl_send_union[1];
|
billing_alarm_cfg_g.alarm_send_byte_2 = sys_alarm_send_bytes_g.alarm_ctl_send_union[1];
|
memcpy(&billing_alarm_cfg_g.valve_close_ctl,&valve_ctl_bytes_g.valve_ctr_2,SIZEOF_OF(BILLING_ALARM_CFG_T,valve_close_ctl));
|
/*ÉèÖÃĬÈÏʱ¼ä*/
|
Set_Sys_Rtc_Time(save_realtime_data_g.record_time_bcd[0], save_realtime_data_g.record_time_bcd[1],
|
save_realtime_data_g.record_time_bcd[2], save_realtime_data_g.record_time_bcd[3],
|
save_realtime_data_g.record_time_bcd[4], save_realtime_data_g.record_time_bcd[5],1);
|
Get_Sys_Rtc_Time(&calendar_g); // »ñȡʱ¼ä
|
auto_exit_start_min_time_g = Bcd_2_Hex(calendar_g.Hour) * 60 + Bcd_2_Hex(calendar_g.Minute);// ×Ô¶¯Í˳öģʽµÄÆðʼ·ÖÖÓʱ¼ä
|
E2P_PWR_OFF; // ¹Ø±ÕE2pµçÔ´
|
}
|
|
|
//#define PARA_UPDATE_1 0x24030701
|
//#define PARA_UPDATE_2 0x24030702
|
//#define PARA_UPDATE_3 0x24030801
|
//typedef struct
|
//{
|
// uint32_t add_para_update_flag;
|
// uint8_t reserve[4];
|
//}ADD_PARA_UPDATE_T;
|
//ADD_PARA_UPDATE_T add_para_update_g = {0};
|
|
//void NewAddPara1_Handler(int update_flag)
|
//{
|
// if((update_flag < PARA_UPDATE_1) || (update_flag = 0) || (update_flag = 0xFFFFFFFF))
|
// {
|
// //ÐÂÔö²ÎÊýдÈëĬÈÏÖµ
|
// add_para_update_g.add_para_update_flag = PARA_UPDATE_1;
|
// Sys_Log_E2pParaMultipleWrite(&sys_store_para_table[PARA_UPDATE_CFG],1);//дÈë²¹¶¡±ê־λ
|
// }
|
//}
|
//void OldAddPara1_Handler(int update_flag)
|
//{
|
// if(update_flag < PARA_UPDATE_2)
|
// {
|
// //ÐÂÔö²ÎÊýдÈëĬÈÏÖµ²¢´æ´¢
|
// {
|
//
|
// }
|
// add_para_update_g.add_para_update_flag = PARA_UPDATE_2;
|
// Sys_Log_E2pParaMultipleWrite(&sys_store_para_table[PARA_UPDATE_CFG],1);//дÈë²¹¶¡±ê־λ
|
// }
|
//}
|
//void NewAddPara2_Handler(int update_flag)
|
//{
|
// if(update_flag < PARA_UPDATE_3)
|
// {
|
// //ÐÂÔö²ÎÊýдÈëĬÈÏÖµ²¢´æ´¢
|
// {
|
//
|
// }
|
// add_para_update_g.add_para_update_flag = PARA_UPDATE_3;
|
// Sys_Log_E2pParaMultipleWrite(&sys_store_para_table[PARA_UPDATE_CFG],1);//дÈë²¹¶¡±ê־λ
|
// }
|
//}
|
|
//void AddParaProcess(void)
|
//{
|
// uint8_t para_update_flag = Sys_Log_E2pParaRead_1_Data(&sys_store_para_table[PARA_UPDATE_CFG]);
|
// NewAddPara1_Handler(para_update_flag);
|
// OldAddPara1_Handler(para_update_flag);
|
// NewAddPara2_Handler(para_update_flag);
|
//}
|