Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

Standzeitüberwachung bei mehreren Schneiden, kann mir das mal jemand simulieren?

Beitrag 10.09.2009, 22:25 Uhr
Michi1965
Michi1965
Level 3 = Community-Techniker
***
Gruppe: Mitglied
Mitglied seit: 19.01.2007
Beiträge: 295
Wir haben die Möglichkeit, durch drehen unserer Werkzeugspindel mit einem Werkzeug sowohl Aussen- als auch Innenbearbeitung duchzuführen. Natürlich mit verschiedenen Korrekturen. Wenn auf jeder Korrektur 10 Minuten Standzeit vorgegeben sind, könnte das WKZ theoretisch 9 Minuten mit jeder Korrektur im Einsatz bleiben. Beim nächsten Werkstück erneut 18 Minuten. Würde man jetzt beide Einsatzzeiten addieren, käme das Werkzeug jedoch nicht mehr ohne Plattenwechsel zum Einsatz. Zum Plattenwechsel wird schon seit langer Zeit bei uns die Vorwarngrenze abgefragt, das vorgewarnte WKZ wird noch eingewechselt und zur Kabinentür gefahren, die Maschine bleibt mit M0 stehen.

Jetzt habe ich mir eine kleine Routine programmiert, welche die Einsatzzeiten jeder Korrektur addiert und die neuen Restwerte wieder einschreibt. Da ich morgen jedoch Kurzarbeit habe, kann ich es nicht live testen. Bin aber dennoch neugierig, ob das wohl läuft. Wäre schön, wenn das mal jemand für mich durch Sinutrain hauen könnte:
Das ganze würde dann vor den Werkzeugwechsel gesetzt.

QUOTE
DEF INT _TNR
DEF REAL RESTZEIT_D1, RESTZEIT_D2, RESTSTUECK_D1, RESTSTUECK_D2,
DEF REAL RESTZEIT_NEU, RESTSTUECK_NEU, ZEIT_SOLL, STUECK_SOLL

; INTERNE T-NR DES SPINDELWKZ LESEN
_TNR=$TC_MPP6[9998,1]
IF _TNR == 0
RET
ENDIF

;ABFRAGE AUF 2 SCHNEIDEN UND OB UEBERWACHUNG AKTIV
IF ($P_TOLLND[_TNR] == 2 ) AND (($TC_TP9[_TNR] == 1) OR ($TC_TP9[_TNR] == 2))

;SOLLVORGABEN UND VORWARNGRENZEN FUER D2 GLEICH D1 SETZEN
$TC_MOP11[_TNR,2] = $TC_MOP11[_TNR,1] $TC_MOP13[_TNR,2] = $TC_MOP13[_TNR,1]
$TC_MOP1[_TNR,2] = $TC_MOP1[_TNR,1] $TC_MOP3[_TNR,2] = $TC_MOP3[_TNR,1]

;"RESTE" AUSLESEN
RESTZEIT_D1 = $TC_MOP2[_TNR,1] RESTZEIT_D2 = $TC_MOP2[_TNR,2]
RESTSTUECK_D1 = $TC_MOP4[_TNR,1] RESTSTUECK_D2 = $TC_MOP4[_TNR,2]
ZEIT_SOLL = $TC_MOP11[_TNR,1] STUECK_SOLL = $TC_MOP13[_TNR,1]

;NEUE RESTZEIT/STUECKE BERECHNEN
RESTZEIT_NEU = ZEIT_SOLL - (ZEIT_SOLL - RESTZEIT_D1) - (ZEIT_SOLL - RESTZEIT_D2)
RESTSTUECK_NEU = STUECK_SOLL - (STUECK_SOLL - RESTSTUECK_D1) - (STUECK_SOLL - RESTSTUECK_D2)
IF RESTZEIT_NEU < $TC_MOP1[_TNR,1] ; WENN KLEINER ALS VERSCHLEISSGRENZE
RESTZEIT_NEU = $TC_MOP1[_TNR,1] ; SETZE AUF VERSCHLEISSGRENZE
ENDIF
IF RESTSTUECK_NEU < $TC_MOP4[_TNR,1]
RESTSTUECK_NEU = $TC_MOP4[_TNR,1]
ENDIF

