概述

在制作仪器仪表类设备的时候,发现热电偶和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中;