Vale - como he explicado, el cambiador de herramientas no era tan simple que parece.
Porque? Las porta herramientas tienen llaves de arrastre. Y para insertar en el husillo tienen que ser en su posición correcta.
El plato del cambiador tambien tiene sus llaves de arrastre.
El motor de husillo no es un motor servo, es un Fanuc AC Spindle drive. Tiene encoder (sistema antigua 0,5Vss), pero no es un servo.
Además el husillo y el motor se conecta mediante dos poleas y correas no sincronizado.
Para solucionar este problema he montado en el husillo un sensor para la posición (index) y al otro lado un piston neumático.
Antes he probado de fijar el husillo por injección de un corriente DC al motor, pero la fuerza no era suficiente para avantar la contrafuertza cuando viene el plato del cambiador con sus muelles fuertes para fijar la herramienta.
Así he puesto un cilindro neumatico que puede fijar el husillo.
El variador V1000 de Yaskawa tiene un PLC dentro - muy bien para este cosas. He programado un poco para realizar las funciones que necesito:
El circuito tiene unas cosas de seguridad y si pones "Orientación" el husillo gira con 1rpm.
Hay otras cosas muy útiles. En ejemplo salida zero Speed. y una salida (que era predefinado y no aparece en el circuito) "llegada a revoluciones".
Con estas salidas es muy fácil de programar un macro de M3/M4/M5.
En una máquina de estas dimensiones, con tantos cilindros neumaticos y piezas muy pesadas la seguridad es muy importante.
Cada piston tiene un sensor en los límites. Así sabes, si despues de actuar la valvula el psiton es en su posición deseada o no.
Un ejemplo con el macro de M5:
#NAME M5.txt #LABEL "Spindle stop"
%
#O3=0
#O4=0
PRINT "Spindle stop"
G4 H10 UNTIL #I106=1
IF #I106=0 THEN
PRINT "Error stopping spindle"
M2
ENDIF
RETURN
La entrada #I106 esta conectado al variador, salida @ZeroSpeed.
Normalmente esperas un tiempo especifico, hasta el husillo esta apagado. Pero con este sistema sabes exactamente, cuando el husillo no gira más.
A un lado puedes ahorrar tiempo al otro lado (si algo va mal) estas seguro que el husillo esta parado o no.
Para un macro de M3/M3 es un poco más complicado. El husillo no se puede encender si algo es en el medio. En ejemplo el piston para fijar el husillo en su posición, o el cambiador esta en el medio, o el piston para expulsar la herramienta esta activado...
#NAME M3.txt
#LABEL "Spindle start CW"
Parameters: S=nominal RPM
#0 = actual RPM (before)
#1 = dwell time (RPM independent)
#2 = RPM dependent dwell time (ramp, s/(1000/min))
#I53 = WZW ausgeschwenkt
#I103 = Werkzeug geklemmt
#I104 = Spindelklemmung gelöst
#I106 = Zerospeed
#I107 = Drehzahl erreicht
%
#O4=0
IF #I102=0 | #I53=0 | #I104=0 THEN
PRINT "Error: Spindel blockiert"
M2
ENDIF
PRINT "Spindel hochlaufen..."
#O3=1
G4 H10 UNTIL #I109=1
IF #I109=1 THEN
PRINT "Spindel @";S
ELSE
PRINT "Error: Spindeldrehzahl nicht erreicht"
M2
ENDIF
RETURNEn este ejemplo podemos ver la seguridad. Antes controlamos todos los sensores de sctuatores que pueden ser un peligro para encender el husillo.
Despues encendemos el variador y esperamos hasta el variador dice, que el husillo llegada a las revoluciones deseadas.
Si no pasa este (por un defecto, husillo blockeado etc.) sale un error y la máquina para.
El cambiador entero es un poco más complicado, pq hay varias sensores y varias escenarios.
Puede ser, que no hay una herramienta en el husillo y quiero poner uno. (No hace falta de sacar antes)
Puede ser que hay una herramienta dentro, y solo quiero sacarlo.
Y el normal: Tengo que sacar el anterior y sustituir con el nuevo.
Es un plato de 16 herramientas que gire. Así tengo que calcular, donde es la herramienta deseada y cual es el camino más corto (girar a la izquierda o derecha)
Y siempre hay que controlar, que cada movimiento se hace bien en un tiempo adecuado.
Si no - hay que interumpir el proceso y para la máquina.
Es estado del cambiador ya es puesto a "desconocido".
El proceso es el siguente:
-Mirar, si el número nuevo es igual - si es así todo bien y a salida.
-Mirar, si el número esta en el rango 0-16, si no - error y salida.
-Mirar, si la posición de todos pistones/husillo esta bien para hacer un cambio.
-Mirar, si no habia una herramienta en el husillo, la posicion del plato esta conocido.
-Mirar, si el último cambia era bien acabado.
-Si hasta ya algo va mal, salimos con estado "desconocido".
-Ya cambiamos a G53, vamos a arriba a posición Z0 (donde se puede hacer el cambio) y apagamos el husillo.
-Ya calculamos la posicion del nuevo herramiento y la direccion para girar el plato mas tarde.
-Ya ponemos el variador en modo "Orientacion" y esperamos hasta la entrada del sensor Index esta =1.
Si no pasa en un tiempo-> Error.
Ahora fijamos el husillo con el piston y apagamos el modo Orientación.
Si algo va mal y el sensor index no esta encendido o el piston para fijar no esta en su posición final ->Error.
Ya tenemos que saber si ponemos una herramienta nueva o solo sacamos una herramienta.
Si ponemos una nueva tenemos que bajar el plato primero y oscillamos despues.
Si no - solo oscilamos el plata a direccion husillo.
Ya tenemos que habrir la pinza. Para este abrimos la valvula para el piston arriba y esperamos hasta llega a su posición final.
Si no -> Error (como todos los movimientos, que estamos vigelando por los sensores)
Si el plato ya no es abajo vamos a abajo.
En esta situacion tenemos una herramienta abajo del husillo.
Si sacamos, oszilamos el plato a fuera, giramos a direccion y pasos calculatos anteriormente, y oszilamos el plato en direccion a husillo.
Ya vamos con el plato a arriba y cerramos la pinza con la valvula del piston arriba. Si esta cerrado, oszillamos el plato a fuera y esperamos hasta que llega en su posición.
Listo.
Claro - hay que guardar el estado, número de la herramienta actual, posicion del plato.
#LABEL "automatischer Werkzeugwechsel"
Version 30.05.2019 I. Tippner, Kitamuru Minisuper 300
Einschwenkbares Drehmagazin 16-fach, BT30 Spindel
Eingänge:
#I2 Druckluft
#I52 WZW eingeschwenkt, #I53 WZW ausgeschwenkt, #I55 WZW oben, #I54 WZW Oben,
#I56 WZW Index, #I103 Auswerfer Oben, #I102 Auswerfer unten
#I105 Spindel Index #I104 Spindel frei
Ausgänge:
#O100 FU Orientierung #O101 WZW Motor an, #O102 WZW absenken, #O108 WZW Richtung
#O109 Alarmleuchte, #O112 WZW Blasluft, #O113 WZW schwenken,
#O114 WZW auswerfen, #O115 Spindel sperren
Parameter:
Anzahl Plätze: 16 (fest)
Position Z-Achse: #965
Error allgemein: #966
Neues Werkzeug: #920
Altes Werkzeug: #950
aktueller Offset: #909
Aktueller Platz: #967 (Wenn T=0, also letztes Werkzeug)
Status WZW: #940 (0=undefiniert)
Temp-Register: #1
Drehrichtung: #2
Anzahl Plätze: #3
Offset-Backup: #7
%
PRINT "Automatischer Werkzeugwechsel alt=";#950;" neu=";#920
IF #920=#950 THEN
RETURN (gleiches Werkzeug, fertig)
ENDIF
IF #920<0 | #920>16 THEN
PRINT "Fehler! Werkzeugnummer ungültig T=";#920
M2
ENDIF
(Check, ob Status der Maschine einen Wechsel zulaesst)
IF #I53=0 | #I54=0 | #I104=0 THEN
#940=0
#966=1
#O109=1
ENDIF
IF (#967=0 | #967>16) & #950=0 THEN
#940=0
#966=1
#O109=1
ENDIF
IF #940=0 THEN
PRINT "Fehler! Zustand des Werkzeugwechslers undefiniert."
PRINT "Bitte zuerst alle Werkzeuge überprüfen und manuellen"
PRINT "Wechsel oder 'nur Nummer setzen' durchführen"
M2
ENDIF
#940=0 (Wechselvorgang gestartet und nicht abgeschlossen)
#7=#909 (Nullpunkt G53..G59 merken)
G53
G0 Z0 (Z auf Position fahren)
IF #I106=0 THEN
M5
ENDIF
IF #I106=0 THEN
PRINT "Error WZW: Spindel läuft"
M2
ENDIF
(Drehrichtung und Anzahl Schritte ausrechnen)
IF #950=0 THEN
#3=#967
ELSE
#3=#950
ENDIF
IF #920>=#3 THEN
#1=#920-#3
#2=0 (CW)
ELSE
#1=#3-#920
#2=1 (CCW)
ENDIF
IF #1>8 THEN
#1=16-#1
#2=#2+1
ENDIF
IF #2>1 THEN
#2=0
ENDIF
(Spindel orientieren)
IF #I105=0 THEN
#O100=1
G4 H3 UNTIL #I105=1
ENDIF
IF #I105=1 THEN
#O115=1
#O100=0
ELSE
#O100=0
PRINT "Error WZW: Spindel Orientierung"
SKIP LBFehler
ENDIF
G4 H1 UNTIL #I104=0
IF #I104=1 | #I105=0 THEN
PRINT "Error WZW: Spindelklemmung"
SKIP LBFehler
ENDIF
(Wenn kein Werkzeug in der Spindel, ist Platz belegt)
(Dann müssen wir jetzt schon absenken)
IF #950=0 THEN
#O102=1
G4 H2 UNTIL #I55=1
IF #I55=0 THEN
PRINT "Error WZW: Absenken"
SKIP LBFehler
ENDIF
ENDIF
(WZW einschwenken)
#O113=1
G4 H2 UNTIL #I52=1
IF #I52=0 THEN
PRINT "Error WZW: Schwenken"
SKIP LBFehler
ENDIF
(Spannzange öffnen)
#O112=1 (Blasluft freigeben)
#O114=1
G4 H2 UNTIL #I102=1
IF #I102=0 THEN
PRINT "Error WZW: Werkzeugauswurf"
SKIP LBFehler
ENDIF
(Wenn noch nicht abgesenkt, jetzt machen)
IF #I55=0 THEN
#O102=1
G4 H2 UNTIL #I55=1
IF #I55=0 THEN
PRINT "Error WZW: Absenken"
SKIP LBFehler
ENDIF
ENDIF
(Wechsler steht nun mit altem Werkzeug unter der Spindel)
(Wollen wir Werkzeug nur entfernen?)
IF #920=0 THEN
#967=#950 (letztes Werkzeug merken)
SKIP LBEnde
ELSE (normaler Wechsel)
(Wir drehen den Teller)
#O112=0
IF #2=1 THEN
#O108=1
ELSE
#O108=0
ENDIF
#O101=1
REPEAT=#1
G4 H2 UNTIL #I56=0 (Freigabe)
G4 H3 UNTIL #I56=1
NEXT
#O101=0
#O112=1
(Wir fahren hoch und stecken das Werkzeug rein)
#O102=0
G4 H2 UNTIL #I54=1
IF #I54=0 THEN
PRINT "Error WZW: Heben"
SKIP LBFehler
ENDIF
SKIP LBEnde
ENDIF
RETURN
LBEnde: (Wechsel fertig)
(Werkzeug klemmen)
#O114=0
G4 H2 UNTIL #I103=1
#O112=0 (Blasluft wegnehmen)
IF #I103=0 THEN
PRINT "Error WZW: Werkzeugklemmung"
#O109=1 (Alarmleuchte an)
#O115=0 (Spindel freigeben)
#966=1 (Fehlerflag)
M2 (Wir lassen den WZW in dem Status, um zu verhindern, das das Werkzeug rausfällt.)
ENDIF
(Spindel freigeben)
#O115=0
G4 H2 UNTIL #I104=1
IF #I104=0 THEN
PRINT "Error WZW: Spindelfreigabe"
SKIP LBFehler
ENDIF
(Ausschwenken)
#O113=0
G4 H2 UNTIL #I53=1
IF #I53=0 THEN
PRINT "Error WZW: Ausschwenken"
SKIP LBFehler
ENDIF
(Hochfahren)
#O102=0
G4 H2 UNTIL #I54=1
IF #I54=0 THEN
PRINT "Error WZW: Hochfahren"
SKIP LBFehler
ENDIF
#950=#920 (letztes Werkzeug merken)
#940=1 (Wechsel erfolgreich)
#909=#7 (alten Nullpunkt wieder herstellen)
RETURN
LBFehler:
#966=1 (Fehlerflag)
#O109=1 (Alarmleuchte an)
#O100=0 (Alle Ausgänge sicher abschalten)
#O101=0
#O108=0
#O112=0
#O113=0
#O114=0
#O115=0
G4 H1
#O102=0
M2
RETURN
Con el programa Beamicon2 es muy fácil de programar de estas macros y tambien la depuración es muy fácil.