Machsupport Forum
Mach Discussion => Non English Forums => German => Topic started by: MacSteve on December 09, 2020, 08:36:27 AM
-
Hallo zusammen,
ich heiße Steve und bin neu in diesem Forum.
Ich mache gerade ein Retrofit an einer Industriefräsmaschine und habe Probleme beim Schalten des Getriebes der Spindel.
Die Maschine hat vier Getriebestufen. (bereits in Spindle pulleys eingetragen)
Stufe1: 1-200
Stufe2: 201-600
Stufe3: 601-1400
Stufe4: 1401-4000
Ich möchte für jede Getriebestufe ein Ausgang schalten der dann den Getriebewechsel extern einleitet.
Wenn der Wechsel abgeschlossen ist möchte ich einen Eingang von extern empfangen der sagt „ Getriebestufe „X“ „eingelegt.
Der Getriebestufenwechsel soll starten wenn die Geschwindigkeit über den S-Parameter eingegeben wurde.
Ich habe schon einige Beiträge in diesem Forum gelesen, habe aber keine ordentlich Lösung am Ende finden können.
Wäre schön wenn mir jemand weiterhelfen könnte.
Vielen Dank Euch
-
Hallo,
in diesem Fall würde ich das im M3 macro machen.
Da kannst Du die angeforderte Geschwindigkeit abfragen, und
mit ein paar If Abfragen die entprechenden Ausgänge schalten,
dann auf den Eingang warten.
Vor allem kannst Du hier zuerst mal die Spindel ausschalten, für den Fall das
diese schon läuft.
Gruß Tom
-
Hallo,
ich habe mal in Anlehnung an ein anderes Beispiel das Ganze auf meinen Fall im M3 Makro übertragen.
Habe das mal mit zwei Getriebestufen versucht.
Da die Maschine aktuell noch mit der alten Steuerung läuft und der Umbau erst über den Jahreswechsel stattfinden soll, kann ich das aktuell nicht an der Maschine testen.
@TPS: danke für den Hinweis mit dem M3.
Hier mal mein Beispiel, wie gesagt vorerst mal mit zwei Getriebestufen:
SpinS = GetRPM()
If SpinS < 200 Then
Call Gear1ON
End If
If SpinS > 201 And spin < 600 Then
Call Gear2ON
End If
Sub Gear1ON
While IsActive(OEMTRIG1) = False 'Makes sure gear1 INPUT is active
Sleep(10)
Wend
If IsActive(OEMTRIG1) Then
Sleep(5000)
Message "Spindle On"
DeActivateSignal(OUTPUT1) 'Turns off Spindle reverse (CCW) OUTPUT
ActivateSignal(OUTPUT0) 'Turns on Spindle forward (CW) OUTPUT
DoSpinCW() 'this is what was in the M3 macro
End If
End Sub
Sub Gear2ON
While IsActive(OEMTRIG2) = False 'Makes sure gear2 INPUT is active
Sleep(10)
Wend
If IsActive(OEMTRIG2) Then Sleep(5000) Message "Spindle On"
DeActivateSignal(OUTPUT1) 'Turns off Spindle reverse (CCW) OUTPUT
ActivateSignal(OUTPUT0) 'Turns on Spindle forward (CW) OUTPUT
DoSpinCW() 'this is what was in the M3 macro
End If
End Sub
Falls ihr andere Vorschläge habt, wäre ich sehr dankbar darüber, auch gerne per PN
Grüsse Steve
-
Servus,
habe Dein Macro ein bisschen überarbeitet und formatiert.
Dabei bin ich von folgenden Signalen ausgegangen:
Output1 -> erster Gang einlegen
Output2 -> zweiter Gang einlegen
Input1 -> erster Gang ist eingelegt
Input2 -> zweiter Gang ist eingelegt
Sub Main()
DoSpinStop() 'TPS nur um sicherzustellen, das die Spindel wirklich aus ist
SpinS = GetRPM()
If SpinS < 200 Then
Call Gear1ON
End If
If SpinS > 201 And spin < 600 Then
Call Gear2ON
End If
End Sub
Sub Gear1ON()
' der erste Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG1) Then
Message "erster Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'Ausgang zum schalten der 1ten Gang's aktivieren
ActivateSignal(OUTPUT1)
'auf den Eingang warten
While IsActive(OEMTRIG1) = False
Sleep(10)
Wend
Sleep(50)
Message "erster Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT1) 'Ausgang für 1. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
Sub Gear2ON()
' der zweite Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG2) Then
Message "zweiter Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'Ausgang zum schalten der 2ten Gang's aktivieren
ActivateSignal(OUTPUT2)
'auf den Eingang warten
While IsActive(OEMTRIG2) = False
Sleep(10)
Wend
Sleep(50)
Message "zweiter Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT2) 'Ausgang für 1. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
mfg Tom
-
Servus,
@Tom, super gut und vielen Dank :)...das werde ich gleich mal probieren, sobald die Steuerung läuft.
Ich melde mich dann an dieser Stelle auf jeden Fall um zu berichten...
Gruß
Steve
-
Hallo,
ich habe die Maschine soweit umgebaut und alle Achsen laufen, auch im Automatikbetrieb.
Nun komme ich an die eigentliche Getriebeumschaltung und wollte mal fragen, ob eigentlich auch an dem "spindlespeed" Makro etwas geändert werden muss?
Habe das angepasste M3 Makro von Tom an der Demo Version probiert und bekomme die Meldung "Too fast for pulley, using Max"
In den Spindel Pulleys steht folgendes drin:
Stufe1: 0-200
Stufe2: 0-600
Stufe3: 0-1400
Stufe4: 0-4000
Muss an dem "spindlespeed" Makro auch etwas angepasst werden?
Danke und Gruss
Steve
-
Servus,
es kommt eigentlich nur darauf an, welches Pulley als current pulley selektiert ist.
z.B. Pulley 4 Min 0 Max 4000, dann wird bei einem S>4000 diese Meldung ausgegeben.
einfach ein Pulley auswählen/einstellen das als Max deine Maximale Drehzahl hat.
-
Hallo,
habe gestern das M3 Makro eingespielt, es gibt noch ein paar Probleme:
Wenn ich die Spindel über die Befehlszeile mit M3 S100 starte, wird Output7=1 geschaltet (1.Gang einlegen), Input 12 wird=“1“, die Spindel geht aber nicht an.
Ich kann sie nur über den Softbutton M03 starten. Danach wird der Output7 aber nicht zurückgesetzt.
Wenn ich die Spindel in die zweite Stufe bringen will, über die Befehlszeile M3 S300, ist immer noch Output7=1 geschaltet (1.Gang einlegen), sonst passiert gar nix.
Wenn ich dann in der Befehlszeile M3 S900 eingebe (3.Gang) geht zu Output7=1 noch Output8 gleichzeitig auf „1“, das darf überhaupt nicht sein…
Eigentlich müsste hier ja nur Output 9 auf „1“ gehen und der Rest müsste zurückgesetzt werden!
…also ein ziemliches Durcheinander!
Output7= 1. Gang einlegen
Output8= 2. Gang einlegen
Output9= 3. Gang einlegen
Output10= 4. Gang einlegen
Input 12= 1. Gang ist eingelegt
Input 13= 2. Gang ist eingelegt
Input 14= 3. Gang ist eingelegt
Input 15= 4. Gang ist eingelegt
Stufe1: 0-200
Stufe2: 0-600
Stufe3: 0-1400
Stufe4: 0-4000
@Tom hast du eine Idee?
Sollte man alle anderen Ausgänge die nicht für die aktuelle Getriebestufe benutzt werden zurücksetzen?
Warum geht der M3 Befehl über die Befehlszeile nicht mehr?
Danke und Gruß
Steve
-
poste mal bitte Dein macro.
-
Sub Main()
DoSpinStop() 'TPS nur um sicherzustellen, das die Spindel wirklich aus ist
SpinS = GetRPM()
If SpinS < 200 Then
SetPulley(1)
Call Gear1ON
End If
If SpinS > 201 And spin < 600 Then
SetPulley(2)
Call Gear2ON
End If
If SpinS > 601 And spin < 1400 Then
SetPulley(3)
Call Gear3ON
End If
If SpinS > 1401 And spin < 4000 Then
SetPulley(4)
Call Gear4ON
End If
End Sub
Sub Gear1ON()
' der erste Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG12) Then
Message "erster Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'Ausgang zum schalten der 1ten Gang's aktivieren
ActivateSignal(OUTPUT7)
'auf den Eingang warten
While IsActive(OEMTRI12) = False
Sleep(10)
Wend
Sleep(50)
Message "erster Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT7) 'Ausgang für 1. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
Sub Gear2ON()
' der zweite Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG13) Then
Message "zweiter Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'Ausgang zum schalten der 2ten Gang's aktivieren
ActivateSignal(OUTPUT8)
'auf den Eingang warten
While IsActive(OEMTRIG13) = False
Sleep(10)
Wend
Sleep(50)
Message "zweiter Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT8) 'Ausgang für 2. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
Sub Gear3ON()
' der dritte Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG14) Then
Message "dritter Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'Ausgang zum schalten der 3ten Gang's aktivieren
ActivateSignal(OUTPUT9)
'auf den Eingang warten
While IsActive(OEMTRIG14) = False
Sleep(10)
Wend
Sleep(50)
Message "dritter Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT9) 'Ausgang für 3. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
Sub Gear4ON()
' der vierte Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG115) Then
Message "vierter Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'Ausgang zum schalten der 4ten Gang's aktivieren
ActivateSignal(OUTPUT10)
'auf den Eingang warten
While IsActive(OEMTRIG15) = False
Sleep(10)
Wend
Sleep(50)
Message "vierter Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT10) 'Ausgang für 4. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
-
habe Mal ein paar Sachen geändert. Bitte Test und screenshot von History.
Sub Main()
DoSpinStop() 'TPS nur um sicherzustellen, das die Spindel wirklich aus ist
SpinS = GetRPM()
If SpinS < 200 Then
SetPulley(1)
Call Gear1ON
End If
If SpinS > 201 And spin < 600 Then
SetPulley(2)
Call Gear2ON
End If
If SpinS > 601 And spin < 1400 Then
SetPulley(3)
Call Gear3ON
End If
If SpinS > 1401 And spin < 4000 Then
SetPulley(4)
Call Gear4ON
End If
End Sub
Sub Gear1ON()
' der erste Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG12) Then
Message "erster Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'alle anderen Ventile ausschalten
DeActivateSignal(OUTPUT8)
DeActivateSignal(OUTPUT9)
DeActivateSignal(OUTPUT10)
'Ausgang zum schalten der 1ten Gang's aktivieren
ActivateSignal(OUTPUT7)
message "Ausgang für 1. Gang eingeschaltet -> warte auf Eingang."
'auf den Eingang warten
While IsActive(OEMTRI12) = False
Sleep(10)
Wend
Sleep(50)
Message "erster Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT7) 'Ausgang für 1. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
Sub Gear2ON()
' der zweite Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG13) Then
Message "zweiter Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'alle anderen Ventile ausschalten
DeActivateSignal(OUTPUT7)
DeActivateSignal(OUTPUT9)
DeActivateSignal(OUTPUT10)
'Ausgang zum schalten der 2ten Gang's aktivieren
ActivateSignal(OUTPUT8)
message "Ausgang für 2. Gang eingeschaltet -> warte auf Eingang."
'auf den Eingang warten
While IsActive(OEMTRIG13) = False
Sleep(10)
Wend
Sleep(50)
Message "zweiter Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT8) 'Ausgang für 2. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
Sub Gear3ON()
' der dritte Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG14) Then
Message "dritter Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'alle anderen Ventile ausschalten
DeActivateSignal(OUTPUT7)
DeActivateSignal(OUTPUT8)
DeActivateSignal(OUTPUT10)
'Ausgang zum schalten der 3ten Gang's aktivieren
ActivateSignal(OUTPUT9)
message "Ausgang für 3. Gang eingeschaltet -> warte auf Eingang."
'auf den Eingang warten
While IsActive(OEMTRIG14) = False
Sleep(10)
Wend
Sleep(50)
Message "dritter Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT9) 'Ausgang für 3. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
Sub Gear4ON()
' der vierte Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG15) Then
Message "vierter Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'alle anderen Ventile ausschalten
DeActivateSignal(OUTPUT7)
DeActivateSignal(OUTPUT8)
DeActivateSignal(OUTPUT9)
'Ausgang zum schalten der 4ten Gang's aktivieren
ActivateSignal(OUTPUT10)
message "Ausgang für 4. Gang eingeschaltet -> warte auf Eingang."
'auf den Eingang warten
While IsActive(OEMTRIG15) = False
Sleep(10)
Wend
Sleep(50)
Message "vierter Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT10) 'Ausgang für 4. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
-
da waren auch noch Schreibfehler bei den OEMTRIG drin
Sub Main()
DoSpinStop() 'TPS nur um sicherzustellen, das die Spindel wirklich aus ist
SpinS = GetRPM()
If SpinS < 200 Then
SetPulley(1)
Call Gear1ON
End If
If SpinS > 201 And spin < 600 Then
SetPulley(2)
Call Gear2ON
End If
If SpinS > 601 And spin < 1400 Then
SetPulley(3)
Call Gear3ON
End If
If SpinS > 1401 And spin < 4000 Then
SetPulley(4)
Call Gear4ON
End If
End Sub
Sub Gear1ON()
' der erste Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG12) Then
Message "erster Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'alle anderen Ventile ausschalten
DeActivateSignal(OUTPUT8)
DeActivateSignal(OUTPUT9)
DeActivateSignal(OUTPUT10)
'Ausgang zum schalten der 1ten Gang's aktivieren
ActivateSignal(OUTPUT7)
message "Ausgang für 1. Gang eingeschaltet -> warte auf Eingang."
'auf den Eingang warten
While IsActive(OEMTRIG12) = False
Sleep(10)
Wend
Sleep(50)
Message "erster Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT7) 'Ausgang für 1. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
Sub Gear2ON()
' der zweite Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG13) Then
Message "zweiter Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'alle anderen Ventile ausschalten
DeActivateSignal(OUTPUT7)
DeActivateSignal(OUTPUT9)
DeActivateSignal(OUTPUT10)
'Ausgang zum schalten der 2ten Gang's aktivieren
ActivateSignal(OUTPUT8)
message "Ausgang für 2. Gang eingeschaltet -> warte auf Eingang."
'auf den Eingang warten
While IsActive(OEMTRIG13) = False
Sleep(10)
Wend
Sleep(50)
Message "zweiter Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT8) 'Ausgang für 2. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
Sub Gear3ON()
' der dritte Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG14) Then
Message "dritter Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'alle anderen Ventile ausschalten
DeActivateSignal(OUTPUT7)
DeActivateSignal(OUTPUT8)
DeActivateSignal(OUTPUT10)
'Ausgang zum schalten der 3ten Gang's aktivieren
ActivateSignal(OUTPUT9)
message "Ausgang für 3. Gang eingeschaltet -> warte auf Eingang."
'auf den Eingang warten
While IsActive(OEMTRIG14) = False
Sleep(10)
Wend
Sleep(50)
Message "dritter Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT9) 'Ausgang für 3. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
Sub Gear4ON()
' der vierte Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG15) Then
Message "vierter Gang bereits eingelegt"
Sleep(200)
Exit Sub
End If
'alle anderen Ventile ausschalten
DeActivateSignal(OUTPUT7)
DeActivateSignal(OUTPUT8)
DeActivateSignal(OUTPUT9)
'Ausgang zum schalten der 4ten Gang's aktivieren
ActivateSignal(OUTPUT10)
message "Ausgang für 4. Gang eingeschaltet -> warte auf Eingang."
'auf den Eingang warten
While IsActive(OEMTRIG15) = False
Sleep(10)
Wend
Sleep(50)
Message "vierter Gang eingelegt Spindel einschalten"
DeActivateSignal(OUTPUT10) 'Ausgang für 4. Gang ausschalten
DoSpinCW() 'this is what was in the M3 macro
End Sub
-
@Tom, danke mal...ich kann es erst morgen Nachmittag testen, melde mich dann.
Vielen Dank und Gruss
-
Hat das jetzt geklappt?
-
Servus,
sorry für die späte Rückmeldung.
Die Ausgänge werden jetzt einwandfrei geschaltet. Für die Eingänge habe ich einen kleinen Simulator gebaut der die Signale von dem Frequenzumrichter simuliert, damit in der Testphase das Getriebe nicht beschädigt wird.
Die Meldungen (Messages) dienen auch sehr gut dem ganzen Ablauf.
Das Programm das die Getriebestufen schaltet (Frequenzumrichter) wird erst nächste Woche von einem Techniker eingespielt.
Falls noch etwas wäre melde ich mich :)
@TPS, jetzt schon herzlichen Dank für deine klasse Unterstützung!!!
Gruss
Steve
-
Hallo,
habe nun doch noch eine Kleinigkeit:
Wenn ich z.B. M3 S100 eingebe und die erste Getriebestufe schon eingelegt ist, startet die Spindel nicht, sondern bringt die Meldung „erste Getriebestufe bereits eingelegt“. Ich kann dann nur über den „M3“ Button die Spindel starten.
Ich denke das liegt daran, dass der Befehl „DoSpinCW() 'this is what was in the M3 macro“ nicht angesprochen wird, wenn der Gang schon eingelegt ist.
Nur wo soll ich diesen Befehl einfügen? Wäre das so richtig?
' der erste Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG12) Then
Message "erster Gang bereits eingelegt"
Sleep(200)
DoSpinCW() 'this is what was in the M3 macro
Exit Sub End If
danke und Gruss
Steve
-
das sollte so passen
' der erste Gang ist bereits drin, also nichts zu tun
If IsActive(OEMTRIG12) Then
Message "erster Gang bereits eingelegt"
Sleep(200)
DoSpinCW()
Exit Sub
End If
-
jetzt geht alles einwandfrei :)
Vielen Dank nochmals!