Codesys - Einen Text mit Erstellen

Pepper

Level-1
Beiträge
24
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Community,
ich habe mal wieder ein Problem wo ich nicht weiterkomme und ihr mir bestimmt wieder helfen könnt.

Da ich keine Experte auf dem Gebiet "SPS" bin sondern eher hobbymäßig rumspiele, würde ich euch bitten eure Antworten so zu formulieren, dass ein leihe (wie ich) sie verstehen kann.

Zu meinem Problem:

Ich habe ein 750-841 mit dem ich Messdaten sammel und per Email verschicken möchte.

Mein Problem ist das Abspeichern der Daten. Die Daten sollten alle 5 min abgespeichert werden (Ich habe 10 Messpunkte) und mit einem Zeitstempel versehen werden. Also quasi wie eine Tabelle aus , Datum/Uhrzeit, Text und Messwert.

z.B. : 10:36 - 05.11.09 Temperaturfühler1: 23.45 °C

Die Messwerte sollen dann alle untereinander geschrieben als Email versendet werden.

Die Messwerte sollten nicht lokal in eine txt Datei gespeichert werden, sondern nur innerhalb der Codesys.



Grüße Pepper
 
Hi Pepper,

unter Benutzung der Oscat könnte das Bilden der Texte so aussehen:
Code:
VAR
    loop: INT;
    dtAktDatumUhrzeit: SDT;
    arrMesswerte: ARRAY[1..10] OF REAL;
    arrMesswerteKlartext: ARRAY[1..10] OF STRING;
END_VAR
FOR loop:= 1 TO 10 DO
    (* Textzeile bilden: Zeitstempel Messstelle Wert Einheit CRLF, Vorgabe: 10:36 - 05.11.09 Temperaturfühler1: 23.45 °C *)
    arrMesswerteKlartext[loop]:= DWORD_TO_STRF(dtAktDatumUhrzeit.HOUR, 2);
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], ':');
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], DWORD_TO_STRF(dtAktDatumUhrzeit.MINUTE, 2));
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], ' - ');
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], DWORD_TO_STRF(dtAktDatumUhrzeit.DAY, 2));
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], '.');
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], DWORD_TO_STRF(dtAktDatumUhrzeit.MONTH, 2));
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], '.');
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], DWORD_TO_STRF((dtAktDatumUhrzeit.YEAR MOD 100), 2));
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], ' ');
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], 'Temperaturfühler');
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], INT_TO_STRING(loop));
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], ': ');
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], REAL_TO_STRF(arrMesswerte[loop], 1));
    arrMesswerteKlartext[loop]:= CONCAT(arrMesswerteKlartext[loop], ' °C$N');
END_FOR
Ich kann dir leider nicht sagen, wie man auf der 750-841 eine Email versendet.

Gruß,
witkatz
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Witkatz,
erstmal vielen Dank für deine Mühe. Deine Lösung hat mich schon mal ein ganzes Stück weitergebracht. Leider wird bei mir der Zeitstempel nicht richtig angezeigt. Ich habe dazu mal ein Bild angehängt. Alles was ich vom Zeitstempel bekomme ist: "009". Leider komme ich nicht drauf wo das Problem liegt. Ich benutze die neuste Version von Oscat.

Mein Emailproblem habe ich mittlerweile gelöst bekommen mit der WagolibMail_02.

Grüß Pepper
 

Anhänge

  • Codesys_logging.JPG
    Codesys_logging.JPG
    231,9 KB · Aufrufe: 70
hm, da war ich ein bisschen voreilig mit meiner Antwort :ROFLMAO:. Wenn ich das Programm direkt auf der Steuerung laufen lasse funktioniert es einwandfrei. Nur im Simulationsmodus bekomme ich den beschriebenen Fehler.

Gruß Pepper
 
So, ich habe nochmal ein paar Tests gemacht und bin zu der Erkenntnis gekommen, das ich meinen Text-String am besten in ein "Array of Byte" (ASCII) schreiben sollte um diesen dann zu in einer txt zu verschicken. Dann hätte ich keine Probleme mehr mit der Formatierung.
Hat jemand ne Idee oder eine Lösung wie ich sowas anstellen könnte.

Ich hatte ja oben schon mal meinen Code gepostet. Dort erstelle ich einen String. Kann man diesen eventuell umschreiben, sodass ich meinen Text direkt in ein Bytearray scheiben kann? Oder gibt es irgendwelche interessanten Convert-funktionen? (Hab bisher leider keine gefunden)

Interessant wär auch eine Funktion, die meinen kompletten String in ein Byte Array schreibt.

Ich bin gespannt auf eure Vorschläge
 
Danke für den Tip witkatz,
Das bringt mich schon wieder ein ganzes Stück weiter an mein Ziel.

Da ich gerade erst angefangen habe in ST zu programmieren, bin ich leider noch nicht ganz so fit.

Ich kann jetzt also mein String in ein ASCII-Byte umwandeln. Aber wie sage ich dem Byte-Array ab wann er den String dahinter setzen soll und nicht ersetzen?

Ich habe jetzt meine Messdaten nicht mehr in in "ARRAY OF STRING" geschrieben, sondern in ein "STRING". Dieser String bekommt jetzt alle t#n ms einen neuen Text reingeschrieben. Ich möchte, das die ASCII-Werte bei veränderung des "Text-Strings" hinten (am Byte-Array) angefügt werden. So wie bei CONCAT nur eben für "Byte-Arrays".
 
Zurück
Oben