BMP格式文件转换NC代码的研究

2017-09-20 03:13魏胜利徐书蕾
现代计算机 2017年22期
关键词:调色板字节代码

魏胜利,徐书蕾

(安阳工学院计算机科学与信息工程学院,安阳455000)

BMP格式文件转换NC代码的研究

魏胜利,徐书蕾

(安阳工学院计算机科学与信息工程学院,安阳455000)

在数控系统和3D打印系统中,需要将图形文件转换为NC代码。提出一种将BMP(Bitmap)格式的图形文件转换为NC代码的方法。图形文件以BMP格式保存,在操作时创建一个临时文件,对绘画的图形实时保存,再利用功能函数读取图形文件的信息,生成一个NC代码。以VC6.0为开发平台,以C、C++语言为主要编程语言,实现该转换系统。

BMP格式文件;位图;NC代码;NC系统;3D打印

0 引言

多数情况下,数控机床以及3D打印机的运行离不开命令的控制,NC代码作为其中的一种命令广泛应用于这些平台上。在数字化制造的今天,数控机床和3D打印机都需要根据三维造型数据进行路径规划获取打印路径。然后根据这些路径使用NC代码编程以驱动机床和3D打印机。然而直接使用NC代码对图形图像直接编程不仅代码量大而且编程较为繁杂,效率达不到我们所预期的效果。基于此,提出了一种将图形文件直接转换为NC代码的方法并实现了它。首先将图形文件以BMP格式进行存储,然后通过算法将图形文件转换成NC代码,这样在很大程度上提高了数控的编程效率。

1 BMP格式解析

要想实现利用BMP格式文件转换NC代码,首先要充分了解BMP格式,理解BMP格式中的数据结构。BMP格式图像文件是基于DIB(设备无关位图文件)文件,代码实现过程中需要对其格式进行解析,以便于图像文件的生成、打开及保存。由于MFC未提供现成的类来封装DIB,因此需要自己进行类的设计。BMP文件分为4部分:有关位图文件属性的文件头(BITMAPFILEHEADER)、有关位图信息头的(BIT⁃MAPINFOHEADER)、调色板以及位图的图像数据[1]。BMP文件结构如图1所示:

图1 BMP文件结构

在位图文件结构中,位图文件头(BITMAPFILE⁃HEADER)数据结构定义了位图的图像类型、图像大小、图像数据存放地址和两个保留未使用的字段,它们的字段大小分别为2、4、2、2、2字节,其主要是标注位图的属性。位图信息头(BITMAPINFOHEADER)数据结构主要定义了位图信息头的大小、图像的宽高、图像的色深、压缩说明图像数据的大小等信息。其中位图信息头的字段大小为4字节,根据不同的操作系统而不同。在Windows中,此字段的值总为40字节,位图宽度和高度的字段大小都为4字节。在位图图像的单位中,宽度的单位为像素,而高度则为0,图像数据大小字段的大小为4字节,而图像数据大小必须为4的倍数。图像数据大小不是4的倍数时用0填充补足。颜色表(color table)是单色、16色和256色图像文件所特有的,相对应的调色板大小是2、16和256。调色板以4字节为单位,每4个字节存放一个颜色值,图像的数据是指向调色板的索引,例如图像数据03 00 11 FF表示调用调色板[3]、调色板[0]、调色板[17]和调色板[255]中的数据来显示图像颜色。

2 NC代码分析

NC代码是数字控制器所能识别并运行的代码总称,使用的平台不同,代码也就不同。我们所研究的是G代码,其分为“模态代码”和“一般代码”。“模态代码”的功能在它被执行后会继续维持,“一般代码”则仅仅在收到该命令时起作用,像直线、圆弧之类的代码称为“模态代码”,原点返回等代码称为“一般代码”[2]。

本文中所论述的NC代码中所包含的命令有M代码、G代码。我们所研究的是基于直线插补的NC代码段的研究,所涉及的命令及解释如下所示:

(1)M代码用于数控设备的辅助装置的开关及动作。如

M02:程序停止

M03:主轴顺时针旋转

(2)G代码用于建立数控系统工作的一种指令。如:

G00:快速移动点定位

G01:直线插补

G90:绝对值编程

G92:螺纹切削循环

(3)F代码用于主轴刀具的进给速度,通常以每分钟进给量设置数据。

(4)S代码用于指定主轴转速。

(5)T代码用于指定刀具编号。

(6)N代码表示程序段序号,当以一段程序用N1标识时,往后依次间隔1的方法设置程序段号。

3 NC代码生成

目前,NC代码可以采用手动编写,也可以用CAM软件自动生成[3]。本系统本质上是基于图形NC代码自动转换和生成。我们开发完成了将基于BMP格式的图形文件转换为NC代码的系统。系统采用VC++ 6.0为开发平台,采用C、C++语言相结合的方式对系统进行开发。NC代码转换的流程图2所示:

图2 NC代码转换的流程图

在这一过程中,最为关键的是实现对位图图像文件信息的读取以及生成所需要的NC代码。了解位图图像文件的数据构造,怎么索引关键数据信息是最重要的。在初始化变量时,根据NC代码数据结构只需要X、Y坐标的实际大小(比例),所需要机器下刀数据大小值以及位图的头信息。位图头信息的作用是建立索引,读取位图信息。具体实施步骤如下:

