#include "billing.h" #include "system_mem_para.h" #include "pulse_and_alarm_line.h" #include "linked_list.h" FlagStatus RS485_trigger_settle_flag = RESET; ErrorStatus PulseSettlement(__IO SAVE_REALTIME_DATA_T *save_realtime_data_p,__IO int16_t *pulse_conut_p,float pulse_coe_in) { double dGas = 0; // double dGasUseSum = 0; double dFee = 0; // double dFeeUseSum = 0; // double dBlance = 0; if((*pulse_conut_p > 1000)||(*pulse_conut_p < -1000)||(pulse_coe_in > 1000)) //Òì³£Êý¾Ý²»½áËã return FAIL; dGas = *pulse_conut_p * pulse_coe_in; *pulse_conut_p = 0; dFee = save_realtime_data_p->realtime_billing_data_s.price_now *0.0001 * dGas; save_realtime_data_p->realtime_flow_data_s.forward_cumulate_sc += dGas; save_realtime_data_p->realtime_billing_data_s.use_fee_sum += dFee; save_realtime_data_p->realtime_billing_data_s.balance_now -= dFee; return PASS; } ErrorStatus RS485Settlement(__IO SAVE_REALTIME_DATA_T *save_realtime_data_p) { double dGas = 0; // double dGasUseSum = 0; double dFee = 0; // double dFeeUseSum = 0; // double dBlance = 0; if(save_realtime_data_p->realtime_flow_data_s.forward_cumulate_sc < save_realtime_data_p->realtime_billing_data_s.gas_use_base) return FAIL; dGas = save_realtime_data_p->realtime_flow_data_s.forward_cumulate_sc - save_realtime_data_p->realtime_billing_data_s.gas_use_base; dFee = save_realtime_data_p->realtime_billing_data_s.price_now *0.0001 * dGas; save_realtime_data_p->realtime_flow_data_s.forward_cumulate_sc += dGas; save_realtime_data_p->realtime_billing_data_s.use_fee_sum += dFee; save_realtime_data_p->realtime_billing_data_s.balance_now -= dFee; return PASS; } void balanceStatusHandler(double balance,BILLING_VALVE_CTRL_PATA_T billing_valve_ctrl_para_in ) { if(balance >= billing_valve_ctrl_para_in.balance_small_value[0]*0.01){ __SYS_STATUS_BYTES_STATUS(balance_small_1, RESET, ALARM_ID_BALANCE_SMALLER1); __SYS_STATUS_BYTES_STATUS(balance_small_2, RESET, ALARM_ID_BALANCE_SMALLER2); __SYS_STATUS_BYTES_STATUS(balance_small_3, RESET, ALARM_ID_BALANCE_SMALLER3); __SYS_STATUS_BYTES_STATUS(balance_small_4, RESET, ALARM_ID_BALANCE_SMALLER4); }else if(balance >= billing_valve_ctrl_para_in.balance_small_value[1]*0.01){ __SYS_STATUS_ALARM_BYTES_SET(balance_small_1, ALARM_ID_BALANCE_SMALLER1); __SYS_STATUS_BYTES_STATUS(balance_small_2, RESET, ALARM_ID_BALANCE_SMALLER2); __SYS_STATUS_BYTES_STATUS(balance_small_3, RESET, ALARM_ID_BALANCE_SMALLER3); __SYS_STATUS_BYTES_STATUS(balance_small_4, RESET, ALARM_ID_BALANCE_SMALLER4); }else if(balance >= billing_valve_ctrl_para_in.balance_small_value[2]*0.01){ // __SYS_STATUS_ALARM_BYTES_SET(balance_small_1, ALARM_ID_BALANCE_SMALLER1); __SYS_STATUS_ALARM_BYTES_SET(balance_small_2, ALARM_ID_BALANCE_SMALLER2); __SYS_STATUS_BYTES_STATUS(balance_small_3, RESET, ALARM_ID_BALANCE_SMALLER3); __SYS_STATUS_BYTES_STATUS(balance_small_4, RESET, ALARM_ID_BALANCE_SMALLER4); }else if(balance >= billing_valve_ctrl_para_in.balance_small_value[3]*0.01){ // __SYS_STATUS_ALARM_BYTES_SET(balance_small_1, ALARM_ID_BALANCE_SMALLER1); // __SYS_STATUS_ALARM_BYTES_SET(balance_small_2, ALARM_ID_BALANCE_SMALLER2); __SYS_STATUS_ALARM_BYTES_SET(balance_small_3, ALARM_ID_BALANCE_SMALLER3); __SYS_STATUS_BYTES_STATUS(balance_small_4, RESET, ALARM_ID_BALANCE_SMALLER4); }else{ // __SYS_STATUS_ALARM_BYTES_SET(balance_small_1, ALARM_ID_BALANCE_SMALLER1); // __SYS_STATUS_ALARM_BYTES_SET(balance_small_2, ALARM_ID_BALANCE_SMALLER2); // __SYS_STATUS_ALARM_BYTES_SET(balance_small_3, ALARM_ID_BALANCE_SMALLER3); __SYS_STATUS_ALARM_BYTES_SET(balance_small_4, ALARM_ID_BALANCE_SMALLER4); } } /********** *SettlementPro½áËã´¦Àí *Âö³åºÍRS485¶ÀÁ¢½áË㣬ͬʱ¿ªÆôʱ£¬ ÒÔRS485½áËãΪ׼£¬Âö³åÖ»×÷Ϊ¹ý³Ì½áËã *ÿ´ÎRS485½áËãÖ®ºó¶¼´æ´¢Ò»´ÎʵʱÊý¾Ý£¬µ±½öÂö³å½áËãʱ£¬ÐèÒª¶¨ÆÚ´æ´¢Ò»´Î£¬ÀýÈç5·ÖÖÓÒ»´Î *ʵʱÊý¾ÝµÄ´æ´¢Îª¶à·Ý¿Õ¼äÑ­»·´æ´¢ **********/ void SettlementPro(void) { FlagStatus trigger_realtime_data_save_flag = RESET; if(pulse_count != 0){ if(PulseSettlement(&save_realtime_data_g,&pulse_count,flow_meter_para_g.pulse_coe) ==PASS){ }else{ } } if(RS485_trigger_settle_flag == SET){ RS485_trigger_settle_flag = RESET; if(RS485Settlement(&save_realtime_data_g) ==PASS){ //RS485³É¹¦½áËãÖ®ºó´æ´¢Ò»´ÎÊý¾Ý trigger_realtime_data_save_flag = SET; }else{ } } //½öÂö³åʱ£¬¶¨ÆÚ´æ´¢Ò»´Î£¬±ÈÈç5·ÖÖÓ´æ´¢Ò»´Î if(flow_meter_para_g.flow_meter_conn_type == FLOW_METER_CONN_PULSE){ if(((sys_clockBCD_g.min % 5)==0)&&(sys_clockBCD_g.sec == 0)){ trigger_realtime_data_save_flag = SET; } } if(trigger_realtime_data_save_flag == SET){ trigger_realtime_data_save_flag = RESET; //?ʵʱÊý¾Ý´æ´¢ } //?Óà¶î״̬´¦Àí }