hilfe bei datentypen

hepo
2011-08-08
2011-08-08
  • hepo - 2011-08-08

    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!

     
  • cmoeller - 2011-08-08

    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

     
  • hepo - 2011-08-08

    danke dir!
    werd ich gleich mal ausprobieren und bescheid geben.

    gruß,
    herbert

     
  • hepo - 2011-08-08

    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

     

Log in to post a comment.