# Heat Meter funktioniert nicht wie erwartet

**URL:** <https://oscat.discourse.group/t/heat-meter-funktioniert-nicht-wie-erwartet/550>\
**Category:** Bestehende Module / Existing Modules\
**Created:** [21. Februar 2009 um 12:11 UTC](https://oscat.discourse.group/t/heat-meter-funktioniert-nicht-wie-erwartet/550 "2009-02-21T12:11:54Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![thommy01](https://avatars.discourse-cdn.com/v4/letter/t/91b2a8/32.png) [@thommy01](https://oscat.discourse.group/u/thommy01)\
**Post date:** [21. Februar 2009 um 12:11 UTC](https://oscat.discourse.group/t/heat-meter-funktioniert-nicht-wie-erwartet/550/1 "2009-02-21T12:11:54Z")

</div>

Hallo Alle zusammen,

habe für eine Heizungssteuerung mit Solaranlage den Baustein “Heat\_meter” zweimal verwendet und in beiden Fällen stimmt meines Erachtens das berechnete Ergebniss bzw. Funktion nicht.

Fall 1: Wärmemenge Berechnung für Zirkulationspumpe

Heat\_Meter Modus: Liter je Stunde ohne Durchflussgeber  
TF= 45Â°C, TR = 25Â°C, LPH 120, E = Pumpenansteuerung, “CP, Density und Content” = 0, Pulse Mode = False, Return  
Meter= False, AVG\_time = t#10s  
Ergebniss:  
Die Pumpe läuft für 360sek, die Angezeigte AVG und Gesamtmenge an Y stimmt  
Die Pumpe läuft nach einer Pause wieder an und hier springt nun der AVG Wert im ersten zyklus auf ein paar hundert kwh und Y springt um einen Wert sehr großen Wert nach oben.

Es sieht für mich so aus als würde der Baustein intern weiter rechnen und aufsummieren. Muss ich außer dem Pumpensignal nocht etwas anderes beschalten?

Fall 2:  
Wärmemenge Berechnung für Solaranlage  
Heat\_Meter Modus: 10 Liter je Impuls mit Durchflussgeber im Rücklauf  
TF= 61Â°C, TR = 51Â°C, LPH 10, E = Impulsgeber Kontakt, CP = 3.58, Density= 1.044, Content=0.453, Pulse Mode = True, Return Meter= true, AVG\_time = t#60s  
Ergebniss:  
Der Baustein berechnet nicht wenn Zählimpulse an “E” ankommen. Nach ändern des Parameters “Return Meter” auf “False” rechnet der Baustein je Impuls 228364.3 Joule aus. Das Erbennis erscheint mir jedoch zu gering und sollten ca. 398097 Joule sein oder berechne ich dies falsch? ( nach meiner Rechnung sollte der Energieertrag für Wasser ca. 228788 J und für den Clykol Anteil ca. 169309 J betragen)

Hat hier jemand eine Idee wo mein Fehler liegt und wie ich ihn korrigieren kann?

Verwendete Komponenten:  
Wago 750-841  
Codesys 2.3.9.10  
OSCAT 3.0.3

Grüße  
Thommy

---

<div class="post-metadata">

**Author:** ![hugo](https://yyz2.discourse-cdn.com/free1/user_avatar/oscat.discourse.group/hugo/32/133_2.png) [@hugo](https://oscat.discourse.group/u/hugo)\
**Post date:** [23. März 2009 um 13:23 UTC](https://oscat.discourse.group/t/heat-meter-funktioniert-nicht-wie-erwartet/550/2 "2009-03-23T13:23:48Z")

</div>

sorry da war wirklich ein fehler im baustein  
bitte versuche es nochmals mit dem gleichen baustein aus der beta7 von release 305  
die beta findest du unter ankündigungen

---

<div class="post-metadata">

**Author:** ![thommy01](https://avatars.discourse-cdn.com/v4/letter/t/91b2a8/32.png) [@thommy01](https://oscat.discourse.group/u/thommy01)\
**Post date:** [29. März 2009 um 19:22 UTC](https://oscat.discourse.group/t/heat-meter-funktioniert-nicht-wie-erwartet/550/3 "2009-03-29T19:22:15Z")

</div>

Hallo Hugo,

danke für die Info. Nachdem ich nun mit den anderen Sachen fertig war habe ich mir den Heat\_meter baustein aus der lib 3.04 heute nochmals genauer angesehen und wollte gerade meine Fehler Analyse eintrage als ich deine Antwort sah.  
Kannst du auch noch die Sourcen zur Verfügung stellen damit ich sehen kann welche Ãƒâ€žnderungen du gemacht hast.

Aber hier noch meine Erkentnisse. Du kannst ja mal vergleichen ob du das selbe entdeckt hast.

Fall 1: Wärmemenge Berechnung für Zirkulationspumpe  
Nachdem ich den Integrierer Baustein immer “gestoppt” habe wenn der Eingang “e” “false” ist war der Effekt weg und die Aufsummierung wie erwartet.

Fall 2: Wärmemenge Berechnung für Solaranlage1  
Die Angabe “Wärmekapazität” der zweiten Komponente muß in Joule erfolgen und nicht in KJ wie in der Dokumentation beschrieben. Dann ist auch das Ergebniss wie erwartet

Durchgeführte Ãƒâ€žnderungen von mir in dem Baustein:

IF rst THEN  
int1(rst := TRUE);  
int1.rst := FALSE;  
C := Y := 0;  
ELSIF e THEN  
X := (WATER\_DENSITY(SEL(return\_meter, TF, TR), FALSE) \* (WATER\_ENTHALPY(TF) - WATER\_ENTHALPY(TR)) \* (1-content) + CP \* Density \* content\*(TF-TR));  
IF pulse\_mode THEN  
IF NOT edge THEN Y := Y + X \* LPH; END\_IF;  
ELSE

(\* ----- Eingefügt damit bei “nicht Pulsmode” der integrator gestartet wird. T.H.  
orginal war “int1(in := X \* LPH / 3600.0, out\_min := 0, out\_max := 3E38);” ------\*)

```
		int1(in := X * LPH / 3600.0, out_min := 0, out_max := 3E38, run := TRUE);
		Y := int1.Out;
END_IF;

```

END\_IF;

(\* store the value of e \*)  
edge := e;

(\* read system\_time \*)  
tx := T\_PLC\_MS();

(\* only init at startup necessary \*)  
IF NOT init THEN  
init := TRUE;  
last := tx;  
END\_IF;

(\* ----- Eingefügt damit bei “nicht Pulsmode” der Integrator gestoppt wird T.H. ------\*)

IF NOT pulse\_mode AND NOT e THEN  
int1(run := FALSE);  
Y := int1.Out;  
END\_IF;

(\* ----- Eingefügt ende ------\*)

(\* calculate the current consumption \*)  
IF (tx - last \>= TIME\_TO\_DWORD(AVG\_TIME)) AND (avg\_time \> T#0s) THEN  
last := tx;  
C := (Y - Y\_last) \* 3.6/DWORD\_TO\_REAL(TIME\_TO\_DWORD(AVG\_TIME));  
Y\_last := Y;  
END\_IF;

(\* revision history  
hm 16. nov. 2007 rev 1.0  
original version

hm 24. dec. 2007 rev 1.1  
added config variable return\_meter  
added output C for current consumption

hm 6. mar. 2008 rev 1.2  
corrected an error in pulse mode

hm 16. mar. 2008 rev 1.3  
added type conversion to avoid warnings under codesys 3.0

hm 21. oct. 2008 rev 1.4  
improved code

hm 6. nov. 2008 rev 1.5  
changed to FT\_INT2 to avoid overrun at hig values

hm 8. feb. 2009 rev 1.6  
changes Y to be I/O  
\*)
