Hauptmenü

DLOG_STORE_FILE_CSV

Begonnen von gravieren, 24. November 2011, 20:30:12

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

peewit

dasa mit den 15 minuten geht leider (noch) nicht automatisch
du musst einfach alle viertel stunde den dateinamen ändern, mehr ist nicht erforderlich !

du nimmst den date_time wert und teilst in durch 900 , und wenn kein rest bleibt dann es genau

15,30,45,00 minuten

auslöser = DT_TO_UDINT(DTI) MOD 900 = 0;

X-User

Vielen Dank für die schnelle Antwort.
Ich werde das morgen testen.

Grüße

X-User

Hallo,

der Logger funktioniert nun einwandfrei. Leider gibt es nun ein weiteres aber sicher letztes Problem.
Der FTP-Versand läuft leider nicht sauber durch. Es kann sein das der Versand über mehrere Stunden einwandfrei funktioniert.
Dann gibts es wieder Phasen da dauert es bis zu 3min bis der Versand erfolgreich statfindet.
Die Steuerung ist immer noch eine Wago 750-841. Ich habe das Programm aber auch schon auf einer 750-880 getestet mit dem gleichen Problem.
Außerdem habe ich au das Demoprogramm DLOG_FILE_CSV_FTP_DEMO getestet mit dem gleichen Ergebnis.
Auch habe ich schon verschiedene FTP-Server ausprobiert, immer mit dem Problem das der Versand nicht auf Anhieb läuft.
Natürlich Firewall & Co. aus. Auch der FTP-Versand auf eine 2. Wago geht nicht immer.

Über Hilfe würde ich mich sehr freuen denn das Programm läuft sonst einwandfrei - vielen Dank übrigends an der Stelle an die Macher der Oscat !!

Grüße

peewit

#18
hallo

das manche massen-hoster den verbindungsaufbau zum ftp oft zeitlich variabel machen, habe ich selber schon gesehen
dies sind meistens aber nur wenige sekunden, und das wird ja nicht dein problem sein.
kommt es hier zu irgendwelche bandbreiten-limits ?

wir müssen aber jetzt bei dir das problem näher beschreiben/definieren.

hast du nur ein ungleichmässiges zeitverhalten, oder kommt es zu abbrüchen bzw fehlermeldungen
beschreibe bitte die situation etwas genauer.......

das beste mittel wäre eine wireshark aufzeichnung des datenverkehr, dann kann man eindeutig bestimmen was hier passiert

X-User

Hallo,
der FTP-Server ( Filezilla ) läuft im lokalen Netzwerk.
Einen Wireshark-Mitschnitt kann ich machen.
Oder ich poste hier mal das Programm wenn es von Nutzen ist.
Was mich gewundert hat war, das auch die Demo nicht fehlerfrei gelaufen ist.

Danke erstmal für die schnelle Antwort!

Grüße

X-User

Hallo,

nun läuft alles perfekt - bei Gelegenheit kann ich gerne mal das Programm posten.
Ich habe nun die FTP von Wago genommen - mit der funktioniert es prima.
Nun würde ich noch gerne eine weitere Sicherheit einbauen da im Moment falls der Server nicht erreichbar ist, die Dateien auf der Wago abgelegt werden.
Die Sicherheit sollte folgendermaßen aussehen: Die Dateien werden auf der Wago abgelegt. Nun soll z.B. einmal täglich in das Verzeichnis geschaut werden und alle CSV-Dateien die sich darin befinden per FTP übertragen werden.
Gibt es diese Möglichkeit ? Hat sowas schonmal jemand realisiert ?

Grüße

peewit

#21
hallo
genau das haben wir in unseren baustein "DLOG_FILE_TO_FTP" schon integriert
dieser speichert in einen 4kb puffer die zu übertragenden dateiennamen

schau dir doch mal den code von diesen baustein an
du kannst dir ja einfach die relevanten codeblöcke nehmen


(* neue Filenamen speichern *)
IF X.NEW_FILE_RTRIG AND ftrig_old = FALSE THEN
UCBD.D_HEAD := 1;
UCBD.D_MODE := 1;
UCBD.D_STRING := X.NEW_FILE;
UCB(DATA:=UCBD); (* Daten eintragen *)
END_IF;
ftrig_old := X.NEW_FILE_RTRIG;

CASE step OF

00: IF UCBD.BUF_COUNT > 0 AND ftp_busy = FALSE THEN
UCBD.D_MODE := 12; (* Daten lesen und löschen *)
UCB(DATA:=UCBD);
filename := UCBD.D_STRING;
cnt := 0;
step := 10;
END_IF;

10: IF ftp_busy = FALSE THEN

   ..... ftp übertragung durchführen ... der dateiname steht in der variable 'filename'
........

Stoky

#22
Hallo zusammen,

der Threat ist zwar schon alt, ich denke jedoch meine (teils sehr generellen) Fragen passen hier genau rein, falls nicht bitte ich um Entschuldigung.

