Step 7 Messwerte in einen DB automatisch einfügen (Problem mit Array)

SPS_Einsteiger

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Experten,

ich muss für eine Projektarbeit folgende Aufgabe realisieren:

Eine FC 1 liest Messdaten, sagen wir eine Temperatur, alle 2 Sekunden aus.
Diese Messdaten sollen in einem DB 1 ("db_MesswertSpeicher") als Array[1..50] im INT-Format abgespeichert werden.


Meine AWL-Kentnisse sind momentan leider noch nicht auf dem besten Stand, deshalb hoffe ich auf eure Hilfe.
Ich weiß, dass ich Daten grundsätzlich folgendermaßen in ein Array schreibe:

Code:
L 65                                            // Lade einen INT-Wert, z.B.: 65
AUF "db_MesswertSpeicher"                      // Rufe "db_MesswertSpeicher" auf
T "db_MesswertSpeicher".VALUE[1]              // Transferiere in "db_MesswertSpeicher" an der Stelle .VALUE[1]

Das Problem ist, jeder Wert (.VALUE[1]) wird dann an der Stelle [1] im Array hinterlegt. Ich suche jedoch nach einer Möglichkeit, wie ich eine
Variable in die Klammern [ ] bei "db_MesswertSpeicher".VALUE[ ] einfüge, die nach jedem Schreibvorgang in den DB immer um 1 erhöht wird.

Folgender Ansatz funktioniert in S7 leider nicht:

Code:
T "db_MesswertSpeicher".VALUE[#Counter]    // #Counter Variable, die automatisch um 1 erhöht wird.


Meine Frage ist nun:

Welches wäre die einfachste Möglichkeit in AWL, um mein Problem zu lösen? Sprich: Wie erstelle ich eine Counter-Variable, die ich bei
"db_MesswertSpeicher".VALUE[..] einfügen kann, die immer auf die NÄCHSTE Stelle im Bereich [1..50] des Array's zugreifen kann, nachdem der letzte Wert
geschrieben wurde.


Hardware: CPU 314-2DP


Liebe Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

hier mal ein Beispiel mit registerindirekter Adressierung. Es gibt natürlich viele andere Ansätze.


//#####Zähler bilden
U Trigger //2 s
FP
SPBN j001
L 1
L Counter
+I
T Counter

//#####Pointer Bilden
L Counter
L 4
*I
L 4
-I
SLW3
LAR1

//#####Messwert an Stelle in DB schreiben

Auf#DBX
L #Messwert
T dbd[ar1, p#0.0]


j001: NOP 0
 
... wie wäre es mit SCL ?
Dort könntest du nämlich die Array-Elemente genau wie gewünscht adressieren ... (und müßtest nicht mit Pointer herum-dameln)

Gruß
Larry
 
Zurück
Oben