Network.lib 1.21, DLOG_STOR_FILE_CSV mit WAGO 750-881

Begonnen von KingHelmer, 20. Oktober 2014, 15:14:57

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

KingHelmer

Hallo zusammen,

habe mich in meiner Verzweiflung hier anmelden müssen, da ich es einfach nicht hinbekomme, meine Daten zu loggen.

Ich habe mein Projekt erfolgreich programmiert und bekomme keinerlei Fehlermeldungen.
Im programm versuche ich einen Zeitstempel, einen REAL-Wert und einen DINT wert zu loggen.

Hierzu verwende ich ausschließlich die manuelle Auslösung TRIG_M um Zykluszeiten zu loggen.

Leider Gottes wird keine Datei angelegt, ich habe bereits unterschiedliche Pfade genutzt, oder eben auch keinen Pfad, damit die Datei direkt auf dem Controller gespeichert wird, alles erfolglos.

Eine XML-Datei kann ich zwar schreiben und diese wird auch gespeichert, enthält aber wohl Fehler, da ich sie nicht über excel 2010 einlesen kann.

Hier ein Ausschnitt aus meinem Code:

FUNCTION_BLOCK CYCLE_LOG
VAR
xError_Cycle_Time_Too_Long: BOOL;
xLog_Cycle_Time: BOOL;
xAktor: BOOL;
rCycle_Time_REAL: REAL;
rCycle_Time_Last_Cycle: REAL;
Instanz1_F_TRIG: F_TRIG;
Instanz1_R_TRIG: R_TRIG;
Instanz1_TON: TON;
Instanz1_DLOG_DT: DLOG_DT;
Instanz1_DLOG_REAL: DLOG_REAL;
Instanz1_DLOG_DINT: DLOG_DINT;
Instanz1_DLOG_STORE_FILE_XML: DLOG_STORE_FILE_XML;
Instanz1_DLOG_STORE_FILE_CSV: DLOG_STORE_FILE_CSV;
X: DLOG_DATA;
END_VAR
VAR_INPUT
INPUT_DOOR_CLOSED: BOOL;
CYCLE_COUNT: DINT;
FILENAME_XML: STRING;
FILENAME_CSV: STRING;
END_VAR


(* Aufzeichnen aller Zykluszeiten von Beginn an. Zykluszeiten in REAL-Sekunden z.B. 15,324s *)

(*Deklarierung Öffnungs- und Schließimpuls*)

Instanz1_F_TRIG(CLK:=INPUT_DOOR_CLOSED); (*Tür öffnet mit fallender Flanke von "TÜR geschlossen"*)
Instanz1_R_TRIG(CLK:=INPUT_DOOR_CLOSED); (*Tür schließt mit steigender Flanke von "TÜR geschlossen"*)

(*Zählen der Zyklusdauer = Zeit zwischen F_TRIG und R_TRIG*)

IF Instanz1_F_TRIG.Q THEN
xAktor:= TRUE;
ELSIF Instanz1_R_TRIG.Q THEN
rCycle_Time_REAL:= INT_TO_REAL(TIME_TO_INT(Instanz1_TON.ET))/1000;
xAktor:= FALSE;
END_IF;

