侯明鵬,丁 賓
(1.北京機(jī)科國創(chuàng)輕量化科學(xué)研究院有限公司,北京 100044;2.北京金隅科技學(xué)校,北京 102403)
隨著制造業(yè)的發(fā)展,從數(shù)控技術(shù)角度而言,自動化、柔性化、集成化、智能化是未來數(shù)控技術(shù)發(fā)展的方向。從生產(chǎn)方式角度而言,生產(chǎn)方式正在從批量化的生產(chǎn)方式向多品種、小批量的生產(chǎn)方式轉(zhuǎn)變,對數(shù)控系統(tǒng)提出了更高的要求。傳統(tǒng)的封閉式數(shù)控系統(tǒng)很難滿足行業(yè)及技術(shù)的不斷更新及變化,不能滿足市場發(fā)展的需要。因此,開放式數(shù)控系統(tǒng)應(yīng)運(yùn)而生,PMAC作為開放式數(shù)控系統(tǒng)的典型代表,具有功能豐富、可擴(kuò)展、可移植等諸多優(yōu)點(diǎn)得到了廣泛的應(yīng)用[1,2]。在鑄造行業(yè)中,特種加工裝備根據(jù)鑄造特殊工藝,采用“PC+PMAC”的開放式數(shù)控系統(tǒng)架構(gòu),基于PMAC的二次開發(fā),結(jié)合砂型加工工藝,開發(fā)出專用的數(shù)控系統(tǒng)軟件,具有柔性化、集成化、網(wǎng)絡(luò)化、智能化等特點(diǎn),滿足了鑄造砂型的多品種、小批量試制件的生產(chǎn)需要[3]。然而,由于PMAC硬件存儲空間的限制,無法滿足大容量文件的下載,因此,本文提出通過將大文件拆分的方法,解決連續(xù)下載的問題。
PMAC可編程多軸運(yùn)動控制卡(program multiple axis controller),是美國DELTA TAU公司的產(chǎn)品,是集運(yùn)動軸控制、PLC控制以及數(shù)據(jù)采集于一體的多功能的運(yùn)動控制產(chǎn)品[4]。Turbo PMAC包括多種類型緩沖區(qū):224個運(yùn)動程序緩沖區(qū)(prog)、16個旋轉(zhuǎn)運(yùn)動程序緩沖區(qū)(rot)、16個正向運(yùn)動學(xué)子程序緩沖區(qū)(forward)、16個逆向運(yùn)動學(xué)子程序緩沖區(qū)(inverse)和32個未編譯的PLC程序緩沖區(qū)(plc)。旋轉(zhuǎn)運(yùn)動程序緩沖區(qū)多用于機(jī)床G代碼加工程序的執(zhí)行,該緩沖區(qū)為即將執(zhí)行的命令行提供存儲區(qū)域,PMAC從該緩沖區(qū)讀取并執(zhí)行指令,在執(zhí)行運(yùn)動程序的同時打開緩沖區(qū),用于從主機(jī)輸入程序指令。
PMAC卡允許執(zhí)行機(jī)床類型的G代碼程序,它將把G、M、T和D代碼作為子程序調(diào)用[5]。G代碼指令對應(yīng)PMAC中“PROG 1000”子程序,M代碼指令對應(yīng)PMAC中“PROG 1001”子程序,字母“G”后面的數(shù)值對應(yīng)子程序中數(shù)值“N”程序段。例如:Gxx被解釋成PROG 1000的標(biāo)號為Nxx000的子程序;Mxx被解釋成PROG 1001的標(biāo)號為Nxx000的子程序。PMAC在相應(yīng)的子程序中,將G代碼指令翻譯成PMAC指令,用戶如果要定制G代碼,可以修改對應(yīng)的子程序。部分G代碼指令如表1所示。
由于PMAC用于緩沖區(qū)的存儲空間非常有限,用戶程序存儲容量大約為300KB,單個運(yùn)動程序緩沖區(qū)最大容量只有50KB左右[6]。因此,一次下載的程序行數(shù)量不能超過存儲容量。要解決這個問題就需要利用旋轉(zhuǎn)運(yùn)動程序緩沖區(qū),它允許接收運(yùn)動程序指令,每個程序指令被添加到指令列表的末尾,并覆蓋掉已執(zhí)行完的程序行,這樣循環(huán)讀取下載所需的指令行。常用的方式是在上位機(jī)軟件設(shè)計(jì)中,循環(huán)讀取固定行數(shù)(例如:10000行)下載到定義好的緩沖區(qū)中,設(shè)置定時器發(fā)送“PR”指令報(bào)告循環(huán)程序緩沖區(qū)中還將要被計(jì)算的程序行數(shù),根據(jù)已執(zhí)行行數(shù)判斷是否需要下載新的程序行。流程圖如圖1所示。
表1 G代碼指令轉(zhuǎn)換表
圖1 循環(huán)讀指令行流程圖
這種方式雖然可以避免內(nèi)存空間不夠?qū)е碌南螺d失敗,但是“PR”指令需要實(shí)時訪問并返回結(jié)果,指令讀取涉及文件、字符串操作,占用了大量的內(nèi)存,增加了軟件的運(yùn)行負(fù)擔(dān)導(dǎo)致不穩(wěn)定。鑒于以上較大容量G代碼程序下載存在的問題,本文提出了將大容量G代碼程序文件等大小進(jìn)行分割,實(shí)現(xiàn)文件的連續(xù)下載的新方法。
為解決上述存在的問題,提出了一種新方法,該方法將軟件功能劃分為實(shí)時任務(wù)和非實(shí)時任務(wù),分為兩步完成。第一步,非實(shí)時任務(wù)將G代碼程序文件拆分成若干小文件,每個小文件大小在50KB左右,滿足旋轉(zhuǎn)運(yùn)動程序緩沖區(qū)的容量要求,不會出現(xiàn)因文件較大超出內(nèi)存限制而導(dǎo)致下載失敗的錯誤。在拆分過程中,在每個文件的頭部加上“CLOSE OPEN ROT”,關(guān)閉上一個旋轉(zhuǎn)緩沖區(qū),打開一個新的旋轉(zhuǎn)緩沖區(qū),在每行指令末尾加上“F(P500)M0==i”其中“P500”變量是速度設(shè)置變量,通過設(shè)置“P500”的值可以實(shí)時調(diào)節(jié)加工進(jìn)給速度,“i”為行號,通過“M0”變量可以實(shí)時顯示當(dāng)前正在執(zhí)行的行號。當(dāng)寫入最后一個文件時,寫入“M03 M05”程序尾,關(guān)斷氣源,停止主軸操作。流程圖如圖2所示。
第二步,在上位機(jī)軟件中設(shè)置定時器,調(diào)用timer1_Tick(object sender,EventArgs e)函數(shù),實(shí)時掃描讀取“M0”的值,當(dāng)“M0”的值在當(dāng)前文件的第600行和700行之間時,開始下載下一個文件,調(diào)用PMAC.Download(pmacNumber,fileDirectory,true,true,true,true,out downloadSuccess)函數(shù),通過下載標(biāo)志位(bool b)確保文件下載函數(shù)只執(zhí)行一次,如此循環(huán),直至全部下載執(zhí)行完畢。流程圖如圖3所示。
圖2 G代碼文件拆分流程圖
圖3 文件連續(xù)下載流程圖
PC端上位機(jī)軟件開發(fā)在Windows環(huán)境下采用Visual Studio 2013編程實(shí)現(xiàn),將G代碼文件按照每1000行為一個小文件拆分,保存在G代碼文件所在的根目錄下,同時利用“ListBox1”控件顯示拆分后的文件目錄以及每個文件的指令行。此操作均在上位機(jī)PC端運(yùn)行,減輕了控制卡的運(yùn)算負(fù)擔(dān)。點(diǎn)擊“程序段執(zhí)行”后,系統(tǒng)發(fā)送“&1R”指令給PMAC控制卡,執(zhí)行G代碼,同時讀取“M0”的值并賦值給“ListBox2”控件當(dāng)前索引并高亮顯示,“M0”表示系統(tǒng)正在執(zhí)行的行號。此外,該下載方式可以選擇在任意程序段開始執(zhí)行程序,當(dāng)程序中斷時,可以根據(jù)系統(tǒng)記錄的文件號及行號自動在中斷處繼續(xù)加工,還可以顯示文件總數(shù)、程序行數(shù)、當(dāng)前文件、執(zhí)行進(jìn)度、速度等狀態(tài)信息,方便用戶查看。如圖4所示。
圖4 連續(xù)下載軟件界面
針對特種設(shè)備的數(shù)控系統(tǒng)二次開發(fā)是開放式數(shù)控系統(tǒng)的最顯著的優(yōu)勢,隨著PMAC的應(yīng)用越來越廣泛,利用此方法可以很好地解決G代碼“大”文件與PMAC“小”內(nèi)存之間的矛盾,實(shí)現(xiàn)了G代碼文件的連續(xù)、有序、穩(wěn)定運(yùn)行,大大提高生產(chǎn)效率。同時結(jié)合不同領(lǐng)域的工藝特點(diǎn),擴(kuò)展軟件功能滿足個性化生產(chǎn)的需要。