öffnen einer csv-Datei auf der SD-Karte (Wago 750-881)

Begonnen von peter_f, 12. November 2014, 18:59:15

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

peter_f

Hallo,
Ich schreibe mit dem Baustein dlog_store_to_csv eine Datei auf die SD-Karte. Dazu lege ich folgende Werte an die Eingänge:
Enable   true
Trig_m    einen Takt mit 900s  (den generiere ich mit dem Baustein Blink, 850,5s low, 0,5s high)
Filename 's:\archiv\dateiname.csv'   genau so mit den Hochkommas
DTI   eine Variable vom Typ DT, die die aktuelle Ortszeit enthält
sep  59    Semikolon
auto_close    t#1s
x   struktur  (eine Variable, die ich als dlog_data deklariert habe)
Retain_date   wie oben, aber dlog_retain

Das funktioniert ganz wunderbar, es wird eine Datei geschrieben, aber die bekomme ich nicht von der karte gelesen. Mit Filezilla bekomme ich die Meldung

Status:   Verbunden
Status:   Starte Download von /ARCHIV/Temperaturen.csv
Befehl:   CWD /ARCHIV
Antwort:   550 Requested file action not taken.
Befehl:   SIZE /ARCHIV/Temperaturen.csv
Antwort:   500 Syntax error, command unrecognized.
Befehl:   MDTM /ARCHIV/Temperaturen.csv
Antwort:   500 Syntax error, command unrecognized.
Befehl:   TYPE I
Antwort:   200 Command okay.
Befehl:   PASV
Antwort:   227 Entering Passive Mode (192,168,2,36,156,144)
Befehl:   RETR /ARCHIV/Temperaturen.csv
Antwort:   550 Requested file action not taken.
Fehler:   Kritischer Dateiübertragungsfehler

Genau so, also mit den exakt selben Einstellungen, abgesehen vom Dateinamen, habe ich das mit einer anderen Steuerung (der selbe Typ, aber ein nicht das selbe Gerät) schon einmal gemacht, und es ging.
Was wohl auch noch interessant ist: Ich kann per ftp beliebige Dateien auf die Karte kopieren, und auch wieder herunterladen. Diese eine spezielle, von der Wago geschriebene, geht nicht. selbst wenn ich die Karte rausnehme, direkt in den Rechner stecke, den Dateinamen ändere und sie dann wieder reinstecke, geht nichts. Die von der Wago erstellte Datei lässt sich nicht per Browser von der Wago runterladen. Die Rechte der Datei sind übrigens 666, also jeder darf sie lesen und ändern. Wenn ich sie direkt in den Rechner stecke, dann kann ich die Datei ohne Einschränkungen lesen, ändern....
Gibt es noch irgendwo in der Hardware irgend eine Einstellung?
Was könnte ich falsch gemacht haben?
Leider habe ich keine andere Steuerung zur Verfügung, um das Programm einfach an einer anderen Steuerung zu testen.

peewit

kannst du die datei nach einen sps spannungsreset normal handhaben ?
jedoch solltest du vorher sicherstellen das nicht das sps-programm wieder drauf zugreift
(eventuell auf stop stellen oder ähnliches)

es kann sein das die datei ständig vom sps programm in benutzung ist und deswegen kein zugriff innerhalb der sps von extern zugelassen wird.


probiere mal ...

peter_f

Hallo Peewit,
mit sowas hatte ich eigentlich auch gerechnet, glaube ich aber nicht mehr.
Ich habe diesbezüglich schon alles Mögliche versucht.
- SPS gestoppt und versucht, zu holen     geht nicht
- In den Namen die Variable für die Minute gepackt, dass minütlich eine neue Datei angelegt wird. Auch da kann ich die "alten" nicht downloaden.
- Die Karte aus der Steuerung genommen und direkt im PC die Datei geöffnet und auf der SD-Karte wieder abgelegt. Per ftp von der Steuerung kann ich sie nicht laden.
Was ich noch nicht getestet habe ist, ob sie sich mit einer anderen 880er lesen lässt. Vielleicht treibe ich bei der Arbeit irgendwo eine auf, um das zu testen, dann bin ich mir wenigstens sicher, dass es nicht an der Hardware liegt.

PS, die üblichen Verdächtigen, alles bereinigen und neu übersetzen, Hardwarereset, Firmware neu aufspielen... habe ich schon hinter mir.

peewit

