forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

wujiazhi
2024-06-11 65062d0d5b21f838aa0043a15ce54cfab8d72c43
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
#ifndef _SYSTEM_PARAMETER_H_
#define _SYSTEM_PARAMETER_H_
 
#include "define_all.h" 
#include "extern_rtc.h"
#include "lcd.h"
 
// ÏµÍ³²ÎÊý±ê־λÉèÖÃ
#define __SYS_PARA_FLAG_SET_(__HANDLE__) ((&sys_some_flag_g)->__HANDLE__ = SET)
// ÏµÍ³²ÎÊý±ê־λÇå³ý
#define __SYS_PARA_FLAG_CLEAR_(__HANDLE__) ((&sys_some_flag_g)->__HANDLE__ = RESET)
// Ò»ÔªÒ»´Îº¯Êý
#define LINEAR_FUNC_OF_ONE_VARIABLE(__SLOPE__, __INTERCEPT__, __VALVE__) ((__SLOPE__ * __VALVE__) + __INTERCEPT__)
 
// ÆÁÄ»µÄ×î´óÏÔʾÕûÊý
#define LCD_SHOW_NUM_MAX 1000000 //£¨999999.999f£©
 
#define SYS_FLOW_UP_3_VALUE 1.25f // Á÷Á¿³¬ÏÞÖµ123
 
#define SYS_TEMP_ERROR_VALUE 0xFFFF // Î¶ȴíÎó/ÉÏ/ÉÏÉÏ/ÏÂ/ÏÂÏÂÏÞÖµ
#define SYS_TEMP_MEASURE_MAX 40              // µ¥Î»¡æ
#define SYS_TEMP_MEASURE_MIN (-15)
 
#define SYS_PRESS_ERROR_VALUE 0xFFFF // Ñ¹Á¦´íÎó/ÉÏ/ÉÏÉÏ/ÏÂ/ÏÂÏÂÏÞÖµ
#define SYS_PRESS_MEASURE_MAX 130.0f              // µ¥Î»Kpa
#define SYS_PRESS_MEASURE_MIN 70.0f
#define BARO_PRESS 100.0f                        //´óÆøÑ¹
 
 
#define G4_FLOW_MIN 0.04f // µ¥Î»m^3/h
#define G4_FLOW_MAX 6              // µ¥Î»m^3/h
#define G6_FLOW_MIN 0.06f 
#define G6_FLOW_MAX 10
#define G10_FLOW_MIN 0.10f 
#define G10_FLOW_MAX 16
#define G16_FLOW_MIN 0.16f
#define G16_FLOW_MAX 25
#define G25_FLOW_MIN 0.25f
#define G25_FLOW_MAX 40
#define G40_FLOW_MIN 0.40f
#define G40_FLOW_MAX 65
 
typedef enum
{
  MEDIA_UNKNOWN = 0U,
  MEDIA_OTHER,
  AIR,
  GAS
} MEDIA_STATUS;
 
typedef enum
{
    CPF_ONE_TENTH = 10U,
  CPF_1L = 100,
  CPF_5L = 500,
  CPF_10L = 1000,
  CPF_20L = 5000
} CALI_PULSE_FACTOR_T;
 
typedef enum
{
  DT_NONE = 0U,
  DT_HOLISTIC_METER,     // Ò»Ìåʽ±í
  DT_HOLISTIC_CTL_METER, // Ò»Ìåʽ¿ØÖÆ±í£¨´ø·§£©
  DT_SPLIT_METER,        // ·ÖÌåʽ±í
  DT_SPLIT_CTL_METER,    // ·ÖÌåʽ¿ØÖÆ±í£¨´ø·§£©
} DEVICE_TYPE;           // É豸ÀàÐÍ
typedef enum
{
  DM_NONE = 0U,
  DM_HM_UFG610, // HM = HOLISTIC_METER
  DM_HM_UFG620,
  DM_HCM_UFG210,
  DM_SCM_SZV101,
  DM_SM_DTU100,
  DM_SCM_SZV102,
    DM_SCM_SZV103,
    DM_HM_UFG630,
    DM_HM_UFG220,     //Á÷Á¿¼Æ
    DM_HCM_UFG220,    //È¼Æø±í
    DM_HCM_UFG620,
    DM_HCM_UFG630,
} DEVICE_MODEL; // É豸ÐͺÅ
 
#pragma pack(1)
 
typedef struct
{
  __IO FlagStatus sys_run_period; // ÏµÍ³¼¤»îÖÜÆÚ
  __IO FlagStatus sys_cal_run_period;
} SYS_TIME_T; // ÏµÍ³ÐÄÌøÊ±¼ä
 
