Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: String fortlaufend speichern!

  1. #1
    Registriert seit
    03.10.2008
    Beiträge
    232
    Danke
    8
    Erhielt 1 Danke für 1 Beitrag

    Standard


    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
    Zitieren Zitieren String fortlaufend speichern!  

  2. #2
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard

    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?

  3. #3
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard

    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.

  4. #4
    bastler ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.10.2008
    Beiträge
    232
    Danke
    8
    Erhielt 1 Danke für 1 Beitrag

    Standard

    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
    Geändert von bastler (14.12.2011 um 20:34 Uhr)

  5. #5
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard

    20k bei 315 sollte passen...

    Was ist AWL?

  6. #6
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    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.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  7. #7
    bastler ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.10.2008
    Beiträge
    232
    Danke
    8
    Erhielt 1 Danke für 1 Beitrag

    Standard

    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

  8. #8
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So wie es aussieht, geht das mit dem TP177B nicht.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

Ähnliche Themen

  1. String in UDT speichern und mit WinCC Flexible 2008 auslese
    Von SenderTs im Forum Programmierstrategien
    Antworten: 0
    Letzter Beitrag: 18.08.2010, 11:30
  2. Antworten: 1
    Letzter Beitrag: 24.09.2006, 02:20
  3. Antworten: 5
    Letzter Beitrag: 14.06.2005, 14:55
  4. pew auslesen und fortlaufend in ein Array abspeichern
    Von Anonymous im Forum Programmierstrategien
    Antworten: 0
    Letzter Beitrag: 13.06.2005, 18:13
  5. pew auslesen und fortlaufend in ein Array abspeichern
    Von Anonymous im Forum Programmierstrategien
    Antworten: 0
    Letzter Beitrag: 13.06.2005, 17:59

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •