forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

wujiazhi
2024-06-07 d0cca79a4aa7efce979c6aed275fe1bb75af4cc4
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
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
#ifndef __PARA_H
#define __PARA_H
 
#include "define_all.h" 
 
#include "1ADC.h"
 
#define FIRMWARE_VER_1 0x0000
#define FIRMWARE_VER_2 0x0102
#define FIRMWARE_VER_3 0x0407
 
#define __UPPER_DATA_ALTER(__LAST__, __NOW__) ((__LAST__ !=  __NOW__) ? SET : RESET)
 
/////////////////////////////////////
#define            READSUCCESSFULLYTIMES  3
#define            READFAILEDTIMES  200
////////////////////////////////////
 
#define            PULSE_MODE   0x01
#define            RS485_MODE   0x02
#define            RS485_AND_PULSE_MODE   0x03
 
 
 
#define  ACTIVE                                1
#define  NOACTIVE                            0
 
#define HOST_COMPUTER_DATA_INDEX 3
 
///////////////////Alarm code/////////////////////
#define        FLOW_LOW_PWR_ALARM_CODE                                0x0101
#define        FLOW_UNDER_VOLTAGE_ALARM_CODE                    0x0102
#define        FLOW_PWR_DOWN_ALARM_CODE                            0x0103
#define        ALKA_PWR_DOWN_ALARM_CODE                            0x0104
#define        LITH_PWR_DOWN_ALARM_CODE                            0x0105
#define        EXTERNAL_PWR_ACCESS_ALARM_CODE                0x0106
#define        EXTERNAL_PWR_DOWN_ALARM_CODE                    0x0107
#define        ALKA_PWR_LOW_ALARM_CODE                                0x0108
#define        LITH_PWR_LOW_ALARM_CODE                                0x0109
 
#define        PULSE_LINE_DISCONNECTED_ALARM_CODE        0x0201
#define        FORCED_TO_CLOSE_VALVE_ALARM_CODE            0x0202
#define        VALVE_OPEN_ALARM_CODE                                    0x0203
#define        VALVE_ABNORMAL_ALARM_CODE                            0x0204
#define   VALVE_FORCE_OPEN_ALARM_CODE           0x0205
#define        PULSE_LINE_MISMATCH_ALARM_CODE                  0xfff1
#define        GAS_LEAK_ALARM_CODE                                        0x0208
 
#define        RS485_READ_FLOW_FAILED_ALARM_CODE            0x0301
#define        RS485_READ_ABNORMAL_SMALL_READING_CODE 0x0302
 
#define        TEMPERATURE_ABNORMAL_ALARM_CODE                0x0401
#define        PRESSURE_ABNORMAL_ALARM_CODE                    0x0402
 
#define        AMOUNT_SMALL_ALARM_CODE                                0x0501
#define        AMOUNT_ARREARS_ALARM_CODE                            0x0502
#define        AMOUNT_OVERDRAFT_ALARM_CODE                        0x0503
 
#define        E2RW_READ_ABNORMAL_ALARM_CODE               0x0701
#define        E2RW_WRITE_ABNORMAL_ALARM_CODE               0x0702
 
#define   CAP_OPEN_ALARM_CODE                   0x0802
 
#pragma pack(1)
 
//////////////////////////µØÖ··ÖÅä/////////////////////
 
#define        DeviceAddress_Addr        0x0004          
#define        Tyf_Addr                            0x0012            //18 
#define        Ty_Addr                                0x0014            //20    
#define        Typ_Addr                            0x0016            //22  
#define        Tp_Addr                                0x0018                //24    
 
#define         Time1_Flag_Addr                0x001C            //28    
#define         SendTiming_Hour_Addr    0x001D            //29    
#define         SendTiming_Min_Addr        0x001E            //30    
#define         Time2_Flag_Addr                0x001F            //31    
#define         SendTiming_Hour2_Addr    0x0020            //32    
#define         SendTiming_Min2_Addr    0x0021            //33    
#define         GPRS_RestartTime_Addr    0x0022            //34    
#define        IP_Addr                                0x0028            //40  IP
 
