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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Messwerte auf interne SD-Karte einer Wago-SPS schreiben im ms-Bereich

  1. #1
    Registriert seit
    01.09.2014
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich möchte gerne Messwerte auf eine SD-Karte schreiben, welche in eine Wago-SPS vom Typ 750-880 gesteckt wird. Hierfür verwende ich bereits einen Funktionsblock „FbDatalogger“, welcher aus einer Beispielanwendung stammt, welche auf der Webseite des Herstellers Wago veröffentlicht wurde. Der verwendete Funktionsblock bietet als kleinste (schnellste) Einstellung das Loggen im Sekundentakt an.

    Da ich mehr Messwerte pro Sekunde für meine Analysezwecke benötige, wurde die "Beschaltung" des Bausteins von mir derart angepasst, sodass pro Sekunde 5 Messwerte von einer Wago-Leistungsmessklemme vom Typ 750-494 in einem Puffer-Array zwischengespeichert und nach einer Sekunde ausgegeben werden sollen.

    Zur Erfassung von 5 Messwerten pro Sekunde ist demnach ein Takt von 200ms notwendig. Dieser wird von einem Pulsgeber aus der OSCAT Standart-Bibliothek mit dem Namen "CLK_PRG" erzeugt. Der Baustein CLK_PRG erzeugt Taktimpulse mit einer programmierbaren Periodendauer. Die Ausgangsimpulse sind jeweils nur einen SPS Zyklus aktiv.
    Hiervon wird die steigende Flanke des Taktes mit dem Standart-Baustein "R_TRIG" erkannt, welcher eine Zählvariable von 1 bis 5 hochzählt (und bei 5 wieder auf 1 zurückgesetzt wird).
    Dieses Vorgehen funktioniert soweit auch.

    In der auf der SD-Karte geschriebenen csv-Datei ist jedoch in unregelmäßigen Abständen eine Abweichung bei den notierten Zeitpunkten erkennbar. Es wird oft in der geloggten Zeit eine Sekunde übersprungen. Siehe hierzu die angehängte csv-Datei.

    Meine Fragen hierzu sind nun:
    - Woher kommt diese Zeitverzögerung?
    - Gibt es vielleicht eine einfachere Möglichkeit Messwerte von etwa 15 verschiedenen Messgrößen (Strom, Spannung, Wirkleistung,...) mittels eines Programmes auf der internen SD-Karte zu speichern? Im Idealfall wären 10 erfasste Messreihen (Zeilen in einer csv-Datei) pro Sekunde wünschenswert.


    Im Anhang habe ich das Problem der csv-Datei als Bild skizziert.
    Den Programmausschnitt der Messwerterfassung habe ich als Projektdatei angehangen. (Das "echte" Programm beinhaltet noch andere "Unterprogramme", die andere Funktionen übernehmen.)

    Ich hoffe jemand kann mir bei meinen Programm helfen.


    Vielen Dank schonmal dafür



    Programmauszug.zipAusschnitt csv-Datei.jpg
    Zitieren Zitieren Messwerte auf interne SD-Karte einer Wago-SPS schreiben im ms-Bereich  

  2. #2
    Registriert seit
    21.02.2014
    Ort
    Sachsen-Anhalt
    Beiträge
    1.574
    Danke
    285
    Erhielt 260 Danke für 234 Beiträge

    Standard

    OT:
    Bin ich ein Dinosaurier, wenn ich sage das es keine gute Idee ist, im Sekundentakt auf eine sd zu schreiben?
    Vor allem nicht so kleine Datenblöcke.
    Wäre es nicht besser, erstmal einen Block ~4kB zu sammeln und dann zu schreiben?
    Geändert von weißnix_ (24.10.2014 um 20:00 Uhr)

  3. #3
    Registriert seit
    21.02.2014
    Ort
    Sachsen-Anhalt
    Beiträge
    1.574
    Danke
    285
    Erhielt 260 Danke für 234 Beiträge

    Standard

    Ausser, das ich nicht ganz durchblicke
    bilde ich mir folgendes ein:
    1. Die Flanke auf Dein CLK-Signal ist unnötig, da der Ausgang des CLK-Bausteins nur einen Zyklus lang ist.
    2. kann das von Dir gekennzeichnete durch einen kleinen Jitter bei der Programmausführung zustandekommen.
    Zwischen 1 und 2 z.B. nur 999ms Abstand
    Zwischen 6 und 7 z.B. 1001ms
    Logge einfach die Millisekunden mit und dann wird es klarer.

    Ich würde sowas direkt von der Systemzeit -hier Sekunde- Triggern lassen und nicht von so einem freilaufenden Generator.


    Edit: Falsch-- natürlich von der Millisekunde im Raster 0-200-400-800-0
    Und da sieht man es schon. Muss nochmal denken
    Geändert von weißnix_ (24.10.2014 um 20:36 Uhr)

  4. #4
    Registriert seit
    21.02.2014
    Ort
    Sachsen-Anhalt
    Beiträge
    1.574
    Danke
    285
    Erhielt 260 Danke für 234 Beiträge

    Standard

    Du siehst es schon, mit den 200ms bekommst du eine zeitliche verschiebung, weil der neue Messzyklus nach 1200ms erst beginnt.
    Oder sollte ich jetzt schlafen gehen???

    Unsinn: Schlafen tut not.

    0-200-400-600-800-...
    Das ist der Systemzeitsynchrone Triggerzyklus, und dann klappt es auch mit dem Nachbarn. Dadurch loggst Du immer im gleichen Raster und solltest keinen Jitter im Log mehr haben.

    Gute Nacht.

    Edit: Nachdem jetzt alle schmerzende Hände vom Schenkelklopfen haben:

    Dein Programm in gekürzter Fassung, also ohne die Arrayzuweisungen zum Bleistift, hätte sicher zwischen die Code-Tags gepasst.
    Mein Twincat hat jedenfalls mächtig gemeckert beim öffnen.
    Geändert von weißnix_ (24.10.2014 um 20:50 Uhr)

  5. #5
    SPS_Jack ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    01.09.2014
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank für die schnelle Antwort.
    Schaue es mir morgen mal an und melde mich dann wieder
    Gute Nacht

  6. #6
    SPS_Jack ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    01.09.2014
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von weißnix_ Beitrag anzeigen

    0-200-400-600-800-...
    Das ist der Systemzeitsynchrone Triggerzyklus, und dann klappt es auch mit dem Nachbarn. Dadurch loggst Du immer im gleichen Raster und solltest keinen Jitter im Log mehr haben.
    Ich entferne also den freilaufenden Pulsgeber aus dem Programm, setze dafür die Systemzeit ein und erzeuge mir Triggerimpulse bei 0ms, 200ms, 400ms, 600ms und 800ms.

    Wie kann ich denn die Systemzeit auslesen? Gibt es dafür auch einen Baustein?
    Habe in anderen Beiträgen die Bibliotheken SysTaskInfo.lib und SysLibTime.lib mehrmals gelesen.

    Sorry, aber bin absoluter Neuling

  7. #7
    Registriert seit
    21.02.2014
    Ort
    Sachsen-Anhalt
    Beiträge
    1.574
    Danke
    285
    Erhielt 260 Danke für 234 Beiträge

    Standard

    Genau. In welcher lib sich bei Wago die Funktionen befinden weiss ich nicht.


    send wia hendi
    - Der frühe Wurm wird vom Vogel gefressen -

  8. #8
    Registriert seit
    21.02.2014
    Ort
    Sachsen-Anhalt
    Beiträge
    1.574
    Danke
    285
    Erhielt 260 Danke für 234 Beiträge

    Standard

    Ich halt es so: Fuer Systemspezifisches gibts 'ne Doku

    send wia hendi
    - Der frühe Wurm wird vom Vogel gefressen -

  9. #9
    SPS_Jack ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    01.09.2014
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe ebend mal ein Test-Programm geschrieben.
    Hierzu wird ein Baustein aus der OSCAT-Basis-Bibliothek mit dem Namen RTC_2 verwendet. Der Ausgang XMS gibt die Millisekunden der RTC von 0 bis 999 aus.


    Der Eingang SDT bekommt über die Funktion SysRtcGetTime die Zeit des Systems übergeben.


    Um die Funktionalität zu überprüfen habe ich eine CASE-Struktur eingefügt, die verschiedene Variablen hochzählen soll, wenn Werte im Takt von XMS auftauchen 0, 200, 400, 600, 800 um die Abfolge zu kontrollieren.


    Leider funktioniert dies nicht zuverlässig. Lediglich i, j und m werden nach 2 bis 5 Sekunden (per Zufall?) wie im Bild ersichtlich hochgezählt.


    Woran kann das liegen das die Variable XMS nicht sauber von 0 bis 999 hochzählt?

    Bild_RTC.JPG

  10. #10
    Registriert seit
    21.02.2014
    Ort
    Sachsen-Anhalt
    Beiträge
    1.574
    Danke
    285
    Erhielt 260 Danke für 234 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ms-genaue Erfassung funktioniert nur bei hinreichend kurzen Zykluszeiten.
    Für Deine Erfassung solltest Du ein 5ms-Fenster (bzw. auch größer bei längeren Zyklen) zulassen für die Triggerung.
    Also nicht Vergleich auf =200ms sonder auf z.B. >=198 AND <= 204.
    Dann benötigst Du übrigens wieder den Flankentrigger .

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 24.10.2013, 10:37
  2. Antworten: 3
    Letzter Beitrag: 03.04.2013, 11:47
  3. Beckhoff CX80xx Conroller Messwerte auf die Speicherkarte schreiben
    Von buffi4711 im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 27.02.2013, 14:54
  4. Messwerte auf USB Stick in CSV schreiben
    Von blimaa im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 20.02.2013, 13:21
  5. Wago 750 Messwerte in Array schreiben
    Von emsbootsmann im Forum Sonstige Steuerungen
    Antworten: 14
    Letzter Beitrag: 21.10.2012, 16:30

Lesezeichen

Berechtigungen

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