#include "para.h" #include "1gprs.h" #include "ReadDeviceData.h" #include "1billing.h" #include "ex_rtc.h" #include "AES128.h" #include "menu.h" #include "1ValveControl.h" #include "e2p.h" #include "devicegpioinit.h" #include "RS232.h" #include "RW_Verification.h" #include "1lcd.h" #include "1lcd_new.h" #include "mbcrc.h" #include "systaskinit.h" #include "1powermanage.h" /* Private_Macros -------------------------------------------------------------*/ // #define YEAR ((((__DATE__ [7] - '0') * 10 + (__DATE__ [8] - '0')) * 10 \ + (__DATE__ [9] - '0')) * 10 + (__DATE__ [10] - '0')) #define MONTH (__DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? 1 : 6) \ : __DATE__ [2] == 'b' ? 2 \ : __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 3 : 4) \ : __DATE__ [2] == 'y' ? 5 \ : __DATE__ [2] == 'l' ? 7 \ : __DATE__ [2] == 'g' ? 8 \ : __DATE__ [2] == 'p' ? 9 \ : __DATE__ [2] == 't' ? 10 \ : __DATE__ [2] == 'v' ? 11 : 12) #define DAY ((__DATE__ [4] == ' ' ? 0 : __DATE__ [4] - '0') * 10 \ + (__DATE__ [5] - '0')) #define DATE_AS_INT (((YEAR - 2000) * 12 + MONTH) * 31 + DAY) #define TRUE 1 #define FALSE 0 u32 Power_ON_cnt =0; u8 Power_ON_flag = 0; u8 BalanceSaveType; //¼Æ·Ñģʽ±êÖ¾£¬0-±í¶Ë¼Æ·Ñ 1-·þÎñ¶Ë¼Æ·Ñ volatile LLJ_DATA LLJ_data_g; DEVICE_PARM device_Parm; PARAMETER_BIL parameter_bil; SYSTEM_ALARM system_alarm; SYSTEM_RECORD system_record; volatile MODBUS_DEV_PARA modbus_dev_para = {1,1}; uint16_t Time_For_valve_open = 0; uint16_t Time_For_wakeup; uint16_t LCD_sleepTime = 0; uint8_t LCD_flag=0; //0:·Ç³¤ÁÁ£¨ÁÁ1·ÖÖÓ£© 1£º³¤ÁÁ uint8_t LOGO_Flag = 0; //˼ÖþlogoÏÔʾ±êʶ£¬0´ú±íÏÔʾ£¬1´ú±í²»ÏÔʾ uint32_t k_index; //??,????FLASH????? uint8_t begin,LPM3_FLAG; int num,sleepTime; uint8_t total_dataGroupNum; //????????? uint8_t yushu; char Debug[150]; uint8_t FirstTimeRunFlag ; VALVE_ABNORMAL_PARA valve_abnormal_para_g; /*-------------------------------É豸ÐòÁкÅ------------------------------------*/ volatile deviceSerialNum_t regDevSerialNum; u8 RS485_status,BT_status; /****************************************** * func: HexToChar * desc: CharToHex * input: none * output: none * return: none *****************************************/ uint8_t HexToChar(uint8_t bChar) { u8 temp; temp = bChar; if (temp < 10) { temp += 0x30; } else if (temp < 16) // Capital //?? { temp = temp - 10 + 'A'; } else { temp = 0; } return temp; } /****************************************** * func: CharToHex * desc: CharToHex * input: none * output: none * return: none *****************************************/ uint8_t CharToHex(uint8_t bChar) { u8 temp; temp = bChar; if ((temp >= 0x30) && (temp <= 0x39)) { temp -= 0x30; } else if ((temp >= 0x41) && (temp <= 0x46)) // Capital //?? { temp -= 0x37; } else if ((temp >= 0x61) && (temp <= 0x66)) //littlecase { temp -= 0x57; } else { temp = 0xff; } return temp; } /****************************************** * func: arraya_2_arrayb * desc: array A TO array B * input: none * output: none * return: none *****************************************/ void arraya_2_arrayb(u8 * aA , u8 * aB, u8 len, u8 mode) //mode 0 С¶Ëģʽ 1´ó¶Ëģʽ ÆäËûÔÚ¶¨Òå×Ö½Ú˳Ðò { u8 index; u8 *ptra,*ptrb; if(mode==0) { ptra = aA; ptrb = aB; for(index = 0; index < len; index ++) { *ptrb = *ptra; ptrb ++; ptra ++; } }else if(mode==1) { ptra = aA + len - 1; ptrb = aB; for(index = 0; index < len; index ++) { *ptrb = *ptra; ptrb ++; ptra --; } } } /****************************************** * func: Set_parameters * desc: Set_parameters * input: none * output: none * return: none *****************************************/ uint8_t Set_parameters(uint8_t dev_or_bil) { float fPulseCoefficient; float fSingleBillingFee; // uint8_t index_i=0; uint8_t ack_flag=0; if(dev_or_bil == 0) //±í¾ß²ÎÊýÉèÖà { // if(GPRS_SEND_BUFF[0]==0x01) //±íºÅÐ޸ĵϰӦ¸ÃÔÚ±¾´ÎͨѶ½áÊøÖ®ºóÔÙÐ޸쬲»È»Í¨Ñ¶»áÓÐÎÊÌâ¡£ // { // for(index_i=0;index_i<8;index_i++) // { // gprs_protocol_header.DeviceAddress[index_i] = GPRS_SEND_BUFF[index_i + 1]; //?????? // } // #ifdef DEBUG_OUT // sprintf(Debug, "DeviceAddress = %x %x %x %x %x %x %x %x \r\n" , // gprs_protocol_header.DeviceAddress[7], // gprs_protocol_header.DeviceAddress[6], // gprs_protocol_header.DeviceAddress[5], // gprs_protocol_header.DeviceAddress[4], // gprs_protocol_header.DeviceAddress[3], // gprs_protocol_header.DeviceAddress[2], // gprs_protocol_header.DeviceAddress[1], // gprs_protocol_header.DeviceAddress[0]); // UartDebugFun(Debug); // #endif // } if(GPRS_SEND_BUFF[9]==0x01) { if(GPRS_SEND_BUFF[10]==0x04) { if((GPRS_SEND_BUFF[11] < 60)&&(GPRS_SEND_BUFF[11] > 0)) { device_Parm.Tyf = GPRS_SEND_BUFF[10]; device_Parm.Tf = GPRS_SEND_BUFF[11]; } else { ack_flag = 2; } } else if(GPRS_SEND_BUFF[10]==0x05) { if((GPRS_SEND_BUFF[11] < 24)&&(GPRS_SEND_BUFF[11] > 0)) { device_Parm.Tyf = GPRS_SEND_BUFF[10]; device_Parm.Tf = GPRS_SEND_BUFF[11]; } else { ack_flag = 2; } }else if(GPRS_SEND_BUFF[10]==0x06) { if((GPRS_SEND_BUFF[11] < 29)&&(GPRS_SEND_BUFF[11] > 0)) { device_Parm.Tyf = GPRS_SEND_BUFF[10]; device_Parm.Tf = GPRS_SEND_BUFF[11]; } else { ack_flag = 2; } } else { ack_flag = 2; } #ifdef DEBUG_OUT sprintf(Debug, "device_Parm.Tyf = %d \r\n" ,device_Parm.Tyf); UartDebugFun(Debug); #endif #ifdef DEBUG_OUT sprintf(Debug, "device_Parm.Tf = %d \r\n" ,device_Parm.Tf); UartDebugFun(Debug); #endif } if(GPRS_SEND_BUFF[12]==0x01) { if(GPRS_SEND_BUFF[13] == 0x84) { if((GPRS_SEND_BUFF[14] < 60)&&(GPRS_SEND_BUFF[14] > 0)) { device_Parm.Typ = GPRS_SEND_BUFF[13]; device_Parm.Tp = GPRS_SEND_BUFF[14]; } else { ack_flag = 3; } } else if(GPRS_SEND_BUFF[13] == 0x85) { if((GPRS_SEND_BUFF[14] < 24)&&(GPRS_SEND_BUFF[14] > 0)) { device_Parm.Typ = GPRS_SEND_BUFF[13]; device_Parm.Tp = GPRS_SEND_BUFF[14]; } else { ack_flag = 3; } } else if(GPRS_SEND_BUFF[13] == 0x86) { if((GPRS_SEND_BUFF[14] < 29)&&(GPRS_SEND_BUFF[14] > 0)) { device_Parm.Typ = GPRS_SEND_BUFF[13]; device_Parm.Tp = GPRS_SEND_BUFF[14]; } else { ack_flag = 3; } } else if(GPRS_SEND_BUFF[13] == 0x00) { device_Parm.Typ = GPRS_SEND_BUFF[13]; device_Parm.Tp = GPRS_SEND_BUFF[14]; } else { ack_flag = 3; } #ifdef DEBUG_OUT sprintf(Debug, "device_Parm.Typ = %d \r\n" ,device_Parm.Typ); UartDebugFun(Debug); #endif #ifdef DEBUG_OUT sprintf(Debug, "device_Parm.Tp = %d \r\n" ,device_Parm.Tp); UartDebugFun(Debug); #endif } if(GPRS_SEND_BUFF[15]==0x01) { if((GPRS_SEND_BUFF[16]&0x80)==0x80) { //device_Parm.time1_flag = 0x80; if(( ((GPRS_SEND_BUFF[16]&0x7f)>>4)*10 + (GPRS_SEND_BUFF[16]&0x0f) )<24) { if(( (GPRS_SEND_BUFF[17]>>4)*10 + (GPRS_SEND_BUFF[17]&0x0f) )< 60 ) { device_Parm.time1_flag = 0x80; device_Parm.sendTiming_hour = GPRS_SEND_BUFF[16]&0x7f; device_Parm.sendTiming_min = GPRS_SEND_BUFF[17]; #ifdef DEBUG_OUT sprintf(Debug, "dingshi time 1 = %x : %x \r\n" , device_Parm.sendTiming_hour,device_Parm.sendTiming_min); UartDebugFun(Debug); #endif } else { ack_flag = 4; } } else { ack_flag = 4; } } else { device_Parm.time1_flag = 0x00; #ifdef DEBUG_OUT UartDebugFun("time1_flag = 0 \r\n"); #endif } } if(GPRS_SEND_BUFF[18]==0x01) { if((GPRS_SEND_BUFF[19]&0x80)==0x80) { if(( ((GPRS_SEND_BUFF[19]&0x7f)>>4)*10 + (GPRS_SEND_BUFF[19]&0x0f) )<24) { if(( (GPRS_SEND_BUFF[20]>>4)*10 + (GPRS_SEND_BUFF[20]&0x0f) )< 60) { device_Parm.time2_flag = 0x80; device_Parm.sendTiming_hour2 = GPRS_SEND_BUFF[19]&0x7f; device_Parm.sendTiming_min2 = GPRS_SEND_BUFF[20]; #ifdef DEBUG_OUT sprintf(Debug, "dingshi time 2 = %x : %x \r\n" , device_Parm.sendTiming_hour2,device_Parm.sendTiming_min2); UartDebugFun(Debug); #endif } else { ack_flag = 4; } } else { ack_flag = 4; } } else { device_Parm.time2_flag = 0x00; device_Parm.time1_flag = 0x00; #ifdef DEBUG_OUT UartDebugFun("time2_flag = 0 \r\n"); #endif } } if(GPRS_SEND_BUFF[21]==0x01) { if(GPRS_SEND_BUFF[22] > 10) { device_Parm.GPRS_RESTARTTIME = GPRS_SEND_BUFF[22]; FM25V02_data_write(device_Parm.GPRS_RESTARTTIME,GPRS_RestartTime_Addr); #ifdef DEBUG_OUT sprintf(Debug, "GPRS_RESTARTTIME = %d \r\n" ,device_Parm.GPRS_RESTARTTIME); UartDebugFun(Debug); #endif } } if(GPRS_SEND_BUFF[23]==0x01) { if(GPRS_SEND_BUFF[24] ==0) { parameter_bil.cDataObtainType = PULSE_MODE; if(Settlement_Para.RS485SettlementFlag!=0) { Settlement_Para.RS485SettlementFlag = 0; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } } else if(GPRS_SEND_BUFF[24] ==1) { parameter_bil.cDataObtainType = RS485_AND_PULSE_MODE; if(Settlement_Para.RS485SettlementFlag==0) { Settlement_Para.RS485SettlementFlag = 1; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } } else if(GPRS_SEND_BUFF[24] ==2) { parameter_bil.cDataObtainType = RS485_MODE; if(Settlement_Para.RS485SettlementFlag==0) { Settlement_Para.RS485SettlementFlag = 1; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } system_alarm.alarm_Pulse_Broken_LCDFLAG = 0; } else { ack_flag = 5; } FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR); #ifdef DEBUG_OUT sprintf(Debug, "cDataObtainType = %d \r\n" , parameter_bil.cDataObtainType); UartDebugFun(Debug); #endif if((parameter_bil.cDataObtainType & RS485_MODE)!= RS485_MODE) { parmAccess.Vbt_Flag = 0; parmAccess.VT_permission = 0; parmAccess.VbT_permission = 0; parmAccess.Q_permission = 0; parmAccess.Qb_permission = 0; parmAccess.TEMP_permission = 0; parmAccess.PRES_permission = 0; } else { parmAccess.u16MeterTypeCode = 256*((u16)GPRS_SEND_BUFF[26])+GPRS_SEND_BUFF[25]; FM25V02_data_write_uint16(METER_TYPE_CODE_ADDR,parmAccess.u16MeterTypeCode); if((parameter_bil.cDataObtainType & PULSE_MODE)== PULSE_MODE) { if((parmAccess.u16MeterTypeCode==ASMODBUS)||(parmAccess.u16MeterTypeCode==AS100MODBUS)||(parmAccess.u16MeterTypeCode==SIARGO_MODBUS)) //ÅжÏÊÇ·ñ°®ÖªÁ÷Á¿¼Æ£¬°®ÖªÁ÷Á¿¼ÆÂö³åʶ±ð²ÉÓ÷½²¨ÉÏÉýÑØÊ¶±ð·½Ê½ { LOW_PULSE_Rising_config(); Low_Pluse_GPIO_Init(); } else { LOW_PULSE_config(); Low_Pluse_GPIO_Init(); } }else { LOW_PULSE_Rising_disconfig(); Low_Pluse_GPIO_sleep_Init(); } #ifdef DEBUG_OUT sprintf(Debug, "parmAccess.u16MeterTypeCode = %x \r\n" , parmAccess.u16MeterTypeCode); UartDebugFun(Debug); #endif if(GPRS_SEND_BUFF[27]<9) { parmAccess.u8BaudRateCode =GPRS_SEND_BUFF[27]; FM25V02_data_write(parmAccess.u8BaudRateCode ,BAUD_RATE_CODE_ADDR); } else { ack_flag = 5; } #ifdef DEBUG_OUT sprintf(Debug, "parmAccess.u8BaudRateCode = %d \r\n" , parmAccess.u8BaudRateCode); UartDebugFun(Debug); #endif if(GPRS_SEND_BUFF[28]<3) { parmAccess.u8RS485Parity =GPRS_SEND_BUFF[28]; FM25V02_data_write(parmAccess.u8RS485Parity ,RS485_PARITY_ADDR); } else { ack_flag = 5; } #ifdef DEBUG_OUT sprintf(Debug, "parmAccess.u8RS485Parity = %d \r\n" , parmAccess.u8RS485Parity); UartDebugFun(Debug); #endif if(GPRS_SEND_BUFF[29]<3) { parmAccess.u8EXPVoltageCode =GPRS_SEND_BUFF[29]; FM25V02_data_write(parmAccess.u8EXPVoltageCode ,EXP_VOLTAGE_CODE_ADDR); } else { ack_flag = 5; } #ifdef DEBUG_OUT sprintf(Debug, "parmAccess.u8EXPVoltageCode = %d \r\n" ,parmAccess.u8EXPVoltageCode); UartDebugFun(Debug); #endif } } if(GPRS_SEND_BUFF[30]==1) { if(GPRS_SEND_BUFF[31] >= 10 ) { parameter_bil.u8PulseWidth = GPRS_SEND_BUFF[31]; FM25V02_data_write(parameter_bil.u8PulseWidth,PULSE_WITDH_ADDR); } else { ack_flag = 6; } #ifdef DEBUG_OUT sprintf(Debug, "parameter_bil.u8PulseWidth = %d \r\n" ,parameter_bil.u8PulseWidth); UartDebugFun(Debug); #endif } if(GPRS_SEND_BUFF[32]==1) { if(GPRS_SEND_BUFF[33] < 0x10 ) { parmAccess.u8LowPowerAlarmLine = GPRS_SEND_BUFF[33]; FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR); } else { ack_flag = 7; } #ifdef DEBUG_OUT sprintf(Debug, "parmAccess.u8LowPowerAlarmLine = %d \r\n" ,parmAccess.u8LowPowerAlarmLine); UartDebugFun(Debug); #endif } if(GPRS_SEND_BUFF[34]==1) { if(GPRS_SEND_BUFF[35] < 2 ) { LCD_flag = GPRS_SEND_BUFF[35]; FM25V02_data_write(LCD_flag,LCD_FLAG_ADDR); } else { ack_flag = 8; } #ifdef DEBUG_OUT sprintf(Debug, "LCD_flag = %d \r\n" ,LCD_flag); UartDebugFun(Debug); #endif } if(GPRS_SEND_BUFF[36]!=0) { parmAccess.u8slaveAddress = GPRS_SEND_BUFF[36]; FM25V02_data_write(parmAccess.u8slaveAddress,SLAVE_ADDRESS_ADDR); #ifdef DEBUG_OUT sprintf(Debug, "parmAccess.u8slaveAddress = %d \r\n" ,parmAccess.u8slaveAddress); UartDebugFun(Debug); #endif } if((device_Parm.time1_flag == 0x00)&&(device_Parm.time2_flag == 0x00)&&(device_Parm.Typ==0x00)) { #ifdef DEBUG_OUT UartDebugFun("time12_flag Typ error\r\n"); #endif if(device_Parm.Tyf == 0x04) { device_Parm.Typ = 0x84; }else if(device_Parm.Tyf == 0x05) { device_Parm.Typ = 0x85; }else if(device_Parm.Tyf == 0x06) { device_Parm.Typ = 0x86; } device_Parm.Tp = device_Parm.Tf ; } // if((device_Parm.time1_flag == 0x80)||(device_Parm.time2_flag == 0x80)) // { // device_Parm.Typ=0x00; //???????????????? // } // if((device_Parm.time1_flag == 0x80)&&(device_Parm.time2_flag == 0x80)) //??????????? ??2??????1 // { // if(device_Parm.sendTiming_hour > device_Parm.sendTiming_hour2) // { // device_Parm.sendTiming_hour = GPRS_SEND_BUFF[139]&0x7f; // device_Parm.sendTiming_min = GPRS_SEND_BUFF[140]; // device_Parm.sendTiming_hour2 = GPRS_SEND_BUFF[136]&0x7f; // device_Parm.sendTiming_min2 = GPRS_SEND_BUFF[137]; // } // else if((device_Parm.sendTiming_hour == device_Parm.sendTiming_hour2) &&(device_Parm.sendTiming_min > device_Parm.sendTiming_min2)) // { // device_Parm.sendTiming_hour = GPRS_SEND_BUFF[139]&0x7f; // device_Parm.sendTiming_min = GPRS_SEND_BUFF[140]; // device_Parm.sendTiming_hour2 = GPRS_SEND_BUFF[136]&0x7f; // device_Parm.sendTiming_min2 = GPRS_SEND_BUFF[137]; // } // else if((device_Parm.sendTiming_hour == device_Parm.sendTiming_hour2) &&(device_Parm.sendTiming_min == device_Parm.sendTiming_min2)) // { // device_Parm.time2_flag = 0x00; //??????,??1 // } // } Get_Sample_Send_Interval(); FM25V02_data_write(device_Parm.Tyf,Tyf_Addr); FM25V02_data_write(device_Parm.Tf,Ty_Addr); FM25V02_data_write(device_Parm.Typ,Typ_Addr); FM25V02_data_write(device_Parm.Tp,Tp_Addr); FM25V02_data_write(device_Parm.time1_flag,Time1_Flag_Addr); FM25V02_data_write(device_Parm.sendTiming_hour,SendTiming_Hour_Addr); FM25V02_data_write(device_Parm.sendTiming_min,SendTiming_Min_Addr); FM25V02_data_write(device_Parm.time2_flag,Time2_Flag_Addr); FM25V02_data_write(device_Parm.sendTiming_hour2,SendTiming_Hour2_Addr); FM25V02_data_write(device_Parm.sendTiming_min2,SendTiming_Min2_Addr); /* if(device_Parm.Tyf==0x06) { if(device_Parm.Tf >=2) { device_Parm.time1_flag = 0x00; device_Parm.time2_flag = 0x00; device_Parm.Typ = 0X86; //??????? if(device_Parm.Tp 0)) { parameter_bil.fPulseCoefficient = fPulseCoefficient; FM25V02_data_write_float(PULSE_COE_ADDR,parameter_bil.fPulseCoefficient); } else { ack_flag = 1; } #ifdef DEBUG_OUT sprintf(Debug, "fPulseCoefficient = %.3f \r\n" , parameter_bil.fPulseCoefficient); UartDebugFun(Debug); #endif //} } else if(GPRS_SEND_BUFF[0]==0x00) { } else { ack_flag = 1; } if(GPRS_SEND_BUFF[6]==0x01) { if((GPRS_SEND_BUFF[7]==1)||(GPRS_SEND_BUFF[7]==2)) { parameter_bil.cBillingType = GPRS_SEND_BUFF[7]; FM25V02_data_write(parameter_bil.cBillingType,BILLING_TYPE_ADDR); } else { ack_flag = 2; } (*(uint8_t *)(&fSingleBillingFee)) = GPRS_SEND_BUFF[8]; (*((uint8_t *)(&fSingleBillingFee) + 1)) = GPRS_SEND_BUFF[9]; (*((uint8_t *)(&fSingleBillingFee) + 2)) = GPRS_SEND_BUFF[10]; (*((uint8_t *)(&fSingleBillingFee) + 3)) = GPRS_SEND_BUFF[11]; if((fSingleBillingFee>=0)&&(fSingleBillingFee<100.0)) { parameter_bil.fSingleBillingFee = fSingleBillingFee; FM25V02_data_write_float(SINGLE_BILLING_FEE_ADDR,parameter_bil.fSingleBillingFee); } else { ack_flag = 2; } (*(uint8_t *)(¶meter_bil.fStepBilling_First)) = GPRS_SEND_BUFF[12]; (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 1)) = GPRS_SEND_BUFF[13]; (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 2)) = GPRS_SEND_BUFF[14]; (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 3)) = GPRS_SEND_BUFF[15]; FM25V02_data_write_float(STEP_BILLING_FIRST_ADDR,parameter_bil.fStepBilling_First); (*(uint8_t *)(¶meter_bil.fStepBillingFee_First)) = GPRS_SEND_BUFF[16]; (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 1)) = GPRS_SEND_BUFF[17]; (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 2)) = GPRS_SEND_BUFF[18]; (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 3)) = GPRS_SEND_BUFF[19]; FM25V02_data_write_float(STEP_BILLING_FEE_FIRST_ADDR,parameter_bil.fStepBillingFee_First); (*(uint8_t *)(¶meter_bil.fStepBilling_Second)) = GPRS_SEND_BUFF[20]; (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 1)) = GPRS_SEND_BUFF[21]; (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 2)) = GPRS_SEND_BUFF[22]; (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 3)) = GPRS_SEND_BUFF[23]; FM25V02_data_write_float(STEP_BILLING_SECOND_ADDR,parameter_bil.fStepBilling_Second); (*(uint8_t *)(¶meter_bil.fStepBillingFee_Second)) = GPRS_SEND_BUFF[24]; (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 1)) = GPRS_SEND_BUFF[25]; (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 2)) = GPRS_SEND_BUFF[26]; (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 3)) = GPRS_SEND_BUFF[27]; FM25V02_data_write_float(STEP_BILLING_FEE_SECOND_ADDR,parameter_bil.fStepBillingFee_Second); (*(uint8_t *)(¶meter_bil.fStepBilling_Third)) = GPRS_SEND_BUFF[28]; (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 1)) = GPRS_SEND_BUFF[29]; (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 2)) = GPRS_SEND_BUFF[30]; (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 3)) = GPRS_SEND_BUFF[31]; FM25V02_data_write_float(STEP_BILLING_THIRD_ADDR,parameter_bil.fStepBilling_Third); (*(uint8_t *)(¶meter_bil.fStepBillingFee_Third)) = GPRS_SEND_BUFF[32]; (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 1)) = GPRS_SEND_BUFF[33]; (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 2)) = GPRS_SEND_BUFF[34]; (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 3)) = GPRS_SEND_BUFF[35]; FM25V02_data_write_float(STEP_BILLING_FEE_THIRD_ADDR,parameter_bil.fStepBillingFee_Third); #ifdef DEBUG_OUT sprintf(Debug, "cBillingType = %d \r\n" , parameter_bil.cBillingType); UartDebugFun(Debug); sprintf(Debug, "fSingleBillingFee = %.3f \r\n" , parameter_bil.fSingleBillingFee); UartDebugFun(Debug); #endif } else if(GPRS_SEND_BUFF[6]==0x00) { } else { ack_flag = 2; } if(GPRS_SEND_BUFF[36]==0x01) { if(GPRS_SEND_BUFF[37]==0x00) { // Settlement_Para.RS485SettlementFlag = 0; // FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); // ClearCardinalFlag(); }else if(GPRS_SEND_BUFF[37]==0x01) { // if(Settlement_Para.RS485SettlementFlag==0) // { // Settlement_Para.RS485SettlementFlag = 1; // FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); // ClearCardinalFlag(); // } }else if(GPRS_SEND_BUFF[37]==0x02) { // if(Settlement_Para.RS485SettlementFlag==0) // { // Settlement_Para.RS485SettlementFlag = 1; // FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); // ClearCardinalFlag(); // } } else { ack_flag = 3; } #ifdef DEBUG_OUT sprintf(Debug, "Settlement_Para.RS485SettlementFlag = %d \r\n" , Settlement_Para.RS485SettlementFlag); UartDebugFun(Debug); #endif } else if(GPRS_SEND_BUFF[36]==0x00) //ÎÞÐÞ¸Ä { } else { ack_flag = 3; } if(GPRS_SEND_BUFF[38]==0x01) { if(GPRS_SEND_BUFF[39]==0x01) { ClearCardinalFlag(); #ifdef DEBUG_OUT UartDebugFun("GPRS ClearCardinal\r\n "); #endif } else { } } else if(GPRS_SEND_BUFF[38]==0x00) { } else { ack_flag = 3; } if(GPRS_SEND_BUFF[41]==0x01) { parameter_bil.iBalanceInsufAlarmAmount = (uint16_t)GPRS_SEND_BUFF[43] * 256 + (uint16_t)GPRS_SEND_BUFF[42]; FM25V02_data_write_uint16(BALANCE_INSUF_ALARM_AMOUNT_ADDR,parameter_bil.iBalanceInsufAlarmAmount); #ifdef DEBUG_OUT sprintf(Debug, "iBalanceInsufAlarmAmount = %d \r\n" , parameter_bil.iBalanceInsufAlarmAmount); UartDebugFun(Debug); #endif } else if(GPRS_SEND_BUFF[41]==0x00) { } else { ack_flag = 4; } if(GPRS_SEND_BUFF[44]==0x01) { (*(uint8_t *)(¶meter_bil.fCredits)) = GPRS_SEND_BUFF[45]; (*((uint8_t *)(¶meter_bil.fCredits) + 1)) = GPRS_SEND_BUFF[46]; (*((uint8_t *)(¶meter_bil.fCredits) + 2)) = GPRS_SEND_BUFF[47]; (*((uint8_t *)(¶meter_bil.fCredits) + 3)) = GPRS_SEND_BUFF[48]; FM25V02_data_write_float(CREDITS_ADDR,parameter_bil.fCredits); #ifdef DEBUG_OUT sprintf(Debug, "fCredits = %.3f \r\n" ,parameter_bil.fCredits); UartDebugFun(Debug); #endif } else if(GPRS_SEND_BUFF[44]==0x00) { } else { ack_flag = 5; } if(Settlement_Para.fBalance<=parameter_bil.iBalanceInsufAlarmAmount) { system_alarm.alarm_Balance_Small_LCDFLAG = 0x01; } else { system_alarm.alarm_Balance_Small_LCDFLAG = 0x00; } /*Record the current parameters*/ BillRecord(); } #ifdef DEBUG_OUT sprintf(Debug, "ack_flag = %d \r\n" , ack_flag); UartDebugFun(Debug); #endif return ack_flag; // if(ack_flag == 0) // { // return 0; // } // else // { // return 1; // } } void parameters_2buff(uint8_t dev_or_bil ,uint8_t key) { uint8_t index_i; if(dev_or_bil == 0) { for(index_i=0;index_i<100;index_i++) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i] = 0x00 ; } for(index_i=0;index_i<8;index_i++) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT + index_i] = gprs_protocol_header.DeviceAddress[index_i] ; //???? } GPRS_SEND_BUFF[FIRST_DATA_SHIFT+8] = device_Parm.Tyf; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+9] = device_Parm.Tf; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+10] = device_Parm.Typ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+11] = device_Parm.Tp; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+12] = (device_Parm.sendTiming_hour)|device_Parm.time1_flag; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+13] = device_Parm.sendTiming_min; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+14] = (device_Parm.sendTiming_hour2)|device_Parm.time2_flag; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+15] = device_Parm.sendTiming_min2; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+16] = device_Parm.GPRS_RESTARTTIME; if(parameter_bil.cDataObtainType == PULSE_MODE) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+17] = 0; } else if(parameter_bil.cDataObtainType == RS485_AND_PULSE_MODE) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+17] = 1; } else if(parameter_bil.cDataObtainType == RS485_MODE) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+17] = 2; } else { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+17] = 0; } GPRS_SEND_BUFF[FIRST_DATA_SHIFT+18] = parmAccess.u16MeterTypeCode & 0xff; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+19] = (parmAccess.u16MeterTypeCode>>8) & 0xff; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+20] = parmAccess.u8BaudRateCode; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+21] = parmAccess.u8RS485Parity; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+22] = parmAccess.u8EXPVoltageCode; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+23] = parameter_bil.u8PulseWidth; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+24] = parmAccess.u8LowPowerAlarmLine; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+25] = LCD_flag; GPRS_SEND_BUFF[FIRST_DATA_SHIFT+26] = parmAccess.u8slaveAddress; for(index_i=0;index_i<11;index_i++) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+27+index_i] = 0; } if((key&0x80) ==0x00) //??? { } else { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+38] = 0x80;// for(index_i=0;index_i<9;index_i++) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+39] = 0x00; } for(index_i=0;index_i<3;index_i++) { AES128_ECB_encrypt(&GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i*16], KVer_AES_128, &GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i*16]); } } } else if(dev_or_bil == 0x01) { for(index_i=0;index_i<100;index_i++) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i] = 0x00 ; } GPRS_SEND_BUFF[FIRST_DATA_SHIFT] = 0 ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 4] = (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 3)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 3] = (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 2)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 2] = (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 1)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 1] = (*(uint8_t *)(¶meter_bil.fPulseCoefficient)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 5] = parameter_bil.cBillingType ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 9] = (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 3)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 8] = (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 2)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 7] = (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 1)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 6] = (*(uint8_t *)(¶meter_bil.fSingleBillingFee)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 13] = (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 3)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 12] = (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 2)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 11] = (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 1)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 10] = (*(uint8_t *)(¶meter_bil.fStepBilling_First)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 17] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 3)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 16] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 2)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 15] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 1)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 14] = (*(uint8_t *)(¶meter_bil.fStepBillingFee_First)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 21] = (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 3)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 20] = (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 2)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 19] = (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 1)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 18] = (*(uint8_t *)(¶meter_bil.fStepBilling_Second)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 25] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 3)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 24] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 2)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 23] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 1)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 22] = (*(uint8_t *)(¶meter_bil.fStepBillingFee_Second)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 29] = (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 3)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 28] = (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 2)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 27] = (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 1)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 26] = (*(uint8_t *)(¶meter_bil.fStepBilling_Third)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 33] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 3)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 32] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 2)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 31] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 1)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 30] = (*(uint8_t *)(¶meter_bil.fStepBillingFee_Third)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 34] = (uint8_t)(parameter_bil.iBalanceInsufAlarmAmount); GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 35] = (uint8_t)(parameter_bil.iBalanceInsufAlarmAmount >>8); GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 39] = (*((uint8_t *)(¶meter_bil.fCredits) + 3)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 38] = (*((uint8_t *)(¶meter_bil.fCredits) + 2)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 37] = (*((uint8_t *)(¶meter_bil.fCredits) + 1)) ; GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 36] = (*(uint8_t *)(¶meter_bil.fCredits)) ; if(Settlement_Para.RS485SettlementFlag ==0) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 40] = 0x00; }else if(Settlement_Para.RS485SettlementFlag ==1) { if((parameter_bil.cDataObtainType & PULSE_MODE)== PULSE_MODE) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 40] = 0x02; }else { GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 40] = 0x01; } } else { GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 40] = 0x00; } for(index_i=0;index_i<15;index_i++) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+41+index_i] = 0; } if((key&0x80) ==0x00) //??? { } else { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+56] = 0x80;// for(index_i=0;index_i<7;index_i++) { GPRS_SEND_BUFF[FIRST_DATA_SHIFT+57] = 0x00; } for(index_i=0;index_i<4;index_i++) { AES128_ECB_encrypt(&GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i*16], KVer_AES_128, &GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i*16]); } } } } void SendDataToSTM32() { int i_index; while(RESET == UARTx_ISR_TXSE_Chk(UART3)); UARTx_TXBUF_Write(UART3, 0x67); while(RESET == UARTx_ISR_TXSE_Chk(UART3)); UARTx_TXBUF_Write(UART3, (uint8_t)(CS_addr+2)); while(RESET == UARTx_ISR_TXSE_Chk(UART3)); UARTx_TXBUF_Write(UART3, (uint8_t)((CS_addr+2) >> 8)); for(i_index = 0;i_index < CS_addr+2;i_index ++) { while(RESET == UARTx_ISR_TXSE_Chk(UART3)); UARTx_TXBUF_Write(UART3, GPRS_SEND_BUFF[i_index]); } while(RESET == UARTx_ISR_TXSE_Chk(UART3)); // //VariaDlg.send_finish_ok = 1; } void calculate_Sample_Time(uint16_t NOW_year,uint8_t NOW_month,uint8_t NOW_day) //¼ÆËãÏ´βɼ¯Êý¾ÝµÄʱ¼ä { // uint8_t RealTime_D,RealTime_H,RealTime_M; // uint8_t realTime_D,realTime_H,realTime_M; //Öмä·ÇBCDʱ¼ä uint8_t real_last_Sample_D,real_last_Sample_H,real_last_Sample_M; //Éϴβɼ¯µÄ·ÇBCDʱ¼ä real_last_Sample_D = ((Last_Sample_D&0x00FF)>>4)*10+(Last_Sample_D&0x000F); real_last_Sample_H = ((Last_Sample_H&0x00FF)>>4)*10+(Last_Sample_H&0x000F); // real_last_Sample_M = ((Last_Sample_M&0x00FF)>>4)*10+(Last_Sample_M&0x000F); // RealTime_H = ((device_Parm.sendTiming_hour)>>4)*10 + (device_Parm.sendTiming_hour&0x0F); // RealTime_M = ((device_Parm.sendTiming_min)>>4)*10 + (device_Parm.sendTiming_min&0x0F); if(device_Parm.Tyf == 0x04) //·ÖÖÓ { realTime_H = real_last_Sample_H + (real_last_Sample_M + device_Parm.Tf)/60; realTime_D = real_last_Sample_D; //Next_real_Sample_D = ((NOW_day&0x00FF)>>4)*10+(NOW_day&0x000F); while(realTime_H >= 24) { //Next_real_Sample_D = Next_real_Sample_D + 1; realTime_D = realTime_D + 1; realTime_H = realTime_H - 24; } realTime_M = real_last_Sample_M + device_Parm.Tf; while(realTime_M >= 60) realTime_M -= 60; //Next_real_Sample_D = realTime_D; Next_real_Sample_H = realTime_H; Next_real_Sample_M = realTime_M; }else if(device_Parm.Tyf == 0x05)//Сʱ { realTime_H = real_last_Sample_H + device_Parm.Tf; //Next_real_Sample_D = ((NOW_day&0x00FF)>>4)*10+(NOW_day&0x000F); realTime_D = real_last_Sample_D; while(realTime_H >= 24) { //Next_real_Sample_D = Next_real_Sample_D + 1; realTime_D = realTime_D + 1; realTime_H = realTime_H - 24; } Next_real_Sample_H = realTime_H; Next_real_Sample_M = 0; }else if(device_Parm.Tyf == 0x06)//Ìì { realTime_D = real_last_Sample_D + device_Parm.Tf; Next_real_Sample_H = 0; Next_real_Sample_M = 0; } if((NOW_month== 1)||(NOW_month== 3)||(NOW_month== 5)||(NOW_month== 7)||(NOW_month== 8)||(NOW_month== 10)||(NOW_month== 12)) { while(realTime_D > 31) { realTime_D = realTime_D - 31; } } else if((NOW_month== 4)||(NOW_month== 6)||(NOW_month== 9)||(NOW_month== 11)) { while(realTime_D > 30) { realTime_D = realTime_D - 30; } } else if(NOW_month== 2) { if((NOW_year % 100) == 0 ) { if((NOW_year % 400) == 0 ) { while(realTime_D > 29) { realTime_D = realTime_D - 29; } } else { while(realTime_D > 28) { realTime_D = realTime_D - 28; } } } else { if((NOW_year % 4) == 0 ) { while(realTime_D > 29) { realTime_D = realTime_D - 29; } } else { while(realTime_D > 28) { realTime_D = realTime_D - 28; } } } } Next_real_Sample_D = realTime_D; Next_Sample_D = 16*(Next_real_Sample_D/10)+Next_real_Sample_D%10; Next_Sample_H = 16*(Next_real_Sample_H/10)+Next_real_Sample_H%10; Next_Sample_M = 16*(Next_real_Sample_M/10)+Next_real_Sample_M%10; #ifdef DEBUG_OUT sprintf(Debug, "Next_real_Sample =%d:%d:%d\r\n" , Next_real_Sample_D,Next_real_Sample_H,Next_real_Sample_M); UartDebugFun(Debug); #endif } void calculate_Send_Time(uint16_t NOW_year,uint8_t NOW_month,uint8_t NOW_day) //¼ÆËã·¢ËÍÊý¾ÝµÄʱ¼ä { uint8_t real_last_Send_D,real_last_Send_H,real_last_Send_M; //Éϴη¢ËÍʱ¼ä·ÇBCD real_last_Send_D = ((Last_Send_D&0x00FF)>>4)*10+(Last_Send_D&0x000F); real_last_Send_H = ((Last_Send_H&0x00FF)>>4)*10+(Last_Send_H&0x000F); real_last_Send_M = ((Last_Send_M&0x00FF)>>4)*10+(Last_Send_M&0x000F); if(device_Parm.Typ == 0x84) { device_Parm.real_sendTiming_hour = real_last_Send_H + (real_last_Send_M + device_Parm.Tp)/60; device_Parm.real_sendTiming_day = real_last_Send_D; while(device_Parm.real_sendTiming_hour >= 24) { device_Parm.real_sendTiming_day = real_last_Send_D + 1; device_Parm.real_sendTiming_hour = device_Parm.real_sendTiming_hour - 24; } device_Parm.real_sendTiming_min = real_last_Send_M + device_Parm.Tp; while(device_Parm.real_sendTiming_min >= 60) device_Parm.real_sendTiming_min -= 60; } else if(device_Parm.Typ == 0x85) { device_Parm.real_sendTiming_hour = real_last_Send_H + device_Parm.Tp; device_Parm.real_sendTiming_day = real_last_Send_D; while(device_Parm.real_sendTiming_hour >= 24) { device_Parm.real_sendTiming_day = real_last_Send_D + 1; device_Parm.real_sendTiming_hour = device_Parm.real_sendTiming_hour - 24; } device_Parm.real_sendTiming_min = 0; } else if(device_Parm.Typ == 0x86) { device_Parm.real_sendTiming_day = real_last_Send_D + device_Parm.Tp; device_Parm.real_sendTiming_hour = 0; device_Parm.real_sendTiming_min = 0; } if((NOW_month== 1)||(NOW_month== 3)||(NOW_month== 5)||(NOW_month== 7)||(NOW_month== 8)||(NOW_month== 10)||(NOW_month== 12)) { while(device_Parm.real_sendTiming_day > 31) { device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 31; } } else if((NOW_month== 4)||(NOW_month== 6)||(NOW_month== 9)||(NOW_month== 11)) { while(device_Parm.real_sendTiming_day > 30) { device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 30; } } else if(NOW_month== 2) { if((NOW_year % 100) == 0 ) { if((NOW_year % 400) == 0 ) { while(device_Parm.real_sendTiming_day > 29) { device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 29; } } else { while(device_Parm.real_sendTiming_day > 28) { device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 28; } } } else { if((NOW_year % 4) == 0 ) { while(device_Parm.real_sendTiming_day > 29) { device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 29; } } else { while(device_Parm.real_sendTiming_day > 28) { device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 28; } } } } #ifdef DEBUG_OUT sprintf(Debug, "jiange real_sendTiming =%d:%d:%d\r\n" , device_Parm.real_sendTiming_day,device_Parm.real_sendTiming_hour,device_Parm.real_sendTiming_min); UartDebugFun(Debug); #endif } void compara_Send_Sample(uint8_t NOW_year,uint8_t NOW_month,uint8_t NOW_day ,uint8_t NOW_hour,uint8_t NOW_min) //±È½ÏÏ´βɼ¯¸ü½ü»¹ÊÇ·¢Ë͸ü½ü²¢ÉèÖÃÄÖÖÓ { // uint8_t real_last_Sample_D,real_last_Sample_H,real_last_Sample_M; uint16_t Send_interval = 0; uint16_t Sample_interval = 0; uint8_t RealTime_D,RealTime_H,RealTime_M; //µ±Ç°Ê±¼ä·ÇBCD uint8_t RTCADAY,RTCAHOUR,RTCAMIN; RealTime_D = ((NOW_day&0x00FF)>>4)*10+(NOW_day&0x000F); RealTime_H = ((NOW_hour&0x00FF)>>4)*10+(NOW_hour&0x000F); RealTime_M = ((NOW_min&0x00FF)>>4)*10+(NOW_min&0x000F); if((device_Parm.time1_flag == 0x80)&&(device_Parm.time2_flag == 0x80)) { if(NOW_hour < device_Parm.sendTiming_hour) { device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour; device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min; } else if((NOW_hour == device_Parm.sendTiming_hour)&&(NOW_min < device_Parm.sendTiming_min )) { device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour; device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min; } else if(NOW_hour > device_Parm.sendTiming_hour2) { device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour; device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min; } else if((NOW_hour == device_Parm.sendTiming_hour2)&&(NOW_min >= device_Parm.sendTiming_min2 )) { device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour; device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min; } else { device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour2; device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min2; } } else if(device_Parm.time1_flag == 0x80) { device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour; device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min; } else if(device_Parm.time2_flag == 0x80) { device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour2; device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min2; } else //??????? ??????? { } if((device_Parm.time1_flag == 0x80)||(device_Parm.time2_flag == 0x80)) //¶¨Ê±Éϸæ±È½Ï { device_Parm.real_sendTiming_hour = ((device_Parm.RTC_sendTiming_hour&0x00FF)>>4)*10+(device_Parm.RTC_sendTiming_hour&0x000F); device_Parm.real_sendTiming_min = ((device_Parm.RTC_sendTiming_min&0x00FF)>>4)*10+(device_Parm.RTC_sendTiming_min&0x000F); if((device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min)<=(RealTime_H * 60 + RealTime_M) ) { Send_interval = (device_Parm.real_sendTiming_hour + 24 ) * 60 + device_Parm.real_sendTiming_min - (RealTime_H * 60 + RealTime_M); } else { Send_interval = device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_H * 60 + RealTime_M); } if((Next_real_Sample_H *60 + Next_real_Sample_M) <= (RealTime_H * 60 + RealTime_M)) { Sample_interval = (Next_real_Sample_H+24) *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M); } else { Sample_interval = Next_real_Sample_H *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M); } if(Send_interval < Sample_interval) //Éϸæ¸ü½ü£¬Ï´ÎÄÖÖÓΪÉϸæÄÖÖÓ { Sending_flag = 0; } else if(Send_interval == Sample_interval) //ÉϸæºÍ²É¼¯Ê±¼äÒ»Ò»Ö { Sending_flag = 2; } else //(Send_interval > Sample_interval) //²É¼¯¸ü½ü£¬Ï´ÎÄÖÖÓʱ¼äΪ²É¼¯ { Sending_flag = 1; } #ifdef DEBUG_OUT sprintf(Debug, "dingshi real_sendTiming =%d:%d:%d\r\n" , device_Parm.real_sendTiming_day,device_Parm.real_sendTiming_hour,device_Parm.real_sendTiming_min); UartDebugFun(Debug); #endif #ifdef DEBUG_OUT sprintf(Debug, "dingshi Sending_flag = %d ,%x:%x\r\n" , Sending_flag,RTCAHOUR&0x7f,RTCAMIN&0x7f); UartDebugFun(Debug); #endif } else { if((device_Parm.Typ == 0x84)||(device_Parm.Typ == 0x85)) { if((device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min)<=(RealTime_H * 60 + RealTime_M)) { Send_interval = (device_Parm.real_sendTiming_hour + 24 ) * 60 + device_Parm.real_sendTiming_min - (RealTime_H * 60 + RealTime_M); } else { Send_interval = device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_H * 60 + RealTime_M); } if((Next_real_Sample_H *60 + Next_real_Sample_M) <= (RealTime_H * 60 + RealTime_M)) { Sample_interval = (Next_real_Sample_H+24) *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M); } else { Sample_interval = Next_real_Sample_H *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M); } #ifdef DEBUG_OUT sprintf(Debug, "send:Sample = %d:%d\r\n" , Send_interval,Sample_interval); UartDebugFun(Debug); #endif if(Send_interval < Sample_interval) { Sending_flag = 0; } else if(Send_interval == Sample_interval) { Sending_flag = 2; } else //(Send_interval > Sample_interval) { Sending_flag = 1; } device_Parm.RTC_sendTiming_day = 16 * (device_Parm.real_sendTiming_day / 10) + device_Parm.real_sendTiming_day % 10; device_Parm.RTC_sendTiming_hour = 16 * (device_Parm.real_sendTiming_hour / 10) + device_Parm.real_sendTiming_hour % 10; device_Parm.RTC_sendTiming_min = 16 * (device_Parm.real_sendTiming_min / 10) + device_Parm.real_sendTiming_min % 10; #ifdef DEBUG_OUT sprintf(Debug, "jiange8485 Sending_flag = %d ,%x:%x\r\n" , Sending_flag,device_Parm.RTC_sendTiming_hour&0x7f,device_Parm.RTC_sendTiming_min&0x7f); UartDebugFun(Debug); #endif } /* else if(device_Parm.Typ == 0x85) { }*/ else if(device_Parm.Typ == 0x86) { if((device_Parm.Tyf == 0x04) || (device_Parm.Tyf == 0x05)) { if(device_Parm.real_sendTiming_day <= RealTime_D) { if((NOW_month== 1)||(NOW_month== 3)||(NOW_month== 5)||(NOW_month== 7)||(NOW_month== 8)||(NOW_month== 10)||(NOW_month== 12)) { Send_interval = (device_Parm.real_sendTiming_day+31) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M); } else if((NOW_month== 4)||(NOW_month== 6)||(NOW_month== 9)||(NOW_month== 11)) { Send_interval = (device_Parm.real_sendTiming_day+30) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M); } else if(NOW_month== 2) { if((NOW_year % 100) == 0 ) { if((NOW_year % 400) == 0 ) { Send_interval = (device_Parm.real_sendTiming_day+29) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M); } else { Send_interval = (device_Parm.real_sendTiming_day+28) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M); } } else { if((NOW_year % 4) == 0 ) { Send_interval = (device_Parm.real_sendTiming_day+29) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M); } else { Send_interval = (device_Parm.real_sendTiming_day+28) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M); } } } } else { Send_interval = device_Parm.real_sendTiming_day *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M); } if((Next_real_Sample_H *60 + Next_real_Sample_M) <= (RealTime_H * 60 + RealTime_M)) { Sample_interval = (Next_real_Sample_H+24) *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M); } else { Sample_interval = Next_real_Sample_H *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M); } #ifdef DEBUG_OUT sprintf(Debug, "send:Sample = %d:%d\r\n" , Send_interval,Sample_interval); UartDebugFun(Debug); #endif if(Send_interval < Sample_interval) { Sending_flag = 0; } else if(Send_interval == Sample_interval) { Sending_flag = 2; } else //(Send_interval > Sample_interval) { Sending_flag = 1; } device_Parm.RTC_sendTiming_day = 16 * (device_Parm.real_sendTiming_day / 10) + device_Parm.real_sendTiming_day % 10; device_Parm.RTC_sendTiming_hour = 16 * (device_Parm.real_sendTiming_hour / 10) + device_Parm.real_sendTiming_hour % 10; device_Parm.RTC_sendTiming_min = 16 * (device_Parm.real_sendTiming_min / 10) + device_Parm.real_sendTiming_min % 10; #ifdef DEBUG_OUT sprintf(Debug, "jiange860405 Sending_flag = %d ,%x :%x:%x\r\n" , Sending_flag,device_Parm.RTC_sendTiming_day&0x7f,device_Parm.RTC_sendTiming_hour&0x7f,device_Parm.RTC_sendTiming_min&0x7f); UartDebugFun(Debug); #endif } else //(device_Parm.Tyf == 0x06) { //ÌìÊý»¹Ô­£¬±ÈÈç½ñÌì31ºÅ£¬Ï´ÎÉϸæ1ºÅ£¬ÐèÒª°ÑÌìÊý±ä³É32ºÅ if(device_Parm.real_sendTiming_day < RealTime_D) { if((NOW_month== 1)||(NOW_month== 3)||(NOW_month== 5)||(NOW_month== 7)||(NOW_month== 8)||(NOW_month== 10)||(NOW_month== 12)) { Send_interval = device_Parm.real_sendTiming_day+31 - RealTime_D ; } else if((NOW_month== 4)||(NOW_month== 6)||(NOW_month== 9)||(NOW_month== 11)) { Send_interval = device_Parm.real_sendTiming_day+30 - RealTime_D ; } else if(NOW_month== 2) { if((NOW_year % 100) == 0 ) { if((NOW_year % 400) == 0 ) { Send_interval = device_Parm.real_sendTiming_day+29 - RealTime_D ; } else { Send_interval = device_Parm.real_sendTiming_day+28 - RealTime_D ; } } else { if((NOW_year % 4) == 0 ) { Send_interval = device_Parm.real_sendTiming_day+29 - RealTime_D ; } else { Send_interval = device_Parm.real_sendTiming_day+28 - RealTime_D ; } } } } else { Send_interval = device_Parm.real_sendTiming_day - RealTime_D ; } if(Next_real_Sample_D <= RealTime_D) { if((NOW_month== 1)||(NOW_month== 3)||(NOW_month== 5)||(NOW_month== 7)||(NOW_month== 8)||(NOW_month== 10)||(NOW_month== 12)) { Sample_interval = Next_real_Sample_D+31 - RealTime_D ; } else if((NOW_month== 4)||(NOW_month== 6)||(NOW_month== 9)||(NOW_month== 11)) { Sample_interval = Next_real_Sample_D+30 - RealTime_D ; } else if(NOW_month== 2) { if((NOW_year % 100) == 0 ) { if((NOW_year % 400) == 0 ) { Sample_interval = Next_real_Sample_D+29 - RealTime_D ; } else { Sample_interval = Next_real_Sample_D+28 - RealTime_D ; } } else { if((NOW_year % 4) == 0 ) { Sample_interval = Next_real_Sample_D + 29 - RealTime_D ; } else { Sample_interval = Next_real_Sample_D + 28 - RealTime_D ; } } } //Sample_interval = (Next_real_Sample_D+24) *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M); } else { Sample_interval = Next_real_Sample_D - RealTime_D ; } #ifdef DEBUG_OUT sprintf(Debug, "send:Sample = %d:%d\r\n" , Send_interval,Sample_interval); UartDebugFun(Debug); #endif if(Send_interval < Sample_interval) { Sending_flag = 0; } else if(Send_interval == Sample_interval) { Sending_flag = 2; } else //(Send_interval > Sample_interval) { Sending_flag = 1; } device_Parm.RTC_sendTiming_day = 16 * (device_Parm.real_sendTiming_day / 10) + device_Parm.real_sendTiming_day % 10; device_Parm.RTC_sendTiming_hour = 0x00; device_Parm.RTC_sendTiming_min = 0x00; #ifdef DEBUG_OUT sprintf(Debug, "jiange8606 Sending_flag = %d ,%x :%x:%x\r\n" , Sending_flag,device_Parm.RTC_sendTiming_day&0x7f,device_Parm.RTC_sendTiming_hour&0x7f,device_Parm.RTC_sendTiming_min&0x7f); UartDebugFun(Debug); #endif } } else { } } } void Variable_AllInit() { uint16_t NOW_year; uint8_t NOW_month,NOW_day,NOW_hour,NOW_min; /*************¶Á±í²ÎÊý**************/ k_index = 0; //Êý¾Ý¶ÁÈ¡µÄʱºò¼ÆÊýÓà ddr_index_2 = 0; RegisterInit(); //¹Ì¼þÈí¼þ°æ±¾µÈÐÅÏ¢ /***********¶ÁÈ¡´æ´¢µÄÖµ*****************/ /*******************·§ÃÅÏà¹Ø******************/ OpenValveAuthorizeFLAG = FM25V02_data_read(OPEN_VALVE_AUTHORIZE_FLAG_ADDR); if(OpenValveAuthorizeFLAG==0x01) { }else if(((OpenValveAuthorizeFLAG&0x0f)==0x01)&&((OpenValveAuthorizeFLAG>>4)<9)&&((OpenValveAuthorizeFLAG>>4)>0)) //Ç¿ÖÆ¿ª·§£¬Ò쳣״̬ÏÂÒ²²»¹Ø·§ { } else { OpenValveAuthorizeFLAG = 0x00; FM25V02_data_write(OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR); } OpenValveAuthorizeTimeCnt = FM25V02_data_read_uint32(OPEN_VALVE_AUTHORIZE_TIME_CNT_ADDRA); if(OpenValveAuthorizeTimeCnt>604800) { OpenValveAuthorizeTimeCnt = 0; FM25V02_data_write_uint32(OPEN_VALVE_AUTHORIZE_TIME_CNT_ADDRA, OpenValveAuthorizeTimeCnt) ; } ValveOpenTimes = FM25V02_data_read_uint16(VALVE_OPEN_TIMES_ADDR); if(ValveOpenTimes>65530) { ValveOpenTimes = 0; FM25V02_data_write_uint16(VALVE_OPEN_TIMES_ADDR,ValveOpenTimes); } ValveCloseTimes = FM25V02_data_read_uint16(VALVE_CLOSE_TIMES_ADDR); if(ValveCloseTimes>65530) { ValveCloseTimes = 0; FM25V02_data_write_uint16(VALVE_CLOSE_TIMES_ADDR,ValveCloseTimes); } /***********¿ª»§×´Ì¬*****************/ device_Parm.AccountStatus = FM25V02_data_read(ACCOUNT_STATUS_ADDR); device_Parm.AccountStatus = FM25V02_data_read(ACCOUNT_STATUS_ADDR); if(device_Parm.AccountStatus>0x01) { device_Parm.AccountStatus = FM25V02_data_read(ACCOUNT_STATUS_ADDR); if(device_Parm.AccountStatus>0x01) { device_Parm.AccountStatus = 0; FM25V02_data_write(device_Parm.AccountStatus,ACCOUNT_STATUS_ADDR); //Èç¹ûÊ×´ÎÆô¶¯£¬¿ª»§×´Ì¬ÎªÊÇ·Ç0ºÍ1µÄ£¬ÄǾͳõʼÓà¶îΪ10 Settlement_Para.fBalance = 10; Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR); } } /*************¾¯±¨²ÎÊý**************/ system_alarm.alarm_l = 0 ; system_alarm.alarm_Send_failed_time = 0; system_alarm.Data_Send_failed_time =0; system_alarm.alarm_Sample = 0; system_alarm.alarm_PRE = 0; system_alarm.alarm_TEM = 0; system_alarm.alarm_FlowPowerLOW = 0; system_alarm.alarm_FlowUnderPower = 0; system_alarm.alarm_FlowPowerDOWN = 0; system_alarm.alarm_AlkaPowerDOWN = 0; system_alarm.alarm_AlkaPowerLOW = 0; system_alarm.alarm_LithPowerDOWN = 0; system_alarm.alarm_LithPowerLOW = 0; system_alarm.alarm_EXPowerIN = 0; system_alarm.alarm_EXPowerRemove = 0; system_alarm.alarm_Pulse_Broken = 0; system_alarm.alarm_Pulse_Dismatch = 0; system_alarm.alarm_Valve_close = 0; system_alarm.alarm_Valve_open = 0; system_alarm.alarm_Valve_Abnormal = 0; system_alarm.alarm_Gas_Leak = 0; system_alarm.alarm_Gas_Leak_time = 0; system_alarm.alarm_Balance_Small = 0; system_alarm.alarm_Balance_0 = 0; system_alarm.alarm_Credits_0 = 0; system_alarm.alarm_Credits_0Times = 0; system_alarm.alarm_E2RW_read_abnormal =0; system_alarm.alarm_E2RW_write_abnormal =0; system_alarm.u16AlarmStoreNum = FM25V02_data_read_uint16(CURRENT_ALARM_RECORD_NUM_ADDR); if(system_alarm.u16AlarmStoreNum >= ALARM_RECORD_NUM) { system_alarm.u16AlarmStoreNum = 0; FM25V02_data_write_uint16(CURRENT_ALARM_RECORD_NUM_ADDR,system_alarm.u16AlarmStoreNum); } system_alarm.u8AlarmStoreFullFlag = FM25V02_data_read(ALARM_RECORD_FULL_FLAG_ADDR); if(system_alarm.u8AlarmStoreFullFlag > 1) { system_alarm.u8AlarmStoreFullFlag = 0; FM25V02_data_write(system_alarm.u8AlarmStoreFullFlag,ALARM_RECORD_FULL_FLAG_ADDR); } system_alarm.alarm_E2RW_read_abnormal_FLAG = FM25V02_data_read(E2RW_READ_ABNORMAL_FLAG_ADDR); if(system_alarm.alarm_E2RW_read_abnormal_FLAG>1) { system_alarm.alarm_E2RW_read_abnormal_FLAG =0; FM25V02_data_write(system_alarm.alarm_E2RW_read_abnormal_FLAG,E2RW_READ_ABNORMAL_FLAG_ADDR); } system_alarm.alarm_E2RW_write_abnormal_FLAG = FM25V02_data_read(E2RW_WRITE_ABNORMAL_FLAG_ADDR); if(system_alarm.alarm_E2RW_write_abnormal_FLAG>1) { system_alarm.alarm_E2RW_write_abnormal_FLAG =0; FM25V02_data_write(system_alarm.alarm_E2RW_write_abnormal_FLAG,E2RW_WRITE_ABNORMAL_FLAG_ADDR); } system_alarm.alarm_AlkaPowerLow_LCDFLAG=0; system_alarm.alarm_LithPowerLow_LCDFLAG=0; system_alarm.alarm_AlkaPowerDOWN_LCDFLAG=0; system_alarm.alarm_LithPowerDOWN_LCDFLAG=0; system_alarm.alarm_Pulse_Broken_LCDFLAG=0; system_alarm.alarm_Pulse_Dismatch_LCDFLAG =0 ; system_alarm.alarm_Sample_LCDFLAG=0; system_alarm.alarm_PRE_LCDFLAG=0; system_alarm.alarm_TEM_LCDFLAG=0; system_alarm.alarm_Balance_Small_LCDFLAG=0; system_alarm.alarm_RS485Cardinalityfree_LCDFLAG=0; system_alarm.u8PulseBrokenTimes = 0; system_alarm.alarm_Valve_Abnormal_time =0; system_alarm.alarm_Gas_Leak_LCDFLAG = 0; system_alarm.fPressureHighLimit = 5000.0; system_alarm.fPressureLowLimit = -1.0; system_alarm.fTempratureHighLimit = 100.0; system_alarm.fTempratureLowLimit = -50.0; /*************ÀúÊ·Êý¾Ý´æ´¢**************/ // FM25V02_data_write_uint16(NumDataStored_Addr,0x00); NumDataStored = FM25V02_data_read_uint16(NumDataStored_Addr); if(NumDataStored > NumStoredLength) { NumDataStored = 0; FM25V02_data_write_uint16(NumDataStored_Addr,0); } DataStoredFlag = FM25V02_data_read(DataStoredFlag_Addr); if(DataStoredFlag >1) { DataStoredFlag = 0; FM25V02_data_write(0,DataStoredFlag_Addr); } /**********±í¾ß²ÎÊý¼°Ð­ÒéÍ·³õʼ»¯*******/ gprs_protocol_header.DeviceAddress[0] = FM25V02_data_read(DeviceAddress_Addr); gprs_protocol_header.DeviceAddress[1] = FM25V02_data_read(DeviceAddress_Addr+1); gprs_protocol_header.DeviceAddress[2] = FM25V02_data_read(DeviceAddress_Addr+2); gprs_protocol_header.DeviceAddress[3] = FM25V02_data_read(DeviceAddress_Addr+3); gprs_protocol_header.DeviceAddress[4] = FM25V02_data_read(DeviceAddress_Addr+4); gprs_protocol_header.DeviceAddress[5] = FM25V02_data_read(DeviceAddress_Addr+5); gprs_protocol_header.DeviceAddress[6] = FM25V02_data_read(DeviceAddress_Addr+6); gprs_protocol_header.DeviceAddress[7] = FM25V02_data_read(DeviceAddress_Addr+7); device_Parm.time1_flag = FM25V02_data_read(Time1_Flag_Addr); // device_Parm.sendTiming_hour = FM25V02_data_read(SendTiming_Hour_Addr); device_Parm.sendTiming_min = FM25V02_data_read(SendTiming_Min_Addr); if((device_Parm.time1_flag != 0x80)&&(device_Parm.time1_flag != 0x00) ) { device_Parm.time1_flag = 0x00; } if(((device_Parm.sendTiming_hour / 16 )*10 + device_Parm.sendTiming_hour % 16) > 23) { device_Parm.sendTiming_hour = 0x00; //??????? } if(((device_Parm.sendTiming_min / 16 )*10 + device_Parm.sendTiming_min % 16) > 59) { device_Parm.sendTiming_min = 0x00; //??????? } device_Parm.time2_flag = FM25V02_data_read(Time2_Flag_Addr); device_Parm.sendTiming_hour2 = FM25V02_data_read(SendTiming_Hour2_Addr); device_Parm.sendTiming_min2 = FM25V02_data_read(SendTiming_Min2_Addr); if((device_Parm.time2_flag != 0x80)&&(device_Parm.time2_flag != 0x00) ) { device_Parm.time2_flag = 0x00; } if(((device_Parm.sendTiming_hour2 / 16 )*10 + device_Parm.sendTiming_hour2 % 16) > 23) { device_Parm.sendTiming_hour2 = 0x00; //??????? } if(((device_Parm.sendTiming_min2 / 16 )*10 + device_Parm.sendTiming_min2 % 16) > 59) { device_Parm.sendTiming_min2 = 0x00; //??????? } device_Parm.Tyf = FM25V02_data_read(Tyf_Addr); //???? ??? 0x04? 0x05? 0x06? device_Parm.Tf = FM25V02_data_read(Ty_Addr); if((device_Parm.Tyf != 0x04)&&(device_Parm.Tyf != 0x05)&&(device_Parm.Tyf != 0x06)) { device_Parm.Tyf = 0x05; device_Parm.Tf = 0x01; FM25V02_data_write(device_Parm.Tyf,Tyf_Addr); FM25V02_data_write(device_Parm.Tf,Ty_Addr); } if(device_Parm.Tf == 0x00) { device_Parm.Tf = 0x01; FM25V02_data_write(device_Parm.Tf,Ty_Addr); } device_Parm.Typ = FM25V02_data_read(Typ_Addr); //?????? ????? 0x84? 0x85? 0x86? 0x00??? device_Parm.Tp = FM25V02_data_read(Tp_Addr); if((device_Parm.Typ != 0x84)&&(device_Parm.Typ != 0x85)&&(device_Parm.Typ != 0x86)&&(device_Parm.Typ != 0x00)) { device_Parm.Typ = 0x86; device_Parm.Tp = 0x01; FM25V02_data_write(device_Parm.Typ,Typ_Addr); FM25V02_data_write(device_Parm.Tp,Tp_Addr); } if(device_Parm.Tp == 0x00) { device_Parm.Tp = 0x01; FM25V02_data_write(device_Parm.Tp,Tp_Addr); } device_Parm.show_balance_flag = FM25V02_data_read(SHOW_BALANCE_FLAG_ADDR); if(device_Parm.show_balance_flag > 1) { device_Parm.show_balance_flag = 0; FM25V02_data_write(device_Parm.show_balance_flag,SHOW_BALANCE_FLAG_ADDR); } device_Parm.show_price_flag = FM25V02_data_read(SHOW_PRICE_FLAG_ADDR); if(device_Parm.show_price_flag > 1) { device_Parm.show_price_flag = 0; FM25V02_data_write(device_Parm.show_price_flag,SHOW_PRICE_FLAG_ADDR); } Get_Sample_Send_Interval(); VariaDlg.ServerIP[0] = FM25V02_data_read(IP_Addr); //???IP ?? VariaDlg.ServerIP[1] = FM25V02_data_read(IP_Addr+1); VariaDlg.ServerIP[2] = FM25V02_data_read(IP_Addr+2); VariaDlg.ServerIP[3] = FM25V02_data_read(IP_Addr+3); VariaDlg.ServerPort[0] = FM25V02_data_read(IP_Addr+4); //????? VariaDlg.ServerPort[1] = FM25V02_data_read(IP_Addr+5); device_Parm.GPRS_RESTARTTIME = FM25V02_data_read(GPRS_RestartTime_Addr); if((device_Parm.GPRS_RESTARTTIME < 30)||(device_Parm.GPRS_RESTARTTIME==0xFF)) { device_Parm.GPRS_RESTARTTIME = 30; } /*****************¶ÁÈ¡¼Æ·Ñ²ÎÊý********************/ parameter_bil.cDataObtainType = FM25V02_data_read(DATA_OBTAIN_TYPE_ADDR); if((parameter_bil.cDataObtainType!=PULSE_MODE)&&(parameter_bil.cDataObtainType!=RS485_MODE)&&(parameter_bil.cDataObtainType!=RS485_AND_PULSE_MODE)) { parameter_bil.cDataObtainType = PULSE_MODE; FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR); } if((parameter_bil.cDataObtainType & RS485_MODE)!= RS485_MODE) { parmAccess.Vbt_Flag = 0; parmAccess.VT_permission = 0; parmAccess.VbT_permission = 0; parmAccess.Q_permission = 0; parmAccess.Qb_permission = 0; parmAccess.TEMP_permission = 0; parmAccess.PRES_permission = 0; } parameter_bil.u8PulseWidth = FM25V02_data_read(PULSE_WITDH_ADDR); if( parameter_bil.u8PulseWidth < 5 ) { parameter_bil.u8PulseWidth = 50; FM25V02_data_write(parameter_bil.u8PulseWidth,PULSE_WITDH_ADDR); } parameter_bil.fPulseCoefficient = FM25V02_data_read_float(PULSE_COE_ADDR); if((parameter_bil.fPulseCoefficient > 10001.0)||(parameter_bil.fPulseCoefficient < 0)) { parameter_bil.fPulseCoefficient = 1.0; FM25V02_data_write_float(PULSE_COE_ADDR,parameter_bil.fPulseCoefficient); } parameter_bil.cBillingType = FM25V02_data_read(BILLING_TYPE_ADDR); if((parameter_bil.cBillingType!=2)&&(parameter_bil.cBillingType!=1)) { parameter_bil.cBillingType = 1; FM25V02_data_write(parameter_bil.cBillingType,BILLING_TYPE_ADDR); } parameter_bil.fSingleBillingFee = FM25V02_data_read_float(SINGLE_BILLING_FEE_ADDR); if((parameter_bil.fSingleBillingFee > 100.0)||(parameter_bil.fSingleBillingFee < 0)) { parameter_bil.fSingleBillingFee = 3.0; FM25V02_data_write_float(SINGLE_BILLING_FEE_ADDR,parameter_bil.fSingleBillingFee); } parameter_bil.fStepBilling_First = FM25V02_data_read_float(STEP_BILLING_FIRST_ADDR); if((parameter_bil.fStepBilling_First > 99999999)||(parameter_bil.fStepBilling_First < 0)) { parameter_bil.fStepBilling_First = 500; FM25V02_data_write_float(STEP_BILLING_FIRST_ADDR,parameter_bil.fStepBilling_First); } parameter_bil.fStepBillingFee_First = FM25V02_data_read_float(STEP_BILLING_FEE_FIRST_ADDR); if((parameter_bil.fStepBillingFee_First > 999.0)||(parameter_bil.fStepBillingFee_First < 0)) { parameter_bil.fStepBillingFee_First = 1.0; FM25V02_data_write_float(STEP_BILLING_FEE_FIRST_ADDR,parameter_bil.fStepBillingFee_First); } parameter_bil.fStepBilling_Second = FM25V02_data_read_float(STEP_BILLING_SECOND_ADDR); if((parameter_bil.fStepBilling_Second > 99999999)||(parameter_bil.fStepBilling_Second < 0)) { parameter_bil.fStepBilling_Second = 2000; FM25V02_data_write_float(STEP_BILLING_SECOND_ADDR,parameter_bil.fStepBilling_Second); } parameter_bil.fStepBillingFee_Second = FM25V02_data_read_float(STEP_BILLING_FEE_SECOND_ADDR); if((parameter_bil.fStepBillingFee_Second > 999.0)||(parameter_bil.fStepBillingFee_Second < 0)) { parameter_bil.fStepBillingFee_Second = 1.5; FM25V02_data_write_float(STEP_BILLING_FEE_SECOND_ADDR,parameter_bil.fStepBillingFee_Second); } parameter_bil.fStepBilling_Third = FM25V02_data_read_float(STEP_BILLING_THIRD_ADDR); if((parameter_bil.fStepBilling_Third > 99999999)||(parameter_bil.fStepBilling_Third < 0)) { parameter_bil.fStepBilling_Third = 5000; FM25V02_data_write_float(STEP_BILLING_THIRD_ADDR,parameter_bil.fStepBilling_Third); } parameter_bil.fStepBillingFee_Third = FM25V02_data_read_float(STEP_BILLING_FEE_THIRD_ADDR); if((parameter_bil.fStepBillingFee_Third > 999.0)||(parameter_bil.fStepBillingFee_Third < 0)) { parameter_bil.fStepBillingFee_Third = 2.0; FM25V02_data_write_float(STEP_BILLING_FEE_THIRD_ADDR,parameter_bil.fStepBillingFee_Third); } parameter_bil.iBalanceInsufAlarmAmount = FM25V02_data_read_uint16(BALANCE_INSUF_ALARM_AMOUNT_ADDR); if(parameter_bil.iBalanceInsufAlarmAmount > 65000) { parameter_bil.iBalanceInsufAlarmAmount = 100; FM25V02_data_write_uint16(BALANCE_INSUF_ALARM_AMOUNT_ADDR,parameter_bil.iBalanceInsufAlarmAmount); } parameter_bil.fCredits = FM25V02_data_read_float(CREDITS_ADDR); if((parameter_bil.fCredits > 100000000.0)||(parameter_bil.fCredits < 0)) { parameter_bil.fCredits = 0.0; FM25V02_data_write_float(CREDITS_ADDR,parameter_bil.fCredits); } Settlement_Para.SettlementStorageFlag = 0; Settlement_Para.fBalance = Read_Verification(REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR); if((Settlement_Para.fBalance > BALANCE_UP_LIMIT)||(Settlement_Para.fBalance < BALANCE_LOWER_LIMIT)) { Settlement_Para.fBalance = Read_Verification(REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR); if((Settlement_Para.fBalance > BALANCE_UP_LIMIT)||(Settlement_Para.fBalance < BALANCE_LOWER_LIMIT)) { Settlement_Para.fBalance = 0; Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR); } } Settlement_Para.fCumulativeFeeUsage = Read_Verification(REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR); if((Settlement_Para.fCumulativeFeeUsage>FEE_USAGE_UP_LIMIT)||(Settlement_Para.fCumulativeFeeUsage<0)) { Settlement_Para.fCumulativeFeeUsage = Read_Verification(REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR); if((Settlement_Para.fCumulativeFeeUsage>FEE_USAGE_UP_LIMIT)||(Settlement_Para.fCumulativeFeeUsage<0)) { Settlement_Para.fCumulativeFeeUsage = 0; Write_Verification(Settlement_Para.fCumulativeFeeUsage,REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR); } } Settlement_Para.fCumulativeGasUsage = Read_Verification(REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR); if((Settlement_Para.fCumulativeGasUsage>GAS_USAGE_UP_LIMIT)||(Settlement_Para.fCumulativeGasUsage<0)) { Settlement_Para.fCumulativeGasUsage = Read_Verification(REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR); if((Settlement_Para.fCumulativeGasUsage>GAS_USAGE_UP_LIMIT)||(Settlement_Para.fCumulativeGasUsage<0)) { Settlement_Para.fCumulativeGasUsage = 0; Write_Verification(Settlement_Para.fCumulativeGasUsage,REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR); } } Settlement_Para.u32PulseCounting = 0; Settlement_Para.u32PulseCounting_last = 0; Settlement_Para.RS485SettlementINGFlag = 0; Settlement_Para.RS485BilDataReadableFlag = FM25V02_data_read(DATA_READABLE_FLAG_ADDR); if(Settlement_Para.RS485BilDataReadableFlag > 1) { Settlement_Para.RS485BilDataReadableFlag = 0; FM25V02_data_write(Settlement_Para.RS485BilDataReadableFlag,DATA_READABLE_FLAG_ADDR); } Settlement_Para.RS485SettlementFlag = FM25V02_data_read(RS485_SETTLEMENT_FLAG_ADDR); if(Settlement_Para.RS485SettlementFlag > 1) { Settlement_Para.RS485SettlementFlag = 0; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); } /*bil record*/ system_record.u16BilRecordNUM = FM25V02_data_read_uint16(CURRENT_BIL_RECORD_NUM_ADDR); if(system_record.u16BilRecordNUM >= BIL_RECORD_NUM) { system_record.u16BilRecordNUM = 0; FM25V02_data_write_uint16(CURRENT_BIL_RECORD_NUM_ADDR,system_record.u16BilRecordNUM); } system_record.u8BilStoreFullFlag = FM25V02_data_read(BIL_RECORD_FULL_FLAG_ADDR); if(system_record.u8BilStoreFullFlag > 1) { system_record.u8BilStoreFullFlag = 0; FM25V02_data_write(system_record.u8BilStoreFullFlag,BIL_RECORD_FULL_FLAG_ADDR); } /*Cumulants record*/ system_record.u16CumulantsRecordNUM = FM25V02_data_read_uint16(CUMULANTS_MODIFY_RECORD_NUM_ADDR); if(system_record.u16CumulantsRecordNUM >= CUMULANTS_MODIFY_RECORD_NUM) { system_record.u16CumulantsRecordNUM = 0; FM25V02_data_write_uint16(CUMULANTS_MODIFY_RECORD_NUM_ADDR,system_record.u16CumulantsRecordNUM); } system_record.u8CumulantsStoreFullFlag = FM25V02_data_read(CUMULANTS_MODIFY_RECORD_FULL_FLAG_ADDR); if(system_record.u8CumulantsStoreFullFlag > 1) { system_record.u8CumulantsStoreFullFlag = 0; FM25V02_data_write(system_record.u8CumulantsStoreFullFlag,CUMULANTS_MODIFY_RECORD_FULL_FLAG_ADDR); } //¼Æ·Ñģʽ BalanceSaveType=FM25V02_data_read(BALANCE_SAVE_TYPE_ADDR); if(BalanceSaveType > 1) { BalanceSaveType = 0; FM25V02_data_write(BalanceSaveType,BALANCE_SAVE_TYPE_ADDR); } //modbus´Ó»úµØÖ·£¬±»Ö÷»ú¶ÁÈ¡ modbus_dev_para.slave_addr = FM25V02_data_read(MODBUS_SLAVE_ADDR); if(modbus_dev_para.slave_addr == 0 ) { modbus_dev_para.slave_addr = 1; FM25V02_data_write(modbus_dev_para.slave_addr,MODBUS_SLAVE_ADDR); } /****************¶Ô½ÓÁ÷Á¿¼Æ²ÎÊý*********************/ parmAccess.u16MeterTypeCode = FM25V02_data_read_uint16(METER_TYPE_CODE_ADDR); if(parmAccess.u16MeterTypeCode >= 0x9999) { parmAccess.u16MeterTypeCode = SIZHUMODBUSV2_0; FM25V02_data_write_uint16(METER_TYPE_CODE_ADDR,parmAccess.u16MeterTypeCode); } #ifdef DEBUG_OUT sprintf(Debug,"u16MeterTypeCode = %x \n",parmAccess.u16MeterTypeCode); // UartDebugFun(Debug); #endif parmAccess.u8EXPVoltageCode = FM25V02_data_read(EXP_VOLTAGE_CODE_ADDR); if((parmAccess.u8EXPVoltageCode!=0x00)&&(parmAccess.u8EXPVoltageCode!=0x01)&&(parmAccess.u8EXPVoltageCode!=0x02)&&(parmAccess.u8EXPVoltageCode!=0x10)) { parmAccess.u8EXPVoltageCode = 0x00; FM25V02_data_write(parmAccess.u8EXPVoltageCode,EXP_VOLTAGE_CODE_ADDR); } parmAccess.u8BaudRateCode = FM25V02_data_read(BAUD_RATE_CODE_ADDR); parmAccess.u8BaudRateCode = FM25V02_data_read(BAUD_RATE_CODE_ADDR); if(parmAccess.u8BaudRateCode > 0x08) { parmAccess.u8BaudRateCode = 0x08; FM25V02_data_write(parmAccess.u8BaudRateCode,BAUD_RATE_CODE_ADDR); } parmAccess.u8RS485Parity = FM25V02_data_read(RS485_PARITY_ADDR); if(parmAccess.u8RS485Parity > 0x02) { parmAccess.u8RS485Parity = 0x00; FM25V02_data_write(parmAccess.u8RS485Parity,RS485_PARITY_ADDR); } parmAccess.u8slaveAddress = FM25V02_data_read(SLAVE_ADDRESS_ADDR); if(parmAccess.u8slaveAddress==0xff) { parmAccess.u8slaveAddress = 1; FM25V02_data_write(parmAccess.u8slaveAddress,SLAVE_ADDRESS_ADDR); } parmAccess.u8LowPowerAlarmLine = FM25V02_data_read(LOW_POWER_ALARM_LINE_ADDR); if(parmAccess.u8LowPowerAlarmLine>0x10) { parmAccess.u8LowPowerAlarmLine = 0x00; FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR); } /*************************************/ /*************Ö¡¸ñʽͷ²ÎÊý**************/ gprs_protocol_header.Framestart_symbol = 0x68; gprs_protocol_header.Datastart_symbol = 0x68; gprs_protocol_header.frameSeq = 1; gprs_protocol_header.Protocol_version = PROTOCOL_VERSION; gprs_data_package.Frameend_symbol = 0x16; gprs_protocol_header.KVer = 0x80; KVer_AES_128[0] = 0x08; KVer_AES_128[1] = 0x07; KVer_AES_128[2] = 0x06; KVer_AES_128[3] = 0x05; KVer_AES_128[4] = 0x04; KVer_AES_128[5] = 0x03; KVer_AES_128[6] = 0x02; KVer_AES_128[7] = 0x01; KVer_AES_128[8] = 0x00; KVer_AES_128[9] = 0x00; KVer_AES_128[10] = 0x00; KVer_AES_128[11] = 0x00; KVer_AES_128[12] = 0x00; KVer_AES_128[13] = 0x00; KVer_AES_128[14] = 0x00; KVer_AES_128[15] = 0x00; gprs_protocol_header.Signal_intensity = 20; gprs_protocol_header.Send_type = 1; gprs_protocol_header.Power_type = 1; gprs_protocol_header.Data_Acq_type = parameter_bil.cDataObtainType; gprs_protocol_header.Billing_type = parameter_bil.cBillingType; gprs_protocol_header.AccountStatus_g = device_Parm.AccountStatus ; gprs_protocol_header.Reserved1 = 0; gprs_protocol_header.Reserved2 = 0; gprs_protocol_header.Reserved3 = 0; Valve_control_parm.Valve_Type = FM25V02_data_read(VALVE_TYPE_ADDR); if(Valve_control_parm.Valve_Type == SZV102_VALVE) { gprs_protocol_header.Valve_Status = FM25V02_data_read(VALVE_STATE_ADDR); if(gprs_protocol_header.Valve_Status>3) { gprs_protocol_header.Valve_Status = 2; FM25V02_data_write(gprs_protocol_header.Valve_Status,VALVE_STATE_ADDR); } }else { if(Valve_control_parm.Valve_Type == SZV103_VALVE) { Valve_control_parm.Valve_Type = SZV103_VALVE; // FM25V02_data_write(Valve_control_parm.Valve_Type,VALVE_TYPE_ADDR); } else { Valve_control_parm.Valve_Type = SZV101_VALVE; FM25V02_data_write(Valve_control_parm.Valve_Type,VALVE_TYPE_ADDR); } //if((PCin(10)==0)&&(PCin(11)==1)) if(Motor_OP_PIN_READ ==0 &&Motor_CL_PIN_READ ==1) { gprs_protocol_header.Valve_Status = 1; } else if(Motor_OP_PIN_READ==1&& Motor_CL_PIN_READ ==0) { gprs_protocol_header.Valve_Status = 2; } else { gprs_protocol_header.Valve_Status = 3; } } /************ÏÔʾģʽ****************/ LCD_flag = FM25V02_data_read(LCD_FLAG_ADDR); if(LCD_flag>1) { LCD_flag = 0; FM25V02_data_write(LCD_flag,LCD_FLAG_ADDR); } device_Parm.Logo_Display_Flag = FM25V02_data_read(LOGO_DISPLAY_FLAG_ADDR); if(device_Parm.Logo_Display_Flag>1) { device_Parm.Logo_Display_Flag = 0; FM25V02_data_write(device_Parm.Logo_Display_Flag,LOGO_DISPLAY_FLAG_ADDR); } if(LCD_TYPE_FLAG ==0) { LCD_Power_Init(); lcd_init(); LCD_DisplayAll(); LCD_sleepTime = 20; } else { LCD_Power_Init(); lcd_init_new(); LCD_DisplayAll_New1(); LCD_sleepTime = 20; } /************ÉèÖÃRTC¼ÆËã²ÎÊý****************/ //Get_Time(); //delay_ms(20); set_RTC8025T_peroid_alarm(); //delay_ms(20); //Time_Set(calendar.year,calendar.month,calendar.date,0x01,calendar.hour,calendar.min,calendar.sec); delay_ms(20); Get_Time(); device_Parm.Hour_Updata_flag = calendar.hour; Last_Sample_D = calendar.date; Last_Sample_H = calendar.hour; Last_Sample_M = calendar.min; Last_Send_D = Last_Sample_D; Last_Send_H = Last_Sample_H; //??????? Last_Send_M = Last_Sample_M; device_Parm.real_sendTiming_day = 1; device_Parm.real_sendTiming_hour = 0; device_Parm.real_sendTiming_min = 0; NOW_year=(calendar.year>>12)*1000+((calendar.year&0x0FFF)>>8)*100+((calendar.year&0x00FF)>>4)*10+(calendar.year&0x000F); NOW_month = ((calendar.month&0x00FF)>>4)*10+(calendar.month&0x000F); NOW_day = calendar.date; NOW_hour = calendar.hour; NOW_min = calendar.min; #ifdef DEBUG_OUT sprintf(Debug,"TIME = %02x-%02x-%02x %02x:%02x:%02x \n",calendar.year,calendar.month,calendar.date,calendar.hour,calendar.min,calendar.sec); // 266 3.9V 245 3.6V 68.2/V UartDebugFun(Debug); #endif /***************¼ÆËãµÚÒ»´ÎÄÖÖÓʱ¼ä*********************/ // calculate_Sample_Time(NOW_year, NOW_month,NOW_day); //calculate next sampling time // calculate_Send_Time(NOW_year, NOW_month,NOW_day); //calculate next sending time // compara_Send_Sample(NOW_year,NOW_month,NOW_day ,NOW_hour,NOW_min) ; //compara next RTC alarm time is for sampling or sending /************²É·¢¹ý³Ì²ÎÊý³õʼ»¯********************/ //strcpy((char *)VariaDlg.APN,"cmnet"); //SIM? APN? //Sending_flag = 1; //compara_Send_Sampleº¯ÊýÖмÆËã¹ý£¬ËùÒÔÕâÀï²»Óø³Öµ GPRS_sendFlag = 0; // // pluse_count = 0; // awaken_flag = dormancy_awaken; system_alarm.u8ReadSuccessfullyTimes =0; VariaDlg.ReceivedInstructionFlag = 0; VariaDlg.Net_info = 0; VariaDlg.send_finish_ok=0; VariaDlg.HandleStep = SYS_DATA; VariaDlg.RestartTime = RESTARTTIME ; ModbusDlg.HandleStep = MODBUS_WAIT; ModbusDlg.RepeadNum = REPEATNUM ; //?????? ModbusDlg.RepeadTime = 0 ; LLJ_Msg.HandlePtr = 0; LLJ_Msg.WritePtr = 0; LLJ_Msg.TempPtr = 0; LLJ_Msg.NewLen = 0; memset((char *)LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff)); memset((char *)LLJ_Msg.UartBuff,0,sizeof(LLJ_Msg.UartBuff)); } void Variable_Reset() { uint16_t NOW_year; uint8_t NOW_month,NOW_day,NOW_hour,NOW_min; #ifdef BOARD_INITIALIZATION // memset((u8 *)&gprs_protocol_header.DeviceAddress,0,8); // EEPROM_MultipleWrite((u8 *)&gprs_protocol_header.DeviceAddress,DeviceAddress_Addr,8); // memset((u8 *)®DevSerialNum.hardwareVerSn,0,6); // FM25V02_data_write_uint16(HardwareVerSn1_ADDR, regDevSerialNum.hardwareVerSn[0]) ; // FM25V02_data_write_uint16(HardwareVerSn2_ADDR, regDevSerialNum.hardwareVerSn[1]) ; // FM25V02_data_write_uint16(HardwareVerSn3_ADDR, regDevSerialNum.hardwareVerSn[2]) ; // regDevSerialNum.firmwareCRC=0; // FM25V02_data_write_uint16(FirmwareCRC_ADDR,regDevSerialNum.firmwareCRC); #endif /*************¶Á±í²ÎÊý**************/ k_index = 0; //Êý¾Ý¶ÁÈ¡µÄʱºò¼ÆÊýÓà ddr_index_2 = 0; // RegisterInit(); //¹Ì¼þÈí¼þ°æ±¾µÈÐÅÏ¢ /***********¶ÁÈ¡´æ´¢µÄÖµ*****************/ /*******************·§ÃÅÏà¹Ø******************/ OpenValveAuthorizeFLAG = 0x00; FM25V02_data_write(OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR); #ifdef DEBUG_OUT sprintf(Debug,"OpenValveAuthorizeFLAG = %x \n",OpenValveAuthorizeFLAG); // UartDebugFun(Debug); #endif OpenValveAuthorizeTimeCnt = 0; FM25V02_data_write_uint32(OPEN_VALVE_AUTHORIZE_TIME_CNT_ADDRA, OpenValveAuthorizeTimeCnt); ValveOpenTimes = 0; FM25V02_data_write_uint16(VALVE_OPEN_TIMES_ADDR,ValveOpenTimes); ValveCloseTimes = 0; FM25V02_data_write_uint16(VALVE_CLOSE_TIMES_ADDR,ValveCloseTimes); #ifdef DEBUG_OUT sprintf(Debug,"OpenValveAuthorizeTimeCnt = %d \n",OpenValveAuthorizeTimeCnt); // UartDebugFun(Debug); #endif /***********¿ª»§×´Ì¬*****************/ device_Parm.AccountStatus = 0; FM25V02_data_write(device_Parm.AccountStatus,ACCOUNT_STATUS_ADDR); //Èç¹ûÊ×´ÎÆô¶¯£¬¿ª»§×´Ì¬ÎªÊÇ·Ç0ºÍ1µÄ£¬ÄǾͳõʼÓà¶îΪ10 Settlement_Para.fBalance = 10; Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR); FM25V02_data_write_double(BALANCE_BIL_ADDR, Settlement_Para.fBalance); /*************¾¯±¨²ÎÊý**************/ system_alarm.alarm_l = 0 ; system_alarm.alarm_Send_failed_time = 0; system_alarm.Data_Send_failed_time =0; system_alarm.alarm_Sample = 0; system_alarm.alarm_PRE = 0; system_alarm.alarm_TEM = 0; system_alarm.alarm_FlowPowerLOW = 0; system_alarm.alarm_FlowUnderPower = 0; system_alarm.alarm_FlowPowerDOWN = 0; system_alarm.alarm_AlkaPowerDOWN = 0; system_alarm.alarm_AlkaPowerLOW = 0; system_alarm.alarm_LithPowerDOWN = 0; system_alarm.alarm_LithPowerLOW = 0; system_alarm.alarm_EXPowerIN = 0; system_alarm.alarm_EXPowerRemove = 0; system_alarm.alarm_Pulse_Broken = 0; system_alarm.alarm_Pulse_Dismatch = 0; system_alarm.alarm_Valve_close = 0; system_alarm.alarm_Valve_open = 0; system_alarm.alarm_Valve_Abnormal = 0; system_alarm.alarm_Gas_Leak = 0; system_alarm.alarm_Gas_Leak_time = 0; system_alarm.alarm_Balance_Small = 0; system_alarm.alarm_Balance_0 = 0; system_alarm.alarm_Credits_0 = 0; system_alarm.alarm_Credits_0Times = 0; system_alarm.alarm_E2RW_read_abnormal =0; system_alarm.alarm_E2RW_write_abnormal =0; system_alarm.u16AlarmStoreNum = 0; FM25V02_data_write_uint16(CURRENT_ALARM_RECORD_NUM_ADDR,system_alarm.u16AlarmStoreNum); system_alarm.alarm_E2RW_read_abnormal_FLAG =0; FM25V02_data_write(system_alarm.alarm_E2RW_read_abnormal_FLAG,E2RW_READ_ABNORMAL_FLAG_ADDR); system_alarm.alarm_E2RW_write_abnormal_FLAG =0; FM25V02_data_write(system_alarm.alarm_E2RW_write_abnormal_FLAG,E2RW_WRITE_ABNORMAL_FLAG_ADDR); system_alarm.alarm_AlkaPowerLow_LCDFLAG=0; system_alarm.alarm_LithPowerLow_LCDFLAG=0; system_alarm.alarm_AlkaPowerDOWN_LCDFLAG=0; system_alarm.alarm_LithPowerDOWN_LCDFLAG=0; system_alarm.alarm_Pulse_Broken_LCDFLAG=0; system_alarm.alarm_Pulse_Dismatch_LCDFLAG =0 ; system_alarm.alarm_Sample_LCDFLAG=0; system_alarm.alarm_PRE_LCDFLAG=0; system_alarm.alarm_TEM_LCDFLAG=0; system_alarm.alarm_Balance_Small_LCDFLAG=0; system_alarm.alarm_RS485Cardinalityfree_LCDFLAG=0; system_alarm.u8PulseBrokenTimes = 0; system_alarm.alarm_Valve_Abnormal_time =0; system_alarm.alarm_Gas_Leak_LCDFLAG = 0; system_alarm.fPressureHighLimit = 5000.0; system_alarm.fPressureLowLimit = -1.0; system_alarm.fTempratureHighLimit = 100.0; system_alarm.fTempratureLowLimit = -50.0; /*************ÀúÊ·Êý¾Ý´æ´¢**************/ NumDataStored = 0; FM25V02_data_write_uint16(NumDataStored_Addr,0); DataStoredFlag = 0; FM25V02_data_write(0,DataStoredFlag_Addr); // /**********±í¾ß²ÎÊý¼°Ð­ÒéÍ·³õʼ»¯*******/ // gprs_protocol_header.DeviceAddress[0] = FM25V02_data_read(DeviceAddress_Addr); // gprs_protocol_header.DeviceAddress[1] = FM25V02_data_read(DeviceAddress_Addr+1); // gprs_protocol_header.DeviceAddress[2] = FM25V02_data_read(DeviceAddress_Addr+2); // gprs_protocol_header.DeviceAddress[3] = FM25V02_data_read(DeviceAddress_Addr+3); // gprs_protocol_header.DeviceAddress[4] = FM25V02_data_read(DeviceAddress_Addr+4); // gprs_protocol_header.DeviceAddress[5] = FM25V02_data_read(DeviceAddress_Addr+5); // gprs_protocol_header.DeviceAddress[6] = FM25V02_data_read(DeviceAddress_Addr+6); // gprs_protocol_header.DeviceAddress[7] = FM25V02_data_read(DeviceAddress_Addr+7); device_Parm.time1_flag = 0x00; FM25V02_data_write(device_Parm.time1_flag,Time1_Flag_Addr); device_Parm.sendTiming_hour = 0x00; //??????? FM25V02_data_write(device_Parm.sendTiming_hour,SendTiming_Hour_Addr); device_Parm.sendTiming_min = 0x00; //??????? FM25V02_data_write(device_Parm.sendTiming_min,SendTiming_Min_Addr); device_Parm.time2_flag = 0x00; FM25V02_data_write(device_Parm.time2_flag,Time2_Flag_Addr); device_Parm.sendTiming_hour2 = 0x00; //??????? FM25V02_data_write(device_Parm.sendTiming_hour2,SendTiming_Hour2_Addr); device_Parm.sendTiming_min2 = 0x00; //??????? FM25V02_data_write(device_Parm.sendTiming_min2,SendTiming_Min2_Addr); device_Parm.Tyf = 0x05; device_Parm.Tf = 0x01; FM25V02_data_write(device_Parm.Tyf,Tyf_Addr); FM25V02_data_write(device_Parm.Tf,Ty_Addr); device_Parm.Typ = 0x86; device_Parm.Tp = 0x01; FM25V02_data_write(device_Parm.Typ,Typ_Addr); FM25V02_data_write(device_Parm.Tp,Tp_Addr); Get_Sample_Send_Interval(); VariaDlg.ServerIP[0] = 120; //???IP ?? VariaDlg.ServerIP[1] = 77; VariaDlg.ServerIP[2] = 85; VariaDlg.ServerIP[3] = 236; VariaDlg.ServerPort[0] = 0xAA; //????? VariaDlg.ServerPort[1] = 0x26; FM25V02_data_write(VariaDlg.ServerIP[0],IP_Addr); FM25V02_data_write(VariaDlg.ServerIP[1],IP_Addr+1); FM25V02_data_write(VariaDlg.ServerIP[2],IP_Addr+2); FM25V02_data_write(VariaDlg.ServerIP[3],IP_Addr+3); FM25V02_data_write(VariaDlg.ServerPort[0],IP_Addr+4); FM25V02_data_write(VariaDlg.ServerPort[1],IP_Addr+5); device_Parm.GPRS_RESTARTTIME = 180; FM25V02_data_write(device_Parm.GPRS_RESTARTTIME,GPRS_RestartTime_Addr); device_Parm.show_balance_flag = 0; FM25V02_data_write(device_Parm.show_balance_flag,SHOW_BALANCE_FLAG_ADDR); device_Parm.show_price_flag = 0; FM25V02_data_write(device_Parm.show_price_flag,SHOW_PRICE_FLAG_ADDR); /*****************¶ÁÈ¡¼Æ·Ñ²ÎÊý********************/ parameter_bil.cDataObtainType = RS485_MODE; FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR); if((parameter_bil.cDataObtainType & RS485_MODE)!= RS485_MODE) { parmAccess.Vbt_Flag = 0; parmAccess.VT_permission = 0; parmAccess.VbT_permission = 0; parmAccess.Q_permission = 0; parmAccess.Qb_permission = 0; parmAccess.TEMP_permission = 0; parmAccess.PRES_permission = 0; } parameter_bil.u8PulseWidth = 50; FM25V02_data_write(parameter_bil.u8PulseWidth,PULSE_WITDH_ADDR); parameter_bil.fPulseCoefficient = 1.0; FM25V02_data_write_float(PULSE_COE_ADDR,parameter_bil.fPulseCoefficient); parameter_bil.cBillingType = 1; FM25V02_data_write(parameter_bil.cBillingType,BILLING_TYPE_ADDR); parameter_bil.fSingleBillingFee = 3.0; FM25V02_data_write_float(SINGLE_BILLING_FEE_ADDR,parameter_bil.fSingleBillingFee); parameter_bil.fStepBilling_First = 500; FM25V02_data_write_float(STEP_BILLING_FIRST_ADDR,parameter_bil.fStepBilling_First); parameter_bil.fStepBillingFee_First = 1.0; FM25V02_data_write_float(STEP_BILLING_FEE_FIRST_ADDR,parameter_bil.fStepBillingFee_First); parameter_bil.fStepBilling_Second = 2000; FM25V02_data_write_float(STEP_BILLING_SECOND_ADDR,parameter_bil.fStepBilling_Second); parameter_bil.fStepBillingFee_Second = 1.5; FM25V02_data_write_float(STEP_BILLING_FEE_SECOND_ADDR,parameter_bil.fStepBillingFee_Second); parameter_bil.fStepBilling_Third = 5000; FM25V02_data_write_float(STEP_BILLING_THIRD_ADDR,parameter_bil.fStepBilling_Third); parameter_bil.fStepBillingFee_Third = 2.0; FM25V02_data_write_float(STEP_BILLING_FEE_THIRD_ADDR,parameter_bil.fStepBillingFee_Third); parameter_bil.iBalanceInsufAlarmAmount = 100; FM25V02_data_write_uint16(BALANCE_INSUF_ALARM_AMOUNT_ADDR,parameter_bil.iBalanceInsufAlarmAmount); parameter_bil.fCredits = 0.0; FM25V02_data_write_float(CREDITS_ADDR,parameter_bil.fCredits); Settlement_Para.SettlementStorageFlag = 0; Settlement_Para.fBalance = 0; Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR); FM25V02_data_write_double(BALANCE_BIL_ADDR, Settlement_Para.fBalance); Settlement_Para.fCumulativeFeeUsage = 0; Write_Verification(Settlement_Para.fCumulativeFeeUsage,REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR); Settlement_Para.fCumulativeGasUsage = 0; Write_Verification(Settlement_Para.fCumulativeGasUsage,REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR); Settlement_Para.u32PulseCounting = 0; Settlement_Para.u32PulseCounting_last = 0; Settlement_Para.RS485SettlementINGFlag = 0; Settlement_Para.RS485BilDataReadableFlag = 0; FM25V02_data_write(Settlement_Para.RS485BilDataReadableFlag,DATA_READABLE_FLAG_ADDR); Settlement_Para.RS485SettlementFlag = 1; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); /*bil record*/ system_record.u16BilRecordNUM = 0; FM25V02_data_write_uint16(CURRENT_BIL_RECORD_NUM_ADDR,system_record.u16BilRecordNUM); system_record.u8BilStoreFullFlag = 0; FM25V02_data_write(system_record.u8BilStoreFullFlag,BIL_RECORD_FULL_FLAG_ADDR); system_record.u16CumulantsRecordNUM = 0; FM25V02_data_write_uint16(CUMULANTS_MODIFY_RECORD_NUM_ADDR,system_record.u16CumulantsRecordNUM); system_record.u8CumulantsStoreFullFlag = 0; FM25V02_data_write(system_record.u8CumulantsStoreFullFlag,CUMULANTS_MODIFY_RECORD_FULL_FLAG_ADDR); BalanceSaveType = 0; FM25V02_data_write(BalanceSaveType,BALANCE_SAVE_TYPE_ADDR); modbus_dev_para.slave_addr = 1; FM25V02_data_write(modbus_dev_para.slave_addr,MODBUS_SLAVE_ADDR); /****************¶Ô½ÓÁ÷Á¿¼Æ²ÎÊý*********************/ parmAccess.u16MeterTypeCode = SIZHUMODBUSV2_0; FM25V02_data_write_uint16(METER_TYPE_CODE_ADDR,parmAccess.u16MeterTypeCode); parmAccess.u8EXPVoltageCode = 0x00; FM25V02_data_write(parmAccess.u8EXPVoltageCode,EXP_VOLTAGE_CODE_ADDR); parmAccess.u8BaudRateCode = 0x08; FM25V02_data_write(parmAccess.u8BaudRateCode,BAUD_RATE_CODE_ADDR); parmAccess.u8RS485Parity = 0x00; FM25V02_data_write(parmAccess.u8RS485Parity,RS485_PARITY_ADDR); parmAccess.u8slaveAddress = 1; FM25V02_data_write(parmAccess.u8slaveAddress,SLAVE_ADDRESS_ADDR); parmAccess.u8LowPowerAlarmLine = 0x00; FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR); /*************************************/ /*************Ö¡¸ñʽͷ²ÎÊý**************/ gprs_protocol_header.Framestart_symbol = 0x68; gprs_protocol_header.Datastart_symbol = 0x68; gprs_protocol_header.frameSeq = 1; gprs_protocol_header.Protocol_version = PROTOCOL_VERSION; gprs_data_package.Frameend_symbol = 0x16; gprs_protocol_header.KVer = 0x80; KVer_AES_128[0] = 0x08; KVer_AES_128[1] = 0x07; KVer_AES_128[2] = 0x06; KVer_AES_128[3] = 0x05; KVer_AES_128[4] = 0x04; KVer_AES_128[5] = 0x03; KVer_AES_128[6] = 0x02; KVer_AES_128[7] = 0x01; KVer_AES_128[8] = 0x00; KVer_AES_128[9] = 0x00; KVer_AES_128[10] = 0x00; KVer_AES_128[11] = 0x00; KVer_AES_128[12] = 0x00; KVer_AES_128[13] = 0x00; KVer_AES_128[14] = 0x00; KVer_AES_128[15] = 0x00; gprs_protocol_header.Signal_intensity = 20; gprs_protocol_header.Send_type = 1; gprs_protocol_header.Power_type = 1; gprs_protocol_header.Data_Acq_type = parameter_bil.cDataObtainType; gprs_protocol_header.Billing_type = parameter_bil.cBillingType; gprs_protocol_header.AccountStatus_g = device_Parm.AccountStatus ; gprs_protocol_header.Reserved1 = 0; gprs_protocol_header.Reserved2 = 0; gprs_protocol_header.Reserved3 = 0; Valve_control_parm.Valve_Type = SZV101_VALVE; FM25V02_data_write(Valve_control_parm.Valve_Type,VALVE_TYPE_ADDR); if(Motor_OP_PIN_READ ==0 && Motor_CL_PIN_READ == 1) { gprs_protocol_header.Valve_Status = 1; } else if(Motor_OP_PIN_READ==1 && Motor_OP_PIN_READ ==0) { gprs_protocol_header.Valve_Status = 2; } else { gprs_protocol_header.Valve_Status = 3; } /************ÏÔʾģʽ****************/ LCD_flag = 0; FM25V02_data_write(LCD_flag,LCD_FLAG_ADDR); if(LCD_TYPE_FLAG ==0) { LCD_Power_Init(); lcd_init(); LCD_DisplayAll(); LCD_sleepTime = 20; } else { LCD_Power_Init(); lcd_init_new(); LCD_DisplayAll_New1(); LCD_sleepTime = 20; } LOGO_Flag = 0; FM25V02_data_write(LOGO_Flag,LCD_LOGO_ADDR); device_Parm.Logo_Display_Flag = 0; FM25V02_data_write(device_Parm.Logo_Display_Flag,LOGO_DISPLAY_FLAG_ADDR); GPRS_sendFlag = 0; // // pluse_count = 0; // awaken_flag = dormancy_awaken; system_alarm.u8ReadSuccessfullyTimes =0; VariaDlg.ReceivedInstructionFlag = 0; VariaDlg.Net_info = 0; VariaDlg.send_finish_ok=0; VariaDlg.HandleStep = SYS_DATA; VariaDlg.RestartTime = RESTARTTIME ; ModbusDlg.HandleStep = MODBUS_WAIT; ModbusDlg.RepeadNum = REPEATNUM ; //?????? ModbusDlg.RepeadTime = 0 ; LLJ_Msg.HandlePtr = 0; LLJ_Msg.WritePtr = 0; LLJ_Msg.TempPtr = 0; LLJ_Msg.NewLen = 0; memset((char *)LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff)); memset((char *)LLJ_Msg.UartBuff,0,sizeof(LLJ_Msg.UartBuff)); regDevSerialNum.EquipmentCaliberAndModel = 8; FM25V02_data_write(regDevSerialNum.EquipmentCaliberAndModel, EquipmentCaliberAndModel_ADDR) ; } /****************************************** * func: ReturnAfterSetting * desc: * input: * * output: none * return: *****************************************/ void ReturnAfterSetting(u8 SetResult,u8 FormCode) //ÉÏλ»úÉèÖúóµÄ·µ»Ø½á¹û { u16 ii_index; u16 CrcCheck; GPRS_SEND_BUFF[0] = 0x42; GPRS_SEND_BUFF[1] = 0x42; GPRS_SEND_BUFF[2] = FormCode; GPRS_SEND_BUFF[3] = SetResult; CrcCheck = usMBCRC16(0xFFFF,GPRS_SEND_BUFF,4); GPRS_SEND_BUFF[4] = CrcCheck; GPRS_SEND_BUFF[5] = CrcCheck>>8; UTR_Send_Data(GPRS_SEND_BUFF,6); // for(ii_index = 0; ii_index < 6; ii_index++) // { // UTR_sendbyte(GPRS_SEND_BUFF[ii_index]); // } } /****************************************** * func: ReturnAfterSetting * desc: * input: * * output: none * return: *****************************************/ void ReturnAfterReading(u16 CrcLength,u8 FormCode) //ÉÏλ»ú¶ÁÈ¡·µ»ØÊý¾Ý { u16 ii_index; u16 CrcCheck; GPRS_SEND_BUFF[0] = 0x52; GPRS_SEND_BUFF[1] = 0x52; GPRS_SEND_BUFF[2] = FormCode; CrcCheck = usMBCRC16(0xFFFF,GPRS_SEND_BUFF,CrcLength); GPRS_SEND_BUFF[CrcLength] = CrcCheck; GPRS_SEND_BUFF[CrcLength+1] = CrcCheck>>8; UTR_Send_Data(GPRS_SEND_BUFF,CrcLength + 2); // for(ii_index = 0; ii_index < (CrcLength + 2); ii_index++) // { // UTR_sendbyte(GPRS_SEND_BUFF[ii_index]); // } } /****************************************** * func: HostComputerTimeSet * desc: * input: * * output: none * return: *****************************************/ void HostComputerTimeSet(u8 WriteOrRead,u8 FormCode)//ʱ¼ä { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; CrcLength = HOST_COMPUTER_DATA_INDEX + 6; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { net_now_time.yearN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX]); net_now_time.monthN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 1]); net_now_time.dateN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 2]); net_now_time.hourN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 3]); net_now_time.minN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 4]); net_now_time.secN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 5]); Time_Set(net_now_time.yearN+0x2000,net_now_time.monthN,net_now_time.dateN,1,net_now_time.hourN,net_now_time.minN,net_now_time.secN); delay_ms(10); Get_Time(); }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX] = BCD2HEX(calendar.year-0x2000); GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 1] = BCD2HEX(calendar.month); GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 2] = BCD2HEX(calendar.date); GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 3] = BCD2HEX(calendar.hour); GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 4] = BCD2HEX(calendar.min); GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 5] = BCD2HEX(calendar.sec); ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: ParameterSettingOfDockingEquipment * desc: * input: * * output: none * return: *****************************************/ void ParameterSettingOfDockingEquipment(u8 WriteOrRead,u8 FormCode)//¶Ô½ÓÉ豸²ÎÊý { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; CrcLength = HOST_COMPUTER_DATA_INDEX + 30; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX] ,(uint8_t *)¶meter_bil.fPulseCoefficient, 4, 1); FM25V02_data_write_float(PULSE_COE_ADDR,parameter_bil.fPulseCoefficient); if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 4] ==PULSE_MODE) { parameter_bil.cDataObtainType = PULSE_MODE; if(Settlement_Para.RS485SettlementFlag!=0) { Settlement_Para.RS485SettlementFlag = 0; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } } else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 4] ==RS485_MODE) { parameter_bil.cDataObtainType = RS485_MODE; if(Settlement_Para.RS485SettlementFlag==0) { Settlement_Para.RS485SettlementFlag = 1; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } system_alarm.alarm_Pulse_Broken_LCDFLAG = 0; } else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 4] ==RS485_AND_PULSE_MODE) { parameter_bil.cDataObtainType = RS485_AND_PULSE_MODE; if(Settlement_Para.RS485SettlementFlag==0) { Settlement_Para.RS485SettlementFlag = 1; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } } else { } FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR); if((parameter_bil.cDataObtainType & RS485_MODE)!= RS485_MODE) { parmAccess.Vbt_Flag = 0; parmAccess.VT_permission = 0; parmAccess.VbT_permission = 0; parmAccess.Q_permission = 0; parmAccess.Qb_permission = 0; parmAccess.TEMP_permission = 0; parmAccess.PRES_permission = 0; } arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 5] ,(uint8_t *)&parmAccess.u16MeterTypeCode, 2, 1); FM25V02_data_write_uint16(METER_TYPE_CODE_ADDR,parmAccess.u16MeterTypeCode); if((parameter_bil.cDataObtainType & PULSE_MODE)== PULSE_MODE) { if((parmAccess.u16MeterTypeCode==ASMODBUS)||(parmAccess.u16MeterTypeCode==AS100MODBUS)||(parmAccess.u16MeterTypeCode==SIARGO_MODBUS)) //ÅжÏÊÇ·ñ°®ÖªÁ÷Á¿¼Æ£¬°®ÖªÁ÷Á¿¼ÆÂö³åʶ±ð²ÉÓ÷½²¨ÉÏÉýÑØÊ¶±ð·½Ê½ { LOW_PULSE_Rising_config(); Low_Pluse_GPIO_Init(); } else { LOW_PULSE_config(); Low_Pluse_GPIO_Init(); } }else { LOW_PULSE_Rising_disconfig(); Low_Pluse_GPIO_sleep_Init(); } parmAccess.u8BaudRateCode =UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 7]; FM25V02_data_write(parmAccess.u8BaudRateCode ,BAUD_RATE_CODE_ADDR); parmAccess.u8RS485Parity =UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 8]; FM25V02_data_write(parmAccess.u8RS485Parity ,RS485_PARITY_ADDR); parmAccess.u8EXPVoltageCode =UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 9]; FM25V02_data_write(parmAccess.u8EXPVoltageCode ,EXP_VOLTAGE_CODE_ADDR); parameter_bil.u8PulseWidth = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 10]; FM25V02_data_write(parameter_bil.u8PulseWidth,PULSE_WITDH_ADDR); parmAccess.u8LowPowerAlarmLine = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 11]; FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR); parmAccess.u8slaveAddress = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 12]; FM25V02_data_write(parmAccess.u8slaveAddress,SLAVE_ADDRESS_ADDR); }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { arraya_2_arrayb((uint8_t *)¶meter_bil.fPulseCoefficient,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX], 4, 1); GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 4] = parameter_bil.cDataObtainType; arraya_2_arrayb((uint8_t *)&parmAccess.u16MeterTypeCode , &GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 5], 2, 1); GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7] = parmAccess.u8BaudRateCode; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 8] = parmAccess.u8RS485Parity; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9] = parmAccess.u8EXPVoltageCode; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10] = parameter_bil.u8PulseWidth; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 11] = parmAccess.u8LowPowerAlarmLine; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 12] = parmAccess.u8slaveAddress; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 13] = 0;//DataPackage_xinao.SubmachineNumber for(count_i=0;count_i<16;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14 + count_i] = 0; } ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: SerialNumberSet * desc: * input: * * output: none * return: *****************************************/ void SerialNumberSet(u8 WriteOrRead,u8 FormCode)//ÐòÁкš¢±àºÅ¡¢°æ±¾ºÅµÈÉèÖà { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; CrcLength = HOST_COMPUTER_DATA_INDEX + 92; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { for(count_i=0;count_i<8;count_i++) { gprs_protocol_header.DeviceAddress[count_i] = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX +7-count_i]; FM25V02_data_write(gprs_protocol_header.DeviceAddress[count_i], DeviceAddress_Addr+count_i) ; } //·§ÃÅÐͺÅÅÐ¶Ï if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x10) //50 { regDevSerialNum.EquipmentCaliberAndModel = 4; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x20)//80 { regDevSerialNum.EquipmentCaliberAndModel = 5; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x30)//100 { regDevSerialNum.EquipmentCaliberAndModel = 6; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x40) //150 { regDevSerialNum.EquipmentCaliberAndModel = 7; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x50) //200 { regDevSerialNum.EquipmentCaliberAndModel = 8; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x60) //25 { regDevSerialNum.EquipmentCaliberAndModel = 1; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x70) //32 { regDevSerialNum.EquipmentCaliberAndModel = 2; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x80) //40 { regDevSerialNum.EquipmentCaliberAndModel = 3; } else { regDevSerialNum.EquipmentCaliberAndModel = 8; } for(count_i=0;count_i<3;count_i++) { regDevSerialNum.hardwareVerSn[2-count_i] = ((uint16)UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+8+count_i*2]<<8) + ((uint16)UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+9+count_i*2]); } FM25V02_data_write_uint16(HardwareVerSn1_ADDR, regDevSerialNum.hardwareVerSn[0]) ; FM25V02_data_write_uint16(HardwareVerSn2_ADDR, regDevSerialNum.hardwareVerSn[1]) ; FM25V02_data_write_uint16(HardwareVerSn3_ADDR, regDevSerialNum.hardwareVerSn[2]) ; for(count_i=0;count_i<3;count_i++) { regDevSerialNum.firmwareVer[2-count_i] = ((uint16)UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+16+count_i*2]<<8) + ((uint16)UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+17+count_i*2]); } FM25V02_data_write_uint16(FirmwareVerSn1_ADDR, regDevSerialNum.firmwareVer[0]) ; FM25V02_data_write_uint16(FirmwareVerSn2_ADDR, regDevSerialNum.firmwareVer[1]) ; FM25V02_data_write_uint16(FirmwareVerSn3_ADDR, regDevSerialNum.firmwareVer[2]) ; arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 22] ,(uint8_t *)®DevSerialNum.firmwareCRC, 2, 1); FM25V02_data_write_uint16(FirmwareCRC_ADDR, regDevSerialNum.firmwareCRC); if(regDevSerialNum.EquipmentCaliberAndModel == UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 91]) { } else { regDevSerialNum.EquipmentCaliberAndModel = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 91]; } FM25V02_data_write(regDevSerialNum.EquipmentCaliberAndModel, EquipmentCaliberAndModel_ADDR) ; }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { for(count_i=0;count_i<8;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7 - count_i] = gprs_protocol_header.DeviceAddress[count_i]; } for(count_i=0;count_i<3;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 8 + count_i*2] = regDevSerialNum.hardwareVerSn[2-count_i]>>8; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9 + count_i*2] = regDevSerialNum.hardwareVerSn[2-count_i]; } GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14 + 0] = 0;//regDevSerialNum.firmwareVer[count_i] GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14 + 1] = 0;//regDevSerialNum.firmwareVer[count_i] for(count_i=0;count_i<3;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 16 + count_i*2] = regDevSerialNum.firmwareVer[2-count_i]>>8; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 17 + count_i*2] = regDevSerialNum.firmwareVer[2-count_i]; } arraya_2_arrayb((uint8_t *)®DevSerialNum.firmwareCRC ,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 22], 2, 1); GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 24] = HEX2BCD(regDevSerialNum.firmwareVerDate_year-2000); //¹Ì¼þÈÕÆÚ,´ó¸ÅÊÇ10½øÖÆÊ±¼ä£¬·ÇBCD GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 25] = HEX2BCD(regDevSerialNum.firmwareVerDate_month) ; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 26] = HEX2BCD(regDevSerialNum.firmwareVerDate_day) ; for(count_i=0;count_i<64;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 27 + count_i] = 0; } GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 91] = regDevSerialNum.EquipmentCaliberAndModel; ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: ParameterSettingOfServer * desc: * input: * * output: none * return: *****************************************/ void ParameterSettingOfServer(u8 WriteOrRead,u8 FormCode)//˼Öþ·þÎñÆ÷Ïà¹Ø²ÎÊý101 { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; CrcLength = HOST_COMPUTER_DATA_INDEX + 40; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { for(count_i=0;count_i<4;count_i++) { VariaDlg.ServerIP[count_i] = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + count_i]; FM25V02_data_write(VariaDlg.ServerIP[count_i],IP_Addr + count_i); } arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 4] ,(uint8_t *)&VariaDlg.ServerPort[0], 2, 1); FM25V02_data_write(VariaDlg.ServerPort[0],IP_Addr + 4); FM25V02_data_write(VariaDlg.ServerPort[1],IP_Addr + 5); device_Parm.Tyf = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 14]; device_Parm.Tf = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 15]; FM25V02_data_write(device_Parm.Tyf,Tyf_Addr); FM25V02_data_write(device_Parm.Tf,Ty_Addr); device_Parm.Typ = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 16]; device_Parm.Tp = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 17]; FM25V02_data_write(device_Parm.Typ,Typ_Addr); FM25V02_data_write(device_Parm.Tp,Tp_Addr); Get_Sample_Send_Interval(); device_Parm.time1_flag = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 18]&0x80; device_Parm.sendTiming_hour = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 18]&0x7f; device_Parm.sendTiming_min = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 19]; FM25V02_data_write(device_Parm.time1_flag,Time1_Flag_Addr); FM25V02_data_write(device_Parm.sendTiming_hour,SendTiming_Hour_Addr); FM25V02_data_write(device_Parm.sendTiming_min,SendTiming_Min_Addr); device_Parm.time2_flag = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 20]&0x80; device_Parm.sendTiming_hour2 = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 20]&0x7f; device_Parm.sendTiming_min2 = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 21]; FM25V02_data_write(device_Parm.time2_flag,Time2_Flag_Addr); FM25V02_data_write(device_Parm.sendTiming_hour2,SendTiming_Hour2_Addr); FM25V02_data_write(device_Parm.sendTiming_min2,SendTiming_Min2_Addr); if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 23]< 40) { device_Parm.GPRS_RESTARTTIME = 60; } else { device_Parm.GPRS_RESTARTTIME = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 23]; } FM25V02_data_write(device_Parm.GPRS_RESTARTTIME,GPRS_RestartTime_Addr); }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX ] = VariaDlg.ServerIP[0] ; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 1] = VariaDlg.ServerIP[1] ; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 2] = VariaDlg.ServerIP[2] ; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 3] = VariaDlg.ServerIP[3] ; arraya_2_arrayb((uint8_t *)&VariaDlg.ServerPort[0] ,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 4], 2, 1); for(count_i=0;count_i<6;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 6 + count_i] = 0; } GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 12] = 1; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 13] = 0; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14] = device_Parm.Tyf; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 15] = device_Parm.Tf; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 16] = device_Parm.Typ; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 17] = device_Parm.Tp; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] = device_Parm.time1_flag | device_Parm.sendTiming_hour; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 19] = device_Parm.sendTiming_min; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 20] = device_Parm.time2_flag | device_Parm.sendTiming_hour2; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 21] = device_Parm.sendTiming_min2; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 22] = 0; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 23] = device_Parm.GPRS_RESTARTTIME; for(count_i=0;count_i<16;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 24 + count_i] = 0; } ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: ValveStateSetting * desc: * input: * * output: none * return: *****************************************/ void ValveStateSetting(u8 WriteOrRead,u8 FormCode)//·§ÃÅ״̬ÉèÖÃ122 { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; CrcLength = HOST_COMPUTER_DATA_INDEX + 32; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { if((UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ] == SZV101_VALVE)||(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ] == SZV102_VALVE)||(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ] == SZV103_VALVE)) { Valve_control_parm.Valve_Type = UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ]; FM25V02_data_write(Valve_control_parm.Valve_Type,VALVE_TYPE_ADDR); } if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX + 2] == 2) { OpenValveAuthorizeFLAG = 0x01; //ÆÕͨÊÚȨ¿ª·§±êÖ¾ FM25V02_data_write(OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR); } else if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX + 2] == 1) { OpenValveAuthorizeFLAG = 0x00; //ÆÕͨÊÚȨ¿ª·§±êÖ¾ FM25V02_data_write(OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR); } }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX ] = Valve_control_parm.Valve_Type; if(OpenValveFLAG == 1) //¿ª·§ÖÐ { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x44; } else if(OpenValveFLAG == 2) { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x55; //Èç¹ûûÓз§ÃÅĬÈÏ0x11£¬·§ÃÅ´ò¿ª } else if(gprs_protocol_header.Valve_Status==1) { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x11; //Èç¹ûûÓз§ÃÅĬÈÏ0x11£¬·§ÃÅ´ò¿ª } else if(gprs_protocol_header.Valve_Status==2) { if(OpenValveAuthorizeFLAG == 0x01) { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x22; }else { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x33; } } else if(gprs_protocol_header.Valve_Status == 3) { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x66; } else { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x11; } if(OpenValveAuthorizeFLAG == 1) { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 2] = 2; } else if(OpenValveAuthorizeFLAG == 0) { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 2] = 1; } else { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 2] = 0; } for(count_i=0;count_i<29;count_i++) { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX +3 +count_i] = 0; } ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: ParameterSettingOfServer * desc: * input: * * output: none * return: *****************************************/ void FunctionParameterSetting(u8 WriteOrRead,u8 FormCode)//¹¦ÄܲÎÊý103 { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; CrcLength = HOST_COMPUTER_DATA_INDEX + 51; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { // if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX]&0x01)==0x01) // { // IOT_Parameter.HighAmbientTemAlarmFlag = 1; // FM25V02_data_write(IOT_Parameter.HighAmbientTemAlarmFlag,HIGH_AMBIENT_TEM_ALARM_FLAG_ADDR); // }else // { // IOT_Parameter.HighAmbientTemAlarmFlag = 0; // FM25V02_data_write(IOT_Parameter.HighAmbientTemAlarmFlag,HIGH_AMBIENT_TEM_ALARM_FLAG_ADDR); // } // if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+2]&0x01)==0x01) // { // IOT_Parameter.ValveAbnormalCloseValveFlag = 1; // FM25V02_data_write(IOT_Parameter.ValveAbnormalCloseValveFlag,VALVE_ABNORMAL_CLOSE_FLAG_ADDR); // }else // { // IOT_Parameter.ValveAbnormalCloseValveFlag = 0; // FM25V02_data_write(IOT_Parameter.ValveAbnormalCloseValveFlag,VALVE_ABNORMAL_CLOSE_FLAG_ADDR); // } // if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+4]&0x01)==0x01) // { // IOT_Parameter.PowerUpReportFlag = 1; // FM25V02_data_write(IOT_Parameter.PowerUpReportFlag,POWER_UP_REPORT_FLAG_ADDR); // }else // { // IOT_Parameter.PowerUpReportFlag = 0; // FM25V02_data_write(IOT_Parameter.PowerUpReportFlag,POWER_UP_REPORT_FLAG_ADDR); // } if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+5]&0x01)==0x01) { if(device_Parm.AccountStatus!=1) { device_Parm.AccountStatus = 1; Settlement_Para.fBalance = 0; FM25V02_data_write(device_Parm.AccountStatus,ACCOUNT_STATUS_ADDR); Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR); BillRecord(); ClearCardinalFlag(); VariaDlg.ReceivedInstructionFlag = 1;//¼°Ê±Á˽âÓà¶î״̬ } }else { if(device_Parm.AccountStatus!=0) { device_Parm.AccountStatus = 0; Settlement_Para.fBalance = 10; FM25V02_data_write(device_Parm.AccountStatus,ACCOUNT_STATUS_ADDR); Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR); BillRecord(); ClearCardinalFlag(); VariaDlg.ReceivedInstructionFlag = 1;//¼°Ê±Á˽âÓà¶î״̬ } } if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+6]&0x01)==0x01) { LCD_flag = 1; FM25V02_data_write(LCD_flag,LCD_FLAG_ADDR); }else { LCD_flag = 0; FM25V02_data_write(LCD_flag,LCD_FLAG_ADDR); } if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+7]&0x01)==0x01)//й¶±¨¾¯ { parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine | 0x04; FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR); }else { parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine & 0xFB; FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR); } // if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+8]&0x01)==0x01) // { // IOT_Parameter.RS485AbnormalCloseValveFlag = 1; // FM25V02_data_write(IOT_Parameter.RS485AbnormalCloseValveFlag,RS485_ABNORMAL_CLOSE_FLAG_ADDR); // }else // { // IOT_Parameter.RS485AbnormalCloseValveFlag = 0; // FM25V02_data_write(IOT_Parameter.RS485AbnormalCloseValveFlag,RS485_ABNORMAL_CLOSE_FLAG_ADDR); // } // if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+9]&0x01)==0x01) // { // IOT_Parameter.HourlyStorageFlag = 1; // FM25V02_data_write(IOT_Parameter.HourlyStorageFlag,HOURLY_STORAGE_FLAG_ADDR); // }else // { // IOT_Parameter.HourlyStorageFlag = 0; // FM25V02_data_write(IOT_Parameter.HourlyStorageFlag,HOURLY_STORAGE_FLAG_ADDR); // } ///jlcÂö³åÏß¶ÏÏß±¨¾¯¹Ø·§¹¦ÄÜ ///jlcÆøÌåй©¹Ø·§¹¦ÄÜ£¬Ä¬ÈÏÆôÓà // if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+10] == 1) //³¤ÆÚÔÚÏß¹¦ÄÜ // { // IOT_Parameter.StayOnlineFlag = 1; // FM25V02_data_write(IOT_Parameter.StayOnlineFlag,STAY_ONLINE_FLAG_ADDR); // }else // { // IOT_Parameter.StayOnlineFlag = 0; // FM25V02_data_write(IOT_Parameter.StayOnlineFlag,STAY_ONLINE_FLAG_ADDR); // } // if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+11] == 1) //ÐéÄâ¼Æ·Ñ¹¦ÄÜ // { // IOT_Parameter.BillingTypeFlag = 1; // FM25V02_data_write(IOT_Parameter.BillingTypeFlag,BILLING_TYPE_FLAG_ADDR); // }else // { // IOT_Parameter.BillingTypeFlag = 0; // FM25V02_data_write(IOT_Parameter.BillingTypeFlag,BILLING_TYPE_FLAG_ADDR); // } ///¶Ô½ÓÉ豸µÍµç±¨¾¯ if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+15]&0x01)==0x01) { parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine | 0x01; FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR); }else { parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine & 0xFE; FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR); } ///¶Ô½ÓÉ豸Ƿµç±¨¾¯ if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+16]&0x01)==0x01) { parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine | 0x02; FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR); }else { parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine & 0xFD; FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR); } ///·§¶Ë¼Æ·ÑģʽѡÔñ if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+18]==0x00) { if(Settlement_Para.RS485SettlementFlag==1) { Settlement_Para.RS485SettlementFlag = 0; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } }else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+18]==0x01) { if(Settlement_Para.RS485SettlementFlag==1) { Settlement_Para.RS485SettlementFlag = 0; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } }else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+18]==0x02) { if(Settlement_Para.RS485SettlementFlag==0) { Settlement_Para.RS485SettlementFlag = 1; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } }else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+18]==0x03) { if(Settlement_Para.RS485SettlementFlag==0) { Settlement_Para.RS485SettlementFlag = 1; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } } //¼Æ·ÑģʽѡÔñ 0-±í¶Ë 1-ºǫ́ if(__UPPER_DATA_ALTER(BalanceSaveType,UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 19])) { switch(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 19]) { case 0: BalanceSaveType = 0; break; case 1: // BillingTypeFlag = 1;//ÐéÄâ¼Æ·Ñ BalanceSaveType = 1;//¼Æ·ÑģʽѡÔñ break; default:break; } FM25V02_data_write(BalanceSaveType,BALANCE_SAVE_TYPE_ADDR); } if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+20]==0x00) { device_Parm.Logo_Display_Flag = 0; FM25V02_data_write(device_Parm.Logo_Display_Flag,LOGO_DISPLAY_FLAG_ADDR); } else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+20]==0x01) { device_Parm.Logo_Display_Flag = 1; FM25V02_data_write(device_Parm.Logo_Display_Flag,LOGO_DISPLAY_FLAG_ADDR); } if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+23]==0x00) { device_Parm.show_balance_flag = 0; FM25V02_data_write(device_Parm.show_balance_flag,SHOW_BALANCE_FLAG_ADDR); } else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+23]==0x01) { device_Parm.show_balance_flag = 1; FM25V02_data_write(device_Parm.show_balance_flag,SHOW_BALANCE_FLAG_ADDR); } if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+24]==0x00) { device_Parm.show_price_flag = 0; FM25V02_data_write(device_Parm.show_price_flag,SHOW_PRICE_FLAG_ADDR); } else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+24]==0x01) { device_Parm.show_price_flag = 1; FM25V02_data_write(device_Parm.show_price_flag,SHOW_PRICE_FLAG_ADDR); } }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX ] = 0;//IOT_Parameter.HighAmbientTemAlarmFlag GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 1] = 0; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 2] = 0;//IOT_Parameter.ValveAbnormalCloseValveFlag GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 3] = 0; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 4] = 0;//IOT_Parameter.PowerUpReportFlag GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 5] = device_Parm.AccountStatus;// GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 6] = LCD_flag; if((parmAccess.u8LowPowerAlarmLine&0x04)==0x04) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7] = 1; }else { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7] = 0; } GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 8] = 0;//IOT_Parameter.RS485AbnormalCloseValveFlag GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9] = 0;//IOT_Parameter.HourlyStorageFlag GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10] = 0;//IOT_Parameter.StayOnlineFlag GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 11] = 0;//IOT_Parameter.BillingTypeFlag if((parameter_bil.cDataObtainType & PULSE_MODE) == PULSE_MODE) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 12] = 1;///jlcÂö³åÏß¶ÏÏß±¨¾¯¹Ø·§¹¦ÄÜ GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 13] = 1;///jlcÂö³åÏß¶ÏÏß±¨¾¯¹Ø·§¹¦ÄÜ }else { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 12] = 0;///jlcÂö³åÏß¶ÏÏß±¨¾¯¹Ø·§¹¦ÄÜ GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 13] = 0;///jlcÂö³åÏß¶ÏÏß±¨¾¯¹Ø·§¹¦ÄÜ } if((parmAccess.u8LowPowerAlarmLine&0x04)==0x04) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14] = 1;///jlcÆøÌåй©¹Ø·§¹¦ÄÜ }else { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14] = 0; } if((parmAccess.u8LowPowerAlarmLine&0x01)==0x01) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 15] = 1; }else { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 15] = 0; } if((parmAccess.u8LowPowerAlarmLine&0x02)==0x02) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 16] = 1; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 17] = 1; }else { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 16] = 0; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 17] = 0; } GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] = 0; if((parameter_bil.cDataObtainType & PULSE_MODE) == PULSE_MODE) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] = GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] | 0x01; } if(Settlement_Para.RS485SettlementFlag==1) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] = GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] | 0x02; } if(BalanceSaveType == 1) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 19] = 1; } else { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 19] = 0; } if(device_Parm.Logo_Display_Flag==0) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 20] =0; } else { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 20] =1; } GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 21] = 0; GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 22] = 0; if(device_Parm.show_balance_flag==0) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 23] =0; } else { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 23] =1; } if(device_Parm.show_price_flag==0) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 24] =0; } else { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 24] =1; } for(count_i=0;count_i<26;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 25 + count_i] = 0; } ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: AbnormalSetting * desc: * input: * * output: none * return: *****************************************/ void AbnormalSetting(u8 WriteOrRead,u8 FormCode)//Òì³£²Ù×÷123 { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; CrcLength = HOST_COMPUTER_DATA_INDEX + 65; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ] == 0x01) { system_alarm.alarm_E2RW_read_abnormal_FLAG =0; FM25V02_data_write(system_alarm.alarm_E2RW_read_abnormal_FLAG,E2RW_READ_ABNORMAL_FLAG_ADDR); system_alarm.alarm_E2RW_write_abnormal_FLAG =0; FM25V02_data_write(system_alarm.alarm_E2RW_write_abnormal_FLAG,E2RW_WRITE_ABNORMAL_FLAG_ADDR); system_alarm.alarm_Gas_Leak_LCDFLAG = 0; system_alarm.alarm_Gas_Leak_time = 0; }else if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ] == 0x00) { if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX +1] == 0x00) { system_alarm.alarm_E2RW_read_abnormal_FLAG =0; FM25V02_data_write(system_alarm.alarm_E2RW_read_abnormal_FLAG,E2RW_READ_ABNORMAL_FLAG_ADDR); } if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX +2] == 0x00) { system_alarm.alarm_E2RW_write_abnormal_FLAG =0; FM25V02_data_write(system_alarm.alarm_E2RW_write_abnormal_FLAG,E2RW_WRITE_ABNORMAL_FLAG_ADDR); } if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX +3] == 0x00) { system_alarm.alarm_Gas_Leak_LCDFLAG =0; system_alarm.alarm_Gas_Leak_time = 0; } } }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX ] = 0; GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX +1 ] = system_alarm.alarm_E2RW_read_abnormal_FLAG; GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX +2 ] = system_alarm.alarm_E2RW_write_abnormal_FLAG; GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX +3 ] = system_alarm.alarm_Gas_Leak_LCDFLAG; for(count_i=0;count_i<61;count_i++) { GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX +4 +count_i] = 0; } ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: ValveControlTimes * desc: * input: * * output: none * return: *****************************************/ void ValveControlTimes(u8 WriteOrRead,u8 FormCode) { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; CrcLength = HOST_COMPUTER_DATA_INDEX + 4; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { } else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { arraya_2_arrayb((uint8_t *)&ValveOpenTimes,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX +0], 2, 1); arraya_2_arrayb((uint8_t *)&ValveCloseTimes,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX +2], 2, 1); ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: CumulantsModificationSetting * desc: * input: * * output: none * return: *****************************************/ void CumulantsModificationSetting(u8 WriteOrRead,u8 FormCode)//ÀÛ»ýÁ¿ÐÞ¸Ä106 { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; u8 ModifyResult=0; u8 GasModifyFlag=0; u8 FeeModifyFlag=0; double PreModifyGasValue ; double PreModifyFeeValue ; double ModifiedGasValue ; double ModifiedFeeValue ; CrcLength = HOST_COMPUTER_DATA_INDEX + 50; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { PreModifyGasValue = Settlement_Para.fCumulativeGasUsage; PreModifyFeeValue = Settlement_Para.fCumulativeFeeUsage; GasModifyFlag = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX]; if(GasModifyFlag==1) { arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 1] ,(uint8_t *)&ModifiedGasValue, 8, 1); if((ModifiedGasValue>=0)&&(ModifiedGasValue<=GAS_USAGE_UP_LIMIT)) { Settlement_Para.fCumulativeGasUsage = ModifiedGasValue; Write_Verification(Settlement_Para.fCumulativeGasUsage,REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR); FM25V02_data_write_double(GAS_USAGE_BIL_ADDR, Settlement_Para.fCumulativeGasUsage); }else { SetResult = 1; } } FeeModifyFlag = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 9]; if(FeeModifyFlag==1) { arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 10] ,(uint8_t *)&ModifiedFeeValue, 8, 1); if((ModifiedFeeValue>=0)&&(ModifiedFeeValue<=FEE_USAGE_UP_LIMIT)) { Settlement_Para.fCumulativeFeeUsage = ModifiedFeeValue; Write_Verification(Settlement_Para.fCumulativeFeeUsage,REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR); FM25V02_data_write_double(FEE_USAGE_BIL_ADDR, Settlement_Para.fCumulativeFeeUsage); }else { SetResult = 1; } } if((FeeModifyFlag==1)||(GasModifyFlag==1)) { CumulantsRecord(GasModifyFlag,PreModifyGasValue,FeeModifyFlag,PreModifyFeeValue); } }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX ] = 0 ; arraya_2_arrayb( (uint8_t *)&Settlement_Para.fCumulativeGasUsage,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 1], 8, 1); GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9] = 0 ; arraya_2_arrayb( (uint8_t *)&Settlement_Para.fCumulativeFeeUsage,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10], 8, 1); for(count_i=0;count_i<32;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18 + count_i] = 0; } ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: BalanceModificationSetting * desc: * input: * * output: none * return: *****************************************/ void BalanceModificationSetting(u8 WriteOrRead,u8 FormCode)//Óà¶îÐÞ¸Ä107 { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; u8 BalanceModifyFlag=0; double ModifiedBalanceValue ; CrcLength = HOST_COMPUTER_DATA_INDEX + 41; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { BalanceModifyFlag = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX]; if(BalanceModifyFlag==1) { arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 1] ,(uint8_t *)&ModifiedBalanceValue, 8, 1); if((ModifiedBalanceValue>=BALANCE_LOWER_LIMIT)&&(ModifiedBalanceValue<=BALANCE_UP_LIMIT)) { // Settlement_Para.fBalance = ModifiedBalanceValue; // Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR); // FM25V02_data_write_double(BALANCE_BIL_ADDR , Settlement_Para.fBalance); //if(ModifiedBalanceValue==0) if(1) { BalanceModify(ModifiedBalanceValue); BillRecord(); VariaDlg.ReceivedInstructionFlag = 1; if(Settlement_Para.fBalance<=parameter_bil.iBalanceInsufAlarmAmount) { system_alarm.alarm_Balance_Small_LCDFLAG = 0x01; } else { system_alarm.alarm_Balance_Small_LCDFLAG = 0x00; } } else { SetResult = 1; } }else { SetResult = 1; } } }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX ] = 0 ; arraya_2_arrayb( (uint8_t *)&Settlement_Para.fBalance,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 1], 8, 1); for(count_i=0;count_i<32;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9 + count_i] = 0; } ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: CumModify_Record_Read * desc: * input: * * output: none * return: *****************************************/ void CumModify_Record_Read(u8 WriteOrRead,u8 FormCode)//ÀÛ»ýÁ¿Ð޸ļǼ¶ÁÈ¡115 { u16 count_i,count_j; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; u32 current_para_record_addr; u16 Read_index=0; u16 ReadNum; CrcLength = HOST_COMPUTER_DATA_INDEX + 160; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { for(count_i=0;count_i<16;count_i++) { } }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { for(count_i=0;count_i<8;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7 - count_i] = gprs_protocol_header.DeviceAddress[count_i]; } if(system_record.u8CumulantsStoreFullFlag == 1 ) { ReadNum = 10; //ÏÈ×î¶à·µ»Ø10Ìõ¼Ç¼ } else { if(system_record.u16CumulantsRecordNUM>=10) { ReadNum = 10;//ÏÈ×î¶à·µ»Ø10Ìõ¼Ç¼ }else { ReadNum = system_record.u16CumulantsRecordNUM; } } CrcLength = HOST_COMPUTER_DATA_INDEX + ReadNum * 40 + 10; if(ReadNum>system_record.u16CumulantsRecordNUM) { Read_index = system_record.u16CumulantsRecordNUM + CUMULANTS_MODIFY_RECORD_NUM - ReadNum; } else { Read_index = system_record.u16CumulantsRecordNUM - ReadNum; } //GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9] = (u8)ReadNum; //GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 8] = (u8)(ReadNum>>8); arraya_2_arrayb((uint8_t *)&ReadNum ,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX +8], 2, 1); for(count_i=0;count_i=CUMULANTS_MODIFY_RECORD_NUM) { Read_index = 0; } } ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: Alarm_Record_Read * desc: * input: * * output: none * return: *****************************************/ void Alarm_Record_Read(u8 WriteOrRead,u8 FormCode)//±¨¾¯¶ÁÈ¡112 { u16 count_i,count_j; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; u32 current_para_record_addr; u16 Read_index=0; u16 ReadNum; u16 AlarmCode; CrcLength = HOST_COMPUTER_DATA_INDEX + 160; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { for(count_i=0;count_i<16;count_i++) { } }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { for(count_i=0;count_i<8;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7 - count_i] = gprs_protocol_header.DeviceAddress[count_i]; } if(system_alarm.u8AlarmStoreFullFlag == 1 ) { ReadNum = 50; //ÏÈ×î¶à·µ»Ø50Ìõ¼Ç¼ } else { if(system_alarm.u16AlarmStoreNum>=50) { ReadNum = 50;//ÏÈ×î¶à·µ»Ø50Ìõ¼Ç¼ }else { ReadNum = system_alarm.u16AlarmStoreNum; } } CrcLength = HOST_COMPUTER_DATA_INDEX + ReadNum * 8 + 10; if(ReadNum>system_alarm.u16AlarmStoreNum) { Read_index = system_alarm.u16AlarmStoreNum + ALARM_RECORD_NUM - ReadNum; } else { Read_index = system_alarm.u16AlarmStoreNum - ReadNum; } //GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9] = (u8)ReadNum; //GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 8] = (u8)(ReadNum>>8); arraya_2_arrayb((uint8_t *)&ReadNum ,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX +8], 2, 1); for(count_i=0;count_i=ALARM_RECORD_NUM) { Read_index = 0; } } ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: XinaoKeySetting * desc: * input: * * output: none * return: *****************************************/ void XinaoKeySetting(u8 WriteOrRead,u8 FormCode)//аÂÃÜÔ¿ÉèÖÃ111 { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; CrcLength = HOST_COMPUTER_DATA_INDEX + 160; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { // for(count_i=0;count_i<144;count_i++) // { // KVer_AES_128_xinao[count_i/16][count_i%16] = UTR_rec_buff[count_i + HOST_COMPUTER_DATA_INDEX ]; // FM25V02_data_write(KVer_AES_128_xinao[count_i/16][count_i%16] , OPERATING_KEY_ADDR + count_i); // } // // if(UTR_rec_buff[144 + HOST_COMPUTER_DATA_INDEX ]==0x01) // { // IOT_Parameter.OperatingKeyState = UTR_rec_buff[144 + HOST_COMPUTER_DATA_INDEX ]; /// // FM25V02_data_write(IOT_Parameter.OperatingKeyState,OPERATING_KEY_STATE_ADDR); // }else if(UTR_rec_buff[144 + HOST_COMPUTER_DATA_INDEX ]==0x00) // { // IOT_Parameter.OperatingKeyState = 0; /// // FM25V02_data_write(IOT_Parameter.OperatingKeyState,OPERATING_KEY_STATE_ADDR); // } }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); }else if(WriteOrRead==1) { for(count_i=0;count_i<16;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + count_i] = KVer_AES_128[count_i]; } for(count_i=0;count_i<128;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 16 + count_i] = 0; } GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 144] = 0; for(count_i=0;count_i<15;count_i++) { GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 145 + count_i] = 0; } ReturnAfterReading(CrcLength,FormCode); } } /****************************************** * func: OneClickInitXA * desc: * input: * * output: none * return: *****************************************/ void OneClickInitXA(u8 WriteOrRead,u8 FormCode)//³äÖµÐÅÏ¢ÉèÖÃ116 { u16 count_i; u16 CrcCheck; u16 CrcLength; u8 SetResult=0; u32 Password; CrcLength = HOST_COMPUTER_DATA_INDEX + 4; if(WriteOrRead==0) { CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength]; if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé { arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX ],(uint8_t *)&Password , 4, 1); if(Password ==VAR_RESET_PASSWORD ) { Variable_Reset(); }else { SetResult = 1; } }else { SetResult = 1; } ReturnAfterSetting(SetResult,FormCode); if(SetResult==0) { //Èí¼þ×Ô¶¯¸´Î» delay_ms(100); // SystemReset(); //**¸´µ©Î¢Ð¾Æ¬µÄboot³ÌÐò²»ÊÇ֮ǰµÄ²Ù×÷£¬¹ÊÏÈ×¢ÊÍ } }else if(WriteOrRead==1) { } } /****************************************** * func: UART1_Set_SZ * desc: ??UART1????,??DTU??,??????IP?????????? * input: * * output: none * return: *****************************************/ void UART1_Set_SZ(void) { uint16_t NOW_year; uint8_t NOW_month,NOW_day,NOW_hour,NOW_min; uint8_t CalculateFlag = 0; int i_index =0; unsigned char temp; uint16_t read_num; // uint16_t cnt_break=0; u8 write_return_buffer[3] = {0,0,0x16}; if((UTR_rec_buff[0] == 0x54)&&(UTR_rec_buff[1] == 0x54)&&(UTR_rec_cnt >= 10)&&(UTR_rec_buff[9]==0x16)) { if((UTR_rec_cnt >= 10)&&(UTR_rec_buff[9]==0x16)) { net_now_time.yearN = UTR_rec_buff[2]; net_now_time.monthN = UTR_rec_buff[3]; net_now_time.dateN = UTR_rec_buff[4]; net_now_time.hourN = UTR_rec_buff[5]; net_now_time.minN = UTR_rec_buff[6]; net_now_time.secN = UTR_rec_buff[7]; Time_Set(net_now_time.yearN+0x2000,net_now_time.monthN,net_now_time.dateN,1,net_now_time.hourN,net_now_time.minN,net_now_time.secN); CalculateFlag = 1; if(CalculateFlag ==1) { write_return_buffer[0] = write_return_buffer[1] = 0x55; UTR_Send_Data(write_return_buffer,3); // UTR_Send_Data((u8 *)0x55,1); // UTR_Send_Data((u8 *)0x55,1); // UTR_Send_Data((u8 *)0x16,1); delay_ms(10); } UTR_rec_cnt = 0; for(i_index=0;i_index<50;i_index++) { UTR_rec_buff[i_index] = 0; } } } else if((UTR_rec_buff[0] == 0x68)&&(UTR_rec_buff[1] == 0x68)&&(UTR_rec_cnt >= 41)&&(UTR_rec_buff[40]==0x16)) { if((UTR_rec_cnt >= 41)&&(UTR_rec_buff[40]==0x16)) { CalculateFlag = 1; for(i_index = 0;i_index < 8;i_index ++) { gprs_protocol_header.DeviceAddress[i_index] = UTR_rec_buff[2+i_index]; FM25V02_data_write(gprs_protocol_header.DeviceAddress[i_index],DeviceAddress_Addr + i_index); } //·§ÃÅÐͺÅÅÐ¶Ï if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x10) //50 { regDevSerialNum.EquipmentCaliberAndModel = 4; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x20)//80 { regDevSerialNum.EquipmentCaliberAndModel = 5; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x30)//100 { regDevSerialNum.EquipmentCaliberAndModel = 6; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x40) //150 { regDevSerialNum.EquipmentCaliberAndModel = 7; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x50) //200 { regDevSerialNum.EquipmentCaliberAndModel = 8; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x60) //25 { regDevSerialNum.EquipmentCaliberAndModel = 1; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x70) //32 { regDevSerialNum.EquipmentCaliberAndModel = 2; } else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x80) //40 { regDevSerialNum.EquipmentCaliberAndModel = 3; } else { regDevSerialNum.EquipmentCaliberAndModel = 8; } FM25V02_data_write(regDevSerialNum.EquipmentCaliberAndModel, EquipmentCaliberAndModel_ADDR) ; for(i_index=0;i_index<4;i_index++) { VariaDlg.ServerIP[i_index] = UTR_rec_buff[10+i_index]; FM25V02_data_write(VariaDlg.ServerIP[i_index],IP_Addr + i_index); } VariaDlg.ServerPort[0] = UTR_rec_buff[14]; //????? VariaDlg.ServerPort[1] = UTR_rec_buff[15]; FM25V02_data_write(VariaDlg.ServerPort[0],IP_Addr + 4); FM25V02_data_write(VariaDlg.ServerPort[1],IP_Addr + 5); device_Parm.Tyf = UTR_rec_buff[16]; device_Parm.Tf = UTR_rec_buff[17]; FM25V02_data_write(device_Parm.Tyf,Tyf_Addr); FM25V02_data_write(device_Parm.Tf,Ty_Addr); device_Parm.Typ = UTR_rec_buff[18]; device_Parm.Tp = UTR_rec_buff[19]; FM25V02_data_write(device_Parm.Typ,Typ_Addr); FM25V02_data_write(device_Parm.Tp,Tp_Addr); Get_Sample_Send_Interval(); device_Parm.time1_flag = UTR_rec_buff[20]&0x80; device_Parm.sendTiming_hour = UTR_rec_buff[20]&0x7f; device_Parm.sendTiming_min = UTR_rec_buff[21]; FM25V02_data_write(device_Parm.time1_flag,Time1_Flag_Addr); FM25V02_data_write(device_Parm.sendTiming_hour,SendTiming_Hour_Addr); FM25V02_data_write(device_Parm.sendTiming_min,SendTiming_Min_Addr); device_Parm.time2_flag = UTR_rec_buff[22]&0x80; device_Parm.sendTiming_hour2 = UTR_rec_buff[22]&0x7f; device_Parm.sendTiming_min2 = UTR_rec_buff[23]; FM25V02_data_write(device_Parm.time2_flag,Time2_Flag_Addr); FM25V02_data_write(device_Parm.sendTiming_hour2,SendTiming_Hour2_Addr); FM25V02_data_write(device_Parm.sendTiming_min2,SendTiming_Min2_Addr); device_Parm.GPRS_RESTARTTIME = UTR_rec_buff[24]; if(device_Parm.GPRS_RESTARTTIME < 40) { device_Parm.GPRS_RESTARTTIME = 60; } FM25V02_data_write(device_Parm.GPRS_RESTARTTIME,GPRS_RestartTime_Addr); if(UTR_rec_buff[25] ==0) { parameter_bil.cDataObtainType = PULSE_MODE; if(Settlement_Para.RS485SettlementFlag!=0) { Settlement_Para.RS485SettlementFlag = 0; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } } else if(UTR_rec_buff[25] ==1) { parameter_bil.cDataObtainType = RS485_AND_PULSE_MODE; if(Settlement_Para.RS485SettlementFlag==0) { Settlement_Para.RS485SettlementFlag = 1; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } } else if(UTR_rec_buff[25] ==2) { parameter_bil.cDataObtainType = RS485_MODE; if(Settlement_Para.RS485SettlementFlag==0) { Settlement_Para.RS485SettlementFlag = 1; FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR); ClearCardinalFlag(); } system_alarm.alarm_Pulse_Broken_LCDFLAG = 0; } else { } FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR); if((parameter_bil.cDataObtainType & RS485_MODE)!= RS485_MODE) { parmAccess.Vbt_Flag = 0; parmAccess.VT_permission = 0; parmAccess.VbT_permission = 0; parmAccess.Q_permission = 0; parmAccess.Qb_permission = 0; parmAccess.TEMP_permission = 0; parmAccess.PRES_permission = 0; } parmAccess.u16MeterTypeCode = (u16)UTR_rec_buff[27]*256 + UTR_rec_buff[26]; FM25V02_data_write_uint16(METER_TYPE_CODE_ADDR,parmAccess.u16MeterTypeCode); if((parameter_bil.cDataObtainType & PULSE_MODE)== PULSE_MODE) { if((parmAccess.u16MeterTypeCode==ASMODBUS)||(parmAccess.u16MeterTypeCode==AS100MODBUS)||(parmAccess.u16MeterTypeCode==SIARGO_MODBUS)) //ÅжÏÊÇ·ñ°®ÖªÁ÷Á¿¼Æ£¬°®ÖªÁ÷Á¿¼ÆÂö³åʶ±ð²ÉÓ÷½²¨ÉÏÉýÑØÊ¶±ð·½Ê½ { LOW_PULSE_Rising_config(); Low_Pluse_GPIO_Init(); } else { LOW_PULSE_config(); Low_Pluse_GPIO_Init(); } }else { LOW_PULSE_Rising_disconfig(); Low_Pluse_GPIO_sleep_Init(); } parmAccess.u8BaudRateCode =UTR_rec_buff[28]; FM25V02_data_write(parmAccess.u8BaudRateCode ,BAUD_RATE_CODE_ADDR); parmAccess.u8RS485Parity =UTR_rec_buff[29]; FM25V02_data_write(parmAccess.u8RS485Parity ,RS485_PARITY_ADDR); parmAccess.u8EXPVoltageCode =UTR_rec_buff[30]; FM25V02_data_write(parmAccess.u8EXPVoltageCode ,EXP_VOLTAGE_CODE_ADDR); parameter_bil.u8PulseWidth = UTR_rec_buff[31]; FM25V02_data_write(parameter_bil.u8PulseWidth,PULSE_WITDH_ADDR); parmAccess.u8LowPowerAlarmLine = UTR_rec_buff[32]; FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR); if(UTR_rec_buff[33]==0) { LOGO_Flag = 0; }else if(UTR_rec_buff[33]==1) { LOGO_Flag = 1; }else { LOGO_Flag = 0; } FM25V02_data_write(LOGO_Flag,LCD_LOGO_ADDR); if(UTR_rec_buff[34] != 0) modbus_dev_para.slave_addr = UTR_rec_buff[34]; FM25V02_data_write(modbus_dev_para.slave_addr,MODBUS_SLAVE_ADDR); UTR_rec_cnt = 0; write_return_buffer[0] = write_return_buffer[1] = 0x69; UTR_Send_Data(write_return_buffer,3); // UTR_Send_Data((u8 *)0x69,1); // UTR_Send_Data((u8 *)0x69,1); // UTR_Send_Data((u8 *)0x16,1); for(i_index=0;i_index<50;i_index++) { UTR_rec_buff[i_index] = 0; } } } else if((UTR_rec_buff[0] == 0x42)&&(UTR_rec_buff[1] == 0x42)&&(UTR_rec_cnt >= 4)&&(UTR_rec_buff[3]==0x16)) { if((UTR_rec_cnt >= 4)&&(UTR_rec_buff[3]==0x16)) { Send_ParaUp(); UTR_rec_cnt = 0; for(i_index=0;i_index<50;i_index++) { UTR_rec_buff[i_index] = 0; } } } // else if((UTR_rec_buff[0] == 0x44)&&(UTR_rec_buff[1] == 0x44)&&(UTR_rec_cnt >= 64)&&(UTR_rec_buff[63]==0x16)) // { // UTR_rec_cnt = 0; // //Set_Billing_Para(); //´Ë¹¦ÄÜÉ÷ÖØÊ¹Óã¬ÔÝʱ²»ÔÊÐíÏÖ³¡Í¨¹ýÉÏλ»úÐ޸ļƷѲÎÊý£¬²»°²È«¡£ // // for(i_index=0;i_index<80;i_index++) // { // UTR_rec_buff[i_index] = 0; // } // } else if((UTR_rec_buff[0] == 0x41)&&(UTR_rec_buff[1] == 0x41)&&(UTR_rec_cnt >= 3)&&(UTR_rec_buff[2]==0x16)) { if((UTR_rec_cnt >= 3)&&(UTR_rec_buff[2]==0x16)) { UTR_rec_cnt = 0; for(i_index=0;i_index<50;i_index++) { UTR_rec_buff[i_index] = 0; } //SendHistoricalData(); } } else if((UTR_rec_buff[0] == 0x46)&&(UTR_rec_buff[1] == 0x46)&&(UTR_rec_cnt >= 5)&&(UTR_rec_buff[5]==0x16)) { UTR_rec_cnt = 0; read_num = (u16)UTR_rec_buff[3] * 256; read_num = read_num + UTR_rec_buff[2]; Send_Bil_Record(read_num); for(i_index=0;i_index<10;i_index++) { UTR_rec_buff[i_index] = 0; } } else if((UTR_rec_buff[0] == 0x48)&&(UTR_rec_buff[1] == 0x48)&&(UTR_rec_cnt >= 5)&&(UTR_rec_buff[5]==0x16)) { UTR_rec_cnt = 0; read_num = (u16)UTR_rec_buff[3] * 256; read_num = read_num + UTR_rec_buff[2]; Send_Alarm_Record(read_num); for(i_index=0;i_index<10;i_index++) { UTR_rec_buff[i_index] = 0; } } else if((UTR_rec_buff[0] == 0x50)&&(UTR_rec_buff[1] == 0x50)&&(UTR_rec_cnt >= 40)&&(UTR_rec_buff[39]==0x16)) { UTR_rec_cnt = 0; VerRegisterSet(); write_return_buffer[0] = write_return_buffer[1] = 0x51; UTR_Send_Data(write_return_buffer,3); // UTR_Send_Data((u8 *)0x51,1); // UTR_Send_Data((u8 *)0x51,1); // UTR_Send_Data((u8 *)0x16,1); for(i_index=0;i_index<50;i_index++) { UTR_rec_buff[i_index] = 0; } } else if((UTR_rec_buff[0] == 0x52)&&(UTR_rec_buff[1] == 0x52)&&(UTR_rec_cnt >= 4)&&(UTR_rec_buff[3]==0x16)) { UTR_rec_cnt = 0; VerRegisterRead(); for(i_index=0;i_index<50;i_index++) { UTR_rec_buff[i_index] = 0; } } else if((UTR_rec_buff[0] == 0x56)&&(UTR_rec_buff[1] == 0x56)&&(UTR_rec_cnt >= 21)&&(UTR_rec_buff[21]==0x16)) //ÐÞ¸ÄÀÛ»ýÁ¿ { UTR_rec_cnt = 0; CumulantsModify(); //ÀÛ»ýÁ¿ÐÞ¸Ä for(i_index=0;i_index<50;i_index++) { UTR_rec_buff[i_index] = 0; } } else if((UTR_rec_buff[0] == 0x58)&&(UTR_rec_buff[1] == 0x58)&&(UTR_rec_cnt >= 5)&&(UTR_rec_buff[5]==0x16)) //ÀÛ»ýÁ¿Ð޸ļǼ¶ÁÈ¡ { UTR_rec_cnt = 0; read_num = (u16)UTR_rec_buff[3] * 256; read_num = read_num + UTR_rec_buff[2]; Send_Cumulants_Record(read_num); for(i_index=0;i_index<50;i_index++) { UTR_rec_buff[i_index] = 0; } } else if((UTR_rec_buff[0] == 0x60)&&(UTR_rec_buff[1] == 0x60)&&(UTR_rec_cnt >= 35)&&(UTR_rec_buff[35]==0x16)) // { UTR_rec_cnt = 0; if((UTR_rec_buff[2]==SZV101_VALVE)||(UTR_rec_buff[2]==SZV102_VALVE)||(UTR_rec_buff[2]==SZV103_VALVE)) { Valve_control_parm.Valve_Type = UTR_rec_buff[2]; }else { Valve_control_parm.Valve_Type = SZV101_VALVE; } FM25V02_data_write(Valve_control_parm.Valve_Type,VALVE_TYPE_ADDR); write_return_buffer[0] = write_return_buffer[1] = 0x60; UTR_Send_Data(write_return_buffer,3); delay_ms(500); // SystemReset(); //**¸´µ©Î¢Ð¾Æ¬µÄboot³ÌÐò²»ÊÇ֮ǰµÄ²Ù×÷£¬¹ÊÏÈ×¢ÊÍ for(i_index=0;i_index<50;i_index++) { UTR_rec_buff[i_index] = 0; } } else if((UTR_rec_buff[0] == 0x61)&&(UTR_rec_buff[1] == 0x61)&&(UTR_rec_cnt >= 3)&&(UTR_rec_buff[3]==0x16)) // { UTR_rec_cnt = 0; Read_Valce_Para_Up(); for(i_index=0;i_index<50;i_index++) { UTR_rec_buff[i_index] = 0; } } UTR_rec_cnt = 0; for(i_index=0;i_index>12)*1000+((calendar.year&0x0FFF)>>8)*100+((calendar.year&0x00FF)>>4)*10+(calendar.year&0x000F); // NOW_month = ((calendar.month&0x00FF)>>4)*10+(calendar.month&0x000F); // NOW_day = calendar.date; // NOW_hour = calendar.hour; // NOW_min = calendar.min; // calculate_Sample_Time(NOW_year, NOW_month,NOW_day); //calculate next sampling time // calculate_Send_Time(NOW_year, NOW_month,NOW_day); //calculate next sending time // compara_Send_Sample(NOW_year,NOW_month,NOW_day ,NOW_hour,NOW_min) ; //compara next RTC alarm time is for sampling or sending // } } /****************************************** * func: UART1_Set_XA * desc: ??UART1????,??DTU??,??????IP?????????? * input: * * output: none * return: *****************************************/ void UART1_Set_XA(void) { int i_index =0; if((UTR_rec_buff[0] == 0x42)&&(UTR_rec_buff[1] == 0x42)) //ÉèÖà { if((UTR_rec_buff[2] != 0x84) && (UTR_rec_buff[2] != 0xA4)) { if(UTR_rec_buff[2]==1) //ÐòÁкŠ{ SerialNumberSet(0,1); //ÐòÁкš¢±àºÅ¡¢°æ±¾ºÅµÈÉèÖà }else if(UTR_rec_buff[2]==17)//ʱ¼äÉèÖà { HostComputerTimeSet(0,17); }else if(UTR_rec_buff[2]==100)//¶Ô½ÓÉ豸²ÎÊý { ParameterSettingOfDockingEquipment(0,100); }else if(UTR_rec_buff[2]==101)//˼Öþ·þÎñÆ÷ͨÐŲÎÊý { ParameterSettingOfServer(0,101); }else if(UTR_rec_buff[2]==102)//а·þÎñÆ÷ͨÐŲÎÊý { // ParameterSettingOfXinAOServer(0,102); }else if(UTR_rec_buff[2]==103)//¹¦ÄܲÎÊýÉèÖà { FunctionParameterSetting(0,103); }else if(UTR_rec_buff[2]==104)//ÓàÁ¿±¨¾¯ { // AllowanceAlarmSetting(0,104); }else if(UTR_rec_buff[2]==105)//·§¿ØÉèÖà { // ValveControlSetting(0,105); }else if(UTR_rec_buff[2]==106)//ÀÛ»ýÁ¿ÐÞ¸Ä { CumulantsModificationSetting(0,106); }else if(UTR_rec_buff[2]==107)//Óà¶îÐÞ¸Ä { BalanceModificationSetting(0,107); }else if(UTR_rec_buff[2]==108)//¼Û¸ñ°æ±¾ÉèÖà { // PriceVersionSetting(0,108); }else if(UTR_rec_buff[2]==109)//Öն˱àºÅÉèÖà { // TerminalIDSetting(0,109); }else if(UTR_rec_buff[2]==110)//Á÷Á¿¼Æ±àºÅÉèÖà { // FlowmeterIDSetting(0,110); }else if(UTR_rec_buff[2]==111)//ÃÜÔ¿ÉèÖà { // XinaoKeySetting(0,111); } else if(UTR_rec_buff[2]==116)//³äÖµÐÅÏ¢ { // RechargeSetting(0,116); } else if(UTR_rec_buff[2]==117)//²ÎÊýÖØÖà { OneClickInitXA(0,117); } else if(UTR_rec_buff[2]==122)//·§ÃÅÉèÖà { ValveStateSetting(0,122); } else if(UTR_rec_buff[2]==123)//Ò쳣״̬²Ù×÷ { AbnormalSetting(0,123); } UTR_rec_cnt = 0; for(i_index=0;i_index>8; GPRS_SEND_BUFF[28] = parmAccess.u8BaudRateCode; GPRS_SEND_BUFF[29] = parmAccess.u8RS485Parity; GPRS_SEND_BUFF[30] = parmAccess.u8EXPVoltageCode; GPRS_SEND_BUFF[31] = parameter_bil.u8PulseWidth; GPRS_SEND_BUFF[32] = parmAccess.u8LowPowerAlarmLine; GPRS_SEND_BUFF[33] = LOGO_Flag; GPRS_SEND_BUFF[34] = modbus_dev_para.slave_addr; GPRS_SEND_BUFF[39] = 0 ; for(ii_index = 0; ii_index < 39; ii_index++) { GPRS_SEND_BUFF[39] = GPRS_SEND_BUFF[39] + GPRS_SEND_BUFF[ii_index]; } GPRS_SEND_BUFF[40] = 0x16; // for(ii_index = 0; ii_index < 41; ii_index++) // { // UTR_sendbyte(GPRS_SEND_BUFF[ii_index]); // } UTR_Send_Data(GPRS_SEND_BUFF,41); } /****************************************** * func: Set_Billing_Para * desc: Set_Billing_Para * input: * output: * return: none *****************************************/ void Set_Billing_Para(void) { // u8 ii_index; // parameter_bil.cDataObtainType = UTR_rec_buff[2]; // FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR); // if((parameter_bil.cDataObtainType & PULSE_MODE) == PULSE_MODE) // { // //parameter_bil.fPulseCoefficient = GPRS_SEND_BUFF[1]; // (*(uint8_t *)(¶meter_bil.fPulseCoefficient)) = UTR_rec_buff[3]; // (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 1)) = UTR_rec_buff[4]; // (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 2)) = UTR_rec_buff[5]; // (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 3)) = UTR_rec_buff[6]; // FM25V02_data_write_float(PULSE_COE_ADDR,parameter_bil.fPulseCoefficient); // } // parameter_bil.cBillingType = UTR_rec_buff[7]; // FM25V02_data_write(parameter_bil.cBillingType,BILLING_TYPE_ADDR); // // (*(uint8_t *)(¶meter_bil.fSingleBillingFee)) = UTR_rec_buff[8]; // (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 1)) = UTR_rec_buff[9]; // (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 2)) = UTR_rec_buff[10]; // (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 3)) = UTR_rec_buff[11]; // FM25V02_data_write_float(SINGLE_BILLING_FEE_ADDR,parameter_bil.fSingleBillingFee); // (*(uint8_t *)(¶meter_bil.fStepBilling_First)) = UTR_rec_buff[12]; // (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 1)) = UTR_rec_buff[13]; // (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 2)) = UTR_rec_buff[14]; // (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 3)) = UTR_rec_buff[15]; // FM25V02_data_write_float(STEP_BILLING_FIRST_ADDR,parameter_bil.fStepBilling_First); // (*(uint8_t *)(¶meter_bil.fStepBillingFee_First)) = UTR_rec_buff[16]; // (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 1)) = UTR_rec_buff[17]; // (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 2)) = UTR_rec_buff[18]; // (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 3)) = UTR_rec_buff[19]; // FM25V02_data_write_float(STEP_BILLING_FEE_FIRST_ADDR,parameter_bil.fStepBillingFee_First); // (*(uint8_t *)(¶meter_bil.fStepBilling_Second)) = UTR_rec_buff[20]; // (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 1)) = UTR_rec_buff[21]; // (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 2)) = UTR_rec_buff[22]; // (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 3)) = UTR_rec_buff[23]; // FM25V02_data_write_float(STEP_BILLING_SECOND_ADDR,parameter_bil.fStepBilling_Second); // (*(uint8_t *)(¶meter_bil.fStepBillingFee_Second)) = UTR_rec_buff[24]; // (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 1)) = UTR_rec_buff[25]; // (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 2)) = UTR_rec_buff[26]; // (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 3)) = UTR_rec_buff[27]; // FM25V02_data_write_float(STEP_BILLING_FEE_SECOND_ADDR,parameter_bil.fStepBillingFee_Second); // (*(uint8_t *)(¶meter_bil.fStepBilling_Third)) = UTR_rec_buff[28]; // (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 1)) = UTR_rec_buff[29]; // (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 2)) = UTR_rec_buff[30]; // (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 3)) = UTR_rec_buff[31]; // FM25V02_data_write_float(STEP_BILLING_THIRD_ADDR,parameter_bil.fStepBilling_Third); // (*(uint8_t *)(¶meter_bil.fStepBillingFee_Third)) = UTR_rec_buff[32]; // (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 1)) = UTR_rec_buff[33]; // (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 2)) = UTR_rec_buff[34]; // (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 3)) = UTR_rec_buff[35]; // // // FM25V02_data_write_float(STEP_BILLING_FEE_THIRD_ADDR,parameter_bil.fStepBillingFee_Third); // (*(uint8_t *)(¶meter_bil.s32RechargeAmount)) = UTR_rec_buff[36]; // (*((uint8_t *)(¶meter_bil.s32RechargeAmount) + 1)) = UTR_rec_buff[37]; // (*((uint8_t *)(¶meter_bil.s32RechargeAmount) + 2)) = UTR_rec_buff[38]; // (*((uint8_t *)(¶meter_bil.s32RechargeAmount) + 3)) = UTR_rec_buff[39]; // // if((parameter_bil.s32RechargeAmount>-999)&&(parameter_bil.s32RechargeAmount<=999999)) // { // Settlement_Para.fBalance = Settlement_Para.fBalance + parameter_bil.s32RechargeAmount; // Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR); // } // // parameter_bil.iBalanceInsufAlarmAmount = (uint16_t)UTR_rec_buff[41] * 256 + (uint16_t)UTR_rec_buff[40]; // FM25V02_data_write_uint16(BALANCE_INSUF_ALARM_AMOUNT_ADDR,parameter_bil.iBalanceInsufAlarmAmount); // (*(uint8_t *)(¶meter_bil.fCredits)) = UTR_rec_buff[42]; // (*((uint8_t *)(¶meter_bil.fCredits) + 1)) = UTR_rec_buff[43]; // (*((uint8_t *)(¶meter_bil.fCredits) + 2)) = UTR_rec_buff[44]; // (*((uint8_t *)(¶meter_bil.fCredits) + 3)) = UTR_rec_buff[45]; // FM25V02_data_write_float(CREDITS_ADDR,parameter_bil.fCredits); // write_return_buffer[0] = write_return_buffer[1] = 0x45; // UTR_Send_Data((u8 *)0x45,1); // UTR_Send_Data((u8 *)0x45,1); // UTR_Send_Data((u8 *)0x16,1); // #ifdef DEBUG_OUT // sprintf(Debug, "cDataObtainType = %d \r\n" ,parameter_bil.cDataObtainType); // UartDebugFun(Debug); // sprintf(Debug, "fPulseCoefficient = %.3f \r\n" ,parameter_bil.fPulseCoefficient); // UartDebugFun(Debug); // sprintf(Debug, "cBillingType = %d \r\n" ,parameter_bil.cBillingType); // UartDebugFun(Debug); // sprintf(Debug, "fSingleBillingFee = %.3f \r\n" ,parameter_bil.fSingleBillingFee); // UartDebugFun(Debug); // sprintf(Debug, "fStepBilling_First = %.3f \r\n" ,parameter_bil.fStepBilling_First); // UartDebugFun(Debug); // // sprintf(Debug, "fStepBillingFee_First = %.3f \r\n" ,parameter_bil.fStepBillingFee_First); // UartDebugFun(Debug); // // sprintf(Debug, "fStepBilling_Second = %.3f \r\n" ,parameter_bil.fStepBilling_Second); // UartDebugFun(Debug); // // sprintf(Debug, "fStepBillingFee_Second = %.3f \r\n" ,parameter_bil.fStepBillingFee_Second); // UartDebugFun(Debug); // // sprintf(Debug, "fStepBilling_Third = %.3f \r\n" ,parameter_bil.fStepBilling_Third); // UartDebugFun(Debug); // // sprintf(Debug, "fStepBillingFee_Third = %.3f \r\n" ,parameter_bil.fStepBillingFee_Third); // UartDebugFun(Debug); // // sprintf(Debug, "s32RechargeAmount = %d \r\n" ,parameter_bil.s32RechargeAmount); // UartDebugFun(Debug); // // sprintf(Debug, "iBalanceInsufAlarmAmount = %d \r\n" ,parameter_bil.iBalanceInsufAlarmAmount); // UartDebugFun(Debug); // // sprintf(Debug, "fCredits = %.3f \r\n" ,parameter_bil.fCredits); // UartDebugFun(Debug); // #endif } void Alarm_record(uint16 AlarmCode) { uint32 current_alarm_addr; Get_Time();//»ñÈ¡µ±Ç°Ê±¼ä current_alarm_addr = (uint32)FIRST_ALARM_RECORD_ADDR + (uint32)system_alarm.u16AlarmStoreNum * ALARM_RECORD_LENGTH; FM25V02_data_write(calendar.year&0x00FF, current_alarm_addr ); FM25V02_data_write(calendar.month&0xFF, current_alarm_addr + 1 ); FM25V02_data_write(calendar.date&0xFF, current_alarm_addr + 2 ); FM25V02_data_write(calendar.hour&0xFF, current_alarm_addr + 3 ); FM25V02_data_write(calendar.min&0xFF, current_alarm_addr + 4 ); FM25V02_data_write(calendar.sec&0xFF, current_alarm_addr + 5 ); FM25V02_data_write_uint16(current_alarm_addr + 6,AlarmCode ); // if(AlarmCode != EXTERNAL_PWR_ACCESS_ALARM_CODE && AlarmCode != EXTERNAL_PWR_DOWN_ALARM_CODE) // { system_alarm.alarm_l ++; // } system_alarm.u16AlarmStoreNum ++; if(system_alarm.u16AlarmStoreNum >= ALARM_RECORD_NUM) { system_alarm.u16AlarmStoreNum = 0; system_alarm.u8AlarmStoreFullFlag = 1; FM25V02_data_write(system_alarm.u8AlarmStoreFullFlag,ALARM_RECORD_FULL_FLAG_ADDR); } FM25V02_data_write_uint16(CURRENT_ALARM_RECORD_NUM_ADDR,system_alarm.u16AlarmStoreNum); awaken_flag = Alarm_awaken; } /****************************************** * func: Read_Valce_Para_Up * desc: Reply parameter command * input: * output: * return: none *****************************************/ void Read_Valce_Para_Up(void)// { int ii_index; u16 All_length = 36; for(ii_index = 0; ii_index < All_length; ii_index++) { GPRS_SEND_BUFF[ii_index] = 0; } GPRS_SEND_BUFF[0] = 0x61; GPRS_SEND_BUFF[1] = 0x61; GPRS_SEND_BUFF[2] = Valve_control_parm.Valve_Type; GPRS_SEND_BUFF[All_length-2] = 0 ; for(ii_index = 0; ii_index < All_length-2; ii_index++) { GPRS_SEND_BUFF[All_length-2] = GPRS_SEND_BUFF[All_length-2] + GPRS_SEND_BUFF[ii_index]; } GPRS_SEND_BUFF[All_length-1] = 0x16; UTR_Send_Data(GPRS_SEND_BUFF,All_length); } void Alarm_analysis(void) { if(ReadVerificationData.ResultFlag==1) { ReadVerificationData.ResultFlag = 0; if(system_alarm.alarm_E2RW_read_abnormal_FLAG==0) { system_alarm.alarm_E2RW_read_abnormal =1; system_alarm.alarm_E2RW_read_abnormal_FLAG =1; FM25V02_data_write(system_alarm.alarm_E2RW_read_abnormal_FLAG,E2RW_READ_ABNORMAL_FLAG_ADDR); } } if(WriteVerificationData.ResultFlag==1) { WriteVerificationData.ResultFlag = 0; if(system_alarm.alarm_E2RW_write_abnormal_FLAG==0) { system_alarm.alarm_E2RW_write_abnormal =1; system_alarm.alarm_E2RW_write_abnormal_FLAG =1; FM25V02_data_write(system_alarm.alarm_E2RW_write_abnormal_FLAG,E2RW_WRITE_ABNORMAL_FLAG_ADDR); } } if(system_alarm.alarm_Sample) { system_alarm.alarm_Sample_LCDFLAG=0x01; } else if(system_alarm.alarm_Sample ==0x00) { system_alarm.alarm_Sample_LCDFLAG=0x00; } if(system_alarm.alarm_PRE) { system_alarm.alarm_PRE_LCDFLAG=0x01; } else if(system_alarm.alarm_PRE ==0x00) { system_alarm.alarm_PRE_LCDFLAG=0x00; } if(system_alarm.alarm_TEM) { system_alarm.alarm_TEM_LCDFLAG=0x01; } else if(system_alarm.alarm_TEM ==0x00) { system_alarm.alarm_TEM_LCDFLAG=0x00; } if(system_alarm.alarm_E2RW_read_abnormal==1) { Alarm_record(E2RW_READ_ABNORMAL_ALARM_CODE); system_alarm.alarm_E2RW_read_abnormal = 0; } if(system_alarm.alarm_E2RW_write_abnormal==1) { Alarm_record(E2RW_WRITE_ABNORMAL_ALARM_CODE); system_alarm.alarm_E2RW_write_abnormal = 0; } if(system_alarm.alarm_FlowPowerLOW) { Alarm_record(FLOW_LOW_PWR_ALARM_CODE); system_alarm.alarm_FlowPowerLOW = 0; } if(system_alarm.alarm_FlowUnderPower) { Alarm_record(FLOW_UNDER_VOLTAGE_ALARM_CODE); system_alarm.alarm_FlowUnderPower = 0; } if(system_alarm.alarm_FlowPowerDOWN) { Alarm_record(FLOW_PWR_DOWN_ALARM_CODE); system_alarm.alarm_FlowPowerDOWN = 0; } if(system_alarm.alarm_Gas_Leak==1) { Alarm_record(GAS_LEAK_ALARM_CODE); system_alarm.alarm_Gas_Leak = 0; } if(system_alarm.alarm_AlkaPowerDOWN) { Alarm_record(ALKA_PWR_DOWN_ALARM_CODE); system_alarm.alarm_AlkaPowerDOWN = 0; } if(system_alarm.alarm_LithPowerDOWN) { Alarm_record(LITH_PWR_DOWN_ALARM_CODE); system_alarm.alarm_LithPowerDOWN = 0; } if(system_alarm.alarm_AlkaPowerLOW) { Alarm_record(ALKA_PWR_LOW_ALARM_CODE); system_alarm.alarm_AlkaPowerLOW = 0; } if(system_alarm.alarm_LithPowerLOW) { Alarm_record(LITH_PWR_LOW_ALARM_CODE); system_alarm.alarm_LithPowerLOW = 0; } if(system_alarm.alarm_EXPowerIN) { Alarm_record(EXTERNAL_PWR_ACCESS_ALARM_CODE); system_alarm.alarm_EXPowerIN = 0; } if(system_alarm.alarm_EXPowerRemove) { Alarm_record(EXTERNAL_PWR_DOWN_ALARM_CODE); system_alarm.alarm_EXPowerRemove = 0; } if(system_alarm.alarm_Valve_close) { Alarm_record(FORCED_TO_CLOSE_VALVE_ALARM_CODE); system_alarm.alarm_Valve_close = 0; } if(system_alarm.alarm_Valve_open) { Alarm_record(VALVE_OPEN_ALARM_CODE); system_alarm.alarm_Valve_open = 0; } if(system_alarm.alarm_Valve_Abnormal) { Alarm_record(VALVE_ABNORMAL_ALARM_CODE); system_alarm.alarm_Valve_Abnormal = 0; } if(system_alarm.alarm_Balance_Small) { Alarm_record(AMOUNT_SMALL_ALARM_CODE); system_alarm.alarm_Balance_Small = 0; } if(system_alarm.alarm_Balance_0) { Alarm_record(AMOUNT_ARREARS_ALARM_CODE); system_alarm.alarm_Balance_0 = 0; } if(system_alarm.alarm_Credits_0) { Alarm_record(AMOUNT_OVERDRAFT_ALARM_CODE); system_alarm.alarm_Credits_0 = 0; } if(system_alarm.alarm_Pulse_Broken) { Alarm_record(PULSE_LINE_DISCONNECTED_ALARM_CODE); system_alarm.alarm_Pulse_Broken = 0; } if(system_alarm.alarm_RS485_Abnormal_Small_Reading == 1) { Alarm_record(RS485_READ_ABNORMAL_SMALL_READING_CODE); system_alarm.alarm_RS485_Abnormal_Small_Reading=0; } if(system_alarm.alarm_Cap_OPEN == 1) { Alarm_record(CAP_OPEN_ALARM_CODE); system_alarm.alarm_Cap_OPEN = 0; } if(system_alarm.alarm_Valve_Force_Open == 1) { Alarm_record(VALVE_FORCE_OPEN_ALARM_CODE); system_alarm.alarm_Valve_Force_Open = 0; } // if(system_alarm.alarm_Pulse_Dismatch) //Âö³å²»Æ¥Å䱨¾¯£¬Êµ¼Ê¹ý³ÌÖÐÂö³åµôÏ߾͹ط§£¬²»»áÓÐÂö³å²»Æ¥Å䱨¾¯ // { // Alarm_record(PULSE_LINE_MISMATCH_ALARM_CODE); // system_alarm.alarm_Pulse_Dismatch = 0; // } } void Send_Bil_Record(u16 num) { u16 i_index=0,j_index=0; u32 current_para_record_addr; u16 Read_index=0; u8 checksum=0; GPRS_SEND_BUFF[0] = 0x47; GPRS_SEND_BUFF[1] = 0x47; for(i_index=0;i_index<8;i_index++) { GPRS_SEND_BUFF[2+i_index] = gprs_protocol_header.DeviceAddress[i_index]; } if(system_record.u8BilStoreFullFlag == 1 ) { if(num>BIL_RECORD_NUM) { num = BIL_RECORD_NUM; } } else { if(num>system_record.u16BilRecordNUM) { num = system_record.u16BilRecordNUM; } } if(num>system_record.u16BilRecordNUM) { Read_index = system_record.u16BilRecordNUM + BIL_RECORD_NUM - num; } else { Read_index = system_record.u16BilRecordNUM - num; } GPRS_SEND_BUFF[10] = (u8)num; GPRS_SEND_BUFF[11] = (u8)(num>>8); for(i_index=0;i_index<12;i_index++) { checksum = checksum + GPRS_SEND_BUFF[i_index]; } UTR_Send_Data(GPRS_SEND_BUFF,12); for(i_index=0;i_index=BIL_RECORD_NUM) { Read_index = 0; } if((Read_index%10)==0) { IWDT_Clr(); } UTR_Send_Data(GPRS_SEND_BUFF,50); } GPRS_SEND_BUFF[0] = checksum; GPRS_SEND_BUFF[1] = 0x16; UTR_Send_Data(GPRS_SEND_BUFF,2); } void Send_Alarm_Record(u16 num) { u16 i_index=0,j_index=0; u32 current_para_record_addr; u16 Read_index=0; u8 checksum=0; GPRS_SEND_BUFF[0] = 0x49; GPRS_SEND_BUFF[1] = 0x49; for(i_index=0;i_index<8;i_index++) { GPRS_SEND_BUFF[2+i_index] = gprs_protocol_header.DeviceAddress[i_index]; } if(system_alarm.u8AlarmStoreFullFlag == 1 ) { if(num>ALARM_RECORD_NUM) { num = ALARM_RECORD_NUM; } } else { if(num>system_alarm.u16AlarmStoreNum) { num = system_alarm.u16AlarmStoreNum; } } if(num>system_alarm.u16AlarmStoreNum) { Read_index = system_alarm.u16AlarmStoreNum + ALARM_RECORD_NUM - num; } else { Read_index = system_alarm.u16AlarmStoreNum - num; } GPRS_SEND_BUFF[10] = (u8)num; GPRS_SEND_BUFF[11] = (u8)(num>>8); for(i_index=0;i_index<12;i_index++) { checksum = checksum + GPRS_SEND_BUFF[i_index]; } UTR_Send_Data(GPRS_SEND_BUFF,12); for(i_index=0;i_index=ALARM_RECORD_NUM) { Read_index = 0; } if((Read_index%10)==0) { IWDT_Clr(); } UTR_Send_Data(GPRS_SEND_BUFF,8); } GPRS_SEND_BUFF[0] = checksum; GPRS_SEND_BUFF[1] = 0x16; UTR_Send_Data(GPRS_SEND_BUFF,2); } void LeakAlarmLine_Detection(void)//й©±¨¾¯Ïß { if((parmAccess.u8LowPowerAlarmLine&0x04)==0x04) { if(ALARM_LINE_READ==0) { delay_ms(10); if(ALARM_LINE_READ==0) { delay_ms(10); if(ALARM_LINE_READ==0) { //close the valve and alarm if((device_Parm.AccountStatus== 0x01)||(device_Parm.TestStatus==1)) //¿ª»§×´Ì¬Ï¼ì²â¶Ô½ÓÉ豸Ƿѹ£¬Ôò¹Ø·§ { if(((OpenValveAuthorizeFLAG&0x0f)==0x01)&&((OpenValveAuthorizeFLAG>>4)<9)&&((OpenValveAuthorizeFLAG>>4)>0)) //Ç¿ÖÆ¿ª·§£¬Ò쳣״̬ÏÂÒ²²»¹Ø·§ { }else { if(gprs_protocol_header.Valve_Status != 2) //·§ÃÅ״̬²»ÊÇΪ¹Ø { Valve_close(); } } } if(system_alarm.alarm_Gas_Leak_LCDFLAG==0) { system_alarm.alarm_Gas_Leak = 1; system_alarm.alarm_Gas_Leak_LCDFLAG =1; } } else { system_alarm.alarm_Gas_Leak_LCDFLAG =0; system_alarm.alarm_Gas_Leak_time = 0; } }else { system_alarm.alarm_Gas_Leak_LCDFLAG =0; system_alarm.alarm_Gas_Leak_time = 0; } }else { system_alarm.alarm_Gas_Leak_LCDFLAG =0; system_alarm.alarm_Gas_Leak_time = 0; } } else { system_alarm.alarm_Gas_Leak_LCDFLAG =0; system_alarm.alarm_Gas_Leak_time = 0; } } void PulseLine_Detection(void)//Âö³åÏß¼ì²â { float pulse_v; if((parameter_bil.cDataObtainType & PULSE_MODE)== PULSE_MODE) { if((parmAccess.u16MeterTypeCode==ASMODBUS)||(parmAccess.u16MeterTypeCode==AS100MODBUS)||(parmAccess.u16MeterTypeCode==SIARGO_MODBUS)) { system_alarm.alarm_Pulse_Broken_LCDFLAG = 0; }else { IWDT_Clr(); if(PULSE_LINE_READ == 0) { delay_ms(100); delay_ms(100); delay_ms(100); delay_ms(100); delay_ms(100); delay_ms(50); if(PULSE_LINE_READ == 0) { delay_ms(5); if(PULSE_LINE_READ == 0) { if((device_Parm.AccountStatus== 0x01)||(device_Parm.TestStatus==1)) //¿ª»§×´Ì¬Ï¼ì²âµ½Âö³åÏß¶Ï¿ª£¬Ôò¹Ø·§ { if(system_alarm.alarm_Pulse_Broken_LCDFLAG!=1) //±ÜÃâÖØ¸´±¨¾¯ { system_alarm.alarm_Pulse_Broken = 1; } if(((OpenValveAuthorizeFLAG&0x0f)==0x01)&&((OpenValveAuthorizeFLAG>>4)<9)&&((OpenValveAuthorizeFLAG>>4)>0)) //Ç¿ÖÆ¿ª·§£¬Ò쳣״̬ÏÂÒ²²»¹Ø·§ { }else { if(gprs_protocol_header.Valve_Status != 2) //·§ÃÅ״̬²»ÊÇΪ¹Ø { Valve_close(); } } } system_alarm.alarm_Pulse_Broken_LCDFLAG = 1; } else { system_alarm.alarm_Pulse_Broken_LCDFLAG = 0; } } } else { system_alarm.alarm_Pulse_Broken_LCDFLAG = 0; } } }else { system_alarm.alarm_Pulse_Broken_LCDFLAG = 0; } } /* Private_Functions ----------------------------------------------------------*/ /** * @brief ¼Ä´æÆ÷³õʼ»¯ * @param ÎÞ * @retval ÎÞ */ void RegisterInit(void) { //*******************************************************************************************// regDevSerialNum.hardwareVerSn[0] = FM25V02_data_read_uint16(HardwareVerSn1_ADDR); //Ó²¼þ°æ±¾ regDevSerialNum.hardwareVerSn[1] = FM25V02_data_read_uint16(HardwareVerSn2_ADDR); regDevSerialNum.hardwareVerSn[2] = FM25V02_data_read_uint16(HardwareVerSn3_ADDR); // regDevSerialNum.firmwareVer[0] = FM25V02_data_read_uint16(FirmwareVerSn1_ADDR); //¹Ì¼þ°æ±¾ // regDevSerialNum.firmwareVer[1] = FM25V02_data_read_uint16(FirmwareVerSn2_ADDR); // regDevSerialNum.firmwareVer[2] = FM25V02_data_read_uint16(FirmwareVerSn3_ADDR); regDevSerialNum.firmwareVer[0] =FIRMWARE_VER_3; //¹Ì¼þ°æ±¾ regDevSerialNum.firmwareVer[1] =FIRMWARE_VER_2; regDevSerialNum.firmwareVer[2] =FIRMWARE_VER_1; regDevSerialNum.firmwareCRC = FM25V02_data_read_uint16(FirmwareCRC_ADDR); //¹Ì¼þCRC /* regDevSerialNum.firmwareVerDate_year = FM25V02_data_read_uint16(FirmwareDateyear_ADDR); //¹Ì¼þÈÕÆÚ regDevSerialNum.firmwareVerDate_month = FM25V02_data_read_uint16(FirmwareDatemonth_ADDR); regDevSerialNum.firmwareVerDate_day = FM25V02_data_read_uint16(FirmwareDateday_ADDR); */ regDevSerialNum.firmwareVerDate_year = YEAR; //¹Ì¼þÈÕÆÚ,´ó¸ÅÊÇ10½øÖÆÊ±¼ä£¬·ÇBCD regDevSerialNum.firmwareVerDate_month = MONTH; regDevSerialNum.firmwareVerDate_day = DAY; regDevSerialNum.EquipmentCaliberAndModel = FM25V02_data_read(EquipmentCaliberAndModel_ADDR); //É豸¿Ú¾¶ÐͺŠif(regDevSerialNum.EquipmentCaliberAndModel>8) { regDevSerialNum.EquipmentCaliberAndModel = 8; FM25V02_data_write(regDevSerialNum.EquipmentCaliberAndModel, EquipmentCaliberAndModel_ADDR) ; } } void VerRegisterSet(void) //°æ±¾ºÅÉèÖà { u8 i; for(i=0;i<14;i++) { (*((uint8_t *)(®DevSerialNum.hardwareVerSn) + i)) = UTR_rec_buff[2+i]; } FM25V02_data_write_uint16(HardwareVerSn1_ADDR, regDevSerialNum.hardwareVerSn[0]) ; FM25V02_data_write_uint16(HardwareVerSn2_ADDR, regDevSerialNum.hardwareVerSn[1]) ; FM25V02_data_write_uint16(HardwareVerSn3_ADDR, regDevSerialNum.hardwareVerSn[2]) ; FM25V02_data_write_uint16(FirmwareVerSn1_ADDR, regDevSerialNum.firmwareVer[0]) ; FM25V02_data_write_uint16(FirmwareVerSn2_ADDR, regDevSerialNum.firmwareVer[1]) ; FM25V02_data_write_uint16(FirmwareVerSn3_ADDR, regDevSerialNum.firmwareVer[2]) ; FM25V02_data_write_uint16(FirmwareCRC_ADDR, regDevSerialNum.firmwareCRC) ; } void VerRegisterRead(void) //°æ±¾ºÅ¶ÁÈ¡ { u8 i; GPRS_SEND_BUFF[0] = 0x53; GPRS_SEND_BUFF[1] = 0x53; for(i=0;i<20;i++) { GPRS_SEND_BUFF[2+i] = (*((uint8_t *)(®DevSerialNum.hardwareVerSn) + i)) ; } for(i=0;i<16;i++) { GPRS_SEND_BUFF[22+i] = 0 ; } GPRS_SEND_BUFF[38] = 0 ; for(i=0;i<38;i++) { GPRS_SEND_BUFF[38] = GPRS_SEND_BUFF[38] + GPRS_SEND_BUFF[i] ; } GPRS_SEND_BUFF[39] = 0x16 ; UTR_Send_Data(GPRS_SEND_BUFF,40); } void BillRecord(void) { u32 current_para_record_addr; /*Record the current parameters*/ current_para_record_addr = (u32)FIRST_BIL_RECORD_ADDR + (u32)system_record.u16BilRecordNUM * BIL_RECORD_LENGTH; FM25V02_data_write(calendar.year&0x00FF, current_para_record_addr ); FM25V02_data_write(calendar.month&0xFF, current_para_record_addr + 1 ); FM25V02_data_write(calendar.date&0xFF, current_para_record_addr + 2 ); FM25V02_data_write(calendar.hour&0xFF, current_para_record_addr + 3 ); FM25V02_data_write(calendar.min&0xFF, current_para_record_addr + 4 ); FM25V02_data_write(calendar.sec&0xFF, current_para_record_addr + 5 ); FM25V02_data_write((parameter_bil.cDataObtainType|(device_Parm.AccountStatus<<4)),current_para_record_addr+6); FM25V02_data_write_float(current_para_record_addr + 7,parameter_bil.fPulseCoefficient); FM25V02_data_write(parameter_bil.cBillingType,current_para_record_addr + 11); FM25V02_data_write_float(current_para_record_addr + 12,parameter_bil.fSingleBillingFee); FM25V02_data_write_float(current_para_record_addr + 16,parameter_bil.fStepBilling_First); FM25V02_data_write_float(current_para_record_addr + 20,parameter_bil.fStepBillingFee_First); FM25V02_data_write_float(current_para_record_addr + 24,parameter_bil.fStepBilling_Second); FM25V02_data_write_float(current_para_record_addr + 28,parameter_bil.fStepBillingFee_Second); FM25V02_data_write_float(current_para_record_addr + 32,parameter_bil.fStepBilling_Third); FM25V02_data_write_float(current_para_record_addr + 36,parameter_bil.fStepBillingFee_Third); FM25V02_data_write_uint32(current_para_record_addr + 40,parameter_bil.dRechargeAmount); FM25V02_data_write_uint16(current_para_record_addr + 44,parameter_bil.iBalanceInsufAlarmAmount); FM25V02_data_write_float(current_para_record_addr + 46,parameter_bil.fCredits); // Settlement_Para.fCumulativeGasUsage =0; //ÀÛ»ýÁ¿ÇåÁãÔÝʱ²»ÖªµÀÔõô¼Ç¼ // Settlement_Para.fCumulativeFeeUsage =0; // FM25V02_data_write_double(current_para_record_addr + 50,Settlement_Para.fCumulativeGasUsage); system_record.u16BilRecordNUM ++; if(system_record.u16BilRecordNUM >= BIL_RECORD_NUM) { system_record.u16BilRecordNUM = 0; system_record.u8BilStoreFullFlag = 1; FM25V02_data_write(system_record.u8BilStoreFullFlag,BIL_RECORD_FULL_FLAG_ADDR); } FM25V02_data_write_uint16(CURRENT_BIL_RECORD_NUM_ADDR,system_record.u16BilRecordNUM); } /****************************************** * func: CumulantsRecord * desc: CumulantsRecord * input: GasModifyFlag ------ 0:ÎÞÀÛ»ýÓÃÆøÁ¿Ð޸ģ»1£ºÀÛ¼ÆÓÃÆøÁ¿ÐÞ¸Ä PreModifyGasValue-------ÐÞ¸ÄǰÀÛ»ýÓÃÆøÁ¿ FeeModifyFlag ------ 0:ÎÞÀÛ»ýÓÃÆø½ð¶îÐ޸ģ»1£ºÀÛ¼ÆÓÃÆø½ð¶îÐÞ¸Ä PreModifyFeeValue-------ÐÞ¸ÄǰÀÛ¼ÆÓÃÆø½ð¶î * output: none * return: none *****************************************/ void CumulantsRecord(u8 GasModifyFlag,double PreModifyGasValue,u8 FeeModifyFlag,double PreModifyFeeValue) { u32 current_para_record_addr; /*Record the current parameters*/ current_para_record_addr = (u32)FIRST_CUMULANTS_MODIFY_RECORD_ADDR + (u32)system_record.u16CumulantsRecordNUM * CUMULANTS_MODIFY_RECORD_LENGTH; Get_Time(); FM25V02_data_write(calendar.year&0x00FF, current_para_record_addr ); FM25V02_data_write(calendar.month&0xFF, current_para_record_addr + 1 ); FM25V02_data_write(calendar.date&0xFF, current_para_record_addr + 2 ); FM25V02_data_write(calendar.hour&0xFF, current_para_record_addr + 3 ); FM25V02_data_write(calendar.min&0xFF, current_para_record_addr + 4 ); FM25V02_data_write(calendar.sec&0xFF, current_para_record_addr + 5 ); FM25V02_data_write(GasModifyFlag,current_para_record_addr+6); FM25V02_data_write_double(current_para_record_addr + 7,PreModifyGasValue); FM25V02_data_write_double(current_para_record_addr + 15,Settlement_Para.fCumulativeGasUsage); FM25V02_data_write(FeeModifyFlag,current_para_record_addr+23); FM25V02_data_write_double(current_para_record_addr + 24,PreModifyFeeValue); FM25V02_data_write_double(current_para_record_addr + 32,Settlement_Para.fCumulativeFeeUsage); system_record.u16CumulantsRecordNUM ++; if(system_record.u16CumulantsRecordNUM >= CUMULANTS_MODIFY_RECORD_NUM) { system_record.u16CumulantsRecordNUM = 0; system_record.u8CumulantsStoreFullFlag = 1; FM25V02_data_write(system_record.u8CumulantsStoreFullFlag,CUMULANTS_MODIFY_RECORD_FULL_FLAG_ADDR); } FM25V02_data_write_uint16(CUMULANTS_MODIFY_RECORD_NUM_ADDR,system_record.u16CumulantsRecordNUM); } void CumulantsModify(void) //ÀÛ»ýÁ¿ÐÞ¸Ä { u16 i_index; u8 ModifyResult=0; u8 GasModifyFlag=0; u8 FeeModifyFlag=0; double PreModifyGasValue ; double PreModifyFeeValue ; double ModifiedGasValue ; double ModifiedFeeValue ; PreModifyGasValue = Settlement_Para.fCumulativeGasUsage; PreModifyFeeValue = Settlement_Para.fCumulativeFeeUsage; GasModifyFlag = UTR_rec_buff[2]; if(GasModifyFlag==1) { for(i_index=0;i_index<8;i_index++) { (*((uint8_t *)(&ModifiedGasValue) + i_index)) = UTR_rec_buff[i_index + 3]; } if((ModifiedGasValue>=0)&&(ModifiedGasValue<=GAS_USAGE_UP_LIMIT)) { Settlement_Para.fCumulativeGasUsage = ModifiedGasValue; Write_Verification(Settlement_Para.fCumulativeGasUsage,REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR); FM25V02_data_write_double(GAS_USAGE_BIL_ADDR, Settlement_Para.fCumulativeGasUsage); }else { ModifyResult = 1; } } FeeModifyFlag = UTR_rec_buff[11]; if(FeeModifyFlag==1) { for(i_index=0;i_index<8;i_index++) { (*((uint8_t *)(&ModifiedFeeValue) + i_index)) = UTR_rec_buff[12 + i_index]; } if((ModifiedFeeValue>=0)&&(ModifiedFeeValue<=FEE_USAGE_UP_LIMIT)) { Settlement_Para.fCumulativeFeeUsage = ModifiedFeeValue; Write_Verification(Settlement_Para.fCumulativeFeeUsage,REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR); FM25V02_data_write_double(FEE_USAGE_BIL_ADDR, Settlement_Para.fCumulativeFeeUsage); }else { ModifyResult = 1; } } if((FeeModifyFlag==1)||(GasModifyFlag==1)) { CumulantsRecord(GasModifyFlag,PreModifyGasValue,FeeModifyFlag,PreModifyFeeValue); } GPRS_SEND_BUFF[0] = 0x57; GPRS_SEND_BUFF[1] = 0x57; GPRS_SEND_BUFF[2] = ModifyResult; for(i_index=0;i_index<8;i_index++) { GPRS_SEND_BUFF[i_index + 3] = (*((uint8_t *)(&Settlement_Para.fCumulativeGasUsage) + i_index)); } for(i_index=0;i_index<8;i_index++) { GPRS_SEND_BUFF[i_index + 11] = (*((uint8_t *)(&Settlement_Para.fCumulativeFeeUsage) + i_index)); } GPRS_SEND_BUFF[19] = 0 ; for(i_index=0;i_index<19;i_index++) { GPRS_SEND_BUFF[19] = GPRS_SEND_BUFF[19] + GPRS_SEND_BUFF[i_index] ; } GPRS_SEND_BUFF[20] = 0x16 ; UTR_Send_Data(GPRS_SEND_BUFF,21); } void Send_Cumulants_Record(u16 num) { u16 i_index=0,j_index=0; u32 current_para_record_addr; u16 Read_index=0; u8 checksum=0; GPRS_SEND_BUFF[0] = 0x59; GPRS_SEND_BUFF[1] = 0x59; for(i_index=0;i_index<8;i_index++) { GPRS_SEND_BUFF[2+i_index] = gprs_protocol_header.DeviceAddress[i_index]; } if(system_record.u8CumulantsStoreFullFlag == 1 ) { if(num>CUMULANTS_MODIFY_RECORD_NUM) { num = CUMULANTS_MODIFY_RECORD_NUM; } } else { if(num>system_record.u16CumulantsRecordNUM) { num = system_record.u16CumulantsRecordNUM; } } if(num>system_record.u16CumulantsRecordNUM) { Read_index = system_record.u16CumulantsRecordNUM + CUMULANTS_MODIFY_RECORD_NUM - num; } else { Read_index = system_record.u16CumulantsRecordNUM - num; } GPRS_SEND_BUFF[10] = (u8)num; GPRS_SEND_BUFF[11] = (u8)(num>>8); for(i_index=0;i_index<12;i_index++) { checksum = checksum + GPRS_SEND_BUFF[i_index]; } UTR_Send_Data(GPRS_SEND_BUFF,12); for(i_index=0;i_index=CUMULANTS_MODIFY_RECORD_NUM) { Read_index = 0; } if((Read_index%10)==0) { IWDT_Clr(); } UTR_Send_Data(GPRS_SEND_BUFF,40); } GPRS_SEND_BUFF[0] = checksum; GPRS_SEND_BUFF[1] = 0x16; UTR_Send_Data(GPRS_SEND_BUFF,2); } void Condition_det(void) { if(device_Parm.Hour_Updata_flag != calendar.hour) //Сʱ·¢Éú±ä»¯ { device_Parm.Hour_Updata_flag = calendar.hour; if(device_Parm.Hour_Updata_flag ==0x00) //0µã¼ì²âµç³Ø { PulseLine_Detection(); Power_Detection(0); //µçÔ´¼ì²â LeakAlarmLine_Detection(); dayly_flag_clear(); //²¿·Ö״̬ÐèҪÿÌìÇå³ýÒ»´Î } #ifdef DEBUG_OUT UartDebugFun("Hour_Updata!\n"); #endif } if(device_Parm.Key_Power_Det ==1) { device_Parm.Key_Power_Det =0; Power_Detection(0); //µçÔ´¼ì²â } } void Get_Sample_Send_Interval(void) { /**************¸ù¾Ýtf tp²ÎÊý¼ÆËã²É¼¯ºÍ·¢Ëͼä¸ô**********************/ if(device_Parm.Tyf == 0x04) { device_Parm.Sample_Interval = device_Parm.Tf; }else if(device_Parm.Tyf == 0x05) { device_Parm.Sample_Interval = (u16)device_Parm.Tf * 60; }else if(device_Parm.Tyf == 0x06) { device_Parm.Sample_Interval = 1440; } if((device_Parm.Sample_Interval<1)||(device_Parm.Sample_Interval>1440)) { device_Parm.Sample_Interval = 60; } if(device_Parm.Typ == 0x84) { device_Parm.Send_Interval = device_Parm.Tp; }else if(device_Parm.Typ == 0x85) { device_Parm.Send_Interval = (u16)device_Parm.Tp * 60; }else if(device_Parm.Typ == 0x86) { device_Parm.Send_Interval = 1440; }else { device_Parm.Send_Interval = 0; } if(device_Parm.Send_Interval>1440) { device_Parm.Send_Interval = 1440; } device_Parm.Sample_Min_Time = 0; } void BigSmallSwitch(u8 * aA , u8 len) //Êý×é´óС¶ËÇл»£¬»òÕß½Ð×öÊý×éµ¹Ðò£¬Ä¿Ç°×Ϊ8×Ö½Ú { u8 index; u8 MidValue[8]; for(index = 0; index < len; index ++) { MidValue[index] = * (aA + index); } for(index = 0; index < len; index ++) { * (aA + index) = MidValue[len-1-index]; } } unsigned char BCD2HEX(unsigned char bcd_data) //BCD??HEX??? { unsigned char temp; temp=((bcd_data/16)*10 + bcd_data%16); return temp; } unsigned char HEX2BCD(unsigned char hex_data) //HEX??BCD??? { unsigned char temp; temp=((hex_data/10)*16 + hex_data%10); return temp; } /****************************************** * func: IntervalReportingHandle * desc: ¼ä¸ôÉÏ·¢Åжϴ¦Àíº¯Êý£¬·µ»Ø1±íʾµ½´ï¼ä¸ôÉÏ´«Ê±¼äµã * input: IntervalReportingInterval¼ä¸ô IntervalReporting1TimeÊ×´Îʱ¼ä * output: none * return: none *****************************************/ u8 IntervalReportingHandle(u16 IntervalReportingInterval,u16 IntervalReporting1Time) { //¼ä¸ôÉϱ¨ÔÝʱ²»¿¼ÂǼä¸ô³¬¹ý1440·ÖÖÓ£¬Ò²¾ÍÊdz¬¹ý1Ìì¡£ u16 FirstReportingTime; //Ê×´ÎÉϱ¨Ê±¼ä£¬·ÖÊý u16 NextReportingTime; //Ï´ÎÉϱ¨Ê±¼ä£¬·ÖÊý u16 CurrentTime;//µ±Ç°Ê±¼ä£¬·ÖÊý u16 Count_i=0; u16 ComparisonsNumber; if(IntervalReportingInterval==0) { return 0; } FirstReportingTime = (u16)BCD2HEX((u8)(IntervalReporting1Time>>8)) *60 + BCD2HEX((u8)IntervalReporting1Time); CurrentTime = (u16)BCD2HEX(calendar.hour) *60 + BCD2HEX(calendar.min); NextReportingTime = FirstReportingTime; //Ï´ÎÉϱ¨ÏÈÈ¥Ê×´ÎÉϱ¨Ê±¼ä×ö±È½Ï ComparisonsNumber =1440/IntervalReportingInterval +1; //±È½Ï´ÎÊý£¬¸úÉÏ´«¼ä¸ôÓÐ¹Ø if(calendar.sec<0x20) //ΪÁ˼õÉÙ×ÊÔ´ÀË·Ñ£¬Ö»ÓÐÔÚÃëÊýСÓÚ20µÄʱºòÅжϣ¬Êµ¼ÊÉϼä¸ô¶ÌµÄÇé¿öÏÂÐèÒªÍ⹩µç£¬²»¿¼Âǹ¦ºÄ { for(Count_i =0;Count_i=1440) { NextReportingTime -=1440; } } } } return 0; } /****************************************** * func: send_control_NDCEP * desc: ²É¼¯ºÍÉÏ·¢µÄʱ¼äµã¿ØÖÆ * input: none * output: none * return: none *****************************************/ void Sample_Send_Control(void) { u16 IntervalReporting1Time = 0; // Get_Time();//»ñÈ¡µ±Ç°Ê±¼ä // delay_ms(10); if(device_Parm.Sample_Min_Time==0) //ÿ20ÃëÖ´ÐÐÅжÏÒ»´Î£¬Ò²¾ÍÊÇRTCÖжÏÀ´Ò»´ÎµÄʱºòÅÐ¶Ï { device_Parm.Sample_Min_Time = 20; //²É¼¯Ê±¼ä¿ØÖÆ if(IntervalReportingHandle(device_Parm.Sample_Interval,IntervalReporting1Time)==1) { awaken_flag = RTC_awaken; if(VariaDlg.ReceivedInstructionFlag == 1) //²É¼¯µãµ½ÅжÏ֮ǰÊÇ·ñÖ´ÐйýÓà¶îÏà¹ØÖ¸ÁÓеϰֱ½ÓÉÏ·¢£¬¼°Ê±Á˽âÓà¶î״̬¡£ { GPRS_sendFlag = 1; gprs_protocol_header.Send_type = 1; VariaDlg.ReceivedInstructionFlag = 0; } } //¼ä¸ôÉÏ·¢Ê±¼ä¿ØÖÆ if(device_Parm.Send_Interval>0) { if(IntervalReportingHandle(device_Parm.Send_Interval,IntervalReporting1Time)==1) { GPRS_sendFlag = 1; gprs_protocol_header.Send_type = 1; } } //¶¨Ê±ÉÏ·¢Ê±¼äµã¿ØÖÆ if(device_Parm.time1_flag == 0x80) { if((calendar.hour==device_Parm.sendTiming_hour)&&(calendar.min==device_Parm.sendTiming_min)&&(calendar.sec<0x20)) { GPRS_sendFlag = 1; gprs_protocol_header.Send_type = 1; } } if(device_Parm.time2_flag == 0x80) { if((calendar.hour==device_Parm.sendTiming_hour2)&&(calendar.min==device_Parm.sendTiming_min2)&&(calendar.sec<0x20)) { GPRS_sendFlag = 1; gprs_protocol_header.Send_type = 1; } } } } void Valve_abnormal_judge(void) { if(Valve_control_parm.ValveHaveClosedTime >0)//·§ÃŹرռÆÊ±ÒѾ­Æô¶¯ { if(gprs_protocol_header.Valve_Status ==2 ) //·§ÃŹرÕÇé¿öÏ { if(valve_abnormal_para_g.valveCloseFirstFlag ==1) { //Ê×´ÎÀÛ»ýÁ¿ÒѾ­¼Ç¼µÄÇé¿öÏ£¬¿ªÊ¼ÅжϽÓÏÂÀ´µÄÀÛ¼ÆÁ¿¼Í¼ÓëÊ״μǼµÄ²îÖµÊÇ·ñ³¬¹ýãÐÖµ if(valve_abnormal_para_g.valveCloseNextFlag !=1) { valve_abnormal_para_g.valveCloseNextFlag =1; } valve_abnormal_para_g.valveCloseNextCum = Settlement_Para.fCumulativeGasUsage; if(valve_abnormal_para_g.valveCloseNextFlag ==1) { if((valve_abnormal_para_g.valveCloseNextCum - valve_abnormal_para_g.valveCloseFirstCum) > VALVE_ABNORMAL_THRESHOLD) { //ÀÛ»ýÁ¿²îÖµ³¬¹ýãÐÖµ£¬´ú±í·§ÃŹرÕ״̬ÏÂÓÐ×߯ø£¬Åж¨Îª·§ÃÅÒì³££¨Ã»¹Ø½ô»òÕ߯äËû£© gprs_protocol_header.Valve_Status =3; //·§ÃÅ״̬±äΪ3£¨Òì³££©Ö®ºó£¬´Ë´¦µÄÅжϲ»»áÔÙÖ´ÐУ¬ÒòÎªÇ°ÃæÓиöifÌõ¼þÊÇ·§ÃÅ״̬Ϊ2£¨¹Ø£©¡£Òò´ËÔٴιط§Ö®ºó²ÅÄÜÖØÐÂÆô¶¯·§ÃÅÒì³£ÅÐ¶Ï FM25V02_data_write(gprs_protocol_header.Valve_Status,VALVE_STATE_ADDR); system_alarm.alarm_Valve_Abnormal_time ++; if(system_alarm.alarm_Valve_Abnormal_time>=250) { system_alarm.alarm_Valve_Abnormal_time = 250; } if(system_alarm.alarm_Valve_Abnormal_time<=2) //ÿÌìÖ»±¨2´Î¡£ { system_alarm.alarm_Valve_Abnormal = 1; } } } } if(valve_abnormal_para_g.valveCloseFirstFlag !=1) { //¼Ç¼·§ÃŹرÕÖ®ºóµÄÊ×´ÎÀÛ»ýÁ¿ valve_abnormal_para_g.valveCloseFirstFlag = 1; valve_abnormal_para_g.valveCloseFirstCum = Settlement_Para.fCumulativeGasUsage; } }else { valve_abnormal_para_g.valveCloseFirstFlag = 0; Valve_control_parm.ValveHaveClosedTime = 0; } }else { valve_abnormal_para_g.valveCloseFirstCum =0; valve_abnormal_para_g.valveCloseFirstFlag = 0; valve_abnormal_para_g.valveCloseNextCum =0; valve_abnormal_para_g.valveCloseNextFlag = 0; } } //ÐèҪÿÌìÇå³ýµÄ±êÖ¾ void dayly_flag_clear(void) { system_alarm.alarm_FlowPowerLOW_time = 0; system_alarm.alarm_Valve_Abnormal_time = 0; }