24. April 2019, 00:52:37
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

[offen] Unabhängig von Datenformat schreiben


normal_post Autor Thema: [offen] Unabhängig von Datenformat schreiben  (Gelesen 341 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

07. Februar 2019, 14:26:16
Gelesen 341 mal
Offline

yuminist


Moin,

ich stehe mal wieder auf dem Schlauch. Dieses mal aber scheinbar gewaltig.

Ich möchte mir eine (möglichst vielseitige) Routine schreiben, die stumpf einfach in eine Datei schreibt.
Der Haken daran: da ich sie hauptsächlich zur Fehlerprotokollierung einsetzen möchte, sollte sie nach Möglichkeit nicht an Datentypen hängen.
Also dachte ich mir, versuche ich es mit 'WriteAnyBin' ...

    PROC Write2File(msgdata data,string path,string filename,\string addText)
        VAR iodev logfile;
        VAR string date;
        VAR string time;
        VAR string txt:="";

        IF Present(addText) txt:=addText;
        date:=CDate();
        time:=CTime();
        Open path\File:=filename,logfile\Write;
        Write logfile,date+" "\NoNewLine;
        Write logfile,time+" "\NoNewLine;
        Write logfile,txt\NoNewline;
        WriteAnyBin logfile,data;
    ENDPROC

Mein Problem ist nun unschwer zu erkennen :) - WriteAnyBin kann alles mögliche in die Datei schreiben. Übergeben kann ich aber nur bestimmte Datentypen.
Nun möchte ich mir natürlich eine endlose Auflistung über switches und den dazugehörigen 'IF Present (xxx)' ersparen.

Ich hatte die Hoffnung, dass OR verknüpfungen (msgdata|num|errno data) funktionieren...tun sie nicht . . .

Kennt jemand eine Möglichkeit, oder muss ich mir tatsächlich die umständlichen Abfragen einbauen?
  • gefällt mir    Danke

Heute um 00:52:37
Antwort #1

Werbung

Gast

07. Februar 2019, 17:44:58
Antwort #1
Offline

Micky


Hallo,
wenn Du die Daten hinterher auch wieder Lesen können willst, solltest Du eine Textdatei und keine Binärdatei schreiben.  ;)

Zum Schreiben solltest Du an die Datei nur Strings übergeben, die Du bei der Übergabe an die Routine mit der Funktion "ValToStr" umwandeln kannst.

Das Problem hierbei ist lediglich die max. Stringlänge von 80 Zeichen, da ein Robtarget oder andere records mehr als 80 Zeichen lang sind.

D.h. in das Logfile sollten nur ausgewählte wichtige Daten geschrieben werden, da zum Einen das Schreiben die Abarbeitungszeit beinflusst und zum Anderen die Speicherkarte irgendwann voll ist.

Deswegen solltest Du auch unbedingt den verbleibenden Speicher vor dem Schreiben prüfen.

Mfg
Micky
  • gefällt mir    Danke
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

08. Februar 2019, 07:35:41
Antwort #2
Offline

yuminist


Hallo,

ja das ist ein sehr guter Einwand. Der o.g. Code war auch nur die erste Intention und noch nicht ausprogrammiert.
Die Idee dahinter war einfach, eine Routine zu haben welche ich für die ausgewählten Daten aufrufen, und die Daten direkt übergeben kann.

An die Binärdateigeschichte hatte ich gar nicht mehr gedacht. Da war der Kopf wohl schon ziemlich leer. Demnach werde ich sämtliche übergebenen Daten vorher natürlich in Strings wandeln und diese dann schreiben.

Im Grunde werden ja damit nur bestimmte Ereignisse "mitgeloggt" die ich dann an diese Routine übergeben möchte.

Danke für die Hinweise
  • gefällt mir    Danke


Teile per facebook Teile per linkedin Teile per pinterest Teile per reddit Teile per twitter
 

über das Roboterforum

Nutzungsbedingungen Impressum Datenschutzerklärung

Sponsoren des Roboterforums

ROBTEC GmbH