584.866 aktive Mitglieder*
4.985 Besucher online*
Kostenfrei registrieren
Anmelden Registrieren
FANUC Forum

Fanuc Bohrpositionen als Variable

Beitrag 28.03.2015, 11:57 Uhr
nico1991
nico1991
Level 5 = Community-Ingenieur
*****
Gruppe: Mitglied
Mitglied seit: 01.11.2012
Beiträge: 626

Hallo zusammen,

brauche mal wieder Hilfe smile.gif

Ich habe folgende Situation:

- 100 Bauteile einer Bauteilfamilie. Diese unterscheiden sich in Länge und Anzahl der Bohrungen.
- Ich möchte alle Bauteile mit einem Programm abarbeiten und es für den Bediener möglichst einfach gestalten.

Ich dachte an folgendes:

Aufruf des Bearbeitungsprogramms:

G65 P0233 W1 (bis W100)

Dafür steht das Programm O0233 für die Teilefamilie und über die Variable W wird entschieden, welches der Teile 1 bis 100 die Maschine fertigen soll.

Die Länge des Bauteils konnte ich problemlos verarbeiten, ich möchte jetzt allerdings einen Weg finden, wie ich die Bohrungen noch variabel abarbeiten kann. Die Bohrpositionen unterscheiden sich nur in einer Koordinate und es soll gebohrt, gesenkt und ein Gewinde hineingeschnitten werden.

Zum Beispiel:

Teil 1: 5 Bohrungen auf X=10. X=23. X=28. X=34. X=42.
Teil 2: 3 Bohrungen auf X=13. X=35. X=45.

usw.

Vollkommen unregelmäßig also. Möglich Anzahl der Löcher: 1-20.
Ich wollte immer das gleiche abarbeitungsprogramm nutzen (O0233) und sozusagen im Kopf die Bohrkoordinaten einlesen und dachte an folgendes:

Hauptprigramm:

O0001()
G65 P0233 W2

Unterprogramm:

O0233()

#1=0;
#2=502;

