Siemens
Digital Industries, Motion Control, Machine Tool Systems
8840
Follower:innenParameter (String) in ein Unterprogramm übernehmen, WIE?
01.07.2019, 08:31 Uhr
Ich habe folgendes Problem,
In einem Hauptprogramm wird ein STRING erzeugt und beschrieben.
Diesen STRING möchte ich in einem Unterprogramm verwenden, GEHT ABER NICHT!!!
Das Problem ist, das in dem Moment in dem das Unterprogramm aufgerufen wird, der Parameter ESN aus der Parametertabelle verschwindet.
Wie kriege ich es hin den Parameter ESN mit dem WERT P123456 in das Unterprogramm zu übernehmen.
;*****HAUPTPROGRAMM *****
DEF STRING[10] ESN ;Parameter wird erzeugt
DEF INT ERROR
ESN="P123456" ; BEISPIEL = P123456 Parameter ESN wird beschrieben
.
CALL "TEST_2STG_HPT_CASE_MESS" ;Unterprogramm wird aufgerufen
M30
;*****UNTERPROGRAMM TEST_2STG_HPT_CASE_MESS *****
DEF INT ERROR
Delete(Error,<<ESN<<"_2STG_HPT_CASE")
.
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","SEGMENT"<<R201<<" DIA AFT="<<R110<<"mm DIA MID="<<R111<<"mm DIA FRW="<<R112<<"mm")
R222=(ROUND(R222*1000))/1000;RUNDEN
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","MITTELWERT="<<R222<<"mm")
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","M17")
M30
Danke schon mal für eure Hilfe.
Thorben
In einem Hauptprogramm wird ein STRING erzeugt und beschrieben.
Diesen STRING möchte ich in einem Unterprogramm verwenden, GEHT ABER NICHT!!!
Das Problem ist, das in dem Moment in dem das Unterprogramm aufgerufen wird, der Parameter ESN aus der Parametertabelle verschwindet.
Wie kriege ich es hin den Parameter ESN mit dem WERT P123456 in das Unterprogramm zu übernehmen.
;*****HAUPTPROGRAMM *****
DEF STRING[10] ESN ;Parameter wird erzeugt
DEF INT ERROR
ESN="P123456" ; BEISPIEL = P123456 Parameter ESN wird beschrieben
.
CALL "TEST_2STG_HPT_CASE_MESS" ;Unterprogramm wird aufgerufen
M30
;*****UNTERPROGRAMM TEST_2STG_HPT_CASE_MESS *****
DEF INT ERROR
Delete(Error,<<ESN<<"_2STG_HPT_CASE")
.
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","SEGMENT"<<R201<<" DIA AFT="<<R110<<"mm DIA MID="<<R111<<"mm DIA FRW="<<R112<<"mm")
R222=(ROUND(R222*1000))/1000;RUNDEN
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","MITTELWERT="<<R222<<"mm")
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","M17")
M30
Danke schon mal für eure Hilfe.
Thorben
01.07.2019, 08:51 Uhr
Du musst es als Aufrufparameter übergeben.
Wenn die Variable im Hauptprogramm definiert ist, ist sie auch nur da bekannt, und ist so auch gut und richtig.
Wenn die Variable im Hauptprogramm definiert ist, ist sie auch nur da bekannt, und ist so auch gut und richtig.
01.07.2019, 09:01 Uhr
01.07.2019, 10:17 Uhr
01.07.2019, 10:27 Uhr
So etwa:
Anmerkungungen:
1. Die Stringvariable kann im Unterprogramm einen beliebigen Namen haben, sie muss im Beispiel also nicht ESN heißen.
2. Mitunter will man die übergebene Variable im Unterprogramm verändern und den veränderten Wert dem aufrufenden Programm zur Verfügung stellen, d.h. man verwendet das Unterprogramm um etwas zu berechnen. Das funktioniert, indem man in der Unterprogrammdefiniton noch ein "VAR" einfügt, also
PROC TEST_2STG_HPT_CASE_MESS (VAR STRING[10] ESN)
CODE
;*****HAUPTPROGRAMM *****
DEF STRING[10] ESN;Parameter wird erzeugt
DEF INT ERROR
ESN="P123456"; BEISPIEL = P123456 Parameter ESN wird beschrieben
.
TEST_2STG_HPT_CASE_MESS(ESN) ;Unterprogramm wird aufgerufen
M30
;*****UNTERPROGRAMM TEST_2STG_HPT_CASE_MESS *****
PROC TEST_2STG_HPT_CASE_MESS (STRING[10] ESN)
DEF INT ERROR
Delete(Error,<<ESN<<"_2STG_HPT_CASE")
.
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","SEGMENT"<<R201<<" DIA AFT="<<R110<<"mm DIA MID="<<R111<<"mm DIA FRW="<<R112<<"mm")
R222=(ROUND(R222*1000))/1000;RUNDEN
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","MITTELWERT="<<R222<<"mm")
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","M17")
M30
DEF STRING[10] ESN;Parameter wird erzeugt
DEF INT ERROR
ESN="P123456"; BEISPIEL = P123456 Parameter ESN wird beschrieben
.
TEST_2STG_HPT_CASE_MESS(ESN) ;Unterprogramm wird aufgerufen
M30
;*****UNTERPROGRAMM TEST_2STG_HPT_CASE_MESS *****
PROC TEST_2STG_HPT_CASE_MESS (STRING[10] ESN)
DEF INT ERROR
Delete(Error,<<ESN<<"_2STG_HPT_CASE")
.
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","SEGMENT"<<R201<<" DIA AFT="<<R110<<"mm DIA MID="<<R111<<"mm DIA FRW="<<R112<<"mm")
R222=(ROUND(R222*1000))/1000;RUNDEN
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","MITTELWERT="<<R222<<"mm")
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","M17")
M30
Anmerkungungen:
1. Die Stringvariable kann im Unterprogramm einen beliebigen Namen haben, sie muss im Beispiel also nicht ESN heißen.
2. Mitunter will man die übergebene Variable im Unterprogramm verändern und den veränderten Wert dem aufrufenden Programm zur Verfügung stellen, d.h. man verwendet das Unterprogramm um etwas zu berechnen. Das funktioniert, indem man in der Unterprogrammdefiniton noch ein "VAR" einfügt, also
PROC TEST_2STG_HPT_CASE_MESS (VAR STRING[10] ESN)
02.07.2019, 07:48 Uhr
So etwa:
Anmerkungungen:
1. Die Stringvariable kann im Unterprogramm einen beliebigen Namen haben, sie muss im Beispiel also nicht ESN heißen.
2. Mitunter will man die übergebene Variable im Unterprogramm verändern und den veränderten Wert dem aufrufenden Programm zur Verfügung stellen, d.h. man verwendet das Unterprogramm um etwas zu berechnen. Das funktioniert, indem man in der Unterprogrammdefiniton noch ein "VAR" einfügt, also
PROC TEST_2STG_HPT_CASE_MESS (VAR STRING[10] ESN)
CODE
;*****HAUPTPROGRAMM *****
DEF STRING[10] ESN;Parameter wird erzeugt
DEF INT ERROR
ESN="P123456"; BEISPIEL = P123456 Parameter ESN wird beschrieben
.
TEST_2STG_HPT_CASE_MESS(ESN);Unterprogramm wird aufgerufen
M30
;*****UNTERPROGRAMM TEST_2STG_HPT_CASE_MESS *****
[b]PROC TEST_2STG_HPT_CASE_MESS (STRING[10] ESN)
[/b]DEF INT ERROR
Delete(Error,<<ESN<<"_2STG_HPT_CASE")
.
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","SEGMENT"<<R201<<" DIA AFT="<<R110<<"mm DIA MID="<<R111<<"mm DIA FRW="<<R112<<"mm")
R222=(ROUND(R222*1000))/1000;RUNDEN
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","MITTELWERT="<<R222<<"mm")
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","M17")
M30
DEF STRING[10] ESN;Parameter wird erzeugt
DEF INT ERROR
ESN="P123456"; BEISPIEL = P123456 Parameter ESN wird beschrieben
.
TEST_2STG_HPT_CASE_MESS(ESN);Unterprogramm wird aufgerufen
M30
;*****UNTERPROGRAMM TEST_2STG_HPT_CASE_MESS *****
[b]PROC TEST_2STG_HPT_CASE_MESS (STRING[10] ESN)
[/b]DEF INT ERROR
Delete(Error,<<ESN<<"_2STG_HPT_CASE")
.
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","SEGMENT"<<R201<<" DIA AFT="<<R110<<"mm DIA MID="<<R111<<"mm DIA FRW="<<R112<<"mm")
R222=(ROUND(R222*1000))/1000;RUNDEN
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","MITTELWERT="<<R222<<"mm")
WRITE(ERROR,<<ESN<<"_2STG_HPT_CASE","M17")
M30
Anmerkungungen:
1. Die Stringvariable kann im Unterprogramm einen beliebigen Namen haben, sie muss im Beispiel also nicht ESN heißen.
2. Mitunter will man die übergebene Variable im Unterprogramm verändern und den veränderten Wert dem aufrufenden Programm zur Verfügung stellen, d.h. man verwendet das Unterprogramm um etwas zu berechnen. Das funktioniert, indem man in der Unterprogrammdefiniton noch ein "VAR" einfügt, also
PROC TEST_2STG_HPT_CASE_MESS (VAR STRING[10] ESN)
Ich hab es gerade mit PROC TEST_2STG_HPT_CASE_MESS (STRING[10] ESN)
ausprobiert und habe festgestellt das der Parameter ESN tatsächlich erhalten bleibt. Jedoch kann ich ihn im Unterprogramm nicht verwenden.
Wenn ich im HP MSG(<<ESN) schreibe dann wird der Text aus ESN angezeigt.
Wenn ich im UP MSG(<<ESN) schreibe dann wird der Text aus ESN nicht angezeigt, obwohl der Parameter existiert und Text enthält.
Was mache ich falsch?
02.07.2019, 09:57 Uhr
Das einzige was mir darauf jetzt einfällt ist, dass der Text zwar ausgegeben, aber sofort wieder durch eine andere Ausgabe überschreiben wird.
Versuche einfach mal im Satz hinter der MSG-Ausgabe im Unterprogramm testeshalber ein M0 zu schreiben.
Wenn du mit MSG nur einen String ausgeben willst, brauchst du übrigens die beiden spitzen Klammern nicht. Es geht auch mit MSG(ESN).
Versuche einfach mal im Satz hinter der MSG-Ausgabe im Unterprogramm testeshalber ein M0 zu schreiben.
Wenn du mit MSG nur einen String ausgeben willst, brauchst du übrigens die beiden spitzen Klammern nicht. Es geht auch mit MSG(ESN).
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: