Makrothek
S7-1200 betrifft S7-1200

Problembeschreibung:

Seit Einführung der optimierten Bausteine mit der S7-1200 ist es nicht mehr so einfach, direkt auf Speicherbereiche zuzugreifen und diese zu manipulieren, da die Speicheradressierung erst zur Laufzeit festgelegt wird.

Zwar wird vom TIA-Portal und der S7-1200 die Adressierung einzelner Bits einer deklarierten Variable angeboten, dies gilt jedoch nur für Byte-, Word- oder DWord-Variablen. Wie kann man nun z. B. ein bestimmtes Bit in einer Variable vom Typ String auslesen bzw. setzen?

Funktionierende Lösung

Die hier vorgestellte Lösung sollte auch auf andere ähnliche Variablentypen übertragbar sein.

Um ein Bit in einem String auszulesen oder zu setzen, muss ein kleiner Trick angewandt werden. Einzelne Bytes eines Strings können direkt über den Index adressiert werden. Über die Adressierung #Text[2] zum Beispiel kann das zweite Zeichen in einem String angesprochen werden. Dieses Zeichen speichert man dann in einer temporären Zwischenvariable vom Typ BYTE. Nun kann auf diese temporäre Variable die Bit-Adressierung angewandt werden.

Beispiele

Im ersten Beispiel wird ein bestimmtes Bit (x0) im 4ten Zeichen einer Stringvariable abgefragt und entsprechend die temporäre Variable #Schalter gesetzt.
Bit lesen

Im zweiten Beispiel wird entsprechen dem Signal #Schalter ein bestimmtes Bit (hier x0) im 4ten Zeichen der Stringvariable gesetzt.
Bit schreiben

Kombiniert man beide Beispiele, so kann jedes beliebige Bit in einem String unabhängig angesprochen, ausgewertet und bearbeitet werden.

Der Einsatz solch einer Programmierung ist z.B. gut für beschleunigte Webseiten-Steuerung der S7-1200 geeignet. Hierfür gibt es einen separaten Beitrag.