DLOG_STORE_FILE_CSV/FTP_CLIENT speicher Problem

Begonnen von dirkm, 08. Januar 2018, 14:16:00

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

dirkm

Hallo,

ich habe seit einiger Zeit den FB "DLOG_STORE_FILE_CSV" erfolgreich laufen.
Ich speichere die Daten erfolgreich in eine Datei "Wetterdaten_#A-#D.csv" auf der SD-Karte.
Zusätzlich sollen die Daten täglich (23:59:59) auf einer NAS gesichert werden, was auch grundsätzlich funktioniert.
Allerdings gibt es am Monatsende immer das Problem, dass die Datei auf der NAS leer ist. Grundsätzlich ist mir klar, dass dies ein Problem mit dem Monatswechsel beim FB "DLOG_STORE_FILE_CSV" ist, weis aber nicht wie ich das lösen kann.

Vielleicht hat ja jemand eine Idee.

MfG

Dirk

...

   CAL      DLOG_Wetterdaten_speichern(
   ENABLE:=1 ,
   TRIG_M:= ,
   TRIG_T:= ,
   FILENAME:='/media/sd/Wetterdaten_#A-#D.csv' ,
   DTI:=Uhrzeit_aktuell_global ,
   SEP:=59 ,
   AUTO_CLOSE:= ,
   X:=DLOG_Daten ,
   RETAIN_DATA:=DLOG_Retain_Daten ,
   ERROR_C=>DLOG_Fehlercode ,
   ERROR_T=>DLOG_Fehlertype )

   (*Dateienname für NAS Sicherung zusammenstellen*)
   (*lokaler Pfad*)
   LD      UTC_DATE
   DATE_TO_STRING
   MID       7,3
   CONCAT    '.csv'
   ST      FTP_HM_Dateiname
   
   LD      '/media/sd/Wetterdaten_'
   CONCAT    FTP_HM_Dateiname
   ST      FTP_Dateiname

   (*NAS Pfad*)
   LD      UTC_DATE
   DATE_TO_STRING
   MID       10,3
   CONCAT    '.csv'
   ST      FTP_HM_Dateiname_URL
   
   LD      'ftp://wetterdaten:1234&@xxx.xxx.xxx.xxx/disk1/Wetterdaten/Wetterdaten_'
   CONCAT    FTP_HM_Dateiname_URL
   ST      FTP_Dateiname_URL

   (*Daten auf NAS sichern*)
   (*IP von DNS*)
   LD      xxx
   ST      FTP_DNS_IP4
   SHL      8
   ADD      xxx
   ST      FTP_DNS_IP4
   SHL      8
   ADD      xxx
   ST      FTP_DNS_IP4
   SHL      8
   ADD      xxx
   ST      FTP_DNS_IP4

   (*IP von Wago*)
   LD      xxx
   ST      FTP_PLC_IP4
   SHL      8
   ADD      xxx
   ST      FTP_PLC_IP4
   SHL      8
   ADD      xxx
   ST      FTP_PLC_IP4
   SHL      8
   ADD      xxx
   ST      FTP_PLC_IP4
   
   (*Einmal am Tag Daten sichern*)
   LD      UTC_TOD
   EQ      TOD#23:59:59
   ST      FTP_Dateiuebertragung_starten
   
   CAL      FTP_Wetterdaten_to_NAS(
   ACTIVATE:=FTP_Dateiuebertragung_starten ,
   FILENAME:=FTP_Dateiname ,
   FTP_URL:=FTP_Dateiname_URL ,
   FTP_DOWNLOAD:= ,
   FTP_ACTIV:= ,
   FILE_DELETE:= ,
   TIMEOUT:=t#30s ,
   DNS_IP4:=FTP_DNS_IP4 ,
   PLC_IP4:=FTP_PLC_IP4 ,
   DONE=>FTP_Kopiervorgang_fertig ,
   BUSY=>FTP_Kopiervorgang_laeuft ,
   ERROR_C=>FTP_Fehlercode ,
   ERROR_T=>FTP_Fehlertype )


peewit

das grundproblem zu erkennen ist hier etwas schwierig

aber genau das was du machen möchtest gibt es ja auch als fertige lösung

schau dir mal den demo programm "DLOG_FILE_CSV_FTP_DEMO"

