APP下载

VC++的反向间隙补偿处理软件程序设计

2011-10-24董瑞刚尹冠群

上海电气技术 2011年3期
关键词:字符串数控系统控件

董瑞刚, 周 吉, 程 松, 尹冠群

(上海电气集团股份有限公司中央研究院,上海200070)

Visual C++6.0(VC++)是 Microsoft公司推出的基于C/C++语言的集成开发工具。它不仅拥有C/C++语言的集成开发环境,而且与Win32紧密相连,功能相当强大,代码效率很高,可以实现从底层软件直到上层直接面向用户的软件。VC++也是目前最为流行、使用最为广泛的软件开发工具之一,其向用户提供了一个面向对象、可视化的编程环境。它的微软基础类库(Microsoft Foundation Class,MFC)封装了大部分应用程序编程接口(Application Programming Interface,API)函数,大大简化了用户的编程工作,提高了代码的可重用性,使得用户可以快速地进行软件开发[1]。

在数控机床上,由于各坐标轴进给传动链上驱动部件(如伺服电动机、伺服液压马达和步进电动机等)的反向死区、各机械运动传动副(如齿轮传动和滚珠丝杠螺母副)的反向间隙等误差的存在,造成各坐标轴在由正向运动转为反向运动时形成反向偏差,通常也称反向间隙或失动量。反向间隙直接影响伺服系统的高定位精度和快速响应特性的发挥,进而影响设备加工精度。目前,大多数数控系统都内嵌了反向间隙补偿功能,以提高数控设备的精度和快速响应性。但与此同时,一些老旧数控机床的数控系统缺乏该功能,由于系统的封闭性,也不可能直接在系统中加入反向间隙补偿功能。另外,在一些基于计算机的专用数控系统的开发中也遇到反向间隙的补偿问题。

本文探讨了基于VC++的反向间隙补偿处理设计方法,它可在不改变数控系统及机械结构的前提下实现反向间隙补偿。

1 开发环境及特点

软件开发平台:VC++(MFC)。

运行平台:Windows xp/Windows 2000。

MFC的本质就是一个包含许多微软公司已经定义好的对象类库,虽然用户要编写的程序在功能上是千差万别的,但从本质上讲,都可以划分为对用户界面的设计、文件的操作、多媒体的使用和数据库的访问等方面[2]。

正是由于MFC编程方法充分利用了面向对象技术的优点,使得编程时不必关心对象方法的实现细节。同时,类库中的各种对象足以完成程序中的绝大部分功能,从而大幅度减少应用程序中编写的代码,有力地保证了程序的良好性和可调试性。

本文正是利用VC++的MFC编程方法对反向间隙补偿处理软件进行设计。

2 反向间隙补偿原理

因为丝杠和丝母之间肯定存在一定的间隙,所以在正转后变换成反转的时候,在一定的角度内,尽管丝杠转动,但是丝母还要等间隙消除(受力一侧的)以后才能带动工作台运动,这个间隙就是反向间隙。

反向间隙补偿又称为齿隙补偿。机械传动链在改变转向时,由于反向间隙的存在,会引起伺服电动机的空转,而不发生工作台的实际运动,又称失动。在半闭环系统中,反向间隙对机床的加工精度具有很大的影响,必须加以补偿[3-4]。反向间隙补偿原理是在无补偿的条件下,在轴线测量行程内将测量行程等分为若干段,测量出各目标位置Pi的平均反向差值作为机床的补偿参数输入系统。数控系统在控制坐标轴反向运动时,自动先让该坐标反向运动值,然后按指令进行运动。如图1所示,工作台正向移动到0点,然后反向移动到Pi点;反向时,电机(丝杆)先反向移动,后移动到Pi点;该过程数控系统实际指令运动值为

图1 反向间隙补偿示意图

本文所提的反向间隙补偿处理是反向间隙的预补偿,是指在数控代码传入数控系统之前将反向间隙补偿到数控代码中。经过反向间隙预补偿的数控代码可直接传入数控系统进行加工,数控设备不用因反向间隙的影响而进行机械结构或控制系统改动。对于没有反向间隙补偿功能的数控设备,其预补偿处理的情况如图2所示。

