Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

Nullpunkte aus Parametern in NC-Code schreiben

Beitrag 21.02.2018, 16:08 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
Hallo zusammen,

ich arbeite an einer Chiron FZ15W (Wechseltisch, eine Spindel) mit Sinumerik 840D Operate.
Die Nullpunkte lese ich über das Programm folgendermassen ein:

$P_UIFR[1]=CTRANS(X,-181.1,Y,-219.98,Z,-330.26,A,0)
$P_UIFR[2]=CTRANS(X,-181.1,Y,-324.74,Z,-410.885-0.08,A,0)
$P_UIFR[3]=CTRANS(X,-181.1,Y,-115.25,Z,-410.98-0.02,A,0)
$P_UIFR[5]=CTRANS(X,-516.95-0.1,Y,-265.52,Z,-345.57-0.05,A,0)
$P_UIFR[6]=CTRANS(X,-516.95-0.1,Y,-309.4+0.06,Z,-408.25,A,0)
$P_UIFR[7]=CTRANS(X,-516.95-0.1,Y,-130.6-0.06,Z,-389.44,A,0)

Damit die Nullpunkte gleich von Beginn an stimmen, taste ich mit dem Messtaster alle Stellen an und notiere diese von Hand im NC-Programm.
Damit die ganze Handhabung einfacher wird und auch keine Fehler unterlaufen können, möchte ich mit dem Messtaster diese Stellen antasten und gleich in einem Nullpunkt (G54 / G55...) in den Parametern speichern.
Anschliessend möchte ich durch ein NC-Programm "Nullpunkte_auslesen.MPF" diese Nullpunkte aus den Parametern auslesen und in ein neues Programm "Nullpunkte_ausgelesen.MPF" schreiben. Somit muss ich keine Nullpunkte von Hand notieren, sondern lediglich die Nullpunkte in mein entsprechendes Bearbeitungsprogramm kopieren.
Ich weiss jedoch nicht, wie ich dies genau ausführen soll, beziehungsweise ob das so umsetzbar ist.

Vielen Dank für Lösungsvorschläge.

Gruss Roman
   
Beitrag 21.02.2018, 16:34 Uhr
Hexogen
Hexogen
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 29.09.2004
Beiträge: 1.813
hey mbudget1992

es gibt zwei Möglickeiten.
entweder über Rüstdaten Sicherung.

Also die musst Du von Hand ausführen.
Oder über WRITE Befehl.


--------------------
Schaut doch mal rein:
Mein Youtube Kanal


Anwendungen, Zyklen, CAD/CAM





-----------------------------------------------------------------------------------------------------------------------------
   
Beitrag 21.02.2018, 20:12 Uhr
platsch
platsch
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 01.11.2017
Beiträge: 308
Warum so umständlich?
Mit den Meßzyklen kannst du doch direkt in die NPV schreiben.
Wenn ich richtig sehe, sind das auch nur die 4 Achswerte, die interressieren.
Mit "Rüstdaten sichern" bekommst Du diese Nullpunkte fein säuberlich mit allen Elementen gesichert. Also auch die Feinverschiebung, Rotation, Skalierung und Spiegelung. Um sicher zu gehen, daß da nichts unerwünschtes stehen bleibt, sollten diese Werte auch überschrieben werden.
Man kann's aber auch zu Fuß im DIN machen. wink.gif
   
Beitrag 22.02.2018, 06:09 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
Hallo zusammen,

erstmals vielen Dank für die schnellen Antworten smile.gif
Ich habe dies vielleicht ein bisschen zu wenig präzise beschrieben.
Die Nullpunkte taste ich jeweils nur bei neunen Werkstücken an (erstes mal auf Maschine).
Anschliessend notiere ich diese Nullpunkte ich meinen Programm "Nullpunkte.MPF".
Wenn diese Werkstücke z.B. zwei Monate später wieder auf der Maschine bearbeitet werden müssen, muss ich die Nullpunkte nicht mehr antasten, denn die habe ich ja fix in meinem Nullpunktprogramm.

Gruss Roman
   
