forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

wujiazhi
2024-06-13 72def895431ad7a08e635b11f3da738e2b2c4618
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#ifndef _BILLING_H_
#define _BILLING_H_
 
#include "define_all.h" 
#include "extern_rtc.h"
#include "administrator.h"
 
#define LADDER_PRICE_DEFAULT_VER 0
 
typedef enum
{
  BPM_NORMAL = 0U, // Õý³£¼Æ·Ñ
  BPM_LADDER_1,
  BPM_LADDER_2,
  BPM_LADDER_3,
  BPM_LADDER_4,
  BPM_LADDER_5
} BILLING_PRICE_MODE_NOW_T; // µ±Ç°µÄ¼Û¸ñģʽ
typedef enum
{
  SPM_NORMAL = 0U,
  SPM_LADDER = 0x12, // ½×Ìݵ÷¼Û
  SPM_TIME = 0x13    // Ê±¼äµ÷¼Û
} SET_PRICE_MODE_T;  // ÉèÖü۸ñģʽ
typedef enum
{
  PPS_CYCLICALLY = 0U,
  PPS_ONLY_ONE = 0x11
} PRICE_PERIOD_STATUS_T; // ¼Û¸ñÖÜÆÚ״̬
typedef enum
{
  PPU_HOUR = 0x11,
  PPU_DAY = 0x22,
  PPU_MONTH = 0x33,
  PPU_QUARTER = 0x44,  // ¼¾¶È
    PPU_YEAR = 0x55,         // Äê¶È
} PRICE_PERIOD_UNIT_T; // ¼Û¸ñÖÜÆÚµ¥Î»
 
#pragma pack(1)
 
#define REALTIME_BILLING_FORMAT_SIZE sizeof(BILLING_REAL_PARA_T)
typedef struct
{
  uint8_t price_type_mode_now;
  uint32_t price_now;
  double use_money_sum;
  double balance_now;
  double residual_gas_now;
  double ladder_cumulate_sc;
} BILLING_REAL_PARA_T; // ¼Æ·Ñʵʱ²ÎÊý
 
#define SYS_BILLING_ALARM_CFG_FORMAT_SIZE sizeof(BILLING_ALARM_CFG_T)
typedef struct
{
    uint16_t alarm_ctl_byte_2;
    uint16_t alarm_send_byte_2;
  uint16_t valve_close_ctl[2];
  int32_t balance_small_value[5];
  uint32_t cumulate_flow_value;
  uint8_t no_gprs_days;
  uint8_t no_use_gas_days;
  uint8_t reserve[5];
} BILLING_ALARM_CFG_T; // ¼Æ·Ñ±¨¾¯ÅäÖÃ
 
typedef struct
{
  uint8_t time[6];
  uint16_t duration;
} LADDER_TIME_PRICE_PARA_T;
#define SYS_LADDER_PRICE_CFG_FORMAT_SIZE sizeof(LADDER_PRICE_CFG_PARA_T)
typedef struct
{
  uint16_t price_ver;
  uint32_t normal_price_now;
  SET_PRICE_MODE_T set_price_type_mode;
  PRICE_PERIOD_STATUS_T period_state;
  uint8_t period_start_time[6];
  PRICE_PERIOD_UNIT_T period_unit;
  uint16_t period_duration;
  uint32_t set_ladder_price[5];
  uint32_t set_ladder_cumulate[5];
  LADDER_TIME_PRICE_PARA_T set_time_price[5];
  PRICE_PERIOD_UNIT_T time_unit;
  uint8_t price_scheme_start_time[6];
  uint8_t reserve[7];
} LADDER_PRICE_CFG_PARA_T; // ½×Ìݼ۸ñÅäÖòÎÊý
 
#pragma pack()
 
extern BILLING_REAL_PARA_T billing_real_para_g;
extern LADDER_PRICE_CFG_PARA_T ladder_price_cfg_para_true_g;
extern LADDER_PRICE_CFG_PARA_T ladder_price_cfg_para_new_g;
extern ErrorStatus_STM32 have_gprs_send_flag;
extern BILLING_ALARM_CFG_T billing_alarm_cfg_g;
 
void Billing_RealTimeProcess(BILLING_MODE_T start_flag, __IO double single_flow_sum, LADDER_PRICE_CFG_PARA_T *ladder_cfg_p, BILLING_REAL_PARA_T *billing_para_p);
double GasCumulant_Ladder_PeriodCalculation(BILLING_MODE_T mode_flag,double single_flow_sum, 
                                                                                        LADDER_PRICE_CFG_PARA_T *ladder_cfg_p_p, BILLING_REAL_PARA_T *billing_para_p_p);
void Add_days_CalculateYearMonTHDay(uint8_t *pYear_bcd, uint8_t *pMonth_bcd, uint8_t *pDay_bcd, uint16_t add_days);
void GasCumulant_Ladder_PeriodCfg(LADDER_PRICE_CFG_PARA_T *ladder_cfg_new, LADDER_PRICE_CFG_PARA_T *ladder_cfg_old, __IO RTC_TimeDateTypeDef *calendar);
void StartTime_NextCalculation(PRICE_PERIOD_UNIT_T price_unit, uint16_t time_duration, uint8_t *pNext_time);
 
#endif