Strukturdefinitionen
Strukturen beschreiben in der VisiWin Prozessanbindung einen zusammenhängenden Speicherbereich in der SPS, in dem einzelne Prozessvariablen gleicher oder unterschiedlicher Datentypen aufeinander folgen.
- Regler: Die einzelnen Reglerparameter werden in einem physikalisch zusammenhängenden Speicherbereich abgebildet.
- Rezepte: Alle Werte, die z. B. eine Chargenproduktion parametrieren, werden nacheinander im SPS-Speicher angeordnet.
- Anlagenkomponenten: Besteht die zu visualisierende Maschine aus mehreren (ggf. auch baugleichen) Komponenten, deren Funktion jeweils auf einer einzelnen Applikationsseite (Formular) dargestellt wird, sollten entsprechende Speicherblöcke vom SPS-Programmierer vorgesehen werden.
- Ist auf ein oder mehrere Elemente einer Struktur eine Leseanforderung aktiv, werden alle Elemente der Struktur durch einen blockweisen Zugriff aus der SPS gelesen.
- Das Schreiben auf ein Strukturelement wird in einem Protokollrahmen nur auf die entsprechende Speicherzelle in der SPS ausgeführt.
Im obigen Beispiel bilden die Prozessvariablen „Flags“, „Value“, „Diff“, „Int“ und „Prop“ einen zusammenhängenden Speicherbereich in der SPS. In der Visualisierung wird beim Lesen der gesamte Datenblock über einen Protokollrahmen geholt. Im Variablenserver werden die gelesenen Bytes den entsprechenden Variablen im Prozessabbild zugeordnet. Von hier aus werden die Werte (z. B.. über Steuerelementanbindungen) auf der Visualisierungsoberfläche abgebildet. Wird ein Wert im Rahmen der Visualisierungsapplikation geändert, berechnet der Variablenserver die Adresse für den Schreibauftrag über den Offset der Variablen innerhalb der Struktur und der Startadresse, also der ItemID der Variablendefinition.
Es obliegt immer dem SPS-Programmierer, die Prozessvariablen sinnvoll in Datenblöcken anzuordnen. Er hat damit entscheidenden Einfluss auf die Performance der Kommunikation zwischen SPS und Visualisierung, da Strukturen als Datenblöcke ausgetauscht werden.
Dem SPS-Programmierer stehen zur blockweisen Anordnung der Prozessvariablen verschiedene Mittel zur Verfügung:
- Definition von Strukturen in der SPS (z. B. CoDeSys, Allen Bradley): Der Zugriff ist hier üblicherweise auf die gesamte Struktur oder auf die einzelnen Elemente möglich.
- Deklarationsreihenfolge innerhalb eines Datenbausteins (z. B. STEP 7): Nacheinander deklarierte Variablen belegen hier einen zusammenhängenden Speicherbereich.
- Deklaration von Variablenfeldern: Sicherlich die unkomfortabelste Lösung, weil dem SPS-Programmierer nur noch der indizierte Zugriff auf die Feldelemente zur Verfügung steht und er damit die Auflösung in die verschiedenen beinhalteten Datentypen selbst verwalten muss.
- VisiWin Treiber: Verwendung von Strukturen nahezu zwingend erforderlich. Die Treiber kennen keine Blockung/keine Protokolloptimierung. Variablen, die nacheinander in einem physikalisch zusammenhängenden Speicherbereich angeordnet sind, können als Block (Byte-/Wort-Array) übertragen werden. In der Visualisierung werden über die Strukturdefinition die einzelnen Bytes wieder den entsprechenden Datentypen zugeordnet.
- OPC-Server: Ein als Byte-Array übertragener Speicherbereich wird in der Visualisierung über eine Strukturdefinition in Variablen aufgeteilt. Nicht immer zwingend notwendig, wenn z. B. der OPC-Server intern eine Blockung (Zusammenfassung der einzelnen Lese-/Schreibaufträge zu Datenblöcken) unterstützt. Auch muss der OPC-Server die Übertragung als Byte-Array unterstützen.
- VisiWin(.NET) Treiber: Bei Treibern, die keine Blockung unterstützen, kann der Datenaustausch wie bei den klassischen VisiWin Treibern optimiert werden. Ob der Treiber eine Blockung unterstützt, wird in der treiberspezifischen Hilfedatei aufgeführt.
In der Entwicklungsumgebung sind Strukturen als Datentypvorgaben auf Variablen anzuwenden, d. h. die im Projekt definierten Strukturen erweitern die Liste der einfachen Datentypen von Prozessvariablen. Die Projektierung gliedert sich in zwei Schritte:
| Definition der Struktur | Im VisiWin Projektexplorer wird eine Struktur definiert. Eine
Struktur beinhaltet im Wesentlichen einen Namen und natürlich Elemente,
die die elementaren Datentypen verwenden und damit den Aufbau des
Datenblocks bestimmen. Wird die Länge der einzelnen Elemente (in Bytes)
aufsummiert, muss das Ergebnis der Datenblocklänge in der SPS
entsprechen.![]() |
|---|---|
| Anlegen einer Variablen | Innerhalb des entsprechenden Kommunikationskanals ist eine Variable
anzulegen. Die ItemID der Prozessvariablen legt die Startadresse des
Datenblocks in der SPS fest. Über die Auswahl der Struktur im Feld
Datentyp wird die Lage der einzelnen
Variablen im Datenblock bestimmt.![]() |

