Wir wollen einen Knopf bauen, wenn er gedrückt wird, funktioniert das Programm und wenn er nicht gedrückt wird, stoppt das Programm.
Es ist uns egal, ob sich der Roboter im AUTO EXT-Modus oder T2 befindet.
Wir wollen einen Knopf bauen, wenn er gedrückt wird, funktioniert das Programm und wenn er nicht gedrückt wird, stoppt das Programm.
Es ist uns egal, ob sich der Roboter im AUTO EXT-Modus oder T2 befindet.
Wir haben KR 20 R1810-F Roboter.
Und wir wollen eine Aktivierungstaste bauen, um das Programm auszuführen, anstelle der Tasten, die in das SmartPad für die Roboter eingebaut sind.
Wie ist das möglich ?
Und Danke in Voraus
Hallo
Ich bin neu mit KRL und KUKA.
Ich habe ein KRL-Programm geschrieben, in dem der Roboter Koordinaten vom Computer erhält und dann in diese Richtung fährt, und es gibt auch einen Interrupt, der das Timing steuert, und wenn der Roboter Daten erhält, stoppt er die Bewegungsfunktion und nimmt einen neuen Wert an, deshalb ich brauchte einen RESUME .
Ich habe bereits $advance = 0 und habe versucht, den Interrupt auf OFF zu setzen, wenn er steuert, aber nix funktioniert. Können Sie mir bitte helfen ?
Danke
&ACCESS RVP
&REL 1
DEF com()
; Declarations
decl FRAME PE
decl int elements_read
decl bool startedd
startedd = FALSE
bas(#initmov, 0)
eki_hw_iface_init()
; Setup interrupts
interrupt decl 16 when $timer_flag[1]==true do eki_hw_iface_send()
interrupt off 16
wait sec 0.012
PE = {x 0,y 0,z 0,a 0,b 0,c 0}
$BWDSTART=FALSE
$BASE = $NULLFRAME
$TOOL = $NULLFRAME
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS(#PTP_PARAMS,60)
$H_POS=XHOME
ptp XHOME
$IPO_MODE = #BASE
; Loop forever
$advance = 5
loop
if startedd == False then
starttimer()
startedd = True
endif
eki_hw_iface_move()
endloop
end
def eki_hw_iface_init()
decl eki_status eki_ret
eki_ret = eki_init("XML_Client")
eki_ret = eki_open("XML_Client")
end
def starttimer()
$timer[1] = -200 ; Time in [ms] before first interrupt call
$timer_stop[1] = false ; Start timer 1
interrupt on 16
end
def eki_hw_iface_send()
decl eki_status eki_ret
decl real vel_percent
if $flag[1] then
$BASE = $NULLFRAME
eki_ret = eki_setreal("XML_Client", "Robot/Data/ActPos/X", $POS_ACT.X)
eki_ret = eki_setreal("XML_Client", "Robot/Data/ActPos/Y", $POS_ACT.Y)
eki_ret = eki_setreal("XML_Client", "Robot/Data/ActPos/Z", $POS_ACT.Z)
eki_ret = eki_setreal("XML_Client", "Robot/Data/ActPos/A", $POS_ACT.A)
eki_ret = eki_setreal("XML_Client", "Robot/Data/ActPos/B", $POS_ACT.B)
eki_ret = eki_setreal("XML_Client", "Robot/Data/ActPos/C", $POS_ACT.C)
eki_ret = eki_setreal("XML_Client", "Robot/Data/ActPos/G", $VEL_MA.CP)
; interface state
eki_ret = eki_checkbuffer("XML_Client", "Robot/Data/X")
; Send xml structure
if $flag[1] then ; Make sure connection hasn't died while updating xml structure
eki_ret = eki_send("XML_Client", "Robot")
endif
endif
; Set timer for next interrupt [ms]
$timer[1] = -10 ; ~10 ms for above send + 10 ms interrupt timer -> ~50 Hz state transmission
if $flag[1] then ; If connection alive
resume
endif
end
deffct int eki_hw_iface_get(PE :out)
decl eki_status eki_ret
decl FRAME PE
PE = {x 0,y 0,z 0,a 0,b 0,c 0}
if not $flag[1] then
return 0
endif
eki_ret = eki_checkbuffer("XML_Client", "Robot/Data/X")
if eki_ret.buff <= 0 then
return 0
endif
eki_ret = eki_getreal("XML_Client", "Robot/Data/X", PE.x)
eki_ret = eki_getreal("XML_Client", "Robot/Data/Y", PE.y)
eki_ret = eki_getreal("XML_Client", "Robot/Data/Z", PE.z)
eki_ret = eki_getreal("XML_Client", "Robot/Data/A", PE.a)
eki_ret = eki_getreal("XML_Client", "Robot/Data/B", PE.b)
eki_ret = eki_getreal("XML_Client", "Robot/Data/C", PE.c)
return 1
endfct
def eki_hw_iface_move()
decl FRAME PE , PO
decl int elements_read
interrupt off 16
$advance = 0
$BASE = $NULLFRAME
PO.X = $POS_ACT.X
PO.Y = $POS_ACT.Y
PO.Z = $POS_ACT.Z
PO.A = $POS_ACT.A
PO.B = $POS_ACT.B
PO.C = $POS_ACT.C
$BASE = PO
elements_read = eki_hw_iface_get(PE) ; Get new command from buffer if present
interrupt on 16
LIN PE
$BASE = $NULLFRAME
END
Alles anzeigen