Mehrere Word Informationen in einen USINT "Mappen"

carepicha

Level-1
Beiträge
49
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum-User,

Wie kann man möglichst einfach mehrere Word Informationen auf einen USINT "mappen"

Dabei soll die Bit Information von wHelp1 auf dem Platz 0 des USINT liegen
=> Bit Information von wHelp2 dann auf Platz 1 usw...

Anbei der erste Versuch:

Code:
wHelp        :USINT;
wHelp1        :WORD;
wHelp2        :WORD;


wHelp.0:=WORD_TO_USINT(wHelp1.0);
wHelp.1:=WORD_TO_USINT(wHelp1.1);
wHelp.2:=WORD_TO_USINT(wHelp2.0);
wHelp.3:=WORD_TO_USINT(wHelp2.1);

Dies geht so nicht.
Fehlermeldung:
Unzulässiger Typ in Parameter von Conversion: Kann Bool nicht in Word konvertieren?
Warum gibt es diesen Fehler?

Danke schon im Voraus für Eure Unterstützung
 
wHelp1.0 ist ein Bool und kein Word.

Dies ist aus der Fehlermeldung zu erahnen, doch warum? wHelp1 ist doch als als DWORD deklariert?



[QUOTE

So etwas wurde eher funktionieren:
Code:
wHelp.0:=wHelp1.0;
wHelp.1:=wHelp1.1;
wHelp.2:=wHelp2.0;
wHelp.3:=wHelp2.1;
[/QUOTE]


Ok, noch einfacher....müssen also die verschiedenen Datentypen in diesem Fall nicht explizit umgewandelt werden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry dass ich hier nochmals nachhaken muss.
Soll das bedeuten dass er dann selbständig aus einen WORD ein BOOL macht?

Etwas was als Word deklariert ist, ist und bleibt doch eine Word, wie soll dass ein Bool werden?

Kann ich irgendwie nicht verstehen......
 
So koennte das gehen:
##############################
PROGRAM MAIN
VAR

_wHelp:USINT;
_wHelp1:WORD:=16#AAAA;
_wHelp2:WORD:=16#5555;
_Hilfe:DWORD;
_Hilfe1_1:DWORD;
_Hilfe1_2:DWORD;
i: INT;
j: INT;
END_VAR
####################################
_Hilfe:=0;
_Hilfe1_1:=_wHelp1;
_Hilfe1_2:=_wHelp2;
j:=0;
FOR i:=0 TO 16 BY 1 DO
_Hilfe:=_Hilfe OR SHL((SHR(_Hilfe1_2,i)AND 16#1),j);
j:=i*2;
END_FOR;
_Hilfe:=SHL(_Hilfe,1);
j:=0;
FOR i:=0 TO 16 BY 1 DO
_Hilfe:=_Hilfe OR SHL((SHR(_Hilfe1_1,i)AND 16#1),j);
j:=i*2;
END_FOR;
_wHelp:=DWORD_TO_USINT(_Hilfe);


Irek
 
Code:
PROGRAM MAIN

VAR
    _wHelp:USINT;
    _wHelp1:WORD:=16#AAAA;
    _wHelp2:WORD:=16#5555;
    _Hilfe:DWORD;
    _Hilfe1_1:DWORD;
    _Hilfe1_2:DWORD;
    i: INT;
    j: INT;
END_VAR

####################################

_Hilfe:=0;
_Hilfe1_1:=_wHelp1;
_Hilfe1_2:=_wHelp2;
j:=0;

FOR i:=0 TO 16 BY 1 DO
    _Hilfe:=_Hilfe OR  SHL((SHR(_Hilfe1_2,i)AND 16#1),j);
    j:=i*2;
END_FOR;

_Hilfe:=SHL(_Hilfe,1);
j:=0;

FOR i:=0 TO 16 BY 1 DO
    _Hilfe:=_Hilfe OR  SHL((SHR(_Hilfe1_1,i)AND 16#1),j);
    j:=i*2;
END_FOR;

_wHelp:=DWORD_TO_USINT(_Hilfe);
Ja, sieht schon viel einfacher aus als das von olliew Vorgeschlagene:
So etwas wurde eher funktionieren:
Code:
wHelp.0:=wHelp1.0;
wHelp.1:=wHelp1.1;
wHelp.2:=wHelp2.0;
wHelp.3:=wHelp2.1;
:p :ROFLMAO:

@Irek,
benutz' für Programmzeilen bitte mal den Code-Button (#) ganz rechts in der 2. Iconzeile. Wie Du in dem bearbeiteten Zitat von Dir siehst, ist er dann besser lesbar und auch Einrückungen lassen sich einfach vornehmen.
 
Zurück
Oben