Amperestundenzähler

Lars Bizare schrieb:
Hat schonmal jemand einen Amperestundenzähler programmiert oder gibt es da vieleicht schon einen fertigen Baustein im Step7 ?
Programmiert schon, auf einer S5. Analogeingang liefert Stromistwert. Wenn Anlage (Galvanik) läuft, addiert ein Zeit-OB(13?) in jedem Aufruf den Strom zu einer Gesamtsumme hinzu. Wenn die Summe den Wert für eine Ah überschritten hat, wurde der eigentliche Ah-Zähler um 1 erhöht und von der Summe der genaue Wert für 1 Ah abgezogen.
 
Lars Bizare schrieb:
Verstehe ich nicht so recht.

Ich dachte eigentlich das die abgelaufene Zeit mit dem Istwert des Stromes multipliziert werden müsste.
Muß sie auch. Aber wenn die Addition des Stromistwerts in gleichen Zeitabständen erfolgt, steckt die Zeit schon drin:
z.B. alle 100ms 100A addiert gibt 1000A in einer Sekunde. Wenn du durch 10 teilst, hast du wieder A*Sekunde, mit einer Stelle hinter dem Komma.
Ein bischen konkreter: Der Analogeingang liefert z.B. 16383 bei 650A
Eine Ah entspricht nun:

3600 Sekunden * 10 * 16383
---------------------------------- 907366.1538...
650A

Der Faktor 10 kommt aus den 10 Additionen pro Sekunde. Jemehr Messungen und Additionen du machst, um so besser ist die Auflösung (bei Ganzzahl-Rechnung) und um so besser wird der wahre Stromverlauf erfasst.

Da das nicht in ein Wort paßt, braucht es hier ein Doppelwort. Da das auf der S7 kein Problem ist, will ich hier nicht das Vorgehen für S5 erklären.
Wenn dein Zähler also 907366 überschreitet, ziehst du 907366 ab und addierst eine Ah auf dem Ah-Zähler dazu.
 
Das hilft mir schon viel weiter 8)

Also nochmal langsam zum Verständnis...

Angenommen:

20A //Eingang
+ //alle 100ms
20A //Eingang
= DBW 0 //200 nach 1s
/
10
= DBW 4 //20 As
-------------------------
DBW4
*
3600s
*
10
= DBW 8 // 720000
-------------------------


Das würde bedeuten das 720000 = 1 AH entsprechen?

Oder wäre es nicht einfacher es nach der Formel K = I * T zu berechnen:

20 A
*
0,0027h //10s die abgelaufene Zeit
= 0,05 Ah


??
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ohne deinen Rechengang genau nachzuvollziehen: So wie ich es gemacht habe, hatte ich die geringste CPU-Belastung durch die fortlaufende Berechnung (nur eine Addition und ein Vergleich). Gleichzeitig konnte ich alles in Integer durchführen (S5) und, indem ich für Vergleich und Abziehen nicht den Wert für eine sondern für 1/10 Ah genommen habe (also 90736 im Beispiel), ereeichen, daß ich im Ah-Zähler Zehntel Amperestunden hatte. Diese werden als Ganzzahl an ein OP5 übergeben, daß dann per Konfiguration den Dezimalpunkt einfügt.
Generell sind Integer-Operationen auch auf der S7 schneller als Gleitkomma-Operationen.

Mit Gleitkomma kannst du natürlich im OB35 rechnen:
Summe:=Summe+20A*0.1Sekunden. Dann hast du die Summe in As immer korrekt. Wenn du die Anzeige aber in Amperestunden willst, teilst du im Hauptprogramm immer noch durch 3600.
Das kannst du theoretisch vermeiden indem du vorher aus den Faktoren 0.1 und 1/3600 einen Faktor errechnest: 0.1/3600=2.77e-5.

Im OB35 rechnest du dann:
Summe:=Summe+20A*2.77e-5.Stunden

Deine Gleitkomma-Zahlen haben 23 Mantissen-Bits. Das entspricht etwa 7 Zehnerpotenzen. So ab 100 oder 1000 Ah wird dann der Zählerstand nicht mehr höher, weil die zu addierende Zahl unterhalb der Rechengenauigkeit für die Summe liegt.

Da kannst du dir wieder helfen, indem du die A nicht 10 mal pro Sekunde sondern nur noch alle 10 Sekunden summierst. Aber damit erfaßt du Schwankungen im Strom weit weniger genau...
 
Zurück
Oben