#define        NumDataStored_Addr        0x0037      //55-56   
#define        DataStoredFlag_Addr        0x003C      //60
 
#define        KVER_ADDR                            62
#define        KEY_ADDR                            64  //64-79
 
#define        REALTIME_CUMULATIVE_GAS_USAGE_ADDR        80    
#define        REALTIME_CUMULATIVE_FEE_USAGE_ADDR        88
#define        REALTIME_BALANCE_ADDR                                    96        
 
//#define        BALANCE_Addr                    0x0064      //100
#define        DATA_OBTAIN_TYPE_ADDR        104
#define        PULSE_COE_ADDR                    108
#define        BILLING_TYPE_ADDR                                112
#define        SINGLE_BILLING_FEE_ADDR                    113
#define        STEP_BILLING_FIRST_ADDR                    117
#define        STEP_BILLING_FEE_FIRST_ADDR            121
#define        STEP_BILLING_SECOND_ADDR                125
#define        STEP_BILLING_FEE_SECOND_ADDR        129
#define        STEP_BILLING_THIRD_ADDR                    133
#define        STEP_BILLING_FEE_THIRD_ADDR            137
#define        BALANCE_INSUF_ALARM_AMOUNT_ADDR    141
#define        CREDITS_ADDR                                        145
 
#define        METER_TYPE_CODE_ADDR                        149
 
#define        PULSE_WITDH_ADDR                                151
 
#define        ACCOUNT_STATUS_ADDR                            155
 
#define        BAUD_RATE_CODE_ADDR                            156
#define   RS485_PARITY_ADDR                                157
#define   EXP_VOLTAGE_CODE_ADDR                        158
#define        LOW_POWER_ALARM_LINE_ADDR                159
#define        SLAVE_ADDRESS_ADDR                            160
 
#define   SHOW_BALANCE_FLAG_ADDR          161
#define   SHOW_PRICE_FLAG_ADDR            162
 
#define        LCD_LOGO_ADDR       169
#define        LCD_FLAG_ADDR                170
#define   LOGO_DISPLAY_FLAG_ADDR   171
#define OPEN_VALVE_AUTHORIZE_FLAG_ADDR  172
#define OPEN_VALVE_AUTHORIZE_TIME_CNT_ADDRA  173   //173--176     Õ¼4λ
#define    VALVE_STATE_ADDR                                    177
#define    VALVE_TYPE_ADDR                                        178
 
#define    DeviceserialNum1_ADDR                200
#define    DeviceserialNum2_ADDR                202
#define    DeviceserialNum3_ADDR                204
#define    DeviceserialNum4_ADDR                206
 
#define    HardwareVerSn1_ADDR                  208
#define    HardwareVerSn2_ADDR                  210
#define    HardwareVerSn3_ADDR                  212
 
#define    FirmwareVerSn1_ADDR                  214
#define    FirmwareVerSn2_ADDR                  216
#define    FirmwareVerSn3_ADDR                  218
 
#define    FirmwareCRC_ADDR                    220
 
#define    FirmwareDateyear_ADDR                222
#define    FirmwareDatemonth_ADDR              224
#define    FirmwareDateday_ADDR                226
#define    EquipmentCaliberAndModel_ADDR 228  //É豸¿Ú¾¶ÐͺÅ
 
 
//485¶ÁȡУÑéÓõØÖ·ÇøÓò
#define    RS485_SETTLEMENT_FLAG_ADDR                299 //
#define    DATA_READABLE_FLAG_ADDR                    300 //Êý¾Ý¿É¶Á±êÖ¾£¬0x01±íʾ¸ÃÇøÓò´æÓÐÊý¾Ý£¬¿ÉÓÃ×÷¼Æ·ÑУÑ鼯ËãÓã»·Ç0x01£º±íʾûÓС£¸Ã±ê־ʲôÊÇÇåÓдý¿¼ÂÇ¡£
#define    SCACC_BIL_ADDR                        301 //301- 304 £¬¼Æ·ÑУÑéÓñê¿ö×ÜÁ¿´æ´¢Çøu32
#define    BALANCE_BIL_ADDR                      305 //305- 312 £¬¼Æ·ÑУÑéÓÃÓà¶î´æ´¢Çødouble
#define    GAS_USAGE_BIL_ADDR                                    313 //313- 320 £¬¼Æ·ÑУÑéÓÃ×ÜÓÃÆøÁ¿´æ´¢Çødouble
#define    FEE_USAGE_BIL_ADDR                                    321 //321- 328 £¬¼Æ·ÑУÑéÓÃ×ÜÓÃÆø½ð¶î´æ´¢Çødouble
 
