程序采用VisualC++的多线程编程来实现对数控雕铣机沐鸣2操作时实性和动态性要求。所谓线程是指一个独立的过程,是系统分配处理器时间资源的基本单位。线程机制使得系统具有多任务功能。
PCNC软件系统一般执行过程为:读取处理后的NC文件→译码→轨迹插补计算→伺服控制,这样一个基本的加工循环,在未运行完最后一条NC语句前,该循环将一直进行。如果应用程序仅有一个线程即用户界面线程,一旦程序执行仿真,它将独占CPU一直运行下去直到结束,无法接受和处理用户消息和事件。也就无法实现实时性的要求,而多线程就可以解决这个问题。
沐鸣2VisualC++中线程可分为用户界面线程(UserInterfaceThread)和工作线程(WorkerThread)。用户界面线程的特点是拥有单独的消息队列,具有自己的窗口界面能够对用户输入事件和消息作出响应。工作线程一般用于处理后台任务,仅由函数体实现,不处理窗口消息。采用多线程后,用户界面线程主要用来显示当前指令、更新状态参数(X,Y,Z轴坐标值,主轴进给速度、加工时间等),以及接受用户输入指令。将实现仿真的程序放在一个工作线程中。这样尽管工作线程忙个不停,但用户线程却“空闲”可以随时响应用户输入事件和消息。用户线程和工作线程之间通过事件对象Cevent来负责线程之间的通信。
沐鸣2设置“暂停仿真”和“开始仿真”两个按钮,当按下在“暂停仿真”后程序暂停用户可以观察指令和相应状态;按下“开始仿真”后又断点处重新开始执行。其实现的具体方法如下:在“暂停仿真”按钮的单击事件响应函数中设置停止事件有信号,“开始仿真”按钮的单击事件响应函数中设置启动事件有信号,工作进程在循环体中检测相应事件是否有信号,从而执行相应的程序。需要做的工作是定义两个事件停止事件和启动事件,创建一个工作者线程,并建立工作线程的控制函数体。其程序流程如图2所示。用户界面线程和工作线程的状态参数和图象缓冲区首地址通过全局变量来传递。用户界面线程首先建立图象缓冲区,将缓冲区初始化后,通过全局变量将缓冲区首地址和绘制图象的窗口句柄传递给工作进程。工作进程将译码后的数据转化成图像数据,不断刷新缓冲区,调用MFC类库中的CDC类BitBlt()来重绘屏幕,这样就形成加工动画过程。在重绘屏幕时加入延时,这个延时由每条指令所走的步距总和和对应插补的速度决定。通过比例延时可以较为精确地获得实际加工时间。
沐鸣2状态参数的刷新则由WINDOW下计时器Timer实现,在达到设定时间后由计时器Timer发出WM-TIMER系统消息到用户界面线程消息队列中,由其对应的消息处理函数OnTimer来刷新状态参数。
下一篇:VC数控雕铣机仿真软件的作用