# Daten über mehrere Wochen aufzeichnen mit TwinCAT



## olitheis (7 April 2009)

Hallo,
ich hoffe male, es OK, wenn ich einen neuen Thread aufmache? Ich hatte ja vor kurzem einen ähnlichen, jedoch gibt es jetzt eine konkrete Anwendung für diese Datenaufzeichnung, wo ich noch ein paar Fragen zu hätte:
Wir hatten kürzlich ein Problem an einer Anlage (natürlich in der Nachtschicht ), das nur sehr schwer nachzuvollziehen war. Es war auch nicht das 1. Mal. Jetzt möchte ich gerne ca. 4 Analogwerte und 8 Bool Variablen über meherer Wochen "loggen". Die Steuerung an der Anlage ist zu alt und bietet keinerlei Möglichkeiten in dieser Hinsicht. Da wir immer mehr beckhoff/TwinCAT einsetzten, dachte ich vielleicht damit ertwas zu machen. Allerdings müsste ich mit einer Abtastrate von ca. 200-500ms über Wochen hinweg mitschreiben. 
Meine Frage nun: Ist soetwas auch mit TwinCAT realisierbar? Oder gibt es hierfür etwas ähnliches wie den Accon S7 EasyLOG? Oder sollte ich mich nach einem externen Datenlogger umsehen, der auf USB oder Netzwerk schreibt? Oder könnte man in TwinCAT so programmieren, dass täglich eine neue Datei angelegt wird, um den "Datenaufwand" zu minimieren.
Vielen Dank
Oli


----------



## trinitaucher (7 April 2009)

Klar geht das.
Einfachste Variante: Zunächst die Daten über mehrere Zyklen sammeln und dann jeweils einen Datensatz in eine Datei auf dem Falsh oder Festplatte schreiben.

Dafür gibt's Funktionsbausteine (u. A. File Open und File Write):
http://infosys.beckhoff.com/index.p...plclibsystem/html/tcplclibsys_fb_fileopen.htm
http://infosys.beckhoff.com/index.p...lclibsystem/html/tcplclibsys_fb_filewrite.htm

Die Daten zunächst zu sammeln und nur alle 10 Sekunden wegzuschreiben hat den Vorteil, dass du nicht in Zeitprobleme kommst, wenn das dem Datei öffnen, schreiben und schließen mal nicht klappen will.


----------



## Cerberus (7 April 2009)

Du musst allerdings aufpassen, dass deine Dateien nicht zu groß werden. Habe vor ca. einem viertel Jahr 5 Analogwerte pro 10 ms in einer Textdatei abgespeichert. Da kamen nach 3-4 Tagen so ca. 250 bis 300 MB zusammen.

Du könntest testweise mal einen Tag lang aufzeichnen und dann hochrechnen, wann kritische Grenzen erreicht werden.


----------



## olitheis (7 April 2009)

ok, angenommen, ich würde 3 Analogwerte und 3 Bool Variablen alle 500ms aufzeichnen wollen. D. h. ich hätte pro Tag 2*3600*24*6=1.036.800 Werte bei 500ms und 6 Werten. Jetzt würde ich noch versuchen die kritischen Bereiche einzugrenzen, sprich: nur dann loggen, wenn es darauf ankommt. das würde die Daten teilweise um 1/2 reduzieren. 
Wäre das noch sinnvoll, ich meine 500.000 Werte/Tag in eine Datei?
Cerberus hatte mir ja schon sehr geholfen bei meiner letzten Frage mit FilePuts. Allerdings müsstet ihr mir jetzt noch einmal weiterhelfen, wenn ich
1. Datei öffnen möchte
2. Daten alle 500ms wegschreiben (evtl. so wie trinitaucher sagt, Päckchenweise alle 10 Sek?)
3. nach 1 Tag (0:00 Uhr) die Datei speichern und von da an die Daten in eine neue Datei schreiben.
...
Macht das Sinn?


----------



## Cerberus (7 April 2009)

olitheis schrieb:


> Wäre das noch sinnvoll, ich meine 500.000 Werte/Tag in eine Datei?


 
Also ich hatte bei mir die zig-fache Menge an Werten/Tag. Kommt aber immer darauf an, wie du später deine erfassten Werte analysieren willst. Bei mir ging es lediglich darum den Trend der Werte nachzuvollziehen und zu kontrollieren, dass keine größeren Sprünge auftreten.

Für die Beispiele zu deinen 3 Punkten muss ich mal mein altes Prjekt rauskramen. Geb dir wieder Bescheid.


----------



## Neals (7 April 2009)

Kannst ja auch Mittelwerte über 10 Minuten schreiben, dann hast am Tag nur 24 * 6 = 144 Werte, die jedoch recht aussagekräftig sind.


----------



## Cerberus (8 April 2009)

Er will aber ein bestimmtes Problem detektieren, deshalb würde ich eine Mittelwertbildung eher ausschließen.


----------



## Cerberus (8 April 2009)