Beitrag 22.02.2018, 10:08 Uhr
Hexogen
Hexogen
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 29.09.2004
Beiträge: 1.813
Hey Roman,

die schnellste und einfachste Variante, Rüstdaten Sichern.

Es wird ne Datei angelegt für Nullpunkt, wenn du mittels Werkstücke arbeitest, wird die zum Werkstück im Ordner angelegt.
Bevor du jetzt im halben Jahr das Bauteil wieder laufen lässt, lässt das Programm mit den Nullpunkten laufen.


--------------------
Schaut doch mal rein:
Mein Youtube Kanal


Anwendungen, Zyklen, CAD/CAM





-----------------------------------------------------------------------------------------------------------------------------
   
Beitrag 22.02.2018, 13:14 Uhr
platsch
platsch
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 01.11.2017
Beiträge: 308
Genau.
... je nach Version, kannst Du mit "Rüstdaten sichern" unterschiedlich fein auswählen, was alles gesichert werden soll.
Willst Du nur diesen einen Nullpunkt, der im Programm verwendet wird, kannst Du auch nur diesen "Programm-Nullpunkt" sichern und alles andere abwählen.
In dieser INI-Datei ist dann auch nur ein Satz, der alle Werte des, bei der Sicherung ausgewählten, Nullpunkts schreibt.
   
Beitrag 26.02.2018, 07:27 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
Hallo zusammen,

vielen Dank für die Vorschläge.
Ich habe dies mit den Rüstdaten sichern bereits ausprobiert. Ich kann einfach alle Nullpunktverschiebungen zusammen speichern.
Ich würde jedoch die Variante mit dem "write" bevorzugen, jedoch weiss ich nicht, mit welchen Parametern ich diese Nullpunktwerte auslesen und schreiben kann.
Weiss jemand, mit welchen Parametern ich dafür arbeiten muss?

Vielen Dank.

Gruss Roman
   
