宋 嘎,樊晨飛,葉佩青,
(1.山東職業(yè)學(xué)院 葉佩青專(zhuān)家工作室,濟(jì)南 250104;2.清華大學(xué) 機(jī)械工程系,北京 100084)
在數(shù)控機(jī)床調(diào)試及加工過(guò)程中,難免會(huì)遇到機(jī)床故障、刀具損壞或磨損、工件存在缺陷、加工參數(shù)不合適等情況,導(dǎo)致加工被迫中止,刀具需要沿原軌跡退出正在加工的工件表面,這就要求數(shù)控系統(tǒng)具備沿已加工軌跡回退功能,通常采用手輪操作回退;另外,在某些調(diào)試場(chǎng)合,操作人員采用手輪模擬程序前向、后退執(zhí)行,以簡(jiǎn)單檢測(cè)程序錯(cuò)誤[1-4]。FANUC 30i、Sinumerik 840D、Miyano ABX51/64等國(guó)際領(lǐng)先的數(shù)控系統(tǒng)均能在自動(dòng)加工過(guò)程中,無(wú)需執(zhí)行完當(dāng)前程序段,隨時(shí)切換到手輪模擬模式,操作手輪從當(dāng)前位置立即回退。上述數(shù)控系統(tǒng)的手輪回退功能類(lèi)似,只是對(duì)于M、S、T等輔助功能指令的處理方式有所不同。國(guó)內(nèi)數(shù)控系統(tǒng)大多也具備手輪回退功能,但對(duì)其實(shí)現(xiàn)機(jī)理的介紹比較少。手輪回退功能的實(shí)現(xiàn)存在兩個(gè)方面的問(wèn)題,一是對(duì)已加工的刀具軌跡數(shù)據(jù)進(jìn)行高效存儲(chǔ)和提取,二是對(duì)手輪回退的速度和方向進(jìn)行控制。對(duì)于刀具軌跡的存儲(chǔ),常偉杰[5]提出了在超聲振動(dòng)輔助電火花銑削加工中采用嵌套存儲(chǔ)的方式;陳智殷[6]在電加工專(zhuān)用數(shù)控系統(tǒng)中采用環(huán)形鏈表結(jié)構(gòu),其首末相連,沒(méi)有哨兵節(jié)點(diǎn);劉勇等[7]在三維微細(xì)電解銑削加工中采用雙向鏈表結(jié)構(gòu),其具有頭、尾兩個(gè)哨兵節(jié)點(diǎn)。根據(jù)不同數(shù)控系統(tǒng)加工要求的差別,研究人員主要采用以下兩種方法進(jìn)行刀具軌跡的回退,即按原加工軌跡回退[8],以及胡明華、張斌[9-10]提出的,應(yīng)用于切割機(jī)的任意路徑無(wú)限回退。
本文基于DSP開(kāi)發(fā)的數(shù)控系統(tǒng),完整闡述手輪回退功能的實(shí)現(xiàn)方案,對(duì)手輪回退在系統(tǒng)中的實(shí)現(xiàn)流程設(shè)計(jì)、軌跡存儲(chǔ)鏈表的設(shè)計(jì)、軌跡存儲(chǔ)隊(duì)列的實(shí)現(xiàn)、手輪速度控制、手輪方向控制等進(jìn)行重點(diǎn)研究,實(shí)現(xiàn)任意位置手輪沿刀具原軌跡的回退。最后,在QT軟件仿真環(huán)境和CCS硬件開(kāi)發(fā)平臺(tái)上驗(yàn)證該方案的有效性。
手輪回退功能在某國(guó)產(chǎn)數(shù)控系統(tǒng)上進(jìn)行開(kāi)發(fā),該數(shù)控系統(tǒng)采用 ARM+DSP的雙核結(jié)構(gòu)。其中,ARM 中的Linux系統(tǒng)為非實(shí)時(shí)部分,包括界面模塊、編譯模塊、通訊模塊;DSP為實(shí)時(shí)操作部分,包括 PLC實(shí)時(shí)模塊、運(yùn)動(dòng)控制模塊、板卡控制模塊。本文研究?jī)?nèi)容為在運(yùn)動(dòng)控制模塊中的手輪模擬子模塊中增加手輪回退功能,實(shí)現(xiàn)任意位置刀具軌跡的回退。主要依托于加工程序段軌跡的存儲(chǔ)和回退,程序段存儲(chǔ)在雙向鏈表中,通過(guò)訪問(wèn)其接口實(shí)現(xiàn)回退。
為了實(shí)現(xiàn)軌跡回退功能,在原有運(yùn)動(dòng)控制流程中,預(yù)先分配了一定的存儲(chǔ)空間,用于存儲(chǔ)已執(zhí)行過(guò)的程序段,使數(shù)控系統(tǒng)支持程序段軌跡回退功能,軌跡回退段數(shù)由存儲(chǔ)空間決定,其被稱(chēng)為軌跡存儲(chǔ)隊(duì)列,具體見(jiàn)圖1。
圖1 支持軌跡回退的運(yùn)動(dòng)控制流程
支持軌跡回退的運(yùn)動(dòng)控制流程需要利用軌跡存儲(chǔ)隊(duì)列動(dòng)態(tài)存儲(chǔ)已規(guī)劃軌跡程序段并可以實(shí)現(xiàn)軌跡的反向插補(bǔ)。系統(tǒng)自動(dòng)運(yùn)行時(shí),在進(jìn)行插補(bǔ)前,首先判斷軌跡方向是前進(jìn)或者后退,再判斷當(dāng)前程序段是否已執(zhí)行完。當(dāng)前程序段執(zhí)行完成時(shí),需要讀取新的程序段,此時(shí)新程序段有兩個(gè)來(lái)源,一個(gè)是規(guī)劃緩沖區(qū),一個(gè)是軌跡存儲(chǔ)隊(duì)列。如果是前進(jìn)方向,在前進(jìn)到程序段終點(diǎn)時(shí)同時(shí)也到達(dá)軌跡存儲(chǔ)隊(duì)列隊(duì)尾(軌跡存儲(chǔ)隊(duì)列中最大存儲(chǔ)位置),則從規(guī)劃緩存區(qū)中讀取下一個(gè)程序段,將其存入軌跡存儲(chǔ)隊(duì)列隊(duì)尾,同時(shí)移除軌跡存儲(chǔ)隊(duì)列隊(duì)首存儲(chǔ)的程序段;否則,直接將指針移向軌跡存儲(chǔ)隊(duì)列中存儲(chǔ)的后一個(gè)程序段。如果是后退方向,在后退到程序段起點(diǎn)時(shí),如果同時(shí)也到達(dá)軌跡存儲(chǔ)隊(duì)列隊(duì)首,即達(dá)到軌跡存儲(chǔ)隊(duì)列規(guī)定的最大隊(duì)列容量,則不再移動(dòng)指針,也就是說(shuō)軌跡段回退結(jié)束;否則,直接將指針移向隊(duì)列中存儲(chǔ)的前一個(gè)程序段。軌跡存儲(chǔ)隊(duì)列運(yùn)行流程見(jiàn)圖2。
圖2 軌跡存儲(chǔ)隊(duì)列運(yùn)行流程
軌跡的存儲(chǔ)和回退需要進(jìn)行如下操作:一是將從規(guī)劃緩沖區(qū)中取出的程序段存入到當(dāng)前數(shù)據(jù)結(jié)構(gòu),同時(shí)需要進(jìn)行程序段序列的整體前移,包括節(jié)點(diǎn)插入、刪除操作;二是按照順序或逆序,依次地訪問(wèn)已經(jīng)存儲(chǔ)的程序段,并將其輸出給插補(bǔ)模塊,即節(jié)點(diǎn)的順序訪問(wèn)。鏈表屬于動(dòng)態(tài)存儲(chǔ),即邏輯上相鄰的節(jié)點(diǎn)由指針互相引用,但物理地址可以任意。鏈表的動(dòng)態(tài)存儲(chǔ)方式?jīng)Q定了它隨機(jī)訪問(wèn)節(jié)點(diǎn)的低效,和插入、刪除節(jié)點(diǎn)的高效。因此,對(duì)于軌跡存儲(chǔ)和回退,使用鏈表效率較高。
基于雙向鏈表設(shè)計(jì)了軌跡存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)——隊(duì)列。運(yùn)動(dòng)控制模塊讀取新的程序段,就是從規(guī)劃緩沖區(qū)中出隊(duì),然后插入到軌跡存儲(chǔ)隊(duì)列的隊(duì)尾。與此同時(shí),為了避免占用系統(tǒng)過(guò)大的內(nèi)存空間,軌跡存儲(chǔ)隊(duì)列的容量是固定的,所以隊(duì)首的程序段需要被丟棄并釋放掉空間。在已經(jīng)加工過(guò)并存儲(chǔ)的程序段之間重新加工時(shí),需要指針前后移動(dòng),以訪問(wèn)不同位置的程序段。再考慮到加工過(guò)程的開(kāi)始和結(jié)束,軌跡存儲(chǔ)隊(duì)列需要具備初始化、入隊(duì)、出隊(duì)、指針操作和銷(xiāo)毀5個(gè)接口[11]。假設(shè)隊(duì)列容量為NUM,最遠(yuǎn)加工位置為M,指針當(dāng)前指向位置為n,軌跡存儲(chǔ)隊(duì)列的接口具體見(jiàn)圖3。
圖3 軌跡存儲(chǔ)隊(duì)列的接口
在雙向鏈表實(shí)現(xiàn)的隊(duì)列中,每個(gè)節(jié)點(diǎn)都是一個(gè)結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體包括數(shù)據(jù)域和直接前驅(qū)、直接后繼兩個(gè)指針。數(shù)據(jù)域本身也是一個(gè)結(jié)構(gòu)體,包括程序段號(hào)、G 代碼、起點(diǎn)坐標(biāo)、終點(diǎn)坐標(biāo)、進(jìn)給速度等,已經(jīng)在數(shù)控系統(tǒng)原有程序中封裝好。每個(gè)節(jié)點(diǎn)的直接前驅(qū)、直接后繼指向的,是其前一個(gè)或后一個(gè)節(jié)點(diǎn)的地址。在程序中,可以不斷地用一個(gè)活動(dòng)的指針引用當(dāng)前節(jié)點(diǎn)的直接前驅(qū)或直接后繼,來(lái)訪問(wèn)與其相鄰的節(jié)點(diǎn),從而能夠自由地向前或向后遍歷整個(gè)隊(duì)列。M、S、T等模態(tài)指令以及G04延時(shí)指令等非軌跡程序段不入隊(duì),需要進(jìn)行特殊處理。
在數(shù)控系統(tǒng)中,圓弧半徑、進(jìn)給速度等加工參數(shù)并不屬于單個(gè)坐標(biāo)點(diǎn),而是屬于單個(gè)程序段。因此,每當(dāng)當(dāng)前點(diǎn)的坐標(biāo)與當(dāng)前指針?biāo)赶虻墓?jié)點(diǎn)中數(shù)據(jù)域結(jié)構(gòu)體內(nèi)的“起點(diǎn)”或“終點(diǎn)”坐標(biāo)點(diǎn)重合,則向前或向后移動(dòng)指針,以訪問(wèn)相鄰的節(jié)點(diǎn)。軌跡存儲(chǔ)隊(duì)列結(jié)構(gòu)如圖4所示。隊(duì)列結(jié)構(gòu)中,都有頭(header)和 尾(trailer)兩個(gè)特殊的節(jié)點(diǎn)。它們沒(méi)有數(shù)據(jù)域,稱(chēng)為哨兵節(jié)點(diǎn),在程序中是必需的組成部分。首(first)節(jié)點(diǎn)是頭節(jié)點(diǎn)的直接后繼,是軌跡回退能夠到達(dá)的最后位置;末(last)節(jié)點(diǎn)是尾節(jié)點(diǎn)的直接前驅(qū),是目前已經(jīng)加工的最新程序段。
圖4 軌跡存儲(chǔ)隊(duì)列結(jié)構(gòu)
(1)圓弧等曲線插補(bǔ)方向的特殊處理
在軌跡回退的過(guò)程中,如果遇到圓弧段、參數(shù)曲線段,將當(dāng)前段信息取出后,在返回給插補(bǔ)模塊之前需要對(duì)調(diào)插補(bǔ)方向,以便進(jìn)行反向插補(bǔ)。比如,對(duì)于圓弧加工的回退,需要將程序段結(jié)構(gòu)體中儲(chǔ)存的 G02 與 G03 對(duì)調(diào),以顛倒順逆方向;更改順逆方向的操作是將當(dāng)前程序段信息取出并存入到臨時(shí)的程序段結(jié)構(gòu)體內(nèi),然后在臨時(shí)結(jié)構(gòu)體內(nèi)更改插補(bǔ)方向并最終返回給插補(bǔ)模塊。其他曲線插補(bǔ)方向的處理思路與之類(lèi)似。
(2)非軌跡程序段的特殊處理
非軌跡程序段主要包括 M、S、T等模態(tài)指令和G04 延時(shí)指令等,這些指令不涉及加工的軌跡規(guī)劃,無(wú)需儲(chǔ)存在軌跡程序段的隊(duì)列中。需要注意的是,M、S、T等模態(tài)指令不進(jìn)入插補(bǔ),但必須讀取,并通知PLC實(shí)時(shí)模塊執(zhí)行,從而能夠響應(yīng)程序暫停、啟動(dòng)、復(fù)位等事件。在具體的程序?qū)崿F(xiàn)過(guò)程中,在讀緩存區(qū)之后首先判斷該程序段是否包含M、S、T 等模態(tài)指令或 G04 延時(shí)指令,此類(lèi)指令不存儲(chǔ)在軌跡程序段隊(duì)列中。還需要注意加工的首個(gè)程序段是非軌跡程序段的情況,為防止回退到首個(gè)程序段時(shí)出錯(cuò),需要在初始化時(shí)將該程序段信息改為起終點(diǎn)重合,且 M、S、T 等模態(tài)指令及G04不存在的空軌跡段。
數(shù)控系統(tǒng)自動(dòng)運(yùn)行過(guò)程中,按下“手輪模擬”按鍵,反轉(zhuǎn)手輪即可實(shí)現(xiàn)刀具沿原軌跡回退,回退速度由手輪操作速度決定,因此手輪回退是在程序段軌跡回退功能基礎(chǔ)上,用手輪速度取代程序指令速度實(shí)現(xiàn)的。手輪回退時(shí)需要確定刀具沿指定程序段回退的速度和方向。
本文提出采用“分時(shí)采集、延后輸出”的方法來(lái)保證手輪輸入不確定的情況下輸出脈沖速度的連續(xù)。首先根據(jù)固定周期內(nèi)采集到的手輪實(shí)際位置,計(jì)算出周期手輪增量△Pn,并限制手輪最大速度;然后根據(jù)前一個(gè)周期的手輪增量△Pn-1和本周期手輪增量△Pn進(jìn)行速度規(guī)劃,最終得到輸出位置X(t)關(guān)于時(shí)間t的函數(shù)。脈沖輸出模塊根據(jù)該速度規(guī)劃的結(jié)果進(jìn)行位置離散和脈沖輸出,具體流程見(jiàn)圖5。
圖5 手輪速度規(guī)劃流程
對(duì)于本數(shù)控系統(tǒng),只有系統(tǒng)狀態(tài)為“空閑”,即有必要重新進(jìn)行軌跡規(guī)劃的情況下,才進(jìn)入圖2所示的運(yùn)動(dòng)控制流程,否則不進(jìn)入該流程,也就無(wú)法及時(shí)在該流程中改變加工方向。如果需要在反轉(zhuǎn)手輪時(shí)立即改變加工方向,可以利用系統(tǒng)進(jìn)入“空閑”狀態(tài)的前提條件中的“其他需要重新進(jìn)行軌跡規(guī)劃的情況”。因此需在圖2基礎(chǔ)上增加一個(gè)判斷分支,如果程序讀取到手輪轉(zhuǎn)向與上一次不同,則進(jìn)入增加的分支,將系統(tǒng)狀態(tài)置為“空閑”,加工方向可在程序的下一個(gè)運(yùn)行周期(1 ms)后立即改變。
在Qt 5.10.1軟件仿真環(huán)境中對(duì)程序段軌跡回退的C語(yǔ)言程序進(jìn)行測(cè)試驗(yàn)證。軟件仿真環(huán)境測(cè)試時(shí)進(jìn)行了以下簡(jiǎn)化:對(duì)一維程序段進(jìn)行測(cè)試,且只保留了起點(diǎn)和終點(diǎn)兩個(gè)變量;讀規(guī)劃緩沖區(qū)函數(shù)簡(jiǎn)化為:當(dāng)前程序段終點(diǎn)坐標(biāo)為b,則下一程序段起點(diǎn)坐標(biāo)為b,終點(diǎn)坐標(biāo)為(b+1)或(b+2),由系統(tǒng)隨機(jī)確定;插補(bǔ)函數(shù)簡(jiǎn)化為:如果當(dāng)前插補(bǔ)起點(diǎn)小于插補(bǔ)終點(diǎn),則下一個(gè)插補(bǔ)點(diǎn)為當(dāng)前點(diǎn)+0.5,反之則為當(dāng)前點(diǎn)-0.5;隊(duì)列容量設(shè)定為5;系統(tǒng)定時(shí)器設(shè)定每500ms 執(zhí)行一次軌跡規(guī)劃及插補(bǔ)流程。測(cè)試程序可以實(shí)現(xiàn)前進(jìn)、暫停、后退、復(fù)位、保存仿真結(jié)果等操作。將仿真結(jié)果保存到文本中,并將前50行數(shù)據(jù)進(jìn)行整理,具體見(jiàn)圖6。AB和DE段為正向插補(bǔ)過(guò)程,BC和EF段為反向回退過(guò)程,CD段表明軌跡回退超過(guò)最大回退段數(shù)時(shí),不再回退。經(jīng)過(guò)多次仿真測(cè)試及結(jié)果分析,一維程序段軌跡回退的軟件仿真結(jié)果與理論值相吻合,可以進(jìn)一步移植到硬件開(kāi)發(fā)環(huán)境中。
圖6 一維程序段軌跡回退
在軟件仿真的基礎(chǔ)上,使用自主研發(fā)的國(guó)產(chǎn)數(shù)控系統(tǒng)對(duì)手輪回退功能進(jìn)行實(shí)際測(cè)試。例如,在精加工圖7所示的零件時(shí),當(dāng)程序執(zhí)行到N70程序段(見(jiàn)圖8)時(shí),機(jī)床出現(xiàn)液壓故障,刀具需要立刻返回安全位置并進(jìn)行故障排除。內(nèi)孔車(chē)刀在工件的內(nèi)部,刀具退回的空間較小。采用人工手動(dòng)回退,若操作失誤將導(dǎo)致刀具和工具相撞。此時(shí),可按下“手輪模擬”按鍵并反轉(zhuǎn)手輪,刀具會(huì)首先沿著N70程序段已加工的軌跡回退,N70程序段回退結(jié)束后接著按照N60指定的軌跡回退,最后回退至安全位置(見(jiàn)圖7)。圖9為利用NI采集卡采集的系統(tǒng)沿N70程序段回退時(shí)的速度控制曲線,曲線1為手輪轉(zhuǎn)動(dòng)速度曲線,曲線2為經(jīng)過(guò)速度規(guī)劃后的進(jìn)給軸輸出速度控制曲線,結(jié)果顯示,進(jìn)給軸輸出速度Vf能較好地響應(yīng)手輪轉(zhuǎn)動(dòng)速度Vh,并且在Vh變化較大的情況下Vf能保持較好的連續(xù)性。綜合測(cè)試結(jié)果表明,系統(tǒng)能夠?qū)崿F(xiàn)任意坐標(biāo)點(diǎn)處的暫停、回退、再啟動(dòng)、再前進(jìn)等一系列操作,不偏離程序設(shè)定的加工路徑,且能保證手輪輸入不確定的情況下進(jìn)給軸輸出速度的連續(xù)。
圖7 待加工零件回退路線
圖8 手輪回退案例
圖9 手輪速度控制曲線
基于某國(guó)產(chǎn)數(shù)控系統(tǒng)已經(jīng)具備的手輪正向控制程序執(zhí)行功能,開(kāi)發(fā)了手輪雙向控制程序執(zhí)行功能,即“手輪模擬”模式下的加工軌跡回退,實(shí)現(xiàn)了在任意位置反轉(zhuǎn)手輪時(shí)加工方向立即反轉(zhuǎn),且不偏離程序設(shè)定的加工路徑。經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證以及企業(yè)車(chē)間的實(shí)際測(cè)試,結(jié)果表明已正確實(shí)現(xiàn)手輪回退功能。