发明内容
针对上述不足,本发明的目的在于提供一种能够实现区域的快速自由划分和组合的数据分区方法。
本发明是这样来实现上述目的的:
数控机床的数据分区方法,包括以下步骤:
步骤1,文件读写,读入加工件的参数文件,并得到其中各加工线段的有效数据,储存于计算机内存的临时数组中;在读写模块中读入的是“.txt”文件,以行为单位依次读入,同时从中得到各线段的有效数据,存储于内存中的临时数组中;需要处理的文件包括Gerber、HPGL、Sieb&Meier、Excellon、ODB++等数十种格式。
步骤2,格式处理,对读取的数据进格式处理,建立访问列表,然后从访问列表中查找到处理函数,经过函数处理后将要加工的点或路径数据进行存储于;
步骤3,参数设置,对激光器、马达、振镜和分区的参数进行设置,其中分区需要设置的参数是基准点、分区大小、定位方向、区域间距;
步骤4,分区处理,确定每个分区区域,找出该区域包含的所有线段,并将结果保存于不同数据链中;在分区处理模块中首先要确定当前的区域,确定方法为:左边界=基准点X方向坐标+X定位方向×X方向区域间距,右边界=基准点X方向坐标+X定位方向×X方向区域间距+X方向分区大小,上边界=基准点Y方向坐标+Y定位方向×Y方向区域间距,下边界=基准点Y方向坐标+Y定位方向×Y方向区域间距+Y方向分区大小;然后遍历整个数据储存区域,寻找该区域包含的所有线段,在寻找过程中要根据线段的线形分别进行处理,当线段为直线时,通过计算直线到区域的最短距离,判断直线与区域是否有交点,如果存在交点,就要找出直线在区域内的部分,查找方法为求出直线的斜率(当斜率不存在时直线为垂线,要单独处理),写出直线的点斜式方程,进而求出区域各边界与直线的交点,最后经过求交集得出直线在区域内的部分,当线段为圆弧时,调用坐标转换函数,求出圆弧的圆心坐标和起止角,通过计算圆弧与区域边界的最大最小距离和圆心所在的位置,确定圆弧和区域是否存在交点,如果存在交点则要求出假设圆弧为整个圆时与区域的交集,最后求出圆弧与该交集的交集,从而得到圆弧在区域内的部分,在求出该区域包含的所有线段后,将这些线段保存于新建的数组中,同时将该数组的地址和索引号存储于寻址数组中,当分区完成时,寻址数组中保存了所有区域的索引号和该区域对应数组的地址;
步骤5,图像及状态输出,建立所需的元素类数据结构,对分区状态进行监控,并在计算机上显示分区前后的整体图形和当前区域的图形,最后将分区结果保存。
各步骤之间相对独立且紧密相关,协调工作,统一组成一个完整的分区方法。
本发明的有益效果是:在保证加工效率、加工精度和加工可靠性的前提下,实现区域各方向大小及位置的快速自由划分和定位,实现区域隔离及重叠弹性功能,同时,还能接受对参数的设置及输出分区效果和状态进行交互。
具体实施方式
参照图1,数控机床的数据分区方法,包括以下步骤:
步骤1,文件读写,在读写模块中读入的是“.txt”文件,以行为单位依次读入,同时从中得到各线段的有效数据,存储于内存中的临时数组中;需要处理的文件包括Gerber、HPGL、Sieb&Meier、Excellon、ODB++等数十种格式,其中每种格式存放数据的形式都有各自的特点,比如同一条圆弧,有的文件是记录了起止点坐标、半径和方向,而有的是记录了圆心坐标、半径和起止角;
本实施例采用VC++平台,在文件读取之后,针对不同格式的数据文件提取数据,并保存为具有影射关系的数据链表,该数据链表是将每个单独划分出来的区域,都独立地存储为一个VC++提供的CArray数组,并将其地址连同该区域的索引号一同存储于VC++提供的CMap数组中,当要对某区域操作时,就可以通过其索引号找到该区域中的所有线段。
步骤2,格式处理,在格式处理模块中建立了访问列表,其中记录有文件格式的标志位和对应与此种格式的处理函数,当文件读入完成后系统将从内存中得到文件格式的标志位,然后从访问列表中查找到处理函数,经过函数处理后将要加工的点或路径数据存储于CArray数组中。
步骤3,参数设置,对激光器、马达、振镜和分区的参数进行设置,其中分区需要设置的参数分别包括:
3.1、设置基准点:通过读取文件,获得整个文件的区域范围,将最小坐标点的坐标减去某一常量后作为第一个区域的基准点;把第一个区域的基准点加上区域的索引号与区域大小的乘积作为该区域的基准点;
3.2、设置分区大小:通过在X和Y方向上文件中的加工路径和振镜加工的有效范围确定,并在振镜的有效范围内可尽量包含更多的加工路径;
3.3、设置定位方向:当该区域向正方向延伸时为1,而向负方向延伸时为-1;
3.4、设置区域间距:设置区域间进行隔离和重叠时的移动距离,其中区域间距可为负值,代表两个区域相交。
步骤4,参照图2的分区处理,主要包括:
4.1、在读取数据链后,要对文件数据信息进行提取,获取分区所需的基准点、区域各方向大小、偏移量等,并结合设置的参数确定区域边界,确定方法为:
左边界=基准点X方向坐标+X定位方向×X方向区域间距;
右边界=基准点X方向坐标+X定位方向×X方向区域间距+X方向分区大小;
上边界=基准点Y方向坐标+Y定位方向×Y方向区域间距,;
下边界=基准点Y方向坐标+Y定位方向×Y方向区域间距+Y方向分区大小;
4.2、依每个区域为对象对整个文件进行扫描,求得该区域与所有线段的交点,其中,需要遍历整个CArray数组,寻找该区域包含的所有线段,在寻找过程中要根据线段的线形分别进行处理:
a、当线段为直线时,通过计算直线到区域的最短距离,判断直线与区域是否有交点:如果存在交点,则通过直线的斜率k,列出直线的点斜式方程:y-y1=k(x-x1),其中,(x1,y1)为直线上某一定点;进而求出区域各边界与直线的交点,并求得直线与区域交集,得出直线在区域内的部分;其中,当斜率k不存在时直线为垂线,需要单独处理;
b、当线段为圆弧时,调用VC++的坐标转换函数,求出圆弧的圆心坐标和起止角,通过计算圆弧与区域边界的最大最小距离和圆心所在的位置,确定圆弧和区域是否存在交点:如果存在交点,则假设圆弧为整个圆时与区域的交集;再求出圆弧与该交集的交集,从而得到圆弧在区域内的部分;
4.3、求出该区域包含的所有线段后,将这些线段保存于新建的CArray数组中,同时将该数组的地址和索引号存储于CMap中,当分区完成时,CMap中保存了所有区域的索引号和该区域对应数组的地址;
4.4、最后要对各个区域进行弹性重组:对各个区域进行隔离,并重叠、错位相邻两个区域不加工的部分。
参照图3的实施例,图3.1为要加工的原始文件,其中,各三角形区域代表需要加工的区域,经过本发明的分区处理后,将每个加工区域隔离,生成的文件如图3.2所示,根据其特征进行数据区域重组后,重叠、错位不加工区域,得到结果如图3.3所示。
步骤5,在各个区域处理完毕后,最后要进行图像及状态输出:本分区方法中,存在直线和圆弧建立不同的类,由于两者之间又存在着共性,故建立了用于包含其共性的元素类,再从元素类里派生出直线类和圆弧类用于包含其各自的特性;由于系统是多线程分时操作,在分区的同时需要进行数据的保存和图象的输出,故需要建立专门的线程监控分区状态;图象显示是在视图类中完成,将视图分成三部分,分别用于显示分区前后的整体图形和当前区域图形;最后进行数据存盘。