#define    TIME_BIL_ADDR                                    329 //329- 334 £¬»ùÊýʱ¼ä£¬ÄêÔÂÈÕʱ·ÖÃë
 
 
#define        REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR        350    
#define        REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR        358
#define        REALTIME_BALANCE_B_ADDR                                    366
 
#define        E2RW_READ_ABNORMAL_FLAG_ADDR            375
#define        E2RW_WRITE_ABNORMAL_FLAG_ADDR            376
 
#define   VALVE_OPEN_TIMES_ADDR    925   //¿ª·§´ÎÊý925-926
#define   VALVE_CLOSE_TIMES_ADDR   927     //¹Ø·§´ÎÊý927-928
 
#define        REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR        970    
#define        REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR        978
#define        REALTIME_BALANCE_C_ADDR                                    986
 
#define        NumStoredLength            750      //´Ë²»ÊǵØÖ·£¬ÊÇÊý¾ÝµÄÌõÊý
#define      WCACC_addr                     0x03E8          //1000-4200  
#define   SCACC_addr                      0x1068              //4200-7400  
#define        PRE_addr                        0x1CE8             //7400-10600  
#define        TEM_addr                        0x2968            //10600-13800  
#define        WCINS_addr                    0x35E8              //13800-17000  
#define        SCINS_addr                    0x4268              //17000-20200  
#define        SCCor_addr                    0x4EE8             //20200-23400  
 
#define        YEAR_addr                        0x5B68      //23400-24200
#define        MONTH_addr                    0x5E88      //24200-25000
#define        DAY_addr                        0x61A8      //25000-25800
#define        HOUR_addr                        0x64C8      //25800-26600
#define        MIN_addr                        0x67E8      //26600-27400
#define        SEC_addr                        0x6B08      //27400-28200
 
#define        BAT_LITH_addr                        0x6E28      //28200 
 
#define        BAT_ALKA_addr                        0x6E2C      //
#define        BAT_EX_addr                            0x6E30      //28208
 
#define        CUMULATIVE_GAS_USAGE_ADDR        31400
#define        CUMULATIVE_FEE_USAGE_ADDR        37400 
#define        BALANCE_ADDR                                43400   //43400-49400
 
/*¼Æ·Ñ²ÎÊýÐ޸ļǼ ±£´æ100Ìõ */
#define        CURRENT_BIL_RECORD_NUM_ADDR        49990  
#define        BIL_RECORD_FULL_FLAG_ADDR            49992
#define        FIRST_BIL_RECORD_ADDR                     50000  
 
#define        BIL_RECORD_LENGTH                            100
#define        BIL_RECORD_NUM                                100
 
/*±¨¾¯¼Ç¼£¬±£´æ1000Ìõ*/
#define        CURRENT_ALARM_RECORD_NUM_ADDR        60000  
#define        ALARM_RECORD_FULL_FLAG_ADDR            60002 
#define   FIRST_ALARM_RECORD_ADDR                    60004
 
#define        ALARM_RECORD_LENGTH                9
#define        ALARM_RECORD_NUM                    1000   
 
