#include "sizhu_history_record.h"
|
#include "system_mem_para.h"
|
#include "rs485_data_analysis_pro.h"
|
#include "power_manage.h"
|
#include "mbcrc1.h"
|
#include "system_flash_mem_manage.h"
|
#include "system_eep_mem_manage.h"
|
|
|
|
|
|
|
/*ÈÕÖ¾¶ÁÈ¡º¯Êý*/
|
uint32_t sizhu_historical_record_read(uint8_t logtype, uint32_t addr, SIZHU_HISTORY_MDH_T * log_run_ptr)
|
{
|
|
u32 addr_save = 0;
|
//
|
// //addr_save = addr_length;
|
// if(logtype == LOG_SIZHU_HOUR_TYPE)
|
// {
|
//
|
//
|
// //Èç¹û
|
// if(addr == PER_HOUR_LOG_OFFSET)
|
// {
|
// addr_save = PER_HOUR_LOG_OFFSET_END - sizeof(SIZHU_HISTORY_MDH_T);
|
//
|
// }else
|
// {
|
|
// addr_save = addr - sizeof(SIZHU_HISTORY_MDH_T);
|
//
|
// }
|
//
|
//
|
// eeprom_multiple_data_read( (uint8_t *)log_run_ptr,addr_save, sizeof(SIZHU_HISTORY_MDH_T) );
|
|
//
|
// }else if(logtype == LOG_SIZHU_DAY_TYPE)
|
// {
|
// //Èç¹û
|
// if(addr <= PER_DAY_LOG_OFFSET)
|
// {
|
// addr_save = PER_DAY_LOG_OFFSET_END - sizeof(SIZHU_HISTORY_MDH_T);
|
//
|
// }else
|
// {
|
|
// addr_save = addr - sizeof(SIZHU_HISTORY_MDH_T);
|
//
|
// }
|
//
|
//
|
// eeprom_multiple_data_read( (uint8_t *)log_run_ptr,addr_save, sizeof(SIZHU_HISTORY_MDH_T) );
|
//
|
//
|
// }else if(logtype == LOG_SIZHU_MONTH_TYPE)
|
// {
|
// //Èç¹û
|
// if(addr <= PER_MONTH_LOG_OFFSET)
|
// {
|
// addr_save = PER_MONTH_LOG_OFFSET_END - sizeof(SIZHU_HISTORY_MDH_T);
|
//
|
// }else
|
// {
|
|
// addr_save = addr - sizeof(SIZHU_HISTORY_MDH_T);
|
//
|
// }
|
//
|
//
|
// eeprom_multiple_data_read( (uint8_t *)log_run_ptr,addr_save, sizeof(SIZHU_HISTORY_MDH_T) );
|
//
|
//
|
//
|
// }
|
//
|
//// eeprom_multiple_data_read( (uint8_t *)&ufg620_log_g,addr_save, sizeof(SIZHU_HISTORY_MDH_T) );
|
//
|
return addr_save;
|
|
|
}
|
|
//¼ä¸ô¶³½á´æ´¢
|
void sizhuIntervalHistoryRecord(void)
|
{
|
SIZHU_HISTORY_INTERVAL_T sizhu_history_interval_l;
|
|
// return; //?û¾¹ý²âÊÔ£¬ÏÈÆÁ±Î
|
|
arrayA_2_arrayB((uint8_t *)&sys_clockBCD_g,(uint8_t *)&sizhu_history_interval_l.record_time_BCD,sizeof(sys_clockBCD_g), LITTLE_ENDIAN);
|
|
sizhu_history_interval_l.forward_cumulate_sc = save_realtime_data_g.realtime_flow_data_s.forward_cumulate_sc; // ÕýÏò±ê¿öÀÛ»ýÁ¿
|
sizhu_history_interval_l.forward_cumulate_wc = save_realtime_data_g.realtime_flow_data_s.forward_cumulate_wc;
|
sizhu_history_interval_l.instant_sc = flow_meter_data_g.instant_sc;
|
sizhu_history_interval_l.instant_wc = flow_meter_data_g.instant_wc;
|
sizhu_history_interval_l.temperature = flow_meter_data_g.temperature;
|
sizhu_history_interval_l.pressure = flow_meter_data_g.pressure;
|
sizhu_history_interval_l.current_price = save_realtime_data_g.realtime_billing_data_s.price_now;
|
sizhu_history_interval_l.residual_amount = save_realtime_data_g.realtime_billing_data_s.balance_now;
|
sizhu_history_interval_l.cumulate_gas_usage = save_realtime_data_g.realtime_billing_data_s.use_gas_sum;
|
sizhu_history_interval_l.cumulate_fee_usage = save_realtime_data_g.realtime_billing_data_s.use_fee_sum;
|
sizhu_history_interval_l.lith_bat_v = pwr_vol_g.lith_vcc * 10;
|
sizhu_history_interval_l.lith_bat_per = pwr_vol_g.lith_synthesize_per;
|
sizhu_history_interval_l.alka_bat_v = pwr_vol_g.alka_vcc * 10;
|
sizhu_history_interval_l.alka_bat_per = pwr_vol_g.alka_vcc_per;
|
arrayA_2_arrayB((uint8_t *)&system_status_word_g.status_word_union,(uint8_t *)&sizhu_history_interval_l.status_word,sizeof(SYSTEM_STATUS_WORD_T), LITTLE_ENDIAN);
|
|
//¼ÆËãCRC
|
sizhu_history_interval_l.CRC16_MODBUS = usMBCRC16(0xFFFF, (uint8_t * )&sizhu_history_interval_l.record_time_BCD, sizeof(SIZHU_HISTORY_INTERVAL_T) - sizeof(sizhu_history_interval_l.CRC16_MODBUS) );
|
|
FLASH_LOG_ADDR_CHECK(log_sizhu_history_ctrl_g.per_interval_log,HISTORY_INTERVAL_START_ADDR,sizeof(SIZHU_HISTORY_INTERVAL_T),HISTORY_INTERVAL_MAX_NUM);
|
|
FlashMultipleWriteAndReadCheck((uint8_t *)&sizhu_history_interval_l,log_sizhu_history_ctrl_g.per_interval_log.log_addr_save,sizeof(SIZHU_HISTORY_INTERVAL_T));
|
|
FLASH_LOG_CRTL_PARA_HANDLE(log_sizhu_history_ctrl_g.per_interval_log,HISTORY_INTERVAL_START_ADDR,sizeof(SIZHU_HISTORY_INTERVAL_T),HISTORY_INTERVAL_MAX_NUM);
|
//?²ÎÊý´æ´¢
|
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){
|
|
}
|
}
|
|
//ÔÂÈÕСʱ´æ´¢
|
void sizhuMDHHistoryRecord(HISTORY_TYPE history_type)
|
{
|
SIZHU_HISTORY_MDH_T sizhu_history_l;
|
|
return; //?û¾¹ý²âÊÔ£¬ÏÈÆÁ±Î
|
|
arrayA_2_arrayB((uint8_t *)&sys_clockBCD_g,(uint8_t *)&sizhu_history_l.record_time_BCD,sizeof(sys_clockBCD_g), LITTLE_ENDIAN);
|
|
sizhu_history_l.forward_cumulate_sc = save_realtime_data_g.realtime_flow_data_s.forward_cumulate_sc; // ÕýÏò±ê¿öÀÛ»ýÁ¿
|
sizhu_history_l.forward_cumulate_wc = save_realtime_data_g.realtime_flow_data_s.forward_cumulate_wc;
|
sizhu_history_l.instant_sc = flow_meter_data_g.instant_sc;
|
sizhu_history_l.instant_wc = flow_meter_data_g.instant_wc;
|
sizhu_history_l.temperature = flow_meter_data_g.temperature;
|
sizhu_history_l.pressure = flow_meter_data_g.pressure;
|
sizhu_history_l.current_price = save_realtime_data_g.realtime_billing_data_s.price_now;
|
sizhu_history_l.residual_amount = save_realtime_data_g.realtime_billing_data_s.balance_now;
|
|
|
//¼ÆËãCRC
|
sizhu_history_l.CRC16_MODBUS = usMBCRC16(0xFFFF, (uint8_t * )&sizhu_history_l.record_time_BCD, sizeof(SIZHU_HISTORY_MDH_T) - sizeof(sizhu_history_l.CRC16_MODBUS) );
|
|
switch(history_type){
|
case HISTORY_TYPE_MONTH:
|
FLASH_LOG_ADDR_CHECK(log_sizhu_history_ctrl_g.per_month_log,HISTORY_MONTH_START_ADDR,HISTORY_MONTH_LENGTH,HISTORY_MONTH_MAX_NUM);
|
FlashMultipleWriteAndReadCheck((uint8_t *)&sizhu_history_l,log_sizhu_history_ctrl_g.per_month_log.log_addr_save,HISTORY_MONTH_LENGTH);
|
FLASH_LOG_CRTL_PARA_HANDLE(log_sizhu_history_ctrl_g.per_month_log,HISTORY_MONTH_START_ADDR,HISTORY_MONTH_LENGTH,HISTORY_MONTH_MAX_NUM);
|
break;
|
|
case HISTORY_TYPE_DAY:
|
FLASH_LOG_ADDR_CHECK(log_sizhu_history_ctrl_g.per_day_log,HISTORY_DAY_START_ADDR,HISTORY_DAY_LENGTH,HISTORY_DAY_MAX_NUM);
|
FlashMultipleWriteAndReadCheck((uint8_t *)&sizhu_history_l,log_sizhu_history_ctrl_g.per_day_log.log_addr_save,HISTORY_DAY_LENGTH);
|
FLASH_LOG_CRTL_PARA_HANDLE(log_sizhu_history_ctrl_g.per_day_log,HISTORY_DAY_START_ADDR,HISTORY_DAY_LENGTH,HISTORY_DAY_MAX_NUM);
|
break;
|
case HISTORY_TYPE_HOUR:
|
FLASH_LOG_ADDR_CHECK(log_sizhu_history_ctrl_g.per_hour_log,HISTORY_HOUR_START_ADDR,HISTORY_HOUR_LENGTH,HISTORY_HOUR_MAX_NUM);
|
FlashMultipleWriteAndReadCheck((uint8_t *)&sizhu_history_l,log_sizhu_history_ctrl_g.per_hour_log.log_addr_save,HISTORY_HOUR_LENGTH);
|
FLASH_LOG_CRTL_PARA_HANDLE(log_sizhu_history_ctrl_g.per_hour_log,HISTORY_HOUR_START_ADDR,HISTORY_HOUR_LENGTH,HISTORY_HOUR_MAX_NUM);
|
break;
|
|
default : break;
|
}
|
|
//?²ÎÊý´æ´¢
|
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){
|
|
}
|
}
|
|
void HistoryRecordTest(void)
|
{
|
static uint8_t test_start_flag =0;
|
ErrorStatus test_Status = PASS;
|
uint16_t count_i = 0;
|
uint16_t record_num = 0;
|
uint16_t have_record_num = 0;
|
uint32_t read_addr;
|
uint32_t err_addr;
|
uint32_t err_count;
|
|
SIZHU_HISTORY_INTERVAL_T history_interval_l;
|
|
|
|
if(test_start_flag == 1){
|
test_start_flag = 0;
|
//¼ä¸ô¼Ç¼²âÊÔ
|
have_record_num = 0;
|
record_num = log_sizhu_history_ctrl_g.per_interval_log.log_count;
|
read_addr = log_sizhu_history_ctrl_g.per_interval_log.log_addr_save;
|
for(count_i = 0;count_i < record_num;count_i++){
|
have_record_num ++;
|
|
if(read_addr <= HISTORY_INTERVAL_START_ADDR)
|
read_addr = HISTORY_INTERVAL_END_ADDR;
|
else
|
read_addr -= HISTORY_INTERVAL_LENGTH;
|
|
if(FlashMultipleReadAndCrcCheck((uint8_t *)&history_interval_l,read_addr,HISTORY_INTERVAL_LENGTH)== PASS){
|
|
}else{
|
test_Status = FAIL;
|
break;
|
}
|
|
}
|
|
if(test_Status == FAIL){
|
err_addr = read_addr;
|
err_count = log_sizhu_history_ctrl_g.per_interval_log.log_count - count_i;
|
}
|
|
}
|
|
|
|
|
}
|
|
|
|
void sizhuHistoryRecord(sClockBCD sys_clockBCD_in)
|
{
|
static FlagStatus hour_record_flag = RESET,day_record_flag = RESET,month_record_flag = RESET,interval_report_record_flag = RESET;
|
|
uint16_t IntervalTime;
|
uint8_t first_time[2] = {0,0};
|
|
/*¼ä¸ôÉϱ¨¶³½á*/
|
if(__SYS_STATUS_BYTES_GET(power_state) == SET)
|
IntervalTime = wrc_para_sizhu_g.ext_power_data_interval;
|
else
|
IntervalTime = wrc_para_sizhu_g.bat_power_data_interval;
|
|
if(IntervalTriggerHandle(sys_clockBCD_in,IntervalTime,first_time)==SET)
|
interval_report_record_flag =SET;
|
|
|
/*Сʱ¡¢Ìì¡¢ÔÂ*/
|
if((sys_clockBCD_in.min == 0)&&(sys_clockBCD_in.sec == 0)) //Сʱ¼Ç¼´æ´¢µã
|
hour_record_flag =SET;
|
|
if((sys_clockBCD_in.hour == 0)&&(sys_clockBCD_in.min == 0)&&(sys_clockBCD_in.sec == 0))//Ìì¼Ç¼´æ´¢µã
|
day_record_flag =SET;
|
|
if((sys_clockBCD_in.day == 1)&&(sys_clockBCD_in.hour == 0)&&(sys_clockBCD_in.min == 0)&&(sys_clockBCD_in.sec == 0))//ԼǼ´æ´¢µã
|
month_record_flag =SET;
|
|
|
if((interval_report_record_flag == SET)&&(sys_fun_run_ctrl_g.rs485_ctrl_flag.running_flag ==RESET)){
|
//¼ä¸ô¶³½áÉϱ¨´æ´¢
|
interval_report_record_flag = RESET;
|
sizhuIntervalHistoryRecord();
|
}
|
|
|
if((hour_record_flag == SET)&&(sys_fun_run_ctrl_g.rs485_ctrl_flag.running_flag ==RESET)){
|
//Сʱ¼Ç¼´æ´¢
|
hour_record_flag = RESET;
|
sizhuMDHHistoryRecord(HISTORY_TYPE_HOUR);
|
}
|
|
if((day_record_flag == SET)&&(sys_fun_run_ctrl_g.rs485_ctrl_flag.running_flag ==RESET)){
|
//Ìì¼Ç¼´æ´¢
|
day_record_flag = RESET;
|
sizhuMDHHistoryRecord(HISTORY_TYPE_DAY);
|
}
|
|
if((month_record_flag == SET)&&(sys_fun_run_ctrl_g.rs485_ctrl_flag.running_flag ==RESET)){
|
//ԼǼ´æ´¢
|
month_record_flag = RESET;
|
sizhuMDHHistoryRecord(HISTORY_TYPE_MONTH);
|
}
|
|
|
HistoryRecordTest(); //?²âÊÔº¯Êý£¬²âÊÔÍêÐèҪעÊÍ
|
|
}
|