温度压力计的标定算法及软件实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由zhangyufei_123贡献
doc1。
温度压力计的标定算法及软件实现
1.引言 存 储式井温压力计是一种高精度、高分辨率的井下温度和压力测试系统。它可 以完成对井下温度和压力情况的长时间持续监测,尤其适用于测试油井流压、静 压和压力 恢复的任务中。但是国内存储试压力计的大都采用最小二乘法标定仪 器,精确度不高,万分之 5 也很难达到。本文从压力计的标定算法入手,采用离 散点数据逼近的 原理,利用更高次的数值逼近的算法,提高压力计的测量精度。 2.存储式井温压力计简介 存储式井温压力计系统(以后简称压力计系统)可以相对独立的分为硬件系统和 软件系统两部分。 软硬件系统之间是基于特定的通讯协议并通过串口进行数据 交换。 软件系统负责标定硬件系统,对硬件系统设置参数,读取硬件采集的数据并进行 数据解释处理。串口通讯程序是整个软件的最底层,数据处理、图形绘制和仪器 标定都是通过它与硬件仪器交换数据的,这段程序与通讯协议有关。 硬件系统工作于井下,由 PIC 单片机芯片控制压力、温度传感器采样数据,并将 数据存储于存储芯片中或直接发送给软件系统, 该单片机的程序严格按照通讯协 议编写,与软件系统的串口通讯程序进行互操作。 在 数据处理过程中有下列名词。测量数据就是原始数据,是直接由硬件仪器采 集的通过二进制转化为十进制的计数值数据。工程数据,就是将原始数据带入一 定的公式 计算后,得到的与原始数据对应的一个数据。标准数据则是在标定过 程中使用的,如标准压力,标准温度等。在数据处理过程中,我们测量的工程数 据都是标准数据 的逼近值。 3.压力计系统的数据处理公式 仪器采集的数据是原始数据,原始数据向工程数据的转化是软件的主要任务,转 化过程利用数学公式表示为: Ve = f (Vo ) 表示原始值; 表示工程值; ( )表示函数关系式。 通过实验数据来确定上述公式的函数关系式 f()的过程就是仪器标定的过程。将 试井中测量的原始数据利用函数关系式 f()计算出工程数据的过程就是数据解 释的过程。 通常温度传感器的稳定性比较好,受外界干扰的因素少,通过实验温度原始数据 与工程数据的对应关系满足线性关系。 Vte = K * (Vto ? B) (公式 1) 根据上述公式,试验只需要从试验数据中选取两组值,即可计算出关系式中的常 数系数 K 和 B 得值。因此对温度的标定非常简单。 压 力的标定是比较复杂的。由于压力传感器的一般采用电气特性的设计原理, 不管采用电位器的特性,还是电阻应变片的特性,在高温下,都会随温度的升高 而使恒定 的压力在经过传感器采集后产生飘移,这就是温飘现象。这种现象的 存在,如果不对其进行补偿,肯定会影响到压力测量的准确度以及精度。
表 1 中的数据是已实现的标定软件在标定过程中记录的测量数据, 首行首列都是 标定用到的标准数据,表中为试验采集的测量数据。表中数据可以看出压力传感 器采 集的数据受到温度的影响,产生温飘现象。所以在计算压力工程值的过程 中必须考虑到温度对工程值的影响,需要温度对其进行补偿。 利用离散数据的最佳平方逼近理论, 当 ( 是未知数的个数, 是参与运算的向 量的维数)时的最佳平方逼近公式: 温度值 C) 30.0000 (。 压力(MPa) 频率 1 (KHz) 0.0000 2.0052 5.0000 2.1103 10.0000 2.2203 20.0000 2.4387 30.0000 2.6560 40.0000 2.8740 50.0000 3.0910 55.0000 3.2000 60.0000 3.3080 表 1 压力标定实验数据表 50.0000 频率 2 (KHz) 1.9960 2.1037 2.02133 2.4325 2.6527 2.8718 3.0910 3.2008 3.3100 80.0000 频率 3 (KHz) 1.9790 2.0892 2.2007 2.4238 2.6475 2.8697 3.0938 3.2050 3.3158 100.0000 频率 4 (KHz) 1.9667 2.0782 2.1915 2.4170 2.6432 2.8683 3.0942 3.2067 3.3190 120.0000 频率 5 (KHz) 1.9550 2.0670 2.1812 2.4100 2.6390 2.8665 3.0957 3.2095 3.3232
利用矩阵的运算可以计算出系数
的值。最后得出:
, 就是压力值 Y 的最佳平方逼近。因此在压力数据处理中,测量并利用公式 2 计算 出的 值来近似表示标准的压力值,因此公式中 的取值越接近 , 对 Y 的逼近程
度越高,但同时对逼近离散点之间的值的逼近有一定的负面影响,因此 的取值 应该综合考虑这方面的影响。而标定的过程就是利用公式 2 确定 系数的过程。 4.
算法描述 4.1 标定算法描述 根据“离散情况的最佳平方逼近”理论对数据进行拟合, 最常用的方法就是最小 二乘法。由于从应用精度的要求考虑,实现过程采用更高次的拟合。可以使在每 个固 定温度点上的压力原始数据向压力标准数据进行 4 次方逼近。则标准压力 数据向量 Y 和压力原始数据的各次方向量 表示为:
代入公式 2,可计算最佳逼近系数为 。为了便于存储设数组 GG[5],HH[5],II[5],JJ[5],KK[5],将温度为 30℃原始数据对标准数据的 4 次方 逼近系数存入到数组 中:GG[0] = ;HH[0] = ;II[0] = ;JJ[0] = ;KK[0] = 。 同理运用同样的算法可求出温度分别固定在 50℃,80℃,100℃,120℃时的原 始压力数据向工程压力数据的逼近系数,如表 2 所示分别存储与数组 GG[],HH[],II[],JJ[],KK[]中。 压力原始数据各列对标准压力数据列的 4 次方逼近产生的系数如表 2 中所示。 为 使温度对压力起 到补偿的作用,我们再次运用最佳平方逼近使第一行中的温度 工程数据向各行中的系数进行 3 次方逼近。 首先将温度对 0 次方系数逼近计算出 的 4 个系数按对应指数 由小到大顺序存放在数组 G[4]中,同理对其余的逼近系 数分别存放在数组 H[4],I[4],J[4],K[4]中,这些系数就是最后标定结果,也就 是从 原始数据向工程数据转化的函数关系式的系数项。 4.2 数据解释算法描述 设采集的一组原始数据为 ,所谓一组数据是指在硬件仪器采集数据时同时采集 到的温度和压力原始数据。由公式 1,可将温度原始数据转化为温度工程数据
; 同理由压力的标定方法及所计算出的标定系数, 压力原始值向压力工程值转化公 式:
注明: 是对该点标准压力值 的最佳平方逼近,其与标准压力值之间存在一定的 误差。所以为了描述采用该标定方法达到的精确程度,可以利用该逼近的相对误 差来描述:相对误差 =
。为了提高精度可以在 情况下适当的提高平方逼近的次方数。 5.软件实现 5.1 串口通讯 用 串口通讯类直接继承 Vc++环境提供的串口通讯控件 Microsoft Communication Control 生成的类。用控件类提供的串口读写方法 GetInPut(),SetOutPut()实现软硬件信息的传送。 信息的格式按照一定的协议规 定,软件与硬件之 间的一次通讯传递的数据我们称为一帧,一帧的数据格式如 表 3。
对表 3 的协议格式几点说明: 1) 前导码,一个固定的字符串,用来表明一帧数据的首标。 2)命令码,用二进制位表示的命令类型,它总共支持 64 种命令,目前实现 17 种,常用的命令根据命令发送方的不同分两种,一是软件向硬件发送的命令,有 实时采集,读存储器,写存储器等;其二是硬件向软件发送的命令,有发送实时 数据,发送存储器数据,操作完成命令等。 3)响应标识,表示该帧数据是对哪一个命令码进行响应,该命令码就是该帧数 据的响应标识。 4)数据起始地址,该字段用于对硬件仪器的存储器进行操作的命令码中。 5)数据长度,对于存储器读的命令,数据长度为从数据起始位开始,将要读取 的数据长度;对于存储器写命令,则表示将要写入存储器起始位置的数据长度; 非存储器读写的命令,则表示后面的数据的长度。 6)数据,由数据长度字段指定长度的数据。对于存储器读命令,该数据位为空。 通常,软件与硬件之间的交互有两种模式: 一种是标定模式,软件向硬件发送实时采集命令使硬件进入该模式,硬件仪器每 隔一秒采样一组数据,并立即通过发送实时数据命令将这组原始数据发送给软 件。软件使用 ontimer()定时方法每隔一秒接收一次串口数据。通常在标定硬件 仪器时采用这种模式。 另 一种模式是数据解释模式,硬件通过一段时间的工作,将采集到的数据按组 存在自身的存储器中,软件向硬件发送读存储器命令,硬件立即将存储器中指定 地址段中 的数据通过发送存储器数据命令送给软件。软件接收到数据后修改读 存储器命令数据字段中的起始地址再次发送该命令, 如此反复循环直到所有需要
读取的数据读完 为止。通常一次读取数据长度限制在 256 个字节以内。这种模 式是存储式压力计系统正常工作的模式。 5.2 标定算法实现 软件通过标定模式 将采集的原始压力数据存放在 m_Hz[5][9]的数组中,并且数 组 m_pre[9]中存放标定的标准压力值,m_tem[5]中存放标定的标准温度值, 数 据如表 2 所示。计算标定系数的程序部分代码如下所术,并最终将标定系数存于 G[4],H[4],I[4],J[4],K[4]数组中。 double X[100],Y[100]; double COEFF[20][20]; double GG[5],HH[5],II[5],JJ