#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;
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|