Hallo,
ich habe ein Problem mit der Genauigkeit des Triggerbefehls in Verbindung mit RSI. Der Roboter führt eine Sonde und fährt damit einen rechteckige Ebene von ca. 200 x 300 mm Zeile für Zeile ab mit einem Zeilenvorschub von 0.5 mm.
Nun soll "während der Fahrt" ein Signal über RSI sowie über die IO Ebene per Feldbus gesetzt werden.
Das Problem ist allerdings, dass der Schaltvorgang in jeder Zeile zu einem anderen Zeitpunkt kommt, die Abweichung sind nicht groß, aber doch problematisch. Geteached werden für den ganzen Prozess 5 Punkte, nämlich Start, TriggerOn, TriggerOff, End für eine Zeile und dann noch der Endpunkt für die letzte Zeile. Der Vorschub wird dann mittels Toolkorrektur realisiert.
Die Ein und Ausschaltpunkte werden benötigt um den Roboter beschleunigen und abbremsen zu lassen, da zwischen TriggerOn und TriggerOff eine konstante Geschwindigkeit benötigt wird.
Habt ihr eine Idee wie man das ganze genauer hinbekommen könnte?
Anstatt das Tool zu korrigieren hab ich überlegt auch mit überschleifen zu arbeiten, aber dabei kann man wohl keine IOs schalten.
Schaubild
Start........................TriggerOn................TriggerOff...................End
.
.
.
.
.
.
EndZeile
Hier der Code dazu
iDistStart =-VLenEe6pos( EXBOREREF_TRIG_ON, EXBOREREF_END )
iDistEnd =-VLenEe6pos( EXBOREREF_TRIG_OFF, EXBOREREF_END )
LOOP
CONTINUE
IF (((TOOL_CORR.Z-rStep)>-rHoehe) AND PC_RDY AND TSK_ACK ) THEN
EEMove( EXBOREREF_START, #ELIN)
TRIGGER WHEN PATH=iDistStart DELAY=0 do StartAll() PRIO=1
TRIGGER WHEN PATH=iDistEnd DELAY=0 do StopAll() PRIO=1
EEMove( EXBOREREF_END, #ELIN)
TOOL_CORR.Z = TOOL_CORR.Z - rStep
ELSE
goto ende
ENDIF
ENDLOOP
ende:
TOOL_CORR_ON = FALSE;
TOOL_CORR = $NULLFRAME
EEMove( EXBOREREF_START, #ELIN)
RETURN PC_RDY
ENDFCT
DEF StartAll()
$SEN_PINT[1] = $SEN_PINT[1]+1
F_RB_BP_ON=FALSE
END
DEF StopAll()
F_RB_BP_ON=TRUE
END
Alles anzeigen