/*ÀÛ»ýÁ¿Ð޸ļǼ£¬±£´æ50Ìõ*/
#define        CUMULANTS_MODIFY_RECORD_NUM_ADDR                        70000  
#define        CUMULANTS_MODIFY_RECORD_FULL_FLAG_ADDR            70002 
#define   FIRST_CUMULANTS_MODIFY_RECORD_ADDR                    70004
 
#define        CUMULANTS_MODIFY_RECORD_LENGTH                50
#define        CUMULANTS_MODIFY_RECORD_NUM                    50   
 
#define MODBUS_SLAVE_ADDR 75000
 
//ÁÙʱ±äÁ¿   ¼Æ·Ñģʽ
#define BALANCE_SAVE_TYPE_ADDR  75002
 
typedef struct LLJ_data
{
    uint16_t        year;
    uint8_t          month;
    uint8_t          date;
    uint8_t         hour;
    uint8_t         min;
    uint8_t         sec;
 
    float       Lith_Battery_V;           
    float       Alka_Battery_V;             
    float       EX_Battery_V;             
  float       Meter_Battery_V;
    u8                    MeterBatVoltagePercent; //·§ÃÅµç³Øµçѹ°Ù·Ö±È            
  float       SC_Accumulation;      
  float       WC_Accumulation;        
  uint32_t    SC_Accumulation_long;   
  uint32_t    WC_Accumulation_long;   
 
    double            SC_Accumulation_double;
    double            WC_Accumulation_double;
    
    int16_t            SC_Weight_Factor;
  int16_t            WC_Weight_Factor;
 
  float       Temperature;
  float       Pressure;
  float       SC_instant;            
  float       WC_instant;            
 
  float       KB_battery_Q;          
 
}LLJ_DATA;
 
typedef struct{
    uint8_t     Tyf; 
    uint8_t     Tf; 
    uint8_t     Typ; 
    uint8_t     Tp; 
    uint16_t    sampling_Time;
    uint8_t     time1_flag;       //0x80,0x00
    uint8_t     sendTiming_hour;  // BCD
    uint8_t     sendTiming_min;// BCD
    uint8_t     time2_flag;
    uint8_t     sendTiming_hour2;// BCD
    uint8_t     sendTiming_min2;// BCD
    uint8_t            GPRS_RESTARTTIME;
 
    uint8_t     real_sendTiming_hour;     
    uint8_t     real_sendTiming_min;
    uint8_t     real_sendTiming_day;
    
    uint8_t     RTC_sendTiming_hour;     //BCD
    uint8_t     RTC_sendTiming_min;
    uint8_t     RTC_sendTiming_day;
    
    uint8_t     AccountStatus;   //0x01¿ª»§£¬00Ïú»§»òÕß먦»§¡£
    uint8_t            TestStatus;    //²âÊÔ״̬£¬HWID4==1ʱ£¬TestStatus=1;´ËʱÓÃÓÚ³§¼Ò×Ô¼º²âÊÔ£¬²âÊԴ󲿷ֳö³§Ç°ÐèÒª¼ì²âµÄ¹¦ÄÜ¡£
    uint8_t            Hour_Updata_flag;//ʱÖÓ¸üÐÂflag£¬ÓÃÓÚһСʱ¶¨Ê±ÓÃ
 
    uint8_t            Key_Power_Det; //°´¼üµçÔ´¼ì²â±êÖ¾
    uint8_t            Logo_Display_Flag; //°´¼üµçÔ´¼ì²â±êÖ¾
//    uint8_t            EXPower_IR_Det;//ÍâµçÖն˲úÉúºóÐèÒªÑÓ³Ù¼ì²âµçƽÅжÏÊDz»ÊÇÕæµÄ״̬Óб仯
 
    u16                Sample_Min_Time; //²É¼¯×îСʱ¼ä£¬µ¥Î»Ã룬¼ÓÈëÕâÀïÊÇ20£¬Òâ˼20ÃëÖ®ÄÚÖ»ÄÜÖ´ÐÐÒ»´Î²É¼¯£¬ ·ÀÖ¹20ÄÚ¶à´ÎÑ­»·Åжϲɼ¯
    u16                Sample_Interval; //²É¼¯¼ä¸ô£¬µ¥Î»·ÖÖÓ  ÊýÖµ·¶Î§1-1440
    u16                Send_Interval; //·¢Ëͼä¸ô£¬µ¥Î»·ÖÖÓ  ÊýÖµ·¶Î§0-1440,   Îª0´ú±í²»Óüä¸ô·¢ËÍ
 
  u8        show_balance_flag;//0ΪÏÔʾ
    u8        show_price_flag;
}DEVICE_PARM;
 
