L DIB [AR2,P#6.0]
T DIB [AR2,P#9.0]
L DIB [AR2,P#7.0]
T DIB [AR2,P#8.0]
L #Status.HMI.protocol
TAD
T #Ausgabe_DW
L #Status.HMI.Byte6
T LB 3
L #Status.HMI.Byte7
T LB 2
L #Status.HMI.Byte8
T LB 1
L #Status.HMI.Byte9
T LB 0
L #Temp_LD0
T #Ausgabe_DW
Laut Deinem Code genau andersrum (Du kopierst das Wort auf die einzelnen Bits).Ich möchte nur die ersten 16 command-bits auf mein protocol kopieren und dabei MSB und LSB tauschen.
FUNCTION "iTBW" : VOID
TITLE =Reihenfolge der Bytes in einem Word tauschen, indirekt
AUTHOR : PN_DP
VERSION : 0.1
VAR_INPUT
IN_Adr : POINTER ; //Pointer auf zu lesendes Word
OUT_Adr : POINTER ; //Pointer auf zu schreibendes Word
END_VAR
VAR_TEMP
Ptr_DB : WORD ;
Ptr_Ofs : DWORD ;
Value : WORD ;
END_VAR
BEGIN
NETWORK
TITLE =
//Pointer auf IN-Word in AR1 erstellen
L P##IN_Adr;
LAR1 ;
L W [AR1,P#0.0];
T #Ptr_DB;
L D [AR1,P#2.0];
UD DW#16#FFFFFFF8; //auf P#x.0 zwingen
T #Ptr_Ofs;
AUF DB [#Ptr_DB];
LAR1 #Ptr_Ofs;
//IN-Word lesen
L W [AR1,P#0.0];
T #Value;
//Pointer auf OUT-Word in AR1 erstellen
L P##OUT_Adr;
LAR1 ;
L W [AR1,P#0.0];
T #Ptr_DB;
L D [AR1,P#2.0];
UD DW#16#FFFFFFF8; //auf P#x.0 zwingen
T #Ptr_Ofs;
AUF DB [#Ptr_DB];
LAR1 #Ptr_Ofs;
//IN-Word MSB-LSB-gedreht auf OUT-Word ausgeben
L #Value;
TAW ; //MSB-LSB tauschen
T W [AR1,P#0.0];
END_FUNCTION
CALL "iTBW"
IN_Adr :=#command.hmi.bit1
OUT_Adr:=#command.hmi.protocol
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?