图2 反向间隙预补偿处理示意图

3 软件设计

3.1 软件设计功能

3.1.1 功能需求

软件功解需求如下:① 反向间隙补偿轴数5;②轴符号可由用户自定义;③界面友好提示,如补偿完成提示、覆盖确认提示等;④ 系统运行稳定,安全可靠;⑤ 界面设计美观实用,人机交互界面友好;⑥ 补偿功能灵活、方便、快捷、准确,数据存储安全可靠。

3.1.2 软件功能介绍

反向间隙补偿处理软件是为消除数控机床的反向间隙对加工精度的影响而制作的一款专用软件。它主要实现功能有自由选择待补偿文件、自由选择轴数和轴符号、自动存储补偿后文件和正确补偿反向间隙值。

反向间隙补偿处理软件功能的实现可分为以下几个步骤:① 选择文件,即选择原始的数控程序代码文件,文件名称和文件扩展名不限;② 选择要补偿的轴;③在该轴的轴符号框中输入轴符号,例如输入“X”,表示要补偿的轴为X轴;④ 在该轴的反向间隙补偿值中输入补偿值;⑤ 后处理执行,完成后反向间隙补偿处理运算,并且自动将补偿过的数控程序文件另存为*_bc(*代表原数控程序文件的名称及扩展名)。

虽然本软件的功能实现仅有上面的5个步骤,但在软件的流程设计中也要考虑很多相互之间的关联关系,字符串的移动、排列、替换等算法。反向间隙补偿处理软件的流程如图3所示。

3.2 软件界面设计

VC++提供了强大、快捷的编程工具,其最基本的是3个导航:AppWizard用于程序框架的生成,AppStudio用于资源的编辑,ClassWizard用于类的编辑和管理。反向间隙补偿处理软件的界面设计以界面简洁、功能实用、使用方便为原则,采用AppWizard导航,生成基于对话框(Dialog based)的应用程序。基于对话框的应用程序比起其他大多数MFC程序还有一个优点,即可以使用VC++资源编辑器设计整个用户界面而不用编写代码。在创建该应用程序时,能够可视化地放置位图、按钮、文本域和其他Windows控件,并能可视化地重新定义其大小及位置[5]。

使用基于对话框的应用程序创建软件界面,反向间隙补偿处理软件的界面包含:轴选择、轴符号、反向间隙补偿值、选择文件、后处理执行、关闭。程序界面如图4所示。

图3 反向间隙补偿处理软件流程图

轴选择(多选框):对应的控件为Check Box,资源ID为IDC_AXIS1~IDC_AXIS5。选中轴选择多选框就对该轴对应的轴符号进行补偿处理,未选中,则不做处理,程序实现用((CButton*)GetDlgItem(IDC_AXIS1))->GetCheck()==BST_CHECKED来检测该多选框是否被选中。

图4 反向间隙补偿处理软件界面

轴符号(文本框):对应的控件为Edit Box,资源ID为IDC_AXIS_SIGN1~IDC_AXIS_SIGN5。轴符号中输入的字母就是需要补偿轴的轴号,程序实现用GetDlgItemText(IDC_AXIS_SIGN1,axis_sign1)来获得轴符号文本框中的内容,并保存在axis_sign1变量中,axis_sign1为 CString型字符串。

反向间隙补偿值(文本框):对应的控件为Edit Box,资源ID为IDC_OFFSET_VALUE1~IDC_OFFSET_VALUE5。用于输入补偿的值,程序实现与轴符号类似,用 GetDlgItemText(IDC_OFFSET_VALUE1,offset_value1)来获得轴符号文本框中的内容,并保存在offset_value1变量中,offset_value1为CString型字符串。

选择文件(按钮):对应的控件为Button,资源ID为ID_CHOOSE。选择文件按钮按下后,选择对话框自动弹出,正确地选择文件,并将文件内容逐行读入内存。while(fp.ReadString(strFilePath-Name)){}代码用于实现文件内容的逐行读取。选择文件函数OnChoose包含在CMyDlg类中。

