魏勝利,徐書蕾
(安陽工學院計算機科學與信息工程學院,安陽455000)
BMP格式文件轉換NC代碼的研究
魏勝利,徐書蕾
(安陽工學院計算機科學與信息工程學院,安陽455000)
在數(shù)控系統(tǒng)和3D打印系統(tǒng)中,需要將圖形文件轉換為NC代碼。提出一種將BMP(Bitmap)格式的圖形文件轉換為NC代碼的方法。圖形文件以BMP格式保存,在操作時創(chuàng)建一個臨時文件,對繪畫的圖形實時保存,再利用功能函數(shù)讀取圖形文件的信息,生成一個NC代碼。以VC6.0為開發(fā)平臺,以C、C++語言為主要編程語言,實現(xiàn)該轉換系統(tǒng)。
BMP格式文件;位圖;NC代碼;NC系統(tǒng);3D打印
多數(shù)情況下,數(shù)控機床以及3D打印機的運行離不開命令的控制,NC代碼作為其中的一種命令廣泛應用于這些平臺上。在數(shù)字化制造的今天,數(shù)控機床和3D打印機都需要根據(jù)三維造型數(shù)據(jù)進行路徑規(guī)劃獲取打印路徑。然后根據(jù)這些路徑使用NC代碼編程以驅動機床和3D打印機。然而直接使用NC代碼對圖形圖像直接編程不僅代碼量大而且編程較為繁雜,效率達不到我們所預期的效果。基于此,提出了一種將圖形文件直接轉換為NC代碼的方法并實現(xiàn)了它。首先將圖形文件以BMP格式進行存儲,然后通過算法將圖形文件轉換成NC代碼,這樣在很大程度上提高了數(shù)控的編程效率。
要想實現(xiàn)利用BMP格式文件轉換NC代碼,首先要充分了解BMP格式,理解BMP格式中的數(shù)據(jù)結構。BMP格式圖像文件是基于DIB(設備無關位圖文件)文件,代碼實現(xiàn)過程中需要對其格式進行解析,以便于圖像文件的生成、打開及保存。由于MFC未提供現(xiàn)成的類來封裝DIB,因此需要自己進行類的設計。BMP文件分為4部分:有關位圖文件屬性的文件頭(BITMAPFILEHEADER)、有關位圖信息頭的(BIT?MAPINFOHEADER)、調色板以及位圖的圖像數(shù)據(jù)[1]。BMP文件結構如圖1所示:
圖1 BMP文件結構
在位圖文件結構中,位圖文件頭(BITMAPFILE?HEADER)數(shù)據(jù)結構定義了位圖的圖像類型、圖像大小、圖像數(shù)據(jù)存放地址和兩個保留未使用的字段,它們的字段大小分別為2、4、2、2、2字節(jié),其主要是標注位圖的屬性。位圖信息頭(BITMAPINFOHEADER)數(shù)據(jù)結構主要定義了位圖信息頭的大小、圖像的寬高、圖像的色深、壓縮說明圖像數(shù)據(jù)的大小等信息。其中位圖信息頭的字段大小為4字節(jié),根據(jù)不同的操作系統(tǒng)而不同。在Windows中,此字段的值總為40字節(jié),位圖寬度和高度的字段大小都為4字節(jié)。在位圖圖像的單位中,寬度的單位為像素,而高度則為0,圖像數(shù)據(jù)大小字段的大小為4字節(jié),而圖像數(shù)據(jù)大小必須為4的倍數(shù)。圖像數(shù)據(jù)大小不是4的倍數(shù)時用0填充補足。顏色表(color table)是單色、16色和256色圖像文件所特有的,相對應的調色板大小是2、16和256。調色板以4字節(jié)為單位,每4個字節(jié)存放一個顏色值,圖像的數(shù)據(jù)是指向調色板的索引,例如圖像數(shù)據(jù)03 00 11 FF表示調用調色板[3]、調色板[0]、調色板[17]和調色板[255]中的數(shù)據(jù)來顯示圖像顏色。
NC代碼是數(shù)字控制器所能識別并運行的代碼總稱,使用的平臺不同,代碼也就不同。我們所研究的是G代碼,其分為“模態(tài)代碼”和“一般代碼”。“模態(tài)代碼”的功能在它被執(zhí)行后會繼續(xù)維持,“一般代碼”則僅僅在收到該命令時起作用,像直線、圓弧之類的代碼稱為“模態(tài)代碼”,原點返回等代碼稱為“一般代碼”[2]。
本文中所論述的NC代碼中所包含的命令有M代碼、G代碼。我們所研究的是基于直線插補的NC代碼段的研究,所涉及的命令及解釋如下所示:
(1)M代碼用于數(shù)控設備的輔助裝置的開關及動作。如
M02:程序停止
M03:主軸順時針旋轉
(2)G代碼用于建立數(shù)控系統(tǒng)工作的一種指令。如:
G00:快速移動點定位
G01:直線插補
G90:絕對值編程
G92:螺紋切削循環(huán)
(3)F代碼用于主軸刀具的進給速度,通常以每分鐘進給量設置數(shù)據(jù)。
(4)S代碼用于指定主軸轉速。
(5)T代碼用于指定刀具編號。
(6)N代碼表示程序段序號,當以一段程序用N1標識時,往后依次間隔1的方法設置程序段號。
目前,NC代碼可以采用手動編寫,也可以用CAM軟件自動生成[3]。本系統(tǒng)本質上是基于圖形NC代碼自動轉換和生成。我們開發(fā)完成了將基于BMP格式的圖形文件轉換為NC代碼的系統(tǒng)。系統(tǒng)采用VC++ 6.0為開發(fā)平臺,采用C、C++語言相結合的方式對系統(tǒng)進行開發(fā)。NC代碼轉換的流程圖2所示:
圖2 NC代碼轉換的流程圖
在這一過程中,最為關鍵的是實現(xiàn)對位圖圖像文件信息的讀取以及生成所需要的NC代碼。了解位圖圖像文件的數(shù)據(jù)構造,怎么索引關鍵數(shù)據(jù)信息是最重要的。在初始化變量時,根據(jù)NC代碼數(shù)據(jù)結構只需要X、Y坐標的實際大?。ū壤枰獧C器下刀數(shù)據(jù)大小值以及位圖的頭信息。位圖頭信息的作用是建立索引,讀取位圖信息。具體實施步驟如下:
(1)定義一個CSize類型的函數(shù)來獲取位圖的寬和高的數(shù)據(jù)大小,以像素為單位。通過LPtoDP()和DP?toLP()兩個函數(shù)實現(xiàn)將設備坐標轉換為邏輯坐標,同時設置實際的長度和顯示的長度的比值。
(2)利用DIBWidth()、DIBHeight()、BytesPerLine()分別獲取圖像寬度字節(jié)數(shù)、高度字節(jié)數(shù)以及圖像每行字節(jié)數(shù),以便于用循環(huán)實現(xiàn)信息讀取及代碼轉功能的實現(xiàn)。
(3)通過FindDIBBits()函數(shù)實現(xiàn)BMP圖像像素起始位置并返回指向BMP像素指針。通過像素指針、像素高度、寬度及每行的字節(jié)數(shù)實現(xiàn)逐行對圖像信息的讀取。在以起始點為搜索端的基礎上,判斷這個像素點周圍是否存在其他的像素點。存在或不存在都以一個像素為單位進行步進,將像素點的坐標值賦值給X、Y。通過設定的實際長度和顯示比例的比值關系將X、Y的坐標值以NC代碼格式存儲在字符串中,依次循環(huán)。當讀取到孤立點時,將孤立點的坐標值以G00的格式存儲,實現(xiàn)快速移動到下一個坐標點。
(4)最后是對NC代碼的完善,設定刀具的轉速值、代碼開始標識以及代碼終止標識,實現(xiàn)NC代碼規(guī)范化。
為測試方法和轉換系統(tǒng)的有效性,設計一個矩形的圖形。通過轉換,將其轉換成NC代碼。在雕刻機平臺上的運行NC代碼,得出了比較滿意的結果。設計的圖形和轉換的NC代碼如圖3和圖4所示。
圖3 待轉換的矩形圖形
圖4 提取的NC代碼
一般情況下,NC代碼是相對獨立的,讀取NC代碼時逐行讀取,所以儲存時也是采取逐行存儲的模式[4]。為了驗證NC代碼的準確性,采用了固高科技的三軸雕刻機來進行測試。測試的結果如圖5所示。從圖中可以看出,所獲取的NC代碼有效的復原了設計的圖形。
在系統(tǒng)運行時,通過專用的電纜連接輸入、輸出接口、步進電機驅動、實時狀態(tài)顯示、系統(tǒng)操作與各伺服單元和I/O單元的連接,在X、Y軸方向上采用直線電機直接驅動,Z軸方向采用伺服電機加滾珠絲杠的方式驅動[2]。而在數(shù)據(jù)信息進行傳輸前需要對NC代碼進行信息檢錯,NC源代碼將信息傳遞給NC代碼解釋器,如果遇到錯誤代碼則出現(xiàn)反饋信息,如果沒有代碼錯誤,則將NC代碼轉換為雕刻機控制參數(shù)[5]。從對刀原點到矩形的左下角用G00代碼實現(xiàn)快速移動定位,將刀具移動到轉換NC代碼時存儲的第一個BMP圖像像素點,即X:7.906/Y:25.037(通過比例對換過的數(shù)據(jù)),而此過程中始終是沒有下刀的,到達矩形左下角的定位點,刀具下刀,實現(xiàn)順時針移動,最后移動到原來的定位點。刀具的移動順序跟NC代碼生成過程遍歷圖像像素點的順序一樣,這就是刀具順時針移動的原因。
圖5 測試結果圖
在3D打印系統(tǒng)中,通常需要根據(jù)層面的信息規(guī)劃打印的路徑,而層面信息通常以圖形的形式存在,研究設計能夠根據(jù)圖形信息提取NC代碼的系統(tǒng)很有意義。本文主要論述了基于BMP格式的NC代碼轉換,通過在實驗機器上的測試結果分析得知,系統(tǒng)對BMP格式圖像的信息處理符合要求。
在未來,數(shù)控技術會有廣泛的應用,3D打印技術、雕刻機等慢慢如融到我們的生活中。能夠將圖形轉換為NC代碼有著廣闊的應用前景。只需一張BMP格式的文件,就可以把圖像刻在木制家具上或者打印出來。通過技術的不斷更新,未來實現(xiàn)在三維圖形中提取NC代碼將會是突破性的發(fā)展。
參考考獻:
[1]宋葉未,葉建芳.BMP格式位圖文件的分析及顯示算法[J].現(xiàn)代電子技術,2011(20):5-7.
[2]張學飛,李健.開放式數(shù)控系統(tǒng)G代碼的編譯模塊設計[J].機械設計與制造,2010(10):14-17.
[3]張宗,健張吉,堂張鵬.數(shù)控機床超聲檢測附件NC代碼提取技術[J].機械設計與制造,2015(11):152-155.
[4]高靜,遠張鵬,周金瑞.基于VC的開放式數(shù)控系統(tǒng)NC代碼解釋器及擴展功能的設計及實現(xiàn)[J].機床與液壓,2012(13):118-120.
[5]張慶,姚錫凡.一種開放式數(shù)控系統(tǒng)NC代碼編譯器設計與實現(xiàn)[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