probiere es mal ohne unterverzeichnis also nur einen dateinamen anzugeben. dann landet die datei im root ordner auf der sps
und probiere auch gleich einen dateinamen <= 8 zeichen

sieht so aus als ob der verzeichniswechsel auf "archiv" verweigert wird.

peter_f

erst habe ich das nochmal auf einer anderen Steuerung, aber mit der selben SD-Karte versucht. War erfolglos. Dann auf die SD-Karte, aber ins root-Verzeichnis. selbes Verhalten. Direkt auf die Steuerung (internes Dateisystem) kann ich schreiben und dann auch mit Filezilla runterladen. Das ist zwar nicht wirklich das, was ich will, aber es scheint damit klar zu sein, was der Fehler ist. Ich vermute mal ganz stark, dass es nicht mit jeder SD-Karte geht. Ich besorg mir jetzt mal genau den Typ, auf den ich mit der anderen Steuerung, bei der es geht, schreibe. Dann teste ich nochmal neu. Ich melde mich auf jeden Fall wieder und berichte, ob meine Vermutung richtig ist. Könnte ja auch für jemand anderen interessant sein.

peter_f

Am Wochenende hatte ich ein bisschen Zeit, um mir die Sache nochmal anzuschauen. Unabhängig von der verwendeten SD-Karte ist das Verhalten immer das selbe:
ich kann auf die Karte schreiben
es darf sich auch ein Unterverzeichnis auf der Karte befinden, in das ich schreibe
ich kann die erstellte Datei nur dann per ftp von der Karte holen, wenn der Dateiname rel kurz ist. Leider habe ich bislang noch nicht versucht, ob er eventuell 8.3 sein muss. (T#A#D.csv funktioniert z.B., damit kann ich leben)
es scheint völlig egal zu sein, ob die Karte FAT oder FAT32 formatiert ist (Wäre wegen der 8.3 Konvention noch so eine Idee gewesen).
Jetzt wollte ich die erstellte Datei mit dlog_file_to_ftp auf mein NAS kopieren. Dazu habe ich das Beispiel in der lib geöffnet und versucht auf meine Bedürfnisse abgepasst zu verwenden. (siehe Bild im Anhang)Das Demo konnte ich nicht aufrufen, weil beim start des Programmes in der Simulation codesys abstürzt.
Ich bin mir nicht sicher, ob alle Einträge stimmen, da sich die im Beispiel je auf einen Webserver beziehen.
DNS-IP  gehe ich davon aus, dass das der DNS-Server ist, also mein Router
PLC-IP ist die Wago
ftpURL ist das NAS und dort der Ordner den User und das Passwort habe ich extra zu testen angelegt. Mit der Befehlszeile im Browser komme ich auf das NAS
Dateiname mit Pfad etc sollte mit der Struktuvariablen, in meinem Fall "struktur" aus der vorgelagerten CSV-Erzeugung übernommen werden.
Warum ist im Beispiel file_delete true? Ich will nicht, dass die vorhandene Datei gelöscht wird, weil die regelmässig weitergeschrieben wird.
Übrigens:

error_c und error_t sind immer 0, sollte so ok sein
done immer high, busy immer low, was ich so interpretiere, dass der Baustein nie versucht zu schreiben.



[gelöscht durch Administrator]

peewit

vermutlich kann das lokale filesystem und auch die file-systembausteine mit langen dateinamen umgehen.

das ftp-server modul (teil der firmware) in der sps ist vermutlich dazu nicht fähig

sowas würde mich nicht überraschen da die hersteller hier immer von den verschiedensten firmen software zukaufen


das sollte aber der hersteller für dich klären können.


peter_f

Hallo Peewit
Nur, um die Sache zu einem Abschluss zu bringen, noch folgende Info:
In irgend einem Beitrag hier im Forum habe ich gelesen, dass der ftp-Baustein immer dann angestossen wird, wenn entweder enable false wird, oder der Dateinamen sich ändert. In der Doku habe ich das entweder überlesen, oder es steht nicht drin. Damit wird mir aber auch klar, weshalb file_delete true sein kann (oder sogar sollte), weil damit der Datenfriedhof auf der Karte immer gleich bereinigt wird.
Deine Einschätzung "das ftp-server modul (teil der firmware) in der sps ist vermutlich dazu nicht fähig sowas würde mich nicht überraschen da die hersteller hier immer von den verschiedensten firmen software zukaufen" wäre eine Erklärung dafür, dass es mit manchen PLC geht und mit anderen nicht (immer 750-880!).