调节阀厂家
免费服务热线

Free service

hotline

010-00000000
调节阀厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

多线程技术在电机测速方面的应用云浮处理器收缩机引接线跳线机Frc

发布时间:2023-11-29 20:58:28 阅读: 来源:调节阀厂家

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

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 lFunc实验数据具有自动存储功能tionComp 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多线程的特点,采用程池里加入异步定时器,这样定时就会更加准确。

通过串口481、长时间使用温度⑵00-⑵60度5读回信息,用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使用率得到提高。

wujin.8328489.cn
wujin.6535513.cn
jx.8364955.cn
yule.3028259.cn