;"RESTE" WIEDER EINTRAGEN
$TC_MOP2[_TNR,1] = RESTZEIT_NEU $TC_MOP2[_TNR,2] = RESTZEIT_NEU
$TC_MOP4[_TNR,1] = RESTSTUECK_NEU $TC_MOP4[_TNR,2] = RESTSTUECK_NEU
ENDIF
RET


Der Beitrag wurde von Michi1965 bearbeitet: 10.09.2009, 22:27 Uhr


--------------------
"Geht nicht", gibt es nicht!
   
Beitrag 11.09.2009, 11:12 Uhr
Michi1965
Michi1965
Level 3 = Community-Techniker
***
Gruppe: Mitglied
Mitglied seit: 19.01.2007
Beiträge: 295
Nach nochmaligen Überlegungen kann ich das so nicht machen. Mal abgesehen davon, das der Befehl TOOLND heißt und nicht TOLLND, habe ich noch nen schweren Gedankenfehler drin.
Das ganze passt nur nach dem ersten Einsatz des Werkzeuges. Beim zweiten Werkstück würde nicht nur die Einsatzzeit des 2. Teiles abgezogen, sondern die vom ersten nochmal mit. Der Istwert wird ja mit der Sollvorgabe verglichen, nicht mit der Reststandzeit vor dem Einsatz.
Jetzt könnte man zwar hergehen, die neue Sollzeit gleich der Reststandzeit zu setzen, dann ist aber die ursprüngliche Sollzeit verschwunden. Dann kann nach einem Plattenwechsel nicht automatisch die Restzeit gleich Sollzeit gesetzt werden.


--------------------
"Geht nicht", gibt es nicht!
   
Beitrag 11.09.2009, 11:51 Uhr
Drehpapst
Drehpapst
Level 5 = Community-Ingenieur
*****
Gruppe: Mitglied
Mitglied seit: 28.04.2005
Beiträge: 650
Dann rechne doch nur mit den Reststandzeiten (MOP2). Dann gehts doch. Und zum setzen der Sollstandzeit, bzw. Abfrage ob ein neues Wkz drin ist machst halt ne Abfrage ob MOP2 = MOP11. Wenn MOP2 <= Vorwarngrenze dann zum Wechsel. Wenn er dann springt im Prg zu dem Teil wo zur Wechselpos. mit M0 gefahren wird setzt du dir in dem Teil einen Merker (R-Parameter oder selbst definierte Variable). Am Prg Anfang frägst du das ganze ab, und wenn der Merker sitzt dann setzt du die Reststandzeit = Sollstandzeit. Und setzt den Merker wieder zurück. Wenn nicht dann springst du drüber und rechnest normal weiter. So in etwa sollte es gehen.
Die Vornwarngrenze setzt du ja wahrscheinlich so, dass sie erreicht ist wenn kein ganzes Teil mehr bearbeitet werden kann.

Und falls du die vorigen Reststandzeiten noch brauchen solltest kannst du dir diese beim auslesen in einen anderen Parameter/Variale abspeichern. Dann hast du die auch noch falls du sie brauchen solltest.

Der Beitrag wurde von Drehpapst bearbeitet: 11.09.2009, 11:57 Uhr


--------------------
Gruß,

Drehpapst


Willen braucht man. Und Zigaretten.
Wer Visionen hat, sollte zum Arzt gehen.
Helmut Schmidt
   
Beitrag 11.09.2009, 21:01 Uhr
Michi1965
Michi1965
Level 3 = Community-Techniker
***
Gruppe: Mitglied
Mitglied seit: 19.01.2007
Beiträge: 295
Ich habe das jetzt ein wenig umgeändert. Und zwar wird der "richtige Sollwert" nur bei D1 eingetragen, der Sollwert unter D2 dient als temporärer Zwischenspeicher. Das ganze soll wie folgt ablaufen:
Bei neuen Platten wird Sollwert D2, sowie die Ist-Werte von D1 und D2 auf den Sollwert von D1 gesetzt. Das geschieht automatisch nach dem M0 für den Plattenwechsel.

