非线性传感器值计算
int getvalbyad(int min,int max,int step,int bs,int ad);
//min:码表最小值
//max: 码表最大值
//step:码表的间距
//bs:二进制字符串的句柄值
//ad:当前获取的AD值
//返回:根据传入的AD值,查询码表的间距,根据间距计算出AD值对应的测量值
示例
以某非线性传感器为例 -40~+30度 采集范围,每隔10度一个采样点,形成表格
温度 | AD值 |
---|---|
-40 | 0x100 |
-30 | 0x200 |
-20 | 0x300 |
-10 | 0xa00 |
0 | 0xb00 |
10 | 0x1000 |
20 | 0x1200 |
30 | 0x1400 |
于是我们将测量值存储到bin数组中
int bs;
bs=newbin(16);
defbin(bs,0,"00 01 00 02 00 03 00 0A 00 0B 00 10 00 12 00 14");
int pp;
pp=getvalbyad(-40,30,10,bs,256+128);
echo(pp); //-35
注意
- 非线性采样点之间认为是线性的
- 以上纯属样例,非正常测量数据,正常使用是,如需要小数,请表min、max、step等比放大
- 注意,本查表方案只支持从小到大数值的查找,如果是NTC等从大到小的,需要把测量值当成被减数来调整次序,详见:逆向非线性传感器的实战
- 如果超出码表界面,则返回最大值:0x3fffffff