Zählwerte hintereinander in einem DB ablegen

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe das Problem, dass ich jede Minute einen neuen Zählwert in einem Datenbaustein ablegen soll.
In meiner derzeitigen Realisierung rufe ich jede Minute einen FB über einem Weckalarm auf.

Leider ist mir bisher noch kein gescheiter Algorithmus für das Ablegen in dem DB eingefallen.

Zum Schluss soll das Ergebnis wie folgt aussehen:

- im DB10.DBD0 soll der Zählwert x stehen
- im DB10.DBD4 soll der Zählwert y stehen
- im DB10.DBD8 soll der Zählwert z stehen
- usw.

Nach 20 abgelegten Werten soll wieder mit DB10.DBD0 begonnen werden.

Ich bitte um Hilfe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du brauchst einen Index (oder einen Pointer), der angibt, wo der nächste Wert hinkommt.
Das sei mal z.B. MD8

AUF DB10
T DBD[MD8] schreibt nun den Wert in das Datenword, dessen Nummer in MD0 steht.
L MD8
L 32 // Die Nummerierung erfolgt sozusagen in Bits. Das nächste DBD ist dann 32
// Bits weiter..
+D // Nummer hochzählen
T MD8

L MD8
L 640 //20*32, dann sind wir am Ende
<D // eigentlich reicht hier ungleich, aber wer weiß, was im MD8 zufällig stehen könnte
SPB gut

L 0
T MD8 // geht wieder mit 0 los
gut: NOP 0


Du solltest diesen Code besser an den Anfang stellen, dann bist du sicher, daß niemals
versucht wird, mit einem zu großen Index zu arbeiten:
L MD8
L 640 //20*32, dann sind wir am Ende
<D // eigentlich reicht hier ungleich, aber wer weiß, was im MD8 zufällig stehen könnte
SPB gut

L 0
T MD8 // geht wieder mit 0 los
gut: NOP 0

AUF DB10
T DBD[MD8] schreibt nun den Wert in das Datenword, dessen Nummer in MD0 steht.
L MD8
L 32 // Die Nummerierung erfolgt sozusagen in Bits. Das nächste DBD ist dann 32
// Bits weiter..
+D // Nummer hochzählen
T MD8
 
@Zottel

stimmt, aber dort wurde eine Menge besprochen. Wer das liest kommt hinterher evtl. alleine durch. :wink:
 
Bereichslängenfehler beim Schreiben

Ich habe das Programm wie folgt eigegeben:

L MD 404 //Adresspointer
L 640
<D
SPB gut

L 0
T MD 404
gut: NOP 0

AUF DB 1
L MD 400 //Zählwert

T DBD [MD 404]
L MD 404
L 32
+D
T MD 404


Ich bekomme nun einen Bereichslängenfehler beim Schreiben.
Woher kommt das?
 
Ich arbeite auf einer 400er. Also liege ich noch im Merkerbereich.

Wie kann ich die Länge de DB´s festlegen?

@Ralle: Wie meinst du das mit den DB falsch öffen?
 
Ich meinte den falschen DB, also z.Bsp AUF DB5 statt AUF DB1. (Kann bei symbolischer Schreibweise schnell mal passieren).
 
Zurück
Oben