So, hab jetzt endlich mein altes Projekt gefunden. Das folgende Beispiel speichert alle 5 Sekunden 12 Werte in einem Text-File. Alle 30 Sekunden wird ein neues Text-File angefangen. Durch die Werte der Timer kannst du die Zeiten auf deine Problemstellung anpassen.


----------



## BernhardQ (8 April 2009)

Hallo 

Darf ich mich mal da dranhängen. Gibt es auch die Möglichkeit so was unter XSoft zB für eine andere Steuerung zu realisieren? Die Datenabstände dürften größer sein je Min 30 Werte über 40 Tage.


Viele Grüße

Bernhard


----------



## Cerberus (8 April 2009)

BernhardQ schrieb:


> Hallo
> 
> Darf ich mich mal da dranhängen. Gibt es auch die Möglichkeit so was unter XSoft zB für eine andere Steuerung zu realisieren? Die Datenabstände dürften größer sein je Min 30 Werte über 40 Tage.
> 
> ...


 
Mit XSoft kenne ich mich gar nicht aus. Da kann ich dir leider nicht weiterhelfen.


----------



## Cerberus (8 April 2009)

Habe gerade das Internet ein wenig durchforstet und bin dabei auf folgende Seite gestoßen. Meinst du das gleiche XSOFT, das auch darin erwähnt wird? Also so wie es aussieht könntest du das darin beschriebene easySoft-CoDeSys verwenden. Damit könntest du das Programm von mir eigtl auch laufen lassen. Kann nur sein, dass du andere Libs bzw Bausteine benutzen musst.


----------



## BernhardQ (8 April 2009)

Hallo Ceberus 

Erst mal Danke für den Hinweis, daß dein Programm wohl auch unter CoDeSys laufen könnte. Aber genau die Sache mit den Bibliotheken ist mein Problem, habe noch keine gefunden die diese Schreibfunktion in ein File hat.

Viele Grüße

Bernhard


----------



## Mr.Spok (9 April 2009)

Hallo Bernhard,

XSoft hieß die Software früher, jetzt werden die CoDeSys basierenden Steuerungen von Moeller mit der EasySoft-Codesys programmiert.
Bibliotheken fürs File-Management kann man mit dem Bibliotheksverwalter einfügen für die XC100 wäre das z.B. die XC100_File.lib.

mfG Jan


----------



## BernhardQ (14 April 2009)

Hallo zusammen

Danke Cerberus, Danke Jan

Bibliothek ist jetzt eingebunden, aber zB der Pfad

sLogFilename: STRING := 'c:\test\testlog01.txt';

wird wohl nicht angenommen, bzw nichts hineingeschrieben. Wie habe ich die Laufwerksbezeichnung anzupassen?

Viele Grüße

Bernhard


----------



## olitheis (16 Mai 2009)

_Hallo,_
_ich muß noch einmal etwas nachhaken. _
_Konkret zu Cerberus Beispiel mit dem Wegschreiben habe ich noch ein paar Fragen:_
_1. ist es möglich zu dem String das Datum und Uhzeit beifügen?_
_2. ich würde gerne nur zu bestimmten Zeiten mitschreiben, es wäre also gut, wenn es so eine Art Freigabe-bit gäbe, d.h., es wird nur geloggt, wenn diese Freigabe TRUE ist. Leider steige ich bei dem Code nicht ganz durch. Ich versuche gerade mich in ST einzuarbeiten, deswegen wäre ich sehr froh, wenn Du mir hier etwas "Nachhilfe" geben würdest. _
_Ich habe nun einen CX9000 bestellt, mit dem ich an der Anlage gerne die Daten über längere Zeit mitschreiben möchte. Sagen wir mal 20 Variablen in einem String, gerundet auf 2 Dezimalstellen mit Zeitstempel pro Log. Daten schreiben alle 500ms, alle 3600s in eine neue Datei (wie in Deinem Beispiel) mit Freigabe zum Schreiben generell._
_Nochmals vielen Dank_
_Oli_


----------



## Cerberus (18 Mai 2009)

Hi Oli,

Hab dir im Anhang mal das Beispiel mit der Systemzeit, das ich in der PN schon erwähnt habe.

Zusätzlich habe ich dort das von dir gewünschte FreigabeBit eingefügt. Dieses wird im Case 20 abgefragt:

```
20: (* Datei schreiben *)
  IF FreigabeBit THEN
    IF Loggen THEN
      IF bWriteData THEN
        fbFileWrite( sNetId:= '',
          hFile:= hFile,
          pWriteBuff:= ADR(LogDaten),
          cbWriteLen:= LEN(LogDaten),
          bExecute:= TRUE,
          tTimeout:= t#3s,
          bBusy=> ,
          bError=> ,
          nErrId=> ,
          cbWrite=> );
        IF NOT fbFileWrite.bBusy THEN
          fbFileWrite(bExecute := FALSE);
          bWriteData := FALSE;
        END_IF
      END_IF
    END_IF
  ELSE
    zLog := 30;
  END_IF
```
 
Gruß Cerberus


----------

