Funktionsblock HEAT_METER

Begonnen von mike0875, 28. Februar 2008, 20:24:56

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

mike0875

Hallo Oscat Team
Bin durch Zufall auf eure seite gestossen und finde das Portal Klasse.
Habe mir die Libary 2.70 heruntergeladen und den Baustein HEAT_METER in mein Projekt eingebunden.
Leider muss ich feststellen das er bei mir nicht funktioniert.

Hardware: Beckhoff CX1000
Setup Einstellungen FB:  PULSE_MODE: TRUE
                                 CP: 2.45 (Spez. Wärme von Tyfocor)
                                 DENSITY: 1.054
                                 RETURN_METER: TRUE

Habe zum Testen am Eingang E einen Impuls Pausetakt von 1s angeschlossen. Bekomme leider weder am Ausgang J noch Ausgang C einen Wert ausgegeben.
Habe zwei Bildschirmabzüge vom Online Status gemacht. Siehe Anhang.

Ich hoffe ihr könnt mir weiterhelfen
m.f.G.
Michael



[gelöscht durch Administrator]

hugo

kannst du ein beispiel aus deinem projekt posten?

mike0875

Hallo Hugo
Was meinst du mit einem Beispiel aus meinem projekt. Hätte die HardcopyÃ,´s vom online Status als Beispiel angehängt oder bräuchtest du mein Projekt.

Schreib nochmal was du genau benötigst.

Danke für die Bemühungen

m.f.G.
Michael

hugo

sorry hatte mich als gastr eingeloggt und da kann ich die attachements nicht sehen

mike0875

Hallo Hugo
Hast du heute Nacht nicht schlafen können?? Hat "Emma" bei euch auch so geblasen?

Habe mir den Baustein nochmal angeschaut. Der Fehler dürfte im Bereich PULSE_MODE liegen. Sobald der Pulse_Mode auf TRUE ist (d.H.Eingang E = Impuls von WMZ) wird nichts mehr gezählt. PULSE_MODE auf FALSE und E auf TRUE dann wird die Wärmemenge berechnet. Mich würde noch die Formel interressieren die zur Berechnung herangezogen wird. Mir kommen die Werte etwas spanisch vor.

m.f.G.
Michael

mike0875

Hallo Hugo
Glaube den fehler gefunden zu haben. Wenn PULSE_MODE auf TRUE ist funktioniert die Flankenauswertung von edge nicht. Habe zum Testen den Baustein umgeschrieben und bilde edge über die pos. Flanke von Eingang E mit dem F_TRIG Befehl.

Flanke(CLK :=E);    (*Habe ich eingefügt*)
edge :=Flanke.Q;

IF rst THEN
   int1(rst := TRUE);
   int1.rst := FALSE;
   C := 0;
   Y := 0;
ELSIF pulse_mode AND  edge THEN                       (*Habe hier die Abfrage geändert*)   
            IF return_meter THEN
      X := (Water_density(TR, FALSE) * (water_enthalpy(TF) - water_enthalpy(TR)) * (1-content) + CP * Density * content*(TF-TR));
   ELSE
      X := (Water_density(TF, FALSE) * (water_enthalpy(TF) - water_enthalpy(TR)) * (1-content) + CP * Density * content*(TF-TR));
   END_IF;
   Y := Y + X * LPH;

            (*Zuweisung von edge habe ich gelöscht*)

Beim Ausgang C (momntaner Verbrauch) ist mir aufgefallen obwohl sich weder die Vor und Rücklauftemp. ändert variert der Wert. z.B. Vorlauftemp. 70
Rücklauf 30 , Ausgang C springt ca. alle 10sec zwischen 119 und 179 Joule hin und her. Der wert sollte doch gleich bleiben. Oder?


Vielleicht könnt ihr den Baustein nochmals auf Herz und Nieren testen.

m.f.G.
Michael




hugo

bitte gib mir ein paar tage ich werde es ansehen

mike0875

Kein Problem ist nich soo dringend!

Werde einstweilen auch noch ein bischen weiterprobieren. Das Problem mit dem Ausgang C dürfte ein Rundungsfehler sein. Ich bilde den Ausgeng C jetzt mit der Formel X*LPH. Da schauts ganz gut aus. Vorrausgesetzt die Formel zur Berechnung von X ist richtig. Hab im Internet noch nichts brauchbares darüber gefunden. Vielleicht kannst du mir die Formel bei Gelegenheit mal näher erleutern. Wie schauts aus wenn das Medium das ich benutze kein Wasser ist sondern Tyfocor?

m.f.G.
Michael

hugo

hallo mike,
habe mir heute das ganze angesehen:

ELSIF pulse_mode AND e AND NOT edge THEN  (* diese bedingung ist nichts anderes als ein flankentrigger auf e steigende flanke *)
   IF return_meter THEN
      X := (Water_density(TR, FALSE) * (water_enthalpy(TF) - water_enthalpy(TR)) * (1-content) + CP * Density * content*(TF-TR));
   ELSE
      X := (Water_density(TF, FALSE) * (water_enthalpy(TF) - water_enthalpy(TR)) * (1-content) + CP * Density * content*(TF-TR));
   END_IF;
   Y := Y + X * LPH;
   edge := e;

(* das problem liegt hier die edge = e muss ausserhalb der if anweisung stehen und bei jedem aufruf drankommen

sorry das ist ein klarer bug und wird behoben

mike0875

Hallo hugo

Hast du dir auch das Problem mit Ausgang C angeschaut? Dieser wechselt ständig den Wert (ev. Rundungsfehler) obwohl sich die Eingangsparameter nicht ändern.

Sollte auch gleich mitbehoben werden. Die Ursache dafür ist glaube ich das sich C aus Y errechnet. Umgekehrt wäre es genauer!
Eventuell wäre noch die Durchflussmenge in Liter/h als Ausgang interresant.

m.f.G.
Michael