Instanz1_TON(IN:= xAktor, PT:= T#15s, Q=> xError_Cycle_Time_Too_Long);

(*Zykluszeit in Variable Schreiben bei Zyklusende und freigeben der Aufzeichnung eines Wertes*)

IF Instanz1_R_TRIG.Q AND rCycle_Time_REAL > 0 THEN

rCycle_Time_Last_Cycle := rCycle_Time_REAL;
xLog_Cycle_Time := TRUE;
ELSE
xLog_Cycle_Time := FALSE;
END_IF;





(*Aufzeichnen des letzten Zyklus' in einer XML-Datei*)

Instanz1_DLOG_DINT(
VALUE:= CYCLE_COUNT,
COLUMN:= 'Zyklusnummer',
X:= X);

Instanz1_DLOG_DT(
FMT:= ,
COLUMN:= 'Zeitstempel',
X:= X);

Instanz1_DLOG_REAL(
VALUE:= rCycle_Time_Last_Cycle,
N:= 3,
D:= '.',
COLUMN:= 'Zykluszeit',
X:= X);
(*
Instanz1_DLOG_STORE_FILE_XML(
ENABLE:= TRUE,
TRIG_M:= Instanz1_R_TRIG.Q,
TRIG_T:= ,
FILENAME:= FILENAME_XML,
DTI:= SysRtcGetTime(TRUE),
X:= X);
*)
Instanz1_DLOG_STORE_FILE_CSV(
ENABLE:= TRUE,
TRIG_M:= Instanz1_R_TRIG.Q,
TRIG_T:= ,
FILENAME:= FILENAME_CSV,
DTI:= SysRtcGetTime(TRUE),
SEP:= 59,
X:= X);


Im PLC_PRG wird der Baustein 3-mal Instanziert und entsprechend unterschiedliche Dateinamen daran deklariert.
Für XML funktioniert es wie gesagt, zumindest soweit, dass Dateien geschrieben werden, auch mit den korrekten Daten, nur kann ich diese nicht einlesen, daher will ich es mit CSV Dateien versuchen, diese werden aber nicht geschrieben.

Vieleicht kann mir ja jemand weiterhelfen, ich habe nach 4 Stunden Ursachenforschung wirklich keine Lust mehr....

Grüße,
Florian
____________________________________________________

peewit

Hi
Du kannst immer nur einen flog_store Baustein nutzen und nicht zwei gleichzeitig.
Entferne den XML und der CSV wird funktionieren

KingHelmer

Hi Peewit,

ich habe den XML-FB hier im Programm ausgeklammert/auskommentiert.
Hatte testweise auch schon den Baustein komplett rausgenommen.

Kann es vieleicht damit zu tun haben, dass ich den ganzen FB, so wie ich ihn euch hier zeige, 3 mal instanziert habe im Programm?

Grüße,
Flo

KingHelmer

Hallo und guten Morgen,

habe nochmal ein Test-Programm gemacht.
Man kann diese FBs wohl überhaupt nicht instanzieren, zumindest konnte ich es nicht.

Es funktioniert dann aber denke ich soweit.
Muss noch ein wenig testen, aber weiß wohl nun woran es lag.

Danke und Grüße,
Florian

KingHelmer

Ich nehme es zurück, habe keine Ahnung wieso der Baustein keine CSV auf dem Controller erzeugt.

Im testprogramm hat es funktioniert.
Habe nun gerade nichts anders gemacht, als die Werte, die aufgezeichnet werden sollen, anders zu übergeben.

Es wird kein Fehler ausgegeben, die Werte kommen alle an, alles super toll.
Aber keine CSV auf dem Controller......

Ich werde bald wahnsinnig.....

Kann es in irgendeiner Form an dem Controller selbst liegen? das Testprogramm lief auf einem anderen Controller der aber gleiche Eigenschaften hat.



KingHelmer

So,

habe den Baustein nun nur einmal aufgerufen, keine weiteren Instanzen, habe ein manuelles Triggern über einen externen taster. Funktioniert immernoch nichts. CSV wird nicht geschrieben.

Beobachte ich den STORE Baustein, so steht bei "tx" und "last_tx" praktisch die Zeit nach dem EInschalten. Ebenso füllt sich der "Buffer". Dennoch sind beide Error-Codes (T und C) beide 0, also kein Fehler.

Hier mal kurz nur der Baustein selbst angehängt.
ACHTUNG: Den Pfad habe ich nur testweise geändert. Normalerweise habe ich hier nur 'DOORS.csv' stehen, funktionierte aber auch nicht. Im Testprogramm funktionierte es.

Zur Erinnnerung:
- WAGO 750-881
- Codesys 2.3.9.42
- Network.lib 1.21

Habe jetzt dann keine Lust mehr nach 6 Stunden Fehlersuchen...



[gelöscht durch Administrator]

KingHelmer

So noch etwas,

tausche ich den DLOG_STORE_FILE_CSV DIREKT 1:1 mit dem DLOG_STORE_FILE_XML baustein, so wird eine XML geschrieben.
Also behaupte ich, dass es nicht am Programm liegen kann.

Eigentlich würde mir ja auch eine XML reichen, diese kann ich im Excel aber nicht öffnen, es werden Fehler ausgegeben....

Es ist zum heulen...

peewit

Die Aufruf Reihenfolge der Bausteine ist auch sehr wichtig
Das ist die am Baustein rechts oben angezeigte Zahl
Automatisch neu anordnen ausführen über Menü

KingHelmer

Hallo,

ich habe es nun vollkommen aufgegeben, und arbeite nun mit den XML Daten.
Das ergibt ein weiteres Problem und zwar, dass ich es nicht schaffe, die Dateien auf einem Netzlaufwerk abzulegen.

Die Laufwerke sind im selben Netzwerk wie die SPS und der Zugriff dazu ist uneingeschränkt. Dennoch schafft die SPS es nicht, eine Datei zu schreiben.
Zurück kommt der Fehler ERROR_C=1, ERROR_T=1 im Baustein DLOG_STORE_FILE_XML

Als Dateinamen hab ich einmal versucht den Server-namen (//server-file01) oder die IP (//172.19.30.106) anzugeben.
Beides kein Erfolg....

Nach außen kann ich nichts speichern, hier ist der FTP Port gesperrt durch unsere IP....

peewit

hi

aufgrund welcher annahme sollte ein zugriff auf ein netzlaufwerk funktionieren

selbst wenn es funktionieren würde dann gibt es wahrscheinlich grosse probleme mit deiner sps da die datei zugriffs bausteine synchron arbeiten also blockierend, und der zugriff über netz ist immer langsam und solange schläft deine sps.

aber ich kann mir nicht vorstellen das das auf sps zugriffsebene funktioniert.



KingHelmer

Habe jetzt die "Standard" libs benutzt, um mir eine csv zu schreiben.
Das funktioniert auch wie gewollt.

Das Speicherplatz-Problem auf dem Controller habe ich weniger durch die csv, als durch die xml.

Daher funktioniert es jetzt so, wie es sein soll.