werte in DB speichern mit chronoligischer reihenfolge?

funkdoc

Level-1
Beiträge
491
Reaktionspunkte
44
Zuviel Werbung?
-> Hier kostenlos registrieren
hi

ich möchte einen wert der alle 2 stunden aktualisiert wird, aufsteigend in einem DB für 2 wochen (das sind also 168 werte) für eine winccflex07-kurve puffern. da der visuPC nur selten an ist (sonst hätte ich das ja in winccflex programmiert), möchte ich diese werte in der steuerung so in die dbs schreiben dass winccflex07 die werte auf der X-achse (zeitachse) richtig darstellt.

wie kann ich das realisieren vorallem mit dem einfügen in die zeitachse?

oder bin ich da am holzweg

grüsse
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich nehme mal an, dass dein DB wie eine Art FIFO funktionieren soll - nach 2 Wochen Aufzeichnung kickst du die ersten Werte wieder heraus ...?

Ich würde mir einen FB bauen, der in einem Array deine Messwerte abspeichert und in einem 2. Array die zugehörigen Datum's und Uhrzeitwerte.
Wenn du deine Visu aufrufst (die entsprechende Seite), dann setzt du einen Aktualisierungs-Trigger für die Profil-Kurve. Damit hast du dann schon mal deine Messwerte dargestellt. Für einen Datums-/ Uhrzeitbezug habe ich mir bei einer ähnlichen Sache mal eine x-Achsen-Beschriftung (per Script) selbst erstellt. ProTool und Wcc-Flex wollen da ja am liebsten nur einen Index darstellen.

Gruß
LL
 
@ralle

leider kenn ich mich mit VB nicht wirklich aus.

@larry

ja so ähnlich hab ich mir das vorgestellt.
nur sollen die werte alle 2 stunden von der steuerung aktualisiert und ins DB1.DBD 0 eingetragen werden und zuvor alle werte um eins nach hinten schieben... sozusagen ein umlaufarchiv.

ich habe leider mit kurven und deren darstellung in winccflex runtime noch keine wirkliche erfahrung aber soweit ich das jetzt rausgefunden habe, sollte der kruventyp "puffer bitgetriggert" sein und beim betätigen einer "aktualisieren" schaltfläche sollte der inhalt des DBs in die kurvenanzeige eingefügt werden...natürlich mit den richtigen zeitangaben passend zur x-achse

grüsse
 
... dann bist du doch schon auf der richtigen Spur.
Die benötigte Software-Funktion findest du in der FAQ als Beitrag FIFO-LIFO :
http://www.sps-forum.de/showthread.php?t=8887

In deinem Fall wäre FIFO das richtige.

Das Aktualisieren der Kurve kannst du (wie ich schon beschreiben habe) auch beim Seiten-Aufbau auslösen ... oder von der SPS aus ... wie du mölchtest.

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hi ich probier es gerade mit dem sfc20 blkmov und hab da schon wieder schwierigkeiten. ich will damit einen ganzen block von realzahlen (168 am stück) vom DB1.DBD 0 ins DB1.DBD 1 verschieben.
funktioniert nicht so wie ich mir das vorstelle. der sfc20 verschiebt nur BYTEweise obwohl ich beim SRCBLK angebe -->P#DB1.DBX0.0 REAL 168<--- und beim DSTBLK -->P#DB1.DBX1.0 REAL 168<--.

weiss da wer bescheid?
 
Zuletzt bearbeitet:
das sagt die Hilfe vom SFC20 dazu
Code:
Hinweis
Quell- und Zielfeld dürfen sich nicht überlappen.

Abhilfe würde eine zweimalieges umkopieren schaffen, wenn es denn SFC20 sein soll. Oder eine eigenhändig geschriebene Schleife.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hi ich probier es gerade mit dem sfc20 blkmov und hab da schon wieder schwierigkeiten. ich will damit einen ganzen block von realzahlen (168 am stück) vom DB1.DBD 0 ins DB1.DBD 1 verschieben.
funktioniert nicht so wie ich mir das vorstelle. der sfc20 verschiebt nur BYTEweise obwohl ich beim SRCBLK angebe -->P#DB1.DBX0.0 REAL 168<--- und beim DSTBLK -->P#DB1.DBX1.0 REAL 168<--.

weiss da wer bescheid?

Beachte den Beitrag von Larry, denn Du überschreibst
unabsichtlich Deine Daten:

DB1.DBD 0 umfasst die Bytes 0,1,2,3
DB1.DBD 1 umfasst die Bytes 1,2,3,4
 
hi

natürlich meinte ich das DBD 4 sorry...
kleiner denkfehler beim schreiben (mir is schon klar dass eine 32bit realzahl 4 bytes belegt)

es funktioniert trotzdem nicht. kann dass mal wer mit der simulation nachstellen? vielleicht liegts auch an dem dass es aus den db1 lest und auf db1 schreibt... versteh ich aber nicht wieso. ich meine vorher ladet man ja die gelesenen daten in den lokaldatenbereich und dann überschreibt man alle bytes ab dem byte 4 - 672... warum soll sich das nicht überlappen dürfen? byteweise funtkionierts ja auch, warum nicht mit dem any->REAL?

grüsse und danke nochmal
 
Zuletzt bearbeitet:
... vielleicht schreibst du für mich doch noch einmal auf, welche Daten du von wo nach wo kopieren möchtest. Ich denke, dann finden wir auch den Fehler ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Move

Hi,
..es funktioniert trotzdem nicht. kann dass mal wer mit der simulation nachstellen? vielleicht liegts auch an dem dass es aus den db1 lest und auf db1 schreibt... versteh ich aber nicht wieso. ich meine vorher ladet man ja die gelesenen daten in den lokaldatenbereich und dann überschreibt man alle bytes ab dem byte 4 - 672... warum soll sich das nicht überlappen dürfen? byteweise funtkionierts ja auch, warum nicht mit dem any->REAL?
Ich würde sagen, die SFC arbeitet intern auch mit einer Schleife, daher ist es blöd, wenn sich die Bereiche überlappen..Nimm doch FIFO Funktion und höre auf rumzuprobieren..:rolleyes:

Gruss: Vladi
 
hallo und danke an alle!

jetzt funkts... und zwar hab ich die gelesenen daten in einen zweiten DB geschrieben und von dort aus wieder in meinen ersten DB zurückgeschrieben.

ich wollts dennoch mit der SFC20 machen weil ich da nur die bytelänge verändern brauche und im DB nur ein paar zeilen hinzufügen muss um schnell zu erweitern falls nötig. zusätzlich will ich eigentlich alles mal in fup proggen.

ich finde aber die sfc20 ist eine miese systemfunktion

grüsse
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich finde aber die sfc20 ist eine miese systemfunktion ...

... dann ärgere dich nicht lange darüber, sondern schreib dir eine, die so funktioniert, wie du es haben möchtest - ich würde es so machen ...

Die dafür notwendigen Ansätze würdest du hier im Forum finden ...

Gruß
LL
 
Zurück
Oben