Wago 750-652 Modbus Brink KWL

Zuviel Werbung?
-> Hier kostenlos registrieren
Die CODESYS Funktion WORD_TO_BYTE schneidet schon das obere Byte. Daher hat das zusätzliche AND 16#FF keinen weiteren Effekt.

Da fehlt doch noch eine 0 in der Seriennummer: 431108214303

Du benutzt mit CONCAT6 schon die WagoAppString. Da würde ich mir das ganze Schieben und Wandeln sparen und gleich mit FORMAT arbeiten:

Code:
str_SerialNo    := Format3(
    sFormat        := '%04x%04x%04x',
    p1            := ADR(utResponse.awData[0]),
    p2            := ADR(utResponse.awData[1]),
    p3            := ADR(utResponse.awData[2]));
 
Hallo, ja, dass mit der NULL habe ich schon bemerkt und geändert. Aber danke für den Tipp mit Format - probiere ich gleich aus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

im Register 4110 erhalte ich die Uhrzeit getrennt nach Lo und Hi Byte.
mit Concat3(BYTE_TO_STRING(WORD_TO_BYTE(myData4110[0])), ':' ,BYTE_TO_STRING(WORD_TO_BYTE(SHR(myData4110[0],8)))); *)
kriege ich die richtige Uhrzeit zusammengebaut allerdings mit dem Schönheitsfehler, dass einzifferig Zahlen nicht mit einer führenden Null dargestellt werden. Ihr kennt doch sicher einen Trick dies zu korrigieren.
 
Ich kenne die Wago nicht und weiß nicht, ob es da für die Vornull vielleicht eine spezielle Funktion gibt, doch der Standard-Trick ist, eine Zeichenfolge zu erzeugen die garantiert 2 oder 3 Zeichen lang ist, und davon die letzten 2 Zeichen zu nehmen.
Versuche mal
Concat3( RIGHT(BYTE_TO_STRING( WORD_TO_BYTE(myData4110[0]) + 100), 2), ':', RIGHT(BYTE_TO_STRING( WORD_TO_BYTE(SHR(myData4110[0], 8)) + 100), 2) );

PS: grrr, zu viel verschachtelt, zu viele Klammern ... ;)

Harald
 
Zuletzt bearbeitet:
im Register 4110 erhalte ich die Uhrzeit getrennt nach Lo und Hi Byte.
mit (...) kriege ich die richtige Uhrzeit zusammengebaut allerdings mit dem Schönheitsfehler (...)
Gibt es bei der Wago eine Konvertierfunktion TOD_TO_STRING? (z.B. TIME_OF_DAY zu '12:34:56' )
Da wäre es vermutlich effizienter, aus den 2 Bytes mit den Stunden und Minuten einen TOD (TIME_OF_DAY) zu berechnen und in STRING '12:34:56' zu wandeln und davon die ersten/linken 5 Zeichen zu nehmen. Etwa so:
Code:
todUhrzeit := (loByte * 60 + hiByte) * 60000;
strUhrzeit := LEFT(TOD_TO_STRING(todUhrzeit), 5);
oder über TIME
Code:
timUhrzeit := (loByte * 60 + hiByte) * 60000;
strUhrzeit := LEFT(TOD_TO_STRING(TIME_TO_TOD(timUhrzeit)), 5);

Harald
 
Zuletzt bearbeitet:
Zurück
Oben