FbImpulseCounter richtige Einstellung

fstoiber

Level-1
Beiträge
27
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

habe ein Probelm mit dem Baustein FbImpulseCounter von der Building_HVAC_03 Bibliothek

Habe zwei 800imp/kWh Zähler
1:800 = 0.00125 kWh/Impuls
Zeiteinheit 3600s

wenn ich das so eingebe, bleibt der Zählerstand auf 0

hab daher provisorisch 0.125 und 36 eingegeben und dann durch 100 geteilt...
möchte aber gerne wissen wie es richtig funktioniert.

Gruß Florian
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    33 KB · Aufrufe: 264
Hallo,

wie du deinen „FbImpulseCounter“ konfigurierst, sieht korrekt aus. Die Genauigkeit des „FbImpulseCounter“ liegt DEFAULT bei einer Einheit pro Impuls (rUnitPerPulse), bei zwei Nachkommastellen.
Dieses hat den Hintergrund, dass in der Vergangenheit, die meisten Impulsgeber nicht genauer als zwei Nachkommastellen waren.

Diese Genauigkeit kann aber über eine Zuweisung (z.B.“ g_bDecimalPlaces := 4;“ ) auf die Globale Variable „g_bDecimalPlaces : BYTE:=2;“, geändert werden.
Ich hoffe ich konnte dir weiter helfen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
FB_ImpulsCounter

Hallo Wago,

danke für die Antwort, bei mir war dieser Variablenwert auf "0"
habe ihn auf 4 abgeändert, funktioniert aber trotzdem nicht.

was habe ich falsch gemacht?

Gruß Florian
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    4,9 KB · Aufrufe: 149
Hallo,

scheinbar ist die Konfiguration der Nachkommastellen, nicht der einzige Auslöser für das Verhalten in deinem Programm. Um die Ursache für dieses Verhalten zu erkennen, denke ich, dass du uns vom Wago Support direkt mit einer E Mail kontaktierst . Vorzugsweise sollte darin schon einmal das CodeSys Archive deines Projektes enthalten sein. Du kannst uns aber auch über unsere Hotline erreichen.

Solltest du Fragen haben, kannst du uns unter den unten genannten Kontaktdaten erreichen.
 
FB_ImpulsCounter Testprogramm

Danke Wago,

das Programm funktioniert,
wollte es noch der Allgemeinheit zur Verfügung stellen.

MfG Florian
 

Anhänge

  • impulesecounter_TestV1.zip
    409 KB · Aufrufe: 217
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo alle zusammen,

ich greife nochmals dieses Thema auf da ich das selbe wie fstoiber vor habe. Jedoch funktioniert in e!COCKPIT die Zuweisung "g_bDecimalPlaces:= 4;" nicht. Je nachdem wo ich diesen Ausdruck ins Programm einfüge, kommen mehr oder weniger Fehlermeldung (siehe Bild).
FbImpulseCounter.jpg

Was mache ich Falsch? In die GlobaleVariable habe ich diesen Ausdruck eingefügt: "g_bDecimalPlaces : BYTE:=2;"

So lange wie die Zahl 0.001 nicht größer/gleich 1 ist funktioniert der Blinker für das Simulieren (Testen der Impulse) nicht.
Der Zählerstand vom FbImpulseCounter bleibt nämlich immer auf 0. Er zählt erst sobald die Zahl vorm Baustein LREAL_TO_WORD größer/gleich1 ist.

Gruß Lex
 
Zuletzt bearbeitet:
Du versuchst im Variablen Deklarationsbereich des Bausteins der Variable g_bDecimalPlaces einen Wert zu zuweisen. Im Deklarationsbereich sind aber nur Variablendeklarationen erlaubt und kein Programmcode.
Wenn du g_bDecimalPlaces einen neuen Wert zuweisen willst, musst du im CFC Teil einfach nur den neuen Wert als Eingangs-Element mit g_bDecimalPlaces als Ausgangselemente verbinden.
 
Vielen Dank für die schnelle Antwort MasterOhh!

Werde es gleich ausprobieren und habe wieder was dazu gelernt.

EDIT:

Also ich habe es jetzt Ausprobiert und muss leider mitteilen das der Baustein "FbImpulseCounter" dennoch nicht hochzählt (siehe Bild).
FbImpulseCounter_2.jpg


Gruß Lex
 
Zuletzt bearbeitet:
Auch ich komme mit dem Impulszähler nicht weiter.
Er zeigt mir einen Momentanverbrauch an, der auch realistisch erscheint. Dieser ist gering (<1kW, meist <0,1kW)
Jedoch steigt der Gesamtverbrauch nicht an. Ist auch nach 48 Stunden immer noch 0.

