Rngspeicher mit Zeit erfassung

zvende

Level-1
Beiträge
41
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo habe mehrere Ringspeicher gemacht in einem DB
Es werden im Moment 20 Werte gespeichert bevor er wieder
neu beschrieben wird.
Ich hätte aber gerne das in der ersten zeile den gespeicherten Wert stehen und in der 2 die Zeit bevor der nächste in Zeile 3 geschrieben wird

Also 1 Zeile Db10.DBD0 Temp 27C°
2 Zeile DB10.DBD4 12:00
3 Zeile Temp

Hat irgendeiner eine Idee vieleicht mit Beispiel

Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab das so Programmiert wie bau ich das Jetzt ein


L DBNO // DB-Register
T #DB_Register
TAR1 // AR1-Register
T #AR1_Register
AUF #DB_Werte // DB-Werte
L #Wert // Wert
T #Zwischenwert // Zwischenwert
L P#0.0
LAR1
L #Anzahl_Werte // Anzahl Werte
M01: T #Schleife
L DBW [AR1,P#0.0] // Wert
L #Zwischenwert // Zwischenwert
T DBW [AR1,P#0.0] // Zwischenwert -> Wert
TAK
T #Zwischenwert // Wert -> Zwischenwert
L P#2.0

+AR1
L #Schleife
LOOP M01
AUF DB [#DB_Register] // DB-Register
L #AR1_Register // AR1-Register
LAR1
 
Hab das so Programmiert wie bau ich das Jetzt ein


L DBNO // DB-Register
T #DB_Register
TAR1 // AR1-Register
T #AR1_Register
AUF #DB_Werte // DB-Werte
L #Wert // Wert
T #Zwischenwert // Zwischenwert
L P#0.0
LAR1
L #Anzahl_Werte // Anzahl Werte
M01: T #Schleife
L DBW [AR1,P#0.0] // Wert
L #Zwischenwert // Zwischenwert
T DBW [AR1,P#0.0] // Zwischenwert -> Wert
TAK
T #Zwischenwert // Wert -> Zwischenwert
L P#2.0

+AR1
L #Schleife
LOOP M01
AUF DB [#DB_Register] // DB-Register
L #AR1_Register // AR1-Register
LAR1

Der Programmcode kommt mir doch bekannt vor? ;-)

http://www.sps-forum.de/showpost.php?p=215073&postcount=3

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also 1 Zeile Db10.DBD0 Temp 27C°
2 Zeile DB10.DBD4 12:00
3 Zeile Temp
4. Zeile??? Uhrzeit zu 3. Zeile?

Dann betrachte das ganze als Datensatz, bestehend aus Temperaturwert und Zeitstempel.
Mache Deinen Ringspeicher für Datensätze und nicht für Einzel-Temperaturen.
Einen Datensatz deklariert man z.B. als STRUCT.
Für einen Ringspeicher mit Datensätzen bzw. Zeitstempel gibt es hier im Forum auch Programmbeispiele,
wenn ich mich richtig erinnere.

Brauchst Du für den Zeitstempel das komplette DATE_AND_TIME-Format oder nur Stunde+Minute?

Harald
 
Hallo zwende,

ich glaube ich hätte das etwas für dich. Ich hatte da mal nen ringspeicher nach dem fifo prinzip programmiert.
Es werden pro Flanke ein zeitstempel im DB abgelegt. An erste Stelle der aktuelleste und der letzte wird jeweils verworfen.
Die Anzahl der Zeitstempel ist abhängig von der Länge des geöffneten DB´s.

Diesen Baustein könntest du ohne Probleme auf deine Anforderungen (zusätzlicher Wert => temp wert) erweitern.

Wenn du möchtest kann ich dir morgen mal den Baustein zusenden.
 
OK Kai

kann ich morgen tun

zu Harald
4 Zeile Uhrzeit zur 3 Zeile es soll halt so aus sehen das man leicht den geloggten werd einer Uhrzeit zu ordnen kann

Danke schon jetzt für die vielen Antworten
 
Zuletzt bearbeitet:
Wo liegt Dein Problem?

Hallo zvende,

wo liegt Dein Problem?

Das Grundgerüst für den Ringspeicher hast Du und schreibst, daß Du da schon 20 Werte speicherst.
Wo ist das Problem, aus 4 Byte für einen REAL-Wert je Eintrag 12 Byte für einen REAL-Wert + DT-wert zu machen?
Du brauchst doch nur in dem DB aus Deinem alten Ringspeicher ARRAY[1..20] OF REAL ein ARRAY[1..20] OF STRUCT machen.
Das STRUCT besteht aus dem Temperaturwert (REAL) und dem Zeitstempel (DATE_AND_TIME). Es hat die Größe 12 Byte.

Nun schaust Du Dir die Umspeicher-Programmschleife an.
Du mußt lediglich in der Schleife nun 12 Byte statt bisher 4 Byte umspeichern (das sind 3 DWord statt bisher 1 DWord)
und den Pointer AR1 um 12 Byte statt 4 Byte erhöhen. Die betreffenden Programmzeilen erkennst Du?

Übrigens gibt es da noch eine Diskrepanz in Deinen Aussagen. Ich hoffe, es sind nur Tippfehler.
Im ersten Beitrag schreibst Du "1 Zeile Db10.DBD0 Temp 27C°".
Ein DBD hat 4 Byte, ich schließe daraus, daß Deine Temperatur ein REAL-Wert sein soll.
Im dritten Beitrag schreibst Du "Hab das so Programmiert wie bau ich das Jetzt ein".
In dem angeführten Programmcode werden aber nur 2 Byte umgespeichert: L DBW [AR1,P#0.0] ...

Oder weißt Du nicht, wie Du an die aktuelle Uhrzeit kommst?
Oder wie man einen DATE_AND_TIME-Wert kopiert bzw. in den Ringspeicher schreibt?

Dann habe ich Dir noch diese Frage gestellt, Du hast Dich aber noch nicht geäußert:
Brauchst Du für den Zeitstempel das komplette DATE_AND_TIME-Format oder nur Stunde+Minute?
Wenn Du nur Stunde und Minute speichern mußt, dann reduziert sich die Größe des Zeitstempels von 8 Byte auf 2 Byte.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo PN/DP

Danke für deine Antwort
Ich weiß wirklich nicht wie ich die Date in Time in den Ringspeicher bekomme

Wenn ich natülich auch das Datum mit reinbekomme ist das ja um so besser

zu deiner Anderen Frage der Auszug aus meinem Programm war aus
einem Int natürlich hab ich da L DBD [AR1,P#0.0] stehen war ein versehen
 
entweder zerlegst du dir das dt in d und tod und speicherst das einzeln oder du schiebst den kompletten dt in den speicher
im beispiel wäre db100 dein ringspeicher

edit:
so und nochn filo-baustein für datenblöcke
 

Anhänge

  • Zwischenablage04.gif
    Zwischenablage04.gif
    13,6 KB · Aufrufe: 74
  • flilo_block.zip
    1,2 KB · Aufrufe: 29
Zuletzt bearbeitet:
Hallo komme einfach nicht weiter

sowie PN/DP geschrieben hat .
Du brauchst doch nur in dem DB aus Deinem alten Ringspeicher ARRAY[1..20] OF REAL ein ARRAY[1..20] OF STRUCT machen.
Funs bei mir nit der nimmt den Struct garnit an
 
Zuviel Werbung?
-> Hier kostenlos registrieren
haste dir mal den code angesehen den ich gepostet habe ?

nehmen wir an dein ringspeicher-db sieht so aus wie auf folgendem bild

dann trägst du bei meinem baustein als anzahl der datenblöcke 10 ein
als blockgrösse 18, da ja jeder datensatz 18 byte belegt.

wenn du nun neue daten eintragen willst, legst du eine pos-flanke an den EN der fc.

intern in der fc wird alles byteweise kopiert. wie was wohin geschoben wird ergibt sich aus blockanzahl und blockgrösse
 

Anhänge

  • Zwischenablage02.gif
    Zwischenablage02.gif
    19,2 KB · Aufrufe: 46
Hallo Volker

komme einfach nit klar

wo kann ich dann jetzt den Temp wert einlesen
und was mache ich noch falsch das meine CPU in stop geht
hab den db so gemacht wie du gesagt hast
 

Anhänge

  • FC2.pdf
    16,4 KB · Aufrufe: 31
Zurück
Oben