CX5010 Real stoppt bei 2^24

Portisch

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

ich habe eine CX5010 hier im Einsatz. In meinem Programm habe ich einen Counter als Real definiert.
Laut Beckhoff kann dieser diesen Bereich: ~ -3.402823 x 10[SUP]38[/SUP] bis ~ 3.402823 x 10[SUP]38

[/SUP]Nun hat der Zähler aber bei 16777216 == 2^24 gestoppt!?
Die 1,6e7 sind aber noch weiter von e38 entfernt.

Das Programm läuft selber auf der SPS. Twincat ist die Version 2.11 (Build 2244)

Ist das ein Bug?
Brauchen tu ich einen Zähler der mindestestens bis 1x10^9 zählen kann.

Code:
VAR_GLOBAL PERSISTENT
 rCycleX: REAL; (* lifetime in cycles *)
END_VAR
 
Zuviel Werbung?
-> Hier kostenlos registrieren
REAL ist für große Counter total ungeeignet, weil es nur ca. 7 signifikate Ziffern hergibt --> man kann nicht 123456.0 + 0.001 addieren.
Benutze ein DINT (oder LINT falls die CPU das kennt), ggf. kannst Du auch mehrere DINT kaskadieren, indem Du beim Zählen den Übertrag von einem DINT in den nächsten verrechnest.

Du könntest für den Zähler auch einen String benutzen, da kannst Du Zahlen mit hunderten Ziffern verwalten. Das kann so ziemlich jeder Microcontroller ...

Harald
 
Also auf die einfache Art wird es sein einen UDINT zu verwenden. LINT kann die CPU nicht.
Somit könnte der Zähler bis zum Vierfachen des benötigten ansteigen.

Da wir aber noch keine Hardwareerfahrungen haben - wie könnte man noch gößere Zahlen abbilden?
Wie würde das mit einem String funktionieren?
 
In der TcUtilities.lib gibt es Funktionen für 64Bit Integer (INT64 und UINT64). Du kannst aber für Large_Integer nicht die Standardoperationen nutzen sondern musst die FCs aus der Bibliothek verwenden.
 
Zurück
Oben