浅析多线程技术在测控系统中的实现

2013-05-09 05:59:58石永生
网络安全技术与应用 2013年12期
关键词:辅助线主线线程

石永生

(江苏信息职业技术学院物联网工程系 江苏 214153)

0 引言

Lab Windows/CVI是一种交换式的C语言开发平台,它可以通过多线程技术采集多路数据。之前在Windows环境中主要依赖的是单个线程执行多路测试与控制任务来实现运行操作,然而随着现代的科学技术与网络技术的发展与壮大,单个线程技术已经不能远远不能满足系统的要求,亟待解决与突破[1]。在这种情况下,多线程技术应运而生。将多线程技术应用到测控系统中,可以大大的提高程序的性能,从而提高测控系统的工作效率。此外,在测控系统中运用多线程技术,可以很好的实现人机友好互动的界面,而且编程的过程也较为简洁明了,受到了众多工程设计工作者的青睐,是测控系统的未来发展趋势。所以,现阶段探讨多线程技术在测控系统中的实现,为其探索出一条道路,具有非常重大的意义。

1 多线程技术概述

将进程与线程的非抢占式方法应用与Windows操作系统中,可以实现多任务的操作[2]。在Windows中运用多线程程序可以让操作系统在执行完某个线程的一段时间后,自动切换到其他的线程中继续运行,也就是进行线程切换。通常在切换线程时操作系统的速度非常快,用户会想当然的认为多个线程都是在同时运行的。其实在测控系统中,运用多线程技术,可以实现真正意义上的在操作系统中执行多个线程,从而大大的提高计算机的性能。

2 多线程技术在测控系统中的设计

2.1 设计项目

运用装载机性能检测系统时可以有针对性的对出厂检测的各项功能性能的装载机,运用的是分布式测控系统[3]。在这一系统中掘起力、提升力与速度是在进行测量时必须具备的基本参量。这一软件的线程安排图如图1所示。

图1 装载机测控系统软件多线程结构

建立这一系统,首先要创建出一条主线程,然后根据主线程的需要,对同一线程池中的3个辅助线程进行激活[4]。在采集数据时,可以分为两大部分:一是在进行测量时采集AD数据卡,二是进行温度测量时采用RS232设备,并将测量出来的结果用LED显示出来。因为对串口设备的频率与访问时间都不会相差很大,所以可以将这些采集数据的过程放置到某个辅助的线程里。这样,多线程技术不仅可以得到很好的利用,还可以对过多的开设线程造成的系统资源浪费进行规避。

2.2 关键技术

在设计多线应用程序时,有一个非常关键的问题需要慎重的考虑,即关于线程间的数据通信问题[5]。因为能够实时显示系统的状态与信息是主线程的需求,把采集而来原始数据传入到主线程中,需要辅助线程2与辅助线程3的准确性。线程安全变量、线程锁与线程安全队列是Lad Windows/CVI Utility Library提供出来的三种保护数据机制[6]。在装载机测试系统的过程中,通过线程安全队列的方式可以实现主线程与辅助线程之间的数据传递,其过程如图2所示。需要注意的是,在进行数据采集之前,需要先激活辅助线程,然后再将调用函数放到主线程中,创建出一个可以在内存中专用空间使用的数据缓冲,即线程安全队列,这个队列的大小函数确定应该取决于前两个参数。

图2 通过安全队列进行线程间数据传递

在关键技术中,除了要有数据的保护,还要运用到指定的处理器[7]。当有多个处理器在计算机中使用时,便可以通过调用Cmt Get Number Of Processors函数的进行程序运行,以此来获得在这个程序中计算机中处理器的数量。在指定允许执行程序的处理器时,通常使用的是Set Process Affinity Mask函数。在指定允许执行程序中的特定线程中的特定线程的处理器数量,通常使用的是Set Thread Affinity Mask函数来处理。尤其要注意的是,Set Process Affinity Mask在接受到传递信息之后,mask的变量通过一定的程序传递到Set Process Affinity Mask中的mask变量的子集中。

3 在Windows NT环境下多线程技术在测控软件中的应用

