Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

Betriebsartübergreifende Syncronaktionen

Beitrag 24.02.2024, 11:05 Uhr
CNC-Herry
Level 1 = Community-Lehrling
*
Hallo,
kennt jemand eine Möglichkeit, aus einer Syncronaktion heraus, das verfahren einer Achse in JOG in einer bestimmten Achsrichtung zu sperren.
Anwendungsfall: Ich möchte einen bestimmten Arbeitsbereich in JOG überwachen.
Beispiel: Verfährt der Bediener eine Achse in Richtung Minus in diesen Bereich, soll ein Vorschubhalt in Richtung Minus erfolgen.
In Richtung Plus muss die Achse aber noch zu fahren sein (Freifahren).

Über die PLC könnte ich es realisieren, bevorzuge aber gerne eine reine NC-Lösung

Lieben Gruß
Herry
   
Beitrag 26.02.2024, 08:38 Uhr
Tobe87
Level 2 = Community-Facharbeiter
**
Hallo Herry,
ich habe so etwas in der Art schon gemacht.
Da ging es auch darum im Jog Achsen unter bestimmten Voraussetzungen die Fahrichtung ins Plus oder Minus zu sperren.
Aber ohne PLC hab ich es nicht hinbekommen.
Zu Erklärung.
Über die NC Ausgänge habe ich der PLC mitgeteilt welche Achse einen Vorschub Stop bekommt.
Der $A_OUT[31] dient nur als Hochlauf Merker für die PLC das die Synchronaktion aktiv sind.
Über den $A_DBB[7] habe ich von der PLC mitbekommen welche Taste betätigt wird. Plus oder Minus.
Ist noch aus meinen Anfangszeiten und geht bestimmt noch eleganter. wink.gif

;Kollisionsueberwachung $A_DBB[7]==4 Minus $A_DBB[7]==8 Plus
;===========================================================
CANCEL(80,81,82,83,84)
STOPRE
IDS=80 DO $A_OUT[10]=0 $A_OUT[11]=0 $A_OUT[12]=0 $A_OUT[13]=0 $A_OUT[14]=0 $A_OUT[15]=0 $A_OUT[16]=0 $A_OUT[17]=0 $A_OUT[18]=0 $A_OUT[19]=0 $A_OUT[20]=0 $A_OUT[21]=0 $A_OUT[22]=0 $A_OUT[23]=0 $A_OUT[24]=0 $A_OUT[25]=0 $A_OUT[26]=0 $A_OUT[27]=0 $A_OUT[28]=0 $A_OUT[29]=0 $A_OUT[31]=1
;Achse Z1 zu Z2
IDS=81 WHENEVER (($AA_IM[Z1]+$AA_IM[Z2])<(150)) AND ($A_DBB[7]==4) AND ($AC_PROG==0) DO $AA_OVR[Z1]=($AA_IM[Z1]+$AA_IM[Z2]-100)
IDS=82 WHENEVER (($AA_IM[Z1]+$AA_IM[Z2])<100) AND (($A_DBB[7]==4) OR ($AC_PROG==2)) DO $AA_OVR[Z1]=0 $A_OUT[10]=1 $AC_OVR=0 SETAL(67004)
;Achse Z1 zu W1
IDS=84 WHENEVER (($AA_IM[W1]-$AA_IM[Z1])<(-122)) AND (($A_DBB[7]==8) OR ($AC_PROG==2)) DO $AA_OVR[Z1]=0 $A_OUT[11]=1 $AC_OVR=0 SETAL(67002)
;Achse W1 zu Z1
IDS=83 WHENEVER (($AA_IM[W1]-$AA_IM[Z1])<(-122)) AND (($A_DBB[7]==4) OR ($AC_PROG==2)) DO $AA_OVR[W1]=0 $A_OUT[26]=1 $AC_OVR=0 SETAL (67002)
M17

Gruß
Tobi





   
Beitrag 26.02.2024, 15:22 Uhr
CaptainFu
Level 1 = Community-Lehrling
*
Probier es mal so, sollte auch im Jog funktionieren.

Der Real lGrenze=400
Cancel(1)

