玉管通地理,朱笔点天文
        欢迎光临文天软件之家
 
全站搜索
联系方式


网 址:文天软件之家

    www.jh-lzf.com

联系人:文天(刘中甫)

邮 箱:jh-lzf@21cn.com

地 址:湖北·武汉

    中国石化·江汉油田

    石油工程技术研究院

    信息中心

  

天气信息
新闻详情
井下工具应力采集软件的设计与应用
来源:━━━━《江汉采油工艺》2006第1期作者:刘中甫网址:http://www.jh-lzf.com浏览数:5

井下工具应力采集软件的设计与应用

摘 要:介绍了“井下工具应力采集软件”的设计原理、设计要点、功能及应用情况等。

关键词:应力  传感器  采集  时间切片

一、前言

《井下工具应力采集软件》(以下简称采集软件)是股份公司级科研项目《计算机仿真技术在Y341系列封隔器设计上的应用》中所开发的一套专用软件,与应力试验罐结合使用,可以为项目核心软件《封隔器仿真分析和设计软件》(以下简称仿真软件)提供必要的现场采集数据,以验证仿真软件的合理性。

采集软件不仅可多通道实时采集分布于应力罐上的40个应力值,还可对采集的数据进行简单的处理与分析显示,如显示采集数据、同屏显示所有传感器的应力—时间曲线、分屏显示每个传感器的应力—时间曲线、按时间切片显示每个时间点的应力曲线,并打印采集的数据与曲线等。

二、软件结构设计

1、软件设计原理

在应力试验罐上按螺旋状分布5组,每组8个,共40个应力传感器,且每组传感器都连接到相应的8路数据采集模块(ADAN4017-1~ADAN4017-5)上。采集软件通过计算机的RS232(或USB虚拟RS232)通讯端口,不断地向ADAN4050多通道切换模块发出通道切换控制信号,以便循环地采集每组传感器上的(应力)电压信号值。同时,采集软件将根据事先标定生成的(应力)电压信号值与应力工程值(Mpa)的换算公式,将采集到的(应力)电压信号值通过A/D转换模块转换为实际的应力工程值(Mpa),并实时显示、存储等。

采集软件的设计原理如图1所示。

2、软件系统结构

在图1中,数据采集模块是本软件的核心模块,其系统结构如图2所示。

三、软件设计与运行

1、软件设计环境

本软件在WIN98+Offices2000及VB6+Spk6环境下开发,适用于在WIN9X及其以上操作平台上运行。由于软件通过RS232通讯端口实现数据采集,因此,必须在工程\部件中将Microsoft Comm Control 6.0(通讯控件)打钩;为了将采集的数据存储到数据库中,以便对采集的数据进行处理与分析,必须在工程\引用中将Microsoft DAO3.6 Object Library(数据库控件)打钩;另外,还须在工程\部件中将Microsoft FlexGrid Control 6.0、Microsoft Windows Common Controls-2 6.0等项打钩,并在通用模块首部加上如下申明:

Public RecNo As Single   '记录数

Public CRC(39) As Single '偏移校正值

Public V(39) As Single   '采集电压值

Public P(39) As Single   '应力采集值

Public P0(39) As Single  'P0点,应力标定值

Public P1(39) As Single  'P1点,应力标定值

Public V0(39) As Single  'V0点,电压标定值

Public V1(39) As Single  'V1点,电压标定值

Public k(39) As Single   '电压-应力变化斜率

Public b(39) As Single   '电压-应力截距

Public ControlNo As Single  '控制传感器号:当值为0-39时分别标定0-39号传感器,当值为40时一次性标定所有传感器。

Public Address01 As String  '模块(ADAN4017)地址

Public Address02 As String  '模块(ADAN4050)地址

Public Delay4050 As Single  '模块ADAN4050延迟时间

2、传感器校正与标定

传感器校正与标定模块的主要功能是生成每支传感器的DA转换(电压信号V→压力工程值P)公式。根据压力传感器的线性特征,若对每支传感器均标记0MPa状态下的电压值V(即偏移校正值),并记录两个压力点(如P0=5Mpa、P1=25Mpa)的电压信号值(V0,V1),则可计算每支传感器采集到的任意电压信号值V对应的应力工程值P=(P1-P0)*(V-V0- V)/(V1-V0- V)+P0。

