Also ich hab von nem Kunden die Aufgabe bekommen während Automatik rückwärts bis nach Home zu fahren, sobald ein Eingang ansteht.
Das braucht 3 Programme
- Interruptdefinition für einen Eingang mit Aufruf eines Abbruchprogrammes;
- der Aufruf des normalen Unterprogrammes
def Hauptprogramm();
GLOBAL INTERRUPT DECL 25 WHEN $IN[1]==TRUE DO Abbruch()
Unterprogramm ()
end
- Im Unterprogramm den Interrupt einschalten
- Vor jedem für die Rückwärtsfahrt relevanten Punkt über einen Trigger eine Variable mit dem namen des aktuellen Punktes beschreiben. Wichtig ist hierbei die Distancevariable.
0 heist: triggern kurz nach start von dem Punkt
1 heist: kurz vor erreichen des nächsten Punktes
def Unterprogramm ()
INTERRUPT ON 26
TRIGGER WHEN DISTANCE=0 DELAY=0 DO Akt_Pos=#GHP5
PTP GHP5 CONT Vel= 100 % PDAT Tool[1] Base[15]
TRIGGER WHEN DISTANCE=1 DELAY=0 DO Akt_Pos=#GHP6
LIN GHP6 Vel= 2 m/s CPDAT Tool[1] Base[15]
end
- Wenn der Eingang 1 ist wird der Interrupt ausgelöst und das Abbruch () - Programm gestartet.
- sobald das abbruchprogramm läuft durch läuft es selbstständig eine switch in einer repeat die solagen läuft bis die Variable #ENDE heist.
- Es können ohne Probleme auch Funktionsaufrufe, Ausgänge, Eingänge gesetzt/abgefragt werden bei jedem Pu
- Wichtig ist das bei jedem Case ein bestimmter Punkt angefahren und nach erreichen die Variable AKT_POS neu beschrieben wird.
Danach erfolgt durch den Interrupt ein aussprung in das Hauptprogramm.
def abbruch ()
REPEAT
SWITCH AKT_POS
Case #GHP1
PTP GHP1 Vel= 100 % GLOBAL Tool[1] Base[1]
irgendwas ( )
Akt_Pos=#Home_Pos
Case #GHP2
PTP GHP2 Vel= 100 % GLOBAL Tool[1] Base[1]
$OUT[1]=true
AKT_POS=#GHP1
Case #GHP3
LIN GHP2 Vel= 1 m/s GLOBAL Tool[1] Base[1]
Akt_Pos=#GHP2
Case #Home_Pos
PTP HOME Vel= 100 % DEFAULT
Akt_Pos=#ENDE
ENDSWITCH
Until Akt_Pos==#ENDE
end
zu Guter letzt fehlen noch ein paar Einträge in der $Config.dat
- Deklaration von AKT_POS (jeder name eines Punktes muss dort angegeben werden)
- Einzige Einschränkung hierbei ist die maximale Zeilenlänge einer Zeile in der Config, liegt glaub ich bei 400 Zeichen
- Alle Punkte mit denen Rückwärts gefahren werden soll, müssen global in der config definiert werden.
also raus aus der dat vom unterprogramm und rein in die config verschieben
def $config.dat
ENUM POSITION HOME_POS,GHP0,GHP1,GHP2,GHP3,ENDE
DECL POSITION AKT_POS
DECL E6POS XGHP1={X 2659.09595,Y 866.297119,Z -826.614685,A -163.897598,B -3.92666292,C -9.76089096,S 22,T 27,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
DECL E6POS XGHP2={X 2886.66699,Y 383.833008,Z -773.285828,A -166.008499,B -0.164955705,C -1.38541496,S 22,T 27,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
DECL E6POS XGHP3={X 2904.43188,Y 363.410187,Z -564.47467,A -162.226303,B -0.160164803,C -1.38474798,S 22,T 27,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
DECL FDAT FGHP1={TOOL_NO 1,BASE_NO 2,IPO_FRAME #BASE,POINT2[] " "}
DECL FDAT FGHP2={TOOL_NO 1,BASE_NO 2,IPO_FRAME #BASE,POINT2[] " "}
DECL FDAT FGHP3={TOOL_NO 1,BASE_NO 15,IPO_FRAME #BASE,POINT2[] " "}
end
Der Vorteil der Beschreibung der Variable mit dem Namen des Punktes ist, das man später in der Variablenübersicht
sofort sieht welchen Punkt der Robbi anfahren würde wenn ein Abbruch kommt
Viel Spass damit