typedef struct
{
  FlagStatus para_display_flag; // ²ÎÊýÏÔʾÊÚȨ
  FlagStatus uncap_flag;        // ¿ª¸ÇÊÚȨ
} SYS_SOME_FLAG_T;              // ¸÷ÖÖ±ê־λ
 
#define SEC_ORDER_CORR_PARA_FORMAT_SIZE sizeof(SECOND_ORDER_CORR_T)
typedef struct{
 float second_flow_data_point[5];
 float second_corr_factor[5];
 float reserve[10];
}SECOND_ORDER_CORR_T;
 
#define SYS_CAL_PULSE_PARA_FORMAT_SIZE sizeof(CAL_PULSE_PARA_T)
typedef struct
{
  uint16_t cal_pulse_factor; // ±ê¶¨Âö³åϵÊý 0.1¡¢1¡¢5¡¢10¡¢20 L/pl;·Å´ó100±¶
  uint16_t cal_pulse_width;  // ±ê¶¨Âö³å¿í¶È µ¥Î»ms
  uint8_t reserve[4];
} CAL_PULSE_PARA_T; // ±ê¶¨Âö³å²ÎÊý
 
#define SYS_FLOW_ALARM_CFG_FORMAT_SIZE sizeof(SYS_FLOW_ALARM_CFG_T)
typedef struct
{
  float sys_flow_up_1; //µ¥Î» Nm^3 /h
  float sys_flow_up_2;
  float sys_flow_down_1;
  float flow_up_2_replace_value;
  float small_flow_excision_value;
  uint8_t reserve[8];
} SYS_FLOW_ALARM_CFG_T; // ÏµÍ³Á÷Á¿±¨¾¯ÅäÖÃ
#define SYS_PRESS_ALARM_CFG_FORMAT_SIZE sizeof(SYS_PRESS_ALARM_CFG_T)
typedef struct
{
  /*ÐÞÕý·½·¨£¨Ò»ÔªÒ»´Îº¯Êý£©£ºY = k * X + b ÐÞÕýѹÁ¦ = press_correction_factor * Ô­Ê¼Ñ¹Á¦ + press_intercept*/
  float press_correction_factor; // ÐÞÕýϵÊý Ò²½ÐбÂÊ
  float press_intercept;         // ÐÞÕý½Ø¾à
  float press_up_value;
  float press_up_up_value;
  float press_down_value;
  float press_down_down_value;
  float press_up_scope;
  float press_down_scope;
    float press_down_down_replace;
  uint8_t reserve[8];
} SYS_PRESS_ALARM_CFG_T; // Ñ¹Á¦±¨¾¯ÅäÖÃ
#define SYS_TEMP_ALARM_CFG_FORMAT_SIZE sizeof(SYS_TEMP_ALARM_CFG_T)
typedef struct
{
  float temp_correction_factor;
  float temp_intercept;
  int16_t temp_up_value;
  int16_t temp_up_up_value;
  int16_t temp_down_value;
  int16_t temp_down_down_value;
  int16_t temp_up_scope;
  int16_t temp_down_scope;
  int16_t temp_up_up_replace;
  float temp_drastic_change;//ζȾç±ä
  int16_t cpu_temp_up_scope;
  int16_t cpu_temp_down_scope;
  uint8_t reserve[8];
} SYS_TEMP_ALARM_CFG_T; // Î¶ȱ¨¾¯ÅäÖÃ
#define MASTER_SOFT_HARD_FORMAT_SIZE sizeof(MASTER_SOFT_HARD_PARA_T)
typedef struct
{
  uint8_t master_pcb_num[5];       // pcbÐòÁкÅ
  uint8_t master_pcb_type[5];      // pcbÐͺÅ
  uint8_t master_hardware_ver[5];  // Ó²¼þ°æ±¾
  uint8_t master_firmware_ver[4];  // ¹Ì¼þ°æ±¾
  uint8_t master_firmware_crc[2];  // ¹Ì¼þcrc
  uint8_t master_firmware_time[3]; // ¹Ì¼þ°æ±¾ÈÕÆÚ
  uint8_t reserve[10];
} MASTER_SOFT_HARD_PARA_T;
 
#define MASTER_BASIC_FORMAT_SIZE sizeof(MASTER_BASIC_PARA_T)
typedef struct
{
    DEVICE_MODEL device_type_bcd;
    uint16_t    plant_code_bcd;
    uint8_t factory_number[10];
    uint8_t specifications_model[20];
    uint8_t reserve[20];
} MASTER_BASIC_PARA_T;
 
