Siemens
Digital Industries, Motion Control, Machine Tool Systems
8840
Follower:innenAktive Frameinhalte Variablen auslesen
09.05.2019, 20:24 Uhr
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.
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.
09.05.2019, 21:34 Uhr
Techniker_HSC
Level 3 = Community-Techniker
Gruppe: Mitglied
Mitglied seit: 02.01.2009
Beiträge: 160
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
Such mal nach ACTFRAME in der Anleitung
10.05.2019, 07:45 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<<)"
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.
10.05.2019, 09:38 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.
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.
10.05.2019, 09:41 Uhr
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ß
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ß
10.05.2019, 10:36 Uhr
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.
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: