bill.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. #ifndef __BILL_H__
  2. #define __BILL_H__
  3. #include "stdint.h"
  4. #ifdef __cplusplus
  5. extern "C"
  6. {
  7. #endif
  8. #define MONTH_BILL_NUM (48)
  9. #define DAY_BILL_NUM (368)
  10. #define HOUR_BILL_NUM (32)
  11. #define FIVE_MIN_BILL_NUM (16) // 2026-4-2 修改为保存16天数据
  12. #define CUM_FLOW_START_ADDR (0x17c00u) // 循环存储最新流量记录的eeprom地址
  13. #define MAX_CUM_FLOW_NUM 256 // 循环存储数量
  14. #define CUM_FLOW_SIZE 32 // 每个记录占用的空间大小
  15. #define MONTH_BILL_START_ADDR (0x0800u)
  16. #define DAY_BILL_START_ADDR (MONTH_BILL_START_ADDR + (sizeof(bill_t) * MONTH_BILL_NUM))
  17. #define HOUR_BILL_START_ADDR (DAY_BILL_START_ADDR + (sizeof(bill_t) * DAY_BILL_NUM))
  18. #define FIVE_MIN_BILL_START_ADDR (HOUR_BILL_START_ADDR + (sizeof(hour_bill_t) * HOUR_BILL_NUM * 24))
  19. #define MONTH_BILL_INDEX(year, month) ((year & 0x03) * 12 + (month - 1))
  20. #define HOUR_BILL_INDEX(day, hour) ((day - 1) * 24 + hour)
  21. #define FIVE_MIN_BILL_INDEX(day, hour, minute) ((((day - 1) % FIVE_MIN_BILL_NUM) * 24 + hour) * 12 + minute / 5)
  22. #define END_RECORD_ADDR 0x17200
  23. #define PRE_MONTH_COW_BAK_ADDR 0x1ac00
  24. #define PRE_DAY_COW_BAK_ADDR 0x1ac20
  25. #define PRE_HOUR_COW_BAK_ADDR 0x1ac40
  26. #define PRE_5MIN_COW_BAK_ADDR 0x1ac60
  27. #define COW_BAK_DATA_SIZE 32
  28. #define BAK_5MIN_NUM 16
  29. #define BAK_5MIN_SIZE 32
  30. //////兼容以前的函数名///////////////
  31. #define SetBillCumFlow set_cur_flow_bill
  32. #define SetBillVol set_flow_rate_bill
  33. #define read_day_bill get_day_used_bill
  34. #define read_month_bill get_month_used_bill
  35. #define read_hour_bill get_hour_used_bill
  36. #define read_five_min_bill get_5min_used_bill
  37. /////////////////////////////////////////////
  38. typedef struct
  39. {
  40. uint8_t flag;
  41. uint8_t date[3];
  42. uint32_t fw_used;
  43. uint32_t bw_used;
  44. uint8_t reserved[3];
  45. uint8_t check;
  46. } bill_t;
  47. typedef struct
  48. {
  49. uint8_t flag;
  50. uint8_t date[4];
  51. uint8_t fw_used[3];
  52. uint8_t bw_used[3];
  53. uint8_t pressure;
  54. uint8_t flow_rate[3];
  55. uint8_t check;
  56. } hour_bill_t;
  57. /*
  58. typedef struct {
  59. uint8_t flag;
  60. double cum_flow;
  61. double fw_cum_flow;
  62. double bw_cum_flow;
  63. uint8_t date_time[7];
  64. uint8_t check;
  65. }bill_cum_flow_t;*/
  66. // typedef struct{
  67. // uint32_t fw_cum_flow;
  68. // uint32_t bw_cum_flow;
  69. // }bak_bill_t;
  70. typedef struct
  71. {
  72. double fw_cum_flow;
  73. double bw_cum_flow;
  74. uint8_t date[6]; // 年月日时分秒
  75. uint8_t flag; // 1有效
  76. uint8_t check;
  77. } res_bill_t;
  78. typedef struct
  79. {
  80. double fw_cum_flow;
  81. double bw_cum_flow;
  82. int32_t global_cnt;
  83. uint8_t flag;
  84. // uint8_t date[6];
  85. uint8_t check;
  86. } bak_5min_bill_t;
  87. typedef struct
  88. {
  89. double fw_cum_flow;
  90. double bw_cum_flow;
  91. int32_t global_cnt;
  92. uint8_t date[6];
  93. uint8_t add_cnt;
  94. } bill_5min_ctrl_def;
  95. //////////当前流量数据结构体wxl2026-3-2//////////
  96. typedef struct
  97. { // 40byte
  98. uint8_t flag;
  99. uint8_t date_time[7];
  100. // double cum_flow;
  101. double fw_cum_flow;
  102. double bw_cum_flow;
  103. int32_t gcnt;
  104. uint8_t check;
  105. // uint8_t reserv[3];
  106. } bill_cum_flow_tx;
  107. ////////////wxl2026-3-2////////////////////
  108. typedef struct
  109. {
  110. int32_t cur_gcnt;
  111. int16_t npos;
  112. double fw;
  113. double bw;
  114. } CUR_FLOW_INDEX_DEF;
  115. ///////////////////////////////////////////
  116. typedef struct
  117. {
  118. double fw_use_hour;
  119. double fw_use_day;
  120. double fw_use_month;
  121. double fw_use_five_min;
  122. double fw_cum_flow;
  123. double bw_cum_flow;
  124. double cum_flow;
  125. double bw_use_hour;
  126. double bw_use_day;
  127. double bw_use_month;
  128. double bw_use_five_min;
  129. double flow_rate;
  130. } bill_run_t;
  131. #define BIT0 1
  132. #define BIT1 2
  133. #define BIT2 4
  134. #define BIT3 8
  135. #define BIT4 0x10
  136. #define BIT5 0x20
  137. #define BIT6 0x40
  138. #define BIT7 0x80
  139. /////////////////////在初始化中调用//////////////////////
  140. extern void bill_init(void);
  141. extern void app_bill_run(void);
  142. ////////////////这两个子函数在计量中调用,向bill模块写入累计流量和瞬时流量/////////////////////
  143. extern void set_cur_flow_bill(double cum, double fw_cum, double bw_cum);
  144. extern void set_flow_rate_bill(double fw_vol, double bw_vol);
  145. /////////////////////////////////////////////////////////////////////
  146. extern void set_month_used_bill(uint8_t year, uint8_t month, uint8_t day);
  147. extern void set_day_used_bill(uint8_t year, uint8_t month, uint8_t day);
  148. extern void set_hour_used_bill(uint8_t year, uint8_t month, uint8_t day, uint8_t hour);
  149. extern void set_5min_used_bill(uint8_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute);
  150. extern void set_cur_flow_bill(double cum, double fw_cum, double bw_cum);
  151. extern uint8_t get_hour_used_bill(uint8_t day, uint8_t hour, hour_bill_t *bill);
  152. extern uint8_t get_day_used_bill(uint8_t month, uint8_t day, bill_t *bill);
  153. extern uint8_t get_month_used_bill(uint8_t year, uint8_t month, bill_t *bill);
  154. extern uint8_t get_5min_used_bill(uint8_t day, uint8_t hour, uint8_t minute, hour_bill_t *bill);
  155. extern uint8_t CheckTime(uint8_t *);
  156. extern uint8_t Sum8(uint8_t *, uint16_t);
  157. extern bill_run_t BillRun;
  158. extern void init_month_cur_flow_bill(void);
  159. extern void init_day_cur_flow_bill(void);
  160. extern void init_hour_cur_flow_bill(void);
  161. extern void init_5min_cur_flow_bill(void);
  162. extern void init_cur_flow_bill(void);
  163. extern void save_cur_flow_bill(void);
  164. extern double CumFlow;
  165. extern double FwCumFlow;
  166. extern double BwCumFlow;
  167. extern double FlowVol;
  168. extern void Debug_bill(void);
  169. // extern uint8_t init_month_cum_flow(void);
  170. extern void clr_bill_struct_data(void);
  171. extern const uint8_t monthday[12];
  172. extern int8_t SetRtcTime(tm_t *);
  173. extern unsigned char save_cur_flow_flag; // 置1触发保存当前累计量
  174. extern int32_t get_hours_between_now(uint8_t year, uint8_t month, uint8_t day, uint8_t hour);
  175. extern int32_t get_days_between_now(uint8_t byear, uint8_t bmonth, uint8_t bday);
  176. extern void clear_all_record(void); // 清除所有记录
  177. extern void clear_log(void); // 清除log
  178. extern void clear_bottom_data(void);
  179. extern void get_cur_flow_data(void);
  180. extern uint8_t StartUp;
  181. #ifdef DEBUG_BILL
  182. extern void verify_clear_operations(void);
  183. #endif
  184. #ifdef __cplusplus
  185. }
  186. #endif
  187. #endif