Beitragstyp: FAQ, Beitrags-ID: 18771489, Beitragsdatum: 08.02.2007
(0)
Bewerten

Wie erfolgt die Überwachung eines 32-Bit Feldes, die Auswertung der Bitposition eines aktiven Bits und der Zugriff auf einzelne Bits eines Doppelwortes?

  • Beitrag
  • Betrifft Produkt(e)

Anleitung:  
Die nachstehende Tabelle enthält die Beschreibungen, wie Sie die Bitposition des aktiven Bits in einem Merkerwort auswerten, ein 32-Bit Feld auf kommende oder gehende Ereignisse überwachen können und wie Sie auf die einzelnen Bits einer Variablen vom Typ DWORD zugreifen können, die in einem Codebaustein deklariert ist.
 

Nr. Beispiele:
1 Auswertung der Bitposition des aktiven Bits in einem Merkerwort
Für einen sequentiellen Prozess soll in STEP 7 eine Ablaufsteuerung mittels eines Merkerwortes programmiert werden. In diesem Merkerschrittwort ist entsprechend dem gerade aktiven Schritt der Schrittkette immer nur ein Bit aktiv. Mit der Bitzählung kann der aktive Schritt z.B. in ProTool mittels Symbollisten als Klartext visualisiert werden. Für die Visualisierung ist es von Vorteil, die Bitposition und damit den gerade aktiven Schritt, als Integer-Wert zu haben. Wenn immer nur ein Bit gesetzt ist, ergibt sich folgender Zusammenhang:
  • 2X = Y
    X = lnY / ln2

Dabei stellt X die Bitposition dar und Y ist der Wert des Merkerwortes. Um die Bitposition zu erhalten, muss X dann noch um 1 erhöht werden. Zusätzlich müssen die beiden Sonderfälle berücksichtigt werden, dass der Wert Y nicht Null und nicht negativ (Vorzeichen) sein darf. Nachstehend kann ein Programmbeispiel in AWL für die Ermittlung der Bitposition gemäß der oben beschriebenen Definition heruntergeladen werden.

Der Download "bitpos_c" enthält die oben beschriebene Funktionalität in einer Funktion FC1 und einen Beispielaufruf im OB1.

bitpos_c.zip ( 28 KB )

2 Überwachung eines 32-Bit Feldes
Um ein 32-Bit Feld auf kommende oder gehende Ereignisse zu überwachen, können Sie jedes zu überwachende Bit auf positive und negative Flanken abfragen. So wie im oben beschriebenen Beispiel wird auch hier das Wort als Integer definiert und das gesetzte Bit berechnet.

Genau so arbeitet dieses Beispielprogramm für ein Doppelwort. Die Programmierung ist wie folgt realisiert:

  1. Um bei beliebig vielen gesetzten Bits das Bit herauszufiltern, das in diesem Zyklus seinen Zustand geändert hat, wird eine EXKLUSIV ODER DOPPELWORT-Verknüpfung zwischen dem Wert des letzten Zyklus und dem des aktuellen Zyklus verwendet. Eine exklusive Veroderung ergibt nur das Bit, das ausschließlich bei einem der beiden Werte auftritt. Durch eine weitere UND-Abfrage wird ermittelt, ob es sich bei dem Bit um ein kommendes oder ein gehendes Signal handelt.
  2. Ist bei einem Doppelinteger nur ein Bit gesetzt, gilt für den DI-Wert Y die Gleichung: Y = 2X
    Die Bitposition ergibt sich mit der Inkrementierung: X + 1. Den X-Wert erhalten Sie aus der Umwandlung: X = lnY / ln2.

Der Download "Monitor_de" enthält ein STEP 7 Projekt mit der oben beschriebenen Funktionalität in einem Funktionsbaustein FB1 und einen Beispielaufruf im OB1. Um die Funktionalität zu testen, sind noch zwei Beispiele im OB1 programmiert.

Monitor_de.zip ( 41 KB )  

3 Zugriff auf die einzelnen Bits einer Variablen vom Typ DWORD
Eine Variable kann immer nur so angesprochen werden, wie diese im Baustein definiert ist. Wurde eine Variable vom Typ "DWORD" deklariert, dann kann auf diese Variable auch nur als "DWORD" zugegriffen werden und nicht als Bit.

Sie können aber auf die einzelnen Bits der Absolutadressen zugreifen. Dies ist bei Eingängen, Ausgängen, Merkern und Variablen in Datenbausteinen möglich. Wenn die Absolutadressen bekannt sind, dann kann direkt über die Absolutadresse auf die einzelnen Bits der Variable zugegriffen werden.

Bild 01 zeigt ein Beispiel, wie der Inhalt der statischen Variable "Variable" vom Typ "DWORD" zuerst in den Akku 1 geladen und anschließend zur Variablen "ValueRange" im Datenbaustein DB5 transferiert wird. Die Adresse der Variable "ValueRange" im DB5 ist 0 (DB5.DBD0 vom Typ "DWORD"). Hier kann nun z.B. mit der Anweisung U DB5.DBX 0.1 bitweise auf die Variable zugegriffen werden.


Bild 01

Hinweis:
Um einen Zugriff über Absolutadressen zu vermeiden, kann der bitweise Zugriff auf eine Variable auch mit Lokalvariablen realisiert werden. Dadurch ergeben sich weitere Vorteile,

  • die Lösung funktioniert in allen Typen von Codebausteinen, der Code bleibt lesbar,
  • es ist kein DB nötig,
  • höhere Performance durch lokale Zugriffe,
  • die Lösung ist auch nach Strukturänderungen bzw. Erweiterungen ohne weitere Anpassungen funktionsfähig.

Definieren Sie 32 TEMP-Variablen mit dem Datentyp BOOL, um eine Variable vom Typ "DWORD" bitweise zu manipulieren. Mit den Anweisungen im folgenden Beispiel wird die zu manipulierende Variable/Parameter (hier MD 10) in die temporären Variablen "bitvar_0" bis "bitvar_31" transferiert. Über die 32 Bitvariablen kann die Variable mittels symbolischer Adressierung manipuliert und die Ergebnisse gespeichert werden.


Bild 02

Bitte beachten Sie, dass temporäre Variablen nur während der Bearbeitung des Bausteines gültig sind und vor dem ersten lesenden Zugriff initialisiert werden müssen.

Kopieren Sie die entsprechende Exe-Datei in ein separates Verzeichnis und starten Sie die Datei anschließend per Doppelklick. Das STEP 7 Projekt wird dann automatisch mit allen Unterverzeichnissen entpackt und Sie können das Projekt mit dem SIMATIC Manager öffnen und bearbeiten.

Hinweis:
Beachten Sie auch bitte die unterschiedlichen typischen Ausführungszeiten des LN (natürlicher Logarithmus) bei den CPU-Baugruppen.
 

CPU-Baugruppen

Typische Ausführungszeit in µs

CPU312 455
CPU313, CPU314 < 650
CPU315, CPU315-2, CPU316-2 < 650
CPU317 14,97
CPU318-2 35
CPU412 63
CPU414 35
CPU416 33
CPU417 35

Suchbegriffe:
Merkerschrittkette, Ablaufkette

Fehlerdetails
Detailierte Fehlerbeschreibung
Helfen Sie uns, den Online Support zu verbessern.
Die aufgerufene Seite kann nicht angezeigt werden. Bitte kontaktieren Sie den Webmaster.
Kontakt zum Webmaster