TIA Indirekte Adressierung : 16 Bits auswerten (z.B. Sammelstörung)

smartie

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

bei unseren Anlagen (Steuerung : S7-1200) haben wir einen DB in dem wir, in Strukturen gruppiert, jeweils 16 Bit Störmeldungen für jeden Aktor reserviert haben.
Bisher haben wir die absolute Adresse des Worts mit den 16 Bits ausgelesen und auf <> 0 ausgewertet um einen Sammelstörmerker zu generieren.
Das ist zum einen nicht schön gelöst (wegen dem absoluten Zugriff auf das Wort) und zum anderen funktioniert es nicht mehr wenn der Datenbaustein auf "Optimierter Bausteinzugriff" umgestellt werden muss.

Daher habe ich zwei Fragen an euch:
a) Wie realisiert ihr eure Störungen bzw. die Auswertung der Sammelstörung
b) Wie kann man, bei indirekter Adressierung "elegant" 16 einzel adressierte Bits (jedes Bit hat einen symbolischen Namen) als Wort auswerten.

Gruß smartie
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zu b): Da du eine s7-1200 nutzt könntest du evtl. mit Slice arbeiten.

Beispiel:
Name: Störung Datentyp: INT/WORD

Erstes Bit ansprechen: Störung.X0
Erstes Byte Ansprechen: Störung.B0
So entsteht die Möglichkeit deklarierte Variablen bit-, Byte-, WORD- oder DWORD-weise anzusprechen

Weitere Informationen findest du im TIA Portal unter Hilfe und dem Suchbegriff "Slice".
 
Guten Morgen,

danke erst mal für eure Tipps.

Die Lösung mit dem Slice-Befehl hatte ich mir vor meinem Post auch überlegt. Da kann ich dann zwar einfach auf jedes einzelne Bit des WORD Störung zugreifen.
Allerdings kann ich die einzelnen Bits nicht symbolisch adressieren und im Programm (außer an der Stelle an der es gesetzt wird) nicht nachvollziehen um welche Störung es sich eigentlich handelt.

Genau genommen würde ich die Funktion genau umgekehrt benötigen um aus 16 (oder ggf. auch viel mehr) einzeln symbolisch adressierten Bits eine Sammelstörung zu generieren.

Aber was mich mal interessieren würde ist wie Ihr das mit euren Störungen (bei reiner symolischer Adressierung) macht, also wo setzt ihr die Störung und wie wertet ihr die Sammelstörung aus.

Gruß smartie
 
Wie bereits oben gesagt, erfüllt der AT-Befehl genau deine Anforderungen.
https://support.industry.siemens.co...blen-mit-dem-schlüsselwort-at-?dti=0&lc=de-WW

Du deklarierst deine Störungen z.B als Struktur 32 einzelner Bool.
Diese kannst du ordentlich symbolisch adressieren.

Die Struktur kannst du dann mit AT mit einem DWord überlagern und die Sammelauswertung machen.
Das ganze geht auch z.B. mit Arrays.

Gruß
Blockmove
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich regel das Problem mit der Nachvollziehbarkeit so, dass ich dort wo eine Störung gesetzt wird, 2 Störungsbits setze. Eines in einem DB, bzw, eines wird in einen DB mit einem Array[0..5] of Word übertragen und eines ist in einem weiteren DB drin (einmal auch normale Merker), der Zugeordnet werden kann.
Die Sammelstörung hab ich einmal mit Slice generiert, weil ich auch noch die Anzahl der Störungen (Anzahl von True Bits) in dem Array of Word wissen wollte. Mit der Abfrage auf <> 0 habe ich bisher immer die Sammelstörung gemacht, indem ich eine For- Schleife genommen habe.

Kannst auch mal hier schauen, da hatte ich ein ähnliches Problem und Harald hat da ein Stück Code reingeschrieben, das mit bei der letzten Anwendung geholfen hat.
Anzahl von True Bits in einem (mehreren) Word zählen
 
Zurück
Oben