![圖片[1]-POWERMILL宏查詢工具。“流程控制”,IF語句。-機械資源網(wǎng)](http://www.58205.cn/wp-content/uploads/2025/10/20251025193311622-wxsync-2025-10-24ed850d770180b7dffcd6daffe32709.jpeg)
IF語句
IF語句是當(dāng)執(zhí)行條件符合時,執(zhí)行一系列命令框中的命令語句。
基本的語句結(jié)構(gòu)為:
IF<條件表達(dá)式> {
//條件表達(dá)式成立,執(zhí)行{}內(nèi)代碼:命令A(yù)
命令A(yù)
}
//條件表達(dá)式為假,繼續(xù)執(zhí)行命令B
命令B
【例】如果希望進(jìn)行一條刀具路徑的的計算,但不希望計算已經(jīng)計算過的刀具路徑,可以如下:
//如果激活的刀具路徑已經(jīng)計算
IF NOT Computed {
EDIT TOOLPATH $TpName CALCULATE
}
在這具命令中,必須使用大括號,并且大括號必須進(jìn)行正確的定位。例如,以下的語句是無效的:
IF(radius==3) PRINT “Invalid radius”
正確的寫法如下:
IF(radius==3) {
PRINT “Invalid radius”
}
注意:第一個大括號必須在最后一個字母的右側(cè),它們之間有個空格,并且與IF同行。第二個大括號必須單獨一行,并且懸置最后。
IF-ELSE語句
如果條件表達(dá)式成立,先執(zhí)行命令A(yù),再執(zhí)行命令C
如果條件表達(dá)式不成立,先執(zhí)行命令B,再執(zhí)行命令C
基本的語句結(jié)構(gòu)為:
IF <條件表達(dá)式> {
命令A(yù)
} ELSE {
命令B
}
命令C
【例】如果刀具D12存在,則激活刀具,否則創(chuàng)建刀具再激活
IF entity_exists(‘Tool’,’D12′) {
ACTIVATE Tool “D12”
} else {
CREATE TOOL “D12” ENDMILL
EDIT TOOL ; DIAMETER “12”
}
IF-ELSEIF-ELSE語句
F-ELSEIF-ELSE語句在滿足條件時執(zhí)行第一個IF的系列命令,當(dāng)?shù)谝粋€條件不滿足,而第二個條件滿足時,執(zhí)行ELSEIF系列命令,當(dāng)所有的條件都不滿足時,執(zhí)行ELSE后的系列命令。
基本語句結(jié)構(gòu)為:
IF <條件表達(dá)式1> {
命令A(yù)
} ELSEIF<條件表達(dá)式2> {
命令B
} ELSE {
命令C
}
命令D
如果條件表達(dá)式1結(jié)果為真,將執(zhí)行命令A(yù),接著執(zhí)行命令D。如果條件表達(dá)式1結(jié)果為假,
而條件表達(dá)式2結(jié)果為真時,將執(zhí)行命令B后,接著執(zhí)行命令D。
如果條件表達(dá)式1結(jié)果為假,和條件表達(dá)式2結(jié)果為假時,將執(zhí)行命令C后,接著執(zhí)行命令D。
注意:ELSE是一個可選的語句結(jié)構(gòu),在語句中可以數(shù)個ELSEIF語句塊,但只能為一個ELSE語句塊。
SWITCH語句
當(dāng)判斷一系列有可能的數(shù)值,并決定使用不同的操作命令時,可以使用SWITCH枚舉語句。
SWITCH語句從根據(jù)比較數(shù)值的匹配情況,從而確定哪些命令將被執(zhí)行。
基本的語法結(jié)構(gòu)為:
SWITCH ?變量 {
CASE(變量A)
命令A(yù)
CASE(變量A)
命令A(yù)
DEFAULT
命令C
}
命令D
如果條件A為真,將執(zhí)行命令A(yù),B,C和D。如果條件B為真,將執(zhí)行命令B,C和D。如果條件A和條件B都為假,將執(zhí)行命令C和D。
注意:當(dāng)在SWITCH語句中發(fā)現(xiàn)具有匹配的情況時,將執(zhí)行剩下全部CASE語句中的命令。如果不希望執(zhí)行全部的CASE語句塊中的命令,可以使用BREAK命令跳出語句塊。
可以同時擁有多個CASE語句塊,但只能有一個DEFAULT語句塊。
【例】:
FUNCTION Main() {
STRING TName=”
STRING ARRAY Opts[] = {“全部刀路”,”激活刀路”,”已選刀路”}
INT C = INPUT CHOICE $Opts “選擇操作模式(過切計算刀路):”
SWITCH $C {
CASE 0
FOREACH Toolpath IN folder(‘TOOLPATH’) {
$TName=Toolpath.name
CALL myfunction1(TName)
}
BREAK
CASE 1
CALL myfunction1(TName)
BREAK
CASE 2
ENTITY LIST $Selected_Toolpaths = INPUT ENTITY MULTIPLE toolpath “選擇欲過切計算的刀具路徑:”
FOREACH Toolpath1 in Selected_Toolpaths {
$TName=toolpath1.name
CALL myfunction1(TName)
}
BREAK
}
}
FUNCTION myfunction1(STRING TName1) {
DIALOGS MESSAGE OFF
DIALOGS ERROR OFF
if TName1!=” {
ACTIVATE Toolpath $TName1
}
EDIT COLLISION TYPE GOUGE
EDIT COLLISION SPLIT_TOOLPATH N
UNDRAW COLLISION
EDIT COLLISION APPLY
DIALOGS MESSAGE ON
DIALOGS ERROR ON
}
FOREACH循環(huán)
FOREACH循環(huán)重復(fù)執(zhí)行每個項目在列表或者數(shù)組中的命令語句塊。
基本語法結(jié)構(gòu):
FOREACH item IN sequence {
命令A(yù)
}
命令B
【例】枚舉刀具路徑,并打印刀具路徑的名稱:
FOREACH Toolpath IN folder(‘Toolpath’) {
PRINT $Toolpath.Name
}
注意:1)item是一個自動創(chuàng)建的變量,并且在循環(huán)中初始化變量類型。
2)sequence是一個列表或者數(shù)組。
3)可以使用BREAK取消循環(huán)(詳情見BREAK語句)
4)可以使用CONTINUE直接跳到下一循環(huán)(詳情見CONTINUE語句)
基本語法結(jié)構(gòu):
WHILE <條件表達(dá)式> {
命令A(yù)
}
命令B
如果條件表達(dá)式為真,則執(zhí)行命令A(yù)將被執(zhí)行。當(dāng)條件表達(dá)式保存為真的時候,命令A(yù)將繼續(xù)被執(zhí)行。當(dāng)條件表達(dá)式為假的時候,命令B將會被執(zhí)行。
【例】PM最小半徑陰影分析
int i=10
while i>2 {
PRINT $i
}
PRINT “這是WHILE用法的簡單例子”
注意:1)可以使用BREAK取消循環(huán)(詳情見BREAK語句)
2)可以使用CONTINUE直接跳到下一循環(huán)(詳情見CONTINUE語句)
DO-WHILE循環(huán)
DO-WHILE循環(huán)和WHILE循環(huán)的區(qū)別是:前者是先執(zhí)行語句塊,再進(jìn)行條件表達(dá)式的真假判斷,而后者是先判斷條件表達(dá)式的真假,再執(zhí)行語句塊。所以,可以說DO-WHILE循環(huán)是“先循環(huán),再判斷”,而WHILE循環(huán)是“先判斷,再循環(huán)”。
基本語法結(jié)構(gòu):
DO {
命令A(yù)
} WHILE <條件表達(dá)式>
命令B
其中,命令A(yù)被執(zhí)行,當(dāng)條件表達(dá)式為真時,命令A(yù)再次被執(zhí)行,直到條件表達(dá)式為假,停止循環(huán),繼續(xù)執(zhí)行命令B。
【例】毛坯重置后,鎖定Z擴展給定值
string prompt=”輸入毛坯擴展的數(shù)值:”
REAL i=0
bool err=0
//如果輸入的不是一個數(shù)值,或者錯誤的值,則繼續(xù)彈出窗口
do {
$i=input $prompt
$err=ERROR i
if err {
$prompt=”請輸入一個數(shù)值:”
} else {
FORM BLOCK
DELETE BLOCK
EDIT BLOCKTYPE BOX
EDIT BLOCK LIMITTYPE MODEL
EDIT BLOCK ALL UNLOCK
EDIT BLOCK RESETLIMIT “0”
EDIT BLOCK RESET
EDIT BLOCK ZMAX LOCK
EDIT BLOCK ZMIN LOCK
EDIT BLOCK RESETLIMIT $i
EDIT BLOCK RESET
BLOCK ACCEPT
DRAW BLOCK
break
}
} while err
注意:1)可以使用BREAK取消循環(huán)(詳情見BREAK語句)
2)可以使用CONTINUE直接跳到下一循環(huán)(詳情見CONTINUE語句)
BREAK關(guān)鍵字
break在循環(huán)體內(nèi),強行結(jié)束循環(huán)的執(zhí)行,也就是結(jié)束整個循環(huán)過程,不在判斷執(zhí)行循環(huán)的條件是否成立,直接轉(zhuǎn)向循環(huán)語句下面的語句。
當(dāng)break出現(xiàn)在循環(huán)體中的switch語句體內(nèi)時,其作用只是跳出該switch語句體。
【例】打印0到10之間的整數(shù)。當(dāng)i等于5的時候,整個循環(huán)被強制結(jié)束!再PowerMILL命令窗口中只能看到打印的數(shù)為:0,1,2,3,4,5
INT i=0
WHILE i<=10 {
PRINT $i
IF i==5 {
BREAK
}
$i=i+1
}
CONTINUE關(guān)鍵字
終止本次循環(huán)的執(zhí)行,即跳過當(dāng)前這次循環(huán)中continue語句后尚未執(zhí)行的語句,接著進(jìn)行下一次循環(huán)條件的判斷。
【例】打印0到10之間的整數(shù)。當(dāng)i等于5的時候,整個循環(huán)被強制結(jié)束!在PowerMILL命令窗口中只能看到打印的數(shù)為:0,1,2,3,4,5,5,5,5……造成了無限循環(huán)。
INT i=0
WHILE i<=10 {
PRINT $i
IF i==5 {
CONTINUE
}
$i=i+1
}
造成這個結(jié)果的原因是:循環(huán)執(zhí)行到CONTINUE的時候,直接跳到了下一次循環(huán),$i=i+1這句沒有被執(zhí)行。可以作如下修改:
INT i=0
WHILE i<=10 {
PRINT $i
$i=i+1
IF i==5 {
CONTINUE
}
}
這樣在PowerMILL命令窗口中只能看到打印的數(shù)為:0到10之間所有的整數(shù)。你也可以再次修改:
INT i=0
WHILE i<=10 {
$i=i+1
IF i==5 {
CONTINUE
}
PRINT $i
}
這時在PowerMILL命令窗口中只能看到打印的數(shù)為:1,2,3,4,6,7,8,9,10,11
RETURN關(guān)鍵字
宏中RETURN語句可以立即終止當(dāng)前的宏循環(huán)。例如,在宏中檢查到有一個錯誤的時候,當(dāng)你不想繼續(xù)其余的命令時,可以使用這個語句結(jié)束循環(huán)。
【例】打印0到10之間的整數(shù)。當(dāng)i等于5的時候,整個循環(huán)被強制結(jié)束!再PowerMILL命令窗口中只能看到打印的數(shù)為:1,2,3,4
INT i=0
WHILE i<=10 {
$i=i+1
IF i==5 {
RETURN
}
PRINT $i
}












控車床課程總結(jié)-2-800x600.png)





頁更新及提取目錄-800x600.png)






暫無評論內(nèi)容