Überlauf 1-Wire 2-Port S0-Impulszähler

Hallo zusammen,

eine Frage an die Enwickler des 1-Wire 2-Port S0-Impulszähler Moduls.

Wie gross ist der Maxwert des Counters ? und was passiert wenn es zum Überlauf kommt? Soweit ich es verstehe ist kein Reset vorgesehn im IPS Zähler Modul.

LG Manfred

Hallo zusammen,

integer int 2 -32 768 … 32 767
short integer short 2 -32 768 … 32 767
long integer long 4 -2 147 483 648 … 2 147 483 647
integer unsigned int 2 0 … 65 535
short integer unsigned short 2 0 … 65 535
long integer unsigned long 4 0 … 4 294 967 295

Die IPS Software verwendet long Integer mit Vorzeichen, da die Zahl
4 294 967 295 nicht von der Software akzeptiert wird.

Also waere der Bereich von schon mal halbiert! oder es muessten negative Zahlen ausgeben werden!

Das erste Bit ist wohl das Vorzeichenbit ab 2 147 483 647 + 1 Impuls liefert negative Zahlen bei Long Integer.

Also sind es nur noch 68 Jahre wenn nur positive Zahlen und jede Sekunde ein Impuls kommt.

Falls aber je sekunde 30 Impulse kommen sind es nur noch rund 2,2 Jahre.

30 Impluse sollten ja ohne weiteres in einem S0 System verkraftet werden.

Also ist es schon wichtig zu wissen wieviel Impulse man erwartet und was passiert wenn die Hälfte der Impulse gezählt ist. Aber hier kann ja der Entwickler eingreifen und von Null beginnen, ansonsten kommen negative Zahlen.

LG Manfred

Wenn ich mich da - als Außenseiter - mal kurz einmischen darf…

In soeinem Fall warnt Delphi schon im Vorfeld vor einem möglichen „Überschreiten des zulässigen Bereichs“, das Projekt lässt sich, je nach Einstellung der Preferenzen, aber problemlos kompilieren.

Der Wert wird bis 2147483647 ($7FFFFFFF) korrekt angezeigt. Statt 2147483648 liefert delphi dann wegen dem geänderten Vorzeichenbit korrekter Weise -2147483648 ($80000000) und zählt weiter bis -1 ($FFFFFFFF). Dann ist Schluss - vollkommen logisch. Die 32 Bit sind aufgebraucht. Der Chip fängt aber bei 0 ($0) wieder an. Dezimal bedeutet das, dass nach -3, -2 und -1 dann 0, 1, 2 und 3 kommt. Irgendwie auch logisch, oder :wink:

Wer direkt in Hex umrechnet hat dieses Darstellungsproblem, denn mehr ist es genaugenommen nicht, überhaupt nicht.

Gruß,

Toni

Es ist ein Fehler.

Sobald der Wert MAX_INTEGER erreicht wird, wird der Zähler auf einen negativen Wert springen.
So wie es Tonic erklärt hatte.

Ich habe es ins Bugreports Forum geschoben.

Der Rest, der hier nicht unbedigt hingehörte, habe ich einfach entsorgt.

paresy

@ Forum,

es wurden von Paresy einige Beiträge gelöscht, nachdem die Diskussion "zu spaßig " weiter geführt wurde.
Vielleicht konnte man mit dem Humor nichts anfangen und / oder es wurde die Hardware mit der Software verwechselt.
Der 1-Wire 2-Port S0-Impulszähler ist eine Hardware und kein Produkt von IP-Symcon.
Es besitzt ein 32-Bit Zähler, der nicht beschreibbar ist oder zurückgesetzt werden kann.
Nach einem Überlauf (4 294 967 295) fängt er bei 0 wieder an.
Sein Zählerstand wird in einem statischen RAM (SRAM) abgelegt.
Dies bedeutet man sollte ihn stündlich abfragen - allein wegen der grafischen Aufbereitung (mindestens um Mitternacht).
Außerdem kann man dem Speicher noch eine Diode mit Goldcap spendieren um kurzfristige Spannungs-Unterbrechungen zu überbrücken.
Kein Entwickler würde je auf die Idee kommen ein SRAM in der Praxis für „Summen-Zähler“ einzusetzen (z.B. der Tachostand im Auto > Batteriewechsel > 0km)
Soweit zur Hardware und nun zur Software:
Man kann den DS2423 u.a. auch als Frequenzzähler verwenden, erst dann rücken die u.g. Zahlenwerte in realistische Nähe.
Sie stoßen aber auch an die Grenz des verwendeten INTEGER Bereich.
Darum wurde dieser Thread hierher verschoben.

MST