技術(shù)文章
基于PMAC的數(shù)控程序的實(shí)現(xiàn)
閱讀:113 發(fā)布時(shí)間:2020-8-11在FANUC-0I數(shù)控系統(tǒng)仿真界面中,某些G、M、T等代碼需要轉(zhuǎn)換成可供PMAC識(shí) 別的數(shù)控代碼。基于PMAC加工中心數(shù)控系統(tǒng)利用VB 6.0開(kāi)發(fā)數(shù)控G代碼編譯程序處理 模塊,主要用于FANUC-0I數(shù)控系統(tǒng)仿真界面中G代碼的轉(zhuǎn)換,現(xiàn)以基于PMAC的宏程 序編程在數(shù)控機(jī)床上的應(yīng)用為例進(jìn)行介紹。
1. FANUC系統(tǒng)宏程序
FANUC系統(tǒng)提供兩種用戶(hù)宏程序,即用戶(hù)宏程序功能A和用戶(hù)宏程序功能B[31]。由 于用戶(hù)宏程序功能A的宏程序需要使用G65Hm格式的宏指令來(lái)表達(dá)各種數(shù)學(xué)運(yùn)算和邏輯 關(guān)系,極不直觀,且可讀性非常差,因而導(dǎo)致在實(shí)際工作中很少人使用它[31]。由于絕大部 分的FANUC系統(tǒng)都支持用戶(hù)宏程序功能B,因而重點(diǎn)介紹用戶(hù)宏程序功能B的相關(guān)知識(shí)。
1.1變量及賦值
格式:# i= # j+ # k;
FANNC系統(tǒng)宏程序的變量是用變量符號(hào)#和后面的變量號(hào),變量號(hào)是用以區(qū)分各 變量。=就是變量的賦值指令,=左邊是被賦值的變量,=右邊是一個(gè)數(shù)值表達(dá)式[32]。 表達(dá)式中包含的運(yùn)算符有:+、-、*、/、[]以及一些數(shù)學(xué)運(yùn)算函數(shù),也可以包括變量。常 用的數(shù)學(xué)運(yùn)算函數(shù)有:正弦SIN[]、正切TAN[]、平方根SQRT[]、余弦COS[]、反正切 ATAN[]、或OR、反余弦ACOS[]、與AND[]、反正弦ASIN[]、異或XOR和值函 數(shù)ABS[]等。
1. 2無(wú)條件轉(zhuǎn)移GOTO語(yǔ)句
格式:GOTO n;
n是目標(biāo)程序段的標(biāo)號(hào),本指令將無(wú)條件地轉(zhuǎn)移到標(biāo)有順序號(hào)(行號(hào))n的程序段[32];
1.3條件轉(zhuǎn)移指令IF語(yǔ)句
格式1: IF [<條件表達(dá)式>]GOTO n;
格式2: IF [<條件表達(dá)式>]THEN;
[]中是一個(gè)條件表達(dá)式,條件表達(dá)式中可以包含的運(yùn)算符有:等于EQ、不等于NE、 大于GT、大于等于GE、小于LT、小于等于LE[33]。如果[]中的條件表達(dá)式成立,格式1 中程序?qū)⑥D(zhuǎn)移(跳轉(zhuǎn))到標(biāo)有順序號(hào)(行號(hào))n的程序段,否則,順序執(zhí)行下一條指令, 如圖3-3所示[33]。如果[]中的條件表達(dá)式成立,格式2中程序?qū)?zhí)行預(yù)先的宏程序語(yǔ) 句,而且只執(zhí)行一個(gè)宏程序語(yǔ)句。
1. 4循環(huán)指令WHILE
格式: WHILE [<條件表達(dá)式>] DO m
……
END m
[]里是程序執(zhí)行的判斷條件。DO與END命令后的m是循環(huán)編號(hào);二者之間的程序是 被循環(huán)執(zhí)行的語(yǔ)句,其中允許嵌套另一個(gè)WHILE循環(huán)。如果[]中的判斷條件成立,DO 與END命令之間的程序會(huì)不斷運(yùn)行,否則,將運(yùn)行END命令后面的程序,如圖3-4所示。
1.5嵌套
格式1:D0循環(huán)可以多重嵌套,如圖3-5所示。 格式2:條件轉(zhuǎn)移可以跳出循環(huán)的外面,如圖3-6所示。
2.基于PMAC的數(shù)控宏程序的實(shí)現(xiàn)
在基于PMAC構(gòu)成的數(shù)控系統(tǒng)中,PMAC將G代碼作為特殊子程序來(lái)調(diào)用。例如在 運(yùn)動(dòng)程序中遇到G65代碼,它將認(rèn)為這是調(diào)用子程序Program 1000中N65000程序段。 為了增加程序的可讀性,我們采用GOSUB{數(shù)值}命令,此命令使運(yùn)動(dòng)程序跳轉(zhuǎn)型到同一 運(yùn)動(dòng)程序段中{數(shù)值}的行號(hào)(N或0),當(dāng)程序遇到GOSUB后的RETURN命令后馬 上返回。CALL {數(shù)值}命令與此相似,只是它可以跳轉(zhuǎn)到另一個(gè)運(yùn)動(dòng)程序,比如CALL 7 將執(zhí)行PROG 7并返回,可用于用戶(hù)宏程序功能A的宏程序G65(或G66)。用戶(hù)宏程序功 能A的宏程序的調(diào)用格式是G65(或G66)P_L_[參數(shù)],其中P值為宏程序的程序號(hào),L 為調(diào)用次數(shù)[34]。
FANUC數(shù)控系統(tǒng)的宏程序在PMAC上無(wú)法實(shí)現(xiàn)直接運(yùn)行,因此需要將宏程序轉(zhuǎn)化成 PMAC能識(shí)別的代碼格式。
2.1進(jìn)行指令替換,
PMAC能識(shí)別的加工程序指令和FANUC機(jī)床的編程語(yǔ)言稍有差別。為適應(yīng)機(jī)床操作 人員的習(xí)慣,需要將機(jī)床操作人員輸入的程序中的某些指令替換成PMAC能識(shí)別的指令, 轉(zhuǎn)換后再進(jìn)行下載、運(yùn)行。
例如“EQ”需要替換成“=”,“#”需要替換成“vall”,這一過(guò)程通過(guò) VB 軟件來(lái)進(jìn)行,
程序代碼如下:
stra1 = Replace(stra1, "EQ", "=", 1, -1, 0)
stra1 = Replace(stra1, "#", "vall", 1, -1, 0)
另外還有一些不能通過(guò)替換直接修改的指令,如循環(huán)指令 WHILE,在 FANUC 機(jī)床
中,用法為:
WHILE [ <條件表達(dá)式>] DO m
……
END m
在 PMAC 中應(yīng)用需要改為:
WHILE [<條件表達(dá)式>]
..….
END WHILE
故需要vb軟件將DO m刪除,將ENDm替換為END WHILE,程序的嵌套通過(guò)距離 近的的未配對(duì)的WHILE和END WHILE來(lái)實(shí)現(xiàn)。
2.2增加程序的可讀性
PMAC中參數(shù)的存儲(chǔ)變量都是P, Q等固定字母加數(shù)字組成的,例如p201,因此變量 名稱(chēng)沒(méi)有特定含義,加工程序易讀性較差,VB軟件在進(jìn)行加工程序處理時(shí)可自動(dòng)在加工 程序之前加上定義,增強(qiáng)可讀性,例如定義變量p201為vail:
Text2.Text = "#define val1 p201" & vbCrLf & Text2.Text
為了 PMAC能夠識(shí)別程序代碼,需要按照PMAC程序代碼格式對(duì)程序進(jìn)行轉(zhuǎn)換。例 如在經(jīng)過(guò)校驗(yàn)的運(yùn)動(dòng)程序開(kāi)頭添加清空緩沖區(qū)指令,把程序號(hào)00007轉(zhuǎn)換為open prog 7 clear,在程序結(jié)尾處加上關(guān)閉緩沖區(qū)指令’’close”,VB程序代碼如下:
t1 (0) = "define tbuf 1" & vbCrLf & "open prog " & zzz & " clear"
Text2.Text = t1 (0) & Text2.Text & vbCrLf & " close "
對(duì)于PMAC可以直接識(shí)別的代碼,把原程序代碼進(jìn)行復(fù)制即可。例如G、M、T、D 代碼,+、-、*、/運(yùn)算代碼,SIN()、COS〇等數(shù)學(xué)運(yùn)算函數(shù)代碼,X、Y、Z等代碼[2]。
[1] VB軟件界面設(shè)計(jì)
為對(duì)上述構(gòu)想進(jìn)行程序驗(yàn)證,采用VB軟件編寫(xiě)數(shù)控界面。左上角的窗口用來(lái)給操作 人員輸入程序。右上角的窗口用來(lái)顯示轉(zhuǎn)換后的PMAC能識(shí)別的程序。點(diǎn)擊“宏程序橢圓” 轉(zhuǎn)換按鈕,在PMAC程序窗口出現(xiàn)轉(zhuǎn)換后的結(jié)果,即PMAC可識(shí)別的控制卡代碼[35]。如 圖3-7所示。
下面列出實(shí)現(xiàn)宏程序功能的關(guān)鍵VB源代碼:
Private Sub 宏程序橢圓_Click()
stra1 = Text1(0).Text
hcxpd = 0
If (InStr(stra1, "#")) Then hcxpd = 1
stra1 = Replace(stra1, "#", " vall ", 1, -1, 0)
……
stra1 = Replace(stra1, "]", ")", 1, -1, 0)
t1 = Split(stra1, ";")
t2 = Split(t1(0), " ")
n = t2(1)
cxh = Replace(n, "0", "", 1, -1, 0)
zzz = Replace(n, "0", "", 1, -1, 0)
t1(0) = "define tbuf 1" & vbCrLf & "open prog " & zzz & " clear"
Text2.Text = ""For i = 1 To ( UBound (t1) - 1)
t1(i) = Mid(t1(i), 8, 255)
Text2.Text = Text2. Text & vbCrLf & t1(i)
Next i
Text2.Text = t1(0) & Text2. Text & vbCrLf & "close"
If hcxpd = 1 Then
For i = 1 To 10
Text2.Text = "#define val" & i & " p20" & i - 1 & vbCrLf & Text2.Text
Next i
For i = 11 To 12
Text2.Text = "#define val" & i & " p2" & i - 1 & vbCrLf & Text2.Text
Next i
End If
End Sub
2.4將宏程序下載到PMAC中和運(yùn)行程序
下載PMAC程序,需要先將轉(zhuǎn)換后的G代碼程序存入文件中,文件后綴pmc,之后 通過(guò)PmacDownloadA指令將上述程序下載到PMAC中,“Download代碼”按鈕可以將轉(zhuǎn) 換后的程序下載到PMAC中。
點(diǎn)擊“運(yùn)行”按鈕,通過(guò)PmacGetResponseA指令將運(yùn)動(dòng)命令下載到PMAC中,即可
實(shí)現(xiàn)PMAC的宏程序加工。其中關(guān)鍵的VB源代碼如下:
retum_value = PmacGetResponseA(DeviceNumber, response, 255, ”#lb” & cxh & ”r”)其 中“cxh”為程序號(hào)。
本文由伯特利數(shù)控整理發(fā)表文章均來(lái)自網(wǎng)絡(luò)僅供學(xué)習(xí)參考,轉(zhuǎn)載請(qǐng)注明!
相關(guān)內(nèi)容可查閱:主頁(yè)(加工中心)、產(chǎn)品頁(yè)(CNC加工中心)、文章頁(yè)(數(shù)控加工中心)
本文采摘自“基于PMAC的加工中心開(kāi)放式數(shù)控系統(tǒng)研究”,因?yàn)榫庉嬂щy導(dǎo)致有些函數(shù)、表格、圖片、內(nèi)容無(wú)法顯示,有需要者可以在網(wǎng)絡(luò)中查找相關(guān)文章!