Variablennamen zusammensetzen

mailmir

Level-1
Beiträge
75
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich möchte gerne die Daten meiner Wetterstation speichern und danach Trends generieren. Hierzu möchte ich die
Werte für Temperatur, Feuchte, Wind und Globalstrahlung 1x/Minute Speichern. Dafür habe ich mir Arrays erstellt

Bsp. für die aktuelle Globalstrahlung

Tag 1 des Monats schreibt in arrWertepuffer_T1: ARRAY [0..1500] OF DWORD;
Tag 2 des Monats schreibt in arrWertepuffer_T2: ARRAY [0..1500] OF DWORD; usw.

Die Positionsangabe in der der aktulle Wert geschrieben werden soll weiise ich mit einem Variable zu (iZS_ArrPosition)
wobei diese Variable der aktuellen Minute des Tages entspricht, also um 0:01Uhr auf Pos. 1, um 0:02 auf Pos. 2 usw..
(also arrWertePuffer_T1[iPos] = dwZR_Solar). Wie kann ich im Array-Namen, zb in arrWertePuffer_T1, die 1 durch eine
weitere Variable ersetzen die dann den Tag des Datums enthällt?

DANKE für eure Info, Gruss Norbert
 
Du könntest ein zweidimensionales Array nehmen:
arrWertepuffer_T: ARRAY [0..31, 0..1500] OF DWORD
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hoi Markus,
an so etwas hatte ich auch schon gedacht, also in dem Falle 3dimensional mit arrWertepuffer: [0..12, 0..31, 0..1500] of DWord also für Monat, Tag und Minute, aber mir ging es hierbei eigentlich mal um die prinzipielle Frage ob ich mir einen Variablennamen dynamisch "zusammenbasteln" kann.

Gruss Norbert
 
Du willst während das Programm läuft neue Variablen erzeugen deren Namen erst bei der Erzeugung generiert werden? Wüsste jetzt auf Anhieb keine Programmiersprache bei der das gehen würde.....
Die Vorstufe zu deinem Vorhaben, die dynamische Speicherverwaltung, ist in der SPS Welt schon der erste Stolperstein......

Außerdem existieren nach dem compilieren von deinem Variablennamen eh nur noch die Adressinformtionen. Mehr braucht ein Programm nicht. Die namentliche Deklaration ist nur dafür da, damit man beim Programmieren nicht wahnsinnig wird.
 
Hallo,

nein, ich will diese Variablen nicht neu erzeugen. Ich habe zB die arrays arrWertespeicher_1 , arrWertespeicher_2 und arrWertespeicher_3 als globale Variablen deklariert und möchte, je nach Stand einer Zählervariable in das Array 1, 2 oder 3 schreiben, also ähnlich wie das 3dimsionale Array, nur mit ca. 15 Arrays.

Gruss Norbert
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da bleibt dir nur die Option mit einer Case-Anweisung je nach Wert der Variable auf das jeweilige Array zu schreiben.

Evtl. reicht es auch über die Case-Anweisung einen Pointer auf das jeweilige Array zu setzen, und dann im Folgenden mit diesem auf das Array zuzugreifen. Aber bei Codesys ist ein POINTER TO ARRAY [x..y] sehr unschön zu verwenden/dereferenzieren, da der Zugriff auf die Array-Variablen nicht mehr direkt über den Array-Index funktioniert, sondern man den Pointer zu Fuß passend berechnen und setzen muss.

Edith sagt: geht doch mit dem Array:
Deklaration:
Code:
VAR
	ARR1 : ARRAY [0..10] OF INT;
	ARR2 : ARRAY [0..10] OF INT;
	ARR3 : ARRAY [0..10] OF INT;
	ARR4 : ARRAY [0..10] OF INT;
	ARR5 : ARRAY [0..10] OF INT;
	pARR : POINTER TO ARRAY [0..10] OF INT;
END_VAR

Pointer setzen:
Code:
CASE DST_ARR OF
	1:	pARR := ADR(ARR1);
	2:	pARR := ADR(ARR2);
	3:	pARR := ADR(ARR3);
	4:	pARR := ADR(ARR4);
	5:	pARR := ADR(ARR5);
END_CASE

und dann Zugriff mit:
Code:
pARR^[0] := VALUE;
 
Zuletzt bearbeitet:
Zurück
Oben