String fortlaufend speichern!

bastler

Level-2
Beiträge
258
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
An einer Anlage sollen Störmeldungen als String mit Zeitstempel in einem DB fortlaufend gespeichert werden. In dem DB sollen 200 Meldungen abgespeichert werden können. Dann soll der DB einmal täglich ausgelesen werden. Danach kann der DB wieder von vorn überschrieben werden.
Ich hab ehrlich gesagt keinen Plan, wie ich das realisieren kann. Ich denke, dass ich einen FIFO programmieren muß. Ist das richtig, und wenn ja, könnt ihr mir da helfen wie sowas programmiert wird.
Hier im Forum hab ich schon einiges gefunden, aber ich blick da nicht durch.

MfG
bastler
 
Der Ansatz eines Fifo ist schon mal gut, die Frage ist, ob ein einfacher Stack nicht auch reicht?

Ein Fifo würdest du mit einem Ringpuffer realisieren, dazu brauchst noch je eine Lese und einen Schreib-Pointer.

Ich denke für deine Anforderung reicht ein Stack, alle Meldungen in einen DB schreiben, den DB anschliessen auslesen (zb. mit einem Fetch) und den DB initialisieren. Danach beginnt das Spiel von neuem.

Ich würde dem DB eine feste Struktur geben:

Code:
db_MyBuf{
    nWriteIndex   :int;
    nMaxIndex     :int;
    sData           :Array[1..200] of String[200]; //StringArray, Stringlänge auf 200 Zeichen begrenzt

//--> nMaxIndex Initialisieren!!
Begin
    nMaxIndex := 200;

}

Danach kannst du den Puffer befüllen:

Code:
fcAdd_Message(Input sMsg as String){

    IF db_MyBuf.nWriteIndex < db_MyBuf.nMaxIndex THEN
    
         db_MyBuf.sData[db_MyBuf.nWriteIndex] := sMsg;

         db_MyBuf.nWriteIndex := db_MyBuf.nWriteIndex + 1; //Pointer inkrementieren
    END_IF;

}

Fertig!

Nicht vergessen:
- nWriteIndex initialisieren (zb. bei Programmstart)
- nWriteIndex initialisieren (=1) wenn Puffer ausgelesen wurde
- Vorsicht: Stringgeschichten brauchen bei Siemens brutal viel Lokaldaten, ev. BlkMov einsetzen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PS:
Stringlänge wenn möglich begrenzen, DB-Grösse bei 200 Zeichen = 202 x 200 = 40k!!!
Das kann auf einer kleinen CPU ev. Probleme geben, kleine CPU können glaub nur 32K, grössere sollten DB's bis 64kB schaffen.
 
Hallo
Vielen Dank erstmal für die schnelle Hilfe.
Also die CPU ist eine 315 2DP. Die Störmeldungen haben je Meldung max. 100 Zeichen. Pro Tag können aber bis zu 200 Meldungen einlaufen. Bekomm ich da Probleme mit der maximal möglichen DB-Größe?
Wie muß denn der Code aus Beitrag 2 in AWL aussehen?

MfG
bastler
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier noch eine Alternative:
Falls Du ein HMI mit Ethernet-Anschluss hast, kannst Du die Störmeldungen auch auf einem Server/Rechner archivieren. Der Projektierungsaufwand dafür wäre sehr gering. Du kannst die Meldungen (inkl. Zeitstempel) als ASCII-Text in eine .csv Datei schreiben lassen.
 
Hallo
In der Anlage ist ein TP177B verbaut, mit dem ein Drucker per USB verbunden ist und einmal am Tag werden alle Störmeldungen gedruckt. Wenn ich die Störmeldungen per Ethernet an einen PC schicken kann, wäre das vom Aufwand her das beste. Ich hoffe das TP177B unterstützt diese Funktion, werde es mal testen.

MfG
A.Vater
 
Zurück
Oben