Logging von Meldungen oder Variablen in Datei

Für Themen rund um logi.RTS und logi.CAD 3
Kai
Posts: 10
Joined: 01 Apr 2018, 17:48

Logging von Meldungen oder Variablen in Datei

Post by Kai »

Hallo,

weiß zufällig jemand wie man Meldungen und ggf. Variablenwerte in eine Datei loggen kann?
Vielen Dank vorab.

Grüße
Kai
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: Logging von Meldungen oder Variablen in Datei

Post by volker »

Wer gibt denn die Meldungen aus?
Wenn Du z.B. ein Programm laufen lässt, welches OTTO heißt und die Meldungen ausgibt, dann rufst Du das Programm einfach so aus:
OTTO > /home/pi/data.log
um die Ausgaben in die Datei /home/pi/data.log umzuleiten.
Unser RevPi Motto: Don't just claim it - make it!
Kai
Posts: 10
Joined: 01 Apr 2018, 17:48

Re: Logging von Meldungen oder Variablen in Datei

Post by Kai »

Hallo Volker,

ich habe Logi.RTS laufen und möchte daraus einige Variablen und Statusmeldungen in eine Textdatei schreiben. Also aus dem Logi.CAD heraus.

Viele Grüße
Kai
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: Logging von Meldungen oder Variablen in Datei

Post by volker »

Okay, dann bitte warten, bis sich der logi.cad support meldet. da gibt es sicher eine Einstellung, um einen loglevel einzustellen und dann in var/log den log abzugreifen...
Unser RevPi Motto: Don't just claim it - make it!
User avatar
Walter
Official 3rd Party Support logi.cals
Posts: 77
Joined: 15 Dec 2016, 12:56

Re: Logging von Meldungen oder Variablen in Datei

Post by Walter »

Hallo,

wir suchen hier gerade nach geeigneten Möglichkeiten.
Ich gehe davon aus, dass wir Anfang nächste Woche eine geeignete Lösung dafür präsentieren können.

freundliche Grüße
Walter
Kai
Posts: 10
Joined: 01 Apr 2018, 17:48

Re: Logging von Meldungen oder Variablen in Datei

Post by Kai »

Hallo Walter,

ich wollte mich nochmal in Erinnerung bringen, da ich hier dringend eine Lösung bräuchte.

Bisher habe ich noch folgendes herausgefunden:

Wenn man eine Datei mit System_open öffnet und mit System_write reinschreibt, enthält diese immer genau das letzte geschriebene Zeichen (egal wieviele man bei dem einen Aufruf geschrieben hat). Auch dann, wenn die Datei im APPEND Modus geöffnet wurde. Offensichtlich wird die Datei immer wieder zurückgesetzt. Eventuell ist in System_write ein Bug.

Als Workaround kann man alle zu loggenden Variablenwerte mit einem VirtualAdapter ins RevPi Prozessabbild schreiben. Dann ist ein Zugriff daraus mit einem CRON getriggerten Python Skript von der Kommandozeile aus möglich um die Einträge in der Logdatei zu erzeugen.

Ich hoffe auf eine baldige elegantere Lösung
Vielen Dank vorab.
Kai
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: Logging von Meldungen oder Variablen in Datei

Post by Ingo »

Hallo Kai.
Ich weiss ja nicht was du für Variablenwerte schreiben und wieder lesen willst. Aber sollte es sein das du nur bestimmte sachen Sichern willst und beim fall eines aussfalls wieder lesen möchtest?
Sollte es so sein dann benutze doch die Load_Save_retaindata.

Code: Select all