//Alarm related
typedef struct{
    uint8_t    alarm_l;      
    uint16_t   u16AlarmStoreNum;  
    uint8_t         u8AlarmStoreFullFlag;
    
    uint8_t    alarm_Sample;      
    uint8_t    alarm_PRE;     
    uint8_t    alarm_TEM;    
  
    uint8_t    alarm_FlowPowerLOW;      
    uint8_t    alarm_FlowUnderPower;     
    uint8_t    alarm_FlowPowerDOWN; 
    uint8_t    alarm_AlkaPowerDOWN;    
    uint8_t    alarm_AlkaPowerLOW;  
    uint8_t    alarm_LithPowerDOWN; 
    uint8_t    alarm_LithPowerLOW;    
    uint8_t    alarm_EXPowerIN; 
    uint8_t    alarm_EXPowerRemove; 
            
    uint8_t    alarm_Pulse_Broken; 
    uint8_t    alarm_Pulse_Dismatch; 
    uint8_t    alarm_Valve_close;      
    uint8_t    alarm_Valve_open; 
    uint8_t         alarm_Valve_Abnormal; 
    
    uint8_t    alarm_Gas_Leak;
    uint8_t    alarm_Gas_Leak_time;
    
    uint8_t    alarm_Balance_Small;
    uint8_t    alarm_Balance_0;
    uint8_t    alarm_Credits_0;
    uint16_t   alarm_Credits_0Times;
    
    uint8_t    alarm_E2RW_read_abnormal;
    uint8_t    alarm_E2RW_write_abnormal;
    uint8_t    alarm_Cap_OPEN;
    uint8_t    alarm_Valve_Force_Open;
    float            fTempratureLowLimit;
    float            fTempratureHighLimit;
    float            fPressureLowLimit;
    float            fPressureHighLimit;
    
    uint8_t        u8ReadfailedTimes;
    uint8_t        u8ReadSuccessfullyTimes;
    
    uint8_t    alarm_Send_failed_time;
    uint8_t    Data_Send_failed_time;
    
    uint8_t    alarm_Valve_Abnormal_time;
    uint8_t    alarm_RS485_Abnormal_Small_Reading;    
    uint8_t            u8PulseBrokenTimes;
  uint8_t    alarm_FlowPowerLOW_time;     
 
    /*LCD warrning flag*/
    uint8_t    alarm_AlkaPowerLow_LCDFLAG;      
    uint8_t    alarm_LithPowerLow_LCDFLAG; 
    uint8_t    alarm_AlkaPowerDOWN_LCDFLAG;      
    uint8_t    alarm_LithPowerDOWN_LCDFLAG;     
    uint8_t    alarm_Pulse_Broken_LCDFLAG;
    uint8_t    alarm_Pulse_Dismatch_LCDFLAG;    
    uint8_t    alarm_Gas_Leak_LCDFLAG;
    uint8_t    alarm_Sample_LCDFLAG;
    uint8_t    alarm_PRE_LCDFLAG;     
    uint8_t    alarm_TEM_LCDFLAG; 
    uint8_t    alarm_Balance_Small_LCDFLAG;
    uint8_t    alarm_RS485Cardinalityfree_LCDFLAG;
    uint8_t    alarm_E2RW_read_abnormal_FLAG;
    uint8_t    alarm_E2RW_write_abnormal_FLAG;
    uint8_t    alarm_RS485_Abnormal_Small_Reading_FLAG;
    uint8_t    alarm_Cap_OPEN_LCDFALG;
    uint8_t    alarm_FlowPowerLOW_FLAG; 
 
    
}SYSTEM_ALARM;
 
 
typedef struct{
      
    //uint16_t      u16AlarmRecordNUM;      
    uint16_t       u16BilRecordNUM;    
    uint8_t         u8BilStoreFullFlag;
    
    uint16_t       u16CumulantsRecordNUM;    
    uint8_t         u8CumulantsStoreFullFlag;
    
 
}SYSTEM_RECORD;
 
 
/*-------------------------------¼Æ·Ñ²ÎÊýÐÅÏ¢--------------------------------*/
 
