Step 7 DB als Archiv verwenden

E

Elektriker0815

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Experten,

ich bin neu in eurem Forum.
Ich arbeite in meiner Firma in der Instandhaltung und des halb hab ich von Programmierung nicht so viel Ahnung. Aber ihr könnt mir bestimmt weiter helfen.

Mein Problem ist folgendes.
Ich soll bei zwei bestimmten Ereignissen (die nur einmal Wöchentlich auftreten) den Wert einer Variable abspeichern, die Zeit messen die zwischen den beiden Ereignissen vergangen ist, und beim ersten Ereignis soll ich einen Zeitstempel erstellen.

Soweit ist noch alles klar die Funktionen hab ich alle programmiert und getestet. Die Werte, die Zeit und der Zeitstempel werden in einem DB geschrieben in dem ich dafür eine STRUCT angelegt habe.
Jetzt wollen meine Vorgesetzten aber noch eine Erweiterung. Die gespeicherten Werte sollen nun über einige Wochen Archiviert werden.

Nun zu meiner Frage gibt es eine Möglichkeit jedes Mal beim abspeichern der Werte eine neue STRUCT an den DB anzuhängen. Ich hatte schon den Gedanken mit einem UDT aber leider weiß ich nicht wie man so was Programmiert.

Schon mal Danke für eure Hilfe.
 
Erstelle in dem DB ein ARRAY OF STRUCT in der gewünschten Größe.
Und eine Merkvariable, welche den Index der nächsten Schreibposition verwaltet.
Am einfachsten verwaltest Du das Array als Ringpuffer: wenn der Puffer voll ist dann wird der älteste Eintrag überschrieben.

Für den STRUCT kannst Du auch UDT verwenden, ist aber nicht nötig.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke PN/DP für deine schnelle Antwort

Das ARRAY muß ich so groß erstellen wie die Anzahl der gewünschten STRUCT oder?
Aber wie funktioniert das mit der Index Merkervariable?
Ein Ringpuffer ist wohl Sinvoll da ich ja wöchentlich ja nur eine STRUCT bekomme und der ja dann doch ne Zeit reicht.
 
Ich kann dir soweit helfen, wenn du in scl programmiert:
In deinem DB deklarierst du dann das ARRAY vom STRUCT wie von Harald erwähnt, ja soviele wie du dir wünschst.
Beispiel: So könnte es im Datenbaustein aussehen: DB_STRUCT ARRAY[1..100]
. TIME_STRUCT


Nun hast du 100 Structs erstellt in einem DB.

Nachdem du diese abgespeichert hast kannst du in einer Schleife diese Beschreiben.
Nach jedem Aufruf von einem Fehler hast du eine Zählvariable i, welche dir das Array umschaltet.
IF FEHLER THEN
DB_STRUCT := ACT_TIME_STRUCT;
i := i +1;
END_IF;

Damit du deine CPU vom STACK OVERFLOW bewahrst, schreibe noch eine END VARIABLE,
IF i >= 100 THEN
i := 1;
END_IF

Der Rest selbsterklärend.
 
Danke WinniePooh für deine Antwort,

Ich hab glaub ich verstanden wie du das meinst. Also immer wenn die STRUCT geschrieben wird um 1 hochzählen.
Jetzt muss ich nur zusehen wie ich das löse weil ich leider kein SCL zur Verfügung habe.
 
Zurück
Oben