?? flux_pca.c
字號:
//為了顯示脈沖,使用延時
ucFluxPulseComing = FluxPulseComingDelay;
}
}
/*******************************************************************
流量計脈沖計數器復位函數
函數原型: void fnReset_FluxPulseCounter(bit bIFFluxPositiveTemp);
功能: 流量計脈沖計數器復位函數
參數:bit bIFFluxPositive
0 負流量
1 正流量
********************************************************************/
void fnReset_FluxPulseCounter(bit bIFFluxPositiveTemp)
{
//1. 計數器暫停
FluxPulseCounterDisable;
//2. 計數器清零
//流量計復位掉電確認,只使用一次!!!復位后自動允許
if(bFluxResetEnable == 1)
{
ulFluxPulse = 0;
ulFluxPulseLast = 0;
}
else
{
bFluxResetEnable = 1;
//默認掉電復位的第一次流速統計是不正確的!
ulFluxPulseLast = ulFluxPulse;
}
//3. 所有流量計相關變量初始化。
bFluxLimitOver = 0; //默認值 流量未到達
bIFFluxPositive = bIFFluxPositiveTemp;
ucFluxPulseComing = 0;
lFluxRemainInt = 0;
ucFluxRemainDec = 0;
//流速初始化
ulFluxVelocity = 0;
ulFluxVelocityInt = 0;
ucFluxVelocityDec = 0;
//流量計相關存儲數據讀入
fnRead_FluxPulseCounterData();
}
/*******************************************************************
檢查是否當天過去,并保存當天最大流速
函數原型: void fnCheck_TodayFluxV()
********************************************************************/
void fnCheck_TodayFluxV()
{
//uchar i;
//檢查是否當天已經過去(月、日)
/*if ((uc7_RECFluxVelocityMaxDateTime_Today[6]!= uc8_SystemDateTime[6])|
(uc7_RECFluxVelocityMaxDateTime_Today[5]!= uc8_SystemDateTime[5]))
{
//記錄已經過去的當天最大流量和時間->L4
fnWrite_SystemRecord4(ulRECFluxVelocityMax_Today, uc7_RECFluxVelocityMaxDateTime_Today);
//當天最大流速清零
ulRECFluxVelocityMax_Today = 0;
//記錄新的當天時間
for(i=1;i++;i<7)
uc7_RECFluxVelocityMaxDateTime_Today[i] = uc8_SystemDateTime[i];
}*/
;
}
/*******************************************************************
流量計運行函數(正負流量)
函數原型: void fnRun_Flux();
功能:
1. 脈沖到來的顯示
2. 剩余水量計算(正負流量)
3. 流速計算
4. 流量統計(最大、最小的歷史記錄)
5. 流速統計(最大、最小的歷史記錄)
********************************************************************/
void fnRun_Flux()
{
uchar ucFluxComputeTemp;
ulong ulFluxTemp;
//使用臨時變量代替ulFluxPulse
//防止出現中斷沖突!
//計數器暫停
EC=0;
ulFluxTemp = ulFluxPulse;
//計數器運行
EC=1;
//1. 脈沖到來的顯示
if (ucFluxPulseComing != 0)
{
ucFluxPulseComing --;
//流量計脈沖到來的顯示
fnSet_DisplayLED(6,1,1); //設置第六位LED顯示不閃爍
}
else
fnSet_DisplayLED(6,0,1); //設置第六位LED不顯示
//2. 剩余水量計算
if ( bFluxLimitOver == 0 )
if(bIFFluxPositive)
{
//正流量
//lFluxRemainInt = ( (ulong)uiFluxLimit * uiFluxPulsePerTonWater - ulFluxPulse ) % uiFluxPulsePerTonWater * 10;
lFluxRemainInt = ( ulFluxTemp % uiFluxPulsePerTonWater ) * 10;
ucFluxRemainDec = ( lFluxRemainInt / uiFluxPulsePerTonWater ) * 10 ;
ucFluxRemainDec += ( lFluxRemainInt % uiFluxPulsePerTonWater ) * 10 / uiFluxPulsePerTonWater;
lFluxRemainInt = uiFluxLimit - ulFluxTemp / uiFluxPulsePerTonWater;
if(lFluxRemainInt > 0)
if (ucFluxRemainDec != 0)
{
ucFluxRemainDec = 100 - ucFluxRemainDec;
lFluxRemainInt --;
}
//判斷流量到達
if (ulFluxTemp >= (ulong)uiFluxLimit * uiFluxPulsePerTonWater)
{
bFluxLimitOver = 1;
lFluxRemainInt = 0;
ucFluxRemainDec = 0;
}
}
else
{
//負流量
//lFluxRemainInt = ( (ulong)uiFluxLimit * uiFluxPulsePerTonWater - ulFluxPulse ) % uiFluxPulsePerTonWater * 10;
lFluxRemainInt = ( ulFluxTemp % uiFluxPulsePerTonWater ) * 10;
ucFluxRemainDec = ( lFluxRemainInt / uiFluxPulsePerTonWater ) * 10 ;
ucFluxRemainDec += ( lFluxRemainInt % uiFluxPulsePerTonWater ) * 10 / uiFluxPulsePerTonWater;
lFluxRemainInt = ulFluxTemp / uiFluxPulsePerTonWater - (long)uiFluxLimit * ucFluxLimit_Negative / 10;
ucFluxComputeTemp = (ulong)uiFluxLimit * ucFluxLimit_Negative % 10 * 10;
//if(lFluxRemainInt < 0)
//還是有問題:X.00附近!!
if ( ucFluxComputeTemp < ucFluxRemainDec )
{
ucFluxRemainDec = ucFluxComputeTemp - ucFluxRemainDec;
lFluxRemainInt ++;
}
else
{
ucFluxRemainDec = ucFluxComputeTemp - ucFluxRemainDec;
}
/*
if (ucFluxComputeTemp == 0 )
if (ucFluxRemainDec != 0)
{
ucFluxRemainDec = (long)uiFluxLimit * ucFluxLimit_Negative % 10 * 100 - ucFluxRemainDec;
lFluxRemainInt ++;
}
*/
//判斷流量到達
if (ulFluxTemp >= (ulong)uiFluxLimit * uiFluxPulsePerTonWater * ucFluxLimit_Negative / 10 )
{
bFluxLimitOver = 1;
lFluxRemainInt = 0;
ucFluxRemainDec = 0;
}
}
//3. 流速計算
//每過uiFluxVelocityTime統計一次流量
if ( fnBitTest( ucTurnSecT , 4 ) )
{
ucTurnSecT = fnBitClr( ucTurnSecT , 4 );
uiFluxVelocityTimeS++;
if(uiFluxVelocityTimeS >= uiFluxVelocityTime)
{
uiFluxVelocityTimeS = 0;
//統計流速
//防止流速計算越界!
if(ulFluxTemp >= ulFluxPulseLast)
{
ulFluxVelocity = ulFluxTemp - ulFluxPulseLast;
}
else
{
ulFluxVelocity = 0xFFFFFFFF - ulFluxPulseLast + ulFluxTemp;
}
ulFluxPulseLast = ulFluxTemp;
//脈沖流速單位換算
ulFluxVelocityInt = ( ulFluxVelocity % uiFluxPulsePerTonWater ) * 10;
ucFluxVelocityDec = ( ulFluxVelocityInt / uiFluxPulsePerTonWater ) * 10 ;
ucFluxVelocityDec += ( ulFluxVelocityInt % uiFluxPulsePerTonWater ) * 10 / uiFluxPulsePerTonWater;
ulFluxVelocityInt = ulFluxVelocity / uiFluxPulsePerTonWater;
//檢查是否最大流速!
if (ulRECFluxVelocityMax < ulFluxVelocity)
{
//記錄最大流速(當前時間/日期)
fnWrite_SystemRecord3(1, ulFluxVelocity);
ulRECFluxVelocityMax = ulFluxVelocity;
}
//檢查是否當天最大流速
//if (ulRECFluxVMax_Today < ulFluxVelocity)
//{
//以防萬一,先檢查是否今天已過!保存昨天的數據
// fnCheck_TodayFluxV();
// ulRECFluxVMax_Today = ulFluxVelocity;
//記錄時間
// for(ucFluxComputeTemp=1;ucFluxComputeTemp++;ucFluxComputeTemp<7)
// uc7_RECFluxVMaxDT_Today[ucFluxComputeTemp] = uc8_SystemDateTime[ucFluxComputeTemp];
//}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -