📄 adsample.c
字号:
break;
}
}
}
}
//-------------------------------minimum value------------------------------
if(s<=AD.uiMinValue3[29])
{
if(AD.uchCurMinCount<15)
{
AD.uchCurMinCount++;
k=29;
}
else
{
k=0;
for(i=29;i>=14;i--)
{
if((AD.uiMinGroup3[i]==uiCurGroupIndex)&&(s<AD.uiMinValue3[i]))
{
k=i;
break;
}
}
}
if(k!=0)
{
AD.uiMinValue3[k] = s;
AD.uiMinGroup3[k] = uiCurGroupIndex;
for(i=k-1;i>=0;i--)
{
if(s<=AD.uiMinValue3[i])
{
AD.uiMinValue3[i+1] = AD.uiMinValue3[i];
AD.uiMinGroup3[i+1] = AD.uiMinGroup3[i];
AD.uiMinValue3[i] = s;
AD.uiMinGroup3[i] = uiCurGroupIndex;
}
}
}
}
}
//------------------------Group Replacement-------------------
AD.uchCurMinCount=0;
AD.uchCurMaxCount=0;
AD.uiCurPKPKValue[3]=((AD.uiMaxValue3[14]+AD.uiMinValue3[14])*3/2+AD.uiLastPKPKValue[3])>>2;
AD.uiLastPKPKValue[3]=AD.uiCurPKPKValue[3];
i=0;
for(j=0;j<30;j++)
{
if((AD.uiMaxGroup3[j]!=uiPassedGroupIndex)&&(AD.uiMaxGroup3[j] < uiGroupNum))
{
AD.uiMaxGroup3[i]=AD.uiMaxGroup3[j];
AD.uiMaxValue3[i]=AD.uiMaxValue3[j];
i++;
}
}
while(i<30)
{
AD.uiMaxValue3[i] = 1;
i++;
}
i=0;
for(j=0;j<30;j++)
{
if((AD.uiMinGroup3[j]!=uiPassedGroupIndex)&&(AD.uiMinGroup3[j] < uiGroupNum))
{
AD.uiMinGroup3[i]=AD.uiMinGroup3[j];
AD.uiMinValue3[i]=AD.uiMinValue3[j];
i++;
}
}
while(i<30)
{
AD.uiMinValue3[i] = 4095;
i++;
}
FeedDog();
}
//--------------------------------------------------------
//函数名称:float CaculateIntegralScale(unsigned char uchChannel)
//功 能:计算积分通道的满量程占AD的范围
//输入参数:通道号
//返 回:积分通道的满量程占AD的范围
//完成日期:9/26/2007
//作 者:佟文杰
//----------------------------------------------------------
float CaculateIntegralScale(unsigned char uchChannel)
{
xdata float fRealACScale;
switch(AD.uchChType[uchChannel - 1])
{
case 14: //加速度输入 速度输出
fRealACScale = (float)AD.uiSenSensitive[uchChannel - 1] * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[uchChannel - 1])/19.51; //要加系数,不加系数计算的数据不正确
fRealACScale = fRealACScale * (AD.uiACADSpan[uchChannel - 1] - AD.uiACADZero[uchChannel - 1]); //19.5098 确切数据
fRealACScale = fRealACScale / 2500;
fRealACScale = fRealACScale / 100;
break;
case 17: //速度输入 位移输出
fRealACScale = (float)AD.uiSenSensitive[uchChannel - 1] * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[uchChannel - 1])/1.99; //要加系数,不加系数计算的数据不正确
fRealACScale = fRealACScale * (AD.uiACADSpan[uchChannel - 1] - AD.uiACADZero[uchChannel - 1]); //1.98944 确切数据
fRealACScale = fRealACScale / 2500;
fRealACScale = fRealACScale / 1000;
break;
}
return fRealACScale;
}
//--------------------------------------------------------
//函数名称:float CaculateNotIntegralScale(unsigned char uchChannel)
//功 能:计算不是积分通道的满量程占AD的范围
//输入参数:通道号
//返 回:非积分通道的满量程占AD的范围
//完成日期:9/26/2007
//作 者:佟文杰
//----------------------------------------------------------
float CaculateNotIntegralScale(unsigned char uchChannel)
{
xdata float fRealACScale;
fRealACScale = (float)AD.uiSenSensitive[uchChannel - 1] * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[uchChannel - 1]);
fRealACScale = fRealACScale * (AD.uiDCADSpan[uchChannel - 1] - AD.uiDCADZero[uchChannel - 1]); //满量程值对应AD值
switch(AD.uchChType[uchChannel - 1])
{
case 13: //加速度输入 加速度输出
fRealACScale = fRealACScale / 100;
break;
case 16: //速度输入 速度输出 灵敏度乘以了1000
fRealACScale = fRealACScale / 100;
fRealACScale = fRealACScale / 1000;
break;
case 18: //位移输入 位移输出
fRealACScale = fRealACScale / 1000;
break;
}
fRealACScale = fRealACScale / 2000;
return fRealACScale;
}
//--------------------------------------------------------
//函数名称:float CaculateNotIntegralLittleRangeScale(unsigned char uchChannel)
//功 能:计算不是积分通道的小量程满量程占AD的范围
//输入参数:通道号
//返 回:非积分通道的小量程满量程占AD的范围
//完成日期:9/26/2007
//作 者:佟文杰
//----------------------------------------------------------
float CaculateNotIntegralLittleRangeScale(unsigned char uchChannel)
{
xdata float fRealACScale;
fRealACScale = (float)AD.uiSenSensitive[uchChannel - 1] * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[uchChannel - 1]);
fRealACScale = fRealACScale * (AD.uiLittleRangeADSpan[uchChannel - 1] - AD.uiLittleRangeADZero[uchChannel - 1]); //满量程值对应AD值
switch(AD.uchChType[uchChannel - 1])
{
case 13: //加速度输入 加速度输出
fRealACScale = fRealACScale / 100;
break;
case 16: //速度输入 速度输出 灵敏度乘以了1000
fRealACScale = fRealACScale / 100;
fRealACScale = fRealACScale / 1000;
break;
case 18: //位移输入 位移输出
fRealACScale = fRealACScale / 1000;
break;
}
fRealACScale = fRealACScale / 400;
return fRealACScale;
}
//--------------HHH---------------------------------------
//函数名称:float CaculateLVDTScale(unsigned char uchChannel)
//功 能:计算LVDT通道的满量程占AD的范围
//输入参数:通道号
//返 回:LVDT通道的满量程占AD的范围
//完成日期:1/24/2008
//作 者:马爱虹
//----------------------------------------------------------
float CaculateLVDTScale(unsigned char uchChannel)
{
xdata float fRealACScale;
unsigned int uiLVDTzero;
uiLVDTzero = (AD.uiGAPADFull[uchChannel - 1] - AD.uiGAPADZero[uchChannel - 1])/15;
if(AD.uiGAPADZero[uchChannel - 1]>uiLVDTzero)
{
uiLVDTzero=AD.uiGAPADZero[uchChannel - 1]-uiLVDTzero;
AD.uiGAPADLVDTZero[uchChannel - 1]=uiLVDTzero;
}
else //否则取0V的AD值为0
{
uiLVDTzero=0;
AD.uiGAPADLVDTZero[uchChannel - 1]=uiLVDTzero;
}
fRealACScale = (float)AD.uiSenSensitive[uchChannel - 1] * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[0]); //f*full=10V
fRealACScale = fRealACScale * (AD.uiGAPADFull[uchChannel - 1] - uiLVDTzero);
switch(AD.uchChType[uchChannel - 1])
{
case 22:
case 28:
fRealACScale = fRealACScale / 100;
break;
default:
break;
}
fRealACScale = fRealACScale / 16000;
return fRealACScale;
}
//---------------------------HHH-----------------------------
//函数名称:long CalculateLVDTZeroPosition(unsigned char uchChannel,int iLVDTZeroPosition)
//功 能:计算LVDT零点标志
//输入参数:通道号,LVDT零点电压 AD.iZeroPosition[uchChannel - 1]
//返 回:无
//完成日期:1/24/2008
//作 者:马爱虹
//----------------------------------------------------------
long CalculateLVDTZeroPosition(unsigned char uchChannel)
{
xdata long lTempData;
lTempData = (long)AD.iZeroPosition[uchChannel - 1] * ((long)AD.uiGAPADFull[uchChannel - 1] - (long)AD.uiGAPADLVDTZero[uchChannel - 1]);
lTempData = lTempData / 16000;
lTempData = lTempData + (long)AD.uiGAPADLVDTZero[uchChannel - 1];
return lTempData;
}
//--------------------------------------------------------
//函数名称:void CalculateIntegralChannelValue(unsigned char uchChannel,float fIntegralData)
//功 能:计算积分通道的数据
//输入参数:通道号,积分通道的数据
//返 回:无
//完成日期:9/26/2007
//作 者:佟文杰
//----------------------------------------------------------
void CalculateIntegralChannelValue(unsigned char uchChannel,float fIntegralData)
{
xdata float fTempData;
xdata long lTempData;
if (AD.uchtMeasureType[uchChannel - 1] == 3) //有效值
{
if (fIntegralData > 5) ///AD.fRMSIntegrateZeroValue[uchChannel - 1])
{
if (fIntegralData < 10)
{
fTempData = (fIntegralData - 5) / AD.fRealIntegralScaleData[uchChannel - 1]; //20080730
}
else
{
fTempData = fIntegralData / AD.fRealIntegralScaleData[uchChannel - 1]; //20080730
}
}
else
{
fTempData = 0;
}
/* if (fIntegralData > 3)
{
fTempData = (fIntegralData - 1) / AD.fRealIntegralScaleData[uchChannel - 1]; //20080714 新添加减1操作,降低有效值的上限
}
else
{
fTempData = 0;
}*/
}
else
{
if(fIntegralData > AD.uiACADZero[uchChannel - 1])
{
if (fIntegralData > 30)
{
fTempData = fIntegralData - AD.uiACADZero[uchChannel - 1];
fTempData += 2;
}
else
{
fTempData = fIntegralData - AD.uiACADZero[uchChannel - 1];
}
fTempData = fTempData / AD.fRealIntegralScaleData[uchChannel - 1];
}
else
{
fTempData = 0;
}
}
if (fTempData > 6.5) //计算上传的比例值不能超过量程的6.5倍
{
fTempData = 6.5;
}
lTempData = fTempData * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[uchChannel - 1]) + AD.iScaleLow[uchChannel - 1]; //实际测量值
if (lTempData > 32700)
{
lTempData = 32700;
}
/* if (AD.uchChType[0] == 14) //a-v类型 判断 20080910
{
if (lTempData <= 100) //小于1mm/s,做5次平均计算
{
fPercentValueBAK[uchChannel -1][uchPercentCountNumber] = fTempData;
uchPercentCountNumber = (uchPercentCountNumber++) & 0x03;
fTempData = (fTempData + fPercentValueBAK[uchChannel -1][0] + fPercentValueBAK[uchChannel -1][1] + fPercentValueBAK[uchChannel -1][2] + fPercentValueBAK[uchChannel -1][3]) / 5;
}
else
{
;
}
} */
/* else if ((AD.uchChType[uchChannel - 1] == 14) || (AD.uchChType[uchChannel - 1] == 16))
{
if (lTempData <= 100) //小于1mm/s ,做平均计算
{
}
else
{
;
}
}
else
{
;
} */
AD.iActualValue[uchChannel - 1][1] = fTempData*5000;
AD.iActualValue[uchChannel - 1][0] = lTempData;
}
//--------------------------------------------------------
//函数名称:void JudgeChannelScale(unsigned char uchChannel)
//功 能:计算大小量程
//输入参数:通道号
//返 回:无
//完成日期:9/26/2007
//作 者:佟文杰
//----------------------------------------------------------
void JudgeChannelScale(unsigned char uchChannel)
{
if (((AD.iScaleHigh[uchChannel - 1] > 5000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 10000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 5000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 3))
|| ((AD.iScaleHigh[uchChannel - 1] > 250) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 500) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 200) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 3))
|| ((AD.iScaleHigh[uchChannel - 1] > 120) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 60) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 50) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 3)))
{
uchChannelScaleStatus[uchChannel - 1] = 1;
}
else
{
uchChannelScaleStatus[uchChannel - 1] = 0;
}
}
//--------------------------------------------------------
//函数名称:void CalculateNotIntegralChannelValue(unsigned char uchChannel,float fNotIntegralData)
//功 能:计算非积分通道的数据
//输入参数:通道号 , 非积分通道的数据
//返 回:无
//完成日期:9/26/2007
//作 者:佟文杰
//----------------------------------------------------------
void CalculateNotIntegralChannelValue(unsigned char uchChannel,float fNotIntegralData)
{
xdata float fTempData;
xdata long lTempData;
// xdata float fTempNumber;
/* if (((AD.iScaleHigh[uchChannel - 1] > 5000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 10000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 5000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 3))
|| ((AD.iScaleHigh[uchChannel - 1] > 250) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 500) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 200) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 3))
|| ((AD.iScaleHigh[uchChannel - 1] > 120) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 60) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 50) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 3)))
*/
if (uchChannelScaleStatus[uchChannel - 1] == 1)
{
if (AD.uchtMeasureType[uchChannel - 1] == 3)
{
/* if (fNotIntegralData > 2)
{
fTempData = fNotIntegralData / AD.fRealNotIntegralScaleData[uchChannel - 1];
}
else
{
fTempData = 0;
} */
if (fNotIntegralData > AD.fRMSNotIntegrateLargeRangeValue[uchChannel - 1]) //20080730
{
fTempData = (fNotIntegralData - AD.fRMSNotIntegrateLargeRangeValue[uchChannel - 1]) / AD.fRealNotIntegralScaleData[uchChannel - 1];
}
else
{
fTempData = 0;
}
}
else
{
if (fNotIntegralData > (float)AD.uiDCADZero[uchChannel - 1])
{
fTempData = fNotIntegralData - AD.uiDCADZero[uchChannel - 1];
fTempData = fTempData / AD.fRealNotIntegralScaleData[uchChannel - 1];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -