NULL
This commit is contained in:
455
user/Compute/UnitConverter.c
Executable file
455
user/Compute/UnitConverter.c
Executable file
@@ -0,0 +1,455 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
u16 flowDisUnit, flowComUnit, AccDisUnit, AccComputeUnit, AccComUnit;
|
||||
long double lastUnit, currentUnit;
|
||||
|
||||
/******************************************************************************/
|
||||
void CombinedUnitByFlowRate(void)
|
||||
{
|
||||
switch(flowDisUnit)
|
||||
{
|
||||
#if(ENABLE_SCCM_SL)
|
||||
case SCCM: flowUnit = SCCM_SL; break;
|
||||
#endif
|
||||
|
||||
case SLPM:
|
||||
if(AccDisUnit == SL) flowUnit = SLPM_SL;
|
||||
else if(AccDisUnit == NM3) flowUnit = SLPM_NM3;
|
||||
else flowUnit = SLPM_NM3;
|
||||
break;
|
||||
|
||||
#if(ENABLE_NCMH_NM3)
|
||||
case NCMH: flowUnit = NCMH_NM3; break;
|
||||
#endif
|
||||
|
||||
#if(ENABLE_SCFM_SCF)
|
||||
case SCFM: flowUnit = SCFM_SCF; break;
|
||||
#endif
|
||||
|
||||
#if(ENABLE_KGH_KG)
|
||||
case KGH: flowUnit = KGH_KG; break;
|
||||
#endif
|
||||
|
||||
#if(ENABLE_SCFH_SCF)
|
||||
case SCFH: flowUnit = SCFH_SCF; break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void CombinedUnitByACC(void)
|
||||
{
|
||||
switch(AccDisUnit)
|
||||
{
|
||||
case SL:
|
||||
if(flowDisUnit == SLPM) flowUnit = SLPM_SL;
|
||||
else if(flowDisUnit == NM3) flowUnit = SLPM_NM3;
|
||||
#if(ENABLE_SCCM_SL)
|
||||
else if(flowDisUnit == SCCM) flowUnit = SCCM_SL;
|
||||
#endif
|
||||
else flowUnit = SLPM_NM3;
|
||||
break;
|
||||
|
||||
case NM3:
|
||||
if(flowDisUnit == SLPM) flowUnit = SLPM_NM3;
|
||||
#if(ENABLE_NCMH_NM3)
|
||||
else if(flowDisUnit == NM3) flowUnit = NCMH_NM3;
|
||||
#endif
|
||||
else flowUnit = SLPM_NM3;
|
||||
break;
|
||||
|
||||
case SCF:
|
||||
#if(ENABLE_SCFM_SCF)
|
||||
flowUnit = SCFM_SCF;
|
||||
#elif(ENABLE_SCFH_SCF)
|
||||
flowUnit = SCFH_SCF;
|
||||
#endif
|
||||
break;
|
||||
|
||||
#if(ENABLE_KGH_KG)
|
||||
case KGH: flowUnit = KGH_KG; break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
u16 JudgeflowUserUnit(u16 judgeUnit)
|
||||
{
|
||||
switch(judgeUnit)
|
||||
{
|
||||
#if(ENABLE_SCCM_SL)
|
||||
case SCCM: return 1;
|
||||
#endif
|
||||
|
||||
#if(ENABLE_SLPM_NM3)
|
||||
case SLPM: return 1;
|
||||
#endif
|
||||
|
||||
#if(ENABLE_NCMH_NM3)
|
||||
case NCMH: return 1;
|
||||
#endif
|
||||
|
||||
#if(ENABLE_SCFM_SCF)
|
||||
case SCFM: return 1;
|
||||
#endif
|
||||
|
||||
#if(ENABLE_SCFH_SCF)
|
||||
case SCFH: return 1;
|
||||
#endif
|
||||
|
||||
#if(ENABLE_KGH_KG)
|
||||
case KGH: return 1;
|
||||
#endif
|
||||
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
u16 JudgeflowAccUnit(u16 judgeUnit)
|
||||
{
|
||||
switch(judgeUnit)
|
||||
{
|
||||
#if(ENABLE_SCCM_SL)
|
||||
case ML: return 1;
|
||||
#endif
|
||||
|
||||
#if(ENABLE_SLPM_NM3)||(ENABLE_SLPM_SL)
|
||||
case SL: return 1;
|
||||
#endif
|
||||
|
||||
#if((ENABLE_SLPM_NM3)||(ENABLE_NCMH_NM3))
|
||||
case NM3: return 1;
|
||||
#endif
|
||||
|
||||
#if((ENABLE_SCFM_SCF)||(ENABLE_SCFH_SCF))
|
||||
case SCF: return 1;
|
||||
#endif
|
||||
|
||||
#if(ENABLE_KGH_KG)
|
||||
case KG: return 1;
|
||||
#endif
|
||||
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
u16 JudgeflowUnit(u16 judgeUnit)
|
||||
{
|
||||
switch(judgeUnit)
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
#ifndef ENABLE_SCCM_SL
|
||||
#pragma message("[undefined] ENABLE_SCCM_SL")
|
||||
#elif(ENABLE_SCCM_SL)
|
||||
case SCCM_SL:
|
||||
flowDisUnit = SCCM;
|
||||
flowComUnit = SCCM;
|
||||
|
||||
AccDisUnit = SL;
|
||||
AccComputeUnit = SL;
|
||||
AccComUnit = SL;
|
||||
break;
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
#ifndef ENABLE_SLPM_NM3
|
||||
#pragma message("[undefined] ENABLE_SLPM_NM3")
|
||||
#elif(ENABLE_SLPM_NM3)
|
||||
case SLPM_NM3:
|
||||
flowDisUnit = SLPM;
|
||||
flowComUnit = SLPM;
|
||||
|
||||
AccDisUnit = NM3;
|
||||
AccComputeUnit = NM3;
|
||||
AccComUnit = NM3;
|
||||
break;
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
#ifndef ENABLE_NCMH_NM3
|
||||
#pragma message("[undefined] ENABLE_NCMH_NM3")
|
||||
#elif(ENABLE_NCMH_NM3)
|
||||
case NCMH_NM3:
|
||||
flowDisUnit = NCMH;
|
||||
#ifndef ENABLE_FIXED_UART_FR
|
||||
#pragma message("[undefined] ENABLE_FIXED_UART_FR")
|
||||
#elif(ENABLE_FIXED_UART_FR)
|
||||
flowComUnit = SLPM;
|
||||
#else
|
||||
flowComUnit = NCMH;
|
||||
#endif
|
||||
|
||||
AccDisUnit = NM3;
|
||||
AccComputeUnit = NM3;
|
||||
AccComUnit = NM3;
|
||||
break;
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
#ifndef ENABLE_SCFM_SCF
|
||||
#pragma message("[undefined] ENABLE_SCFM_SCF")
|
||||
#elif(ENABLE_SCFM_SCF)
|
||||
case SCFM_SCF:
|
||||
flowDisUnit = SCFM;
|
||||
flowComUnit = SCFM;
|
||||
|
||||
AccDisUnit = SCF;
|
||||
AccComputeUnit = SCF;
|
||||
AccComUnit = SCF;
|
||||
break;
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
#ifndef ENABLE_KGH_KG
|
||||
#pragma message("[undefined] ENABLE_KGH_KG")
|
||||
#elif(ENABLE_KGH_KG)
|
||||
case KGH_KG:
|
||||
flowDisUnit = KGH;
|
||||
flowComUnit = KGH;
|
||||
|
||||
AccDisUnit = KG;
|
||||
AccComputeUnit = KG;
|
||||
AccComUnit = KG;
|
||||
break;
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
#ifndef ENABLE_SLPM_SL
|
||||
#pragma message("[undefined] ENABLE_SLPM_SL")
|
||||
#elif(ENABLE_SLPM_SL)
|
||||
case SLPM_SL:
|
||||
flowDisUnit = SLPM;
|
||||
flowComUnit = SLPM;
|
||||
|
||||
AccDisUnit = SL;
|
||||
AccComputeUnit = ACC_STD_UINT;
|
||||
#ifndef ENABLE_FIXED_UART_FR
|
||||
#pragma message("[undefined] ENABLE_FIXED_UART_FR")
|
||||
#elif(ENABLE_FIXED_UART_FR)
|
||||
AccComUnit = ACC_STD_UINT;
|
||||
#else
|
||||
AccComUnit = SL;
|
||||
#endif
|
||||
break;
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
#ifndef ENABLE_SCFH_SCF
|
||||
#pragma message("[undefined] ENABLE_SCFH_SCF")
|
||||
#elif(ENABLE_SCFH_SCF)
|
||||
case SCFH_SCF:
|
||||
flowDisUnit = SCFH;
|
||||
flowComUnit = SCFH;
|
||||
|
||||
AccDisUnit = SCF;
|
||||
AccComputeUnit = SCF;
|
||||
AccComUnit = SCF;
|
||||
break;
|
||||
#endif
|
||||
|
||||
default: return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
u32 ConvertFlowrate(u32 flowRateBuf, u16 targetUnit, u16 originalUnit)
|
||||
{
|
||||
if(targetUnit == originalUnit) return flowRateBuf;
|
||||
|
||||
long double flowRateTemp;
|
||||
switch(originalUnit)
|
||||
{
|
||||
case SCCM: lastUnit = (long double)ONE_SCCM_TO_STD_FR; break;
|
||||
case SLPM: lastUnit = (long double)ONE_SLPM_TO_STD_FR; break;
|
||||
case NCMH: lastUnit = (long double)ONE_NCMH_TO_STD_FR; break;
|
||||
case SCFM: lastUnit = (long double)ONE_SCFM_TO_STD_FR; break;
|
||||
case KGH: lastUnit = (long double)ONE_KGH_TO_STD_FR; break;
|
||||
case SCFH: lastUnit = (long double)ONE_SCFH_TO_STD_FR; break;
|
||||
default: lastUnit = 1;
|
||||
}
|
||||
|
||||
switch(targetUnit)
|
||||
{
|
||||
case SCCM: flowRateTemp = (long double)ONE_STD_FR_TO_SCCM; break;
|
||||
case SLPM: flowRateTemp = (long double)ONE_STD_FR_TO_SLPM; break;
|
||||
case NCMH:
|
||||
flowRateTemp = (long double)ONE_STD_FR_TO_NCMH;
|
||||
break;
|
||||
case SCFM: flowRateTemp = (long double)ONE_STD_FR_TO_SCFM; break;
|
||||
case KGH: flowRateTemp = (long double)ONE_STD_FR_TO_KGH; break;
|
||||
case SCFH: flowRateTemp = (long double)ONE_STD_FR_TO_SCFH; break;
|
||||
default: flowRateTemp = 1;
|
||||
}
|
||||
|
||||
flowRateTemp *= (long double)lastUnit;
|
||||
flowRateTemp *= (long double)flowRateBuf;
|
||||
|
||||
return (u32)flowRateTemp;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void ConvertAllFlowRateAndSave(u16 NewFlowUnit)
|
||||
{
|
||||
u16 I;
|
||||
long double totalFlowRateCompute;
|
||||
u16 originalFlowUnit, originalAccComputeUnit;
|
||||
unsigned long long int tmpQWordA;
|
||||
|
||||
originalFlowUnit = flowComUnit;
|
||||
originalAccComputeUnit = AccComputeUnit;
|
||||
if(JudgeflowUnit(NewFlowUnit)) return;
|
||||
|
||||
disable_interrupts();
|
||||
// flowUnit
|
||||
// max flowRate
|
||||
maxFlowRate = ConvertFlowrate(maxFlowRate, flowComUnit, originalFlowUnit);
|
||||
tempDev.DWord[0] = maxFlowRate;
|
||||
maxFlowRate = WriteLongParameterToMemory(OUT_MAX_FLOW);
|
||||
tempL.DWord = maxFlowRate;
|
||||
maxFlowRateH = tempL.Word[1];
|
||||
maxFlowRateL = tempL.Word[0];
|
||||
|
||||
// min flowRate
|
||||
minFlowRate = ConvertFlowrate(minFlowRate, flowComUnit, originalFlowUnit);
|
||||
tempDev.DWord[0] = minFlowRate;
|
||||
minFlowRate = WriteLongParameterToMemory(OUT_MIN_FLOW);
|
||||
tempL.DWord = minFlowRate;
|
||||
minFlowRateH = tempL.Word[1];
|
||||
minFlowRateL = tempL.Word[0];
|
||||
|
||||
// alarmUpperFlowRate = ConvertFlowrate(alarmUpperFlowRate, flowComUnit, originalFlowUnit);
|
||||
// tempDev.DWord[0] = alarmUpperFlowRate;
|
||||
// alarmUpperFlowRate = WriteShortParameterToEEPROM(HIGH_FLOW_ALARM, HIGH_FLOW_ALARM_WIDTH);
|
||||
//
|
||||
// alarmLowerFlowRate = ConvertFlowrate(alarmLowerFlowRate, flowComUnit, originalFlowUnit);
|
||||
// tempDev.DWord[0] = alarmLowerFlowRate;
|
||||
// alarmLowerFlowRate = WriteParameterToEEPROM(LOW_FLOW_ALARM, LOW_FLOW_ALARM_WIDTH);
|
||||
|
||||
// correct data
|
||||
for(I = 0; I < (u16)dcoefNum; I++)
|
||||
{
|
||||
dcoefNode[I] = ConvertFlowrate(dcoefNode[I], flowComUnit, originalFlowUnit);
|
||||
StoreDevCoefNodeAndValue(I);
|
||||
}
|
||||
|
||||
// Convert ACC FlowRate
|
||||
// to STD flowunit
|
||||
if(originalAccComputeUnit != AccComputeUnit)
|
||||
{
|
||||
// У<D0A3><D7BC><EFBFBD><EFBFBD>ΪSLPMʱ<4D><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪNM3,6λС<CEBB><D0A1>
|
||||
switch(originalAccComputeUnit)
|
||||
{
|
||||
//case ML: lastUnit = (long double)ONE_ML_TO_STD_ACC; break;
|
||||
case SL: lastUnit = (long double)ONE_SL_TO_STD_ACC; break;
|
||||
case NM3: lastUnit = (long double)ONE_NCM_TO_STD_ACC; break;
|
||||
case SCF: lastUnit = (long double)ONE_SCF_TO_STD_ACC; break;
|
||||
case KG: lastUnit = (long double)ONE_KG_TO_STD_ACC; break;
|
||||
default: lastUnit = 1;
|
||||
}
|
||||
|
||||
// to User FlowUnit
|
||||
switch(AccComputeUnit)
|
||||
{
|
||||
//case ML: totalFlowRateCompute = (long double)ONE_STD_ACC_TO_ML; break;
|
||||
case SL: totalFlowRateCompute = (long double)ONE_STD_ACC_TO_SL; break;
|
||||
case NM3: totalFlowRateCompute = (long double)ONE_STD_ACC_TO_NCM; break;
|
||||
case SCF: totalFlowRateCompute = (long double)ONE_STD_ACC_TO_SCF; break;
|
||||
case KG: totalFlowRateCompute = (long double)ONE_STD_ACC_TO_KG; break;
|
||||
default: totalFlowRateCompute = 1;
|
||||
}
|
||||
|
||||
ReleaseTotalToDisArray();
|
||||
ReleaseToIntAndDecimalBuf();
|
||||
totalFlowRateCompute *= (long double)flowTotalBuffer;
|
||||
totalFlowRateCompute *= lastUnit;
|
||||
flowTotalBuffer = (unsigned long long int)totalFlowRateCompute;
|
||||
|
||||
// convert HEX TO BCD
|
||||
tmpQWordA = flowTotalBuffer;
|
||||
tmpQWordA /= 1000000000;
|
||||
tmpLA = (u32)tmpQWordA;
|
||||
tmpQWordA *= 1000000000;
|
||||
flowTotalBuffer -= tmpQWordA;
|
||||
tmpLB = (u32)flowTotalBuffer;
|
||||
|
||||
ConvertHEXToBCDArray(tmpLB, &Dis2[5], 9, HIGH_FIRST);
|
||||
ConvertHEXToBCDArray(tmpLA, &Dis2[0], 5, HIGH_FIRST);
|
||||
SendToTotalArray();
|
||||
|
||||
ReleaseToIntAndDecimalBufForUart();
|
||||
for(I=0; I <= REC_ACC_DEPTH; I++) FRAMWriteTotal();
|
||||
|
||||
lastRemaining = 0;
|
||||
flowAccCumulationRemaining = 0;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
tempL.Word[0] = NewFlowUnit;
|
||||
flowUnit = WriteShortParameterToMemory(FLOW_UNIT);
|
||||
}
|
||||
|
||||
//******************************************************************************
|
||||
u16 ReturnStartUnitBit(u16 stdBit)
|
||||
{
|
||||
switch(AccComputeUnit)
|
||||
{
|
||||
case SL:
|
||||
if(AccComUnit == ML) stdBit += 3;
|
||||
break;
|
||||
|
||||
case NM3:
|
||||
if(AccComUnit == SL) stdBit += 3;
|
||||
break;
|
||||
}
|
||||
|
||||
return stdBit;
|
||||
}
|
||||
|
||||
//******************************************************************************
|
||||
// V2004
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪSLPM<50><4D>NCMHʱ<48><CAB1><EFBFBD><EFBFBD>С<EFBFBD><D0A1>λ 1mL
|
||||
// Flow Unit = SLPM: (((Flow*60)/1000)*1000)/TimeBase
|
||||
// Flow Unit = NCMH: (Flow*1000)/TimeBase
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
// FRUnitForHour[] ={28800, 14400, 7200, 3600, 1800, 900}
|
||||
// FRUnitForMinute[] ={480, 240, 120, 60, 30, 15}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0xFFFFFFF/(1000/15):65000000
|
||||
u16 ConvertTimeBaseAndUnit(u16 unit, u16 timeBaseIndex)
|
||||
{
|
||||
switch(unit)
|
||||
{
|
||||
case SCCM: // ACC->SLPM
|
||||
case SLPM: // ACC->SLPM
|
||||
AccComputeTimeBase = (u32)FRUnitForMinute[timeBaseIndex];
|
||||
return 1;
|
||||
|
||||
case SCFM:
|
||||
AccComputeTimeBase = (u32)FRUnitForMinute[timeBaseIndex];
|
||||
break;
|
||||
|
||||
default: AccComputeTimeBase = (u32)FRUnitForHour[timeBaseIndex];
|
||||
break;
|
||||
}
|
||||
|
||||
return 1000;
|
||||
}
|
||||
|
||||
//******************************************************************************
|
||||
void UnitConverterInit(void)
|
||||
{
|
||||
//ReadMultiByteFromEEPROM(CALIB_DIAMETER, tempL.Byte, CALIB_DIAMETER_WIDTH, PARA_EEPROM);
|
||||
//if(tempL.Byte[CALIB_DIAMETER_CRC] != CRC8(tempL.Byte, CALIB_DIAMETER_CRC)) flowUnit = CALIB_DIAMETER_DEFAULT;
|
||||
//else flowUnit = tempL.Word[0];
|
||||
|
||||
flowUnit = (u16)ReadShortParameterFromMemory(FLOW_UNIT, FLOW_UNIT_DEFAULT);
|
||||
if(JudgeflowUnit(flowUnit))
|
||||
{
|
||||
flowUnit = FLOW_UNIT_DEFAULT;
|
||||
JudgeflowUnit(flowUnit);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user