Datenlogger Wago

Steve_Pokerface

Level-1
Beiträge
11
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Forum Gemeinde,

ich bin neu im Forum, hab mich schon so durch das ein oder andre hier im Forum zu dem Thema durchgelesen aber keine Antwort gefunden.

Zur Hardware es geht um ne Wago 750-880 mit den AI 4-20mA und den AO 4-20mA

zum Problem:

Ich würde gern mehrere Messwerte und Sollwerte mit Zeit Stempel aufzeichnen und in eine .csv Datei schreiben.
Die Messwerte müssten jede Sekunde aufgezeichnet werde.

In Codesys hab ich mich ein bisschen eingearbeitet so ein richtiger Crack bin ich aber nicht.
Hab mir auch schon von Wago die Nutzung der SysLibFile.lib angeschaut nur irgendwie blick ich da nicht durch :)

Hoffe mir kann einer Helfen

Grüße

Steffen
 
...Hoffe mir kann einer Helfen...

Das sollte möglich sein?! Was genau willst Du denn wissen?

Ich schreibe meine Log-Daten schonmal vorher in ein Array, nur dass ich nicht jede Sekunde auf die SD Karte zugreifen muss.
Dann begrenze ich meine CSV-Datei auf 10000 Zeilen. Wird sonst zu groß und unübersichtlich.
Des weiteren bekommt die Datei eine fortlaufende Nummer von 0000 bis 9999, welche ich mir persistent "merke".
Wenn die Zeilennummer zum Schreiben 0 ist, dann war die Datei vorher voll, oder die CPU hat neu gestartet. In beiden Fällen wird dann eine neue Datei angefangen, um alte Daten sicher zu behalten.
Ist der Schreibzeiger ( Zeilennummer ) 0, wird eine Kopfzeile mit Namen für die folgenden Spalten generiert, damit man sieht, was die Werte in den Zeilen 1 bis 10000 zu bedeuten haben.
Sind im Array genug Daten zum Schreiben, wird in einer CASE Schrttkette die Datei geöffnet, die zu schreibenden Daten mit BOOL_TO_STRING oder INT_TO_STRING und CONCATE in einen 255 Zeichen langen String "zusammengebaut" ( als Trennzeichen verwende ich ; ), in die Datei geschrieben und dann die Datei wieder geschlossen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tom,

Ich verstehe nur Bahnhof :)

Im Grunde will ich win Programm, wo ich einfach die Variablen ändern kann quasi die Variablen, die er aufzeichnen soll und so weiter. Am besten in ST. Ich bin nicht so der crack aber Bissi einlesen kann ich mich. Wäre nett wenn du mir mal dein Prog zeigst, evtl werde ich dann Bissi schlauer

Grüße

Steffen
 
Ach übrigens ich brauch 2 analoge Daten jeweils sekundenscharf und die Aufzeichnung sokm über 5 std laufen.

Heißt es kommt mit Sicherheit Bissi Datenmengen zusammen. Ist das überhaupt möglich?

Grüße
 
Hallo Tom,
falls möglich, würde mich dein Baustein auch interessieren.
Ich wollte das Rad auch nicht neu erfinden...
Zwar sind einige deiner Optionen auf meiner Spielkiste nicht möglich, aber da muss ich halt tricksen...
Wenn du magst, wäre ein Exportfile prima.
Ich bin leider Twincatler und da ist mir ein Exportfile lieber.
Eine Original-Pro kann ich allerdings auch verarbeiten...

LG
Shrimps
 
Zuviel Werbung?
-> Hier kostenlos registrieren
versuch doch das mal als Anfang...