Nach Einsatz des Werkzeuges, jedoch vor dem WZW wird jede Schneide gegen den Sollwert von D2 (wichtig!) verrechnet und das dann addiert. Das wird dann wieder vom Sollwert D2 abgezogen. Der so errechnete Ist-Wert wird bei D1+D2 eingetragen, als auch als neuer Sollwert bei D2.

Bei der "alten Version" oben würde die Standzeit schon reduziert, wenn das Werkzeug nur eingewechselt, aber kein Span gemacht wurde.

Bei V2.0 hingegen sollte es passen......
QUOTE
N20 DEF INT _TNR
N30 DEF REAL RESTZEIT_D1
N40 DEF REAL RESTZEIT_D2
N50 DEF REAL RESTSTUECK_D1
N60 DEF REAL RESTSTUECK_D2
N70 DEF REAL RESTZEIT_NEU
N80 DEF REAL RESTSTUECK_NEU
N90 DEF REAL ZEIT_SOLL
N100 DEF REAL STUECK_SOLL

N200 _TNR=$TC_MPP6[9998,1]
N210 IF _TNR == 0
RET
ENDIF

;ABFRAGE AUF MEHR SCHNEIDEN UND OB UEBERWACHUNG AKTIV
N220 IF (($P_TOOLND[_TNR] >1) AND (($TC_TP9[_TNR] == 1) OR ($TC_TP9[_TNR] == 2)))

;RESTE AUSLESEN
N230 RESTZEIT_D1 = $TC_MOP2[_TNR,1] RESTZEIT_D2 = $TC_MOP2[_TNR,2]
N240 RESTSTUECK_D1 = $TC_MOP4[_TNR,1] RESTSTUECK_D2 = $TC_MOP4[_TNR,2]
N250 ZEIT_SOLL = $TC_MOP11[_TNR,2] STUECK_SOLL = $TC_MOP13[_TNR,2]

;NEUE RESTZEIT/STUECKE BERECHNEN
N260 RESTZEIT_NEU = ZEIT_SOLL-(ZEIT_SOLL - RESTZEIT_D1)-(ZEIT_SOLL-RESTZEIT_D2)
N270 RESTSTUECK_NEU = STUECK_SOLL-(STUECK_SOLL-RESTSTUECK_D1)-(STUECK_SOLL-RESTSTUECK_D2)
N280 IF RESTZEIT_NEU <$TC_MOP1[_TNR,1]
N290 RESTZEIT_NEU = $TC_MOP1[_TNR,1] ;SETZE AUF VERSCHLEISSGRENZE
N300 ENDIF
N310 IF RESTSTUECK_NEU < $TC_MOP4[_TNR,1]
N320 RESTSTUECK_NEU = $TC_MOP4[_TNR,1]
N330 ENDIF

;WIEDER EINTRAGEN UND RESTE ZUM VERGLEICH ALS SOLL IN D2 SPEICHERN
N340 $TC_MOP2[_TNR,1]=RESTZEIT_NEU $TC_MOP2[_TNR,2]=RESTZEIT_NEU
N350 $TC_MOP4[_TNR,1]=RESTSTUECK_NEU $TC_MOP4[_TNR,2]=RESTSTUECK_NEU
N360 $TC_MOP11[_TNR,2]=RESTZEIT_NEU $TC_MOP13[_TNR,2]=RESTSTUECK_NEU
N380 ENDIF
RET


Und nach dem Plattenwechsel kommt dann das:

QUOTE
N740 $TC_MOP2[_TNR,1]=$TC_MOP11[_TNR,1] ;MOP2 STANDZEIT MINUTEN NEU
N750 $TC_MOP4[_TNR,1]=$TC_MOP13[_TNR,1] ;MOP4 STANDZEIT STUECK NEU
N760 IF $P_TOOLND[_TNR] >1
N770 $TC_MOP2[_TNR,2]=$TC_MOP11[_TNR,1] ; IST ZEIT D1 = D2
N780 $TC_MOP4[_TNR,2]=$TC_MOP13[_TNR,1] ; IST STUECK D1 = D2
N790 $TC_MOP11[_TNR,2]=$TC_MOP11[_TNR,1]; SOLL ZEIT D1 = D2
N800 $TC_MOP13[_TNR,2]=$TC_MOP13[_TNR,1];SOLL STUECK D1 = D2