后处理执行(按钮):对应的控件为Button,资源ID为IDOK。对数控程序代码进行反向间隙补偿处理,并自动另存文件,后处理执行函数OnOK包含在CMyDlg类中。

关闭(按钮):对应的控件为Button,资源ID为IDCANCEL。用于软件的关闭,程序实现采用控件默认程序代码。

3.3 代码设计

3.3.1 为程序添加OnChoose事件

OnChoose事件利用CFileDialog dlg打开选择对话框,并用dlg.GetPathName()来调用数控程序的文件名和文件路径,将之存储在变量strFilePath-Name中。OnChoose事件比较简单,其他运算处理工作都放在OnOK事件中。

3.3.2 字符串的读取与处理

变量str_sign1_1中存储的是每一行的字符串,该字符串中有轴符号和轴坐标信息也有数控程序段号、F指令、空格及其他信息。在补偿处理时,只有轴符号和轴坐标信息需要取出来用于补偿后的替换,所以需要对str_sign1_1中的字符串进行取字符串操作。方法如下:先找到字符串中的轴符号,取轴符号右面的字符串,存入str_sign1_2中,再取str_sign1_2中有英文字母左边的字符串,最后去除该字符串中的空格,存入str_sign1_3中。

3.3.3 反向间隙补偿处理程序

程序代码如下所示:

反向间隙补偿处理的实现就是后一行的轴坐标与前一行的轴坐标之间进行比较。如果出现坐标反向,并且反向距离大于反向间隙补偿值,那么该轴坐标值就应加上反向间隙补偿值,然后用替换函数Replace将原先的值替换。其中需要注意的是轴坐标的比较是算数运算,而从每一行取出的是字符串,故必须进行转换。先将字符串转换成float型,运算完成后,再将其转换成CString型,最后进行字符串替换。

3.3.4 文件存储

文件存储是将原文件名加“_bc”,另存在文件原目录。若文件有重名就使用消息函数MessageBox(),弹出消息对话框提示是否要覆盖,确定 就 用fp_bc.Open(strFilePathName,CFile::modeCreate|CFile::modeWrite)创建新文件,取消则返回。

4 结 语

本文针对机床丝杠和丝母之间往返运动中产生的反向间隙误差,基于VC++开发了反向间隙补偿处理软件,成功实现了对数控程序的读取、补偿处理和存储。该软件对于没有反向间隙补偿功能的数控设备有很好的效果,也可为基于计算机的专用数控系统开发提供借鉴。其成功应用于2009年国家863项目《涡轴发动机整体叶轮高效加工技术与仿真优化》的叶片加工中。

本软件现只适用于直线(G0/G1)形式的数控程序,对于圆弧指令(G2/G3)生产的数控程序还有一定缺陷,即圆弧指令在执行过程中的换向用本软件进行反向间隙补偿还无法实现。

[1]胡海生,李升亮.Visual C++6.0编程学习捷径[M].北京:清华大学出版社,2003:1-5.

[2]曾凡锋,苗 雨.MFC编程技巧与范例详解[M].北京:清华大学出版社,2008:5-26.

[3]陈建雯,刘立新.反向间隙对数控加工的影响与补偿[J].装备制造技术,2008(09):76-77.

[4]黄荣亿.数控机床反向间隙误差加工程序补偿法[J].装备制造技术,2007(5):96-97.

[5]闫常友.跟我学Visual C++6.0[M].北京:清华大学出版社,2010:38-41.

猜你喜欢

字符串数控系统控件
基于文本挖掘的语词典研究
关于.net控件数组的探讨
基于FANUC 32i A数控系统的外部测量设计
西门子840D sl数控系统在SC125大型车铣镗床技术改造中的应用
基于FANUC Oi mate TD数控系统的手动功能开发
数控系统中GUI软件平台设计和实现
ASP.NET服务器端验证控件的使用
一种新的基于对称性的字符串相似性处理算法
依据字符串匹配的中文分词模型研究
一种针对Java中字符串的内存管理方案