本软件既可每次标定一支传感器,也可一次性标定所有传感器(如图2所示)。软件定义了十个40维变量P0(39)、P1(39)、P(39)、V(39)、V0(39)、V1(39)、V△(39)、k(39)、b(39)。在0MPa状态下,软件可一次采集完成所有40个传感器的电压偏移校正值V(i)(i为传感器号,且i=0~39,下文i的意义相同,不在重述);在两个固定压力点(如P0(i)=5Mpa、P1(i)=25Mpa)状态下,软件可一次采集完成所有40个传感器在这两个压力点的电压值V0(i)及V1(i);根据上述采集的电压偏移校正值及两个点的电压值,可计算每支传感器采集到的任意电压信号值V对应的应力工程值:

P(i)={P1(i)-P0(i)}*{V(i)-V0(i)- V(i)}/{V1(i)-V0(i)- V(i)}+P0(i)。

获取传感器电压偏移校正值V(i)的方法是:运行传感器校正与标定模块(如图2所示),点击“采集电压值”命令键,界面上将实时地显示(每100ms刷新一次)40个传感器采集到的电压信号(新校正值);若此时未加任何压力,则点击“存储偏移值”命令键,此时采集的电压值V(i)将作为电压偏移校正值存储到数据库中,即用新校正值更新原校正值的。

获取传感器在两个固定压力点(如P0(i)=5Mpa、P1(i)=25Mpa)时的电压值V0(i)及V1(i)的方法是:打压并稳定到5Mpa后,点击“存储标定值”命令键,弹出图3所示的对话框,再次点击“存储标定值”命令键后,此时采集的电压值V0(i)将作为5Mpa时的电压值存储到数据库中,即获取了P0点的座标值{5,V0(i)};用同样的方法,打压并稳定到25Mpa后,即可获取了P1点的座标值{25,V1(i)}。

3、数据采集与存储

数据采集模块的主要功能是采集并存储数据,是本软件的核心模块。此模块正常运行的前提是,必须设置好通讯接口参数(通讯端口、通讯速度、采集延迟时间)及硬件采集模块的通讯传输控制方法。

在数据采集界面,设置好通讯参数后,将执行如下的通讯端口初始化程序。

Private Sub ComInit() '通讯端口初始化

   On Error GoTo ComErr

   If MSComm1.PortOpen Then MSComm1.PortOpen = False

   MSComm1.CommPort = Combo1.ListIndex + 1

   MSComm1.Settings = Combo2.Text & ",N,8,1"

   MSComm1.InputMode = comInputModeText '文本方式

   MSComm1.InputLen = 1

   MSComm1.PortOpen = True

   ComInitErr = False '通讯口初始化正常

   Exit Sub

ComErr:

   MsgBox Error(Err), vbCritical

   ComInitErr = True '通讯口初始化错误

End Sub

在数据采集界面,标校参数就是由传感器校正与标定模块生成的DA转换公式,此公式有截距式“P(i)=k(i)V(i)+b(i)”及两点式“P(i) = (V(i) - V0(i)) * (P1(i) - P0(i)) / (V1(i) - V0(i)) + P0(i)”两种表达形式,系统内嵌的公式一为截距式、系统内嵌的公式二及用户标定的公式为两点式。

数据采集时,软件首先向ADAN4050通道切换模块请求数据,目的是开启ADDN4017硬件采集模块,待ADAN4050开启五个ADDN4017之一后,便可应用GetData()函数从ADAN4017读取数据,并根据用户在采集界面选择的标校参数进行DA转换,部分代码如下。

Private Sub GetData() '采集数据(ADAN4017)

   On Error Resume Next

   Dim Chnnel4017 As String ' ADAN4017模块通道

   Dim Chnnel4050 As String ' ADAN4050模块通道

   Dim DataStr As String

   For n = 0 To 4

       For i = 0 To 39

           V(i) = 0  :  P(i) = 0

       Next i

       DataStr = ""

       Chnnel4050 = Format(Trim(Str(Hex(2 ^ n))), "00")

       RequestData Address02, "00", Chnnel4050  '开启第Chnnel4050通道

       For i = 0 To 7

           Chnnel4017 = Trim(Str(i))

           ReadData Address01, Chnnel4017, DataStr

           j = i + 8 * n

           If FormulaNo = 1 Then '系统内嵌公式一(截距式):P=kV+b

              V(j) = Val(Data_i)

              P(j) = k(j) * V(j) - b(j)

           Else '系统内嵌公式二(两点式)或用户标定两点式

              V(j) = Val(Data_i) - CRC(j) '采集电压值-偏移校正值

              P(j) = (V(j) - V0(j)) * (P1(j) - P0(j)) / (V1(j) - V0(j)) + P0(j)

           End If

           Text(j) = Format(P(j), "0.00") '显示应力值

       Next i

   Next n