--------------------
"Geht nicht", gibt es nicht!
   
Beitrag 11.09.2009, 21:39 Uhr
Drehpapst
Drehpapst
Level 5 = Community-Ingenieur
*****
Gruppe: Mitglied
Mitglied seit: 28.04.2005
Beiträge: 650
Sieht mal nicht schlecht aus. Du kannst für das zwischenspeichern auch D2 nehmen. Ich persönlich würde eher eine Variable nehmen, aber wahrscheinlich egal. Ich sehe du liest nur aus von dem MOP1 (Vorwarngrenze Standzeit) und wenn die Zeit im RESTZEIT_NEU kleiner ist als die Vorwarngrenze liest du die Vorwarngrenze aus und schreibst den Wert nach RESTZEIT_NEU.
Den Wert für MOP1 lässt du wie er ist. Ich weiss jetzt nicht genau, wann da die Vorwarngrenze einsetzt, es könnte aber sein dass es während des Programmlaufs dazu kommt. Wobei die Vorwarngrenze egal ist, aber wenn die Standzeit abläuft könnte es Probleme geben. Bei der Standzeit werden alle Vorschubbewegungen gezählt. Wenn du nun ein paar G0 Sätze mit drin hast und "Zeit" überwachst könnte es sein dass die Vorwarngrenze (nur wenn die Zeit ganz abläuft) dann zuschlägt. Bin mir da nicht sicher. Um das zu vermeiden (wenn es so sein sollte) dann kannst du den MOP1, wenn er kleiner ist als die Sollzeit für ein Teil, diesen MOP1 auf den Wert setzen für ein Teil. Dann wird das auf jeden Fall fertig gemacht.
Was bedeutet denn ZEIT_SOLL? Ist das der Wert für eine neue Platte oder die Zeit für ein Teil?
Wär nicht schlecht wenn du die Bedeutung der Variablen etwas deutlicher machen könntest. Dann könnte ich es besser verstehen was du genau machst. Sieht jedenfalls nicht schlecht aus so weit.
Die Variablen würde ich nicht als Programmvariablen definieren, sondern als permanente im UGUD. Wenn sie nur in einem Kanal reichen dann DEF CHAN REAL ZEIT_SOLL, sonst DEF NCK REAL ZEIT_SOLL. Die Programmvariablen existieren nur innerhalb des Programmes und das könnte Probleme geben. Sicher wäre eine Definition im UGUD. Hätte auch den Vorteil dass du die Werte immer parat hast und bei einem Teilewechsel könntest du gleich die Zeit für das neue Teil errechnen und entsprechend aktualisieren.

Der Beitrag wurde von Drehpapst bearbeitet: 11.09.2009, 22:01 Uhr


--------------------
Gruß,

Drehpapst


Willen braucht man. Und Zigaretten.
Wer Visionen hat, sollte zum Arzt gehen.
Helmut Schmidt
   
Beitrag 11.09.2009, 22:19 Uhr
Michi1965
Michi1965
Level 3 = Community-Techniker
***
Gruppe: Mitglied
Mitglied seit: 19.01.2007
Beiträge: 295
Mit ZEIT_SOLL ist die Standzeit einer neuen Platte gemeint, der Begriff "Soll" wird sogar in den Überwachungsdaten der Werkzeugverwaltung verwendet. Unser Problem ist, das wir 6 Paletten auf der DMC125FD haben, auf jeder Palette ist ein anderes von etwa 140 verschiedenen Werkstücken, die in fast jeder erdenklichen Konstellation auf der Maschine sein können. Somit kann ich das mit der Zeit pro Werkstück vollkommen vergessen.
Das umspeichern in eine Kanalvariable hatte ich auch schon in Betracht gezogen. Allerdings könnte das bei etwa 120 Werkzeugen auf der Kette, davon etwa 30 mit mehreren Korrekturen, schnell unübersichtlich werden. Zumal ich jetzt schon (ohne dieses hier) etwa 20 Kanalvariablen bekannt gemacht habe.

