# Wago 750 Messwerte in Array schreiben



## emsbootsmann (31 Oktober 2010)

Ich möchte ,wenn ein Triggersignal anstand, die Messwerte erst in einen Array schreiben und dann wenn die eingestellte Zeit abgelaufen ist den Array auslesen und in eine CSV Datei schreiben.
Wenn ich die Messwerte direkt in eine CSV Datei schreibe wird es zu langsam.Das dauert dann um die 60-80ms.Ich erhoffe mir das es beim Array schreiben schneller geht.Ziel ist es um die 10ms.
Wenn jemand eine andere Idee hat wäre es auch super.Kenne mich nicht so gut mit Wago aus,muss es aber realisieren.
Danke im vorraus.


----------



## Matze001 (31 Oktober 2010)

```
HM_TRIG : P_TRIG;
Array[0..100] of INT; (War schon lange net mehr an der Wago, Syntax muss nicht stimmen)
Index : INT

HM_TRIG(Eingangstrigger); // Flanke erzeugen



IF HM_TRIG.OUT THEN

    Array[Index]:= Sensorwert; // Wert in Array schreiben
    Index:= Index + 1; // Index inkrementieren

END_IF

IF Index == 101 THEN

// CSV Schreiben (darfste selbst machen)

Index:=0; // Index rücksetzen


// Optional, nicht nötig aber "sauber"

While Index <= 100 DO // Array initialisieren
    Array[Index]:='';
    Index:= Index + 1;

END_WHILE

Index:=0; // Index rücksetzen

END_IF
```
Denke das sollte in groben Zügen stimmen, kein Gewähr!

MfG

Marcel

Edit: Ach ja, das Array ist hier auf 100 begrenzt, kannst du aber gern anpassen! Natürlich muss dann auch die 101 vor dem CSV schreiben angepasst werden


----------



## Larry Laffer (31 Oktober 2010)

Hallo,
du möchtest also einen Kurvenverlauf oder ähnlich erst aufzeichnen und am Schluß dan abspeichern ?
Wenn ja ... ich gehe hierbei auch grundsätzlich so vor, dass ich solche Werte für die Dauer einer Freigabe in ein Array einlese und dann nach der Aufzeichnung damit arbeite. Dein Vorhaben ist also in dieser Form praktikabel.
Du solltest aber 1. berücksichtigen, dass du beim Aufzeichnen nicht über die Array-Grenzen hinaus schreibst und 2. dass du ein sinnvolles Aufzeichnungs-Intervall (also z.B. jede Millisekunde oder alle 5 ms oder ...) wählst.

Gruß
Larry


----------



## gravieren (31 Oktober 2010)

Hi

Ich denke, er will permanent abspeichern/schreiben ?


Falls ja, benötigt er einen FiFo-Buffer.


----------



## emsbootsmann (31 Oktober 2010)

Erst mal danke an alle.
Was ist ein Fifo Buffer?

Ich will eigendlich so ca. alle halbe Stunde für ca. 2-3min Daten mitschreiben.Es werden dann 10 DI und 4AI mitgeschrieben.Es soll so schnell wie möglich Daten aufzeichen um im Fehlerfall der Anlage genau Daten zur Fehleranalyse zu bekommen.
Wenn ich jeden Zyclus die Daten direkt in die Datei schreibe dauert ein Datensatz ca.60-80ms.Das ist mir zu lang.Ziel ist es um die 10ms zu kommen.


----------



## Matze001 (31 Oktober 2010)

FiFo - First in First out

Kannst ja mal Wikipedia bemühen.

Das brächstest du wenn du kontinuirlich aufzeichnest!

Ansonsten könnte man mein Programm um ein Array erweitern, wenn das erste Array voll ist es in das zweite Array schieben... dieses dann in die CSV... und wenn Schreiben fertig und Array1 wieder voll das selbe von vorn.

MfG

Marcel


----------



## zotos (31 Oktober 2010)

emsbootsmann schrieb:


> ...
> Wenn ich die Messwerte direkt in eine CSV Datei schreibe wird es zu langsam.Das dauert dann um die 60-80ms.
> ...