typedef struct parameter_bil
{
    //float        fTotal_balance;
    u8            cDataObtainType;       // 0x01:µ¥Âö³åÎÞ485  0x02:µ¥485ÎÞÂö³å  0X03£ºÂö³å + 485
    u8            u8PulseWidth;
    float        fPulseCoefficient;
    u8            cBillingType;      
    float        fSingleBillingFee;
    float        fStepBilling_First;
    float        fStepBillingFee_First;
    float        fStepBilling_Second;
    float        fStepBillingFee_Second;
    float        fStepBilling_Third;
    float        fStepBillingFee_Third;
    int            s32RechargeAmount;
    double    dRechargeAmount;
    uint16_t        iBalanceInsufAlarmAmount;
    float        fCredits;
    
}PARAMETER_BIL;
 
/*-------------------------------·§ÃÅÒì³£ÅжÏ--------------------------------*/
#define VALVE_ABNORMAL_THRESHOLD         3 //Ôݶ¨·§ÃÅÒì³£Åж¨ãÐֵΪ3·½Á÷Á¿
typedef struct valve_abnormal_para
{
    double  valveCloseFirstCum;  //¹Ø·§Ö®ºóµÚÒ»´Î¼Ç¼µÄÀÛ»ýÁ¿£¬¼Ç¼֮ºó¾Í²»»áÔٱ䣬³ý·ÇÔٴιط§´¥·¢
    u8     valveCloseFirstFlag;//¹Ø·§Ö®ºóµÚÒ»´Î¼Ç¼±êÖ¾£¬ 1´ú±íÒѾ­¼Ç¼£¬0´ú±íûÓмǼ
    double  valveCloseNextCum;  //¹Ø·§Ö®ºó½ÓÏÂÀ´µÄ¼Ç¼µÄÀÛ»ýÁ¿£¬»á¸üÐÂ
    u8     valveCloseNextFlag;//¹Ø·§Ö®ºó½ÓÏÂÀ´µÄ¼Ç¼±êÖ¾£¬ 1´ú±íÒѾ­¼Ç¼£¬0´ú±íûÓмǼ
    
    
}VALVE_ABNORMAL_PARA;
 
 
/*-------------------------------É豸ÐòÁкÅ------------------------------------*/
 
//address: 0000~0039
typedef    struct
{                                            /* Register        Type           R/W */
//    uint16        serialNum[4];                  /* 0      64bit integer     r/w */
    
    uint16        hardwareVerSn[3];            /* 1      32bit integer     r/w */
    uint16        firmwareVer[3];                /* 6       32bit integer    r/w */
    uint16        firmwareCRC;                  /* 8         16bit integer     r/w */
    uint16        firmwareVerDate_year;            /* 9        32bit integer     r/w */    
    uint16        firmwareVerDate_month;            /* 9        32bit integer     r/w */    
    uint16        firmwareVerDate_day;            /* 9        32bit integer     r/w */    
    uint8        EquipmentCaliberAndModel;  //É豸¿Ú¾¶ÐͺÅ1:DN25, 2:DN32,3:DN40,4:DN50,5:DN80,6:DN100,7:DN150, 8:DN200
} deviceSerialNum_t;
 