End Sub

硬件采集模块的通讯传输控制方法,如向ADAN4050请求数据,即打开通道的代码如下。

Private Sub RequestData(ByVal address As String, ByVal Channel As String, ByVal DataStr As String) '请求数据(ADAN4050):输出数据,即打开通道

   On Error Resume Next

   Dim CommandStr As String

   MSComm1.InBufferCount = 0

   MSComm1.OutBufferCount = 0

   CommandStr = "#" & address & Channel & DataStr & vbCr

   MSComm1.Output = CommandStr

   delays Delay4050

End Sub

待ADAN4050打开五个ADDN4017模块之一后,从ADAN4017模块读数据的代码如下。

Private Sub ReadData(ByVal address As String, ByVal Channel As String, DataStr As String)          '读数据(ADAN4017)

   On Error Resume Next

   Dim CommandStr As String

   MSComm1.InBufferCount = 0

   MSComm1.OutBufferCount = 0

   CommandStr = "#" & address & Channel & vbCr

   MSComm1.Output = CommandStr '读数据

   DataStr = ""

   Do

     DoEvents

     If MSComm1.PortOpen Then DataStr = DataStr & MSComm1.Input

   Loop Until InStr(DataStr, vbCr)

   DataStr = Mid(DataStr, 2, 7)

End Sub

数据采集的同时,还必须将采集数据实时地显示并存储到数据库文件中。由于受硬件采集模块的响应速度限制,因此,用户设置的采样间隔最小可调到100ms,即软件最小每隔100ms采集1条记录,每条记录包括40个应力值及当时的采集时间。采集的记录存储于数据库文件中,且默认存储在软件安装目录下的\Data目录中,而数据存储文件默认为“应力采集-YYYYMMDD-NN.mdb”,其中“YYYYMMDD”为采集数据时的年月日,NN为0~99。用户可根据需要可自行更改存储文件和路径。存储数据的部分代码如下:

Sub SaveFile() '存储文件

   On Error GoTo ErrDo

   Pree_Tab.AddNew

   Pree_Tab.Fields("记录号") = RecNo

   Pree_Tab.Fields("采集时间") = Time

   For i = 0 To 39

       Field_i = "应力" + Format(Trim(Str(i)), "00")

       Pree_Tab.Fields(Field_i) = Format(Val(Text(i)), "0.00")

   Next

   Pree_Tab.Update

   Exit Sub

ErrDo:

   MsgBox Error(Err), vbCritical

   Resume Next

End Sub

4、数据显示与打印

在应力采集数据界面上点击选择一个采集数据文件名,并点击 “应力采集数据”按钮,将显示40个应力的采集数据、记录总数、采集总时间等信息。点击“打印”键,将根据采集数据自动生成Excel表格,并加入试验项目名称、试验单位、试验人、试验时间等信息。

要实现采集数据显示功能,必须在窗体上设置MSFlexGrid1及Data1控件,且MSFlexGrid1的DataSource(数据源)关联到Data1,而Data1的DatabaseName(数据库名)联接到选择的采集数据文件名,Data1的RecordSource(记录源)关联到采集数据库中的“应力值”数据表。

5、曲线分析与打印

⑴、应力-时间曲线(全部)

在应力采集数据界面上点击选择一个采集数据文件名,并点击 “应力-时间曲线(全部)”按钮,将在同一窗口上显示40个传感器采集的应力曲线、记录总数、采集总时间等信息。点击“打印”键,将打印40个应力曲线,并加入试验项目名称、试验单位、试验人、试验时间等信息。部分代码如下:

Private Sub DrawAll() '画曲线/应力—时间曲线(全部)

   On Error Resume Next

   Dim TempTime0 As String

   Dim TempTime1 As String

   Dim TimeRepeat As Long    '时间重复次数

   Dim SameSum(39) As Single '相同时间点的应力和

   Dim Y0(39) As Single

   Dim Y1(39) As Single

   If RecNo < 2 Then Exit Sub

   ……………… '初始设置

   Data1.Recordset.MoveFirst

   TempTime0 = Data1.Recordset.Fields("采集时间")

   X0 = 0: X1 = 0

   Do While Not Data1.Recordset.EOF

      TimeRepeat = 0

      For i = 0 To 39 : SameSum(i) = 0 : Next

      Do While Not Data1.Recordset.EOF '合并相同时间点的采集值

        TempTime1 = Data1.Recordset.Fields("采集时间")

        TimeRepeat = TimeRepeat + 1 '时间重复次数

        For i = 0 To 39

            InfoName = "应力" + Format(Trim(Str(i)), "00")

            SameSum(i) = SameSum(i) + Data1.Recordset.Fields(InfoName)

        Next

        Data1.Recordset.MoveNext

        If TempTime1 <> TempTime0 Then Exit Do

      Loop

      X1 = X1 + DateDiff("s", TempTime0, TempTime1) '计算时间差值

      For i = 0 To 39

          ForeColors = QBColor(i Mod 16)

          InfoName = "应力" + Format(Trim(Str(i)), "00")

          SameSum(i) = SameSum(i) / TimeRepeat

          Y1(i) = SameSum(i)

          Picture1.Line (X0, Y0(i))-(X1, Y1(i)), ForeColors

          Y0(i) = Y1(i)

      Next

      X0 = X1

      TempTime0 = TempTime1

   Loop

   ……………… '刷新坐标系统

