Mehrere REAL Werte in 2 Byte zusammenfügen

entenhausen_dd

Level-1
Beiträge
50
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich habe eine Frage in Codesys, folgendes Problem habe ich.

es 3 unterschiedliche Variablen als REAL vorhanden. Diese möchte ich nun über CAN in 2 bytes versenden.

REAL1: Ist in Byte 0 und Bit 0-1
REAL2: Ist in Byte 0 und Bit 2-3
REAL3: Ist in Byte 0-1 und Bit 4-15

Wie kann ich das ganze als ST-Code darstellen, vielen Dank für die Hilfe
 
Okay Leute, da habe ich mich falsch ausgedrückt, es ist kein REAL, anstelle des REAL soll Wert stehen

Wert1: Ist in Byte 0 und Bit 0-1
Wert2: Ist in Byte 0 und Bit 2-3
Wert3: Ist in Byte 0-1 und Bit 4-15
 
Wer verteilt denn die drei Werte nach welchem Gesichtspunkt auf Byte 0 und 1 und auf Bit 0 bis 15? Was sind das denn für 16 Bit? Sind das welche aus Byte 0 und 1? Woher kommt die Numerierung der Bits 8 .. 15?
Weiterhin ganz viel :confused: :confused: :confused: :confused:
 
Meine Glaskugel läßt sich zu diesem Tipp hinreisen:
Code:
SendWord := (Wert1 AND 3) OR SHL(IN:=Wert2 AND 3, N:=2) OR SHL(IN:=Wert3, N:=4);

Prinzipskizze:
Code:
von Wert1: 0000000000000011
von Wert2: 0000000000002200
von Wert3: 3333333333330000
---------------------------
verodert : 3333333333332211

Wie sind die 3 Werte deklariert? Welche Bits von den Werten sollen übernommen werden?
Muß das Ergebnis zwei einzelne Byte sein oder schaffst Du das Einfügen eines Word in die CAN-Nachricht selber?
Welche Codesys-Version verwendest Du?

Harald
 
Hallo Harald,

Die Werte sind noch nicht deklariert.

Der Wert 1 kann von 0-3 gehen
Der Wert 2 kann von 0-3 gehen
Der Wert 3 ist dann natürlich viel größer, als WORD deklarieren?

das ganze in eine CAN Nachricht zu verpacken schaffe ich dann selbst danke. das zusammenstellen habe ich noch nicht so richtig kapiert

Ich verwende 2.3 von Codesys wegen TTC Controller

Folgende Fehlermeldungen bekomme ich nun:

Das er die Werte nicht in BOOL konvertieren kann und 1 Operand ist zu wenig für SHL

Wie ist SendWord definiert, als WORD?
Wie sind die Werte deklariert, als BOOL?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ach ja, in Codesys ist SHL() keine Function sondern ein Operator, versuche es mal so:
Code:
SendWord := (Wert1 AND 3) OR SHL(Wert2 AND 3, 2) OR SHL(Wert3, 4);

SendWord soll WORD sein.
Wert1 bis Wert3 können BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT oder UDINT sein. Falls ST nicht implizit/automatisch INT-Typen nach WORD konvertiert, dann konvertiere nach dem Muster xINT_TO_WORD(Wertx), also z.B.
Code:
SendWord := (INT_TO_WORD(Wert1) AND 3) OR SHL(INT_TO_WORD(Wert2) AND 3, 2) OR SHL(INT_TO_WORD(Wert3), 4);

Harald
 
Zuletzt bearbeitet:
Zurück
Oben