#define REALTIME_DATA_FORMAT_SIZE sizeof(SYS_REAL_TIME_DATA_T)
typedef struct
{
  struct measure_para
  {
    double forward_cumulate_sc; // ÕýÏò±ê¿öÀÛ»ýÁ¿
    double forward_cumulate_wc;
    double cal_cumulate_reserve[2];         // ±ê¶¨ÀÛ»ýÁ¿_Ô¤Áô
    double err_forward_cumulate_reserve[2]; // ´íÎóÀÛ»ýÁ¿_Ô¤Áô
    float instant_wc;                       // µ¥Î» m^3/h
    float instant_wc_avg;                   // Ë²Ê±¹¤¿ö¾ùÖµ,×î½ü20´Î²É¼¯µÄ˲ʱÁ÷Á¿Æ½¾ùÖµ
    float instant_sc;
    float temperature;
    float temp_amend; // Î¶ÈÐÞÕýÖµ
    float temp_avg;   // Î¶ȾùÖµ
    float pressure;
    float press_amend;    // Ñ¹Á¦ÐÞÕýÖµ
    float press_avg;      // Ñ¹Á¦¾ùÖµ
    float compressibility_factor; // Ñ¹ËõÒò×Ó
    float C_coefficient_reserve;  // CϵÊý_Ô¤Áô
    float K_coefficient_reserve;  // KϵÊý_Ô¤Áô
  } measure_para_s;               // ¼ÆÁ¿²ÎÊý
  struct time_para
  {
    uint8_t year;
    uint8_t month;
    uint8_t day;
    uint8_t hour;
    uint8_t minute;
    uint8_t second;
  } time_para_s; // Ê±¼ä²ÎÊý BCD
  struct state_para
  {
    float cpu_temperature; // »·¾³Î¶È
    uint8_t lith_vcc;
    uint8_t alka_vcc;
    float tof_up;
    float tof_down;
    float tof_diff;
    uint8_t signal_intensity_up;
    uint8_t signal_intensity_down;
    uint8_t signal_gain_up;
    uint8_t signal_gain_down;
    uint16_t snr_up; // ÐÅÔë±È_ÉÏͨµÀ
    uint16_t snr_down;
        uint16_t real_line_a; //ÕæÊµ´¥·¢Ïß
    uint16_t real_line_b;
    float sound_vel; // µ¥Î» £ºm/s
    float flow_vel;
  } state_para_s;       // Ì½Í·_״̬²ÎÊý
} SYS_REAL_TIME_DATA_T; // ÏµÍ³ÊµÊ±Êý¾Ý£¨ÖØÒª£©
 
 
 
 
#pragma pack()
 
extern float sys_device_flow_min_g;
extern float sys_device_flow_qt_g;
 
extern __IO uint16_t auto_exit_start_min_time_g;
extern __IO uint16_t cal_mode_exit_cnt_g;
extern __IO uint16_t cal_mode_force_exit_cnt_g;
extern uint8_t sys_device_flow_max_g;
extern uint8_t cal_mode_exit_save_cumulate_flag_g;
 
extern SYS_TIME_T sys_time_g;
extern SYS_SOME_FLAG_T sys_some_flag_g;
extern MASTER_SOFT_HARD_PARA_T master_soft_hard_para_g;
extern SYS_REAL_TIME_DATA_T sys_realtime_data_g;
extern SYS_FLOW_ALARM_CFG_T sys_flow_alarm_cfg_g;
extern SYS_PRESS_ALARM_CFG_T sys_press_alarm_cfg_g;
extern SYS_TEMP_ALARM_CFG_T sys_temp_alarm_cfg_g;
extern CAL_PULSE_PARA_T cal_pulse_para_g;
 
extern MASTER_BASIC_PARA_T master_basic_papa_g;
 
extern SECOND_ORDER_CORR_T sec_order_corr_set_g;
extern SECOND_ORDER_CORR_T sec_order_corr_real_g;
 
void SetParaMode_AutoExitProcess(TEMP_SYS_MODE_CNV_CMD *pCnv_cmd_flag, __IO RTC_TimeDateTypeDef *calendar_p);
void CalMode_AutoExitProcess(MEDIA_STATUS medium_flag, TEMP_SYS_MODE_CNV_CMD *pCnv_cmd_flag, __IO RTC_TimeDateTypeDef *calendar_p);
void Master_SoftHardPara_Init(void);
void Sys_MappingPara_Init(void);
void SecondOrder_RealParaCalculate_Init(void);
 
void Sys_GetUnitType_Init(void);
void Sys_GetUnitType_Set(uint8_t device_type_before);
#endif