概述
在制作仪器仪表类设备的时候,发现热电偶和NTC之类的传感器都是非线性传感器,需要码表来进行查表计算,于是我们制作了专门的语句来完成
语句列表
语句 | 说明 |
---|---|
bind_readbin | 从页面数据读取二进制数据到bind全局区 |
bind_writebin | 将bind全局区二进制数据写到页面数据变量区 |
bind_getbinlen | 获取全局bind区对应key变量的二进制数据长度 |
defbin | 定义一个二进制字符串 |
getvalbyad | 非线性传感器值计算 |
getadbyval | 非线性传感器值逆计算 |
实际操作
在第一页的start()语句之前加上下面语句:
if (bind_getbinlen("ntc校准")<8)
{ //默认没有设置,则需要设置
bs=newbin(16);
defbin(bs,0,"00 01 00 02 00 03 00 0A 00 0B 00 10 00 12 00 14");
bind_readbin("ntc校准",bs,16);
memaddkey("ntc校准");
memsave();
}
else{ //有设置
bs=bind_writebin("ntc校准");
}
//此时bs是bin数组的句柄
以上代码在开机的第一页面开始执行的时候,系统会判断校准数据是否存在,如果不存在则创建一个默认校准数据,于是通过全局变量bs,就可以进行AD到val显示值的转换,例如可以在之后使用:
echo(bind_getbinlen("ntc校准"));
echo("\r\n");
echo(getbin2(bs,1)); //显示512
echo("\r\n");
int pp;
pp=getvalbyad(-40,30,10,bs,256+128);
echo(pp);//-35
来验证方案;
而对于其他页面来说,我们建议在appbase全局控件中来完成处理:
int bs=0; //校准数据的存储值
//---create():控件的初始化,可以在此书写有关默认参数的初始化
void create(){
//在此书写当前页的初始化
bs=bind_writebin("ntc校准");
}
以上代码在appbase中代码中,这样页面程序中就可以使用app.bs获取校准数据的数组,当然一般来说VAL和AD的转换函数也可以一起写在全局控件appbase中;