Ich bastle gerade an meinem ersten CoDeSys Projekt mit V2.3.9.40, ich benutze eine WAGO 750-880. Ich habe die Oscat Bibliotheken oscat_network_121 und oscat_basic_333 in mein Projekt geladen. (Das funktioniert ohne Fehler beim übersetzen) Die Demos in der Bibliothek habe ich mir angesehn, dies bringt mich aber nicht weiter. Selbiges gilt für die Doku zur Bibliothek.

Im Prinzip möchte ich einmal täglich eine neue CSV-Datei mit Datum erstellen, es soll jedoch nur auf Knopfdruck ein neuer Datensatz entstehen. Die Datensätze bestehen immer aus 2 Elementen (2 Strings). Zu allem Überfluss sollen die CSV dateien auf einen firmeninternen Server (glaube SMB) geschrieben werden.


Fragen:

1. Was bedeuten die X Anschlüsse an DLOG_STORE_FILE_CSV und den zugehörigen DLOG_STRING Bausteinen?
2. Wie  kann ich die beiden Strings in die csv Datei bekommen (mit DLOG_STRING?) ?
3. Kann man überhaupt mit DLOG_STORE_FILE_CSV oder DLOG_FILE_TO_FTP auf einen "normalen" Server schreiben?
4. Kann ich zum testen einen Speicherort auf der lokalen Festplatte nehmen? Wenn ja wie?
5. Da ich derzeit nicht an der echten SPS testen kann wollte ich mein Projekt simulieren. Kann ich beim simulieren überhaupt die csv datei beschreiben?


Meine Anschlüsse am DLOG_STORE_FILE_CSV bisher:

Enable: Boolvariable "Datenerfassung aktiviert"
Trig_m: Boolvariable "Taster Abspeichern"
TRIG_T: 15 (zum testen 15 Sekunden, normal 86400 für einmal am Tag)
Filename: 'E:\Projekte\CoDeSys\CSV\Daten#A_#D_#H.csv'
DTI: SysRtcGetTime
SEP: 59
x: Variable vom Typ DLOG_DATA (Platzhalter ohne Sinn)
ERROR_C: leer
ERROR_T: leer

Beim Übersetzen kommen noch 3 fehler: Fehler 4024 ( Erwarte '(' vor ''), 4268 (Ausdruck erwartet) und 4301 (Baustein verlangt genau 7 Eingänge)

Ich hoffe ihr könnt mir helfen, ich suche schon seit locker fünf Stunden nach einer Lösung.

Gruß Stoky

EDIT: Die drei Fehler verschwanden als ich SysRtcGetTime durch eine beliebige Date_Time Variable ersetzte. Allerdings weiß ich jetzt nicht wie ich die die Systemzeit sonst abfragen soll, da ich diese ja brauche um meine Dateien ordnungsgemäß zu benennen.

peewit

hallo

benutzt die 1.30 lib von hier
http://www.oscat.de/community/index.php/topic,1872.msg9862.html#msg9862

1. Was bedeuten die X Anschlüsse an DLOG_STORE_FILE_CSV und den zugehörigen DLOG_STRING Bausteinen?

das ist eine interne datenstruktur mit der du im detail nichts zu tun hast, du musst sie nur als variable anlegen und überall die gleiche angeben

2. Wie  kann ich die beiden Strings in die csv Datei bekommen (mit DLOG_STRING?) ?

  ja

3. Kann man überhaupt mit DLOG_STORE_FILE_CSV oder DLOG_FILE_TO_FTP auf einen "normalen" Server schreiben?

dlog.._csv schreibt auf das lokale filesystem der sps und dlog ... ftp schreibt auf einen im netzwerk erreichbaren ftp-server

4. Kann ich zum testen einen Speicherort auf der lokalen Festplatte nehmen? Wenn ja wie?

nur wenn das deine sps direkt unterstützt. bei einer klasischen sps ist das aber immer das filesystem auf der sps
flashspeicher bzw. mitunter auch ein gesteckter usb-stick

5. Da ich derzeit nicht an der echten SPS testen kann wollte ich mein Projekt simulieren. Kann ich beim simulieren
überhaupt die csv datei beschreiben?

die normale simulation unterstützt kein filesystem und auch kein netzwerk
damit kannst du nicht testen



in der network.lib befindet sich ein ordner "demo", darin findest di verschiedene dlog... demo varianten
öffne die lib als projekt und exportiere dir die gewünschten bausteine in dein projekt
passe sie deinen bedürfnissen an, und mache die ersten tests damit !

wenn du nicht weisst wie du deine aktuelle systemzeit abfragen kannst, da wende dich an denn sps hersteller

mit dem parameter "TRIG_M" an den dlog... bausteinen kannst du den aufzeichnungs-trigger selber vorgeben
positive flanke löst eine datenaufzeichnung aus


Stoky

Hallo,

vielen Dank für die Antwort, das hat mir sehr geholfen. Leider stehe ich jetzt vor einem neuen Problem:

