INTERRUPT … DECL … WHEN … DO … :聲明中斷
對于定義的事件,例如輸入,控制中斷當前程序并處理定義的子程序。事件和子程序用INTERRUPT…DECL,WHEN SDO定義。子程序完成后,中斷的程序?qū)⒃谥袛帱c繼續(xù)。異常:RESUME。由中斷調(diào)用的子程序稱為中斷程序。
運行動作不中斷運行和準備好的機器人運動通常不會被中斷打斷。與中斷程序并行,機器人繼續(xù)執(zhí)行主程序中已經(jīng)準備好的所有動作。
如果在此期間中斷程序被完全處理,則主程序在沒有移動停止的情況下繼續(xù),即在沒有延長處理時間的情況下。
最大數(shù)量/BRAKE最多可以同時聲明64個中斷。中斷的聲明可以隨時被新的聲明覆蓋??梢赃x擇使用BRAKE聲明中斷。BRAKE語句在檢測到聲明的中斷時立即執(zhí)行。這意味著當進入中斷程序時,制動過程已經(jīng)開始。
?
語法
GLOBAL | 可選 無 GLOBAL > 只在程序和下級程序中已知 有 GLOBAL > 在上級程序中同樣已知 |
PRIO | 中斷的優(yōu)先級和“編號” 1 = 最高優(yōu)先級,128 = 最低優(yōu)先級 通過系統(tǒng)和附加的工藝程序包,已使用相應(yīng)的中斷。 已聲明的中斷可通過變量顯示 ($RINT_LIST[]) 確定。 |
條件 | 布爾變量的邊沿變化 (FALSE > TRUE, TRUE > FALSE) 布爾運算的邊沿變化 比較的邊沿變化 ("$COUNT_I[31]>=5") |
中斷程序 | 全局或局部子程序(中斷例程)。 示例:INTERRUPT DECL 23 WHEN NOT $IN[703] DOSAFE_Start_SPALT() |
示例1
? 如果$IN[12]為true,則聲明優(yōu)先級為23的中斷調(diào)用子程序UP1。參數(shù)20和VALUE被傳遞給子程序。
? INTERRUPT DECL 23 WHEN $IN[12]==TRUE DO UP1(20,VALUE)
? 示例2
? 在編程的路徑上有兩個物體,其位置由連接到輸入端6和7的兩個傳感器檢測。之后,應(yīng)接近確定的兩個位置。
? 為此,將兩個檢測到的位置存儲為點P_1和P_2。在主程序的第二部分中,將探討這些要點。
? 當機器人控制器檢測到用INTERRUPT、DECL、When…DO定義的事件時,它總是將當前機器人位置保存在系統(tǒng)變量$AXIS_INT(特定于軸)和$POS_INT(笛卡爾)中。
? 主要方案:
? DEF PROG()
? ...? INTERRUPT DECL 10 WHEN $IN[6]==TRUE DO UP1()?
? INTERRUPT DECL 20 WHEN $IN[7]==TRUE DO UP2()?
? ...?
? INTERRUPT ON
? LIN START?
? LIN END?
? INTERRUPT OFF?
? LIN P_1
? LIN P_2?
? ...? END
? 本地中斷程序1:
? DEF UP1()
? P_1=$POS_INT?
? END
? 本地中斷程序2:
? DEF UP2()
? P_2=$POS_INT?
? END
? ?INTERRUPT ON/OFF: 啟用或禁用中斷
? 此語句啟用或禁用中斷。
? 在聲明之后,中斷最初處于非活動狀態(tài)。中斷必須被激活,這樣它才能對定義的事件做出響應(yīng)。
? INTERRUPT Aktion
?
Aktion | ?ON:激活中斷。 ? ?OFF:禁用中斷。 |
Nummer | 類型:INT ? 要引用操作的中斷的編號(=優(yōu)先級)。 ? 數(shù)字可以省略。在這種情況下,ON或OFF指的是所有聲明的中斷。 |
同時,最多可以有32個中斷處于活動狀態(tài)。應(yīng)特別注意: ?如果INTERRUPT ON省略了該數(shù)字,則所有聲明的中斷都將變?yōu)榛顒又袛?。但是,不得超過允許的32個數(shù)字。
? ?當觸發(fā)器調(diào)用子程序時,只要子程序尚未映射,它就算作活動中斷。
? 如果中斷聲明是一個包含布爾變量的事件,例如。B.定義的輸入:
? ?在這種情況下,中斷是通過更改狀態(tài)來觸發(fā)的,例如$In[x]==通過從FALSE更改為TRUE來觸發(fā)。在INTERRUPT ON的情況下,狀態(tài)必須不存在,因為這樣中斷就不會被觸發(fā)。
? ?此外,在這種情況下必須注意:狀態(tài)變化必須最早根據(jù)INTERRUPT ON執(zhí)行插值時鐘。
? (這可以通過在INTERRUPT ON后編程WAIT SEC 0.012來實現(xiàn)。如果不需要提前停止,也可以在WAIT SEC前編程CONTINUE。)
? 原因是INTERRUPT ON需要一個插值時鐘(=12ms),直到中斷被實際激活。如果狀態(tài)事先發(fā)生變化,則中斷無法檢測到變化。
? 示例1
? 優(yōu)先級為2的中斷被激活。(中斷必須已聲明。)
? INTERRUPT ON 2
? 示例2
? 就硬件而言,在使用粘合劑的過程中會執(zhí)行非卷筒紙忠實的緊急停止。通過程序停止施膠,并且在釋放(通過輸入10)之后將膠槍重新定位在幅材上。
? DEF PROG()
? ...? INTERRUPT DECL 1 WHEN $STOPMESS DO STOP_PROG()
? LIN P_1
? INTERRUPT ON
? LIN P_2
? INTERRUPT OFF
? ... END
? DEF STOP_PROG()
? BRAKE F
? GLUE=FALSE
? WAIT FOR $IN[10]
? LIN $POS_RET
? GLUE=TRUE
? END
? ? INTERRUPT DISABLE/ENABLE:鎖定或釋放中斷
? 此語句鎖定或釋放活動中斷。
? 行為:
? 當定義的事件d發(fā)生時,鎖定的中斷不響應(yīng)。h.它不調(diào)用已定義的子程序。然而,機器人控制器會記住事件已經(jīng)發(fā)生。當中斷再次被釋放時,它隨后會對事件做出響應(yīng)。
? 示例1
? 圖中所示過程的先決條件是中斷已聲明并處于活動狀態(tài):
? INTERRUPT DECL 1 WHEN $IN[7]==TRUE DO UP1()
? ... INTERRUPT ON 1
? 1 中斷被鎖定。
? 2 定義的事件發(fā)生:輸入7變?yōu)門RUE。
? ? ?中斷沒有響應(yīng),因為它被鎖定了。
? 3 再次釋放中斷。
? ? ?它響應(yīng)并調(diào)用定義的子例程。
? 4 ?輸入7再次變?yōu)镕ALSE。
? 示例2
? 圖中所示過程的先決條件是中斷已聲明并處于活動狀態(tài):
? INTERRUPT DECL 1 WHEN $IN[7]==TRUE DO UP1()
? ... INTERRUPT ON 1
? 1中斷被鎖定。
? 2定義的事件發(fā)生:輸入7變?yōu)門RUE。
? 中斷沒有響應(yīng),因為它被鎖定了。
? 3輸入7再次變?yōu)镕ALSE。
? 4再次釋放中斷。
? 它響應(yīng)并調(diào)用定義的子例程。這就是$IN[7]是否不再為真。決定性因素是定義的事件在中斷被鎖定時(至少)發(fā)生過一次
? BRAKE:?從中斷程序中停止機器人
? 制動器停止機器人。
? BRAKE只能在中斷程序或中斷聲明中使用。
? 在中斷聲明中使用BRAKE提供了這樣的優(yōu)點,即在檢測到中斷時立即啟動制動響應(yīng)。制動反應(yīng)不僅在進入中斷程序并用制動器處理線路后才開始。這意味著制動響應(yīng)獨立于解釋器。
? 在機器人停止之前,中斷程序不會繼續(xù)。一旦中斷程序完成,機器人繼續(xù)移動。
? BRAKE?
? 語法:
? ? BRAKE; STOP 2
? ? BRAKE F; STOP 1
? 語法:
? RESUME
? RESUME 只允許用于中斷程序中。
? RESUME 通常與BRAKE 一起編程。
? ? 實例
? 機器人應(yīng)該在軌道上搜索零件。該部件由輸入端15處的傳感器檢測。在找到零件后,機器人不應(yīng)繼續(xù)到軌道的終點,而是返回到中斷位置并拾取零件。然后,主要方案應(yīng)該繼續(xù)下去。
? 主程序PROG():
? DEF PROG()
? INI
? ...? INTERRUPT DECL 21 WHEN $IN[15] DO FOUND()
? PTP HOME?
? ...? SEARCH() ...?
? END
? 使用制動和恢復(fù)停止移動,
? 基本上在一個子程序中。因此,搜索路徑不是直接在主程序中編程的,而是在子程序search()中編程的。
? 帶有搜索路徑的子程序SEARCH():
? DEF SEARCH()
? INTERRUPT ON 21
? SPLINE
? ? SPL START_SEARCH?
? ? SPL IN_BETWEEN
? ? SPL END_SEARCH?
? ENDSPLINE
? WAIT FOR TRUE
? ... END
? 前導(dǎo)指針不得位于RESUME語句時聲明當前中斷的級別。為了防止這種情況發(fā)生,WAIT FOR TRUE(等待為真)觸發(fā)提前停止。
? 中斷程序FOUND():
? DEF FOUND()?
? INTERRUPT OFF 21
? BRAKE?
? LIN $POS_INT?
? ... ; RESUME
? END
? 制動過程使機器人稍微遠離觸發(fā)中斷的地方。LIN$POS_INT使機器人返回到觸發(fā)中斷的位置。
? 這里使用了運動類型LIN,因為中斷程序不能包含樣條曲線運動。
? LIN$POS_INT之后,機器人抓取零件。(示例中此處未編程。)
? RESUME使主程序在夾持零件后繼續(xù)。如果沒有RESUME,子程序SEARCH()將在END之后繼續(xù)。
? 大眾版本下
? ? global interrupt decl 23 when $in[611]==true do zs1()
? global interrupt decl 25 when $in[611]==true do zs2()
? case 204
? see=$nullframe
? see1=$nullframe
? see2=$nullframe
? see2.z=80
? if par10 then
? $out[611]=true
? wait sec 1
? interrupt on 23
? wait sec 0
? see1=$pos_act
? lin see1
? ? interrupt on 25
? ? endif
? def zs2()
? $out[611]=false
? $out[580]=false
? interrupt off 25
? brake
? see=$pos_act
? lin $pos_int
? lin_rel {x -15}
? lin_rel {z -68}
? wait sec 0.2
? $out[579]=true
? lin_rel {z 70}
? see1=$pos_int
? lin see
? end
? ? ? 審核編輯:黃飛
?
評論