Status-Byte aus Bits zusammen setzen

FinalMistery

Level-1
Beiträge
37
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

In meinem AWL Programm, entstehen im Laufe eines Durchlaufes verschiedene Stati. Diese setze ich im Programm in boolschen Variablen.

Am ende liegen mir dann die Bools "SatusByte_bit0" bis "StatusByte_bit7" vor. Nun will ich diese 8 bit in einer Variable des Typs Byte zusammen fassen. Dass ich dieses Byte über die Peripherie versenden kann.

Wie gelingt es mir diese ByteVariable zu erstellen?

würde mich sehr über eure Hilfe freuen

Beste Grüße
FinalMistery
 
liegen die bits hintereinander?
ist statusbit 0 auch als Adresse Bit0?

fall beides zutrifft, kannst du einfach:

Code:
l statusbyte
t ....
schreiben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wo entstehen diese StatusBits?

Nur in einem Baustein oder in mehreren?

Was ist ein Wort?
Ein Wort besteht aus 2 Byte's (HI und LOW-Byte)
Ein Byte besteht aus 8 Bit's (Bit 0 bis Bit 7)

Jetzt hast Du mehrere Möglichkeiten der Adressierung!

Mal als Beispiel im Merkerbereich:

Merker-Byte 10
MB 10 // Symbolisch Status_Byte
besteht aus:
M 10.0 // Status_Bit_01
M 10.1 // Status_Bit_02
...
M 10.7 // Status_Bit_08

im Merkerbereich kannst Du allem (Bit's und Byte) einen symbolischen Namen geben, das geht nicht direkt im Datenbaustein! Dann kannst Du das Ganze auch in den Lokaldaten eines Bausteins machen, etc.
 
leider liegen sie nciht hinertereinander im Adressereich und auch nicht am Anfang.
Gibt es ein Möglichkeit mein Vorhaben zu realiesieren auch wenn die die Variablen dort liegen lasse, wo sie sind und auch bei eventuellen Verschiebungen die Funktionalität beibehalten wird?
 
Wo entstehen diese StatusBits?

Nur in einem Baustein oder in mehreren?

Was ist ein Wort?
Ein Wort besteht aus 2 Byte's (HI und LOW-Byte)
Ein Byte besteht aus 8 Bit's (Bit 0 bis Bit 7)

Jetzt hast Du mehrere Möglichkeiten der Adressierung!

Mal als Beispiel im Merkerbereich:

Merker-Byte 10
MB 10 // Symbolisch Status_Byte
besteht aus:
M 10.0 // Status_Bit_01
M 10.1 // Status_Bit_02
...
M 10.7 // Status_Bit_08

im Merkerbereich kannst Du allem (Bit's und Byte) einen symbolischen Namen geben, das geht nicht direkt im Datenbaustein! Dann kannst Du das Ganze auch in den Lokaldaten eines Bausteins machen, etc.

Die Daten liegen im Instanzbaustein eines FB's also mit Merkern schwer zu realisieren
 
Code:
IDB:
 
stat Byte0 Byte
stat SatusByte_bit0 bool
stat SatusByte_bit0_old bool
stat SatusByte_bit1 bool
stat SatusByte_bit1_old bool
stat SatusByte_bit2 bool
stat SatusByte_bit2_old bool
stat SatusByte_bit3 bool
stat SatusByte_bit3_old bool
.
.
.


an für sich kann man das einfach um schriben und absolut adressieren. Aber da der Baustein nach seiner Fertigstellung zur Anwendung an andere Benutzer geht, soll er ausbaubarsein, auch in der Hinsicht, dass er weitere Variablen im IDB hinzufügen kann. Ohne die Adressierungen anpassen zu müssen.

Gäbe es die Möglichkeit, dass ich die Bits in ein Array oder Struktur schreibe mit der Länge 8 und datentyp Bool und dann über die symbolische Adressierung an das "gewünsche Byte" komme.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
leider liegen sie nciht hinertereinander im Adressereich und auch nicht am Anfang.
Gibt es ein Möglichkeit mein Vorhaben zu realiesieren auch wenn die die Variablen dort liegen lasse, wo sie sind und auch bei eventuellen Verschiebungen die Funktionalität beibehalten wird?

Wie wärs mit:

U DeinStatusBit1
= M10.0

U DeinStatusBit2
= M10.1

Und alle sind dann im MB 10
 
In so einem Fall mache ich das über indirekte Adressierung.
Ich deklariere im Temp-Bereich ein Byte #status

Dann lade ich die Adresse von #status und adressiere auf die Bit:

Code:
      L     P##status
      LAR1  
      L     0
      T     LB [AR1,P#0.0]    //erst einmal löschen

      U     #ENDLAGE_G
      =     L [AR1,P#0.0]

      U     #ENDLAGE_A
      =     L [AR1,P#0.1]

      UN    #ENDLAGE_G
      UN    #ENDLAGE_A
      =     L [AR1,P#0.2]

      U     #STOERMELDUNG
      =     L [AR1,P#0.3]

      UN    #FRG
      O     
      U     #GRUNDFAHRT
      UN    #GRUNDBEDINGUNG
      =     L [AR1,P#0.4]

      U     #AUSGANG_A
      =     L [AR1,P#0.7]

      L #status
      T #outStatus

Noch schöner geht es, wenn du als OUT oder IN_OUT eine Struktur mit deinem Byte definierst, die die einzelnen BiTs enthält. Dann kannst du im FC/FB direkt mit den definierten Namen in der Struktur arbeiten und außen an den FC/FB einfach ein Byte mit dieser Struktur (definiert in einem DB) anlegen.
 
Zurück
Oben