Gesperrte Werkzeuge, werden entsperrt, bevor sie in die Kette abgelegt werden. Können also auch wieder eingewechselt werden. Das hat mir The _Black_Bird hier mal gemacht. Somit kein Problem, wenn die Bearbeitung doch etwas zu lange dauert.
QUOTE
;INTERNE T-NR DES SPINDELWKZ LESEN, GGF. SPERRE AUFHEBEN
IF ($TC_TP8[_TNR]B_AND 'B100')
$TC_TP8[_TNR]=$TC_TP8[_TNR]-4
ENDIF


--------------------
"Geht nicht", gibt es nicht!
   
Beitrag 11.09.2009, 22:38 Uhr
Drehpapst
Drehpapst
Level 5 = Community-Ingenieur
*****
Gruppe: Mitglied
Mitglied seit: 28.04.2005
Beiträge: 650
Ok, bei so vielen Werkzeugen und Teilen ist das ganz schön schwierig und auch unübersichtlich. Dann ist das so sicher besser.
Dass der Begriff SOLL in den daten verwendet wird ist mir klar. Die Werte stehen doch dann auch in MOP11 bzw. MOP13. Daher frage ich ja. Somit hast du sie doppelt.
Ich weiss halt nicht bei der Zeitüberwachung ob diese die Maschine hinstellt während der Bearbeitung wenn die Standzeit auf "0" ist. Während Vorschubsätzen sicher nicht. Aber wenn ein paar G0 kommen, was passiert dann? Gehts weiter bis Teil fertig oder steht sie dann hin? Darüber denke ich nach....weil ich es nicht weiss.

N260 RESTZEIT_NEU = ZEIT_SOLL-(ZEIT_SOLL - RESTZEIT_D1)-(ZEIT_SOLL-RESTZEIT_D2)
N270 RESTSTUECK_NEU = STUECK_SOLL-(STUECK_SOLL-RESTSTUECK_D1)-(STUECK_SOLL-RESTSTUECK_D2)
...............................
N360 $TC_MOP11[_TNR,2]=RESTZEIT_NEU $TC_MOP13[_TNR,2]=RESTSTUECK_NEU
.......................................
N790 $TC_MOP11[_TNR,2]=$TC_MOP11[_TNR,1]; SOLL ZEIT D1 = D2
N800 $TC_MOP13[_TNR,2]=$TC_MOP13[_TNR,1];SOLL STUECK D1 = D2

Hab ich da was übersehen oder steht nach Plattenwechsel nicht der Wert für eine neue Platte in MOP11 und 13?
Ok, du lässt D1 unberührt. Dann ist alles klar.

Der Beitrag wurde von Drehpapst bearbeitet: 11.09.2009, 22:50 Uhr


--------------------
Gruß,

Drehpapst


Willen braucht man. Und Zigaretten.
Wer Visionen hat, sollte zum Arzt gehen.
Helmut Schmidt
   
Beitrag 12.09.2009, 00:28 Uhr
Michi1965
Michi1965
Level 3 = Community-Techniker
***
Gruppe: Mitglied
Mitglied seit: 19.01.2007
Beiträge: 295
Und wenn die Standzeit des aktuellen Spindelwerkzeuges rechnerisch bei -20 Minuten liegen sollte, das Teil wird fertig bearbeitet. Soweit ist das kein Problem.
Und das Programm, oder vielmehr der Ausschnitt aus einem Unterprogramm, lauft auch. Sogar so, wie ich es mir gedacht habe thumbs-up.gif
Habe mir die Trial von Sinutrain geladen und installiert.
In 14 Tagen ist damit leider wieder Feierabend. Daher sollte ich in dieser Zeit sämtliche Zyklen, die ich noch schreiben will, fertig haben.

Der Beitrag wurde von Michi1965 bearbeitet: 12.09.2009, 00:31 Uhr


--------------------
"Geht nicht", gibt es nicht!
   
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: