首页 >> 刘纯如

多线程技术在电机测速方面的应用0热泵机组

文章来源:途游娱乐网  |  2022-09-03

多线程技术在电机测速方面的应用

多线程技术在电机测速方面的应用 LabWindows/CVl是一个完伞的ANSIC开发环境,是用于仪器控制、自动检测、数据处理的应用软件。它以ANSIC为核心,将功能强大、使用灵活的C语言平台与用于数据采集、分析和品示的测控专业工具有机结合起来。它的交互式开发平台、交互式编程方法、丰富的功能俩板和函数库大大增强了C语言的功能,为熟悉C语言的开发人员建立自动化检测系统、数据采集系统、过程控制系统等提供了一个理想的软件开发环境。 同时为了使CPU得到更合理充分的利用,LabWindows/CⅥ提供了多线程机制,本文主要阐述Lab‰dows/cVl多线程技术在现代检测方面的应用技巧,利用多线程技术准确实时读取电机转速。1 多线程 在操作系统中,进程被定义为应用程序的运行实例,是应用程序的一次动态执行。线程是进程内部程序执行的路径,是进程的一个执行单元。从根本上说,线程是可由系统调度的一个最简单的代码单元,负责执行包含在进程的地址空间中的程序代码。 多线程在构建大型复杂系统的时候是需要重点关注的一个重要方嘶,特别是在效率和性能之问做一个权衡的时候。恰当的使用多线程,可以极大的提高系统性能。每个止在系统上运行的程序,都可以看作是一个进程,每个进程又包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行过程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。常用模型有以下三种。 1)单线程模型。在这种线程模型中,一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点是系统完成一个很小的任务都必须占用很长的时间。 2)块线程模型。这种模型中,一个程序里可能会包含多个执行的线程。在这里,每个线程被分别放到进程里一个单独的块中。每个进程可以含有多个块,可以共亨多个块中的数据。程序规定了每个块中线程的执行时问。所有的请求通过Windows消息队列进行串行化处理,这样保证了每个时刻只能访问一个快,因而只有一个单独的进程可以在某一个时刻得到执行。这种模型相比单线程模型的好处在于,可以响应同一时刻的多个用户请求任务而不只是单个用户请求。但它的性能还不是很好,因为它使用了串行化的线程模型,任务是一个接一个得到执行的。 3)多线程块模型。多线程块模型在每个进程里只有一个块而不是多个块。单个块控制着多个线程而不是单个线程。这里不需要消息队列,因为所有的线程都是相同的块的一个部分,并且可以共亨。这样的程序比单线程模型和块线程模型的执行速度都要快,因为降低了系统的负载,因而可以通过系统优化来减少程序的等待时间。 一个采用了多线程技术的应用程序,可以更好地利用系统资源。其主要优势在于充分利用了CPU的窄闲时问片,可以用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存的,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之问的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。2 LabWindows/CVl中的多线程机制 LabWindows/CVl多线程程序中,使用主线程创建、.显示并运行用户界面,在次线程中运行其他对时间要求很高的操作。LabWhdows/cvI提供了两种多线程机制,一种是线程池机制,另外一种就是异步定时器机制。这两种机制各有各的特点,线程池适用于需要不连续地执行或在循环中执行的任务,而异步定时器适用于在固定时间间隔内执行的任务。2.1 线程池 对于线程池的使用,首先要调用LabWindows/CVl中函数库中的线程池创建线程函数。函数名CmtS cheduleThreadPo olFunction如果存在一个窄闲线程,则被用来分配给新线程,且没有达到系统所允许的最大线程数,线程池将创建一个新线程;如果此时已经达到系统的最大允许线程数且没有空闲线程,LabWindows/CⅥ将等待直到有窄闲线程或一些线程执行完释放资源后再创建新线程。函数原型为:

Pool Handle是线程句柄。可以从CmtNewThreadPool函数中得到,或用DEFAULT THREADPOOL HANDLE表示一个缺省的线程池句柄。*Thread Function Date是线程函数参数,可以通过线程池传递。不能传递局部变量地址及函数在执时的其他的无效参数。*Thread Function ID是用来标识线程函数的唯一ID号。可以用ID号来得到线程函数的各种属性,也可以通过函数CmtWaitForThreadPoo lFunctionComp letion来执行线程直到结束。如果值不为NULL,必须调用函数CmtReleas eThreadPo olFunctionlD释放线程。2.2异步定时器 LabWindows/CⅥ中的异步定时器位于toolbox中的asynctmr文件。只能通过代码方式创建异步定时器。创建异步定时器的函数为NewAsyncTimer。函数原型是: int N ewAsyncTimer(doub le Interval,int Count,int Initial State,void*Event_Function,vo id*Callb ack Data);*Event_Function是自定义回调函数,是你自己所写的回调函数,传递给异步定时器,异步定时器就会按设定的时问执行回调函数,Interval是两次事件之问的时间间隔,单位为秒。 异步定时器是使用Windows多媒体定时器来执行定时操作的,并且在主线程运行的同时,产生一个次线程。如果使用多个异步定时器,其参数可能会被其他的线程所修改,会带来一个不确定的结果。另外,由于多媒体定时器在不同电脑中的最小间隔(Interval)设置可能是不同的,若出现设置小于最小时问的情况,则会有一个不确定的结果,一般设置值不应小于l0ms。3 多线程技术在电机测速方面的应用 实验要求实时的读回电机的转速,以实现对伺服电机的控制。本项目用串口485采集被测电机编码器的信息,用Labwindows/CVl中多线程机制处理数据,最后实时的得到被测电机的速度。介于Labwindows/CVl多线程的特点,采用在线程池里加入异步定时器,这样定时就会更加准确。 通过串口485读回信息,用Labwindows/CVI进行数据的处理同时根据给出的传动比,计算出伺服电机的转速,换成需要的脉冲数,向控制卡发出命令,控制伺服电机,形成一个闭环系统。图1是电机测速的流程图。 被测电机转速范围在10~1000 r/min之间,传动比范围在4~500之间。传动比精度要求小于0 .1。主要功能代码如下: 数据处理部分采用M/T法计算出电机的转速。在单位时问t内计算出被测电机编码器转过的脉冲数。这里要注意计算出电机转速前提条件必须有足够的采样时间。在本次测速中时间定的是为0.02 S。4 实验结果 通过反复的实验,最后得出在线程池中建立异步定时器的方法,在电机低速中速高速时候都适合。图2是电机低速传动比为20采集到的电机速度波形图,图3是电机高速传动比为20采集到的电机速度波形图。从实验结果可以看出,侧回来的电机的速度很稳定,准确,传动比也在规定误差的范围内,这就充分说明了采用在线程池中建立异步定时器这种方法,能够更可靠的实时读取电机转速。

5 结语 本文针对如何解决实时准确读取电机转速的例子,合理利用LabWindows/CVl中的多线程技术,准确读取了电机的速度。这表明了合理利用多线程技术会让控制系统优化,CPU使用率得到提高。

治疗性功能障碍哪家医院好一些

绍兴治疗前列腺炎费用要多少

郑州看心理医生哪家好

引起肾发育不良的原因有哪些

渭南治疗男性不育