薛 剛
(上海機(jī)床廠有限公司 上海 200093)
目前,隨著國(guó)內(nèi)外數(shù)控系統(tǒng)在柔性、可靠性和開(kāi)放性等方面的飛速發(fā)展,許多理論和技術(shù)問(wèn)題得到了較好的解決,數(shù)控機(jī)床可開(kāi)發(fā)成為智能機(jī)床,滿(mǎn)足用戶(hù)的個(gè)性化需求。為了適應(yīng)個(gè)性化市場(chǎng)的需要,數(shù)控系統(tǒng)向著開(kāi)放式結(jié)構(gòu)發(fā)展。發(fā)那科公司提供的 FANUC Series 0i-TF 數(shù)控系統(tǒng)沒(méi)有專(zhuān)門(mén)針對(duì)磨床的控制界面,但它提供了 C語(yǔ)言執(zhí)行器功能,用戶(hù)可以通過(guò)二次開(kāi)發(fā)把自己的功能模塊集成到系統(tǒng)中去,滿(mǎn)足定制化的需求。
發(fā)那科的 C語(yǔ)言執(zhí)行器可以將機(jī)床制造商的獨(dú)有畫(huà)面編入發(fā)那科系統(tǒng),自定義 CNC系統(tǒng)軟件的顯示和操作系統(tǒng)功能??梢杂脩?yīng)用程序編寫(xiě)的畫(huà)面置換 CNC的任意畫(huà)面。和編寫(xiě)普通計(jì)算機(jī)程序相同,可以用一般的C語(yǔ)言來(lái)編寫(xiě)顯示和操作系統(tǒng)的應(yīng)用程序,并將執(zhí)行文件編入CNC。將在計(jì)算機(jī)上編譯的程序通過(guò)存儲(chǔ)卡保存到CNC裝置的Flash ROM,在啟動(dòng)CNC時(shí),被讀入內(nèi)存并在C語(yǔ)言執(zhí)行器上執(zhí)行,流程開(kāi)發(fā)流程如圖1所示。
圖1 軟件開(kāi)發(fā)流程
功能: Macro executor + C Language Executor
Custom software size
C Language Executor additional SRAM
參數(shù): 8661 變量區(qū)容量(一般設(shè)置為:59)
8662 SRAM磁盤(pán)容量(一般設(shè)置為:4)
8781 C執(zhí)行器使用的DRAM容量(一般設(shè)置為:96)
在發(fā)那科C語(yǔ)言執(zhí)行器功能包里已經(jīng)搭好了應(yīng)用程序的框架結(jié)構(gòu),應(yīng)用程序主要由5個(gè)獨(dú)立任務(wù)構(gòu)成,如圖2所示。
圖2 任務(wù)框架
(A)主任務(wù)(tsk1main.c)
主任務(wù)進(jìn)行畫(huà)面顯示、鍵輸入、CNC數(shù)據(jù)的讀寫(xiě)等幾乎所有的處理??梢允褂盟谐绦驇?kù)的功能。
(B)通訊任務(wù)(tsk2main.c)
通訊任務(wù)通常在和主任務(wù)獨(dú)立進(jìn)行,監(jiān)視周期啟動(dòng)的各種狀態(tài),閱讀機(jī)/穿孔機(jī)的相關(guān)處理。
(C)報(bào)警任務(wù)(tsk3main.c)
通常周期性啟動(dòng)報(bào)警任務(wù),進(jìn)行各種狀態(tài)的監(jiān)視等。
(D)窗口任務(wù)(tsk4main.c)
在任意畫(huà)面上進(jìn)行窗口顯示。
(E)高級(jí)任務(wù)(tsk5main.c)
獨(dú)立的按一定周期執(zhí)行任務(wù),實(shí)時(shí)進(jìn)行高優(yōu)先級(jí)的處理和快速數(shù)據(jù)監(jiān)視處理等。
主任務(wù)只在用戶(hù)畫(huà)面顯示過(guò)程中執(zhí)行。報(bào)警任務(wù)和通信任務(wù)都與顯示畫(huà)面無(wú)關(guān),也就是說(shuō)可以在后臺(tái)執(zhí)行。另外,應(yīng)用程序可以只有一個(gè)任務(wù)構(gòu)成,即主任務(wù)。
任務(wù)之間的數(shù)據(jù)存取
在進(jìn)行其他任務(wù)和數(shù)據(jù)之間的通信時(shí),使用任務(wù)之間的公共變量(dramver.c和sramver.c)中定義,作為任務(wù)之間的公共變量配置在任務(wù)之間的公共內(nèi)存里,如圖3所示。
圖3 變量
task1miain.c是整個(gè)C語(yǔ)言執(zhí)行器的主程序,程序會(huì)從task1main開(kāi)始運(yùn)行。task1main.c中的程序當(dāng)進(jìn)入用戶(hù)畫(huà)面中才開(kāi)始運(yùn)行,程序流程見(jiàn)圖4。
圖4 程序流程
1)設(shè)定用戶(hù)畫(huà)面
登陸用戶(hù)畫(huà)面號(hào):設(shè)定CRT模式:
設(shè)定 CNC畫(huà)面和用戶(hù)畫(huà)面切換方式:設(shè)定調(diào)色板:
打開(kāi)顯示(CRT_OPEN):
設(shè)定視頻模式畫(huà)面顯示
關(guān)閉顯示(CRT_CLOSE):
/* 用戶(hù)畫(huà)面設(shè)定 */
crt_setuserscrn( scrn_tbl_size(crt_table),crt_table);
2)登陸用戶(hù)畫(huà)面號(hào)函數(shù)
在主任務(wù)中至少登陸一個(gè)用戶(hù)畫(huà)面(即使不需要 C語(yǔ)言執(zhí)行器的用戶(hù)畫(huà)面),如果不指定用戶(hù)畫(huà)面就不能再次從 CNC畫(huà)面返回用戶(hù)畫(huà)面。可以置換傳統(tǒng)的CNC畫(huà)面,也可以使用 C語(yǔ)言執(zhí)行器專(zhuān)用畫(huà)面。
crt_cncscrn(CRT_POS_ALL) ; // 設(shè)定用戶(hù)畫(huà)面返回方式。
/* 設(shè)定屏幕顯示方式 */
_setvideomode( _VRES16COLOR ); // 16色,圖像640×480,文字80×30
/* 設(shè)定用戶(hù)畫(huà)面到CNC畫(huà)面切換方式 */
crt_setswt( CRT_SWT_GREN ) ; // 設(shè)定是否可切換、報(bào)警時(shí)是否切換,是否使用MDI鍵切換等
3)設(shè)定CNC畫(huà)面和用戶(hù)畫(huà)面的切換方式
Bit 0 0:允許從用戶(hù)畫(huà)面向CNC畫(huà)面切換 1;禁止從用戶(hù)畫(huà)面向CNC畫(huà)面切換(CRT_SWT_DIS)
Bit 2 0:在圖形顯示打開(kāi)過(guò)程中禁止畫(huà)面切換1:在圖形顯示打開(kāi)過(guò)程中可以畫(huà)面切換(CRT_SWT_GREN);
Bit 3 CNC畫(huà)面發(fā)生報(bào)警時(shí),是否自動(dòng)向報(bào)警畫(huà)面切換0:根據(jù)通常CNC的設(shè)定(參數(shù)3111#7);1:基于用戶(hù)畫(huà)面(參數(shù)8650#1)(CRT_SWT_ACNC)
Bit 4 CNC軟件對(duì)MDI面板的功能鍵 0:進(jìn)行通常讀取1:不能進(jìn)行讀?。–NC軟鍵側(cè)不能進(jìn)行畫(huà)面切換)(CRT_SWT_MFKY)。
在發(fā)那科基礎(chǔ)框架下,還需要自己編寫(xiě)擴(kuò)展一些輔助功能框架。運(yùn)用這些功能來(lái)進(jìn)行畫(huà)面的處理。
win.c中的程序主要負(fù)責(zé)顯示界面,一些非動(dòng)態(tài)的圖像以及文字的顯示。
如上圖所示,添加了一個(gè)win_test函數(shù)的定義,在其中定義了win_test這個(gè)函數(shù)中包含的內(nèi)容。
Voidwin_test(void)
{ curWIN->WinFunc=win_test;//設(shè)定當(dāng)前畫(huà)面的函數(shù)為win_test。
curWIN->RefreshFunc=vawin_test;//設(shè)定當(dāng)前畫(huà)面的變量畫(huà)面為vawin_test。
curWIN->InputFunc=0;//設(shè)定當(dāng)前輸入函數(shù)為0,0既是不調(diào)用輸入函數(shù)。
curWIN->SpecialCurs=0;//判斷是否使用特殊光標(biāo)。
curWIN->LL_index=0x01;//函數(shù)畫(huà)面所在的軟按鍵層次。
curWIN->WinKey=SOFT_F1;//函數(shù)調(diào)用使用的軟按鍵。
element_background();//插入背景
dlg_cncstate();//插入NC非動(dòng)態(tài)狀態(tài)顯示
vawin.c中主要是負(fù)責(zé)顯示界面中的一些動(dòng)態(tài)的變量,如宏變量顯示等。
通過(guò)上述兩步,畫(huà)面已經(jīng)可以顯示出一個(gè)畫(huà)面的框架,現(xiàn)在需要將他們添加入軟件中,便可以通過(guò)軟件調(diào)用出我們所制作的畫(huà)面。
vadailog.c文件中主要包括了一些宏變量等變量的顯示,應(yīng)為宏變量不同文字顯示,需要根據(jù)宏變量的變化適時(shí)刷新。
void vagrinding_GRHMI(short cys,short cxs)//設(shè)置畫(huà)面變量顯示
softkey.c 中主要是包括了軟按鍵的排序,畫(huà)面按鈕的功能
打開(kāi)softkey.c文件, 出現(xiàn)如下顯示:
void ll_init0(void);
void ll_init1(void);
void ll_init2(void);
void ll_init3(void);
……
void ll_init12(void);
如上顯示的函數(shù)中使畫(huà)面的軟件函數(shù) void ll_init1(void)- void ll_init12(void);為不同的軟件按鈕層次所對(duì)應(yīng)的函數(shù),每一個(gè)函數(shù)對(duì)應(yīng)一個(gè)軟件層。這個(gè)函數(shù)可以添加,也可以直接在函數(shù)中編輯。如下圖中所示的,在 void ll_init1(void)函數(shù)中添加一個(gè)畫(huà)面。一個(gè)畫(huà)面存在10個(gè)軟按鍵,我們選擇一個(gè)空著的軟按鍵作為該畫(huà)面選擇的按鍵。
把win_test畫(huà)面插入在SOFT_F6按鍵,對(duì)應(yīng)的畫(huà)面上的第6個(gè)軟按鍵。
temp=(LLLnode*)malloc(sizeof(LLLnode));//這里為一個(gè)temp零時(shí)的結(jié)構(gòu)體聲明空間。
temp->ll_next=0;//
temp->ll_WinKey=SOFT_F6;//畫(huà)面的按鍵編號(hào)為F6。
temp->ExeFunc=win_test;//選擇該畫(huà)面的運(yùn)行函數(shù),在這里是我們的畫(huà)面函數(shù),win_test。
temp->IndexFunc=0;//頁(yè)面跳轉(zhuǎn)選擇,這里為0,可以填寫(xiě)一個(gè)。
temp->ll_index=0x01;//當(dāng)前頁(yè)面軟件所屬的層次。
temq->ll_next=temp;
temq=temp;
通過(guò)上述的過(guò)程,win_test就可以被第一層次的第6個(gè)軟按鍵所調(diào)用。然后,可以編輯軟按鍵所顯示的字符或者圖形。
主要是畫(huà)面中的輸入設(shè)定,在 input中設(shè)定輸入?yún)?shù)的宏變量值,輸入方式等。
打開(kāi)input.c文件,編輯輸入函數(shù),如下所示:
void input_grinding(void)
{struct odbst status;// 聲明一個(gè)狀態(tài)結(jié)構(gòu)體
double MacroValue=0;// 聲明一個(gè)雙字型變量unsigned short nMacroNum=0;// 聲明一個(gè)無(wú)符號(hào)短型變量
cnc_statinfo(&status);//讀取系統(tǒng)狀態(tài)到status中
if(status.aut==0 || status.emergency==0 )//判斷當(dāng)前狀態(tài)
WinRiver Compiler
作用:
源文件到最終文件生成的過(guò)程由 WinRiver Compiler直接編譯完成。
MakeFile:
編譯所需要的相關(guān)內(nèi)容定義都在批處理文件Makefile中,執(zhí)行時(shí)只需輸入nmake.exe命令即可。
目標(biāo)文件:最終文件為存儲(chǔ)卡文件格式(.mem)
實(shí)際使用:在 NCguide中,復(fù)制 DLL文件到NCguide文件夾;在實(shí)際CNC系統(tǒng)時(shí),用CF卡復(fù)制MEM文件到系統(tǒng)F-ROM,顯示界面效果如圖5所示。
圖5 界面樣式
利用 C語(yǔ)言執(zhí)行器提供的順序控制把用C語(yǔ)言設(shè)計(jì)的人機(jī)界面嵌入到C語(yǔ)言執(zhí)行器系統(tǒng)中, 最終把特有的磨床功能模塊集成到C語(yǔ)言執(zhí)行器系統(tǒng)中,形成了適合于磨床的操作系統(tǒng)。操作人員可以很方便地選擇加工程序,并進(jìn)行參數(shù)的編輯,而無(wú)須修改工件加工程序,還可以隨時(shí)得到加工過(guò)程中的各種狀態(tài)信息,實(shí)現(xiàn)數(shù)控機(jī)床的監(jiān)控和操作。這樣,不僅擴(kuò)展了數(shù)控系統(tǒng)的使用范圍,簡(jiǎn)化了操作,提高了勞動(dòng)生產(chǎn)率, 而且還可`以為機(jī)床的維護(hù)提供大量的有價(jià)值的參考信息。