Hi Zotos
Ich habe das Programm soweit fertig. Allerdings habe ich noch ein Problem welches ich ja schon versucht habe zu klären in meinem Programm aber es funktioniert nicht richtig.
Ich möchte an erster Stelle feststellen ob der Client Online ist. Das ganze versuche ich mit der xConnectionOk_client_1 Variable. Sollte der Client offline sein soll er es mir in die Datei schreiben. Jetzt ist es mittlerweile so das er es mir schreibt, aber auch schreibt er mir das das Thermometer nicht angeschlossen ist. Obwohl das ja noch nicht bekannt ist, weil der Client ja offline ist. Darüber kann ja nur eine genaue Auskunft erteielt werden in der Datei wenn der Client online ist.
Vielleicht kannst du dort mal drüber schauen wo mein Fehler ist. Ich selbst habe da das ganze Wochenende dran verbracht.
Hier die Variablen Deklaration:
PROGRAM Dateierzeugung
VAR
FileHandel : DWORD; (*Handel*)
FilePath : STRING := 'disk_mmc\'; (* Ich nutze die CoDeSysRTE und habe daher ein Dateisystem ala Windows *)
CurrentString : STRING; (*Temp String zum aufbauen der zu schreibenden Zeile*)
RetValWritten : DWORD; (*Rückgabewert der Schreibfunktion*)
Thermo_ort : STRING := 'SPS 1'; (*Inhalt Spalte Nr.3*)
Thermo_ok : STRING := 'Temperatur im grünen Bereich'; (*Inhalt Spalte Nr.4*)
Thermo_not : STRING := 'Thermometer nicht angeschlossen'; (*Inhalt Spalte Nr.4*)
Temp_ueber : STRING := 'Temperatur überschritten'; (*Inhalt Spalte Nr.4*)
Temp_unter : STRING := 'Temperatur unterschritten'; (*Inhalt Spalte Nr.4*)
Netzwerk_client_1_ok : STRING := 'Client 1 online'; (*Inhalt Spalte Nr.4*)
Netzwerk_client_1_not : STRING := 'Client 1 offline'; (*Inhalt Spalte Nr.4*)
MonatString : ARRAY[1..12] OF STRING(10) := 'Januar', 'Februar', 'Maerz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember';
Monat_alt: INT := 0;
Thermometer_angeschlossen: BOOL;
Temperatur_ueberschritten: BOOL;
Temperatur_unterschritten: BOOL;
DatenString : STRING; (*Temp String zum schreiben der Zeile*)
DatenString_old : STRING; (*Temp String zum schreiben der Zeile*)
xConnectionOk_client_1_old: BOOL;
END_VAR
Hier das Programm:
(*Hilfsvariablen Deklaration*)
Thermometer_angeschlossen:=eingang_client_1[4]; (*Die eingang_client_1[] sind global Variablen*)
Temperatur_ueberschritten:=eingang_client_1[2];
Temperatur_unterschritten:=eingang_client_1[1];
DatenString:='test'; (*Hier wird ein DatenString festgelegt zum Schreiben der Datei*)
IF Monat <> Monat_alt THEN (*Hier wird der Monat für den DateiNamen festgelegt*)
FilePath := '\disk_mmc\Fehlermeldedatei_';
FilePath := CONCAT(FilePath, MonatString[Monat]);
FilePath := CONCAT(FilePath, '_');
FilePath := CONCAT(FilePath, INT_TO_STRING(Jahr));
FilePath := CONCAT(FilePath, '.csv');
Monat_alt := Monat;
END_IF
(* Öffne die Datei um Daten anzufügen *)
FileHandel:= SysFileOpen(FilePath, 'a');
(* Erkennen ob es eine neue Datei ist *)
IF SysFileGetPos(FileHandel) = 0 THEN
(* Belibige Gesamtüberschrift *)
CurrentString:= 'Fehlermeldedatei';
CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
RetValWritten:= SysFileWrite(FileHandel, ADR(CurrentString), LEN(CurrentString));
(* Spaltenüberschrift *)
CurrentString:= 'Datum;Uhrzeit;Ort;Beschreibung';
CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
RetValWritten:= SysFileWrite(FileHandel, ADR(CurrentString), LEN(CurrentString));
END_IF
(* Datei schließen *)
SysFileClose(FileHandel);
(* --Zeile zusammenbauen-- *)
(* Spalte 1: DATUM *)
CurrentString:= CONCAT(INT_TO_STRING(Tag), '.');
CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Monat));
CurrentString:= CONCAT(CurrentString, '.');
CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Jahr));
CurrentString:= CONCAT(CurrentString, ';');
(* Spalte 2: UHRZEIT *)
CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Stunde));
CurrentString:= CONCAT(CurrentString, ':');
CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Minute));
CurrentString:= CONCAT(CurrentString, ':');
CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Sekunde));
CurrentString:= CONCAT(CurrentString, ';');
(* Spalte 3: NAME *)
CurrentString:= CONCAT(CurrentString, Thermo_ort);
CurrentString:= CONCAT(CurrentString, ';');
(* Spalte 4: MELDUNG *)
IF xConnectionOk_client_1 <> xConnectionOk_client_1_old THEN
(* Öffne die Datei um Daten anzufügen *)
FileHandel:= SysFileOpen(FilePath, 'a');
(* --Zeile zusammenbauen-- *)
(* Spalte 1: DATUM *)
CurrentString:= CONCAT(INT_TO_STRING(Tag), '.');
CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Monat));
CurrentString:= CONCAT(CurrentString, '.');
CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Jahr));
CurrentString:= CONCAT(CurrentString, ';');
(* Spalte 2: UHRZEIT *)
CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Stunde));
CurrentString:= CONCAT(CurrentString, ':');
CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Minute));
CurrentString:= CONCAT(CurrentString, ':');
CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Sekunde));
CurrentString:= CONCAT(CurrentString, ';');
(* Spalte 3: NAME *)
CurrentString:= CONCAT(CurrentString, Thermo_ort);
CurrentString:= CONCAT(CurrentString, ';');
(* Spalte 4: MELDUNG *)
IF xConnectionOk_client_1 = TRUE THEN (*Hier soll überprüft werden ob Client 1 online ist und in die Datei geschrieben werden*)
CurrentString:= CONCAT(CurrentString, Netzwerk_client_1_ok);
CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
END_IF
IF xConnectionOk_client_1 = FALSE THEN (*Hier wird festgestellt das Client 1 offline ist und in die Datei geschrieben*)
CurrentString:= CONCAT(CurrentString, Netzwerk_client_1_not);
CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
END_IF
(* Zeile in die Datei schreiben *)
RetValWritten:= SysFileWrite(FileHandel, ADR(CurrentString), LEN(CurrentString));
(* Datei schließen *)
SysFileClose(FileHandel);
END_IF
IF xConnectionOk_client_1 = xConnectionOk_client_1_old THEN
IF Temperatur_ueberschritten AND Thermometer_angeschlossen THEN
CurrentString:= CONCAT(CurrentString, Temp_ueber);
CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
DatenString:= CONCAT(DatenString, Temp_ueber);
END_IF
IF Temperatur_unterschritten AND Thermometer_angeschlossen THEN
CurrentString:= CONCAT(CurrentString, Temp_unter);
CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
DatenString:= CONCAT(DatenString, Temp_unter);
END_IF
IF Thermometer_angeschlossen AND NOT Temperatur_ueberschritten AND NOT Temperatur_unterschritten THEN
CurrentString:= CONCAT(CurrentString, Thermo_ok);
CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
DatenString:= CONCAT(DatenString, Thermo_ok);
END_IF
IF Thermometer_angeschlossen = FALSE THEN
CurrentString:= CONCAT(CurrentString, Thermo_not);
CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
DatenString:= CONCAT(DatenString, Thermo_not);
END_IF
(* Neue Daten ? *)
IF DatenString <> DatenString_old THEN
(* Öffne die Datei um Daten anzufügen *)
FileHandel:= SysFileOpen(FilePath, 'a');
(* Zeile in die Datei schreiben *)
RetValWritten:= SysFileWrite(FileHandel, ADR(CurrentString), LEN(CurrentString));
(* Datei schließen *)
SysFileClose(FileHandel);
END_IF
END_IF
(* Flankenauswertung *)
DatenString_old:=DatenString;
xConnectionOk_client_1_old:=xConnectionOk_client_1;
Auch läuft das FileHandle permanent. Ich habe das bisher so verstanden das es sich nur verändert wenn ein neuer Eintrag in der Datei erfolgt ist.
Also wie gesagt vielleicht findest den Fehler in meiner Schreibweise.
MFG Dennis