TIA Bit zu Byte oder Word

S7Anfänger

Level-2
Beiträge
321
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Zusammen,

Ich suche in FUP einen Baustein mit dem man einzelne Bit in ein Byte Schreiben kann.
Also 8 Eingänge (Bit) und 1 Ausgang (Byte) gibt es so etwas?

oder einen Baustein Bit zu WORD.
Also 16 Eingänge (Bit) und 1 Ausgang (WORD)

Gibt es so etwas? Meine sogar das schon mal gesehen zu haben. Aber wie es immer so ist, wenn man es brauch, findet man es nicht.

Beste Grüße
Hagen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ET200sp. 6ES7 512-1SK01-0AB0
Verwendet wird dieses aber nur im Standard Teil.

Hintergrund ist, das ich einen DB mit sämtlichen Meldungen habe und diese per PN PN Koppler schicken möchte.
Dieses will ich aber aufteilen in ein Byte Störungen, ein Byte Meldungen, usw...
 
Hi,
bevor man lange sucht selber programmieren.
So ein Baustein ist doch in 5min geschrieben und getestet.:unsure:

Gruß
Move
Ich bin auch grad am überlegen, wie ich das am besten selbst schreibe. Aber da ich nur FUP kenne, habe ich bisher keine Lösung. Oder es ist wieder so einfach, das ich nicht darauf komme.

Kann jemand helfen?
 
Ich bin auch grad am überlegen, wie ich das am besten selbst schreibe. Aber da ich nur FUP kenne, habe ich bisher keine Lösung.
Den fertigen FC LGF_MergeBitsToByte willst oder kannst Du nicht verwenden oder als Vorlage nehmen?

in der LGF gibt es LGF_MergeBitsTo..., die fassen Slice-Zugriffe als FC zusammen.
Sagt Dir der Hinweis "Slice-Zugriff" was?
Weißt Du wie man in FUP ein Bit kopiert?

Erstelle einen FC mit 8 Inputs bit0 ... bit7 (jeweils Bool) und 1 Output oder Return als Byte.
Dann kopiere die 8 Input-Bits per Slice-Zugriff in ein Temp-Byte.
Dann kopiere das Temp-Byte in den Output oder Return-Wert.
Code:
#FUP_MergeBitsToByte

         #tempByte.%X0
           +-------+
    #bit0--|   =   |
           +-------+

...

         #tempByte.%X7
           +-------+
    #bit7--|   =   |
           +-------+

           +--------+
           |  MOVE  |
#tempByte--|IN   OUT|-#FUP_MergeBitsToByte
           +--------+
Als Vorlage kannst Du den erwähnten LGF_MergeBitsToByte nehmen, hier der wesentliche Code in SCL:
Code:
FUNCTION "MergeBitsToByte" : Byte
VAR_INPUT
   bit7 : Bool;
   bit6 : Bool;
   bit5 : Bool;
   bit4 : Bool;
   bit3 : Bool;
   bit2 : Bool;
   bit1 : Bool;
   bit0 : Bool;
END_VAR
VAR_TEMP
   tempByte : Byte;
END_VAR

#tempByte.%X7 := #bit7;
#tempByte.%X6 := #bit6;
#tempByte.%X5 := #bit5;
#tempByte.%X4 := #bit4;
#tempByte.%X3 := #bit3;
#tempByte.%X2 := #bit2;
#tempByte.%X1 := #bit1;
#tempByte.%X0 := #bit0;

#MergeBitsToByte := #tempByte;

END_FUNCTION

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Folgende müsste sich relativ schmerzlos (aber mit viel copy and paste und manuellem Nacharbeiten) in FUP darstellen lassen:
Code:
// Bits in Byte speichern
IF bit0 THEN temp := 1 ; ELSE temp := 0 ; END_IF ;
IF bit1 THEN temp := temp OR 2 ; END_IF ;
IF bit2 THEN temp := temp OR 4 ; END_IF ;
IF bit3 THEN temp := temp OR 8 ; END_IF ;
IF bit4 THEN temp := temp OR 16 ; END_IF ;
IF bit5 THEN temp := temp OR 32 ; END_IF ;
IF bit6 THEN temp := temp OR 64 ; END_IF ;
IF bit7 THEN temp := temp OR 128 ; END_IF ;
byte := temp ;

// Bits aus Byte extrahieren
bit0 := (byte AND 1) = 1 ;
bit1 := (byte AND 2) = 2 ;
bit2 := (byte AND 4) = 4 ;
bit3 := (byte AND 8) = 8 ;
bit4 := (byte AND 16) = 16 ;
bit5 := (byte AND 32) = 32 ;
bit6 := (byte AND 64) = 64 ;
bit7 := (byte AND 128) = 128 ;
 
Zuletzt bearbeitet:
Den fertigen FC LGF_MergeBitsToByte willst oder kannst Du nicht verwenden oder als Vorlage nehmen?


Sagt Dir der Hinweis "Slice-Zugriff" was?
Weißt Du wie man in FUP ein Bit kopiert?

Erstelle einen FC mit 8 Inputs bit0 ... bit7 (jeweils Bool) und 1 Output oder Return als Byte.
Dann kopiere die 8 Input-Bits per Slice-Zugriff in ein Temp-Byte.
Dann kopiere das Temp-Byte in den Output oder Return-Wert.
Code:
#FUP_MergeBitsToByte

         #tempByte.%X0
           +-------+
    #bit0--|   =   |
           +-------+

...

         #tempByte.%X7
           +-------+
    #bit7--|   =   |
           +-------+

           +--------+
           |  MOVE  |
#tempByte--|IN   OUT|-#FUP_MergeBitsToByte
           +--------+
Als Vorlage kannst Du den erwähnten LGF_MergeBitsToByte nehmen, hier der wesentliche Code in SCL:
Code:
FUNCTION "MergeBitsToByte" : Byte
VAR_INPUT
   bit7 : Bool;
   bit6 : Bool;
   bit5 : Bool;
   bit4 : Bool;
   bit3 : Bool;
   bit2 : Bool;
   bit1 : Bool;
   bit0 : Bool;
END_VAR
VAR_TEMP
   tempByte : Byte;
END_VAR

#tempByte.%X7 := #bit7;
#tempByte.%X6 := #bit6;
#tempByte.%X5 := #bit5;
#tempByte.%X4 := #bit4;
#tempByte.%X3 := #bit3;
#tempByte.%X2 := #bit2;
#tempByte.%X1 := #bit1;
#tempByte.%X0 := #bit0;

#MergeBitsToByte := #tempByte;

END_FUNCTION

Harald

Tut mir leid. Nachdem ich jetzt begriffen habe, wo ich diesen LGF_MergeBitsToByte her bekomme, habe ich diesen auch verwendet.
War genau das, was ich gesucht habe.

Beste Grüße
Hagen
 
Zurück
Oben