Beim Programmieren einer SPS stehen verschiedene Blockstrukturen zur Verfügung. Dazu gehören Funktions-FCs, Funktionsblöcke FBs und Datenblöcke DBs. Diese Blöcke sind sehr praktische Tools, mit denen Sie Ihre SPS-Logik besser gestalten und Ihren Code lesbarer und einfacher nachvollziehbar und debuggbar machen können.
In früheren Artikeln haben wir die FCs und FBs besprochen. In diesem Artikel werden wir die Datenblock-DBs besprechen, genauer gesagt den globalen Datenblock.
Inhalt:
- Was ist ein Datenblock-DB?
- Typen von Datenblöcken.
- Was ist ein globaler Datenblock?
- Erstellen eines globalen Datenblocks?
- Arbeiten mit globalen Datenblöcken.
- Beispielsimulation.
Was ist ein Datenblock?
Ein Datenblock-DB ist ein Speicherbereich, der zum Speichern der Werte der Parameter verwendet wird, die während der Ausführung des SPS-Programms geschrieben werden.
Im Gegensatz zum Codeblock enthält der Datenblock-DB nur Variablendeklarationen. Er hat keine Netzwerke oder Anweisungen wie ein FC oder ein FB. Die Struktur des DB wird dadurch definiert, wie viele Variablen Sie im Datenblock deklariert haben.
Datenblocktypen in der SPS
Es gibt zwei Arten von Datenblöcken:
- Globale Datenblöcke
- Instanzdatenblöcke
- ARRAY-Datenblöcke
Globale Datenblöcke
Wie der Name schon sagt, wird der globale Datenblock global für die gesamte SPS-Logik deklariert. Er ist keinem bestimmten Codeblock zugewiesen. Sie können von jedem Codeblock an beliebiger Stelle in Ihrer SPS-Logik auf die Werte eines globalen Datenblocks zugreifen. Ein globaler Datenblock enthält nur statische Tags.
Die Struktur des globalen Datenblocks kann frei definiert werden. In der Deklarationstabelle für Datenblöcke deklarieren Sie die Datenelemente, die im globalen Datenblock enthalten sein sollen.
Instanzdatenblöcke
Der Instanzdatenblock wird direkt einem Funktionsblock-FB zugewiesen, unabhängig davon, ob dieser Funktionsblock intern in der SPS definiert ist, wie Timer und Zähler, oder ob es sich um benutzerdefinierte Funktionsblöcke (FBs) handelt.
Die Struktur eines Instanzdatenblocks kann nicht frei definiert werden, sondern wird durch die Schnittstelle des Funktionsblocks bestimmt. Der Instanzdatenbaustein enthält genau die Bausteinparameter und Variablen, die in der Funktionsbausteinschnittstelle deklariert sind.
Sie können im Instanzdatenbaustein jedoch instanzspezifische Werte definieren, z. B. Startwerte für die deklarierten Variablen.
ARRAY-Datenbausteine
ARRAY-Datenbausteine sind nur für S7-1500-CPUs verfügbar und sind globale Datenbausteine, die aus einem ARRAY bestehen. Dieses ARRAY kann auf einem beliebigen Datentyp basieren.
Beispielsweise ist ein ARRAY eines PLC-Datentyps (UDT) möglich. Der DB enthält neben dem ARRAY keine anderen Elemente. Aufgrund ihrer flachen Struktur erleichtern ARRAY-Datenbausteine den Zugriff auf die ARRAY-Elemente und deren Übertragung an aufgerufene Bausteine.
Der Abschnitt „Verschiebeoperationen“ der Task Card „Anweisungen“ bietet Möglichkeiten zur Adressierung von ARRAY-DBs.
In diesem Artikel werden wir uns mit dem globalen Datenbaustein befassen und die anderen beiden Typen in separaten Artikeln besprechen.
Was ist ein globaler Datenbaustein?
Datenbausteine werden zum Speichern von SPS-Programmdaten verwendet. Das heißt, sie enthalten variable Daten, die vom Anwenderprogramm verwendet werden. Globale Datenbausteine speichern Daten, die von allen anderen Bausteinen verwendet werden können.
Die maximale Größe von Datenbausteinen variiert je nach CPU. Die Struktur globaler Datenbausteine können Sie frei definieren.
Sie haben auch die Möglichkeit, PLC-Datentypen (UDT) als Vorlage für die Erstellung globaler Datenbausteine zu verwenden.
Jeder Funktionsbaustein FB, jede Funktion FC oder jeder Organisationsbaustein OB kann die Daten aus einem globalen Datenbaustein lesen oder selbst Daten in einen globalen Datenbaustein schreiben. Diese Daten bleiben auch nach Verlassen des Datenbausteins im Datenbaustein erhalten. Siehe Bild 1.
Bild 1 – Zugriff auf globalen Datenbaustein
Wie Sie dem vorherigen Bild entnehmen können, kann auf einen globalen Datenbaustein von jedem Codebaustein innerhalb des SPS-Programms aus zugegriffen werden, während auf den Instanzdatenbaustein nur der zugehörige Funktionsbaustein zugreifen kann.
Erstellen eines globalen Datenbausteins
Sie erstellen einen globalen Datenbaustein auf die gleiche Weise wie einen Funktions-FC oder einen Funktionsbaustein FB. Fügen Sie Ihrem Projektbaum einen neuen Block hinzu. Siehe Abbildung 2.
Abbildung 2 – Erstellen eines globalen Datenblocks
Lassen Sie uns einige Variablen im globalen Datenblock deklarieren.
Klicken Sie dazu auf „Neu hinzufügen“ unter „Name“, schreiben Sie den gewünschten Variablennamen und wählen Sie dann den Variablendatentyp aus. Siehe Abbildung 3.
Abbildung 3 – Variablendeklaration in einem globalen Datenblock
Arbeiten mit einem globalen Datenblock
- Deklarieren eines Tags.
Wir haben bereits in Abbildung 3 gezeigt, wie man ein Tag/eine Variable deklariert.
- Definieren eines Startwerts
Der Startwert eines Tags ist ein von Ihnen definierter Wert, den das Tag nach einem CPU-Start annimmt. Der Wert muss dem Datentyp des Tags entsprechen und sollte den Bereich des Datentyps nicht überschreiten. Siehe Abbildung 4.
Das Tag nimmt beim Start den definierten Wert an, sofern es nicht als remanent deklariert wurde.
Bild 4 – Definieren des Startwerts Ihrer Tags
Wenn ich also den Startwert von Tank1Level auf einen beliebigen Wert ungleich Null setze, wird dieser Wert beim nächsten Neustart der SPS angewendet. Siehe Abbildung 5.
Abbildung 5 – Definieren eines Startwerts für Ihre Variablen
- Beibehalten von Variablen in globalen Datenbausteinen
Um Datenverlust bei einem Stromausfall zu verhindern, können Sie die Daten als remanent markieren. Diese Daten werden in einem remanenten Speicherbereich gespeichert.
Die Optionen zum Einstellen des Retains hängen von der Art des Datenbausteins und der Art des eingestellten Bausteinzugriffs ab. Siehe Abbildung 6.
Abbildung 6 – Beibehaltungsoption in globalen Datenbausteinen
Wie Sie in Abbildung 6 sehen, ist die Variable Tank2Level auf einen Retain-Wert eingestellt, was bedeutet, dass selbst wenn die SPS angehalten hat oder es einen Stromausfall gab, Tank2Level dieselben Daten gespeichert hat, wenn die SPS wieder eingeschaltet wird. Es wird nicht auf den Startwert zurückgesetzt.
- Zugriff auf/von HMI
In einem globalen Datenblock können Sie festlegen, ob eine Variable in den HMI-Tag-Tabellen sichtbar sein kann oder nicht. Sie können auch festlegen, ob diese Variable vom HMI gelesen oder geschrieben werden kann. Siehe Abbildung 7.
Abbildung 7 – Zugriff vom HMI
Die Standardeinstellung für jede deklarierte Variable in einem globalen Datenblock ist, dass sie vom HMI aus aufgerufen, gelesen und geschrieben werden kann. Wenn Sie diese Funktion für eine bestimmte Variable deaktivieren möchten, müssen Sie die Zugriffsoption für diese Variable deaktivieren.
Beispielsimulation
Bisher haben wir einen globalen Datenblock erstellt und einige Variablen darin deklariert.
Jetzt werden wir versuchen, eine Simulation des Programms auszuführen und zu sehen, ob wir besser verstehen können, was ein globaler Datenblock ist.
Nachfolgend sind zwei SPS-Simulationen aufgeführt.
Testen der Startwerte einer Variablen
Sehen Sie sich die folgende Animation an, die den Startwert einer Variablen in einem globalen Datenblock erklärt.
Animation 1
Animation 1 Erklärung:
- Die Startwerte der Tankfüllstandsparameter sind Null, Sie können im Video sehen, dass sie durch den Simulationsbildschirm geändert werden.
- Wenn die SPS neu gestartet, aus- und wieder eingeschaltet wird, sehen Sie, dass die Werte auf die Startwerte zurückgesetzt werden, die Null sind.
- Danach wurden die Startwerte auf 500, 32654 bzw. -356 geändert, und beim Neustart der SPS wurden die Werte auf die neuen Startwerte geändert.
- Beachten Sie, dass wir beim Ändern der Startwerte unsere Logik erneut auf die SPS herunterladen mussten; Sie müssen das jedes Mal tun, wenn Sie eine Änderung an Ihrer Logik vornehmen.
Testen der Beibehaltungsoption von Variablen in der globalen Datenbank
Sehen Sie sich die folgende Animation an, die die Beibehaltungsoption einer Variablen in einem globalen Datenblock erklärt.
Animation 2
Animation 2 Erklärung:
- Zuerst werden Sie feststellen, dass die Eigenschaft „Retain“ von Tank2Level jetzt aktiv ist.
- Sie sehen im Video, wie die Werte der 3 Tanks geändert werden.
- Wenn die SPS angehalten und dann wieder gestartet wird, werden Tank1Level und Tank3Level auf den Startwert 0 zurückgesetzt, aber Tank2Level behält seinen Wert von -22938.
Fazit
Auf einen globalen Datenblock kann von überall und von jedem Block aus zugegriffen werden, der im SPS-Programm vorhanden ist. Sie können in einer globalen Datenbank so viele Variablen deklarieren, wie Sie möchten.
Die bewährte Vorgehensweise besteht darin, separate Datenblöcke für die verschiedenen Abschnitte Ihrer Logik zu erstellen, damit Ihre Logik sehr einfach zu befolgen ist. Beispielsweise ein separater Datenblock für alle Variablen, die von einer HMI gelesen oder geschrieben werden müssen.