dort wird der baustein DLOG_FILE_TO_FTP mitverwendet
das erspart dir dann den extracode für die namenbildung
und die lösung hat einen eigenen filebuffer und eigene verwaltung die dann mit fehlerbehandlung und wiederholung alles steuert etc

also alles für dich macht


nimm das mal und adaptiere nur das notwendigste damit es tut was du willst
dann kannst du sehen ob es funktioniert
um es dann schrittweise anzupassen


dirkm

Hi,

Danke. Ich werde mir das mal anschauen.

MfG

Dirk

dirkm

#3
Hi,

ja ich weis, es hat etwas länger gedauert.
Habe jetzt zusätzlich zum Baustein "DLOG_STORE_FILE_CSV" und "FTP_CLIENT" mal Testweise "DLOG_FILE_TO_FTP" eingebunden.
Die beiden alten Bausteine funktionieren weiterhin. Leider funktioniert der Baustein "DLOG_FILE_TO_FTP" nicht.

Folgendes habe ich programmiert:

xxx.xxx.xxx.xxx steht für die IP der Nas
FTP_DNS_IP4 = IP des DNS
FTP_PLC_IP4 = IP der Wago

Mit diesen IP's funktionieren die anderen Bausteine.


(*Test*)
   LD      'ftp://Benutzername:Passwort@xxx.xxx.xxx.xxx/disk1/Wetterdaten/Test/'
   ST      DLOG_Wetterdaten_speichern_Test.FTP_URL

   CAL      DLOG_Wetterdaten_speichern_Test(
   FTP_URL:= ,
   FTP_ACTIV:=0 ,
   FILE_DELETE:=0 ,
   TIMEOUT:=t#30s ,
   RETRY:=0 ,
   RETRY_TIME:=t#60s ,
   DNS_IP4:=FTP_DNS_IP4 ,
   PLC_IP4:=FTP_PLC_IP4 ,
   X:=DLOG_Daten ,
   DONE=>FTP_Kopiervorgang_fertig_Test ,
   BUSY=>FTP_Kopiervorgang_laeuft_Test ,
   ERROR_C=>FTP_Fehlercode_Test,
   ERROR_T=>FTP_Fehlertype_Test )

Online ist "DONE" = true, "BUSY" = false,  "ERROR_C" und "ERROR_T" = 0

Kann man mir vielleicht noch einmal jemand auf die Sprünge helfen?

MfG

Dirk

dirkm

Hi,

wieder mal Asche auf mein Haupt.
Jetzt funktioniert es Grundsätzlich. Mein Problem war/ist, dass ich nicht wirklich aus der Doku erkennen kann, wann welcher Baustein die Daten speichert.
"FTP_CLIENT" ist klar. Mit steigender Flanke an "ACTIVATE"
"DLOG_FILE_TO_FTP" ist jetzt auch klar. Bei Namensänderung am Eingang "FILENAME" vom Baustein "DLOG_STORE_FILE_CSV"
"DLOG_STORE_FILE_CSV" ist mir irgendwie immer noch nicht klar. Reicht eine steigende Flanke am Eingang "ENABLE" und er schreibt die gesammelten Daten vom "X" in die CSV-Datei? Wenn "ENABLE" dauerhaft "TRUE" ist, werden dann die Daten von "X", wenn sich diese ändern, immer in die CSV geschrieben? Die Eingänge "TRIG_M" und "TRIG_T" sind klar.
Ich möchte eigentlich folgendes erreichen:
1. Daten werden in eine Variable vom Typ "DLOG_DATA" eingetragen.
2. Diese Daten möchte ich nur jede Stunde auf die SD-Karte der Wago in einer CSV speichern, die Monatlich den Namen ändert (z.B. Daten_2018.04, Daten_2018.05 usw.).
3. Zusätzlich möchte ich die selben Daten Täglich auf meine NAS sichern (z.B. Daten_2018.04.15, Daten_2018.04.16 usw.)

Wie kann ich das lösen? Wie schon geschrieben klappt es Grundsätzlich mit den Bausteinen "DLOG_STORE_FILE_CSV" und "FTP_CLIENT" bis auf den Monatswechsel, da ist meine Datei auf der NAS leer.

MfG

Dirk

peewit

