最新新闻
我要投稿
联系电话:027-87592219/20/21转188
投稿邮箱:tb@e-works.net.cn
您所在的位置:首页 > 智库 > 智能装备

多线程在火焰切割机数控软件中的应用

发布时间:2013-10-06 作者:陈辉 郭艳玲  来源:万方数据
本文讨论了基于运动控制卡的火焰切割机数控系统的软件设计中多线程技术的应用。数控系统软件运行时。要求在控制电动机以及各种开关的同时,能够处理出错信息,动态显示加工轨迹,响应用户的输入操作。数控系统软件同时执行多个任务会产生系统响应滞后问题。为此引入了多线程技术,把某些任务放在子线程中执行。它为解决数控软件系统中不同任务的时间性能要求。即响应时间提供了一种方法。

  3.2 线程的通信

  由于“暂停”、“停止”等消息是由主线程响应的,所以子线程要响应这些消息必须和主线程通信,由主线程通知子线程。由于采用的是辅助线程,因此不能使用windows消息通信。为此,我们可以使用全局变量,让主线程通知辅助线程。

  为响应“暂停”、“停止”消息,分别申明一个布尔类型的全局变量:

  BOOL g_zanting,g_tingzhi;

  初始化时将全局变量赋值为假,即没有“暂停”和“停止”消息。在主线程的“暂停”和“停止”等消息响应函数中给全局变量赋值为真。加工过程控制线程调用动态链接库函数之前,需要循环查询是否可以发送下一个数据,同时可以在这个循环中查询哪个全局变量为真,执行相应的函数,从而实现主线程和辅助线程的通信。

  3.3 线程的阻塞

  当按下“暂停”按钮时,主线程的“暂停”消息响应函数将全局变量zanting赋值为真。加工过程控制线程查询到zanting为真,阻塞线程,并向运动控制卡发出停止命令,记录当前的运动状态。当用户按下继续加工按钮时,线程从当前状态下继续执行。为了实现线程的阻塞,需要调用WaitForSingleObject函数,它的用法如下。
 

函数

  参数hHandle是指向一个事件对象的句柄。事件 是Windows的一种内核对象,在进程内部。事件是用唯一的32位句柄来标识的。它的句柄可以进行复制,以便在进程之间进行共享。事件可以为有信号(或真)状态或无信号(或假)状态。事件有两种类型:手工复位和自动复位事件。这里使用了自动复位事件。MFC为事件对象提供了一个方便的CEvent类,它是从CSyncObject类中派生的。在默认状态下,构造函数在无信号状态生成自动重置事件对象。

  要实现暂停后继续加工功能,需要申明一个全局的事件对象CEvent g_evenOixu。当按钮按下时,在主线程的消息响应函数中调用CEvent::SetEvent设定事件为有信号状态。在加工过程控制线程中调用Wait—ForSingleObject(g-evenOixu,INFINITE)函数,当事件为有信号状态,此函数返回值为WAIT_OBJECT_0。

  3.4 线程的终止

  为了实现线程正常情况下,一次加工过程执行完成后,加工过程控制线程返回,线程正常终止。如果加工过程出现错误,或是用户停止加工,加工过程控制线程需要提前终止。提前终止线程需要从线程内调用AfxEndThread函数,将所需的退出代码作为唯一参数传递。这将停止执行线程,解除对线程堆栈的分配,分离附加到线程的所有DLL并从内存中删除线程对象。主线程和加工过程控制线程工作流程如图2。

线程工作流程图

4 结语

  本系统在开发过程中将多线程技术应用在数控系统软件的开发中,把各个任务放在不同的线程中执行,解决了数控系统中多任务并发执行时产生的系统响应滞后的问题。通过改进,数控系统软件能较好地执行各种不同的任务,及时响应用户操作。 

2
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。