Ich hatte vor einiger Zeit mal das Vergnügen mit einer Wago 750-841 eine Textdatei zu erstellen.

Der Trick bestand darin die Geschichte aufzuteilen in Programm Abarbeitung und Filehandling. 
Das eigentliche SPS-Programm lief in einem zeitgesteuerten Task (z.B. 10ms) das Filehandling, erzeugen der Datei und in meinem Fall auch noch das versenden via FTP lief in einem zweiten Task der über die Prioritätssteuerung von dem SPS Task unterbrochen wurde.


----------



## BFlat (31 Oktober 2010)

*timing Analog Eingang?*

Ahoi EmsBootsMann,

Leider kenne ich die WAGO nur aus Hochglanzprospekten.

Aber, ganz allgemein:
Was für Analogeingänge hast Du?
Successive Approximation?
Bekommst Du die Analogwerte mit dieser hohen Geschwindigkeit?

Das Lesen eines Analogeingangs ist ein kleiner Ablauf, der entweder durch die Leseanweisung ausgelöst wird oder zyklisch über das Prozessabbild mit dem Timing der Haupttask.

Im ersten Fall (spontaner Zugriff) sollte die Reaktionszeit (Konversionszeit) in den technischen Daten des Analogmoduls dokumentiert sein. 

Im zweiten Fall wird eine schnelle Leseschleife zum Laden eines Arrays während eines SPS Zyklus nur immer die gleichen Werte in das Array eintragen. Nur bei jedem neuen SPS Zyklus erhältst Du einen neuen Wert. Die von Dir beobachteten 60 - 80 ms riechen stark nach einer gemütlichen SPS Zykluszeit


BFlat


----------



## gravieren (31 Oktober 2010)

Hi



BFlat schrieb:


> Die von Dir beobachteten 60 - 80 ms riechen stark nach einer gemütlichen SPS Zykluszeit



Die Task verhart/wartet bis die Daten in das Filesystem geschrieben werden.

Deshalb auch eine separate Task wie schon von  "Zotos" erwähnt.


----------



## emsbootsmann (31 Oktober 2010)

wie wurde das realisiert mit den 2 tasks,hast du ein Beispielcode


----------



## McNugget (1 November 2010)

Guten Morgen.

Das mit den nach verschiedenen Prioritäten aufgerufenen Tasks kann man eher schlecht als Codebeispiel zeigen.

Schau mal im Reiter "Ressourcen" unter dem Knotenpunkt "Taskkonfiguration" 

Dort kannst Du in der rechten Hälfte freilaufende, zyklische und ereignisgesteuerte Tasks (Unter-Programmaufrufe) definieren.

Wichtig ist , dass man nicht so wahnsinnig zeitkritischen Prozessen, wie z. B. Netzwerkkommunikation über SNMP eine Priorätät >13 zuordnet, damit diese nicht das System ausbremsen.

Ich meine noch zu wissen, dass die interne Visualisierung etwa eine Priorität von 11 hat.


Vielleicht hilft das schon mal ein wenig

Gruss

McNugget


----------



## Newbie88 (19 Oktober 2012)

*Csv datei schreiben*

--------------------------------------------


----------



## Oberchefe (19 Oktober 2012)

siehe auch hier:
http://www.sps-forum.de/showthread....ern-auf-SD-Karte-speichern-und-per-FTP-senden

aber Du scheinst ja für ein Problem viele Threads aufzumachen/vollzumüllen:

http://www.sps-forum.de/showthread.php/55798-CSV-Datei-mit-einer-Wago-Sps-erstellen


----------



## Newbie88 (19 Oktober 2012)

Hallo,

Du hast recht..Kann man die eigentlich auch löschen?

Mfg


----------



## peewit (21 Oktober 2012)

hallo

schau doch mal bei *www.oscat.de* vorbei , dort gibt auch eine oscat_network.lib (kostenlos, open source ...)
die enthält ein datalogger paket

also aufzeichnen von verscheidensten werte in eine datei (csv,html,xml)
versenden der datei per email, ftp usw...


----------

