一種基于流程控制的運(yùn)動(dòng)控制代碼解析方法
【專利摘要】本發(fā)明公開了一種基于流程控制的運(yùn)動(dòng)控制代碼解析方法,該方法包括包括以下步驟:建立流程控制代碼表以及配對規(guī)則表;從當(dāng)前位置讀取一段NC代碼有效段到計(jì)算機(jī)內(nèi)存;對讀取到計(jì)算機(jī)內(nèi)存中的NC代碼有效段進(jìn)行分析判斷并做出處理:如果NC代碼有效段為一個(gè)流程控制段,轉(zhuǎn)入流程控制處理模塊進(jìn)行處理,流程控制處理模塊根據(jù)處理內(nèi)容修改當(dāng)前讀取位置;如果當(dāng)前NC代碼有效段存在錯(cuò)誤或讀取到結(jié)束符,則結(jié)束解析,否則轉(zhuǎn)入第二步繼續(xù)執(zhí)行。本發(fā)明方法涵蓋了無條件轉(zhuǎn)移流程、條件分支流程及循環(huán)流程的通用處理方法,具有很好的通用性?;诒痉椒ǖ慕馕銎骺蓱?yīng)用于任何加入流程控制類的運(yùn)動(dòng)控制代碼解析,具有很好的開放性和可拓展性。
【專利說明】一種基于流程控制的運(yùn)動(dòng)控制代碼解析方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及運(yùn)動(dòng)控制代碼解析方法,尤其涉及一種基于流程控制的運(yùn)動(dòng)控制代碼解析方法,屬于數(shù)控【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]數(shù)控加工是用數(shù)字信息控制機(jī)械設(shè)備運(yùn)動(dòng)而完成加工的方法,而數(shù)字信息存儲(chǔ)在數(shù)控加工程序中,因此,數(shù)控加工程序的性能及執(zhí)行效率將直接影響數(shù)控加工的質(zhì)量。數(shù)控加工程序的一種標(biāo)準(zhǔn)形式是NC代碼,即數(shù)控指令代碼。它是由定義了一定功能的字母附上數(shù)據(jù)后組合而成的,一般每條指令完成一個(gè)動(dòng)作,若干條指令按一定結(jié)構(gòu)構(gòu)成一段程序。在具體的數(shù)控加工程序中,一般使用各種準(zhǔn)備功能的G代碼和輔助功能的M代碼來描述加工過程的各種運(yùn)動(dòng)特征和操作。NC代碼作為數(shù)控加工程序的一種標(biāo)準(zhǔn)形式已經(jīng)得到了廣泛的應(yīng)用,但傳統(tǒng)的NC代碼在處理批量、復(fù)雜的加工時(shí)表現(xiàn)出代碼量龐大、效率低下、不靈活、不通用的缺點(diǎn)。隨著數(shù)控技術(shù)的發(fā)展,一些先進(jìn)的數(shù)控系統(tǒng)將計(jì)算機(jī)高級(jí)語言的一些流程設(shè)計(jì)方式引入到NC代碼中,比如EMC2的O指令、FANUC及SIEMENS的宏程序等,這些方式提高了數(shù)控程序的柔性。但目前這一類嵌入流程控制的程序欠缺一種通用的解析方法,給希望自己定制數(shù)控系統(tǒng)的用戶帶來不便。
[0003]中國發(fā)明專利“通用數(shù)控代碼解析方法”(申請?zhí)枮?00610161337.6)公開了一種通用數(shù)控代碼解析方法,但是沒有對流程擴(kuò)展類的數(shù)控代碼給出解析方案。王宇晗等人在文章“CNC系統(tǒng)用戶宏程序功能的譯碼實(shí)現(xiàn)”(《組合機(jī)床與自動(dòng)化加工技術(shù)》2004年第6期4-6頁)中提出的CNC系統(tǒng)用戶宏程序功能的譯碼實(shí)現(xiàn),但該方法僅針對FANUC系統(tǒng)的宏指令進(jìn)行了譯碼實(shí)現(xiàn),缺乏通用性。
[0004]另外,上述兩種解析方案都需要對程序代碼全部掃描一遍以數(shù)據(jù)鏈表形式存入內(nèi)存中以后,再進(jìn)行語義分析識(shí)別工作,這樣會(huì)降低執(zhí)行效率,也無法滿足即時(shí)執(zhí)行的要求(如用戶逐行輸入數(shù)控代碼并即時(shí)執(zhí)行);同時(shí),如果一個(gè)加工程序的有效數(shù)據(jù)量超過內(nèi)存容量,這類方法無法執(zhí)行。
【發(fā)明內(nèi)容】
[0005]本發(fā)明公開了一種基于流程控制的運(yùn)動(dòng)控制代碼解析方法,解決了對加入流程控制的運(yùn)動(dòng)控制代碼進(jìn)行解析的問題。
[0006]為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采取的技術(shù)方案是:
一種基于流程控制的運(yùn)動(dòng)控制代碼解析方法,包括以下步驟:
第一步:建立流程控制代碼表以及配對規(guī)則表,配對規(guī)則表指明流程控制碼的配對方案,由用戶根據(jù)需求自定義;
第二步:從當(dāng)前位置讀取一段NC代碼有效段到計(jì)算機(jī)內(nèi)存,有效段是一個(gè)NC代碼程序段或者在流程控制代碼表中能查到的字符段,程序段是NC代碼的一行語句,由一個(gè)或多個(gè)程序字組成; 第三步:對讀取到計(jì)算機(jī)內(nèi)存中的NC代碼有效段進(jìn)行分析判斷并做出處理:如果NC代碼有效段存在語法或詞法錯(cuò)誤,則轉(zhuǎn)入錯(cuò)誤處理模塊進(jìn)行處理;如果NC代碼有效段為一個(gè)流程控制段,則轉(zhuǎn)入流程控制處理模塊進(jìn)行處理,流程控制處理模塊根據(jù)處理內(nèi)容修改當(dāng)前讀取位置;如果NC代碼有效段不是一個(gè)流程控制段,則判斷當(dāng)前讀取模式是否為省略模式,如果當(dāng)前讀取模式為省略模式,則直接忽略,否則轉(zhuǎn)入普通NC代碼處理模塊進(jìn)行處理并輸出處理結(jié)果,完成后將當(dāng)前位置指向下一段起始處;
第四步:如果當(dāng)前NC代碼有效段存在錯(cuò)誤或讀取到結(jié)束符,則結(jié)束解析,否則轉(zhuǎn)入第二步繼續(xù)執(zhí)行。
[0007]所述流程控制處理模塊包括無條件轉(zhuǎn)移模塊、條件分支模塊和循環(huán)模塊。
[0008]所述無條件轉(zhuǎn)移模塊的工作方法為:分析流程控制段,獲取流程控制碼;如果流程控制碼是跳轉(zhuǎn)語句,則讀取跳轉(zhuǎn)標(biāo)簽,查找標(biāo)簽表,如果找到標(biāo)簽,則修改當(dāng)前讀取位置到該標(biāo)簽處,如果未找到標(biāo)簽,則將讀取模式改為省略模式,完成后將當(dāng)前位置指向下一段起始處;如果流程控制碼是標(biāo)簽語句,則將標(biāo)簽名稱和當(dāng)前位置記錄到標(biāo)簽表,將讀取模式設(shè)置為普通模式,完成后將當(dāng)前位置指向下一段起始處。
[0009]所述條件分支模塊的工作方法為:分析流程控制段,獲取流程控制碼;如果流程控制碼是條件開始語句,則讀取條件表達(dá)式并計(jì)算其值,若條件為真,則將讀取模式置為普通模式,否則為省略模式,完成后將當(dāng)前位置指向下一段起始處;如果流程控制碼是條件結(jié)束語句,則將讀取模式置為普通模式,完成后將當(dāng)前位置指向下一段起始處。
[0010]所述循環(huán)模塊的工作方法為:分析流程控制段,獲取流程控制碼;如果流程控制碼是循環(huán)開始語句,則讀取條件表達(dá)式并計(jì)算其值,若條件為真,則將讀取模式置為普通模式,否則為省略模式,記錄當(dāng)前循環(huán)起始位置,完成后將當(dāng)前位置指向下一段起始處;如果流程控制碼是循環(huán)結(jié)束語句,則判斷之前循環(huán)開始語句處的條件,如果條件為真,則將當(dāng)前讀取位置指向循環(huán)起始處,否則將讀取模式置為普通模式,完成后將當(dāng)前位置指向下一段起始處。
[0011]本發(fā)明的解析方法不用對數(shù)控程序進(jìn)行全部掃描一遍后再做語義分析,也不關(guān)心程序段來源,每獲取一個(gè)有效段就可以解析并完成配置或輸出結(jié)果,這在提高解析效率的同時(shí)也使得基于此方法的解析器在數(shù)控系統(tǒng)中具有更好的靈活性。本發(fā)明方法涵蓋了無條件轉(zhuǎn)移流程、條件分支流程及循環(huán)流程的通用處理方法,具有很好的通用性。本發(fā)明的解析方法采用可自由定制的“流程控制代碼表”及“流程控制代碼配對規(guī)則表”,這使得基于本方法的解析器可應(yīng)用于任何加入流程控制類的運(yùn)動(dòng)控制代碼解析,具有很好的開放性和可拓展性。
【專利附圖】
【附圖說明】
[0012]圖1是本發(fā)明方法的運(yùn)動(dòng)控制代碼解析流程圖。
[0013]圖2是“流程控制代碼表”和“流程控制代碼配對規(guī)則表”。
[0014]圖3是流程控制處理模塊中無條件轉(zhuǎn)移模塊的處理流程圖。
[0015]圖4是流程控制處理模塊中條件分支模塊的處理流程圖。
[0016]圖5是流程控制處理模塊中循環(huán)模塊的處理流程圖。
[0017]圖6是嵌入流程控制的運(yùn)動(dòng)控制示例代碼。
【具體實(shí)施方式】
[0018]下面結(jié)合附圖和【具體實(shí)施方式】,對本發(fā)明作進(jìn)一步詳細(xì)說明。
[0019]本發(fā)明處理的對象是嵌入流程控制的運(yùn)動(dòng)控制代碼,該代碼由兩部分組成:一是普通的NC代碼,二是完成邏輯控制的流程控制代碼。示例代碼如圖6所示,本發(fā)明的目的在于對這種代碼給出通用的解析方案。
[0020]本發(fā)明的流程控制代碼表以及配對規(guī)則表用于定制流程控制的特殊字符集。這些字符集是不同于普通標(biāo)準(zhǔn)數(shù)控代碼的一類進(jìn)行流程控制的代碼,當(dāng)程序解析到這些特殊字符集時(shí),根據(jù)規(guī)則進(jìn)行讀取位置的跳轉(zhuǎn),以達(dá)到邏輯控制的目的。
[0021]在綜合數(shù)控編程流程控制的基礎(chǔ)上,本發(fā)明所設(shè)計(jì)的流程控制代碼主要有三種類型:(1)無條件轉(zhuǎn)移類,(2)條件分支類,(3)循環(huán)類。每種類型以配對碼形式出現(xiàn)在數(shù)控程序中,非配對的結(jié)構(gòu)在數(shù)控程序中將視為錯(cuò)誤。用戶可自定義控制碼的字符集,只要所用字符不和標(biāo)準(zhǔn)NC代碼已有字符沖突。
[0022]一種基于流程控制的運(yùn)動(dòng)控制代碼解析方法,如圖1所示,依次執(zhí)行以下步驟: 第一步:建立流程控制代碼表以及配對規(guī)則表,如圖2所示。為避免與標(biāo)準(zhǔn)NC代碼已有字符定義沖突,所有流程控制碼以“0_”開頭。
[0023]第二步:當(dāng)前代碼讀取位置指向第O行開頭。
[0024]第三步:從當(dāng)前位置讀取一行NC代碼有效段到計(jì)算機(jī)內(nèi)存,進(jìn)行分析判斷,如果沒有錯(cuò)誤轉(zhuǎn)入流程控制處理模塊進(jìn)行處理。
[0025]第四步:如果當(dāng)前NC代碼有效段存在錯(cuò)誤或讀取到結(jié)束符,則結(jié)束解析,否則轉(zhuǎn)入第三步繼續(xù)執(zhí)行。
[0026]如果NC代碼有效段存在語法或詞法錯(cuò)誤,則轉(zhuǎn)入錯(cuò)誤處理模塊進(jìn)行處理;如果NC代碼有效段為一個(gè)流程控制段,如示例代碼中以“0_”開頭的行,則轉(zhuǎn)入流程控制處理模塊進(jìn)行處理,流程控制處理模塊根據(jù)處理內(nèi)容修改當(dāng)前讀取位置;如果NC代碼有效段不是一個(gè)流程控制段,如示例代碼中不以“0_ ”開頭的行,則判斷當(dāng)前讀取模式是否為省略模式,如果當(dāng)前讀取模式為省略模式,則直接忽略,否則轉(zhuǎn)入普通NC代碼處理模塊進(jìn)行處理并輸出處理結(jié)果,完成后將當(dāng)前位置指向下一段起始處。
[0027]流程控制處理模塊包括無條件轉(zhuǎn)移模塊、條件分支模塊和循環(huán)模塊。
[0028]所述流程控制無條件轉(zhuǎn)移模塊的工作方法為:分析流程控制段,獲取流程控制碼;如果流程控制碼是跳轉(zhuǎn)語句,如示例代碼中第I行的“0_G0T0”,則讀取跳轉(zhuǎn)標(biāo)簽“Start_10”,查找標(biāo)簽表,如果找到標(biāo)簽,則修改當(dāng)前讀取位置到該標(biāo)簽處,如果未找到標(biāo)簽,則將讀取模式改為省略模式,完成后將當(dāng)前位置指向下一段起始處;如果流程控制碼是標(biāo)簽語句,如示例代碼中第2行與第4行的“0_LABEL”,則將標(biāo)簽名稱和當(dāng)前位置記錄到標(biāo)簽表,比較跳轉(zhuǎn)標(biāo)簽,如果相同,將讀取模式改為普通模式,否則不改,完成后將當(dāng)前位置指向下一段起始處。
[0029]所述條件分支模塊的工作方法為:分析流程控制段,獲取流程控制碼;如果流程控制碼是條件開始語句,如示例代碼中第7行與第10行“0_IF”,則讀取條件表達(dá)式“[]”中的內(nèi)容,并計(jì)算其值,若條件為真,則將讀取模式置為普通模式,否則為省略模式,完成后將當(dāng)前位置指向下一段起始處;如果流程控制碼是條件結(jié)束語句,如示例代碼中第9行與第12行“0_ENDIF”,則將讀取模式置為普通模式,完成后將當(dāng)前位置指向下一段起始處。
[0030]所述循環(huán)模塊的工作方法為:分析流程控制段,獲取流程控制碼;如果流程控制碼是循環(huán)開始語句,如示例代碼中第6行的“0_WHILE”,則讀取條件表達(dá)式“[]”中的內(nèi)容,并計(jì)算其值,若條件為真,則將讀取模式置為普通模式,否則為省略模式,記錄當(dāng)前循環(huán)起始位置,完成后將當(dāng)前位置指向下一段起始處;如果流程控制碼是循環(huán)結(jié)束語句,如示例代碼中第14行0_ENDWHILE,則判斷之前循環(huán)開始語句處的條件,如果條件為真,則將當(dāng)前讀取位置指向循環(huán)起始處,否則將讀取模式置為普通模式,完成后將當(dāng)前位置指向下一段起始處。
[0031]通過以上的方法步驟,制定的解析器就可以完成嵌入流程控制的運(yùn)動(dòng)控制代碼的解析,輸出指令,控制機(jī)床按特定的規(guī)律運(yùn)動(dòng)。示例代碼將輸出XY平面步長為2的階梯型路徑插補(bǔ)控制,而普通的NC代碼至少需要1000行完成同樣的控制。
[0032]本發(fā)明中“流程控制代碼表”及“流程控制代碼配對規(guī)則表”可自由定制,使得基于它們的解析器可解析各類自定義符號(hào)的流程控制代碼;同時(shí),三種流程控制處理模塊涵蓋了所有流程控制的通用處理方案,使得基于這些模塊的解析器可以完成各種流程控制分析;最后,即讀即用的逐段掃描方式,使得采用本發(fā)明的解析器可以靈活的跳轉(zhuǎn)讀取位置,快速的輸出結(jié)果,且只占用極少量的計(jì)算機(jī)內(nèi)存資源。
【權(quán)利要求】
1.一種基于流程控制的運(yùn)動(dòng)控制代碼解析方法,其特征在于包括以下步驟: A.建立流程控制代碼表以及配對規(guī)則表,配對規(guī)則表指明流程控制碼的配對方案,由用戶根據(jù)需求自定義; B.從當(dāng)前位置讀取一段NC代碼有效段到計(jì)算機(jī)內(nèi)存,有效段是一個(gè)NC代碼程序段或者在流程控制代碼表中能查到的字符段; C.對讀取到計(jì)算機(jī)內(nèi)存中的NC代碼有效段進(jìn)行分析判斷并做出處理:如果NC代碼有效段存在語法或詞法錯(cuò)誤,則轉(zhuǎn)入錯(cuò)誤處理模塊進(jìn)行處理;如果NC代碼有效段為一個(gè)流程控制段,則轉(zhuǎn)入流程控制處理模塊進(jìn)行處理,流程控制處理模塊根據(jù)處理內(nèi)容修改當(dāng)前讀取位置;如果NC代碼有效段不是一個(gè)流程控制段,則判斷當(dāng)前讀取模式是否為省略模式,如果當(dāng)前讀取模式為省略模式,則直接忽略,否則轉(zhuǎn)入普通NC代碼處理模塊進(jìn)行處理并輸出處理結(jié)果,完成后將當(dāng)前位置指向下一段起始處; D.如果當(dāng)前NC代碼有效段存在錯(cuò)誤或讀取到結(jié)束符,則結(jié)束解析,否則轉(zhuǎn)入步驟B繼續(xù)執(zhí)行。
2.根據(jù)權(quán)利要求1所述的基于流程控制的運(yùn)動(dòng)控制代碼解析方法,其特征在于:所述流程控制處理模塊包括無條件轉(zhuǎn)移模塊、條件分支模塊和循環(huán)模塊。
3.根據(jù)權(quán)利要求2所述的基于流程控制的運(yùn)動(dòng)控制代碼解析方法,其特征在于:所述無條件轉(zhuǎn)移模塊的工作方法為:分析流程控制段,獲取流程控制碼;如果流程控制碼是跳轉(zhuǎn)語句,則讀取跳轉(zhuǎn)標(biāo)簽,查找標(biāo)簽表,如果找到標(biāo)簽,則修改當(dāng)前讀取位置到該標(biāo)簽處,如果未找到標(biāo)簽,則將讀取模式改為省略模式,完成后將當(dāng)前位置指向下一段起始處;如果流程控制碼是標(biāo)簽語句,則將標(biāo)簽名稱和當(dāng)前位置記錄到標(biāo)簽表,將讀取模式設(shè)置為普通模式,完成后將當(dāng)前位置指向下一段起始處。
4.根據(jù)權(quán)利要求2所述的基于流程控制的運(yùn)動(dòng)控制代碼解析方法,其特征在于:所述條件分支模塊的工作方法為:分析流程控制段,獲取流程控制碼;如果流程控制碼是條件開始語句,則讀取條件表達(dá)式并計(jì)算其值,若條件為真,則將讀取模式置為普通模式,否則為省略模式,完成后將當(dāng)前位置指向下一段起始處;如果流程控制碼是條件結(jié)束語句,則將讀取模式置為普通模式,完成后將當(dāng)前位置指向下一段起始處。
5.根據(jù)權(quán)利要求2所述的基于流程控制的運(yùn)動(dòng)控制代碼解析方法,其特征在于:所述循環(huán)模塊的工作方法為:分析流程控制段,獲取流程控制碼;如果流程控制碼是循環(huán)開始語句,則讀取條件表達(dá)式并計(jì)算其值,若條件為真,則將讀取模式置為普通模式,否則為省略模式,記錄當(dāng)前循環(huán)起始位置,完成后將當(dāng)前位置指向下一段起始處;如果流程控制碼是循環(huán)結(jié)束語句,則判斷之前循環(huán)開始語句處的條件,如果條件為真,則將當(dāng)前讀取位置指向循環(huán)起始處,否則將讀取模式置為普通模式,完成后將當(dāng)前位置指向下一段起始處。
【文檔編號(hào)】G05B19/4097GK104133421SQ201410374960
【公開日】2014年11月5日 申請日期:2014年8月1日 優(yōu)先權(quán)日:2014年8月1日
【發(fā)明者】曾俊涵, 王明昕, 馮日月, 夏正仙, 徐正華 申請人:南京埃斯頓自動(dòng)化股份有限公司, 南京埃斯頓自動(dòng)控制技術(shù)有限公司