TIA V14 SP1 - Byte to Array of Bool

-ASDF-

Level-2
Beiträge
236
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum,

Ich würde gerne ein Byte in ein Array[0..7] of Bool umwandeln. Gibt es dafür eine "einfache" Methode?

Bisher habe ich die Bits des Bytes per Slice-Zugriff einzeln zugewiesen:
"Array".[0] := "Byte".%X0;

Dies würde ich gern durch eine "einfache" umwandlungs bzw. loop Funktion ersetzen.
 
Zum Beispiel so:
VarTemp
TempInt : INT;
End_Var;

For TempInt 0 TO 7 BY 1 DO
"Array".[TempInt] := "Byte".%X[TempInt];
End_For;

Ich bin mir nur nicht sicher, ob das auch bei dem Slice Zugriff geht ( %X[TempInt]; habe ich noch nicht probiert )
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Innerhalb der Schleife einfach per variablem Index auf das Array zugreifen.
Also "Array_BOOL".["Schleifenindex"] := "Array_BYTE".["Schleifenindex"].%X0;

Ohne Slice gehts auch mit...
Array_BOOL".["Schleifenindex"] := "Array_BYTE".["Schleifenindex"] > 0;

EDIT: Mein Missverständnis. Dachte es liegt ein Array of Byte vor bei dem der Byte-Dezimalwert 0/1 (oder Bit 0 ) die Information enthält.
 
Zuletzt bearbeitet:
Klassischer Fall für "AT", also so ganze ohne Programm, Schleife, etc.
Die TIA Hilfe sollte hilfreich sein.

Andere Variante wäre ein selbstgebastelter FC, also Byte Rein, ARRAY OF BOOL raus, Zugriff wie gehabt.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn es nur die 8 Bit aus einem Byte sind, dann würde ich nicht umständlich/aufwendig eine Schleife basteln sondern einfach die 8 Kopier-Operationen (Slice to Bool) hintereinanderweg hinschreiben.

Wenn es denn unbedingt eine Schleife sein soll, dann müßte eine Bitmaske mit genau 1 Bit = 1 beginnend beim Wert 1 mit dem Byte UND-verknüpft werden ( Bit := (myByte AND Maske) <> 0 ) und dann die Bitmaske in jedem Schleifendurchlauf um 1 Bit Links-geschoben werden (oder das Byte rechts-schieben).

Je nachdem was für eine CPU verwendet wird und ob das Bool-Array in "optimiertem" Speicher liegt, würde sich auch "AT" anbieten: das Byte einfach auf den Speicherplatz des Bool-Arrays kopieren.

Harald
 
Zuletzt bearbeitet:
Um meinen Senf auch nochmal dazuzugeben: UDT Array [0..7] of Bool und diese UDT in den PLC-Variablen auf den Eingangsbereich legen und schon bist du fertig. Geht aber nicht bei den 300er Steuerungen.
 
Zurück
Oben