在Windows NT中,要实现多线程技术的运用,就要利用一系列如Resume Thread、Create Thread、Suspend Thread等Win32 API函数对多线程进行编程,这样做不仅麻烦,而且非常容易出错。但是如果在测控软件的多线程技术中利用Delphi则可以收到事半功倍的功效。因为量大而又复杂的Win32 API函数通过Delphi可以得到进一步的封装,对其进行开发的工作人员只要运用非常简单的方法就可以开辟出一个真正具有安全性质的Windows的多线程。此外,Delephi提供出了一个TThread对象,通过这个对象对多线程进行编程将变得更为简单、方便与实用。但是,利用Delephi对多线程进行编程时,有几个问题必须给予高度的注意。

首先,运用TThread对其子类TMy Thead对象下新定义时,会通过Execute()重载的方式来实用多线程的对象,从而将多线程中已经实现好的任务代码放入到Execute中。所以,在使用的过程中,需要创建一个动态的TMy Thread对象,并将其应用到构造函数中,使得程序中可以多增一个新的自定义线程。其次,VCL类库是建立Delphi编程的基础,所以在运用程序是时常都要对VCL对象的属性与方法进行访问。Thread对象还提供了一个Synchronize()的方式来自动规避多线程同时访问产生的冲突。如果需要在线程中对VCL对象的属性或者调用方式进行访问时,则可以运用Synchronize()的方式来进行访问,从而保障了对系统进行操作时一次只有一个线程对VCL进行访问,较好的协调了各线程之间的运行,降低意外产生后带来的错误。实质上,可以将Synchronize()方式当成一种锁定机制来使用,对VCL对象进行封锁,并把Synchronize()方式作为进入VCL对象的入口。再次,在设计程序的时候,将程序设计在多个线程中的共享数据或者对象中是一种非常普遍的情况。所以为了规避多线程在运行的过程中对公共数据块同时进行访问产生出的相互干扰与错误信息,就需要采取一定的措施,保护好公共数据块。最后,还要注意多线程间的同步问题。如果有多个线程在程序中同时运行时,它们使用的资源都是来源于同一个系统,或者是要运行一个线程的时候需要依靠另一个线程来完成运行工作,这样,多线程同步的问题便产生了。因为多线程是同时运行工作的,所以就程序本身来说是无法确定谁在运行过程中的快慢速度,也就使得多线程同步运行时产生了相对突出的矛盾。如果对程序进行设计时可以让运行中的一个线程等待一项特定的操作完成后在运行操作,便可以大大的提高工作效率。要做到这点,先要创建出一个所有线程都可以监测的标志——全局的TEvent对象,如果某个线程完成了某项特定的操作,就会对这个标志进行设置。其他的线程也可以通过对标志的监测来获得操作的完成,也可以采取一些措施,如调用Reset Event()的方式来对标志进行取消。

新研制出来的舰船燃气轮机就充分运用了在Windows NT Workstation4.0环境中Delphi的多线程处理能力来运行参数,提高了燃气轮机的运行效率,对数据的采集、判断等任务的完成效果也更好了。燃气轮机运行参数监测系统软件结构示意图,见图3。

图3 燃气轮机运行参数监测系统软件结构示意图

燃气机本身携带的数据采集系统是基于M6800系统的,将这个数据采集系统作为监测系统的下位机,可以留有多路,使得RS-422A与RS-232C能够串行起来,便于向其他系统传递采集过来的数据。通过循环地接受串行接口传输过来的数据,监测系统可以很好的进一步的数据计算以及任务分析进行完成。

将用户管理接口作为主线控的燃气轮机运行参数监测系统软件,可以把上下限的检查、数据采集以及数据库存储等定位后台线程,而在所有的并发线程中,优先级最高的应该是数据采集线程。因为数据采集线程的主要负责任务就是将采集而来的数据不间断地放置到某个公共数据缓冲区域,这样可以方便其他线程对其进行调用,从而及时对上下限的检查与数据判断等线程进行唤起,对当前数据的参数类型以及所处的参数区间进行确定。结束了数据判断线程的工作后,应该及时将图形显示线程工作进行唤起,因为如果参数数据超过了时限的话,那么分析线程故障就会被立即唤起。所以运行整个程序的过程中,享有最高优先级别的主线程应该是用户管理,只有用户管理运行好了,其他数据库存储线程、计算线程与数据采集线程等才能得到及时的唤醒与正常的运行,从而保障了整个程序的正常运行。

