hab grad ein dringliches datentyp-problem:
ich muss einen betriebsstundenzähler mit max. 99 999,9 stunden darstellen und habe hierfür eine als DUINT deklarierte eingangsvariable zur verfügung.
mein problem besteht nun darin, dass sich die eingangsvariable mit einem intervall von 3 minuten verändert (also um 0,05 stunden) und ich mit einer
kommastelle genau arbeiten muss.
leider verfügt mein target nicht über LREAL-typen, sodass ich bei der nachkommastelle auf REAL angewisen bin, jedoch vor dem komma wiederum einen
32bit-typ (UDINT) benötige.
wie kann ich nun zwei verschiedene typen miteinander zu einem anzeigewert verknüpfen?
grüße aus dem alpenland!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
was hälst du davon, für die Anzeige auf den Datentyp STRING auszuweichen?
Intern würde ich den Betriebsstundenzähler als UDINT ausführen.
UDINT kann Werte von 0 bis 4.294.967.295 darstellen.
Das sollte ausreichen um intern mit 10tel oder 100tel Betriebsstunden zu arbeiten.
Der schnellste Weg zur Nachkommerstelle führt über Modulo:
udiZaehlerstand := (udiZaehlerStand100tel / 100);
uiNachKommaStelle := (udiZaehlerStand100tel MOD 100);
sZaehlerstand := CONCAT(UDINT_TO_STRING(udiZaehlerstand), ',');
sZaehlerstand := CONCAT(sZaehlerstand, UINT_TO_STRING(uiNachKommaStelle));
Gruss Christoph
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
klappt perfekt!
musste nur noch ein SHR vorsetzen (da die Teilung 0,05 stunden beträgt, blende ich das erst bit aus),
der rest wie beschrieben.
danke nochnals!
gruß,
herbert
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
hallo kolleg(inn)en!
hab grad ein dringliches datentyp-problem:
ich muss einen betriebsstundenzähler mit max. 99 999,9 stunden darstellen und habe hierfür eine als DUINT deklarierte eingangsvariable zur verfügung.
mein problem besteht nun darin, dass sich die eingangsvariable mit einem intervall von 3 minuten verändert (also um 0,05 stunden) und ich mit einer
kommastelle genau arbeiten muss.
leider verfügt mein target nicht über LREAL-typen, sodass ich bei der nachkommastelle auf REAL angewisen bin, jedoch vor dem komma wiederum einen
32bit-typ (UDINT) benötige.
wie kann ich nun zwei verschiedene typen miteinander zu einem anzeigewert verknüpfen?
grüße aus dem alpenland!
Hallo hepo,
was hälst du davon, für die Anzeige auf den Datentyp STRING auszuweichen?
Intern würde ich den Betriebsstundenzähler als UDINT ausführen.
UDINT kann Werte von 0 bis 4.294.967.295 darstellen.
Das sollte ausreichen um intern mit 10tel oder 100tel Betriebsstunden zu arbeiten.
Der schnellste Weg zur Nachkommerstelle führt über Modulo:
udiZaehlerstand := (udiZaehlerStand100tel / 100);
uiNachKommaStelle := (udiZaehlerStand100tel MOD 100);
sZaehlerstand := CONCAT(UDINT_TO_STRING(udiZaehlerstand), ',');
sZaehlerstand := CONCAT(sZaehlerstand, UINT_TO_STRING(uiNachKommaStelle));
Gruss Christoph
danke dir!
werd ich gleich mal ausprobieren und bescheid geben.
gruß,
herbert
klappt perfekt!
musste nur noch ein SHR vorsetzen (da die Teilung 0,05 stunden beträgt, blende ich das erst bit aus),
der rest wie beschrieben.
danke nochnals!
gruß,
herbert