1. den trigger stellst du auf eine stunde
2. den dateinamen so erstellen das jedes monat eine neue datei erstellt wird
3. wenn du zum DLOG_STORE_FILE_CSV den DLOG ...FTP kombinierst dann wird dieser jede neue Datei (also monatlich eine) auf den FTP-Ort überrtragen

4. die tägliche daten sicherung macht dir in diesen fall das dlog-system nicht
   dazu kannst du aber vielleicht aktiv von der nas auf den ftp der sps zugreifen und die files direkt kopieren !



dirkm

Hi,

danke für die Antwort.

1. Ok, verstehe ich.
2. Ok, ist schon so und funktioniert.
3. Ok, habe ich jetzt auch so realisiert
4. Ein klares Jein, zur Zeit mache ich die tägliche Sicherung mit dem Baustein "FTP_CLIENT". Ich nehme mir täglich die Datei von der SD-Karte, erweitere den Dateinamen um den Tag und kopiere diesen auf die NAS. Wie gesagt, es funktioniert auch bis auf den Monatswechsel.
Deine Alternative mit der NAS muss ich mir erst einmal anschauen.

Aber ich muss noch mal explizit nachfragen:

Der Baustein "DLOG_STORE_FILE_CSV" ist mir irgendwie immer noch nicht klar. Wenn ich "ENABLE" auf "TRUE" setze schreibt er doch immer Daten in die CSV, wenn "X" neue Daten erhält oder? Das möchte ich eigentlich vermeiden.

MfG

Dirk

peewit

ZitatDer Baustein "DLOG_STORE_FILE_CSV" ist mir irgendwie immer noch nicht klar. Wenn ich "ENABLE" auf "TRUE" setze schreibt er doch immer Daten in die CSV, wenn "X" neue Daten erhält oder? Das möchte ich eigentlich vermeiden.

wenn enable = true und trigger_m oder trigger_t löst aus dann werden die daten in die angegebene Datei geschrieben (gesammelt)
nach jeden erneuten trigger werden immer wieder die daten hinzugefügt

das ist die aufgabe und funktion des bausteines und wenn das etwas ist was du nicht möchtest dann musst du etwas anderes machen / verwenden

dirkm

Hallo peewit,

danke für Deine Antwort. Ich möchte Dir erst einmal meinen tiefsten Respekt engegenbringen, für das was Du geleistest hast.
Allerdings habe ich das Gefühl, das man mich falsch versteht.
Ich bin was die codesys betrifft nicht gut bewandert und versuche mich einzuarbeiten. Ich möchte den Baustein   "DLOG_STORE_FILE_CSV" einfach verstehen, um Ihn für meine Belange bestmöglichst einzusetzen. Natürlich kann ich es auch ausprobieren, aber ich dachte Du könntest mir meine Fragen einfach beantworten. Wie man trigger_m und trigger_t benutzen kann ist mir mittlerweile klar. Allerdings werden auch Daten in die csv geschrieben, wenn ich weder den einen noch den anderen trigger verwende. Dafür ist ja der "ENABLE" Eingang "TRUE". Mich hätte jetzt einfach nur interessiert, ob es reichen würde den Eingang "ENABLE" vom Baustein einmal die Stunde mit einer Flanke freizugeben.
Ich werde es einfach testen.

MfG

Dirk

peewit

hallo

alles kein problem

darum können wir uns ja austauschen damit wir zum ziel kommen

Enable = True gibt das ganze nur prinzipiell frei aber es verursacht kein sammeln von daten !

Es gibt nur 3 wege um das datensammeln auszulösen

TRIGGER_T         (auslöser über Zeitfaktor)
TRIGGER_M        (manuelles auslösen)

oder die DELTA Funktion an den einzelnen Datenlog-Bausteinen

hast du dir schon mal die fertigen datalog demoprogramme angesehen ?


dirkm

Hallo peewit,

Zitat von: peewit in 03. Mai 2018, 12:27:19

oder die DELTA Funktion an den einzelnen Datenlog-Bausteinen


das hatte ich aus meinem Gedächtnis verdrängt. Kommt davon, wenn man zu lange die Dinge liegen lässt.
Jetzt bin ich wieder eingenordet und komme klar.

Nochmals Danke

Dirk