This commit is contained in:
2026-03-20 21:19:04 +08:00
parent 90c3d919df
commit 9d3b4b836f
247 changed files with 22127 additions and 30305 deletions

View File

@@ -1,406 +0,0 @@
#include "../main/SystemInclude.h"
//##############################################################################
#if(DP2201_CORE_V5000)
//##############################################################################
// for compute buffer
u32 compareBaseCounter;
u16 compareBaseValue;
//u16 VDUGXHigh, VDUGXRoom, VDUGXLow, sampleSwitchThreshold;
float RhExtGain, RRExtGain;
/**************************************************************************************/
/**
* @brief 电路计算参数初始化
* @note
* @warning
*/
void RHCircuitParameterInit(void)
{
// A type external gain res
// RhExtGainRes = ReadShortParameterFromEEPROM(RH_GAINRES, RH_GAINRES_WIDTH, RH_GAINRES_DEFAULT);
// RhExtGain = 1.0/(float)RhExtGainRes;
//RRExtGainRes = ReadShortParameterFromEEPROM(RR_GAINRES, RR_GAINRES_WIDTH, RR_GAINRES_DEFAULT);
// RRExtGain = (float)RRExtGainRes;
// RRExtGain *= (float)VREF_VDC;
//sampleSwitchThreshold = ReadShortParameterFromEEPROM(SAMPLE_THRESHOLD, SAMPLE_THRESHOLD_WIDTH, SAMPLE_THRESHOLD_DEFAULT);
}
/**************************************************************************************/
/**
* @brief 校准零点
* @note
* @warning
*/
void CalibrateOffset(void)
{
tempL.Word[0] = voltageDetected[NIDX];
offsetAir = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAir));
//tempL.Word[0] += 30;
offsetGas = WriteShortParameterToMemory(GET_MBWORD_ADDR(offsetGas));
tempL.Word[0] = voltageDetected[VDUGX];
offsetAirGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAirGainx));
offsetGasGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetGasGainx));
}
/**************************************************************************************/
/**
* @brief 校准曲线前需要进行的操作:如校零及必要的参数保存等
* @note
* @warning
*/
void PreCalibrationParameterWriting(void)
{
//===========================================================================
tempL.Word[0] = voltageDetected[NIDX];
offsetAir = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAir));
//tempL.Word[0] += 30;
offsetGas = WriteShortParameterToMemory(GAS_OFFSET);
tempL.Word[0] = voltageDetected[VDUGX];
offsetAirGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAirGainx));
offsetGasGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetGasGainx));
//---------------------------------------------------------------------------
tempL.Word[0] = voltageDetected[RRRES];
RRRoom = WriteShortParameterToMemory(GET_WORD_ADDR(RRRoom));
tempL.Word[0] = voltageDetected[IVHDX];
VHHRoom = WriteShortParameterToMemory(GET_WORD_ADDR(VHHRoom));
//---------------------------------------------------------------------------
#ifndef TEMP_CORR_USE_TA
#pragma message("[undefined] TEMP_CORR_USE_TA")
#elif(TEMP_CORR_USE_TA)
tempL.Word[0] = voltageDetected[TPCB];
#else
#ifndef ENABLE_GAS_RECOGNITION
#pragma message("[undefined] ENABLE_GAS_RECOGNITION")
#elif(ENABLE_GAS_RECOGNITION)
tempL.Word[0] = voltageDetected[TGAS];
#else
tempL.Word[0] = voltageDetected[TPCB];
#endif
#endif
//---------------------------------------------------------------------------
calibTemperature = WriteShortParameterToMemory(GET_WORD_ADDR(calibTemperature));
//---------------------------------------------------------------------------
currentMode.Bit.PreCalibEnd = 1;
}
/**************************************************************************************/
/**
* @brief 高低温标定程序:低温参数保存功能
* @note
* @warning
*/
void LowTemperatureParameterWriting(void)
{
if(voltageDetected[TPCB] >= ENABLE_WRITE_TA_LOW)
{
// calibType = ('E'<<8)+'R';
return;
}
tempL.Word[0] = voltageDetected[TPCB];
staticLowTemperature = WriteShortParameterToMemory(GET_WORD_ADDR(staticLowTemperature));
tempL.Word[0] = voltageDetected[RRRES];
RRLow = WriteShortParameterToMemory(GET_WORD_ADDR(RRLow));
tempL.Word[0] = voltageDetected[IVHDX];
VHHLow = WriteShortParameterToMemory(GET_WORD_ADDR(VHHLow));
// for AType FlowRate Compute
//tempL.Word[0] = ReadDataFromMovingAverage(PDRH);
//---------------------------------------------------------------------------
tempL.Word[0] = voltageDetected[PORH];
P0RhLow = WriteShortParameterToMemory(GET_WORD_ADDR(P0RhLow));
tempL.Word[0] = voltageDetected[RHRES];
RHLowTa = WriteShortParameterToMemory(GET_WORD_ADDR(RHLowTa));
//---------------------------------------------------------------------------
tempL.Word[0] = voltageDetected[NIDX];
OffsetLow = WriteShortParameterToMemory(GET_WORD_ADDR(OffsetLow));
tempL.Word[0] = voltageDetected[VDUGX];
VDUGXLow = WriteShortParameterToMemory(GET_WORD_ADDR(VDUGXLow));
//---------------------------------------------------------------------------
// tempL.Word[0] = ReadShortParameterFromMemory(ZEROCAL_STATE, 0);
// tempL.Word[0] &= 0xff00;
// tempL.Word[0] |= 'L';
// WriteShortParameterToMemory(ZEROCAL_STATE);
// currentMode.Bit.LowCalibEnd = 1;
// if(tempL.Word[0] == INTCMD_CALIB_TEMP_END) EnterUserMode();
// tempL.Word[0] = ReadShortParameterFromMemory(SYS_COMMAND, SYS_COMMAND_WIDTH, 0);
// if(tempL.Word[0] == INTCMD_ZERO_CALIB_MODE) EnterZeroCalibMode();
// else EnterUserMode();
currentMode.Bit.LowCalibEnd = 1;
if( currentMode.Bit.HighCalibEnd && currentMode.Bit.LowCalibEnd ) EnterUserMode();
tempL.Word[0] = currentMode.Word;
WriteShortParameterToMemory(SYS_COMMAND);
//calibType = ('L'<<8)+'D';
// calibType &= 0xff00;
// calibType |= 'L';
//
// zeroCalibType &= 0xff00;
// zeroCalibType |= 'L';
// currentMode.Bit.LowCalibEnd = 1;
// if(zeroCalibType == (('H'<<8)+'L'))
// {
// tempL.Word[0] = 0;
// // tempL.Word[0] = WriteShortParameterToMemory(GET_WORD_ADDR());
// EnterUserMode();
// }
}
/**************************************************************************************/
/**
* @brief 高低温标定程序:高温参数保存功能
* @note
* @warning
*/
void HighTemperatureParameterWriting(void)
{
if(voltageDetected[TPCB] <= ENABLE_WRITE_TA_HIGH)
{
// calibType = ('E'<<8)+'R';
return;
}
//------------------------------------------------------------------------------------------------------
tempL.Word[0] = voltageDetected[TPCB];
staticHighTemperature = WriteShortParameterToMemory(GET_WORD_ADDR(staticHighTemperature));
tempL.Word[0] = voltageDetected[RRRES];
RRHigh = WriteShortParameterToMemory(GET_WORD_ADDR(RRHigh));
tempL.Word[0] = voltageDetected[IVHDX];
VHHHigh = WriteShortParameterToMemory(GET_WORD_ADDR(VHHHigh));
// for AType FlowRate Compute
tempL.Word[0] = voltageDetected[PORH];
P0RhHigh = WriteShortParameterToMemory(GET_WORD_ADDR(P0RhHigh));
tempL.Word[0] = voltageDetected[RHRES];
RHHighTa = WriteShortParameterToMemory(GET_WORD_ADDR(RHHighTa));
//------------------------------------------------------------------------------------------------------
tempL.Word[0] = voltageDetected[NIDX];
OffsetHigh = WriteShortParameterToMemory(GET_WORD_ADDR(OffsetHigh));
tempL.Word[0] = voltageDetected[VDUGX];
VDUGXHigh = WriteShortParameterToMemory(GET_WORD_ADDR(VDUGXHigh));
//calibType = ('H'<<8)+'D';
// calibType &= 0x00ff;
// calibType |= ('H'<<8);
// zeroCalibType &= 0x00ff;
// zeroCalibType |= 'H'<<8;
//------------------------------------------------------------------------------------------------------
// tempL.Word[0] = ReadShortParameterFromMemory(ZEROCAL_STATE, 0);
// tempL.Word[0] &= 0x00ff;
// tempL.Word[0] |= ('H'<<8);
// WriteShortParameterToMemory(ZEROCAL_STATE);
currentMode.Bit.HighCalibEnd = 1;
if( currentMode.Bit.HighCalibEnd && currentMode.Bit.LowCalibEnd ) EnterUserMode();
tempL.Word[0] = currentMode.Word;
WriteShortParameterToMemory(SYS_COMMAND);
// if(tempL.Word[0] == INTCMD_CALIB_TEMP_END) EnterUserMode();
//currentMode.Bit.ZeroCalib
// if(zeroCalibType == (('H'<<8)+'L'))
// {
// tempL.Word[0] = 0;
// tempL.Word[0] = WriteShortParameterToMemory(GET_WORD_ADDR());
// EnterUserMode();
// }
}
/**************************************************************************************/
/**
* @brief 高低温标定程序,判断温度是否稳定,是否可以进行参数保存
* @note
* @warning
*/
void SaveVHHAndNRHInTempretureMode(void)
{
if(!currentMode.Bit.ZeroCalib) return;
if(samplingInterval > EXT_POWER_PERIOD_TIME) return;
if((voltageDetected[TPCB] > ENABLE_WRITE_TA_LOW) && (voltageDetected[TPCB] < ENABLE_WRITE_TA_HIGH))
{
compareBaseCounter = 0;
compareBaseValue = voltageDetected[TPCB];
return;
}
compareBaseCounter += (u32)timePeriod;
if((voltageDetected[TPCB] > compareBaseValue + ENABLE_WRITE_TA_SCALE) || (voltageDetected[TPCB] < compareBaseValue - ENABLE_WRITE_TA_SCALE))
{
compareBaseCounter = 0;
compareBaseValue = voltageDetected[TPCB];
}
else
{
//compareBaseCounter += (unsigned long int)timePeriod;
if(compareBaseCounter < (unsigned long int)EXIT_5400S) return; // 1hours // 1hours
if(voltageDetected[TPCB] >= ENABLE_WRITE_TA_HIGH) HighTemperatureParameterWriting();
else if(voltageDetected[TPCB] <= ENABLE_WRITE_TA_LOW) LowTemperatureParameterWriting();
compareBaseCounter=0;
}
}
/**************************************************************************************/
/**
* @brief RH参数计算函数
* @note
* @warning
*/
void ComputeRHParameter(void)
{
float tmpIH, tmpRH;
s32 tempCode;
// comput normal RH
//==============================================================================
// compute RH Voltage
tempCode = (s32)voltageDetected[VRHX];
tempCode -= 32768;
tmpRH = (float)tempCode;
tmpRH *= (float)VRH_VREF;
voltageDetected[RHVOL] = (u16)tmpRH;
// compute IRH
//===========================================================================
tempCode = (s32)voltageDetected[IVHDX];
tempCode -= 32768;
tmpIH = (float)tempCode;
tmpIH = tmpIH * (float)IRH_VREF + (float)IRH_VDC;
tmpIH /= (float)IRH_RC;
tmpRH = tmpRH /tmpIH - (float)IRH_RC;
tmpRH *= 10;
voltageDetected[RHRES] = (u16)tmpRH;
// compute RH power
//===========================================================================
tmpIH *= tmpIH;
tmpIH *= tmpRH;
voltageDetected[PORH] = (u16)tmpIH;
//==============================================================================
//voltageDetected[PORH] = MovingAverage(computePower, 5, PORH);
}
/**************************************************************************************/
/**
* @brief RR参数计算函数
* @note
* @warning
*/
void ComputeRRParameter(void)
{
float tmpVol;
s32 tempCode;
disable_interrupts();
// comput normal (VRR)
//==============================================================================
tempCode = (s32)voltageDetected[VRRX];
tempCode -= 32768;
tmpVol = (float)tempCode;
tmpVol *= (float)VRR_VREF;
tmpVol += (float)VRR_VDC;
voltageDetected[RRVOL] = (u16)(tmpVol + VCOM);
// comput normal RR resistance
//==============================================================================
tmpVol = VRR_BRIDGE_VOL/tmpVol - 1.0;
tmpVol = VRR_RA/tmpVol;
voltageDetected[RRRES] = (u16)tmpVol;
}
/**************************************************************************************/
/**
* @brief InterCurveProcess
* @note
* @warning
*/
void InterCurveProcess(void)
{
calibType = 0;
if(tempL.Word[0] == INTCMD_PRESET_OFFSET) PreCalibrationParameterWriting();
else if(tempL.Word[0] == INTCMD_CALIB_HTEMP) HighTemperatureParameterWriting();
else if(tempL.Word[0] == INTCMD_CALIB_LTEMP) LowTemperatureParameterWriting();
else if(tempL.Word[0] == INTCMD_CTYPE_CURVE) calibType = INTCMD_CTYPE_CURVE;
else if(tempL.Word[0] == INT_2ND_CURVE_CMD) calibType = INT_2ND_CURVE_CMD;
else if(tempL.Word[0] == INT_3RD_CURVE_CMD) calibType = INT_3RD_CURVE_CMD;
else if(tempL.Word[0] == INTCMD_1ST_TABLE) calibType = INTCMD_1ST_TABLE;
else if(tempL.Word[0] == INTCMD_2ND_TABLE) calibType = INTCMD_2ND_TABLE;
else MBBuf.BusError = SLAVE_DEVICE_FAILURE;
}
/**************************************************************************************/
/**
* @brief InterControlProcess
* @note
* @warning
*/
void InterControlProcess(void)
{
if(tempL.Word[0] == INTCMD_USER_MODE) EnterUserMode();
//else if(tempL.Word[0] == INTCMD_EXCALIB_MODE) EnterExtCalibMode(); // calibration mode
else if(tempL.Word[0] == INTCMD_CALIB_MODE) EnterCalibMode(); // calibration mode
else if(tempL.Word[0] == INTCMD_ZERO_CALIB_MODE) {
EnterZeroCalibMode(); // calibration mode
tempL.Word[0] = currentMode.Word;
WriteShortParameterToMemory(SYS_COMMAND);
tempL.Word[0] = INTCMD_ZERO_CALIB_MODE;
}
//------------------------------------------------------------------------
else if(tempL.Word[0] == INTCMD_DEBUG_MODE) EnterDebugMode(); // debug mode
else if(tempL.Word[0] == INTCMD_BATTERY_MODE) EnterBatteryMode(); // battery mode
else if(tempL.Word[0] == INTCMD_GCF_TEST_MODE) EnterGcfTestMode(); // GCF 测试 mode
//else if(tempL.Word[0] == INTCMD_SAVE_SETUP) SaveFactorySetting(); // Save the factory setting
//else if(tempL.Word[0] == INTCMD_RESTORE) RestoreFactorySetting(); // Restore factory settings
else if(tempL.Word[0] == INTCMD_RESET_CORR) DefaultDevCoef(); // Restore
else MBBuf.BusError = SLAVE_DEVICE_FAILURE;
}
/**************************************************************************************/
/**
* @brief InterControlProcess
* @note
* @warning
*/
void InterClearProcess(void)
{
if(tempL.Word[0] == ('B'<<8)+'J') ClearAlarmRecord();
else if(tempL.Word[0] == ('L'<<8)+'S') ClearHistoryRecord();
else if(tempL.Word[0] == ('R'<<8)+'Z') ClearDateRecord();
}
/**************************************************************************************/
/**
* @brief InterControlProcess
* @note
* @warning
*/
void CalibSystemOffset(void )
{
tempL.Word[0] = voltageDetected[NIDX]; // ReadDataFromMovingAverage(NIDX);
if(CMDComPassword == ('K'<<8)+'Q') offsetAir = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAir));
else if(CMDComPassword == ('J'<<8)+'Z') offsetGas = WriteShortParameterToMemory(GAS_OFFSET);
}
//##############################################################################
#endif
//##############################################################################