Impulse kommen rein, in den letzten 24h ca 920 Impulse (gezählt mit R_Trig auf den Eingang im derselben Task (t#20ms))
Das macht bei 250Imp/kWh ja ca 4kW - nur der Baustein bekommt diese nicht mit...

Auch ein zweiter Zähler (in der selben Task) mit 1000 Imp/kWh funktioniert nicht. Mehr macht die Task nicht. Auszug siehe unten.

Hat jemand eine Idee?

Controller ist nen Wago 880 - falls das wichtig ist

Code:
g_bDecimalPlaces : BYTE := 4;kWh1: FbImpulseCounter;
kWhConfig1: typConfigImpulseCounter;
kWh1Result: REAL;
t2Count : DWORD;
t2Comma : REAL;
Code:
g_bDecimalPlaces := 4; (* Test *)(* Stromzähler *)
kWhConfig1.rUnitPerPulse := 0.004;
kWhConfig1.wBaseTimePeriod := 3600;
kWh1(xPulseInput := xHauptzaehler, typConfigImpulseCounter := kWhConfig1, dwCounterValue := t2Count, rCounterPostComma :=t2Comma);
kWh1Result := t2Count + t2Comma;
 
Hallo Methi,

Ich verwende den Baustein auf mehreren Controllern und es funktiopniert ganz prima. Ich habe Wandlerzähler im Einsatz mit 20000Imp/kWh und Übersetzungsverhältnis 1:500
Wenn ich bei maximaler Leistung von 400kW die Impulsfrewuenz ausrechne, komme ich schnell zu dem Schluss, dass zwar die Eingangskarte mit 3ms den Impuls erfasst, nicht jedoch zwangsweise das Programm im Task. Ich verwende dafür Impulsuntersetzuer, zB. http://www.rinck-electronics.de/rinck2001/pdf/C310_D_IPX_4.PDF . Wenn die Impulsbreiute zu klein wird, kann dasselbe Gerät auch als Impulsverlängerer nachgeschaltet werden (also quasi zweistufig). Maximale Eingangsfrewuenz liegt bei 2kHz. Maximales Untersetzungsverhältnis: 1:100. Das reicht in den meisten Fällen. Kostenpunkt liegt, glaube ich, bei ca. 90 Eur.

Grüße.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo alle zusammen,

die Ursache für den nicht funktionierenden Zähler, liegt am FbImpulseCounter, der standartmäßig mit zwei Nachkommastellen rechnet. Die Anzahl der Nachkommastellen kann über die globale variable "g_DecimalPlaces" erhöht werden. Diese findet ihr bei der Variablendeklaration unter WagoAppBuildingHVAC/GlobalVaiables/g_DecimalPlaces.

@Lex: Die Konvertierung LREAL_TO_WORD solltest du löschen. Als Beispiel habe ich einen Teil deines Programms nachgebaut.
FbImpulseCounter_SPSForum.jpg

Bei Fragen, könnt ihr uns unter den unten genannten Kontaktdaten erreichen.
 
ich bekomme die Impulse in der Task ja mit - daran liegt es nicht (R_Trig auf den Eingang liefert mir 920 Impulse in 24h; das ist auch realistisch)

Nur der Baustein FBImpulseCounter zählt nicht richtig.
 
Ich hab meinen Fehler zwischenzeitlich gefunden: Irgendwie muss ich mit der Auto-Deklaration in Codesys die Var g_bDecimalPlaces lokal in der Task angelegt haben.
Deswegen hat meine Task die nur Lokal überschrieben, der FBImpulsCounter aber weiterhin die Globale verwendet.

Code:
(*g_bDecimalPlaces : BYTE := 4; *) <--- hier liegt der Fehler! ;)
kWh1: FbImpulseCounter;
kWhConfig1: typConfigImpulseCounter;
kWh1Result: REAL;
t2Count : DWORD;
t2Comma : REAL;
Code:
g_bDecimalPlaces := 4; 
(* Stromzähler *)
kWhConfig1.rUnitPerPulse := 0.004;
kWhConfig1.wBaseTimePeriod := 3600;
kWh1(xPulseInput := xHauptzaehler, typConfigImpulseCounter := kWhConfig1, dwCounterValue := t2Count, rCounterPostComma :=t2Comma);
kWh1Result := t2Count + t2Comma;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich habe auch immernoch ein Verständnisproblem. Muss die Variable g_bDecimalPlaces erst noch deklariert werden unter Ressourcen -> Globale_Variablen? Wenn ich das mache bekomme ich den Fehler 3703: Globale_Variablen (8): Mehrere Deklarationen mit dem gleichen Bezeichner 'g_bDecimalPlaces'.

Wenn ich den Fehler anklicke lande ich im Bibliotheksverwalter in der SysLibGetAdress.lib in der Funktion SysLibGetSize.

Wenn ich die Variable nicht deklariere und einfach einen Wert zuweisen will wird die Variable nicht erkannt und soll deklariert werden.
 
Example.JPG

Hallo Sancho. Hab mal ein Screenshot aus einem realen Projekt erstellt. Die Werte müssen direkt im Programmcode zugewiesen werden. Hier z.B. in CFC. Hoffe, das hilft weiter.

Grüße.
 
Zurück
Oben