Temperaturerfassung

S_Liner

Level-2
Beiträge
438
Reaktionspunkte
16
Hallo zusammen, ich möchte Stündlich in einem Raum die Temperatur erfassen und diese dann abspeichern. Insgesamt vielleicht über einen Monat.

Mit meinem Wissen würde ich es wie folgt machen.

Mittels Taktmerkerbyte (1Hz) die Sekunden zählen, bis 3600 Sek, denn 3600 = 1 Std.
Nach einer Stunder lade ich meinen Wert vom Temperaturfühler und lade es in ein Word.

Mit welcher Strategie würdet ihr das programmieren bzw. wie würdet ihr vorgehen? Ich würde jeden Tag einzeln schreiben, aber das wäre natürlich mega aufwändig.

Beste Grüße
 
Ich würde die Uhrzeit der Steuerung zyklisch auslesen und den Temperaturwert abspeichern, wenn sich die Stunde ändert. Den Temperaturwert würde ich zusammen mit einem Zeitstempel in ein Array Speichern und dann ggf. in eine CSV Datei schreiben (wenn das gefordert/gewollt ist)
 
Hallo und vielen Dank.


und dann ggf. in eine CSV Datei schreiben
Weißt du wo ich dazu mehr erfahren kann? In Zukunft wird diese Thema mehr auf mich zukommen.


So wie im Bild würde ich es jetzt für jeden Tag schreiben.

1.PNG

Aber ich habe das Gefühl das das so keine sonderlich gute Lösung sein wird.

Beste Grüße
 
Zuletzt bearbeitet:
und dann ggf. in eine CSV Datei schreiben
Weißt du wo ich dazu mehr erfahren kann?
Du könntest die Forumssuche mit dem Suchwort "csv" benutzen :cool:

Wenn Du hier Antworten haben willst, dann müsstest Du uns mitteilen was für eine SPS Du hast und womit Du die programmierst, und was für HMI oder PC noch mit der SPS vernetzt sind, weil manche SPS können das von sich aus und manche nicht.

Harald
 
Hallo PN/DP,