Code:
CASE        iStatus        OF

    0:        strStatus :=        'warten' ;

            IF    Start_IMP    THEN        iStatus :=        10 ;
            END_IF ;

    10:        strStatus :=        'Datei öffnen ' ;

            IF        Write_Line_Nr = 0            THEN        Write_File_Nr := Write_File_Nr + 1 ;        END_IF ;
            IF         Write_File_Nr > 9999         THEN         Write_File_Nr := 0 ;                         END_IF ;
            DateiName :=                        'S:\Log\Log' ;
            IF        Write_File_Nr < 1000        THEN        DateiName :=        CONCAT (        DateiName ,        '0' ) ;        END_IF ;
            IF        Write_File_Nr < 100        THEN        DateiName :=        CONCAT (        DateiName ,        '0' ) ;        END_IF ;
            IF        Write_File_Nr < 10        THEN        DateiName :=        CONCAT (        DateiName ,        '0' ) ;        END_IF ;
            DateiName :=        CONCAT (        DateiName ,        INT_TO_STRING ( Write_File_Nr ) ) ;
            DateiName :=        CONCAT (        DateiName ,        '.csv' ) ;

            fileHandle :=        SysFileOpen (        FileName :=        DateiName ,        Mode :=    'a' ) ;

            IF        fileHandle <> 0            THEN        iStatus :=        20 ;                        END_IF ;

    20:        strStatus :=        'Kopfzeile schreiben' ;

            IF        Write_Line_Nr = 0        THEN

                    Text_Puffer :=        'Datensatz Nummer;Zeitstempel;analog01;analog02;analog03$L;' ;
                    fileWriteOK :=        SysFileWrite (        File :=            fileHandle ,        Buffer :=        ADR ( Text_Puffer ) ,        Size :=            LEN ( Text_Puffer ) );
            END_IF ;

            iStatus :=        30 ;

    30:        strStatus :=        'Daten schreiben' ;

            Text_Puffer :=                                        INT_TO_STRING ( Write_Line_Nr ) ;
            Text_Puffer :=        CONCAT ( Text_Puffer ,        ' ; ' ) ;
            Text_Puffer :=        CONCAT ( Text_Puffer ,        DT_TO_STRING ( Zeitstempel ) ) ;
            Text_Puffer :=        CONCAT ( Text_Puffer ,        ' ; ' ) ;
            Text_Puffer :=        CONCAT ( Text_Puffer ,        INT_TO_STRING ( analog01 ) ) ;
            Text_Puffer :=        CONCAT ( Text_Puffer ,        ' ; ' ) ;
            Text_Puffer :=        CONCAT ( Text_Puffer ,        INT_TO_STRING ( analog02 ) ) ;
            Text_Puffer :=        CONCAT ( Text_Puffer ,        ' ; ' ) ;
            Text_Puffer :=        CONCAT ( Text_Puffer ,        INT_TO_STRING ( analog03 ) ) ;
            Text_Puffer :=        CONCAT ( Text_Puffer ,        '$L' ) ;
            fileWriteOK :=        SysFileWrite (        File :=            fileHandle ,        Buffer :=        ADR ( Text_Puffer ) ,        Size :=            LEN ( Text_Puffer ) );

            Write_Line_Nr :=                Write_Line_Nr + 1 ;

            iStatus :=        40 ;

    40:        strStatus :=        'Datei schliessen' ;

            fileCloseOK :=            SysFileClose (        File :=        fileHandle ) ;
            IF        fileCloseOK        THEN            iStatus :=        0 ;
                                                        IF        Write_Line_Nr > Log_File_1_last_Line        THEN        Write_Line_Nr := 0 ;            END_IF ;
            END_IF ;

END_CASE ;

Bei weiteren Fragen: Einfach fragen!
Viel Erfolg!
Grüße Tom
 
Hallo,

ich glaub ich bin einfach zu blöd. :-( Ich hab mein Programm mal in den Anhang evtl kann mir ja einer direkt weiterhelfen.

Ich würde gerne eine Datenaufzeichnung mittels des Start Button in der Visualisierung starten welche dann die Messwerte
MR_BHKW1_Istleistung_KW und den AO_Sollwert_BHKW1 sekundengenau aufnimmt und in eine .csv Datei schreibt welche ich dann öffnen kann und weiterverarbeiten kann.

Hoffe mir kann einer Helfen!

Grüße

Steffen
 

Anhänge

  • BHKW´s_Abnahme_V27.zip
    31,1 KB · Aufrufe: 79
Hallo Tom,

danke dir für die Hilfe,

dein Prog. hab ich mal importiert, da kommt aber der Fehler, dass er die Variable "Sysfileopen" nicht deklariert ist.

Jetzt hab ich mal mein Programm exportiert. Vielleicht kannst du mir nun besser weiter helfen ;)

Grüße

Steffen
 

Anhänge

  • BHKW_DATENLOGGER.zip
    9,3 KB · Aufrufe: 44
Zurück
Oben