End Sub

⑵、应力-时间曲线(单一)

在应力采集数据界面上点击选择一个采集数据文件名,并点击 “应力-时间曲线(单一)”按钮,再选择1~40任意一个传感器的编号,将在窗口显示相应传感器采集的应力值的曲线、记录总数、采集总时间及应力值的最大、最小值等信息如图4所示)。关键代码与应力—时间曲线(全部)相似。

⑶、时间切片曲线(应力-位移曲线)

在应力采集数据界面上点击选择一个采集数据文件名,并点击 “应力—位移曲线”按钮,再选择任意一时间记录点,将在窗口显示所有传感器在同一时间点采集的应力值的曲线(即按时间切片的应力曲线),如图5所示。部分代码如下:

Private Sub DrawCutTime() '应力—位移曲线(按时间切片的应力曲线)

   On Error Resume Next

   Dim RecPos As Long '时间记录位置号

   If RecNo < 2 Then Exit Sub

   ……………… '初始设置

   Data1.Recordset.MoveFirst '以下循环段查找相对时间点

   RecPos = Val(Text2)

   For i = 1 To RecPos - 1

      Data1.Recordset.MoveNext

   Next

   Label7 = "显示时间点:" + Data1.Recordset.Fields("采集时间")

   X0 = 0: X1 = 0

   Y0 = Data1.Recordset.Fields(InfoName) '第1点应力值

   For i = 0 To 39

       InfoName = "应力" + Format(Trim(Str(j)), "00")

       Y1 = Data1.Recordset.Fields(InfoName)

       Picture1.DrawWidth = 2

       Picture1.Line (X0, Y0)-(X1, Y1), vbBlue

       X0 = X1: X1 = X1 + 1: Y0 = Y1

   Next

   ……………… '刷新坐标系统

End Sub

四、软件应用情况

此软件于分别于2004年12月及2005年5月多次进行了数据采集试验,共采集了4套封隔器,96个应力测试点,15360条记录及数十万个应力数据,为仿真软件提供了现场测试的第一手资料。具体采集过程如下:

1、将应力试验罐各应力传感器数据线连接至采集卡和计算机,运行采集软件。

2、Y341-148注水/堵水封隔器下接堵头,上接油管挂,下入7in应力试验罐,中心管和试验罐上、下接头分别接电动试验泵。

3、2Mpa为步长,中心管逐步加液压至25Mpa,坐封封隔器,稳压2Min,采集试验过程中胶筒表面特征点的应力数据。

4、保持中心管压力(对于注水封隔器),或卸掉中心管压力(对于堵水封隔器),以2Mpa为步长,对封隔器下部环空加液压至25Mpa,稳压2Min,采集试验过程中胶筒表面特征点的应力数据。

5、卸下压,以2Mpa为步长,对封隔器上部环空加液压至25Mpa,稳压2Min,采集试验过程中胶筒表面特征点的应力数据。

6、缓慢卸上压,再缓慢卸中心管压力(对于注水封隔器),采集试验过程中胶筒表面特征点的应力数据。

7、起出Y341-148注水/堵水封隔器,重新下入另一套Y341-148注水/堵水封隔器,重复上述试验步骤2~6。

8、重复步骤7


五、结论

采集软件可为仿真软件提供必要的现场采集数据,以验证仿真软件的合理性。

测试Y341-148封隔器工作过程中胶筒表面特征点的应力数据,与仿真计算的结果表明,实验测得的径向应力值与仿真计算得出的坐封、密封过程的数值基本相同,最大误差在13%左右,解封时最大误差在18%左右,误差在工程允许的范围内。

致谢:在软件调试及文章撰写期间,得到了何铤、姜建平等同志的大力支持,在此表示衷心的感谢!