多线程编程技术在数控测井技术中的应用分析

上传人:m**** 文档编号:188609556 上传时间:2023-02-20 格式:DOCX 页数:10 大小:73.68KB
返回 下载 相关 举报
多线程编程技术在数控测井技术中的应用分析_第1页
第1页 / 共10页
多线程编程技术在数控测井技术中的应用分析_第2页
第2页 / 共10页
多线程编程技术在数控测井技术中的应用分析_第3页
第3页 / 共10页
点击查看更多>>
资源描述
多线程编程技术在数控测井技术中的应用分析摘要:在当今的测井技术中,根据实际的需要,往往要提高能源 的利用率,当今在数控测井技术软件开发中把多线程的编程技术运用 于当中,并且分析了多线程编程技术应用的价值。本文通过软件的模 块框图与多线程间的关系,运用MFC的自定义类封装与实现各个线 程,在软件中依次实现了串口通讯、数据的处理、实时性绘图的功能, 利用事件和消息推送的方法来调度同步线程。据实验结果分析,当今 数控的测井软件在应用了多线程编程技术以后,要比没有使用多线程 技术时,使CPU提高了 50%的使用效率,而且很好地实现了程序控 制的实时性。关键字:多线程、数控测井、串口通信、数据处理当今,测井技术是油田勘探及开发过程中不可缺少的基本技术。 科学技术日益的发展,数控测井系统已经成为了现如今油田行业非常 重要的测井系统手段。数控测井软件在数控测井系统中的地位非常重 要,它是安装在上位机上,其作用是主要负责同下位机进行数据交换, 并且进一步处理实时数据,将图片和文字同时且及时地显示在显示器 上,并且把数据保存在需要的数据库中。本系统具有实时数据处理、 储存、图形显示、数据报表打印等的功能。为了可以满足实时数据传 输和显示的需求,我们把多线程技术运用在了数控测井软件的实时测 井的任务中,从而使此应用程序不仅能够在上位机和下位机之间进行 串口收发数据,而且能够完成数据的处理、数据库的读写、图形曲线的实时绘制等一系列的其他任务,用来以提高资源及能源的利用率以 及程序的实时性能及整体性能。1数控测井系统及软件11数控测井系统数控测井系统的主要功能和作用是给石油地质专业的工程技术 人员来提供各种各样的资料与数据,从而解决一些油田生产过程中的 问题,它是搜寻、评估油气能源的重要技术手段。数控测井系统的主 要构成是井下系统与地面系统。井下系统是运用各种传感器把井下的 各种物理参数转换成相应的电信号并且由测井电缆来上传到地面系 统。地面系统是由地面数据采集仪(下位机)、工业控制机(上位机) 和数控测井软件组成。其中,下位机是将测井信号进行调理、初步计 算、数据打包,从而组建成一定的数据帧格式,再通过串行通信的方 式送往上位机,交给数控测井软件来进行进一步的处理。数控测井系 统组成框图以及数据处理流程如图1所示。用力计张力计上位机显小1串口地而彖统S誹甲下位机|图1數控鬧井系嫌组成椎图1.2数控测井软件的功能分析例如图2中所示,数控测井软件系统大概分为了 3大部分:实时 处理部分,图形处理部分,数据部分。其中,实时处理部分是主要进 行数据的读取与实时状态的控制显示功能;图形处理部分则主要进行 测井曲线图形的实时显示、回放显示与报表生成、打印功能等;且数 据部分它主要进行数据的存储及处理功能。当实时测井时,此软件主 要完成一下的任务:串口数据的接受、数据的处理、数据的显示及图 形绘制、数据库的数据存储、数据图形的打印。若程序运用单线程处 理,则以上的任务就进能依次的执行,这样的话系统的实时性及可靠 性就会大大地降低。而且如串口数据到达的时候此软件正在执行其余 的任务,就会没有办法接受此串口数据,这将造成串口数据的堵塞, 甚至会丢失;且如任务链中的任何一个环节出现了问题,则会导致所 有的任务都没法执行,造成人力物力及财力的相应损失然而,运用多线程的编程技术可以将串口数据的接受、数据的处 理及数据库的数据存储、数据的显示与图形绘制、数据图形打印的一 系列任务分别地放到不同的独立的线程中去,这样可以使实时测井的 时候多个任务同时地进行,这样既能够提高测井的实时性,又能在其 中的某一个任务出现问题的时候也不会影响到其余的任务执行,从而 使得每个测井的数据达到最大化。1通信挖制樽竦实时业理部分i 1|1* 1f1一 1寥时显示癡表生成1樓块一1 *r橫块丨敬塘存储根則宁;打FP換块| : ;图彫雉号部分数蛊回放摸块井st件多线程数控测井软件的实施数据部分.1多线程编程技术软件模块椎图在MFC中,线程可以分为两大类:工作者线程与用户界面线程。工作者线程其是主要运用于完成后台计算的;用户界面线程其主要用 于接收并处理用户的输入信息,且处理相关的事件与消息。这两者之 间最大的区别就是在工作者线程中没有消息循环,而在用户界面线程 中则有着自己的消息循环,能够处理系统和用户的消息。对于操作系统来说,程序也就是任务,此多线程技术把任务划分 为了更加小的执行单位,且赋予了不同的优先级别,由该系统进行负 责此线程的运行和切换,从而实现了线程的分时运行,也提高了程序 的运行效率。在多个处理器的计算机系统中,它的系统能够把线程分 配给到不同的CPU或可以在不同的CPU上面移动,用来平衡CPU 的负载压力,此方法也就实现了真正意义上的多任务(多线程)同时 进行一般来说,单个进程中的每个线程分别地独立操作运行,各个线 程间是没有任何关系的。但在实际的多线程任务中,程序的各个线程 间没有任何的联系明显是不可能的,例如资源共享,数据传递等等。 为了实现同一线程能够在不同时刻访问同一个资源,这样就要将访问 共享资源的线程进行同步、调度,以来避免几个线程甚至整个系统的 奔溃。22实时测井任务的多线程实现该系统利用事件及消息推动的途径实现了实时测井的多线程编 程,各个线程间主要是通过事件同步对象进行同步的。开始实时测井工作以后,其串口线程监测监视串口的事件和错误 信息,每当有读写事件或者错误出现时,线程本身将对事件及错误开 始进行分类的处理。若发生的是读事件,则线程在成功地读取字符以 后会向主线程来发送消息;接下来主线程会对消息进行相应的处理, 并且将数据处理事件设置成信号态,来通知数据处理线程;然后数据 处理线程的检测链表不为空而且相应的事件显示信号态的时候,从链 表的末端读取数据来进行处理、更新数据库,于此同时把实时画图事 件设置成信号态,来通知实时画图线程可以画图,直到链表显示为空; 实时画图线程检测到相应的事件为信号态且数据库有更新时,则从数 据库中读取更新的数据,计算并绘制相应的曲线以及实时显示测井的 状态、参数、直到绘制完更新数据所对应的曲线;实时打印功能则打 印线程进行后台打印。这样上位机就可以在实时接收串口数据的同时 实现对数据的处理、存储、显示、打印功能,以提高程序的实时性执行效率。图3为本系统的线程关系图。图3线程关系图软件采用MFC的自定义类分别对串口通信线程、数据处理线程、 实时画图线程进行封装,在主线程中分别定义一个实例,通过线程类 封装的成员函数对线程进行操作。线程之间的同步事件则定义为全局 变量,由各线程的线程函数调用从而实现线程间的通信。采用这种方式编程,主要工作就是封装自定义线程类,添加成员 变量以及成员函数,完成线程的初始化、线程开启、睡眠、苏醒、关 闭等工作。2.3串口通信线程的实现Public class sample Data接受网络上的硬板卡数据线程Background Worker background WorkerData;/TCP命令接受、发送网络连接套接字Public TcpClient tcpipClinetData = new TcpClient();/TCP数据接受、发送网络连接套接字Public TcpClient tcpipClinetData = new TcpClient();数据是否准备好,供上位机调用Public bool blsTcpOrderConnect = false;(网络)数据采样准备完毕,向上位机发送一个事件.Public event EventHandler#region Message DefinePublic const int WM_USER = 0x0400;#endregion数据接受缓冲区public int StartDataPtr = 0, EndDataPtr = -1;Public byte dataBuf = new byte 4*1024;线程挂起sampleData ()If (backgroundWorkerData != null)backgroundWorkerData. CancelAsync ();If (backgroundWorkerControl! = null) backgroundWorkerControl. CancelAsync (); 初始化网络参数tcpipClinetOrder = new TcpClient (MylpEndP);22.4线程类的使用采用此种方法封装的线程类其使用十分的方便,在我们需要开启 线程的函数之中来定义线程实例,首先调用线程中的初始化成员函数 来对线程先开始初始化,接下来调用线程来开启函数线程。在线程的 工作完成不需要再使用之后,可以调用线程关闭函数来关闭线程。若 不人为地关闭线程,则线程的析构函数会完成线程的关闭工作。通过大量的实验,比较了没有开启线程和已开启线程情况下运用 Process Viewer工具的监视数据。通过比较可知:没有开启多线程的 CPU占用率仅仅有35%左右,而开启了多线程之后CPU的占用率提 高到了 75%左右,且主线程的CPU占用率基本上没有变话,这就说 明了多线程技术大大地提高了 CPU的使用效率;同时在下位机中模 拟下井仪以最快速度发送数据,上位机接受处理并记录系统时间可 知,没有开启多线程的时候软件每秒钟最多可以处理15组的测井数 据,而开启了多线程之后每秒钟处理的测井数据能够达到40组,这 对程序的实时性可以起到了很好的作用3】。参考文献:袁晓伟,高嵩,陈超波,等基于DSP便携式数控测井系统的设计J.电子设计工程,2009 (11)2李现勇.Visual C+串口通信技术与工程实践M.北京:人民邮电初版社,2003.李湘江,汤琛.基于多线程技术实现Windows串行 通信J.微机发展,2004(2).
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!