(1)定义一个CSize类型的函数来获取位图的宽和高的数据大小,以像素为单位。通过LPtoDP()和DP⁃toLP()两个函数实现将设备坐标转换为逻辑坐标,同时设置实际的长度和显示的长度的比值。

(2)利用DIBWidth()、DIBHeight()、BytesPerLine()分别获取图像宽度字节数、高度字节数以及图像每行字节数,以便于用循环实现信息读取及代码转功能的实现。

(3)通过FindDIBBits()函数实现BMP图像像素起始位置并返回指向BMP像素指针。通过像素指针、像素高度、宽度及每行的字节数实现逐行对图像信息的读取。在以起始点为搜索端的基础上,判断这个像素点周围是否存在其他的像素点。存在或不存在都以一个像素为单位进行步进,将像素点的坐标值赋值给X、Y。通过设定的实际长度和显示比例的比值关系将X、Y的坐标值以NC代码格式存储在字符串中,依次循环。当读取到孤立点时,将孤立点的坐标值以G00的格式存储,实现快速移动到下一个坐标点。

(4)最后是对NC代码的完善,设定刀具的转速值、代码开始标识以及代码终止标识,实现NC代码规范化。

4 测试结果

为测试方法和转换系统的有效性,设计一个矩形的图形。通过转换,将其转换成NC代码。在雕刻机平台上的运行NC代码,得出了比较满意的结果。设计的图形和转换的NC代码如图3和图4所示。

图3 待转换的矩形图形

图4 提取的NC代码

一般情况下,NC代码是相对独立的,读取NC代码时逐行读取,所以储存时也是采取逐行存储的模式[4]。为了验证NC代码的准确性,采用了固高科技的三轴雕刻机来进行测试。测试的结果如图5所示。从图中可以看出,所获取的NC代码有效的复原了设计的图形。

在系统运行时,通过专用的电缆连接输入、输出接口、步进电机驱动、实时状态显示、系统操作与各伺服单元和I/O单元的连接,在X、Y轴方向上采用直线电机直接驱动,Z轴方向采用伺服电机加滚珠丝杠的方式驱动[2]。而在数据信息进行传输前需要对NC代码进行信息检错,NC源代码将信息传递给NC代码解释器,如果遇到错误代码则出现反馈信息,如果没有代码错误,则将NC代码转换为雕刻机控制参数[5]。从对刀原点到矩形的左下角用G00代码实现快速移动定位,将刀具移动到转换NC代码时存储的第一个BMP图像像素点,即X:7.906/Y:25.037(通过比例对换过的数据),而此过程中始终是没有下刀的,到达矩形左下角的定位点,刀具下刀,实现顺时针移动,最后移动到原来的定位点。刀具的移动顺序跟NC代码生成过程遍历图像像素点的顺序一样,这就是刀具顺时针移动的原因。

图5 测试结果图

5 结语

在3D打印系统中,通常需要根据层面的信息规划打印的路径,而层面信息通常以图形的形式存在,研究设计能够根据图形信息提取NC代码的系统很有意义。本文主要论述了基于BMP格式的NC代码转换,通过在实验机器上的测试结果分析得知,系统对BMP格式图像的信息处理符合要求。

在未来,数控技术会有广泛的应用,3D打印技术、雕刻机等慢慢如融到我们的生活中。能够将图形转换为NC代码有着广阔的应用前景。只需一张BMP格式的文件,就可以把图像刻在木制家具上或者打印出来。通过技术的不断更新,未来实现在三维图形中提取NC代码将会是突破性的发展。

参考考献:

[1]宋叶未,叶建芳.BMP格式位图文件的分析及显示算法[J].现代电子技术,2011(20):5-7.

[2]张学飞,李健.开放式数控系统G代码的编译模块设计[J].机械设计与制造,2010(10):14-17.

[3]张宗,健张吉,堂张鹏.数控机床超声检测附件NC代码提取技术[J].机械设计与制造,2015(11):152-155.

[4]高静,远张鹏,周金瑞.基于VC的开放式数控系统NC代码解释器及扩展功能的设计及实现[J].机床与液压,2012(13):118-120.

[5]张庆,姚锡凡.一种开放式数控系统NC代码编译器设计与实现[J].组合机床与自动化加工技术,2010(2):59-61.

Research on the Conversion from BMP Image to NC Code

WEISheng-li,XUShu-lei
(CollegeofComputer Scienceand Information Engineering,Anyang Instituteof Technology,Anyang 455000)

In NC and 3D printing system,conversion from graphic files to NC codemay be needed.Presentsamethod to transform BMP(Bitmap)files to NC code.A graphic file is saved with BMP format.When the file needs to bemodified,a temporary file will be created to save the changed file timely.When necessary,performance function is used to read the information of the graphic files to generate NC code.Then developsa transform system with VC6.0 platform and Cand C++language.

魏胜利(1974-),男,河南滑县人,讲师,硕士研究生,研究方向为计算机控制、计算机图形

2017-07-25

2016年河南省科技攻关计划项目(No.162102210130)

1007-1423(2017)22-0053-04

10.3969/j.issn.1007-1423.2017.22.014

BMPFormat;NCCode;Temporary File;NCSystem;3DPrinting

猜你喜欢
调色板字节代码
大自然的调色板——张掖七彩丹霞
Film review:WALL·E
No.8 字节跳动将推出独立出口电商APP
大地调色板
No.10 “字节跳动手机”要来了?
创世代码
创世代码
创世代码
创世代码
轻量级分组密码Midori64的积分攻击