(Variable 501-520 Null setzen)
WHILE [#1 LT 21] DO 1;
#1=#1+1;
#[500+#1]=0;
END 1;

GOTO #23 (In diesem Fall GOTO 2)


...
...
...


N2
#501=13.
#502=35.
#503=45.
GOTO N233

...
...
...


N233 (Abarbeitung der Bohrkoordinaten hier nur die relevanten Zyklen)

G00 X#501 Y0. Z2.
G81 Z-10. F1000.
(Ab hier bin ich mir unsicher)
(Kann ich innerhalb eines Bohrzyklus die Maschine rechnen lassen)
WHILE [#[#2] NE 0] DO 2;
X#[#2];
#2=#2+1;
END 2;
G80

...
...

M30


Ich hoffe man kann das Ganze nachvollziehen.

Gedankengang:
- Erst alle Bohrkoordinaten Null
- Dann alle Bohrkoordinaten über Variablen 501-520 einlesen
- Dann solange Bohren, bis die in Variable 501-520 die erste Null kommt. (Im Beispiel würde 504 die erste Null liefern und er wäre fertig mit Bohren)

Das habe ich mir eben ausgedacht. Es sind bestimmt irgendwo Syntaxfehler drin. Wenn jemand eine Idee hat, wie ich es umsetzen kann, oder weiß, dass ich innerhalb eines Bohrzyklus eine Schleife einsetzen kann wäre ich euch sehr dankbar.


Schönes Wochenende und Danke für eure Mühe

Nico

Der Beitrag wurde von nico1991 bearbeitet: 28.03.2015, 12:00 Uhr
TOP    
Beitrag 28.03.2015, 13:09 Uhr
Variabel
Variabel
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 09.02.2006
Beiträge: 393

Hallo Nico

Das Nullsetzen der Variablen kannst du dir eigentlich sparen.
Setz doch einfach immer die Null mit.

N2
#501=13.
#502=35.
#503=45.
#504=0.
GOTO N233


Des weiteren kannst du das mit dem Zyklus auch so lösen.

#2=501.
WHILE [#[#2] NE 0] DO 2;
G00 X#[#2] Y0. Z2.
G81 Z-10. F1000.
G80
#2=#2+1;
END 2;


Warum willst du eigentlich die 500´er Variablen benutzen?
Um eine Wiedereinstiegmöglichkeit zu haben würden die 100`er ja reichen. Weil ich denke mal, das deine Maschine ja auch nicht so oft
unter Stromausfall leidet biggrin.gif .
Oder schaltest du sie öfter mal während der Bearbeitung aus?

Naja. Ist nun mal Geschmackssache.


Gruß Variabel


--------------------
Auch wenn deine Steuerung dir sagt, das sie das nicht kann. Gibt es doch immer einen Weg sie von Gegenteil zu überzeugen.

Ach ja. Variabel war früher Speedy1.
TOP    
Beitrag 28.03.2015, 15:47 Uhr
nico1991
nico1991
Level 5 = Community-Ingenieur
*****
Gruppe: Mitglied
Mitglied seit: 01.11.2012
Beiträge: 626

Hallo Variabel,

vielen Dank für deine Antwort.

Zu 1:

Das stimmt, das kann man so machen. Auch dann sollte er an der richtigen Stelle "Abbrechen".

Zu 2:

Eben so wollte ich es nicht machen. Weil:

Jedes mal ein Bohrzyklus aufgerufen wird und es länger dauert, als wenn man alle Bohrungen in einem Zyklus hat! Beim Bohren und Senken könnte man das ganze sogar ausprogrammieren z.b.:

#2=501.
WHILE [#[#2] NE 0] DO 2;
G00 X#[#2] Y0. Z2.
G01 Z-10. F1000.
G00 Z2.
#2=#2+1;
END 2;

Für das Senken im G82 dann:

#2=501.
WHILE [#[#2] NE 0] DO 2;
G00 X#[#2] Y0. Z2.
G01 Z-2.5. F1000.
G04 X0.2
G00 Z2.
#2=#2+1;
END 2;

Aber wie mache ich das im Gewinde? Kann man Synchrongewindeschneiden ausserhalb eines Zyklus?

Normalerweise nimmt man ja G84.

M29/M26 S1000
G84 Z-8. F800.
X13.
X35.
X45.
G80

Hier immer wieder den Zyklus aufzurufen wäre lästig. Da es jedes mal eine Sekunde dauert, bis die Maschine die Spindel neu orientiert hat etc. Da es bei dem Bauteil um Sekunden geht, muss mir da was schlaueres einfallen.

Ich habe schon gedacht vielleicht die Anzahl der Bohrungen bis zur 0 einzulesen und dann einfach 20 verschiedene Zyklen zu schreiben und genau da dann das Gewinde zu schneiden. Wird zwar in der Programmerstellung länger, dafür in der Abarbeitung kürzer.

Ich denke aber, dass es da auch eine "sauebere Lösung" geben wird.


Die 500er Variablen benutze ich, da 100-120 dafür genutzt werden, zwischen den Kanälen zu kommunizieren (Mehrkanalmaschine) In 121-130 will ich Tages und Schichtstückzähler unterbringen, dann weiterhin Anzahl der gebrauchten Werkzeuge, und 140-150 nutzt der Messtaster für sich. 500-520 sind halt frei.

Beste Grüße

Nico
TOP    
Beitrag 28.03.2015, 16:25 Uhr
eckitsch
eckitsch
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 09.08.2007
Beiträge: 382

Hallo,

du kannst doch den Bohrzyklus vor die Schleife setzen.
Du mußt nur ein L0 am Ende dazuschreiben.
Der Zyklus wird dann definiert, aber nicht ausgeführt.
Du mußt dir nur vorher einen günstigen Startpunkt für Z überlegen.


...
G81 Z R L0
G65 P0233 W2
G80 (oder am Ende der Schleife)
...
...
G83 Z R Q L0
G65 P0233 W2
G80 (oder am Ende der Schleife)
...
...
G84 Z R F L0
G65 P0233 W2
G80 (oder am Ende der Schleife)
...


Gruß eckitsch.
TOP    
Beitrag 28.03.2015, 16:42 Uhr
nico1991
nico1991
Level 5 = Community-Ingenieur
*****
Gruppe: Mitglied
Mitglied seit: 01.11.2012
Beiträge: 626

Hallo,

das kannte ich garnicht muss ich ehrlich sagen.

Also kann ich definieren:

#2=501
G00 X#[#2] Y0.0 Z2.0
M329 S1000
G84 Z-8. F800. L0
WHILE [#[#2] NE 0] DO 2;
X#[#2]
#2=#2+1;
END 2;
G80

Und er würde mir die ganzen X Positionen durchbohren? Würde er in diesem Beispiel die erste Position 2mal bohren oder unterdrückt das der Ausdruck L0?

Gruß

Nico
TOP    
Beitrag 28.03.2015, 17:22 Uhr
Variabel
Variabel
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 09.02.2006
Beiträge: 393

Ok. Das mit der Zeit ,gerade beim Gewindebohren, leuchtet mir ein.

Und das mit dem L0 ist mir auch neu. Würde einem aber so einige neue Wege eröffnen. Muss ich auch mal testen.


--------------------
Auch wenn deine Steuerung dir sagt, das sie das nicht kann. Gibt es doch immer einen Weg sie von Gegenteil zu überzeugen.

Ach ja. Variabel war früher Speedy1.
TOP    
Beitrag 15.04.2015, 22:14 Uhr
gottvati
gottvati
Level 3 = Community-Techniker
***
Gruppe: Mitglied
Mitglied seit: 12.06.2006
Beiträge: 181

QUOTE (nico1991 @ 28.03.2015, 12:57 Uhr) *
Zum Beispiel:

Teil 1: 5 Bohrungen auf X=10. X=23. X=28. X=34. X=42.


Hi Nico,

man könnte es auch so schreiben:

O0233
( ... )
( BOHREN )
G81 R2. Z-15. L0 ( BEI MANCHEN STEUERUNGEN K0 )
M98 P0001 ( TEIL 1 )
( ... )
( SENKEN )
( ... )
( GEWINDE )
M29 S1000
G84 R2. Z-10. F1000 L0
M98 P0001 ( TEIL 1 )
( ... )
( AUF LAENGE #101 FRAESEN )
M30

O0001( TEIL 1 )
N101 X10. Y0
N102 X23. Y0
N103 X28. Y0
N104 X34. Y0
N105 X42. Y0
G80
#101=123. ( LAENGE )
M99

Gruß, Nisse


--------------------
Gruß, Nisse.
TOP    
Beitrag 15.04.2015, 22:42 Uhr
nico1991
nico1991
Level 5 = Community-Ingenieur
*****
Gruppe: Mitglied
Mitglied seit: 01.11.2012
Beiträge: 626

Moin,

ich habe das Thema mittlerweile gelöst.

Bohren und Senken habe ich komplett ohne Zyklus gemacht, also wirklich nur die Verfahrbewegungen

Bohren:

G97S6821M13
#10=1
WHILE[#10LE4]DO1
IF[#[500+#10]EQ0]GOTO410
M69
M269
G00C[[#10-1]*90.]Y0.Z#520.M484
M68
M268
X2.0
G65P1005A#505
G00G28U0
N410
#10=#10+1
END1


Mit

O1005
#10=1
WHILE[#10LE#505]DO1
G0Z#[519+#10]
G01X-16.5F682.1
G04X0.1
G0X2.
#10=#10+1
END1
M99


Habe Teile auf der Rundachse, deswegen ist noch eine C Drehung mit eingebaut.

Senken und Gewinde läuft genau gleich ab, nur beim Gewinde fragt er vorher ab, wie viele bohrungen vorhanden sind und erweitert dann den Gewindezyklus solange um eine Bohrung, bis die Anzahl der vorhandenen Bohrungen erreicht ist.


Ich danke allen Helfern.

LG Nico
TOP    
Beitrag 01.06.2015, 19:01 Uhr
m_white
m_white
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 20.02.2014
Beiträge: 2

QUOTE (nico1991 @ 28.03.2015, 14:47 Uhr) *
Die 500er Variablen benutze ich, da 100-120 dafür genutzt werden, zwischen den Kanälen zu kommunizieren (Mehrkanalmaschine) In 121-130 will ich Tages und Schichtstückzähler unterbringen, dann weiterhin Anzahl der gebrauchten Werkzeuge, und 140-150 nutzt der Messtaster für sich. 500-520 sind halt frei.


Grundsätzlich würde ich empfehlen, für die interne Verwendung die lokalen Variablen #1 bis #33 deines Unterprogramms zu benutzen, sofern diese nicht als Übergabeparameter verwendet werden (absichern, dass ungewünschte Übergabeparameter im Unterprogramm nicht falsch verwendet werden). So kannst du die Daten komplett aus deinem beschreibbaren Variablenspeicher raushalten.

Eine Variable, die keinen Inhalt hat/haben soll, würde ich niemals mit 0 belegen. Stattdessen würde ich sie mit #0 (empty) belegen (beachte das besondere Verhalten von #0 bei Vergleichsoperationen).
TOP    



1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: