这个是我做的零点跟踪。大致是把总重的数据total 先转换成他的绝对值,然后根据菜单中设置的小数位信息把他放大10倍,100倍,1000倍,10000倍,然后取整,对应小数位是1为小数,2为小数,3为小数,4为小数。然后把他根据显示分度值的信息在做转换,方法是把那个放大的数据减去该数据对显示分度值的模。最后根据零点跟踪的信息来跟踪,具体做法是,在2秒钟内如果重量的变化不小于零点跟踪值,就直接把他清零。
上面是我的想法,程序也是根据这个想法写的,但是在实际中,该零点跟踪的部分,起不到应有的作用。
问题是: 我的程序有没有正确反映我的想法?还有那位大侠做过称重仪表方面的零点跟踪,给点建议,谢谢
说明: 由于长度限制下面的代码只是零点跟踪中的一部分,只在分度值d = 1,和d = 2 的情况下做的零点跟踪。
/********零点跟踪处理开始**************/
void DealZero()
{
xdata uint tempWght = 0;//用来把浮点型的总重根据小数位信息转换成无符号的
if(total < 0)
total = -total;//下面的处理就是对绝对值进行 当最后的数据显示还是根据最初总重符号来区别正负
switch(decNum)//decNum是小数位信息
{
case 0://没有小数,即把浮点数取整处理
{
tempWght = (uint)(total);
}break;
case 1://1为小数
{
tempWght = (uint)(total * 10);
}break;
case 2://2位小数
{
tempWght = (uint)(total * 100);
}break;
case 3://3为小数
{
tempWght = (uint)(total * 1000);
}break;
case 4:
{
tempWght = (uint)(total * 10000);
}break;
default:break;
}
switch(divNum)//divNum是分度值信息
{
case 0://d = 1
{
tempWghtDisp = tempWght ;
switch(traNum)//在分度值为1的情况下0.5d,1d没有实际的作用
{
case 2://2d
{
if(tempWghtDisp < 2)
{
if(timeFlag)//50ms时标
{
timeFlag = 0;
timeCount++;
if(timeCount > 40)//跟踪2秒钟
{
timeCount = 0;
tempWghtDisp = 0;
}
}
}
}break;
case 3://5d
{
if(tempWghtDisp < 5)
{
if(timeFlag)
{
timeFlag = 0;
timeCount++;
if(timeCount > 40)//跟踪2秒钟
{
timeCount = 0;
tempWghtDisp = 0;
}
}
}
}break;
case 4://10d
{
if(tempWghtDisp < 10)
{
if(timeFlag)
{
timeFlag = 0;
timeCount++;
if(timeCount > 40)//跟踪2秒钟
{
timeCount = 0;
tempWghtDisp = 0;
}
}
}
}break;
case 5://20d
{
if(tempWghtDisp < 20)
{
if(timeFlag)
{
timeFlag = 0;
timeCount++;
if(timeCount > 40)//跟踪2秒钟
{
timeCount = 0;
tempWghtDisp = 0;
}
}
}
}break;
case 6://50d
{
if(tempWghtDisp < 50)
{
if(timeFlag)
{
timeFlag = 0;
timeCount++;
if(timeCount > 40)//跟踪2秒钟
{
timeCount = 0;
tempWghtDisp = 0;
}
}
}
}break;
default:break;
}
}break;
case 1://d = 2;
{
tempWghtDisp = (tempWght - tempWght % 2);
switch(traNum)//在d=2的情况下0.5d没有意义
{
case 1://1d
{
if(tempWghtDisp < 2)
{
if(timeFlag)
{
timeFlag = 0;
timeCount++;
if(timeCount > 40)//跟踪2秒钟
{
timeCount = 0;
tempWghtDisp = 0;
}
}
}
}break;
case 2://2d
{
if(tempWghtDisp < 4)
{
if(timeFlag)
{
timeFlag = 0;
timeCount++;
if(timeCount > 40)//跟踪2秒钟
{
timeCount = 0;
tempWghtDisp = 0;
}
}
}
}break;
case 3://5d
{
if(tempWghtDisp < 10)
{
if(timeFlag)
{
timeFlag = 0;
timeCount++;
if(timeCount > 40)//跟踪2秒钟
{
timeCount = 0;
tempWghtDisp = 0;
}
}
}
}break;
case 4://10d
{
if(tempWghtDisp < 20)
{
if(timeFlag)
{
timeFlag = 0;
timeCount++;
if(timeCount > 40)//跟踪2秒钟
{
timeCount = 0;
tempWghtDisp = 0;
}
}
}
}break;
case 5://20d
{
if(tempWghtDisp < 40)
{
if(timeFlag)
{
timeFlag = 0;
timeCount++;
if(timeCount > 40)//跟踪2秒钟
{
timeCount = 0;
tempWghtDisp = 0;
}
}
}
}break;
case 6://50d
{
if(tempWghtDisp < 100)
{
if(timeFlag)
{
timeFlag = 0;
timeCount++;
if(timeCount > 40)//跟踪2秒钟
{
timeCount = 0;
tempWghtDisp = 0;
}
}
}
}break;
default:break;
}
}break;
default:break;
}
}
}
/********零点跟踪处理结束**************/ |