亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于BOOST庫的數(shù)控NC代碼宏程序編譯器

        2010-10-18 14:31:46林礪宗宋啟盛王啟春
        制造技術(shù)與機床 2010年8期

        林礪宗 宋啟盛 林 森 王啟春

        (華東理工大學(xué)機械與動力工程學(xué)院,上海200237)

        宏程序是現(xiàn)代數(shù)控系統(tǒng)重要的標(biāo)志之一。宏的出現(xiàn)使數(shù)控系統(tǒng)的二次開發(fā)成為可能。只要通過對變量的修改,便能實現(xiàn)對同一類零件,不同規(guī)格尺寸的加工。大大提高了程序復(fù)用率,簡化了實際加工操作。

        因此能支持宏程序的編譯器,已成為任何數(shù)控系統(tǒng)的首要基礎(chǔ)。本文用的方法相對而言較直觀,比起專業(yè)的編譯器實現(xiàn)要更簡單,并具有較高的效率。

        1 BOOST的概述

        一般制作編譯器有用 VC直接開發(fā)的,但是VC6.0本身不支持正則表達(dá)式,因而開發(fā)起來代碼量大,且編譯器運行速度慢;有用VC和微軟開發(fā)正則表達(dá)式GRETA代碼編寫的[1],雖然有正則表達(dá)式能簡化編程,但 GRETA功能有限;還有用專業(yè)編譯器LEX&YACC[2],老版本已經(jīng)很難找到,而新版本是付費軟件,由于版權(quán)原因,投入商業(yè)開發(fā)會有版權(quán)問題。

        本文選用開放式源代碼庫BOOST,除了版權(quán)免費以外,其還包含了正則表達(dá)式及迭代等算法,方便快速編程,且效率高,能較好實現(xiàn)G代碼及宏代碼的編譯。

        BOOST主要包含以下幾個大類:字符串及文本處理、容器、迭代子(Iterator)、算法、函數(shù)對象和高階編程、泛型編程、模板元編程、預(yù)處理元編程、并發(fā)編程、數(shù)學(xué)相關(guān)、糾錯和測試、數(shù)據(jù)結(jié)構(gòu)、輸入/輸出、跨語言支持、內(nèi)存相關(guān)、語法分析、雜項。具有很強大的功能。

        2 G代碼和宏代碼的處理

        譯碼系統(tǒng)主要是識別G、M、T、S等代碼,并進(jìn)行詞義、語義的分析[3]。分析完之后把相關(guān)參數(shù)存入代碼數(shù)據(jù)庫中的NC代碼表,如表1所示,為以后運行做準(zhǔn)備。通常的做法是在程序中開辟程序緩沖區(qū),定義一個結(jié)構(gòu)體,把代碼的相關(guān)信息存入結(jié)構(gòu)體中[1]。這樣可以加快編譯速度。但對于突然斷電等情況,內(nèi)存中的數(shù)據(jù)會突然丟失,且占用內(nèi)存較大。而現(xiàn)在的計算機的運行速度,每年都能大幅度提高,因此決定放棄部分運行速度來提高系統(tǒng)的可靠性,把代碼存入數(shù)據(jù)表中。這樣,即使未存盤,也不會丟失數(shù)據(jù)。并且所占用的內(nèi)存相對較少。其較系統(tǒng)自動存盤功能的編寫更簡單。

        表1 代碼數(shù)據(jù)庫NC代碼表

        2.1 代碼數(shù)據(jù)庫的格式

        代碼數(shù)據(jù)庫結(jié)構(gòu)的組成結(jié)構(gòu)圖,如圖1所示。

        NC 代碼表存放功能字、X、Y、Z、U、V、W、S、T,平面信息,相對、絕對坐標(biāo),刀號及公英制信息。

        宏代碼表存放宏變量。系統(tǒng)共建立了100個局部變量,其作用域只存在當(dāng)前的程序中,編號為#0-#99存儲在數(shù)組中。并有100個全局變量,其存儲一些相關(guān)的比較重要的系統(tǒng)參數(shù)及自定義函數(shù),其針對所有的宏程序,它存儲在宏代碼表中其編號為#100-#199。

        2.2 譯碼系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)

        (1)譯碼器所定義的關(guān)鍵字及符號

        (2)G代碼數(shù)據(jù)結(jié)構(gòu)的定義

        3 譯碼的總流程(圖2)

        譯碼器首先讀入的代碼,根據(jù)判斷符串里是否包含#、IF、WHILE、SIN、GE 等一些代表變量,控制語句,三角函數(shù),邏輯判定函數(shù)等來區(qū)分是否是宏代碼。

        若是宏代碼,則做一些相關(guān)的操作:

        (1)變量的替換

        在推進(jìn)地下水超采治理試點工作中,始終牢牢把握五條基本原則:一是政府引導(dǎo)、全民行動,發(fā)揮好政府和群眾兩個積極性;二是規(guī)劃統(tǒng)領(lǐng)、科學(xué)治理,年度實施方案與中長期規(guī)劃有機銜接,集中連片規(guī)模實施,務(wù)求治理一片、見效一片、鞏固一片;三是創(chuàng)新機制、示范帶動,探索建立地下水超采治理的有效途徑,力求取得可示范、可復(fù)制、可推廣的經(jīng)驗;四是因地制宜、積極穩(wěn)妥,根據(jù)實際情況,科學(xué)確定治理模式和工程規(guī)模;五是競爭立項、績效考核,依據(jù)項目前期工作和壓采效果擇優(yōu)實施,嚴(yán)格把關(guān)、嚴(yán)格獎懲。

        當(dāng)碰到的是賦值語句時,如#3=10,#100=25.6,首先讀取變量號,當(dāng)變量號是0-99時,此時代表局部變量,則把值存入內(nèi)存中開辟的數(shù)組中,供當(dāng)前程序調(diào)用;若變量號是100-199時,則直接把數(shù)據(jù)存入宏變量數(shù)據(jù)庫中,供所有程序調(diào)用。

        當(dāng)存在含變量的代碼時,如G01 X#3 Y#100,則分別根據(jù)變量從內(nèi)存數(shù)組和宏變量數(shù)據(jù)庫中讀出變量值,并替換原來的變量名,即變?yōu)镚01 X10 Y25.6。

        (2)數(shù)值的計算

        當(dāng)遇到是變量的三角函數(shù)或變量的四則運算時,由于VC6.0本身不具備文本運算功能,即輸入文本型的數(shù)字,并能計算這些“數(shù)字”之間的四則運算,于是調(diào)用JAVA中的一個腳本控件msscript.ocx,這樣能方便的達(dá)到目的。

        使用此控件時,只要在expression中定義要計算的文本字符串,如“3+45.6*3+3/2”,就能很方便的得出結(jié)果。

        由于此控件只能針對四則運算,對于三角函數(shù)等一些函數(shù)的處理則不同。以“SIN[#2+1]”為例,首先判定字符串中有字串“SIN”,再提取“[]”中的內(nèi)容,如果有變量,則先進(jìn)行變量的替換,然后用控件msscript.ocx計算出“#2+1”的值,最后把文本值轉(zhuǎn)成浮點數(shù)值,用VC自帶的SIN函數(shù)運算即可得出結(jié)果。

        (3)語法分析和錯誤處理

        語法的正則表達(dá)式的定義如下所示,用正則表達(dá)式定義了G代碼能識別的所有關(guān)鍵字,及每個關(guān)鍵字后的數(shù)值的類型,一旦出現(xiàn)不能識別的關(guān)鍵字或數(shù)值類型與定義不符,如刀號T后跟帶有小數(shù)點的數(shù)值,則正則表達(dá)式判別不能通過,并報錯。

        “ *”表示X之前空格可以出現(xiàn)無數(shù)次,也可以不出現(xiàn),即忽略空格?!埃踃|x]”表示匹配大寫X或小寫x,即忽略大小寫;“?”表示關(guān)鍵字X可以不出現(xiàn),但最多出現(xiàn)1次,超過則不能通過正則判定報語法錯誤。(( -{0,1}\d+)( \.\d+)?)?表示數(shù)值可以是一個帶有符號的浮點數(shù)或整數(shù)。

        若能通過上述正則表達(dá)式,則提取相關(guān)的參數(shù)。以X為例:

        除用正則表達(dá)式評定語法法則外,根據(jù)代碼分類,判定指令之間有沒有沖突:

        在讀入G代碼時,根據(jù)讀入的G代碼功能字(如表2),先分組然后根據(jù)同一行G代碼中出現(xiàn)的功能字,是不是在同一組來判定,代碼之間會不會有沖突。

        表2 主要G代碼功能分類

        4 子程序調(diào)用

        運行時首先確認(rèn)是否要調(diào)用子程序,若要調(diào)用子程序則需要先記下當(dāng)前執(zhí)行程序所在的位置及一些相關(guān)局部變量等一些斷點的信息,然后跳轉(zhuǎn)到子程序上;當(dāng)調(diào)用完畢后恢復(fù)所保存的相關(guān)信息,并回到調(diào)用子程序所在位置的下一條指令上(圖3)。

        5 分支和循環(huán)語句的處理

        宏程序中支持的分支語句有 IF[條件為真]THEN,IF[條件為真]GOTOn(行號)。循環(huán)主要有WHILE[條件]Don(循環(huán)體編號)。條件的判斷,依然采用先前的JAVA的腳本控件msscript.ocx和正則表達(dá)式。操作時先用相應(yīng)的變量值把[]中的變量替換掉,使之成為只有數(shù)字和不等式符號的表達(dá)式,然后用正則表達(dá)式提?。郏葜械谋磉_(dá)式:

        而后使用控件msscript.ocx,其支持不等式的判斷。使用方法與前面不等式計算的方法一樣,只是在expression中用不等式表達(dá)式即可。為真時返回-1,為假時返回0。流程如圖4所示。

        6 宏代碼的執(zhí)行情況

        運用宏程序編寫了一個走橢圓軌跡的代碼:

        并在數(shù)控平臺上運行,運行情況如圖5所示。

        7 結(jié)語

        對于宏程序的編譯器而言,由于可以進(jìn)行二次開發(fā),具有很好的前景。本文采用了BOOST庫和JAVA腳本控件制作宏代碼編譯器,可以方便有效地做出帶有分支、循環(huán)語句的編譯器,具有較高的效率。

        [1]任松濤,秦現(xiàn)生,白晶.NC代碼解釋器的開發(fā)[J].中國制造業(yè)信息化.2007(5):54-57.

        [2]伍抗逆,李斌,陳吉宏.面向開放式數(shù)控系統(tǒng)平臺的NC代碼解釋器的開發(fā)[J].中國機械工程.2006(2):168-171.

        [3]Andrew Watt.Beginning Regular Expressions.北京:清華大學(xué)出版社,2008.

        [4]林峰.機床開放式數(shù)控系統(tǒng)的研究[D].杭州:浙江工業(yè)大學(xué),2004(5):1-3.

        [4]易紅.數(shù)控技術(shù)[M].北京:機械工業(yè)出版社,2005.

        [6]任玉田,包杰,等.新編機床數(shù)控技術(shù)[M].北京:北京理工大學(xué)出版社,2005.

        [7]秦旭,盛亮,廖文和,等.基于組件NC代碼轉(zhuǎn)換關(guān)鍵技術(shù)的研究[J].電氣技術(shù)與自動化,2004(33):60-64.

        性刺激的大陆三级视频| 成年女人18毛片毛片免费| 国产一区二区三区特黄| 国产一区二区三区不卡在线观看| 亚洲乱亚洲乱妇无码麻豆| 国产高清乱理伦片| 无码国产精品第100页| 人妻风韵犹存av中文字幕| 人妖一区二区三区在线| 亚洲av永久无码天堂网小说区| 永久免费av无码网站yy| 制服丝袜视频国产一区| 久久精品亚洲国产成人av| 亚洲国产女性内射第一区二区 | 久久精品国产精品亚洲艾| 色综合久久中文字幕综合网| 亚洲精品一区国产欧美| 最新国产日韩AV线| 国产内射视频在线播放| 成h视频在线观看免费| 精品九九人人做人人爱| 国产999精品久久久久久| аⅴ天堂一区视频在线观看| 天堂av国产一区二区熟女人妻| 日日碰日日摸日日澡视频播放| 毛片亚洲av无码精品国产午夜| 在线免费观看韩国a视频| 91在线观看国产自拍| 日本一区二区三区人妻| 又大又粗又爽18禁免费看| 亚洲天堂99| 国内精品人人妻少妇视频| 蜜桃a人妻精品一区二区三区| 国产啪亚洲国产精品无码| 中文字幕一区二区三区久久网站| 视频女同久久久一区二区三区| 国产免费人成视频在线| 国产一区内射最近更新| 亚洲香蕉视频| 日本女优中文字幕四季视频网站| 华人免费网站在线观看|