|
|
@@ -17,6 +17,7 @@ res_bill_t bak_hour_cum_flow;
|
|
|
bill_5min_ctrl_def bak_5min_cum_flow;
|
|
|
uint8_t StartUp = 0;
|
|
|
uint8_t global_settle_flag = 0;
|
|
|
+
|
|
|
void bill_init(void)
|
|
|
{
|
|
|
BillRun.fw_use_hour = 0.0f;
|
|
|
@@ -154,9 +155,25 @@ void set_month_used_bill(uint8_t year, uint8_t month, uint8_t day)
|
|
|
bill_t month_bill;
|
|
|
uint16_t len = sizeof(bill_t);
|
|
|
uint32_t addr = MONTH_BILL_START_ADDR + len * MONTH_BILL_INDEX(year, month);
|
|
|
+ if (CheckDateValid(year, month, day, 0, 0, 0) == 0)
|
|
|
+ return;
|
|
|
+ /////////////////////如果数据已经存在,则在原来的基础上累加////////////////////////////////////////
|
|
|
+ uint8_t ret;
|
|
|
+ ret = get_month_used_bill(year, month, &month_bill);
|
|
|
+ if (ret == 0)
|
|
|
+ {
|
|
|
+ fw_used = month_bill.fw_used;
|
|
|
+ bw_used = month_bill.bw_used;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ fw_used = 0;
|
|
|
+ bw_used = 0;
|
|
|
+ }
|
|
|
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
- fw_used = get_month_fw_used_bill();
|
|
|
- bw_used = get_month_bw_used_bill();
|
|
|
+ fw_used += get_month_fw_used_bill();
|
|
|
+ bw_used += get_month_bw_used_bill();
|
|
|
|
|
|
month_bill.flag = 1;
|
|
|
month_bill.date[0] = year;
|
|
|
@@ -180,9 +197,26 @@ void set_day_used_bill(uint8_t year, uint8_t month, uint8_t day)
|
|
|
uint16_t len = sizeof(bill_t);
|
|
|
uint16_t days = days_from_leap_year_begin(month, day);
|
|
|
uint32_t addr = DAY_BILL_START_ADDR + len * (days - 1);
|
|
|
+ ///////////////////检查日期是否合法/////////////////////////////
|
|
|
+ if (CheckDateValid(year, month, day, 0, 0, 0) == 0)
|
|
|
+ return;
|
|
|
+ ///////////////////检查是否存有相同的记录 有就加上/////////////////////////////
|
|
|
+ uint8_t ret;
|
|
|
+ ret = get_day_used_bill(year, month, day, &day_bill);
|
|
|
+ if (ret == 0) // 数据合法,且年月日都相同
|
|
|
+ {
|
|
|
+ fw_used = day_bill.fw_used;
|
|
|
+ bw_used = day_bill.bw_used;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ fw_used = 0;
|
|
|
+ bw_used = 0;
|
|
|
+ }
|
|
|
+ ////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
- fw_used = get_day_fw_used_bill();
|
|
|
- bw_used = get_day_bw_used_bill();
|
|
|
+ fw_used += get_day_fw_used_bill();
|
|
|
+ bw_used += get_day_bw_used_bill();
|
|
|
|
|
|
day_bill.flag = 1;
|
|
|
day_bill.date[0] = year;
|
|
|
@@ -204,20 +238,32 @@ void set_hour_used_bill(uint8_t year, uint8_t month, uint8_t day, uint8_t hour)
|
|
|
hour_bill_t hour_bill;
|
|
|
uint16_t len = sizeof(hour_bill_t);
|
|
|
uint32_t addr = HOUR_BILL_START_ADDR + HOUR_BILL_INDEX(day, hour) * len;
|
|
|
+ /////////////////////////////////检查时间是否合法///////////////////////////////////////
|
|
|
+ if (CheckDateValid(year, month, day, hour, 0, 0) == 0)
|
|
|
+ return; // 时间不合法
|
|
|
+ /////////////////////////如果记录中存在相同日期的数据,则累加//////////////////////
|
|
|
+
|
|
|
+ uint8_t ret;
|
|
|
+ ret = get_hour_used_bill(year, month, day, hour, &hour_bill);
|
|
|
+ if (ret == 0) // 数据合法且日期相同
|
|
|
+ {
|
|
|
+ fw_used = hour_bill.fw_used[0] + ((uint32_t)hour_bill.fw_used[1] << 8) + ((uint32_t)hour_bill.fw_used[2] << 16);
|
|
|
+ bw_used = hour_bill.bw_used[0] + ((uint32_t)hour_bill.bw_used[1] << 8) + ((uint32_t)hour_bill.bw_used[2] << 16);
|
|
|
+ fr = hour_bill.flow_rate[0] + ((uint32_t)hour_bill.flow_rate[1] << 8) + ((uint32_t)hour_bill.flow_rate[2] << 16);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ fw_used = 0;
|
|
|
+ bw_used = 0;
|
|
|
+ fr = 0;
|
|
|
+ }
|
|
|
+ //////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
- fw_used = get_hour_fw_used_bill();
|
|
|
- bw_used = get_hour_bw_used_bill();
|
|
|
+ fw_used += get_hour_fw_used_bill();
|
|
|
+ bw_used += get_hour_bw_used_bill();
|
|
|
|
|
|
- fr = (uint32_t)get_flow_rate_bill();
|
|
|
+ fr = (uint32_t)get_flow_rate_bill() > fr ? (uint32_t)get_flow_rate_bill() : fr;
|
|
|
|
|
|
-#ifdef DEBUG_BILL2
|
|
|
- // fw_used = hour;
|
|
|
- // bw_used = 2 * hour;
|
|
|
- // fr = 3 * hour;
|
|
|
-#endif
|
|
|
-#ifdef DEBUG_BILL
|
|
|
- LOG("%d-%d-%d %d write hour bill fw= %d\r\n", year, month, day, hour, fw_used);
|
|
|
-#endif
|
|
|
memset(&hour_bill, 0, sizeof(hour_bill_t));
|
|
|
|
|
|
hour_bill.flag = 1;
|
|
|
@@ -261,15 +307,33 @@ void set_5min_used_bill(uint8_t year, uint8_t month, uint8_t day, uint8_t hour,
|
|
|
hour_bill_t bill;
|
|
|
uint16_t len = sizeof(hour_bill_t);
|
|
|
uint32_t addr = FIVE_MIN_BILL_START_ADDR + len * FIVE_MIN_BILL_INDEX(day, hour, minute);
|
|
|
+ /////////////////////////////////检查时间是否合法///////////////////////////////////////
|
|
|
+ if (CheckDateValid(year, month, day, hour, minute, 0) == 0)
|
|
|
+ return;
|
|
|
+ ////////////////////////////////////////////////////////////////////////////////////////
|
|
|
+ uint8_t ret;
|
|
|
+ ret = get_5min_used_bill(year, month, day, hour, minute, &bill);
|
|
|
+ if (ret == 0)
|
|
|
+ {
|
|
|
+ fw_used = bill.fw_used[0] + ((uint32_t)bill.fw_used[1] << 8) + ((uint32_t)bill.fw_used[2] << 16);
|
|
|
+ bw_used = bill.bw_used[0] + ((uint32_t)bill.bw_used[1] << 8) + ((uint32_t)bill.bw_used[2] << 16);
|
|
|
+ fr = bill.flow_rate[0] + ((uint32_t)bill.flow_rate[1] << 8) + ((uint32_t)bill.flow_rate[2] << 16);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ fw_used = 0;
|
|
|
+ bw_used = 0;
|
|
|
+ fr = 0;
|
|
|
+ }
|
|
|
+ ////////////////////////////////////////////////////////////////////////////////////////
|
|
|
+
|
|
|
+ fw_used += get_5min_fw_used_bill();
|
|
|
+ bw_used += get_5min_bw_used_bill();
|
|
|
+ fr = (uint32_t)get_flow_rate_bill() > fr ? (uint32_t)get_flow_rate_bill() : fr;
|
|
|
+
|
|
|
+ ////////////////////////////////////////////////////////////////////////////////////////
|
|
|
+ bill.date[0] = year;
|
|
|
|
|
|
- fw_used = get_5min_fw_used_bill();
|
|
|
- bw_used = get_5min_bw_used_bill();
|
|
|
- fr = (uint32_t)get_flow_rate_bill();
|
|
|
-#ifdef DEBUG_BILL2
|
|
|
- fw_used = minute * 10;
|
|
|
- bw_used = minute * 20;
|
|
|
- fr = minute * 5;
|
|
|
-#endif
|
|
|
bill.flag = 1;
|
|
|
bill.date[0] = year;
|
|
|
bill.date[1] = month; // num保存该小时内第几个5分钟数据
|
|
|
@@ -359,21 +423,7 @@ void save_cur_flow_bill(void)
|
|
|
uint8_t get_month_used_bill(uint8_t year, uint8_t month, bill_t *bill)
|
|
|
{
|
|
|
|
|
|
- rtc_run_t *rr;
|
|
|
- get_rtc_run(&rr);
|
|
|
- int16_t ms = (rr->year * 12 + rr->month) - (year * 12 + month);
|
|
|
-
|
|
|
memset(bill, 0, sizeof(bill_t));
|
|
|
- if (ms <= 0 || ms > MONTH_BILL_NUM)
|
|
|
- {
|
|
|
- // #ifdef DEBUG_BILL2
|
|
|
- // LOG("month date out\r\n");
|
|
|
- // #endif
|
|
|
- return 0; // 超出48个月
|
|
|
- }
|
|
|
- // #ifdef DEBUG_BILL2
|
|
|
- // LOG("month date ok\r\n");
|
|
|
- // #endif
|
|
|
uint16_t len = sizeof(bill_t);
|
|
|
uint32_t addr = MONTH_BILL_START_ADDR + len * MONTH_BILL_INDEX(year, month);
|
|
|
uint8_t ret;
|
|
|
@@ -458,11 +508,11 @@ int32_t get_days_between_now(uint8_t y2, uint8_t m2, uint8_t d2)
|
|
|
return days1 - days2;
|
|
|
}
|
|
|
//////////////////读取指定时间的日使用量//////////////////////////
|
|
|
-uint8_t get_day_used_bill(uint8_t month, uint8_t day, bill_t *bill)
|
|
|
+uint8_t get_day_used_bill(uint8_t year, uint8_t month, uint8_t day, bill_t *bill)
|
|
|
{
|
|
|
|
|
|
uint16_t days = days_from_leap_year_begin(month, day);
|
|
|
- uint16_t len = sizeof(bill_t);
|
|
|
+ uint16_t len = sizeof(bill_t); // 16
|
|
|
uint32_t addr = DAY_BILL_START_ADDR + len * (days - 1);
|
|
|
#ifdef DEBUG_BILL2
|
|
|
LOG("%d-%d\r\n", month, day);
|
|
|
@@ -472,7 +522,7 @@ uint8_t get_day_used_bill(uint8_t month, uint8_t day, bill_t *bill)
|
|
|
uint8_t ret = read_eeprom(addr, (uint8_t *)bill, len);
|
|
|
if (ret != 0)
|
|
|
return ret;
|
|
|
- if (bill->date[1] != month || bill->date[2] != day)
|
|
|
+ if (bill->date[0] != year || bill->date[1] != month || bill->date[2] != day)
|
|
|
return 1;
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -489,7 +539,7 @@ int32_t get_hours_between_now(uint8_t year, uint8_t month, uint8_t day, uint8_t
|
|
|
}
|
|
|
|
|
|
///////////////读取指定时间的小时使用量//////////////////////////
|
|
|
-uint8_t get_hour_used_bill(uint8_t day, uint8_t hour, hour_bill_t *bill)
|
|
|
+uint8_t get_hour_used_bill(uint8_t year, uint8_t month, uint8_t day, uint8_t hour, hour_bill_t *bill)
|
|
|
{
|
|
|
uint16_t len = sizeof(hour_bill_t);
|
|
|
uint32_t addr = HOUR_BILL_START_ADDR + HOUR_BILL_INDEX(day, hour) * len;
|
|
|
@@ -497,19 +547,29 @@ uint8_t get_hour_used_bill(uint8_t day, uint8_t hour, hour_bill_t *bill)
|
|
|
|
|
|
// int32_t hours = get_hours_between_now(year,month,day,hour);
|
|
|
// if(hours <= 0 || hours > 31 * 24)return 0;
|
|
|
-
|
|
|
- return read_eeprom(addr, (uint8_t *)bill, len);
|
|
|
+ uint8_t ret;
|
|
|
+ ret = read_eeprom(addr, (uint8_t *)bill, len);
|
|
|
+ if (ret != 0)
|
|
|
+ return ret;
|
|
|
+ if (bill->date[0] != year || bill->date[1] != month || bill->date[2] != day || bill->date[3] != hour)
|
|
|
+ return 1;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
//////////////////读取指定时间的5分钟使用量////////////////////////////
|
|
|
-uint8_t get_5min_used_bill(uint8_t day, uint8_t hour, uint8_t minute, hour_bill_t *bill)
|
|
|
+uint8_t get_5min_used_bill(uint8_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, hour_bill_t *bill)
|
|
|
{
|
|
|
uint16_t len = sizeof(hour_bill_t);
|
|
|
uint32_t addr = FIVE_MIN_BILL_START_ADDR + len * FIVE_MIN_BILL_INDEX(day, hour, minute);
|
|
|
|
|
|
memset(bill, 0, sizeof(hour_bill_t));
|
|
|
-
|
|
|
- return read_eeprom(addr, (uint8_t *)bill, len);
|
|
|
+ uint8_t ret;
|
|
|
+ ret = read_eeprom(addr, (uint8_t *)bill, len);
|
|
|
+ if (ret != 0)
|
|
|
+ return ret;
|
|
|
+ if (bill->date[0] != year || bill->date[1] != month || bill->date[2] != day || bill->date[3] != hour)
|
|
|
+ return 1;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
////////////数据累加和校验生成///////////////////////
|
|
|
@@ -850,6 +910,10 @@ tm_t prev_hour(tm_t *date)
|
|
|
ndate.year = (uint8_t)(sdate >> 16);
|
|
|
return ndate;
|
|
|
}
|
|
|
+/**
|
|
|
+ * 获取当前流量数据并更新账单信息
|
|
|
+ * @param ntm 指向时间结构体的指针,包含年、月、日、时、分等信息
|
|
|
+ */
|
|
|
void get_cur_flow_data(tm_t *ntm)
|
|
|
{
|
|
|
if (global_settle_flag != 0) // 在设置更新的底读之前,先进行结算
|
|
|
@@ -914,16 +978,11 @@ void app_bill_run(void)
|
|
|
if (bak_month_cum_flow.date[0] != ntm.year || bak_month_cum_flow.date[1] != ntm.month)
|
|
|
{
|
|
|
// 计算上个月的最后一天
|
|
|
- ndate = (ntm.year << 16) | (ntm.month << 8) | 1; // 当前月1号
|
|
|
- ndate = prev_day(ndate); // 回退一天,即上个月最后一天
|
|
|
-
|
|
|
- // 存储上个月的使用量,时间戳为上个月最后一天
|
|
|
- // if ((uint8_t)(ndate >> 16) == bak_month_cum_flow.date[0] && (uint8_t)(ndate >> 8) == bak_month_cum_flow.date[1])
|
|
|
- if ((ndate >> 8) >= ((bak_month_cum_flow.date[0] << 8) | bak_month_cum_flow.date[1]))
|
|
|
- { // 结算月份必须大于等于备份月份
|
|
|
- set_month_used_bill((uint8_t)(ndate >> 16), (uint8_t)(ndate >> 8), (uint8_t)(ndate));
|
|
|
- }
|
|
|
- // 更新备份:将当前累积流量保存为新的月度起始基准
|
|
|
+ // ndate = (ntm.year << 16) | (ntm.month << 8) | 1; // 当前月1号
|
|
|
+ // ndate = prev_day(ndate); // 回退一天,即上个月最后一天
|
|
|
+ set_month_used_bill(bak_month_cum_flow.date[0], bak_month_cum_flow.date[1], bak_month_cum_flow.date[2]);
|
|
|
+ // 使用备份的日期进行存储,无论是自然过度到第二月还是修改日期到新的月份,数据始终保存到老月份去
|
|
|
+ // 更新备份:将当前累积流量保存为新的月度起始基准
|
|
|
set_month_cur_flow_bill();
|
|
|
#ifdef DEBUG_BILL
|
|
|
LOG("%d-%d-%d write month bill\r\n", (uint8_t)(ndate >> 16), (uint8_t)(ndate >> 8), (uint8_t)(ndate));
|
|
|
@@ -936,15 +995,15 @@ void app_bill_run(void)
|
|
|
if (bak_day_cum_flow.date[0] != ntm.year || bak_day_cum_flow.date[1] != ntm.month || bak_day_cum_flow.date[2] != ntm.day)
|
|
|
{
|
|
|
// 计算昨天
|
|
|
- ndate = (ntm.year << 16) | (ntm.month << 8) | ntm.day;
|
|
|
- ndate = prev_day(ndate);
|
|
|
+ // ndate = (ntm.year << 16) | (ntm.month << 8) | ntm.day;
|
|
|
+ // ndate = prev_day(ndate);
|
|
|
|
|
|
// 存储昨天的使用量
|
|
|
// if ((uint8_t)(ndate >> 16) == bak_day_cum_flow.date[0] && (uint8_t)(ndate >> 8) == bak_day_cum_flow.date[1] && (uint8_t)(ndate) == bak_day_cum_flow.date[2])
|
|
|
- if (ndate >= ((bak_day_cum_flow.date[0] << 16) | (bak_day_cum_flow.date[1] << 8) | bak_day_cum_flow.date[2]))
|
|
|
- { // 结算日期必须大于等于备份日期, 否则只更新基准,不记录使用量
|
|
|
- set_day_used_bill((uint8_t)(ndate >> 16), (uint8_t)(ndate >> 8), (uint8_t)(ndate));
|
|
|
- }
|
|
|
+ // if (ndate >= ((bak_day_cum_flow.date[0] << 16) | (bak_day_cum_flow.date[1] << 8) | bak_day_cum_flow.date[2]))
|
|
|
+ //{ // 结算日期必须大于等于备份日期, 否则只更新基准,不记录使用量
|
|
|
+ set_day_used_bill(bak_day_cum_flow.date[0], bak_day_cum_flow.date[1], bak_day_cum_flow.date[2]);
|
|
|
+ //}
|
|
|
// 更新备份:将当前累积流量保存为新的日度起始基准
|
|
|
set_day_cur_flow_bill();
|
|
|
#ifdef DEBUG_BILL
|
|
|
@@ -957,34 +1016,34 @@ void app_bill_run(void)
|
|
|
if (bak_hour_cum_flow.date[0] != ntm.year || bak_hour_cum_flow.date[1] != ntm.month ||
|
|
|
bak_hour_cum_flow.date[2] != ntm.day || bak_hour_cum_flow.date[3] != ntm.hour)
|
|
|
{
|
|
|
- tm_t prev_h_tm;
|
|
|
+ // tm_t prev_h_tm;
|
|
|
|
|
|
// 计算上一个小时的时间,用于存入记录的数据头(表示该小时结束的时间点或归属)
|
|
|
// 注意:不要直接修改 ntm,而是使用临时变量
|
|
|
- prev_h_tm = ntm;
|
|
|
- if (prev_h_tm.hour == 0)
|
|
|
- {
|
|
|
- // 如果当前是0点,上一个小时是昨天的23点
|
|
|
- uint32_t prev_day_date = (prev_h_tm.year << 16) | (prev_h_tm.month << 8) | prev_h_tm.day;
|
|
|
- prev_day_date = prev_day(prev_day_date);
|
|
|
- prev_h_tm.year = (uint8_t)(prev_day_date >> 16);
|
|
|
- prev_h_tm.month = (uint8_t)(prev_day_date >> 8);
|
|
|
- prev_h_tm.day = (uint8_t)(prev_day_date);
|
|
|
- prev_h_tm.hour = 23;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- prev_h_tm.hour--;
|
|
|
- }
|
|
|
+ // prev_h_tm = ntm;
|
|
|
+ // if (prev_h_tm.hour == 0)
|
|
|
+ // {
|
|
|
+ // // 如果当前是0点,上一个小时是昨天的23点
|
|
|
+ // uint32_t prev_day_date = (prev_h_tm.year << 16) | (prev_h_tm.month << 8) | prev_h_tm.day;
|
|
|
+ // prev_day_date = prev_day(prev_day_date);
|
|
|
+ // prev_h_tm.year = (uint8_t)(prev_day_date >> 16);
|
|
|
+ // prev_h_tm.month = (uint8_t)(prev_day_date >> 8);
|
|
|
+ // prev_h_tm.day = (uint8_t)(prev_day_date);
|
|
|
+ // prev_h_tm.hour = 23;
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // prev_h_tm.hour--;
|
|
|
+ // }
|
|
|
|
|
|
// 存储上一个小时的使用量
|
|
|
- uint32_t baklong = ((bak_hour_cum_flow.date[0] << 24) | (bak_hour_cum_flow.date[1] << 16) | (bak_hour_cum_flow.date[2] << 8) | (bak_hour_cum_flow.date[3]));
|
|
|
- uint32_t prevlong = ((prev_h_tm.year << 24) | (prev_h_tm.month << 16) | (prev_h_tm.day << 8) | (prev_h_tm.hour));
|
|
|
+ // uint32_t baklong = ((bak_hour_cum_flow.date[0] << 24) | (bak_hour_cum_flow.date[1] << 16) | (bak_hour_cum_flow.date[2] << 8) | (bak_hour_cum_flow.date[3]));
|
|
|
+ // uint32_t prevlong = ((prev_h_tm.year << 24) | (prev_h_tm.month << 16) | (prev_h_tm.day << 8) | (prev_h_tm.hour));
|
|
|
// if (bak_hour_cum_flow.date[0] == prev_h_tm.year && bak_hour_cum_flow.date[1] == prev_h_tm.month && bak_hour_cum_flow.date[2] == prev_h_tm.day && bak_hour_cum_flow.date[3] == prev_h_tm.hour)
|
|
|
- if (baklong <= prevlong)
|
|
|
- { // 备份的时间必须早于当前时间的上一个小时,才记录时结数据
|
|
|
- set_hour_used_bill(prev_h_tm.year, prev_h_tm.month, prev_h_tm.day, prev_h_tm.hour);
|
|
|
- }
|
|
|
+ // if (baklong <= prevlong)
|
|
|
+ //{ // 备份的时间必须早于当前时间的上一个小时,才记录时结数据
|
|
|
+ set_hour_used_bill(bak_hour_cum_flow.date[0], bak_hour_cum_flow.date[1], bak_hour_cum_flow.date[2], bak_hour_cum_flow.date[3]);
|
|
|
+ //}
|
|
|
// 更新备份:将当前累积流量保存为新的小时起始基准
|
|
|
set_hour_cur_flow_bill();
|
|
|
// #ifdef DEBUG_BILL
|
|
|
@@ -997,18 +1056,18 @@ void app_bill_run(void)
|
|
|
bak_5min_cum_flow.date[2] != ntm.day || bak_5min_cum_flow.date[3] != ntm.hour ||
|
|
|
bak_5min_cum_flow.date[4] / 5 != ntm.min / 5)
|
|
|
{
|
|
|
- tm_t bak_t;
|
|
|
- bak_t.year = bak_5min_cum_flow.date[0];
|
|
|
- bak_t.month = bak_5min_cum_flow.date[1];
|
|
|
- bak_t.day = bak_5min_cum_flow.date[2];
|
|
|
- bak_t.hour = bak_5min_cum_flow.date[3];
|
|
|
- bak_t.min = bak_5min_cum_flow.date[4];
|
|
|
+ // tm_t bak_t;
|
|
|
+ // bak_t.year = bak_5min_cum_flow.date[0];
|
|
|
+ // bak_t.month = bak_5min_cum_flow.date[1];
|
|
|
+ // bak_t.day = bak_5min_cum_flow.date[2];
|
|
|
+ // bak_t.hour = bak_5min_cum_flow.date[3];
|
|
|
+ // bak_t.min = bak_5min_cum_flow.date[4];
|
|
|
|
|
|
// tm_t prev_5min_tm = get_prev_5min_tm(bak_t);
|
|
|
- if (datecmp(bak_t, ntm) < 0) // 备份时间小于当前时间,则记录使用量
|
|
|
- {
|
|
|
- set_5min_used_bill(ntm.year, ntm.month, ntm.day, ntm.hour, ntm.min);
|
|
|
- }
|
|
|
+ // if (datecmp(bak_t, ntm) < 0) // 备份时间小于当前时间,则记录使用量
|
|
|
+ //{
|
|
|
+ set_5min_used_bill(bak_5min_cum_flow.date[0], bak_5min_cum_flow.date[1], bak_5min_cum_flow.date[2], bak_5min_cum_flow.date[3], bak_5min_cum_flow.date[4]);
|
|
|
+ //}
|
|
|
set_5min_cur_flow_bill();
|
|
|
#ifdef DEBUG_BILL
|
|
|
LOG("%d-%d-%d %d:%d write 5min bill\r\n", ntm.year, ntm.month, ntm.day, ntm.hour, ntm.min);
|
|
|
@@ -1209,10 +1268,10 @@ extern void clr_max_flow_rate_all(void);
|
|
|
void clear_all_record(void)
|
|
|
{
|
|
|
// 定义单次写入块大小 (128字节效率较高且栈安全)
|
|
|
- clear_bottom_data();
|
|
|
+ clear_bottom_data(); // 底读设置为0,并保存
|
|
|
clr_max_flow_rate_all(); // 清最高瞬时流量
|
|
|
- clr_bill_struct_data();
|
|
|
-
|
|
|
+ clr_bill_struct_data(); // 清除日结,月结等所有结算数据的基准累积量
|
|
|
+ // 下面是清除所有结算数据
|
|
|
#define CLEAR_BLOCK_SIZE 128
|
|
|
uint8_t dat[CLEAR_BLOCK_SIZE];
|
|
|
memset(dat, 0xFF, CLEAR_BLOCK_SIZE);
|
|
|
@@ -1399,8 +1458,18 @@ void clr_bill_struct_data(void)
|
|
|
memset(&bak_month_cum_flow, 0, sizeof(bak_month_cum_flow));
|
|
|
memset(&bak_day_cum_flow, 0, sizeof(bak_day_cum_flow));
|
|
|
memset(&bak_hour_cum_flow, 0, sizeof(bak_hour_cum_flow));
|
|
|
+ memset(bak_5min_cum_flow.date, 0, 6);
|
|
|
bak_5min_cum_flow.fw_cum_flow = 0;
|
|
|
bak_5min_cum_flow.bw_cum_flow = 0;
|
|
|
cum_flow_index.bw = 0;
|
|
|
cum_flow_index.fw = 0;
|
|
|
+}
|
|
|
+//// 检查日期是否有效
|
|
|
+uint8_t CheckDateValid(uint8_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min, uint8_t sec)
|
|
|
+{
|
|
|
+ if (year >= 100 || month == 0 || month > 12 || day == 0 || day > 31 || hour > 23 || min > 59 || sec > 59)
|
|
|
+ return 0;
|
|
|
+ if (day > monthday[month - 1] + ((year % 4 == 0 && month == 2) ? 1 : 0))
|
|
|
+ return 0;
|
|
|
+ return 1;
|
|
|
}
|