- Strukturen dürfen geschachtelt werden, d. h. ein Strukturelement darf auch vom Datentyp einer Struktur sein. Die maximal Verschachtelungstiefe beträgt 10.
- Bei der Definition der Strukturen und der Datenblöcke ist das sogenannte Alignment (die Verschiebung von Speicherzellen auf gerade Adressen, häufig entsteht z. B. ein Loch im linearen Speicherbereich, wenn ein Wort (VT_I2) eigentlich auf eine ungerade Adresse geschoben werden soll, weil es auf ein Byte auf einer geraden Adresse folgt) in der SPS zu beachten. Strukturdefinitionen in VisiWinNET dürfen Löcher (quasi nicht belegte Bytes) enthalten. Über den Parameter Ordnungsnummer als Byteoffset in der Strukturdefinition kann der Offset eines Elements direkt als Byteoffset angegeben werden.
- Eine weitere Problematik ist die SPS-spezifische Interpretation des „Most Significant Byte“ in Variablen, die aus mehreren Bytes bestehen. Zum Tauschen der Bytes (z. B. in Worten) werden verschiedene Parameter in der Definition des Kommunikationskanals angeboten. Diese Parameter gelten sowohl für einzelne Variablen als auch für Strukturelemente.
FAQ
Was ist der Unterschied zwischen einem Feld und einer Struktur?
Während Variablenfelder nur Elemente des gleichen Datentyps enthalten können, ist eine Struktur ein Mix aus Elementen unterschiedlicher Datentypen.
Warum sind die beiden Worte in meinem als VT_I4 definierten Strukturelement offensichtlich vertauscht?
Das typische Datenorganisationsproblem. Manche SPS-en organisieren die beiden 16-Bit-Worte eines Langwortes aus der Perspektive des Betriebssystems falsch herum. Eine entsprechende Einstellung zur Korrektur dieses Fehlers befindet sich A) entweder in der Konfiguration der Kommunikationskomponente oder B) in der Definition des Kommunikationskanals.
Was ist der Perfomance-Gewinn bei der Verwendung von Strukturen gegenüber dem Zugriff auf einzelne Variablen?
Wir können keine Aussage treffen. Aber hier ein Extrembeispiel: Lesen von 1000 Worten. Wenn ein Lesebefehl z. B. aus 1 Byte Anweisung, 2 Byte Adresse, 2 Byte Länge besteht, zu jedem Leseaufruf die entsprechende Rückantwort aus 5 Byte erfolgt, werden bei der Anfrage auf 1000 Wörter 10kB Daten übertragen. Davon sind 2kB Nutzdaten (Verhältnis 5/1). Das Verhältnis Protokolldaten/Datennutzung wird durch die blockweise Übertragung nahezu auf 1 reduziert. Als zusammenhängender Block über einen gemeinsamen Lesebefehl können die 2kB Nutzdaten mit nur einem Protokollzugriff übertragen werden. Bei einer langsamen Verbindung (z. B. serielle Kommunikation mit 9600 Baud) kann der Performance-Gewinn entscheidend sein.
Beim Browsen über den S7 OPC-Server bekomme ich alle Variablen einzeln in mein Projekt. Genieße ich jetzt noch den Vorteil des blockweisen Zugriffs?
Nicht, wenn der OPC-Server intern keine Blockung unterstützt. Dann muss manuell eine Strukturdefinition im Projekt angelegt werden, die den Aufbau des entsprechenden Datenbausteines wiedergibt. Über die Definition einer Variablen vom Typ der Struktur und der Adresse, die den Datenblock beschreibt (Datenbaustein, Startadresse und Länge, siehe Dokumentation des OPC-Servers) muss der blockweise Zugriff erst wieder ermöglicht werden.
Etwas passt beim Aufbau meiner Struktur nicht. Werte, die sich offensichtlich in der SPS ändern, werden nicht in der Visualisierung angezeigt oder Änderungen wirken sich auf ein falsches Strukturelement aus.
Ist in der Strukturdefinition der Parameter Ordnungsnummer als Byteoffset aktiv, wird eine Doppelbelegung des Parameters Ordnungsnummer in den Strukturelementen nicht mehr überprüft. Kontrollieren Sie diesen Parameter genau (auch in Hinblick auf das Alignment).

