#include "RW_VERIFICATION.h" #include "stdlib.h" #include "1billing.h" #include "para.h" RW_VERIFICATION_DATA ReadVerificationData; RW_VERIFICATION_DATA WriteVerificationData; u8 RandValue=0; u8 RandValueFLAG=0; void RW_V(u8 ReadORwriteFlag,RW_VERIFICATION_DATA * RW_Data) //ReadORwriteFlagΪ0´ú±í¶Á£¬Îª1´ú±íд { double DataA; double DataB; double DataC; u16 count_i; if(ReadORwriteFlag==0)//¶Á { DataA = FM25V02_data_read_double(RW_Data->addrA); DataB = FM25V02_data_read_double(RW_Data->addrB); DataC = FM25V02_data_read_double(RW_Data->addrC); if((DataA==DataB)&&(DataA==DataC)) { if((DataA>DATA_LIMIT)||(DataA<(-DATA_LIMIT))) { RW_Data->Data = 0; }else { RW_Data->Data = DataA; } } else if((DataA==DataB)||(DataA==DataC)) //AB»òÕßAC»òÕßABCÏàµÈ { if((DataA>DATA_LIMIT)||(DataA<(-DATA_LIMIT))) { RW_Data->Data = 0; }else { RW_Data->Data = DataA; } RW_Data->ResultFlag = 1; }else if(DataB==DataC)//BCÏàµÈ { if((DataB>DATA_LIMIT)||(DataB<(-DATA_LIMIT))) { if((DataA>DATA_LIMIT)||(DataA<(-DATA_LIMIT))) { RW_Data->Data = 0; }else { RW_Data->Data = DataA; } }else { RW_Data->Data = DataB; } RW_Data->ResultFlag = 1; }else { /*Èý¸ö¶¼²»ÏàµÈ*/ if((DataA>DATA_LIMIT)||(DataA<(-DATA_LIMIT))) { RW_Data->Data = 0; }else { RW_Data->Data = DataA; } RW_Data->ResultFlag = 1; } }else if(ReadORwriteFlag==1) //д { for(count_i=0;count_i<3;count_i++) { /*ÍùµØÖ·ÀïдֵÔÙ¶ÁÈ¡£¬ÏàµÈµÄ»°´ú±íдÈëÕýÈ·*/ FM25V02_data_write_double(RW_Data->addrA , RW_Data->Data); DataA = FM25V02_data_read_double(RW_Data->addrA); if(DataA == RW_Data->Data) { /*дÈëÕýÈ·£¬Ìø³öÑ­»·²»ÔÙдÈë*/ break; }else { #ifdef DEBUG_OUT sprintf(Debug,"DataA = %f \n",DataA); // UartDebugFun(Debug); sprintf(Debug,"RW_Data->Data = %f \n",RW_Data->Data); // UartDebugFun(Debug); #endif FM25V02_data_write_double(RW_Data->addrA , RW_Data->Data); DataA = FM25V02_data_read_double(RW_Data->addrA); if(DataA == RW_Data->Data) { /*дÈëÕýÈ·£¬Ìø³öÑ­»·²»ÔÙдÈë*/ break; }else { #ifdef DEBUG_OUT sprintf(Debug,"DataA = %f \n",DataA); // UartDebugFun(Debug); sprintf(Debug,"RW_Data->Data = %f \n",RW_Data->Data); // UartDebugFun(Debug); UartDebugFun("RW_Data->ResultFlag = 1!\n"); #endif #ifdef DEBUG_OUT sprintf(Debug,"RTC INT TIME = %02x-%02x-%02x %02x:%02x:%02x \n",calendar.year,calendar.month,calendar.date,calendar.hour,calendar.min,calendar.sec); UartDebugFun(Debug); #endif /*Êý¾Ý¶ÁдÓдí*/ RW_Data->ResultFlag = 1; } } } for(count_i=0;count_i<3;count_i++) { /*ÍùµØÖ·ÀïдֵÔÙ¶ÁÈ¡£¬ÏàµÈµÄ»°´ú±íдÈëÕýÈ·*/ FM25V02_data_write_double(RW_Data->addrB , RW_Data->Data); DataB = FM25V02_data_read_double(RW_Data->addrB); if(DataB == RW_Data->Data) { /*дÈëÕýÈ·£¬Ìø³öÑ­»·²»ÔÙдÈë*/ break; }else { #ifdef DEBUG_OUT sprintf(Debug,"DataB = %f \n",DataB); // UartDebugFun(Debug); sprintf(Debug,"RW_Data->Data = %f \n",RW_Data->Data); // UartDebugFun(Debug); #endif FM25V02_data_write_double(RW_Data->addrB , RW_Data->Data); DataB = FM25V02_data_read_double(RW_Data->addrB); if(DataB == RW_Data->Data) { /*дÈëÕýÈ·£¬Ìø³öÑ­»·²»ÔÙдÈë*/ break; }else { #ifdef DEBUG_OUT sprintf(Debug,"DataB = %f \n",DataB); // UartDebugFun(Debug); sprintf(Debug,"RW_Data->Data = %f \n",RW_Data->Data); // UartDebugFun(Debug); UartDebugFun("RW_Data->ResultFlag = 1!\n"); #endif #ifdef DEBUG_OUT sprintf(Debug,"RTC INT TIME = %02x-%02x-%02x %02x:%02x:%02x \n",calendar.year,calendar.month,calendar.date,calendar.hour,calendar.min,calendar.sec); UartDebugFun(Debug); #endif /*Êý¾Ý¶ÁдÓдí*/ RW_Data->ResultFlag = 1; } } } for(count_i=0;count_i<3;count_i++) { /*ÍùµØÖ·ÀïдֵÔÙ¶ÁÈ¡£¬ÏàµÈµÄ»°´ú±íдÈëÕýÈ·*/ FM25V02_data_write_double(RW_Data->addrC , RW_Data->Data); DataC = FM25V02_data_read_double(RW_Data->addrC); if(DataC == RW_Data->Data) { /*дÈëÕýÈ·£¬Ìø³öÑ­»·²»ÔÙдÈë*/ break; }else { #ifdef DEBUG_OUT sprintf(Debug,"DataC = %f \n",DataC); // UartDebugFun(Debug); sprintf(Debug,"RW_Data->Data = %f \n",RW_Data->Data); // UartDebugFun(Debug); #endif FM25V02_data_write_double(RW_Data->addrC , RW_Data->Data); DataC = FM25V02_data_read_double(RW_Data->addrC); if(DataC == RW_Data->Data) { /*дÈëÕýÈ·£¬Ìø³öÑ­»·²»ÔÙдÈë*/ break; }else { #ifdef DEBUG_OUT sprintf(Debug,"DataC = %f \n",DataC); // UartDebugFun(Debug); sprintf(Debug,"RW_Data->Data = %f \n",RW_Data->Data); // UartDebugFun(Debug); UartDebugFun("RW_Data->ResultFlag = 1!\n"); #endif #ifdef DEBUG_OUT sprintf(Debug,"RTC INT TIME = %02x-%02x-%02x %02x:%02x:%02x \n",calendar.year,calendar.month,calendar.date,calendar.hour,calendar.min,calendar.sec); UartDebugFun(Debug); #endif /*Êý¾Ý¶ÁдÓдí*/ RW_Data->ResultFlag = 1; } } } } } double Read_Verification(u32 addrA,u32 addrB,u32 addrC) // { ReadVerificationData.addrA = addrA; ReadVerificationData.addrB = addrB; ReadVerificationData.addrC = addrC; RW_V(0,&ReadVerificationData); return ReadVerificationData.Data; } void Write_Verification(double WriteData,u32 addrA,u32 addrB,u32 addrC)// { WriteVerificationData.addrA = addrA; WriteVerificationData.addrB = addrB; WriteVerificationData.addrC = addrC; WriteVerificationData.Data = WriteData; RW_V(1,&WriteVerificationData); } void E2TEST(void) //valve²âÊÔº¯Êý { u8 RandNum; if(RandValueFLAG==0) { //ÖØÐ¼ÆËãËæ»úÖµ RandNum = rand()%10 +1; RandValue = RandNum; RandValueFLAG = 1; } if(RandValue>0) { RandValue--; } if(RandValue==0) { RandValueFLAG =0; Settlement_Para.u32PulseCounting = Settlement_Para.u32PulseCounting + 1; Settlement_Para.u32PulseCounting_last = Settlement_Para.u32PulseCounting_last + 1; Settlement_Para.SettlementStorageFlag = 1; #ifdef DEBUG_OUT sprintf(Debug,"u32PulseCounting = %d \r\n", Settlement_Para.u32PulseCounting); UartDebugFun(Debug); #endif if(Settlement_Para.RS485SettlementINGFlag == 0) //RS485ûÓнáËãÖÐ { if(Settlement()) //½áËãÊýÖµ³ö´íÖØÐ½áË㣬×î¶àÈý´Î { if(Settlement()) { Settlement(); } } Settlement_Para.u32PulseCounting_last = 0; Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR); Write_Verification(Settlement_Para.fCumulativeGasUsage,REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR); Write_Verification(Settlement_Para.fCumulativeFeeUsage,REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR); Settlement_Para.SettlementStorageFlag =0; } } }