FUNCTION_BLOCK Load_Save_Retain_Data { vNameAlignment := "top"; width := 400; bgColor := "lightblue"; }

  VAR_INPUT
  	WRITE : BOOL :=false; // Zum Schreiben in die Persisten.csv / USV Anschluss oder anderen Schaltkontakt
  	READ  : BOOL :=false; 
  END_VAR
 
   VAR
    init          : BOOL;
    term          : BOOL;
    saveRetainRC  : UDINT;
    saveRetainENO : BOOL;
    nrNonLoaded   : INT;
    loadRetainRC  : UDINT;
    loadRetainENO : BOOL;
  END_VAR
  
  	RTSCycleInfo   ( Init => init, Term => term ); // RTSLoader abfragen ob start und ende
  	LoadRetainData ( EN := init, fileName := 'Persistent.csv', nrNonLoaded => nrNonLoaded, RC => loadRetainRC, ENO => loadRetainENO );
  	SaveRetainData ( EN := term, fileName := 'Persistent.csv', RC => saveRetainRC, ENO => saveRetainENO );
  	

    if (READ) THEN // Wenn gelesen werden soll !!
  		LoadRetainData ( EN := true, fileName := 'Persistent.csv', nrNonLoaded => nrNonLoaded, RC => loadRetainRC, ENO => loadRetainENO );
  	END_IF;
   	if (WRITE) THEN // Wenn geschrieben werden soll dann schreiben !!
  		SaveRetainData ( EN := true, fileName := 'Persistent.csv', RC => saveRetainRC, ENO => saveRetainENO );
  	END_IF;

END_FUNCTION_BLOCK
Sollte dies Passen wie du es haben willst kannst du das gerne verwenden.
die Variablen die du sichern möchtest müssen dann in einer extra variablenliste stehen.

Code: Select all

GLOBALS Retain_data
VAR_GLOBAL RETAIN
	rd_Variable   	: STRING[100];  (z.B.)
END_VAR

END_GLOBALS
User avatar
Walter
Official 3rd Party Support logi.cals
Posts: 77
Joined: 15 Dec 2016, 12:56

Re: Logging von Meldungen oder Variablen in Datei

Post by Walter »

Hallo Kai,

haben Dir die Infos von Ingo weitergeholfen?
brauchst Du hier noch weitere Infos?

lg
Walter
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: Logging von Meldungen oder Variablen in Datei

Post by volker »

Hallo Walter,
bitte lies den Thread von Anfang an. Kai möchte Logeinträge in eine Datei schreiben und nicht Variablen retain speichern. Was Ingo da vorschlägt hat mit dem was Kai gefragt hat wenig zu tun. Kannst Du bitte Auskunft geben zu dieser Fragestellung:
Wenn man eine Datei mit System_open öffnet und mit System_write reinschreibt, enthält diese immer genau das letzte geschriebene Zeichen (egal wieviele man bei dem einen Aufruf geschrieben hat). Auch dann, wenn die Datei im APPEND Modus geöffnet wurde. Offensichtlich wird die Datei immer wieder zurückgesetzt. Eventuell ist in System_write ein Bug.
Unser RevPi Motto: Don't just claim it - make it!
Kai
Posts: 10
Joined: 01 Apr 2018, 17:48

Re: Logging von Meldungen oder Variablen in Datei

Post by Kai »

Hallo Walter,

es geht mir bei meiner Frage nicht nur um das reine Abspeichern von Variablenwerten. Das kann man über da RevPi Prozessabbild erledigen. Es geht mir um ein Ablaufprotokoll. Eine Anforderung die aus dem Qualtiätsmanagement heraus entsteht. Die Anlage soll seltene Abläufe wie z.B. die Selbstreinigung oder besondere Zustände protokollieren. Das ganze soll in eine Textdatei gespeichert werden. Die Meldungen sollen dabei auch Variablenwerte enthalten können.

Beispiel für Protokolleinträge:
2018-06-04 23:13 Selbstreinigung gestartet. Füllstand = 80%.
2018-06-04 23:45 Reinigung beendet. Normalbetrieb gestartet. Füllstand = 5%.
2018-06-05 14:30 Sicherheitstür geöffnet.
Grüße
Kai
Post Reply