当前位置:首页>> 多线程在火焰切割机数控软件中的应用

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

发布时间:2017-08-28作者:智汇胡妮

在设计火焰切割机数控系统的过程中,我们采用微机与ADT-853运动控制卡的结构。微机作为上位机,负责系统的管理功能,如数控加工文件管理,数控代码译码,与下位机通信,显示加工过程中的信息,接受用户输入的信息等任务。运动控制卡作为下位机则负责驱动电动机,开关量的控制,以及插补运算等实时性较强的任务。在加工过程中,计算机主要执行加工过程控制任务,即调用动态链接库函数控制机床运动。同时在屏幕上动态地显示当前刀具轨迹和加工程序段,及时地响应暂停、急停等用户信息。

  作为上位机的微机需要同时执行控制及显示等任务,如采用单线程会造成软件无法及时响应。为此我们采用多线程技术,把各个任务放在不同的线程中执行,使数控系统软件能较好地执行各种不同的任务,互不干扰。

1 数控系统软件结构

  本系统使用目前流行的WINDOWS操作系统,采用VC++6.0编译器开发。系统要实现的主要功能有:数控代码译码,刀具半径补偿,离线仿真,加工过程控制,加工轨迹动态显示,机床故障及状态检查等。

  虽然WINDOWS操作系统是一个多任务的操作系统,能够同时处理多个任务,但如果某一个任务执行的时间很长,就会造成其它的任务得不到及时响应。例如,在开始设计时,我们把加工过程控制和加工轨迹显示功能都放在主线程中实现,结果,由于加工过程控制任务需要不断查询控制卡的状态,占用了大部分的CPU资源,使得加工轨迹显示任务得不到及时响应,轨迹显示严重滞后,甚至严重偏离实际的加工位置,并且不能及时响应用户的输入,如暂停停止等操作。由此可见,由于数控系统软件的多任务同时并发执行,数控系统软件中各个任务争夺CPU资源,导致某些任务不能及时执行,影响了数控系统性能。为了解决这个问题,我们把多线程技术引入到软件设计中。

2 多线程技术

  每一个应用程序的执行实例称为进程,每个进程至少有一个线程,称为主线程。线程是进程内部可独立执行的一个单元,系统分配给每个线程一定的执行时间。由于每个线程的执行时间片只有20μs,可以认为它们几乎是同时执行的。Windows操作系统的多线程机制,为我们解决数控系统的多任务同时执行问题提供了方案。

  数控软件运行时,产生了数控软件的一个实例,即进程。同时开始执行该进程的主线程。此线程终止时,进程也终止。除主线程外,windows操作系统允许用户根据需要在应用程序中创建其他线程,使您可以同时运行多个并行执行的线程。我们可以创建其他线程执行加工过程控制任务、显示运动轨迹等。因此,多线程技术可以满足数控系统多任务并行执行的要求。

  Windows提供了两种线程类型:用户界面线程(user—interface thread)和辅助线程(worker thread),它们都是从CWinThread类派生出来的。用户界面线程通常有窗口,有自己的消息循环。一般用于处理用户的输入和对用户生成的事件及消息的响应。辅助线程没有窗口,不需要处理消息。一般用于完成不需要用户输入的后台任务。如计算、调度等工作。2 J。

3 线程在数控软件中的应用

  在本系统中由主线程负责维护人机界面,数控代码译码,刀具半径补偿,离线仿真等功能。这些功能的实时性要求不强,可以在非加工过程中完成。加工过程中,主线程创建加工过程控制子线程、加工轨迹显示子线程。下面以加工过程控制为例,介绍如何使用多线程。

  加工过程控制子线程负责控制运动控制卡。在自动加工过程中它先读取一行刀位文件数据,判断是执行什么样的动作,然后调用相应的动态链接库函数。读下一行数据并执行相应的函数之前,ADT一853运动控制卡要求查询上一次的函数执行过程是否有错误发生,当进行连续插补运算时还要查询是否可以发送下一个数据。当用户发现加工过程有错误,按下“暂停”、“停止”等按钮时,主线程通知加工过程控制线程,子线程执行相应的函数实现暂停或停止功能。

  3.1 线程的创建

  由于加工过程控制线程不需要窗口,可以使用辅助线程作为加工过程控制线程。辅助线程的创建非常简单,不需要显式的从CWinThread类派生一个辅助线程类。直接在主线程的自动加工消息响应函数中创建运动过程控制线程。它的创建函数的用法如下。

 

  参数pfnThreadProc是指向线程的控制函数的指针,这个控制函数必须按下面的形式申明。

  pParam是传递给线程控制函数的参数。nPfiofity是线程的优先级。操作系统根据线程的优先级决定它们的执行时间。由于加工过程控制需要较高的实时性,所以它的优先级要比主线程的优先级(THREAD—PRIORITY—NORMAL)高。设辅助线程的优先级比主线程的优先级高一级,为THREAD—PRIORITY—A.BOVE—NORMAL。

  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并从内存中删除线程对象。

4 结语

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

公司简介

宜科(天津)电子有限公司是中国工业自动化的领军企业,于2003年在天津投资成立,销售和服务网络覆盖全国。作为中国本土工业自动化产品的提供商和智能制造解决方案的供应商,宜科在汽车、汽车零部件、工程机械、机器人、食品制药、印刷包装、纺织机械、物流设备、电子制造等诸多领域占据领先地位。宜科为智慧工厂的整体规划实施提供自系统层、控制层、网络层到执行层自上而下的全系列服务,产品及解决方案涵盖但不局限于云平台、MES制造执行系统、工业现场总线、工业以太网、工业无线通讯、机器人及智能设备组成的自动化生产线、自动化电气控制系统集成、智能物流仓储系统等,以实现真正智能化的生产制造,从而带来生产力和生产效率的大幅提升,以及对生产灵活性和生产复杂性的管理能力的大幅提升。多年来,宜科以创新的技术、卓越的解决方案和产品坚持不懈地为中国制造业的发展提供全面支持,并以出众的品质和令人信赖的可靠性、领先的技术成就、不懈的创新追求,在业界独树一帜。帮助中国制造业转型升级,加速智能制造进程,成为中国工业4.0智慧工厂解决方案当之无愧的践行者。

更多详情>>

联系我们

  • 联系人:章清涛
  • 热线:18611695135
  • 电话:
  • 传真:
  • 邮箱:18210150532@139.com

Copyright © 2015 ilinki.net Inc. All rights reserved. 智汇工业版权所有

电话:010-62314658 邮箱:service@ilinki.net

主办单位:智汇万联(北京)信息技术有限公司

京ICP备15030148号-1