基于UG的数控机床串口通讯系统开发
2018-03-21周晓慧陈岳坪
周晓慧,陈岳坪,杨 翊
(1.广西科技大学 机械工程学院,广西 柳州 545006;2.柳州市特种设备检验所,广西 柳州 545006)
1 引言
2 系统的设计
数控机床的效率发挥与程序的传输方式密切相关。目前,随着以“先进制造技术”为主题的制造业兴起[1],数控机床依靠传统的数控程序传输方式已无法满足需求。同时,随着原位检测技术的快速发展,原位测量的高速高精度化,发展面向集成的原位检测技术,实现原位检测系统与CAD/CAM系统的无缝连接已成必然趋势。因此,针对以上要求,对UG6.0进行二次开发,增加基于加工检测集成的数控机床串口通讯系统模块,实现原位检测与CAD/CAM的有效集成。
图1 基于UG的数控机床串口通讯系统的组成Fig.1 Composition of Serial Communication System for CNC Machine Tool Based on UG
通讯系统主要是由计算机系统、数控机床系统、测头系统、工件和UG软件五部分组成[2],如图1所示。UG软件在整个系统中起着至关重要的作用,通过对它增加基于加工检测集成的数控机床串口通讯系统模块,实现了PC端与NC端的数据传输,可实现边传输边加工,边传输边检测的操作。
3 动态链接库开发UG界面
目前,用户对UG的二次开发主要还是依靠UG/Open API,也称User Function[3]。另外,用户界面的设计开发大多是采用UG/Open UI Styler。然而,同Windows应用程序开发工具相比,UI Styler包含的控件相对较少,功能有限,受到的局限因素较多,编程过程复杂,执行效果较差。尽管UG的应用程序采用Microsoft Visual C++6.0(VC)作为编译器,但是由于受到UG/Open API的限制,目前还不能在UG/Open API中直接调用Microsoft Fundament Class(MFC)。
数控机床原位检测要实现的效果是,待加工工件在数控机床上加工完毕,没有进行二次装夹的情况下,将机床上的加工刀具直接换成检测测头,当检测测头的红宝石触碰工件时[4],机床能够实时记录当前工件上触碰点的坐标值(实际上是测头球心的坐标值,只是在建立检测工件坐标系时加了偏置补偿,因而数控系统中记录的坐标值就转化成工件上检测点的坐标值了)并通过宏程序传输到机床串口,供原位检测系统计算机端的采集和处理。因此,对于接收检测结果的编程应采用消息响应机制,即发现信号启动接收机制,并将检测结果在屏幕上进行实时显示。而MFC拥有着编程可视化、使用方便、控件丰富、强大易控制并且还可利用Windows的消息机制,直接开发中文界面的特点。因此,我们要突破UG/Open API对MFC直接调用的禁锢,寻求一种新方法完成基于UG数控机床串口通讯系统。
3.1 开发环境的设置
对UG进行二次开发的第一步是要设置UF源程序的环境变量,其目的是方便UG找到二次开发可执行程序的入口,有助于启动UG时必要信息的载入。在MicrosoftVisualStudio平台中原本是没有UG二次开发模块的,需要在MicrosoftVisualStudioCommonMSDev98Template中添加ugopen.awx和ugopen.hlpl两个文件。
新建系统环境变量“UGII_USER_DIR”[5],变量值为自定义目录,如图2所示。在这个自定义的目录下新建application文件夹和startup文件夹[5]。前者用来放置对话框文件(*.dlg)、图片文件(*.bmp),后者则放置菜单文件(*.men)文件、二次开发程序(*.dll),这样设置后就可在UG软件中看到用户定制的功能模块。
图2 系统添加用户变量Fig.2 Adding User Variables to System
3.2 动态链接库的搭建
在Visual C++6.0的开发环境中,UG/Open AppWizard、Win32 Dynamic-Link Library和均可作为UG二次开发的工程向导。然而,这三者中只有MFC Wizard(DLL)可充分调用MFC类库中的资源创建(dll)。另外,对于MFC本身,因包含应用程序框架并以C++类的形式封装Windows API,实现人机交互,可大大减少程序开发人员的工作量,故通过调用MFC类库的方式,进行基于UG的数控机床串口通讯系统的开发。UG可通过DLL实现UG系统内部与自身图形界面的通信[6],并且该执行方式运行速度快,故选用MFC Wizard(DLL)作为工程向导。DLL的调用过程,如图3所示。接口实现方案,如图4所示。通过载入DLL文件的方式,实现UG与MFC的集成和运行,从而可直接调用MFC丰富的函数资源,实现与数据库的通信。
图3 DLL的调用过程Fig.3 DLL Calling Procedure
图4 接口实现方案Fig.4 Implementation Scheme of Interface
具体实现过程如下:(1)在VisualC++6.0的应用程序创建向导中选择MFCAppWizard(dl1),应用程序类型为Regular DLL using sharedMFCDLL。(2)设置UG应用开发环境。在Project-Setting-Link中,Object/librarymodules文本框中添加UG库文件libufun.1ib和 libugopenint.1ib。(3)配置路径选项,选择 Tools-Options,选择Directoris选项卡,分别在LibraryFiles和IncludeFiles中添加UG根目录下UGOPEN文件夹所在的路径。编写应用程序,在其主程序中添加UG的入口函数ufusr()。(4)建立MFC对话框并添加调用MFC函数。在菜单命令中选择Insert--Resource,选择Dialog,创建Windows风格对话框。(5)在应用程序中添加 ufusr_ask_unload()卸载函数和PrintErrorMessage()错误处理函数代码,编译,连接,生成动态连接库文件(*.dll)。启动UG,通过工具条和MenuScript编辑的菜单完成调用。
4 原位检测数控机床串口通讯的实现
串口通信,即收发双方可在单根数据线上按位(bit)进行数据信息的传输[7]。并行通信是按字节(byte)传输的,传输速度虽快,但其抗干扰能力远远不及串行通信。将串口通信应用于原位检测数控机床通讯系统中,可实现边传输边加工,边传输边检测,促进数控程序传输的快捷和可靠性的提高。目前,RS—232C已成为DET(数据终端设备,如计算机)和DCE(数据通信设备)的接口标准,计算机上的COM口就是RS—232C接口,除了老式的台式机电脑和工控机还保留着DB—9的公头连接器外,现在笔记本电脑和台式机电脑上都要使用USB进行串口转换与RS—232C数据线进行连接使用。故通过RS—232C标准接口实现数控机床系统和计算机系统之间的全双工串行通讯。
4.1 主界面的设计
使用动态链接库开发UG环境下的界面对话框,并添加控件,如图5所示。
4.2 串口通讯编程
Visual C++进行串口应用程序的开发,常用的方式有两种。一种是使用微软的MSComm(Microsoft Communication Control)控件,另一种是使用Win API。前者应用简单快捷,但其灵活性差,特别是在UG/Open中,部分控件的函数处理非常麻烦,而且其最多仅支持16个串口;相反,后者功能强大,编程灵活且稳定性强,并且针对不同的要求,有多种应用方式,如重叠I/O方式、简单查询方式以及事件驱动方式。考虑到数控机床用户使用的灵活性和通用性,采用了Win API方式进行串口通信应用程序的编写。同时,对于原位检测的数控机床而言,串口通信数据到来的时刻是随机的,若应用查询方式将极度浪费系统资源;而重叠I/O方式,是依据I/O请求创建线程[8],当同一时刻请求量多时,系统的处理效率会大大降低,特别是有数据到来时,程序是无法实现自动接收的。相反,事件驱动的方式则是通过事件来触发消息,系统通过消息响应函数进行处理。故选择此应用方式,可实现串口接收缓冲区在处理接收数据的同时仍可处于接收或者等待数据传输的状态,程序的执行效率显然会大大地提高。
图5 UG环境下主界面对话框图Fig.5 Main Interface Diagram of the Dialogue Based on UG
4.3 多线程串口的应用
在串口编程中,当使用WinAPI编写串口程序及事件驱动方式时,通常要考虑使用多线程编程。因为此时串口的事件状态需要被程序循环检测,当串口出现收发事件时,串口的读写操作则必须立即进行。从文献[8]可知,MFC可以支持工作者线程和用户界面线程,通过函数AfxBeginThread()均可实现这两种类型线程的创建,只是函数参数不同。两者的根本区别是工作者线程没有消息循环和消息机制,只是进行程序的后台工作。与之相反,用户界面线程是由CWinThread类派生出,主要用于处理用户的中断输入并响应各种对应的消息和事件。因此,采用用户接口线程。有了线程,可由主界面调用串口配置对话框,完成串口参数的配置,如图6所示。
图6 配置串口参数Fig.6 Configuration of Serial Port Parameters
4.4 自定义消息函数
自定义消息的发出和处理可由程序员自己掌握,相对于一般由系统函数处理的系统消息而言,使用起来比较灵活,主要应用于消息驱动事件。故采用自定义消息函数,可由以下步骤完成。
2.1.6 稳定性试验 取KC粉末0.30 g,精密称定,按照“2.1.3”项下方法制备试品溶液,室温放置,分别于0、4、8、12、16、20、24 h按照“2.1.1”项下色谱条件进样,记录峰面积,金丝桃苷、朝藿定B、朝藿定A、朝藿定C、淫羊藿苷、木犀草素、槲皮素、川陈皮素、山柰酚、宝藿苷I峰面积的RSD值分别为0.15%、0.58%、0.32%、1.11%、0.98%、1.58%、0.55%、0.68%、1.03%、0.25%,表明供试品溶液在室温下24 h内稳定。
(1)声明自定义消息
#defineWM_RECEIVEWM_USER+101
#defineWM_SENDWM_USER+102
(2)声明消息处理函数
afx_msgLRESULTOnReceive(WPARAM wParam,LPARAM lParam);
afx_msgLRESULT OnSend(WPARAM wParam,LPARAM lParam);
(3)将消息映射宏代码添加到类文件程序中
ON_MESSAGE(WM_SEND,OnSend)
(4)将消息处理函数添加到类实现文件中
LRESULTCCommDlg::OnReceive(WPARAMwParam,LPARAMlParam)LRESULT CCommDlg::OnSend(WPARAM wParam,LPARAM lParam)
5 数控机床串口通讯的实验验证
系统设计好后,通过正确配置环境变量后,可在UG软件的菜单栏中看到数控机床串口通讯系统模块,如图7所示。
图7 UG软件菜单栏中的数控机床串口通讯Fig.7 Serial Communication System of CNC Machine Tool in UG Software Menu Bar
为验证本系统的可行性,在我校加工中心,配备FANUCSeries Oi-MD数控系统,进行了数控机床串口通讯实验,主要步骤如下:
(1)设置好计算机及机床端参数,如图6所示。
(2)数控系统面板的操作。
(a)找到控制面板MODE模块,将旋钮调置EDIT状态下。
(b)在NC键盘上按下[PROG]键
(c)显示装置:[列表+]→[操作]→[F输入]→设定文件名→[执行]→SKP闪烁
(d)等待计算机端发送
选择待发送的检测程序文件(*.txt),如图5所示。
点击[发送检测程序],在机床控制面板显示装置上可以查看到发送的程序,如图8所示。数控机床检测程序开始运行后,则会通过检测测头系统,将检测结果先在数控系统中存储,再通过RS232传输装置传送到计算机中,可对检测结果进行保存,如图5所示。
图8 数控机床端接收到的检测程序Fig.8 Receiving Inspection Program for CNC Machine Tool
6 结论
开发了一种基于UG的原位检测数控机床串口通讯系统。针对不能在UG/Open API中直接调用Microsoft Fundament Class(MFC)的问题,即无法使用MFC来编写UG应用程序的界面,采用动态链接库的方法开发UG界面,使用多线程调用串口配置对话框,完成串口参数的配置,利用消息响应函数,完成对事件的处理,在此基础上实现了数控机床系统与计算机系统之间的串口通讯。
[1]张金焕.基于嵌入式系统的制造装备自律控制理论与关键技术研究[D].武汉:武汉理工大学,2009.(Zhang Jin-huan.Research on the control theory and key technology of manufacturing mquipment based on embedded system[D].Wuhan:Wuhan University of Technology,2009.)
[2]王正春.基于UG在机测量系统的关键技术研究[D].哈尔滨:哈尔滨理工大学,2014.(Wang Zheng-chun.The study of key technology about on-machine measurement system based on UG[D].Harbin:Harbin University of Science and Technology,2014.)
[3]谌祖辉,侯忠滨,吴占阳.UG软件二次开发中MFC调用方法研究[J].机床与液压,2006(5):181-3+6(Chen Zu-hui,Hou Zhong-bin,Wu Zhan-yang.Research about how to use MFC in the second development of UG [J].Machine Tools and Hydraulic,2006(5):181-3+6.)
[4]诸进才.面向曲面零件的加工精度在线检测技术研究与系统开发[D].广州:广东工业大学,2008.(Zhu Jin-cai.Research on the technology of online inspection system for machining accuracy of free-form surface components[D].Guangzhou:Guangdong University of Technology,2008.)
[5]黄勇.UG/Open API、MFC和COM开发实例精解[M].北京:国防工业出版社,2009.(Huang Yong.UG/Open API,MFC and COM Development Instances of Pure Solution[M].Beijing:National Defence Industry Press,2009.)
[6]陈小勇,周德俭,吴兆华.基于UG的接口技术研究[J].机床与液压,2009(7):196-198.(Chen Xiao-yong,Zhou De-jian,Wu Zhao-hua.Research on the interface technology of UG[J].Machine Tool and Hydraulic,2009(7):196-198.)[7]田敏,郑瑶,李江全.Visual C++数据采集与串口通信测控应用实战[M].北京:人民邮电出版社,2010.(Tian Min,Zheng Yao,Li Jiang-quan.Visual C++Data Acquisition and Seria Port Communication[M].Beijing:Posts&Telecom Press,2010.)
[8]张筠莉,刘舒智.Visual C++实践与提高—串口通信与工程应用篇[M].北京:中国铁道出版社,2005.(Zhang Yun-li,Liu Shu-zhi.Practice and Improvement of C++Visual-Serial Communication and Engineering Application[M].Beijing:China Railway Publishing House,2005.)
[9]龚敏,陈友东.数控技术及开放式数控系统[J].机械设计与制造,2006(2):79-81.(Gong Min,Chen You-dong.Numerical control technology and open CNC system[J].Mechanical Design and Manufacture,2006(2):79-81.)
[10]董正卫,田立中,付宜利.UG/OPEN API编程基础[M].北京:清华大学出版社,2002.(Dong Zheng-wei,Tian Li-zhong,Fu Yi-Li.UG/OPEN API Programming Foundation[M].Beijing:Tsinghua University Press,2002.)
[11]任国栋,郑峰,葛春荣.基于UG的汽轮机叶片CAD系统二次开发[J].组合机床与自动化加工技术,2015(1):46-8.(Ren Guo-dong,Zheng Feng,Ge Chun-rong.CAD system of blade of the steam turbine based on UG/OPEN[J].Modular Machine Tool&Automatic Manufacturing Technique,2015(1):46.)