4 结语

综上所述,随着时代的发展与科学技术的不断发展与进步,多线程技术运用到测控系统中将成为测控系统发展的必然趋势。当多线程技术真正运用到了监控系统中,在处理用户界面时只要在主线程中处理即可,而对采集而来的数据进行操作时只要放进辅助线程中就可以。这样,用户界面在进行操作的过程中就不会和数据采集产生并发执行的问题,增强了系统的可靠性。同时,对测控系统中的辅助线程进行合理的安排,有利于系统的模块化结构的改善,这样在以后对系统进行移植与修改时就便捷了许多。所以说,在测控系统软件中广泛的运用多线程技术,是其将来的发展趋势。

[1]何新军熊幸明.基于多线程技术的PLC与PC通讯在电机测控系统中的实现[J]机床电器2008(2):31-33.

[2]代峰燕刘兴华刘松杜晓帆.多线程技术在测控系统中的实现[J]北京石油化工学院学报2011(1):42-45.

[3]向运飞刘旺开沈为群.多线程技术在计算机测控系统中的应用研究[J]计算机应用研究2012(2):112-114.

[4]魏晓亮郭世明.多线程技术在微机测控系统中的运用[J]电力机车与城轨车辆2008(3):47-49.

[5]刘九七.Windows NT环境下多线程技术在测控软件中的应用[J]测控技术2010(3):45-47.

[6]蒋瑜陈循.Delphi多线程技术在测控系统中的应用[J]工业控制计算机2010(11):50-52.

[7]王瀚漓汪雄海.开关柜电气磨合危机控制系统中多线程技术的应用[J]测控技术2010(10):87-89.

[8]Chengming Xiao,Zhou Yang.Measurement and Control System Based on Delphi Language Design and Implementation of Software Platform [J].Nanjing University of Chemical Technology(Natural Science Edition).2010(03)58-63.

[9]SONG Jian1,ZOU Mu-chun2,3,SUN Wei3 1.School of Network,Lanzhou University of Technology,Lanzhou,730050,China;2.School of Maths and Computer,YiChun University,YiChun,336000,China;3.School of communication and computer,Lanzhou University of Technology,Lanzhou,730050,China.Research of Intrusion Detection Method Based on Rough Set and Adaptive Boost[J].International Journal of Systems and Control.2007(03):87-95.

[10]Zhang Liang,the Yellow Sea in,ZHANG Cui-fang Based on Lab Windows / CVI multithreading Research and Design of Data Acquisition [J].Chinese instruments.2005(08):83-90.

[11]张宇峰,胡仕尊,王德意,贾嵘.多线程技术在鸡冠岩电站微机监控系统中的应用[J].西北水力发电.2006(04):36-42.

[12]彭志召,张雨,刘义乐,高永强.基于LabWindows/CVI的矿用卡车实时状态监测系统的开发[J].矿山机械.2010(17):105-110.

[13]高功名,李文彬.基于虚拟仪器和无线网络的数据采集系统[J].林业机械与木工设备.2008(03):79-83.

[14]翟巍,王勇,植涌.基于LabWindows/CVI高速数据采集系统的设计[J].郑州轻工业学院学报(自然科学版).2007(06):34-40.

猜你喜欢
辅助线主线线程
怎样添辅助线证全等
两种重要的辅助线
浅谈辅助线在数控切割中的应用
人物报道的多维思考、主线聚焦与故事呈现
活力(2019年17期)2019-11-26 00:42:32
更加突出主线 落实四个到位 推动主题教育取得实实在在成效
当代陕西(2019年15期)2019-09-02 01:51:52
数字主线
浅谈linux多线程协作
环球市场(2017年36期)2017-03-09 15:48:21
下沉和整合 辽宁医改主线
中国卫生(2014年9期)2014-11-12 13:02:00
Have Fun with Math
Linux线程实现技术研究