DB Daten zyklisch mit Weckalarm(OB35) kopieren

marcel_s84

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum!

Ich sitze gerade vor einem für mich nicht so einfach lösenden Problem.
Folgendes:

Ich möchte im OB35 (auf 20ms) ein kleines Programm schreiben welches mir alle 20ms einen Messwert von einem, nennen wir ihn DB1.DBW106 in einen anderen, nennen wir ihn DB201 schreibt. Es sollen genau 180 Messwerte erfasst werden. Im DB201 habe ich ein Array mit mit diesen 180 "freien Messwertplätzen" ab DB201.DBW16. Diese Werte sollen dann auch solange erhalten bleiben, bis ich sie wieder löschen möchte, d.h. beispielsweise mein 1 automatikdurchlauf beendet ist.

Wie könnte ein solches Programm aussehen, denn ich komme absolut auf keinen grünen Zweig:(

Vielen Dank schonmal im Vorraus!
 
Hallo,
du brauchst dafür einen Schreib-Pointer, den du nach jedem Schreiben um die Breite deiner Daten erhöhst. Löscht du den Ziel-DB, dann mußt du auch den Pointer wieder rücksetzen.

Das Schreiben ginge dann in etwa so :
Code:
L #Pointer
L p#2.0
+D
T #Pointer
 
L DB1.DBW106
AUF DB201
T DBW[#Pointer]

gut wäre auch die Max.Anzahl von Werten zu überwachen ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Antworten doch am Besten im Thread und nicht als PN ... :rolleyes:

Die Variable #Pointer ist ein Doppelwort - idealerweise hast du sie mit in deinem DB stehen.
Bei Reset mußt du die auf den Wert der ersten zu beschreibenden Speicherstelle setzen - bei dir also auf :
Code:
L p#16.0
T #Pointer
mit der Anweisung :
Code:
L #Pointer
L p#2.0
+D
T #Pointer
erhöhe ich den Pointer um die Breite eines Datenwortes ...

Gruß
LL
 
und muss ich dann nicht noch meinen pointer erhöhen, dass beim nächsten aufruf des ob35 dann der wert ins nächste doppelwort geschrieben wird (also db201.dbw20) und dann immer so weiter bis ich die 180 voll habe?
 
Zurück
Oben