TIA AWL: aus 8 Bits ein Byte machen

Killermense

Level-1
Beiträge
9
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bin grad echt unfähig oder denke falsch. Eigentlich will nichts anderes als 8 Eingangsbits in ein Byte zu schreiben und das ganze in AWL.
Ja, in AWL.

Ich habe ein Bildchen gemalt im Anhang, wie ich den FB gerne aufrufen möchte.
Wäre cool, wenn mir jemand auf die Sprünge helfen könnte (mit Erklärung am Besten)

Tausend Dank im Voraus.
 
Ich sehe leider keinen Anhang, aber hier 2 möglichkeiten
Code:
U Bit0
= DB1.DBX0.0

U Bit1
= DB1.DBX0.1

U Bit2
= DB1.DBX0.2

U Bit3
= DB1.DBX0.3

U Bit4
= DB1.DBX0.4

U Bit5
= DB1.DBX0.5

U Bit6
= DB1.DBX0.6

U Bit7
= DB1.DBX0.7

L DB1.DBB0
....

Code:
U Bit0
= M0.0

U Bit1
= M0.1

U Bit2
= M0.2

U Bit3
= M0.3

U Bit4
= M0.4

U Bit5
= M0.5

U Bit6
= M0.6

U Bit7
= M0.7

L MB0
....


Wenn die Bits nebeneinander liegen, zB in einem Eingangsbyte, kann man es auch so machen:

Code:
L EB0
T MB0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würd einen FC machen den du dann öfter verwenden kannst. Bin zwar aus der Classic Welt, denke aber das müsste in TIA auch gehen.

Byte im Temp Bereich des FCs anlegen und:

L P#Temp_Byte
LAR1
U In_Bit_0
= [AR1,P#0.0]
U In_Bit_1
= [AR1,P#0.1]
..
..
L Temp_Byte
T Byte_Out
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du im TIA Arbeitest würde ich die Slice Funktion verwenden
Code:
      A     #Bit1
      =     #Byte.%X0
      A     #Bit2
      =     #Byte.%X1
      A     #Bit3
      =     #Byte.%X2
      A     #Bit4
      =     #Byte.%X3
      A     #Bit5
      =     #Byte.%X4
      A     #Bit6
      =     #Byte.%X5
      A     #Bit7
      =     #Byte.%X6
      A     #Bit8
      =     #Byte.%X7
 
Ich würde im TIA Portal wie El Cattivo vorgeschlagen den Slice Zugrif nehmen und das als FC programmieren, der als Funktionswert nicht VOID sondern das Byte liefert.
Das hat den Vorteil, dass ich in SCL das Ergebnis auch in einem Ausdruck verwenden kann.
z.B.

IF "Bits_to_Byte"(in_Bit1 := #x1,
in_Bit2 := #x2,
in_Bit3 := #x3,
in_Bit4 := #x4,
in_Bit5 := #x5,
in_Bit6 := #x6,
in_Bit7 := #x7,
in_Bit8 := #x <>0 THEN
;
END_IF;

In den anderen Sprachen schadet es auch nichts. ;)
 
Zurück
Oben