TIA TIA V13 SCL Bit aus Bytevariable extrahieren

Magni

Level-2
Beiträge
313
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin moin,

ich habe schon ein wenig über dieses Thema im Forum gelesen, aber leider brachte es mir keine zufriedenstellende Lösung. Deshalb hoffe ich auch Eure Hilfe.

Folgendes Problem: An einer Input-Variablen liegt ein Byte im Format 16#0; nun möchte ich jedes Bit einzeln abfragen können.

Dazu habe ich das Byte in Word gewandelt "#Störungsword := BYTE_TO_WORD(#Störungslogik); //-- Byte in Word wandeln für Störungslogik" (habe ich hier schonmal gelesen) und anschließend

ATT(DATA:=#Störungsword,
TABLE:=#Störunglogic_1);

in eine Tabelle gelegt. #Störungslogic_1 : Array[0..15] of Bool

Jetzt dachte ich #Störunglogic_1[0] auslesen zu können, aber es funktioniert nicht. Wie komme ich an das Bit?

Wäre über eine Antwort sehr dankbar.
Danke Heiko
 
So in etwa (Deklaration):
Code:
      Störungslogik  : Byte;
      myArray  AT Störungslogik : Array[0..7] of Bool;

Also Stichwort "AT" in der Hilfe nachlesen
 
So in etwa (Deklaration):
Code:
      Störungslogik  : Byte;
      myArray  AT Störungslogik : Array[0..7] of Bool;

Also Stichwort "AT" in der Hilfe nachlesen

Er nimmt mir dem Operand "AT" nicht ab "Operand ist nicht definiert."

AAAhhh.. ich nähere mich dem Ziel.
 
Zuletzt bearbeitet:
Zum Slice versuche mal ein % hinzuzufügen:

Code:
Störungslogik.%X5
 
Die AT Deklaration kann nur verwendet werden, wenn der Baustein als "nicht" optimierter Baustein verwendet wird. Mit dem Slice-Befehlen sollte es funktionieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die AT Deklaration kann nur verwendet werden, wenn der Baustein als "nicht" optimierter Baustein verwendet wird. Mit dem Slice-Befehlen sollte es funktionieren.

Also geht AT schonmal nicht, da ich für eine 300-er CPU schreibe.

Der Slice Befehlt bezieht auf mein Eingangsbyte "Störungslogic"? Also wäre die entsprechende Bitabfrage dann #Störungslogic.X0 ? Das will er mir auch nicht abnehmen...
 
AT sollte für die 300-er in einem SCL-Baustein aber gehen.
Slice wird wohl mit bei den neuen (1200+1500) SPS gehen.
 
Mit dieser "Um eine Variable zu überlagern, deklarieren Sie eine weitere Variable direkt
nach der zu überlagernden Variable und kennzeichnen sie mit dem Schlüsselwort
"AT". " Geschichte brauche ich das "AT" nicht nochmal extra aufzurufen. Das geschieht quasi automatisch... Feine Sache.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie immer zuerst die Grundangabe: Welche SPS/CPU soll programmiert werden?
Dann braucht man als Helfer nicht rätseln, ob die CPU überhaupt "Slice" kann und ob Slice oder AT mit optimierten DB funktioniert ...

Was immer in SCL geht, besonders bei symbolischer Verarbeitung: Bits ausmaskieren durch UND-Verknüpfen mit einer Bitmaske
Code:
  TestBool := (TestByte AND B#2#00001000) <> 0 ;

Bei S7-300 geht aber auch die Geschichte mit dem AT problemlos.

Harald
 
Wie immer zuerst die Grundangabe: Welche SPS/CPU soll programmiert werden?
Dann braucht man als Helfer nicht rätseln, ob die CPU überhaupt "Slice" kann und ob Slice oder AT mit optimierten DB funktioniert ...

Was immer in SCL geht, besonders bei symbolischer Verarbeitung: Bits ausmaskieren durch UND-Verknüpfen mit einer Bitmaske
Code:
  TestBool := (TestByte AND B#2#00001000) <> 0 ;

Bei S7-300 geht aber auch die Geschichte mit dem AT problemlos.

Harald

Das ist richtig.... Wenn ich aber ein B#2#00101010 Muster habe und will wissen ob Bit 3 true ist... dann funktioniert das m.E. nicht oder?
 
Du müsstest für jedes Bit eine solche Verknüpfung schreiben.

Code:
  TestBool_1 := (TestByte AND B#2#00000001) <> 0 ;
  TestBool_2 := (TestByte AND B#2#00000010) <> 0 ;
 
Zurück
Oben