Beitrag 26.02.2018, 08:30 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Hast du es schon mal mit dem Lesen der Doku probiert (Arbeitsvorbereitung, Frames; Framekomponenten lesen und verändern (TR, FI, RT, SC, MI).
Dort liest man z.B..
R12 = $P_UIFR[25, Z, T] Der Verschiebewert TR in Z aus dem Datensatz des eingestellten Frames Nr. 25 soll der Variablen R12 zugewiesen werden.
   
Beitrag 26.02.2018, 09:14 Uhr
platsch
platsch
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 01.11.2017
Beiträge: 308
QUOTE (mbudget1992 @ 26.02.2018, 07:27 Uhr) *
Hallo zusammen,

vielen Dank für die Vorschläge.
Ich habe dies mit den Rüstdaten sichern bereits ausprobiert. Ich kann einfach alle Nullpunktverschiebungen zusammen speichern.
Ich würde jedoch die Variante mit dem "write" bevorzugen, jedoch weiss ich nicht, mit welchen Parametern ich diese Nullpunktwerte auslesen und schreiben kann.
Weiss jemand, mit welchen Parametern ich dafür arbeiten muss?

Vielen Dank.

Gruss Roman


Ich verstehe nicht ganz den Sinn der Aktion.
Willst du die Frameelemente erst einzeln in Variable schreiben, um Sie dann einzeln in eine Datei zu schreiben?
Im Ausgangspost schreibst Du, daß Du den Nullpunkt sichern möchtest, um ihn auch nach einem halben Jahr wieder schnell setzen zu können. Das geht am schnellsten und sichersten mit "Rüstdaten Sichern".Genau dafür wurde die Funktion ja auch eingerichtet!
Selbst wenn die HMI-Version nicht anbietet, nur den im Programm verwendeten Nullpunkt zu sichern, ist es doch simpel zu lösen.
Einfach die ...TMZ.INI auf einen USB-Stick kopieren und am PC/Laptop im Texteditor deiner Wahl die nicht benötigten Nullpunkte (Initialisierung), entweder mit einem vorangestellten Strichpunkt (Semikolon ";") auszublenden, oder ganz zu löschen.
Anschließend die Datei wieder zurückkopieren und das Überschreiben der Datei bestätigen.
Wenn Du diesen Nullpunkt beim Einrichten wieder brauchst, einfach die ...TMZ.INI aufrufen und bestätigen.
Noch einfacher gehts nun wirklich nicht.

Der Beitrag wurde von platsch bearbeitet: 26.02.2018, 09:16 Uhr
   
Beitrag 26.02.2018, 09:41 Uhr
Hexogen
Hexogen
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 29.09.2004
Beiträge: 1.813
QUOTE (mbudget1992 @ 26.02.2018, 08:27 Uhr) *
Weiss jemand, mit welchen Parametern ich dafür arbeiten muss?


Hallo Roman...

Nullpunkte liest Du mitelt $P_UIFR aus. Wie CNCFr schon schrieb.

$P_UIFR[ nullpunkt nr (1-32), achs bezeichnun, lesebereich]

wobei Lesebereich TR= grobverschiebung FI= fein verschiebung RT= rotation SC= scale MI= mirror ist.

Jetzt müsstest Du noch mittels Write das schreiben.

WRITE(error, pfad & dateiname, schreibwert)

du kannst den schreibwert für WRITE verketten. Und so alles in eine Zeile schreiben lassen. Inkl. Header.

Gruß Alex

Der Beitrag wurde von Hexogen bearbeitet: 26.02.2018, 09:41 Uhr


--------------------
Schaut doch mal rein:
Mein Youtube Kanal


Anwendungen, Zyklen, CAD/CAM





-----------------------------------------------------------------------------------------------------------------------------
   
Beitrag 26.02.2018, 13:11 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
QUOTE (platsch @ 26.02.2018, 08:14 Uhr) *
Ich verstehe nicht ganz den Sinn der Aktion.
Willst du die Frameelemente erst einzeln in Variable schreiben, um Sie dann einzeln in eine Datei zu schreiben?
Im Ausgangspost schreibst Du, daß Du den Nullpunkt sichern möchtest, um ihn auch nach einem halben Jahr wieder schnell setzen zu können. Das geht am schnellsten und sichersten mit "Rüstdaten Sichern".Genau dafür wurde die Funktion ja auch eingerichtet!
Selbst wenn die HMI-Version nicht anbietet, nur den im Programm verwendeten Nullpunkt zu sichern, ist es doch simpel zu lösen.
Einfach die ...TMZ.INI auf einen USB-Stick kopieren und am PC/Laptop im Texteditor deiner Wahl die nicht benötigten Nullpunkte (Initialisierung), entweder mit einem vorangestellten Strichpunkt (Semikolon ";") auszublenden, oder ganz zu löschen.
Anschließend die Datei wieder zurückkopieren und das Überschreiben der Datei bestätigen.
Wenn Du diesen Nullpunkt beim Einrichten wieder brauchst, einfach die ...TMZ.INI aufrufen und bestätigen.
Noch einfacher gehts nun wirklich nicht.


Die Maschine hat einen Schwenktisch. Auf jeder Tischseite bearbeite ich ein Werkstück komplett fertig (gleiche Teile auf beiden Seiten). Somit habe ich zwei Tischseiten, welche das gleiche Bearbeitungsprogramm und die gleichen Nullpunktverschiebungen verwendet. Vor jedem Aufruf des Bearbeitungsprogramms frage ich die Tischseite ab und lese die entsprechenden Werte der Nullpunktverschiebung ein. Dadurch funktioniert das mit den Rüstdaten einmal einlesen nicht wie gewünscht.

Trotzdem vielen Dank für die Hilfe.

Gruss Roman
   
Beitrag 26.02.2018, 16:09 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Wäre es dann nicht einfacher und übersichtlicher für jede der beiden Tischseiten eine eigene Nullpunktverschiebung zu verwenen, z.B. G57 und G58, oder verstehe ich da etwas falsch?
   
Beitrag 26.02.2018, 23:57 Uhr
platsch
platsch
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 01.11.2017
Beiträge: 308
Mit gleichen Nullpunktverschiebungen wird das auch nicht funktionieren können. Denn mindestens ein Achswert muß unterschiedlich sein, nämlich der von B.
Du hast also mehrere Möglichkeiten, den Nullpunkt je Tischseite zu setzen:
So, wie CNCFr vorgeschlagen hat, nimmst Du je Seite einen Nullpunkt. Zum Beispiel, G54 und G55.
Oder du nimmst die Tischmitte als Nullpunkt (Bsw. G54) und setzt die Werkstück-Nullpunkte im Programm.
CODE
G54
TRANS X=120 Y=10 Z=200 B=0
G0 X0 Y0 Z50 B0
WERKSTUECK
TRANS X=120 Y=10 Z=200 B=180
G0 X0 Y0 Z50 B0
WERKSTUECK
M30
   
Beitrag 27.02.2018, 09:24 Uhr
Hexogen
Hexogen
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 29.09.2004
Beiträge: 1.813
QUOTE (CNCFr @ 26.02.2018, 17:09 Uhr) *
Wäre es dann nicht einfacher und übersichtlicher für jede der beiden Tischseiten eine eigene Nullpunktverschiebung zu verwenen, z.B. G57 und G58, oder verstehe ich da etwas falsch?


Ne.
Da man öfters das ein und das selbe Programm für beide Tischseiten nutzt.
Du nutzt dann ein Pendelprogramm und in diesem wird je nach Tischseite andere Nullpunkte geladen.
Vorteile sind, deine Bearbeitung läuft Tischeitenunabhängig, du pflegst nur die Nullpunkte und musst nicht ständig dein Bearbeitungsprogramm umschreiben. Was zu Fehler und Crash führen kann.


--------------------
Schaut doch mal rein:
Mein Youtube Kanal


Anwendungen, Zyklen, CAD/CAM





-----------------------------------------------------------------------------------------------------------------------------
   
Beitrag 27.02.2018, 09:33 Uhr
Hexogen
Hexogen
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 29.09.2004
Beiträge: 1.813
QUOTE (platsch @ 27.02.2018, 00:57 Uhr) *
Mit gleichen Nullpunktverschiebungen wird das auch nicht funktionieren können. Denn mindestens ein Achswert muß unterschiedlich sein, nämlich der von B.


Doch, da du das Nullpunktladen, Tischseitenabhängig machst.
Die Achse wird umgeschrieben sobald man die Tischseite unter der Spindel hat.
Sprich du programmierst, in der Bearbeitung, immer A Achse.
Daher ein Bearbeitungsprogramm und Separate Programme zur Nullpunktverschiebung, Tischseitenabhängig.

Beispiel.

Abfrage Tisch 1 oder Tisch 2 unter spindel
Wenn Tisch 1 unter Spindel gehe zu Tisch 2

Tisch1:
Nullpunkte Tisch1
Bearbeitung

Tisch2:
Nullpunkte Tisch2
Bearbeitung

gehe zum anfang

Allerdings würde ich mir nen Merke in das Messprogramm platzieren und erst messen wenn benötigt wird.

Der Beitrag wurde von Hexogen bearbeitet: 27.02.2018, 09:33 Uhr


--------------------
Schaut doch mal rein:
Mein Youtube Kanal


Anwendungen, Zyklen, CAD/CAM





-----------------------------------------------------------------------------------------------------------------------------
   
Beitrag 27.02.2018, 09:38 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
QUOTE (Hexogen @ 27.02.2018, 08:24 Uhr) *
Ne.
Da man öfters das ein und das selbe Programm für beide Tischseiten nutzt.
Du nutzt dann ein Pendelprogramm und in diesem wird je nach Tischseite andere Nullpunkte geladen.
Vorteile sind, deine Bearbeitung läuft Tischeitenunabhängig, du pflegst nur die Nullpunkte und musst nicht ständig dein Bearbeitungsprogramm umschreiben. Was zu Fehler und Crash führen kann.



Genau das ist das Problem. Deshalb arbeite ich mit einem Pendelprogramm. Darin werden je nach Tischseite die Nullpunkte gelesen und anschliessend das Bearbeitungsprogramm gestartet.

Das mit dem WRITE Befehl für die Nullpunkte funktioniert dank eurer Hilfe nun fast wie gewollt. Das einzige Problem ist noch die Verknüpfung von mehreren Parametern in einem Befehl.

Wie muss ich diesen Code schreiben, damit mir alles auf einer Zeile protokolliert wird, wie in diesem Beispiel:
$P_UIFR[1]=CTRANS(X,-181.1,Y,-219.98,Z,-330.26,A,0)

WRITE(_ERROR,"_N_NULLPUNKTE","$P_UIFR[1]=CTRANS(X,"<<$P_UIFR[1,X,TR])
WRITE(_ERROR,"_N_NULLPUNKTE",",Y,"<<$P_UIFR[1,Y,TR])
WRITE(_ERROR,"_N_NULLPUNKTE",",Z,"<<$P_UIFR[1,Z,TR])
WRITE(_ERROR,"_N_NULLPUNKTE",",A,0)")

Ich habe diverses Versucht, diese zu verknüpfen, leider ohne Erfolg.

Vielen Dank für eure Hilfe.

Gruss Roman
   
Beitrag 27.02.2018, 10:51 Uhr
Hexogen
Hexogen
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 29.09.2004
Beiträge: 1.813
QUOTE (mbudget1992 @ 27.02.2018, 10:38 Uhr) *
$P_UIFR[1]=CTRANS(X,-181.1,Y,-219.98,Z,-330.26,A,0)


Hallo Roman.

Du kannst dir String mittels Verkettung basteln.
"<<" Stringverkettung

CODE
DEF INT NPNUM
DEF STRING[255] WRITESTRING

NPNUM=1

WRITESTRING="$P_UIFR[" << NPNUM << "]=CTRANS(X," << $P_UIFR[NPNUM,X,TR]) << ",Y," << $P_UIFR[NPNUM,Y,TR]) << ",Z," << $P_UIFR[NPNUM,Z,TR]) << ",A," << $P_UIFR[NPNUM,A,TR])  <<")"

