Funktion um in einem DINT die beinhaltenden Worte zu tauschen?

vollmi

Level-3
Beiträge
5.433
Reaktionspunkte
1.409
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi zusammen

ich kopiere mit
Code:
SysMemCpy(ADR(typSlaveData[1].Write_Data[0]), ADR(typModBus_Init[1].InitZustand), SIZEOF(typModBus_Init[1].InitZustand))

wobei .Write_Data zwei Worte 16 Bit sind und .InitZustand ein DINT ist. Beim Kopieren muss ich die zwei Wörter im DINT tauschen. Also MSW gegen LSW austauschen.

Gibt es da eine einfache Funktion?

mfg René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann man schnell selbst machen:
Code:
FUNCTION SwappedWords_to_DInt : DINT
VAR_INPUT
   Words:ARRAY[0..1] OF WORD;
END_VAR
VAR
   WordsAt0 AT %MB0:ARRAY[0..1] OF WORD;
   WordsAt4 AT %MB4:ARRAY[0..1] OF WORD;
   DIntAt2 AT %MB2:UDINT;
END_VAR

WordsAt0:=Words;
WordsAt4:=Words;
SwappedWords_to_DInt:=DIntAt2;
 
Hallo,

kann man noch schneller selbst machen! ;)
Code:
typSlaveData[1].Write_Data[0]:=DINT_TO_WORD(SHR(typModBus_Init[1].InitZustand,16)); //Schiebe MSW ins LSW
typSlaveData[1].Write_Data[1]:=DINT_TO_WORD(typModBus_Init[1].InitZustand);//MSW wird ignoriert
@StructuredTrash
absolute Merkeradressen in einer Function, wir sind doch hier nicht bei Step 7...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@StructuredTrash
absolute Merkeradressen in einer Function, wir sind doch hier nicht bei Step 7...
Gerne mache ich das auch nicht, aber leider kann man sich in CoDeSys bei der absoluten Adressierung nicht auf andere Variablen beziehen. Solange man die Funktion nicht in eine Bibliothek packt, ist das für mich aber noch vertretbar.
 
Zurück
Oben