Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

Parameter (String) in ein Unterprogramm übernehmen, WIE?

Beitrag 01.07.2019, 08:31 Uhr
butscheronie
butscheronie
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 07.03.2010
Beiträge: 313
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
   
Beitrag 01.07.2019, 08:51 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.926
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.
   
Beitrag 01.07.2019, 09:01 Uhr
butscheronie
butscheronie
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 07.03.2010
Beiträge: 313
QUOTE (CNCFr @ 01.07.2019, 09:51 Uhr) *
Du musst es als Aufrufparameter übergeben.


Was sind Aufrufparameter und wie übergebe ich sie?
   
Beitrag 01.07.2019, 10:17 Uhr
butscheronie
butscheronie
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 07.03.2010
Beiträge: 313
QUOTE (CNCFr @ 01.07.2019, 09: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.


Was meinst du genau mit Aufrufparameter?

Gruß
Thorben
   
Beitrag 01.07.2019, 10:27 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.926
So etwa:
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

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)
   
Beitrag 02.07.2019, 07:48 Uhr
butscheronie
butscheronie
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 07.03.2010
Beiträge: 313
QUOTE (CNCFr @ 01.07.2019, 11:27 Uhr) *
So etwa:
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

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?
   
Beitrag 02.07.2019, 09:57 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.926
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).
   
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: