Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

Variable erstellen, Variable zum hochzählen erstellen

Beitrag 16.06.2020, 06:35 Uhr
CNC-Span
CNC-Span
Level 2 = Community-Facharbeiter
**
Gruppe: Mitglied
Mitglied seit: 07.02.2008
Beiträge: 98
Hallo,
ich versuche eine Variable zu erstellen, die über eine FOR-Schleife hochgezählt wird.
Leider funktioniert das nicht wie gwünscht.

Im Moment sieht mein Programm so aus:

N140 _TOOL1="T_000219"
N150 _TOOL2="T_000221"
N160 _TOOL3="T_000222"
N170 _TOOL4="T_000351"



N240 FOR ZAEHL1=1 TO 4
N250 _WZ ="_TOOL"<<ZAEHL1
N260 IF $TC_TP2[ZAEHL] == _WZ
WRITE.....
ELSE
WRITE....
ENDIF
ENDFOR

mein Problem ist, dass die Variable _TOOL1 oder _TOOL2 usw heissen soll.
das funktioniert soweit, , aber ich will, dass in den Parameter _WZ der Wert aus _TOOL1 eingetragen wird, den ich am PRG-Anfang definiert habe und nicht der "Text" _TOOL1 drin steht

Wer kann mir da einen Tipp geben, geht das überhaupt?

Gruß und im voraus vielen Dank
   
Beitrag 16.06.2020, 10:07 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.926
Ich würde die Namen in ein Feld von Strings packen:
CODE
DEF STRING[10] _TOOL[5]= SET("","T_000219","T_000221", "T_000222", "T_000351")

Dann kannst du mit deiner Zählvariable auf den entsprechenden Namen zugreifen.
Ich habe das Feld 5 Einträge lang gemacht, weil die Zählung bei Feldern ja bei Null beginnt, und du in deiner Schleife mit 1 anfängst, d.h. der Eintrag mit dem Index 0 ist dummy.
   
Beitrag 16.06.2020, 14:35 Uhr
CNC-Span
CNC-Span
Level 2 = Community-Facharbeiter
**
Gruppe: Mitglied
Mitglied seit: 07.02.2008
Beiträge: 98
QUOTE (CNCFr @ 16.06.2020, 12:07 Uhr) *
Ich würde die Namen in ein Feld von Strings packen:
CODE
DEF STRING[10] _TOOL[5]= SET("","T_000219","T_000221", "T_000222", "T_000351")

Dann kannst du mit deiner Zählvariable auf den entsprechenden Namen zugreifen.
Ich habe das Feld 5 Einträge lang gemacht, weil die Zählung bei Feldern ja bei Null beginnt, und du in deiner Schleife mit 1 anfängst, d.h. der Eintrag mit dem Index 0 ist dummy.


Herzlichen Dank, funktioniert hervorragend
   
Beitrag 17.06.2020, 09:02 Uhr
CNC-Span
CNC-Span
Level 2 = Community-Facharbeiter
**
Gruppe: Mitglied
Mitglied seit: 07.02.2008
Beiträge: 98
Hallo,
ich hätte noch eine Frage zu meinem obigen Problem:
kann ich die von CNCFr empfohlene String-Definition

DEF STRING[10] _TOOL[5]= SET("","T_000219","T_000221", "T_000222", "T_000351")
auch in die GUD-Liste eintragen als Globale Variable?
Wenn ja, wie befülle ich diese dann über ein Hauptprogramm?

Vielen Dank für eure Unterstützung
   
Beitrag 17.06.2020, 13:15 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.926
Das Feld kann man auch in einer GUD definieren.
Das kann man dann zur Laufzeit einfach durch Zuweisungen initialisieren, also etwa so:

CODE
_TOOL[1]= "T_000219"
_TOOL[2] ="T_000221"
usw.
   
Beitrag 17.06.2020, 13:47 Uhr
CNC-Span
CNC-Span
Level 2 = Community-Facharbeiter
**
Gruppe: Mitglied
Mitglied seit: 07.02.2008
Beiträge: 98
QUOTE (CNCFr @ 17.06.2020, 15:15 Uhr) *
Das Feld kann man auch in einer GUD definieren.
Das kann man dann zur Laufzeit einfach durch Zuweisungen initialisieren, also etwa so:

CODE
_TOOL[1]= "T_000219"
_TOOL[2] ="T_000221"
usw.



Hallo,
muss ddann die Anweisung so ausshen?
DEF STRING[10] _TOOL[5]

und die Zuweisung für jeden Zähler, wie von ihnen aufgelistet, einzeln?
   
Beitrag 18.06.2020, 07:45 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.926
Die Definition sollte so aussehen:
CODE
DEF NCK STRING[10] _TOOL[5]

wenn die Variable NCK-weit verfügbar sein soll. Falls sie nur im aktuellen Kanal gültig sein soll. muss das Attribut NCK durch CHAN ersetz werden.

Die Feldelemente kann man im Programmlauf einzeln beschreiben, oder ähnlich wie bei der Initialisierung schon bei der Definition auch mit dem SET-Befehl:
CODE
_TOOL[0] = SET("","T_000219","T_000221", "T_000222", "T_000351")

Der Index 0 bei der Variablen bedeutet, dass das Feld ab dem Index 0 mit den 5 Werten in der Klammer initialisiert werden soll.
Wenn man sich die Initialisierung der Variablen mit dem Index 0 sparen will, kann man auch
CODE
_TOOL[1] = SET("T_000219","T_000221", "T_000222", "T_000351")

schreiben, d.h. man beginnt beim Index 1 und setzt dann nur noch 4 statt 5 Werte.
   
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: