楊冬香,張愛華
(1.五邑大學智能制造學部,廣東江門 529020;2.五邑大學數學與計算科學學院,廣東江門 529020)
數控系統對于制造裝備來說相當于大腦,它反映著裝備的智能化自動化水平[1]。成熟的數控系統功能齊全,但是價格昂貴,同時也不能滿足目前制造市場上對數控系統多樣化、個性化的功能需求[2]。因此,開發符合自身功能要求的低成本開放式數控系統符合目前市場上生產企業的需求。
雖然制造市場對數控系統功能需求不盡相同,但是數控系統的基本譯碼、刀具補償、插補等功能不可或缺。因此,從降低開發成本出發,將數控系統的基本代碼、刀具補償、插補等進行模塊化封裝,作為一種通用的程序模塊,可供相同平臺用戶調用組合,是一種行之有效的新的開放式數控系統開發思路。
CPAC是計算機可編程自動化控制器的簡稱,它是固高科技有限公司推出的應用于工業裝備控制的軟硬件開發平臺,廣泛應用于自動化裝備數字控制系統的開發領域[3]。在CPAC軟件平臺對數控系統的常用代碼模塊進行模塊化封裝,作為有固定輸入輸出的程序塊。封裝好的程序塊可以類似于軟件底層函數,用于其他基于CPAC的嵌入式數控系統開發程序之中,這樣可以大大地減少數控系統的開發時間。
CPAC硬件平臺由運動控制器、人機界面和遠程I/O模塊3部分組成[4]。其核心控制器由FPGA和DSP 組成,支持多種運動模式,如點位模式、JOG 模式、電子齒輪模式、FOLLOW模式、插補模式、PT模式和PVT模式等,支持位置控制方式和速度控制方式,帶有16路通用數字輸入、16路通用數字輸出點。
CPAC軟件平臺(Otostudio)是一種基于IEC61131-3工業控制語言標準的開發工具,支持文本化和圖形化混合編程,用戶可以用結構文本做復雜的數學運算和運動控制,同時用梯形圖實現邏輯控制和過程控制。
Otostudio 程序類型多樣,有主程序、子程序、功能塊、功能。對于其中的關系在開發之前要清楚。每個程序必然包含一個主程序,這是程序運行的前提。子程序和主程序的變量是可見的,主程序可以調用子程序、功能塊及功能。功能塊對應輸入變量和輸出變量,有返回值。功能沒有返回值。
功能塊是Otostudio 平臺本身具備的一種程序形式,其平臺本身具備有運動模式等封裝好的功能塊,可以供平臺使用者按需調用。本文利用平臺功能塊這一程序形式,對常用數控代碼解釋和編譯等功能進行封裝,形成可供用戶選擇調用的程序功能塊。
程序功能塊FUNCTION_BLOCK不同于完整數控系統的開發,其獨立于數控系統,封裝后可供平臺所有用戶調用,用戶只需給定滿足程序功能塊要求的輸入參數即可。
本文依據常用數控代碼來劃分程序塊,如G00/G01/G02/G03、G41/G42/G40、G90/G91 等,然后利用 Otostuidio 的功能塊完成其程序塊封裝。具體開發思路如下:
(1)命名創建功能塊;
(2)確定功能塊輸入和輸出參數并進行定義;
(3)調用Otostudio 底層函數,按照其編程規則,根據程序代碼功能,編寫其譯碼程序;
(4)結束功能塊。
以下以G01 指令程序塊、譯碼功能塊為例,闡述其封裝流程。
平臺仿真運行實驗刀具按照系統設定好的進給速度從刀具當前的位置快速移動到程序段給定的位置。各坐標軸無需聯動,沒有運動軌跡要求。G00程序塊封裝流程如圖1所示。

圖1 G00程序塊封裝流程