Ids=1 Whenever(($Aa_Im[X]<=(lGrenze+Abs($Aa_Dtbrem[X])))And($Ac_Stat==2)) Do $Aa_Ovr[X]=0 Setal(67xxx)

M30

Der Alarm ist optional, falls es einen Passenden gibt dann eben diesen Eintragen, es sollte allerdings eine 67xxx ziger Nummer sein mit einer 66xxx wird ein Nc-Stop ausgelöst. Die 67 landet normaler weise nur im Alaramlog und lässt sich problemlos quittieren.
   
Beitrag 27.02.2024, 10:03 Uhr
CNC-Herry
Level 1 = Community-Lehrling
*
Hallo,
vielen Dank für die Lösungsvorschläge.

Das Abfragen der Positionen ist nicht das Problem.
Wenn ich in JOG in einen überwachten Bereich fahre, und davon gibt es mehrere, weiss ich nicht ob das in Richtung plus oder minus passiert ist.
Wie bekomme ich die Achse in der entgegengesetzten Richtung wieder frei?
Vielen Dank für eure Bemühungen!

Hinweis
Der $AC_MARKER[1] sagt ob die Überwachung aktiv ist.(Ist von anderen Achspositionen abhängig)

DEF REAL lX_POS_1 = 100
DEF REAL lX_POS_2 = 200
DEF INT lTOL_PLUS = 10
DEF INT lTOL_MINUS = -15
CANCEL(1)
IDS=1 WHENEVER ((($AA_IM[X1]> lX_POS_1+iTOL_MINUS) AND ($AA_IM[X1]< +iTOL_PLUS)) OR (($AA_IM[X1]> lX_POS_2+iTOL_MINUS) AND ($AA_IM[X1]< lX_POS_2+iTOL_PLUS)) AND ($AC_MARKER[1]== 0)) DO $AA_OVR[X1]=0 ;Setal(67xxx)
   
Beitrag 29.02.2024, 16:09 Uhr
CaptainFu
Level 1 = Community-Lehrling
*
Nochmal, als Beispiel für eine Begrenzung in Plus und Minus Richtung

Def Real lGrenzeMinus=440
Def Real lGrenzePlus=480

Cancel(1)

G0 G90 X=460

Ids=1 Whenever(($Aa_Im[X]<=(lGrenzeMinus-$Aa_Dtbrem[X]))Or($Aa_Im[X]>=(lGrenzePlus-$Aa_Dtbrem[X])))And($Ac_Stat==2) Do $Aa_Ovr[X]=0 Setal(67xxx)

M30

Das lässt sich natürlich um den Marker als Ein/Aus-Schalter ergänzen. Zur Erklärung, es wird eine Grenze in Minus und in Plus Richtung gesetzt
und über die Systemvariable $Aa_Dtbrem wird der von der Steuerung geschätzte Bremsweg (mit Vorzeichen!) der Achse bis zum Stillstand,
immer passend zur aktuellen Geschwindigkeit, von den Grenzen abgezogen bzw. addiert. Damit sollte man sich diverse Toleranzbereiche sparen können.
Der Kanalstatus $Ac_Stat sorgt dafür das die Synchronaktion nicht weiter aktiv ist, sollte die Maschine im "Reset" oder der Kanal auf "Unterbrochen" stehen.
Läuft man jetzt auf eine Grenze auf, kann man im Jog diese auch wieder in die andere Richtung verlassen, da sich ja dann das Vorzeichen von $Aa_Dtbrem ändert
und sich der Triggerpunkt damit "hinter" die aktuelle Achsposition verschiebt. Sollte so testbar sein.
   
Beitrag 06.03.2024, 08:35 Uhr
CNC-Herry
Level 1 = Community-Lehrling
*
Hallo Captain Fu,
sorry dass ich mich erst jetzt melde!
Vielen Dank für dein Lösungsvorschlag, klappt super!!!
Werde es noch mit Abhängigkeiten von anderen Achsen ausbauen und evtl. auch dass das ganze in Automatik funktioniert!

Danke nochmal!
Gruß Herry
   
3 Besucher lesen dieses Thema (Gäste: 3)
0 Mitglieder: