Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

Aktive Frameinhalte Variablen auslesen

Beitrag 09.05.2019, 20:24 Uhr
CNC_BLOEDEL
CNC_BLOEDEL
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 01.07.2015
Beiträge: 10
Hallo,

ich müsste bitte nochmal kurz wissen, wie ich aktive Framekoordinaten auslesen und anschl. per Write schreiben kann.

1. Nullpunkt Ladeunterprogramm "NULLPUNKTE_TOPF_VORR_1" übergibt die Nullpunkte ans Hauptprogramm.
2. Messtaster ermittelt anschließend nochmal die aktuellen Positionen
3. Die o.g.Positionen sollen nun wieder ins Ladeunterprogramm "NULLPUNKTE_TOPF_VORR_1" mit Write geschrieben werden.

Die Siemens Doku ist in dem Fall wirklich äußerst, um nicht zu sagen "zu" ausführlich geschrieben ;-)
Also auf ganz dumm so: (bspw. VARIABLEX steht für die gesuchte Framevariable in X)

N10 DEF INT ERROR
N15 STOPRE
N20 WRITE (ERROR,NULLPUNKTE_TOPF_VORR_1,"$P_UIFR[1]=CTRANS(X,<<VARIABLEX<<,Y,<<VARIABLEY<<,Z,<<VARIABLEZ<<,B,<<VARIABLEB<<)"
N25 WRITE (ERROR,NULLPUNKTE_TOPF_VORR_1,"$P_UIFR[2]=CTRANS(X,<<VARIABLEX<<,Y,<<VARIABLEY<<,Z,<<VARIABLEZ<<,B,<<VARIABLEB<<)"

Herzlichen Dank euch.
   
Beitrag 09.05.2019, 21:34 Uhr
Techniker_HSC
Techniker_HSC
Level 3 = Community-Techniker
***
Gruppe: Mitglied
Mitglied seit: 02.01.2009
Beiträge: 160
Verstehe ich dich Richtig das du einen Befehl für das auslesen suchst?

Such mal nach ACTFRAME in der Anleitung
   
Beitrag 10.05.2019, 07:45 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
QUOTE (CNC_BLOEDEL @ 09.05.2019, 21:24 Uhr) *
N10 DEF INT ERROR
N15 STOPRE
N20 WRITE (ERROR,NULLPUNKTE_TOPF_VORR_1,"$P_UIFR[1]=CTRANS(X,<<VARIABLEX<<,Y,<<VARIABLEY<<,Z,<<VARIABLEZ<<,B,<<VARIABLEB<<)"

Wozu soll der Satz N15 gut sein?
Wo in der Doku hast du gelesen, dass man die Argumentliste des WRITE-Befehls mit einer Klammer öffnet und mit Gänsefüsschen abschließt?
Aber jetzt mal etwas konstruktiver:
Das dritte Argument muss ein String sein. Alles was zwischen Anführungszeichen steht wird so, wie es da steht ausgegeben, d.h. es wird nicht interpretiert. Wenn du Werte von Variablen ausgeben willst, musst du einen String aus einzelnen Komponenten durch Verkettung mit dem Operator << aufbauen
In der Doku gibt es dazu ein eigenes Kapitel mit der Überschrift "Verkettung von Strings" mit mehreren Beispielen. Man muss das nur lesen.
Das Ergebnis sieht dann z.B. so aus:

N20 WRITE (ERROR,NULLPUNKTE_TOPF_VORR_1,"$P_UIFR[1]=CTRANS(X, " << $P_UIFR[1, X, TR] << ", Y, " << $P_UIFR[1, Y, TR ] << ", Z, " << $P_UIFR[1, Z, TR ] << ", B, " << $P_UIFR[1, B, TR] << ")")

Der String ist also zunächst
"$P_UIFR[1]=CTRANS(X, "
Wenn die Nullpunktverschiebung in X z.B. den Wert 100 hat, wird dann die Zahl 100 angehängt, d.h. der String sieht dann so aus:
"$P_UIFR[1]=CTRANS(X, 100"
Und weiter:
"$P_UIFR[1]=CTRANS(X, 100, Y,"
...
Bis zum Schluss dann mit ")" noch die schließende Klammer angehängt wird.
Noch ein Tip:
Es kann sinnvoll sein, eine Stringvariable zu definieren und den Gesamtstring schrittweise in mehreren Sätzen aufzubauen. Dann kannst du nach jedem Schritt das Ergebnis überprüfen (MSG-Ausgabe), und wenn irgendwo ein Fehler steckt, sieht man genau, wo das Problem liegt. Wenn das dann alles funktioniert, kann man den String als Argument im WRITE-Befehl übergeben, oder wenn einem das lieber ist, den String unmittelbar im WRITE-Befehl aufbauen. Also etwa so:

DEF STRING[200] TESTSTRING
TESTSTRING = ""$P_UIFR[1]=CTRANS(X, "
TESTSTRING = TESTSTRING << $P_UIFR[1, X, TR]
TESTSTRING = TESTSTRING << ", Y, "
usw.
   
Beitrag 10.05.2019, 09:38 Uhr
CNC_BLOEDEL
CNC_BLOEDEL
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 01.07.2015
Beiträge: 10
QUOTE (CNCFr @ 10.05.2019, 06:45 Uhr) *
Wozu soll der Satz N15 gut sein?
Wo in der Doku hast du gelesen, dass man die Argumentliste des WRITE-Befehls mit einer Klammer öffnet und mit Gänsefüsschen abschließt?
Aber jetzt mal etwas konstruktiver:
Das dritte Argument muss ein String sein. Alles was zwischen Anführungszeichen steht wird so, wie es da steht ausgegeben, d.h. es wird nicht interpretiert. Wenn du Werte von Variablen ausgeben willst, musst du einen String aus einzelnen Komponenten durch Verkettung mit dem Operator << aufbauen
In der Doku gibt es dazu ein eigenes Kapitel mit der Überschrift "Verkettung von Strings" mit mehreren Beispielen. Man muss das nur lesen.
Das Ergebnis sieht dann z.B. so aus:

N20 WRITE (ERROR,NULLPUNKTE_TOPF_VORR_1,"$P_UIFR[1]=CTRANS(X, " << $P_UIFR[1, X, TR] << ", Y, " << $P_UIFR[1, Y, TR ] << ", Z, " << $P_UIFR[1, Z, TR ] << ", B, " << $P_UIFR[1, B, TR] << ")")

Der String ist also zunächst
"$P_UIFR[1]=CTRANS(X, "
Wenn die Nullpunktverschiebung in X z.B. den Wert 100 hat, wird dann die Zahl 100 angehängt, d.h. der String sieht dann so aus:
"$P_UIFR[1]=CTRANS(X, 100"
Und weiter:
"$P_UIFR[1]=CTRANS(X, 100, Y,"
...
Bis zum Schluss dann mit ")" noch die schließende Klammer angehängt wird.
Noch ein Tip:
Es kann sinnvoll sein, eine Stringvariable zu definieren und den Gesamtstring schrittweise in mehreren Sätzen aufzubauen. Dann kannst du nach jedem Schritt das Ergebnis überprüfen (MSG-Ausgabe), und wenn irgendwo ein Fehler steckt, sieht man genau, wo das Problem liegt. Wenn das dann alles funktioniert, kann man den String als Argument im WRITE-Befehl übergeben, oder wenn einem das lieber ist, den String unmittelbar im WRITE-Befehl aufbauen. Also etwa so:

DEF STRING[200] TESTSTRING
TESTSTRING = ""$P_UIFR[1]=CTRANS(X, "
TESTSTRING = TESTSTRING << $P_UIFR[1, X, TR]
TESTSTRING = TESTSTRING << ", Y, "
usw.
   
Beitrag 10.05.2019, 09:41 Uhr
CNC_BLOEDEL
CNC_BLOEDEL
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 01.07.2015
Beiträge: 10
Hallo und besten Dank.
Mein Problem ist hier übrigens u.a. darin begründet, wir haben hier nicht mal eine Sinutrain (geschweigedenn NCSIMUL o.ä.) auf dem CAD CAM Rechner um so was syntaxmäßig zu testen.
Ergo müsste unten in der Halle natürlich die Produktivmaschine als Versuchsmaschine herhalten.
Das ist natürlich alles andere als optimal. Jedenfalls werde ich den Code entsprechend deinen Vorschlägen editieren und schauen ob was brauchbares dabei herauskommt.
Vielen Dank nochmal und schönen Gruß
   
Beitrag 10.05.2019, 10:36 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Es gibt eine kostenlose, leider heftig kastrierte Version von Sintrain, die man sich herunterladen kann.
Für solche Sachen, wie in deinem Fall, kann man das schon verwenden.
Ich habe auch nur diese Sparversion. Was ich oben geschrieben habe, habe damit jetzt aber auch nicht getestet.
   
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: