?计算机与通讯技术?
基于MAT LAB 的G UI 的界面设计
南 洋 周 静 孟开元 丁旭东
(西安石油大学计算机学院 陕西西安)
摘 要:文章介绍利用MAT LAB 设计图形用户界面,通过串口与单片机进行数据交换,实现实时接收并处理井下井眼姿态数据,最终达到对整个钻井过程的控制。关键词:单片机;MAT LAB ;G UI ;钻井
中图法分类号:P634.9 文献标识码:B 文章编号:100429134(2008)0620076203
0 引 言
为了节约成本和提高石油产量,从上个世纪90年
代起国际上已经对旋转导向技术进行深刻研究并推向商业化。旋转导向钻井技术的核心是旋转自动导向钻井系统,这一系统要用到传感器、信号采集、处理技术,而旋转导向钻井系统的地面监控系统包括数据传输系统及地面计算存储分析模拟系统
。旋转导向钻井系统的主要功能是通过闭环信息流监视并随钻调控井身轨迹,其关键技术是从地面发送到井下的下行精确控制指令系统[1]。
MAT ALB 可以创建图形用户界面G UI (G raphical User Interface ),它是用户和计算机之间交流的工具。MAT LAB 将所有G Ul 支持的用户控件都集成在这个环境中并提供界面外观、属性和行为响应方式的设置方法,随着版本的提高,这种能力还会不断加强。而且具有强大的绘图功能,可以轻松的获得更高质量的曲线图,同时MAT LAB 具有串口操作,使得人们利用计算机和实际硬件相连接的半实物仿真的梦想得以轻松实现[2]。
本文通过MAT LAB 实时处理井下控制系统数据的几个关键问题:利用serial 函数接收钻杆中隔离膜内外压差,根据压差之间的关系,对隔离膜是否破裂进行报警;由于钻杆在随钻过程中对许多信息的测量带来了很大的影响,所以利用FDAT OOL 和SPT OOL 工具箱对原始数据进行滤波处理;利用MAT LAB G UI 功能整个处理过程的组织,实现MAT LAB 环境下对井下控制系统数据的接收和实时处理,使用三轴加速度计
来敏感井眼姿态的变化,根据当前井眼姿态,发送命令来调整钻杆在井下的位置[3]。
1 数据采集
通过RS -232串口通讯原理,G UI 向单片机发送命令来采集钻头在井下的位置及姿态,并把这些结果提取到计算机中。单片机与计算机的连接如图1所示。
图1 单片机与计算机的连接图
对于串口的支持可以有很多语言来实现,如VC 、
VB 、DE LPHI 等多种高级语言,MAT LAB 的串行通信是通过serial 来实现的,为了保证代码平台的独立性,se 2rial 类的内核是用java 间接实现的,所以MAT LAB 对串行口的支持不如上述其他高级语言语言完善。但是对于PC 机与单片机的串行通信来说,MAT LAB 的串口对象足以满足这一要求[4]。
串行口对象的建立方法和使用要求:S =serial (′port ′,′p1′,′v1′,′p2′,′v2′......);其中port 是端口的名字,一般命名为com1、com2,px 为端口的属性名,vx 为端口的属性值。属性名中BaudRate 代表串口传输的波特率,为了使传输速度最快设波特率为′115200′;Parity 代表串口传输的奇偶校
第一作者简介:南 洋,男,1983年生,硕士研究生,现就读于西安石油大学计算机学院计算机应用技术专业,主要从事于导向钻井工具中的定位
总成系统的研究。邮政编码:710065
?
67? 石 油 仪 器
PETROLEUM INSTRUMENTS
2008年12月
验位,设置为′none ′;DateBits 代表串口传输的数据位数,单片机中采集数据均是以8位来存储的,所以DateBits 设置为′8′较好;StopBits 代表串口传输的停止位,取值为′1′。串口中还有一些其他的属性,如果用一个命令写起来过于烦琐时,可以分开来写,如:S.timeout =0.5表示设置一次读或写操作的最大完成时间为0.5s 。
串行口对象建立后可以用文件操作的方式对其进行打开、关闭和读写操作。通常可以用以下几个函数进行打开、关闭操作:
fopen (S );%打开串口
fclose (S );%
关闭串口,但是串口对象仍占用内存
在完成对串口的初始化和打开串口后,就可以对
串口设备进行读写操作了。串口的读写操作支持二进制和文本(ASCII )两种方式。当采用二进制方式时,读写操作的函数分别为fread 、fwrite ;当采用文本(ASCII )方式时,读写操作的函数分别为fscanf 、fprintf 。
为了避免影响其他程序的调用,操作完毕后应对串口对象进行删除,释放空间。删除命令用delete (S
),clear S 来实现。
2 GUI
2.1 GUI 界面
单片机采集和处理系统的G UI 如图2所示,图2(a )左侧的excel 表格填入相关采集参数。采集的数据
均为量化台阶数,转换为真实值需要相关系数,右侧的
图2 单片机采集和处理系统的GUI
excel 表格就是填入相关系数。左侧可以选择不同的
串口,右侧可以选择不同的采集板。图2(b )把采集的
数据显示到excel 表格中。
清除部分:清除单片机中的采集参数和采集信息,倘若发现填写的采集参数有误可以选择清除表格;发送接收参数部分:向单片机中发送采集参数,为了确认采集信息是否正确发送到单片机中,可以从单片机中提取先前所接收的采集参数返回到界面中;
采集提数部分:在单片机接收到采集参数后,即可进行采集,采集结束后提取相关采集信息,如果中途想中断这次采集任务可以选择复位。
数据转换部分:把采集的量化台阶数转化为真实值,并且对所有采集信息进行低通滤波。
绘图部分:在文本框中填入需要画图的列号,即可绘出各条曲线。
存盘部分:把对采集的这一组信息存入指定的目录下。2.2 表格应用技术
界面中会频繁地使用excel 来填写采集参数,ex 2cel 表格的应用图如图3所示。
图3 excel 表格的应用图
excel 表格中既有汉字也有向单片机发送的参数,如何把发送参数从excel 表格中抽取出来成为了此次界面设计的一个关键技术,程序如下:
handles.spreadsheet
=actxcontrol (′OWC11.
Spreadsheet.11′,[20160350250]);S =[{′采样时
间′},{′采样点数′},{′开阀时间′},{′开阀间隔′},{′阀门选择′}];
Fill G rid (handles.spreadsheet ,S );
Actxcontrol 的作用是创建一个activex 控件,h =actxcontrol (′progid ′,position ),′progid ′是所创建的ac 2tivex 控件的类型,position 为此控件在G UI 界面中的
位置,在本例中owc11.Spreadsheet.11为excel2003的控件。Fill G rid 语句可以把字符串、数字、逻辑等、通过Fill G rid 语句把S 中的字符串写入excel 表格,Fill G rid
写入表格时,是横向写入的[5]。
由于excel 表格没有visible 这个属性,在需要它隐藏时无法完成隐藏的功能,而在本采集系统中需要切
?
77? 2008年 第22卷 第6期 南 洋等:基于MAT LAB 的G UI 的界面设计
换界面,这时必须使excel 达到“隐藏”效果。因此在界面交替时通过生成删除excel 的方法即可达到要求。
2.3 不同M 文件的参数传递
通常在编写G UI 时需要好几个界面之间相互切换,一般采取的措施是创建多个面板,通过调用不同面板来实现不同界面的相互切换。但是前一个面板所产生的参数在后一面板无法直接获取,这就需要我们在不同M 文件中传递参数。
假设a2.m 需要调用a1.m 中的变量x ,共有3中方法可以实现这一过程:
1)在a1.m 中将x 写入matlab 工作间,如assignin (′base ′,′x ′,x );在a2.m 中调用x ,如evalin (′base ′,′x ′
)。2)在a1.m 中将变量x 存为.mat 或者.dat 文件,save filename x ;在a2.m 中load ,把保持的文件重新导
入a2.m 中。
3)利用′userdata ′,在a1.m 中,将变量x 存入a1中的′userdata ′,如set (handles-a1,′userdata ′,x );在a2.m 中调用x ,如
get (findobj (′Tag ′,′tag_a1′),′userdata ′
)。在这三种方法中第一种方法最简单,但需维护工作间不受clear ;第二种适用大量常量的传递;第三种较复杂,但安全性高,一般不会出错。
在同一M 文件内,用handles.xxx 和guidata (hOb 2ject ,handles )来传递变量,并定义handles 为global ;其它M 文件要引用变量xxx ,只需global handles ,然后用handles.xxx 调用。
2.4 加速MAT LAB 运行的方法
MAT LAB 环境下对井下控制系统数据的接收和实
时处理,往往需要进行大量的运算,倘若运算量过大,
会影响数据的接收和显示。因此需要通过一些方法来加速MAT LAB 运行。
2.4.1 遵守Performance Acceleration 的规则[6]
根据其规律:
1)只有使用以下数据类型,MAT LAB 才会对其加速,logical ,char ,int8,uint8,int16,uint16,int32,uint32,double 。
2)MAT LAB 不会对超过三维的数组进行加速。3)使用for 循环时,遵守以下规则才会被加速:(1)for 循环的范围只用标量值来表示;(2)for 循环内部的每一条语句都要满足上面的两条规则,即只使用支持加速的数据类型,只使用三维以下的数组;(3)循环内只调用了内建函数。
4)当使用if 、elseif 、while 和switch 时,其条件测试
语句中只使用了标量值时,将加速运行。
5)不要在一行中写入多条操作,这样会减慢运行速度。
6)当某条操作改变了原来变量的数据类型或形状(大小,维数)时将会减慢运行速度。
7)应该这样使用复常量x =7+2i ,而不应该这样使用:x =7+23i ,后者会降低运行速度。2.4.2 遵守三条规则
1)尽量避免使用循环,改进这样状况的方法有:(1)尽量用向量化的运算来代替循环操作;速度将会大大加快。(2)在必须使用多重循环时,如果两个循环执行的次数不同,则在循环的外环执行循环次数少的,内环执行循环次数多的。
2)预分配矩阵空间,即事先确定变量的大小,维数。这一类的函数有zeros 、ones 、cell 、struct 、repmat 等。当需要扩充一个变量的大小、维数时使用repmat 函数。当要预分配一个非double 型变量时使用repmat 函数以加速。
3)优先使用MAT LAB 内建函数,将耗时的循环编写进MEX -File 中以获得加速。
3 结 论
本文介绍了基于MAT LAB 环境下,单片机与PC
机通信的实现方法。利用MAT LAB 强大的绘图功能与计算相结合,很好地提取出来钻井过程中的有用信息,并对其进行实时处理,该方案界面友好,功能强大,结构简单,性能可靠,易于操作。参考文献
[1] 肖仕红,梁 政.旋转导向钻井技术发展状况及展望[J ].
石油机械,2006,34(4)
[2] 施晓红,周 佳.精通G UI 图形界面编程[M ].北京:北
京大学出版社,2003
[3] 孙 鹏,高金耀,张 涛.利用MAT LAB 实时处理GPS 数
据[J ].东海海洋,2004,22(1)
[4] 陈 滨,吴 忠.无刷直流机DSP 控制系统与PC 机串行
通信的MAT LAB 实现[J ].微计算机信息,2005,21(7)
[5] Michael Robbins.Fill G rid [E B/OL ].http ://www.mat 2
https://www.wendangku.net/doc/9715175960.html,/matlabcentral/fileex -change /loadFile.do ?objectId =7765.2005
[6] Mathworks Inc.Accelerating MAT LAB [E B/OL ].[2002-09].http ://www.mathwo https://www.wendangku.net/doc/9715175960.html,/company/newsletters/digest/sept02/accel_matlab.pdf
(收稿日期:2008-05-06 编辑:高红霞)
?
87? 石 油 仪 器
PETROLEUM INSTRUMENTS
2008年12月