WRITE(_ERROR,"_N_NULLPUNKTE",WRITESTRING)

NPNUM=2

WRITESTRING="$P_UIFR[" << NPNUM << "]=CTRANS(X," << $P_UIFR[NPNUM,X,TR]) << ",Y," << $P_UIFR[NPNUM,Y,TR]) << ",Z," << $P_UIFR[NPNUM,Z,TR]) << ",A," << $P_UIFR[NPNUM,A,TR])  <<")"

WRITE(_ERROR,"_N_NULLPUNKTE",WRITESTRING)
usw.


so in etwa.

Macht da nicht mehr Sinn dein Messprogramm so anzupassen das du beim ersten lauf misst und im Pendelbetrieb nicht mehr?


--------------------
Schaut doch mal rein:
Mein Youtube Kanal


Anwendungen, Zyklen, CAD/CAM





-----------------------------------------------------------------------------------------------------------------------------
   
Beitrag 27.02.2018, 14:38 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
Hallo Hexogen,

vielen Dank für deine schnellen Antworten.
Dank der Verkettung funktioniert alles wie gewünscht.
Ich werde dieses Programm nur bei der Inbetriebnahme eines neuen Werkstücks verwenden. Anschliessend kopiere ich die Nullpunkte in ein anderes Unterprogramm für den Pendelbetrieb.

Ich habe es nun folgendermassen gelöst:

DEF INT ERROR
DEF INT ANZAHL_NULLPUNKTE
DEF INT NULLPUNKT

;******************************************************************
ANZAHL_NULLPUNKTE=10
;******************************************************************

FOR NULLPUNKT=1 TO ANZAHL_NULLPUNKTE
WRITE(ERROR,"_N_NULLPUNKTE","$P_UIFR["<<NULLPUNKT<<"]=CTRANS(X,"<<$P_UIFR[NULLPUNKT,X,TR]<<",Y,"<<$P_UIFR[NULLPUNKT,Y,TR]<<",Z,"<<$P_UIFR[NULLPUNKT,Z,TR]<<",A,0)")
STOPRE
ENDFOR
M30


Somit konnte ich dank eurer Hilfe mein Problem lösen smile.gif
Vielen Dank nochmals.

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