# FbImpulseCounter richtige Einstellung



## fstoiber (27 November 2015)

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


----------



## .:WAGOsupport:. (8 Dezember 2015)

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.


----------



## fstoiber (8 Dezember 2015)

*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


----------



## .:WAGOsupport:. (15 Dezember 2015)

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.


----------



## fstoiber (5 Januar 2016)

*FB_ImpulsCounter Testprogramm*

Danke Wago,

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

MfG Florian


----------



## Lex (22 Januar 2017)

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).



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


----------



## MasterOhh (22 Januar 2017)

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.


----------



## Lex (22 Januar 2017)

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).




Gruß Lex


----------



## Lex (24 Januar 2017)

Wollte diesen Beitrag nochmal anstupsen und hoffe das mir einer weiter helfen kann.

Gruß Lex


----------



## Methi (27 Februar 2017)

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


```
g_bDecimalPlaces : BYTE := 4;kWh1: FbImpulseCounter;
kWhConfig1: typConfigImpulseCounter;
kWh1Result: REAL;
t2Count : DWORD;
t2Comma : REAL;
```


```
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;
```


----------



## urlicht (1 März 2017)

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.


----------



## .:WAGO::0100409:. (1 März 2017)

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.



Bei Fragen, könnt ihr uns unter den unten genannten Kontaktdaten erreichen.


----------



## Methi (1 März 2017)

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.


----------



## Methi (5 März 2017)

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.



Methi schrieb:


> ```
> (*g_bDecimalPlaces : BYTE := 4; *) <--- hier liegt der Fehler! ;)
> kWh1: FbImpulseCounter;
> kWhConfig1: typConfigImpulseCounter;
> ...


----------



## Sancho (13 September 2017)

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.


----------



## urlicht (13 September 2017)

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.


----------



## Sancho (14 September 2017)

Hi urlicht,

hat funktioniert. Weiß zwar nicht warum es vorher nicht funktioniert hat aber jetzt klappt es 

Danke dir!


----------