ich nutze eine 315-2DP (6ES7 315-2AH14-0AB0 V3.3 und ein Simatic HMI TP1200 (6AV2 124-0MC01-0AX0 (V15.0)


Für die SPS nutze ich den Simaticmanger V5.6
und für das HMI TIA V15.


Gruß
 
Zuletzt bearbeitet:
Hallo zusammen, ich möchte Stündlich in einem Raum die Temperatur erfassen und diese dann abspeichern. Insgesamt vielleicht über einen Monat.

Mit meinem Wissen würde ich es wie folgt machen.

Mittels Taktmerkerbyte (1Hz) die Sekunden zählen, bis 3600 Sek, denn 3600 = 1 Std.
Nach einer Stunder lade ich meinen Wert vom Temperaturfühler und lade es in ein Word.

Mit welcher Strategie würdet ihr das programmieren bzw. wie würdet ihr vorgehen? Ich würde jeden Tag einzeln schreiben, aber das wäre natürlich mega aufwändig.

Beste Grüße

Je nachdem welche Änderungsgeschwindigkeiten in der Temperatur ich erwarte unterschiedlich, aber grob:

3 Werte mitschreiben
Wert 1: Maximaler Wert in dieser Stunde
Wert 2: Mittelwert über Zeitraum vergangener Stunde
Wert 3: Minimaler Wert in dieser Stunde
Alle drei Werte werden dann nach 60 Minuten in einen separaten DB gesichert, Werte 1 und 3 werden gesetzt auf den aktuellen Messwert.

Wenn die Tagestemperatur ermittelt werden soll, dann eben nicht 60 Minuten sondern einen ganzen Tag lang protokollieren, wobei ich den Mittelwert stündlich berechnen würde und dann daraus nochmal einen Mittelwert für die 24 Stunden von 0 bis 23:59 Uhr, sodaß der Tagesmittelwert immer zum Tageswechsel stattfindet. Eine Anpassung bezüglich Zeitverstellung Sommer/Winter muss natürlcih bedacht werden.

Unsere Kunden wollen oftmals dieses Konzept haben wenn wir über einen längeren Zeitraum die Werte speichern. Also Min, Max, Mittel.
 
Die CPU 315-2DP kann keine csv-Dateien erstellen und irgendwo speichern. Die braucht einen externen Dienst, dem sie die Daten aktiv oder passiv übergeben kann.
Das TP1200 kann csv-Dateien erstellen, wenn auch etwas problematisch. Mein Standard-Tipp:
verwende mal die Forumssuche mit dem Suchbegriff "GetDataRecordTagsFromPLC". Da findest Du viele Codebeispiele und vor allem Hinweise zu den Problemen die da noch auf Dich zukommen, insbesondere das Problem mit der unsicheren Aktualisierung von Variablenwerten (erfordert Einlesen aus der PLC ins HMI mit Handshake, als Rezeptur).

Am einfachsten: Du projektierst im TP1200 ein Variablenarchiv für die Temperaturvariable(n). Dann liest das TP1200 im gewünschten/projektierten Intervall den Temperaturwert und schreibt ihn in ein csv-Archiv. Das TP1200 und die WinCC-Runtime darauf muß dann natürlich den ganzen Monat laufen und mit der CPU online sein.

PS: Du kannst auch in der SPS den Temperaturwert vorverarbeiten (wie von escride1 beschrieben) und dann 3 Variablen ins Archiv schreiben lassen.

Harald
 
Zuletzt bearbeitet:
Vielen Dank für die Antworten..

Wenn die Tagestemperatur ermittelt werden soll, dann eben nicht 60 Minuten sondern einen ganzen Tag lang protokollieren, wobei ich den Mittelwert stündlich berechnen würde und dann daraus nochmal einen Mittelwert für die 24 Stunden von 0 bis 23:59 Uhr, sodaß der Tagesmittelwert immer zum Tageswechsel stattfindet. Eine Anpassung bezüglich Zeitverstellung Sommer/Winter muss natürlcih bedacht werden.

Ich verstehe nicht wie ich das realisieren soll? Also ich meine, soll ich das dann 31 mal, quasi für jeden Tag einzeln schreiben?

Kann ich da nicht irgendwie eine Schleife programmieren und die Daten fortlaufend in den DB schreiben? oder geht das so nicht?

Gruß
 
Kann ich da nicht irgendwie eine Schleife programmieren und die Daten fortlaufend in den DB schreiben?
Willst Du Dein SPS-Programm einen Monat lang in einer Schleife "gefangen" halten? ;) Die SPS toleriert das nur sehr kurze Zeit, z.B. höchstens 150 ms lang.
Eine Schleife für die Aufzeichnung geht gar nicht.

Harald
 
Du überwachst Datum/Uhrzeit der SPS
Tageswechsel kann man erkennen
Monatswechsel kann man erkennen

Um Daten zu verkleinern wird aus vorangeganger Stunde/Tag der Mittelwert gebildet und im Folgetag/Monat mit eingebunden.
 
Ähm ja , wenn ein Kunde von euch das jeden Tag haben will, wie schreibt ihr die Daten in den DB. Du schreibst doch jetzt nicht 365 Wörter in den DB vor oder?

Du überwachst Datum/Uhrzeit der SPS
Tageswechsel kann man erkennen
Monatswechsel kann man erkennen

Um Daten zu verkleinern wird aus vorangeganger Stunde/Tag der Mittelwert gebildet und im Folgetag/Monat mit eingebunden.
Sorry, das versteh ich nicht.

Gruß
 
Code:
FUNCTION_BLOCK "Mittelwertbildung"
TITLE = Mittelwertbildung
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : 'zensiert'
VERSION : 0.1
   VAR_INPUT 
      Analogwert : Real;
   END_VAR


   VAR_OUTPUT 
      Analogwert_gemittelt : Real;
   END_VAR


   VAR 
      "Wertspeicherung Register" : Array[0..60] of Real;
      Schleife : Int;
      Schleifez : Int;
      P_Trig_Clock : Bool;
      P_Trig_old : Bool;
      Zwischenwert : Real;
      Wertezahl : Real;
   END_VAR




BEGIN
	//
	// Es soll ein Mittelwert des Analogeingangs gebildet werden.
	// 
	// Hierfür wird permanent ein Schieberegister genutzt und immer der aktuelle Wert hinzugefügt.
	
	IF "Clock_1Hz" AND NOT #"P_Trig_old" THEN // positive Flanke
	    FOR #Schleife := 1 TO 59 DO
	        #"Wertspeicherung Register"[#Schleife - 1] := #"Wertspeicherung Register"[#Schleife];
	    END_FOR;
	    #Zwischenwert := 0;
	    #Wertezahl := 0.0;
	    #"Wertspeicherung Register"[59] := #Analogwert;
	    FOR #Schleifez := 1 TO 59 DO
	        #Zwischenwert := #Zwischenwert + #"Wertspeicherung Register"[#Schleifez];
	        #Wertezahl := #Wertezahl + 1.0;
	    END_FOR;
	    #P_Trig_Clock := true;
	    #Analogwert_gemittelt := #Zwischenwert / #Wertezahl;
	END_IF;
	#"P_Trig_old" := "Clock_1Hz";
END_FUNCTION_BLOCK

Ganz grob gesehen wird dieser Baustein den Mittelwert der vergangenen 60 Sekunden bilden.
Sein Ergebnis wird mit dem gleichen FB, jedoch minütlich geschrieben.
Dessen Ergebnis wird in dem gleichen FB, jedoch verändert zu 24h geschrieben.
Dessen Ergenis wird in dem gleichen FB, jedoch verändert zu 365 Tage geschrieben.

Resultat: Mittelwert Minute, Stunde, Tag, Jahr. Wenn ich mag - noch mehr.
Die Zeitpunkte der Aktivierung müssen natürlich angepasst werden.
Die Min-Max Werte können anderweitig mitgeschrieben werden.

So in etwa.
Den gesamten zusammenhängenden Code darf ich leider nicht veröffentlichen.
Das in dem geposteten FB die Clock nach aussen geführt werden sollte, ebenso wie das Array, sollte klar sein, da es sonst zu Bereichsverletzungen kommt. Also anpassbar durch Eingangsvariablen.
 
Also erstmal vielen Dank für deine Mühe, aber für SCL bin ich noch nicht bereit.

Ganz grob gesehen wird dieser Baustein den Mittelwert der vergangenen 60 Sekunden bilden.
Sein Ergebnis wird mit dem gleichen FB, jedoch minütlich geschrieben.
Dessen Ergebnis wird in dem gleichen FB, jedoch verändert zu 24h geschrieben.
Dessen Ergenis wird in dem gleichen FB, jedoch verändert zu 365 Tage geschrieben.

Resultat: Mittelwert Minute, Stunde, Tag, Jahr. Wenn ich mag - noch mehr.
Die Zeitpunkte der Aktivierung müssen natürlich angepasst werden.
Die Min-Max Werte können anderweitig mitgeschrieben werden.

Auch hier weiß ich nicht so wirklich was du mir sagen willst. Liegt eventuell auch daran das ich mit dem Baustein nichts anfangen kann, sorry...

Ich formuliere meine Frage mal um.

Jede Stunde hat 3 Werte, das am Tag sind 24x3 Werte. Ihr schreibt doch keinen DB mit beispielsweise 365 Tage wo jeder Tag 3 Werte hat. Das wäre ja ein riesen DB.
Mich interessiert wie man solch Datenmengen handelt. Warum läuft das bei euch unendlich? Wie speichert Ihr die Werte?

Gruß
 
Ach so riesig ist das gar nicht: 365 * 3 * 4 Byte = 4380 Byte. Das kann die SPS locker im Arbeitsspeicher speichern. Heutzutage steuern SPS Prozesse samt Barcode- und Daten-Verwaltung, wo ein einzelnes Werkstück schon so viel Daten produziert...
Allerdings nimmt man den Arbeitsspeicher einer SPS nicht zur Langzeitspeicherung von Daten, weil das viel zu unsicher ist, ob da nicht jemand dran rumspielt. Um Daten für längere Zeit zu speichern archiviert man sie auf einen sicheren Datenträger. siehe dazu auch mal den Beitrag #7

Harald
 
PS: Deine CPU 315-2DP kann Daten ziemlich Langzeit-sicher auf die Memorycard der CPU speichern (z.B. 1x täglich), siehe SFC84 "WRIT_DBL". Direkt von der Memorycard in der CPU kann aber kein externes Programm die Daten lesen, dafür müsste die CPU mithelfen und mit SFC83 "READ_DBL" die Daten zurück in den Arbeitsspeicher holen. (Oder man macht Urlöschen oder entnimmt die Memorycard aus der CPU, was aber mit einem STOP der CPU verbunden ist)

Harald
 
Ok, vielen dank PN/DP... Dann werde ich mir die Möglichleit aus Beitrag 7 und die von eben mal genauer anschauen und testen.
Gruß
 
Zurück
Oben