圖2 G01程序塊封裝流程
首先通過GT_PrfTrap(Axis),輸入軸號變量Axis,設定指定軸的點位運動模式。定義結構體STRUCT TTrapPrm,存儲點位運動參數,并采用GT_SetTrapPrm (Axis,ADR(Trap-Prm))設置給定軸的運動參數。通過GT_SetVel(Axis,Vel)設置給定軸的速度,GT_SetPos(Axis,Pos)設置給定軸的目標位置。所有參數定義完畢,采用GT_Update(Axis)啟動給定軸的點位運動,完成程序塊的定義。
該指令可使機床沿X、Y、Z 方向實現單軸的運動,或在各坐標平面內實現兩軸聯動走出平面直線軌跡,也可使機床三軸聯動走出空間直線軌跡。
緩存區中的數據是會實時更新的,當數據進行插補運動之后,會被釋放出來,給后續新的數據提供存儲空間,用戶設定的插補數據會儲存在緩存區中等待執行,接著啟動插補運動,運動控制器則會依次執行用戶所傳遞的插補數據,直到所有的插補數據全部運動完成。
因為要實現的是能三軸聯動的直線插補運動,所以這里選用的是三維直線插補指令GT_LnXYZ 以及啟動插補運動指令GT_CrdStart。雖然每個緩存區FIFO 都含有4 096 段插補數據的空間,由于不確定用戶所給的G 代碼程序會不會超出緩存區空間,所以每次在傳遞插補數據之前調用指令GT_Crd-Clear 來清理儲存區里面的數據內存,確保用戶有足夠的存儲空間可以使用。G01程序塊封裝流程如圖2所示。
目前,國際上通用的數控機床的加工程序主要基于標準ISO6983的G、M代碼語言編寫而成的。最常用的程序段字地址格式如下所示[2]:
Nxxx Gxx Xxx Yxx Zxx Fxx Sxx Txx Mxx
在Otostudio 中,NC 代碼文件的打開是通過指令SysFileOpen來實現的:
DwWritten: =SysFileRead (Hfile,ADR (buffer[origin]),SIZEOF(buffer)-(origin-1));
WHILE index<cycle_size+1 AND Buffer[index]<>0 DO
sBuffer[index]:=ASCII_TO_STRING(Buffer[index]);
index:=index+1;
END_WHILE;
由于數組buffer[]存放字符所對應的ASCII 值,必須將ASCII值轉化為字符(ASCII_TO_STRING),為下面NC代碼的編譯做準備。
轉換之后,NC代碼的內容會以一個一個字符的形式被存放在數組sBuffer[index]中。讀取和識別準備功能G指令的類型和輔助功能M指令的類型并把G、M指令后面的坐標值、進給速度、半徑、轉速、時間等作為輸入參數賦值給所封裝好的相應程序代碼功能塊,完成譯碼和驅動執行。
為驗證功程序功能塊的有效性,本文利用CPAC和Otostudio搭建了簡單的數控系統軟硬件框架結構,并調用前期開發的程序功能塊,快速實現了二維輪廓銑削、二維刀具補償和孔類加工循環等功能,如圖3所示。

圖3 基于CPAC的數控系統界面與調用程序功能
在進行簡單個性化界面編制的基礎上,本數控系統對NC代碼的讀入、解釋和驅動執行,都通過調用功能塊完成。
輸入如下代碼:
G00 X400 Y200;
G01 X0 Y0 F100;
數控系統調用譯碼功能塊和程序代碼功能塊,驅動顯示模塊走出圖4所示線框,同時驅動CPAC輸出軸做相應轉動。

圖4 數控系統刀具軌跡線框圖
本文從縮短數控系統開發周期、降低開發成本出發,提出以程序功能塊的方式,封裝通用代碼或功能模塊,以供相同平臺用戶開發使用。同時,根據這一思想,基于CPAC軟硬件平臺,實現了通用程序功能塊的開發,并在基于此平臺的數控系統開發中得到應用,驗證了程序功能塊的通用性和有效性。