#include "../main/SystemInclude.h" static s16 GasAnalysisCNT; u16 ATypeNode[CURVE_DATA_MAX], ATypeVal[CURVE_DATA_MAX], curveATypeNum; bool isCurrentGas; /******************************************************************************/ void GasAnalysisParameterInit(void) { VHHParameterAir = (u16)ReadParameterFromMemory(VHH_AIR_PARA, VHH_AIR_PARA_WIDTH, RH_PARA_DEFAULT); VHHParameterScale = (u16)ReadParameterFromMemory(VHH_PARA_SCALE, VHH_PARA_SCALE_WIDTH, 1000); //------------------------------------------------------------------------------ #ifndef ENABLE_GAS_RECOGNITION_TABLE #pragma message("[undefined] ENABLE_GAS_RECOGNITION_TABLE") #elif(ENABLE_GAS_RECOGNITION_TABLE) ReadVHHCurveFromMemory(); #endif //------------------------------------------------------------------------------ #ifndef ENABLE_DENSITY_DETECT #pragma message("[undefined] ENABLE_DENSITY_DETECT") #elif(ENABLE_DENSITY_DETECT) densityFSParameter = (u16)ReadParameterFromMemory(DENSITY_FS_PARA, DENSITY_FS_PARA_WIDTH, DENSITY_FS_PARA_DEFAULT); #endif } /******************************************************************************/ unsigned int ComputeZeroVHH(void) { tmpSLA = (unsigned long int)voltageDetected[RRRES]; tmpSLA -= (unsigned long int)NRHRoom; tmpSLB = (unsigned long int)VHHHigh; tmpSLB -= (unsigned long int)VHHLow; tmpSLA *= tmpSLB; tmpSLB = (unsigned long int)NRHHigh; tmpSLB -= (unsigned long int)NRHLow; tmpSLA /= tmpSLB; tmpSLA += (unsigned long int)VHHRoom; return (unsigned int)tmpSLA; } /******************************************************************************/ bool GasAnasisOneTime(void) { signed int valueTemp; valueTemp = (signed int)(voltageDetected[VHPA] - VHHParameterAir); if(abs(valueTemp) < VHHParameterScale) return 1; else return 0; } /******************************************************************************/ void GasAnasisCompute(void)// { //=========================================================================== voltageDetected[CVHHX] = ComputeZeroVHH(); voltageDetected[DVHHX] = WordSubFunction(voltageDetected[IVHDX], voltageDetected[CVHHX]); //=========================================================================== #ifndef ENABLE_GAS_RECOGNITION_TABLE #pragma message("[undefined] ENABLE_GAS_RECOGNITION_TABLE") #elif(ENABLE_GAS_RECOGNITION_TABLE) voltageDetected[VHPA] = FindVHHInCalibCurve(voltageDetected[RGIDX]); #else voltageDetected[VHPA] = (unsigned int)GetFlowRate(voltageDetected[REG_INDEX], ATYPE_VH); #endif voltageDetected[VHPA] = WordSubFunction(voltageDetected[DVHHX], voltageDetected[VHPA]); voltageDetected[VHPA] = MovingAverage(voltageDetected[VHPA], 5, VHPA); VHHParameter = voltageDetected[VHPA]; if((VHHParameter < 32780) & (VHHParameter > 32700)) //32700-32780 { GasAnalysisCNT--; return; } //=========================================================================== if(GasAnasisOneTime()) GasAnalysisCNT--; else GasAnalysisCNT++; if(GasAnalysisCNT > 3) { systemAlarm.Bit.GasChange = 1; //½éÖʸıä GasAnalysisCNT = 0; } else if(GasAnalysisCNT < -3) { systemAlarm.Bit.GasChange = 0; GasAnalysisCNT = 0; } } /******************************************************************************/ void ReadVHHCurveFromMemory(void) { unsigned int I; curveATypeNum = (unsigned int)ReadParameterFromMemory(ATYPECURVE_NUM, ATYPECURVE_NUM_WIDTH, ATYPECURVE_NUM_DEFAULT); for(I=0; I CURVE_DATA_MAX)) { return 0; } //---------------------------------------------------------------------------- if(calibIndex > 32767) calibIndex = 0; //---------------------------------------------------------------------------- for(I = 0; I < curveATypeNum - 1; I++) { if(ATypeNode[I] > 32767) continue; if(ATypeNode[I] > calibIndex) break; } //---------------------------------------------------------------------------- if(I == 0) return ATypeVal[0]; //---------------------------------------------------------------------------- Secondary.NodeX = calibIndex; if(ATypeNode[I] > 32767) Secondary.NodeH = 0; else Secondary.NodeH = ATypeNode[I]; if(ATypeNode[I-1] > 32767) Secondary.NodeL = 0; else Secondary.NodeL = ATypeNode[I-1]; Secondary.ValueH = ATypeVal[I]; Secondary.ValueL = ATypeVal[I-1]; return SecondaryCompute(); } /******************************************************************************/ #ifndef ENABLE_DENSITY_DETECT #pragma message("[undefined] ENABLE_DENSITY_DETECT") #elif(ENABLE_DENSITY_DETECT) void GasDensityCompute(void) { Secondary.NodeH = densityFSParameter; Secondary.NodeL = VHHParameterAir; Secondary.NodeX = voltageDetected[VHPA]; Secondary.ValueH = DENSITY_FS; Secondary.ValueL = DENSITY_ZERO; density = SecondaryCompute(); if(density > Secondary.ValueH) density = Secondary.ValueH; } #endif