-> Hier kostenlos registrieren
Hallo,
ich schreibe in einer file einen alaogen Wert mit. Der Wert wird vor dem Schreiben in die csv datei mit Uhrzeit und Einheit in einem String gesetzt (concat). Am Ende des Strings wird ein Zeilenumbruch in Form von "$n" concatiert.
Alle paar Sekunden wir nun der String in die Datei hinzugefügt. Und da ein Zeilenumbruch drin steht, wird Zeile für Zeile geschrieben. Funktioniert auch alles soweit.
Nur manchmal passiert es, dass der Zeilenumbruch eines Strings nicht mit "übertragen" wird und zwei Zeilen somit in einer Zeile stehen. Es ist keine Regelmäßigkeit, sondern nur unregelmäßig. Habe mir die csv im Editor angeschaut, da fehlt wirklich ab und an der Zeilenumbruch. In Excel sieht man es noch deutlicher.
Ist vielleicht das Zeichen "$n" nicht richtig? Gibt es andere, die eingesetzt werden könnten?
Da das ganze ja recht gut funktioniert, glaube ich nicht, dass es am Code zum Schreiben in die Datei liegt, sondern eher am Bilden des Reinschreibstrings.
Hier der Code zum Erstellen des Strings:
FUNCTION_BLOCK A30_Aussentemp_in_String
VAR_INPUT
rAussentemp : REAL;
sEinheit : STRING;
uHour : UINT;
uMinute : UINT;
uSeconds : UINT;
END_VAR
VAR_OUTPUT
sStringausgabe : STRING;
END_VAR
VAR
sHour : STRING;
sMinute : STRING;
sSeconds : STRING;
END_VAR
(* Dieser FB generiert aus Variabel und Zeit einen fertigen String zum Schreiben in eine Datei: *)
(* "Stunde:Minute:Sekunde Einheit Temperatur" *)
sHour := CONCAT(UINT_TO_STRING(uHour),':'); (* Stunde zum String machen und dabei sofort ein Doppelpunkt als Trennzeichen dahintersetzen *)
sMinute := CONCAT(UINT_TO_STRING(uMinute),':'); (* Minute zum String machen und dabei sofort ein Doppelpunkt als Trennzeichen dahintersetzen *)
sSeconds := CONCAT(UINT_TO_STRING(uSeconds),';'); (* Sekunde zum String machen und dabei sofort ein Leerzeichen als Trennzeichen dahintersetzen *)
sEinheit := CONCAT(sEinheit,';'); (* Leerzeichen vor der Einheit einfügen *)
IF (uHour < 10 AND uHour >= 0) THEN (* wenn die Stunde nur einstellig ist, dann zweistellig machen *)
sHour := CONCAT('0',sHour);
END_IF;
IF (uMinute < 10 AND uMinute >= 0) THEN (* wenn die Minute nur einstellig ist, dann zweistellig machen *)
sMinute := CONCAT('0',sMinute);
END_IF;
IF (uSeconds < 10 AND uSeconds >= 0) THEN (* wenn die Sekunde nur einstellig ist, dann zweistellig machen *)
sSeconds := CONCAT('0',sSeconds);
END_IF;
sStringausgabe := CONCAT(sHour,sMinute); (* jetzt alles schön nacheinander reinschreiben *)
sStringausgabe := CONCAT(sStringausgabe,sSeconds);
sStringausgabe := CONCAT(sStringausgabe,sEinheit);
sStringausgabe := CONCAT(sStringausgabe,REAL_TO_STRING(rAussentemp));
sStringausgabe := CONCAT(sStringausgabe,'$n'); (* zum Schluss noch ein Zeilenumbruch einfügen. *)
Hat jemand Grundideen, wo ich suchen sollte?
Ampel03
ich schreibe in einer file einen alaogen Wert mit. Der Wert wird vor dem Schreiben in die csv datei mit Uhrzeit und Einheit in einem String gesetzt (concat). Am Ende des Strings wird ein Zeilenumbruch in Form von "$n" concatiert.
Alle paar Sekunden wir nun der String in die Datei hinzugefügt. Und da ein Zeilenumbruch drin steht, wird Zeile für Zeile geschrieben. Funktioniert auch alles soweit.
Nur manchmal passiert es, dass der Zeilenumbruch eines Strings nicht mit "übertragen" wird und zwei Zeilen somit in einer Zeile stehen. Es ist keine Regelmäßigkeit, sondern nur unregelmäßig. Habe mir die csv im Editor angeschaut, da fehlt wirklich ab und an der Zeilenumbruch. In Excel sieht man es noch deutlicher.
Ist vielleicht das Zeichen "$n" nicht richtig? Gibt es andere, die eingesetzt werden könnten?
Da das ganze ja recht gut funktioniert, glaube ich nicht, dass es am Code zum Schreiben in die Datei liegt, sondern eher am Bilden des Reinschreibstrings.
Hier der Code zum Erstellen des Strings:
FUNCTION_BLOCK A30_Aussentemp_in_String
VAR_INPUT
rAussentemp : REAL;
sEinheit : STRING;
uHour : UINT;
uMinute : UINT;
uSeconds : UINT;
END_VAR
VAR_OUTPUT
sStringausgabe : STRING;
END_VAR
VAR
sHour : STRING;
sMinute : STRING;
sSeconds : STRING;
END_VAR
(* Dieser FB generiert aus Variabel und Zeit einen fertigen String zum Schreiben in eine Datei: *)
(* "Stunde:Minute:Sekunde Einheit Temperatur" *)
sHour := CONCAT(UINT_TO_STRING(uHour),':'); (* Stunde zum String machen und dabei sofort ein Doppelpunkt als Trennzeichen dahintersetzen *)
sMinute := CONCAT(UINT_TO_STRING(uMinute),':'); (* Minute zum String machen und dabei sofort ein Doppelpunkt als Trennzeichen dahintersetzen *)
sSeconds := CONCAT(UINT_TO_STRING(uSeconds),';'); (* Sekunde zum String machen und dabei sofort ein Leerzeichen als Trennzeichen dahintersetzen *)
sEinheit := CONCAT(sEinheit,';'); (* Leerzeichen vor der Einheit einfügen *)
IF (uHour < 10 AND uHour >= 0) THEN (* wenn die Stunde nur einstellig ist, dann zweistellig machen *)
sHour := CONCAT('0',sHour);
END_IF;
IF (uMinute < 10 AND uMinute >= 0) THEN (* wenn die Minute nur einstellig ist, dann zweistellig machen *)
sMinute := CONCAT('0',sMinute);
END_IF;
IF (uSeconds < 10 AND uSeconds >= 0) THEN (* wenn die Sekunde nur einstellig ist, dann zweistellig machen *)
sSeconds := CONCAT('0',sSeconds);
END_IF;
sStringausgabe := CONCAT(sHour,sMinute); (* jetzt alles schön nacheinander reinschreiben *)
sStringausgabe := CONCAT(sStringausgabe,sSeconds);
sStringausgabe := CONCAT(sStringausgabe,sEinheit);
sStringausgabe := CONCAT(sStringausgabe,REAL_TO_STRING(rAussentemp));
sStringausgabe := CONCAT(sStringausgabe,'$n'); (* zum Schluss noch ein Zeilenumbruch einfügen. *)
Hat jemand Grundideen, wo ich suchen sollte?
Ampel03