typedef struct
{
    u8    slave_time_flag;
    u8  slave_addr;
}MODBUS_DEV_PARA;
 
#pragma pack()
 
 
/*-------------------------------É豸ÐòÁкÅ------------------------------------*/
 
extern volatile deviceSerialNum_t regDevSerialNum;
 
 
 
void arraya_2_arrayb(u8 * aA , u8 * aB, u8 len, u8 mode);
uint8_t HexToChar(uint8_t bChar);
uint8_t CharToHex(uint8_t bChar);
uint8_t Set_parameters(uint8_t dev_or_bil);
void parameters_2buff(uint8_t dev_or_bil,uint8_t key); 
void SendDataToSTM32(void);
void calculate_Sample_Time(uint16_t NOW_year,uint8_t NOW_month,uint8_t NOW_day);
void calculate_Send_Time(uint16_t NOW_year,uint8_t NOW_month,uint8_t NOW_day) ;
void compara_Send_Sample(uint8_t NOW_year,uint8_t NOW_month,uint8_t NOW_day ,uint8_t NOW_hour,uint8_t NOW_min);
void Variable_AllInit(void);
void UART1_set(void);
void Send_ParaUp(void);
void Set_Billing_Para(void);
void Alarm_record(uint16 AlarmCode);
void Alarm_analysis(void);
 
void CumulantsRecord(u8 GasModifyFlag,double PreModifyGasValue,u8 FeeModifyFlag,double PreModifyFeeValue);
void CumulantsModify(void);   //ÀÛ»ýÁ¿ÐÞ¸Ä
void    Send_Cumulants_Record(u16 num);
 
void    Send_Bil_Record(u16 num);
void    Send_Alarm_Record(u16 num);
void    LeakAlarmLine_Detection(void);//й©±¨¾¯Ïß
void    PulseLine_Detection(void);
void  RegisterInit(void);
void  VerRegisterSet(void);  //°æ±¾ºÅÉèÖÃ
void VerRegisterRead(void);  //°æ±¾ºÅÉèÖÃ
void Read_Valce_Para_Up(void);
 
 
void BillRecord(void); //¼Æ·Ñ²ÎÊýÐ޸ļǼ
void BigSmallSwitch(u8 * aA , u8 len);  //Êý×é´óС¶ËÇл»£¬»òÕß½Ð×öÊý×éµ¹Ðò£¬Ä¿Ç°×Ϊ8×Ö½Ú
unsigned char HEX2BCD(unsigned char hex_data);
unsigned char BCD2HEX(unsigned char bcd_data);
void Get_Sample_Send_Interval(void);
void    Sample_Send_Control(void);
void Condition_det(void);
 
void Valve_abnormal_judge(void);
void dayly_flag_clear(void);
 
extern uint16_t     Time_For_valve_open;
extern uint16_t Time_For_wakeup;
extern uint16_t LCD_sleepTime;
extern uint8_t  LCD_flag;
extern uint8_t            LOGO_Flag ;   
extern uint32_t  k_index;          
extern uint8_t flag,begin,LPM3_FLAG;
extern int num,sleepTime;
extern uint8_t total_dataGroupNum;    
extern uint8_t yushu;
extern uint8_t FirstTimeRunFlag ;
 
extern char Debug[150];
extern DEVICE_PARM         device_Parm;
extern PARAMETER_BIL     parameter_bil;
extern SYSTEM_ALARM     system_alarm;
extern SYSTEM_RECORD        system_record;
 
///////////////////////////////
 
extern u8             RS485_status,BT_status;
 
extern volatile    ad_data_s            ad_data_g;
 
extern volatile LLJ_DATA            LLJ_data_g;
 
extern u32             Power_ON_cnt;
extern u8             Power_ON_flag;
 
extern volatile MODBUS_DEV_PARA modbus_dev_para;
extern VALVE_ABNORMAL_PARA   valve_abnormal_para_g;
 
#endif