Ich habe die Bausteine nach bestem Gewissen angeschlossen, allerdings scheint die SPS keine CSV-Datei zu erstellen.

Im Anhang befindet sich ein Screenshot aus dem Onlinemodus (mit SPS verbunden). Er zeigt, dass die gewünschten Parameter wie Stringwerte oder Datum+Uhrzeit am Baustein anliegen.

Nach meinem Verständnis müsste die SPS eigentlich einmal pro Minute eine neue CSV-Datei im internen Speicher erzeugen. Jedesmal wenn die Variable Abspeichern 1 wird, wird der aktuelle Datensatz (die zwei Strings und der Real-Wert) in die CSV-Datei geschrieben. An den Eingängen Column wird ein STRING Wert übergeben, der die Spaltenüberschriften darstellt.

Nicht sicher bin ich mir bei den Anschlüssen AUTO_CLOSE und Delta (und Column).

Habe ich vielleicht einen der Bausteine falsch angeschlossen oder könnte der Fehler wo anders liegen?

Gruß Stoky

[gelöscht durch Administrator]

peewit

Hallo

Probiere das vorgerfertigte demo in der bibliothek
Dann sehen wir gleich ob es an deinem programm liegt,oder etwas anderes schuld ist

Beschreibung zum demo baustein habe ich beim letzten posting angegeben


Stoky

#26
Guten Morgen,

ich habe die Demo eingebaut und siehe da es funktionierte. Durch eine Änderungen funktionierte das Demo Programm plötzlich nicht mehr oder zumindest nicht mehr so wie ich es erwartet hatte. Sobald ich am Anschluss FILENAME des DLOG_STORE_FILE_CSV Bausteins den Namen von "Test#R.csv" in "Test#N:#R.csv" änderte wurde nicht mehr minütlich eine CSV-Datei erstellt. In meinem Programm habe ich die den dateinamen in #R geändert und siehe da auch mein Programm funktionierte. Ich vermute, dass mit #N:#R stündlich eine Datei erstellt wird. Das wäre natürlich schlecht für mich, da ich ja das komplette Datum und die Uhrzeit im Dateinamen haben möchte und die SPS mir sonst nur einmal im Jahr eine Datei erstellen würde, bzw. wohl eher dann wenn der interne Zwischenspeicher voll ist.

Gibt es da irgendeine Lösung wie man jede Minute eine Datei erstellt bekommt und trotzdem das Datum im Dateinamen stehen haben kann?

Gruß Stoky


EDIT: Der Fehler lag in den Trennzeichen zwischen den #! Erlaubt sind wohl nur "." und "_", ":" und "/" hingegen nicht. Daher wird bei den nicht erlaubten Zeichen gar keine Datei erstellt. Mit den etrlaubten Zeichen funktioniert das einwandfrei! Ich habe jetzt einfach #A_#D_#H_#N.#R.csv eingegeben und es funktioniert wunderbar :).

peewit

hallo

welche zeichen im dateinamen vorkommen dürfen hängt natürlich von deiner sps bzw. vom filesystem ab

jedoch sind fast immer folgende zeichen nicht verwendbar          <>: "\ / | *?

das kann ja selbst dein windows nicht !

karst

Vielleicht kann jemand mir bestätigen was Ich hier unten behaupte.

DLOG_STORE_FILE_CSV hat ein Fehler wenn in ein Datei mehr geschrieben wird als im PT.BUFFER passt.
Wenn Ich meine log Dateien nachsehe vermisse Ich in regelmäßige Abstände ein Zeigen.
Soweit Ich jetzt diese wunderschöne Funktionsbausteine verstehe wird hier auf die Falze "size" begrenzt.

20:   IF X.UCB.BUF_COUNT > 0 THEN (* Einträge vorhanden *)
      X.UCB.D_MODE := 10;
      UCB(DATA:=X.UCB); (* Element lesen , aber noch nicht entfernen *)
      IF X.UCB.D_HEAD = WORD#16#FF00 THEN (* LOG_STOP Command *)
         X.UCB.D_MODE := 11;
         UCB(DATA:=X.UCB); (* Element entfernen *)
         log_stop := TRUE;
         step := 40; (* Daten schreiben *)
      ELSIF idx + LEN(X.UCB.D_STRING) + 2 < SIZEOF(PT) THEN (* Platz für Element vorhanden ? *)


Wie Ich es sehe muss nur auf die Abmessung der Buffer geachtet werden und nicht auf die Abmessung von ganzen PT. Also:
      ELSIF idx + LEN(X.UCB.D_STRING) + 2 < SIZEOF(PT.BUFFER) THEN

peewit

hallo

1. ja , du hast recht das ist ein fehler
2. diesen fehler habe ich aber schon lange behoben, bzw. gibt es schon länger eine überarbeitete version

http://www.oscat.de/community/index.php/topic,1872.msg9862.html#msg9862

es freut mich, wenn jemand nicht nur die oscat benutzt, sondern auch bei einem problem selber die ursache sucht und auch findet !