TIA Portal Anweisungen

Verschiebeoperationen
Datentransfer & Verwaltung

Der Datentransfer ist das Kreislaufsystem Ihres SPS-Programms. Verwalten Sie Variablenkopien, Struktur-Serialisierung und Speicherblock-Manipulationen effizient.

Was sind Verschiebeoperationen in TIA Portal?

Verschiebeoperationen ermöglichen das Kopieren von Daten von einem Speicherort an einen anderen. Sie reichen vom einfachen Kopieren einer Variable (MOVE) bis hin zur komplexen Manipulation ganzer Strukturen für die Kommunikation (Serialize/Deserialize) oder die Verwaltung zusammenhängender Datenbereiche (MOVE_BLK).

TIA Portal bietet moderne Anweisungen für den symbolischen Zugriff, die dynamische Verwaltung über Variant-Typen und optimierte Funktionen für Array-DBs, während Legacy-Anweisungen für die Kompatibilität mit älteren S7-300-Systemen beibehalten werden.

Basistransfer

Grundlegende Kopier- und Formatierungsanweisungen

MOVE — Wert kopieren

MOVE

Was es macht

Kopiert den Inhalt des Eingangs IN zum Ausgang OUT. Bei unterschiedlichen Datentypen kann eine implizite Konvertierung erfolgen, sofern diese sicher ist.

Wann man es verwendet

Initialisieren von Variablen, Kopieren von HMI-Sollwerten oder Transfer von Berechnungsergebnissen.

Profi-Tipps

Sie können mehrere Ausgänge (OUT1, OUT2...) hinzufügen, um einen Wert gleichzeitig an mehrere Ziele zu kopieren.

In SCL verwenden Sie einfach die Zuweisung: destination := source;

Funktioniert mit fast allen Datentypen (Bool, Int, Real, Struct, String).

Serialize / Deserialize

SER

Was sie machen

Serialize wandelt eine komplexe Struktur in einen sequenziellen Byte-Strom (Array of Byte) um. Deserialize bewirkt das Gegenteil.

Wann man sie verwendet

Vorbereitung von Daten für den Versand über Kommunikationsprotokolle (TCP/IP, UDP) oder kompakte Speicherung.

Profi-Tipps

Verwenden Sie den Parameter POS, um den Füllindex im Zielpuffer zu verfolgen.

Unerlässlich für den Austausch mit Drittsystemen, die Siemens-UDTs nicht verstehen.

Stellen Sie sicher, dass die Puffergröße ausreicht, um Laufzeitfehler zu vermeiden.

SWAP — Vertauschen

SWAP

Was es macht

Kehrt die Byte-Reihenfolge (Endianness) im Operanden IN um.

Wann man es verwendet

Kommunikation mit Geräten, die das 'Little-Endian'-Format verwenden, während die SPS 'Big-Endian' nutzt.

Profi-Tipps

Wird normalerweise bei Word- oder DWord-Typen verwendet.

Nützlich für die Verarbeitung von Daten bestimmter Modbus-Sensoren.

Kann verwendet werden, um falsch herum empfangene ASCII-Codes neu zu ordnen.

Block verschieben

Manipulation massiver und zusammenhängender Speicherbereiche

MOVE_BLK / UMOVE_BLK

MOVE_BLK

Was es macht

Kopiert eine definierte Anzahl von Elementen von einem Quell-Array in ein Ziel-Array. UMOVE_BLK ist die nicht unterbrechbare (atomare) Version.

Wann man es verwendet

Pufferverwaltung, Archivierung historischer Daten oder Duplizieren von Fertigungsrezepten.

Profi-Tipps

Der Startindex (COUNT) definiert die Anzahl der zu kopierenden Elemente.

UMOVE_BLK stellt sicher, dass Daten während des Kopierens nicht durch einen Alarm-OB geändert werden.

Quell- und Zieldatentypen müssen identisch sein.

MOVE_BLK_VARIANT

Was es macht

Erweiterte Version von MOVE_BLK, die Variant-Datentypen für flexible Adressierung unterstützt.

Wann man es verwendet

Entwicklung von wiederverwendbaren Bibliotheksbausteinen, die mit Arrays unterschiedlicher Größe oder Typen arbeiten.

Profi-Tipps

Ermöglicht das Kopieren zwischen Arrays, deren Typen erst zur Laufzeit bestimmt werden.

Verwenden Sie CountOfElements, um den COUNT-Parameter zu automatisieren.

Sehr leistungsstark in S7-1500 für generische Programmierung.

Bereich füllen

Schnelle Initialisierung von Speicherbereichen

FILL_BLK / UFILL_BLK

FILL

Was es macht

Füllt einen Speicherbereich (Array) mit einem am Eingang IN angegebenen Einzelwert.

Wann man es verwendet

Zurücksetzen eines Messwert-Arrays auf Null oder Initialisieren eines Puffers mit einem Standardwert.

Profi-Tipps

UFILL_BLK ist vorzuziehen für kritische Bereiche, die mit Interrupts geteilt werden.

Viel performanter als eine FOR-Schleife zur Initialisierung eines großen Arrays.

COUNT gibt die Anzahl der zu füllenden Elemente ab dem angegebenen Pointer an.

Scatter / Gather

Bit-Zerlegung und -Zusammensetzung

SCATTER / GATHER

Was sie machen

SCATTER zerlegt ein Wort (Word, DWord...) in einzelne Bits in eine Struktur oder ein Array. GATHER bewirkt das Gegenteil.

Wann man sie verwendet

Extraktion von Statusbits aus einem Diagnosewort oder Zusammensetzung eines Steuerworts aus Kontrollbits.

Profi-Tipps

Ersetzt vorteilhaft eine Vielzahl von Bitzugriffen (z. B. %X0).

Verfügbar auf S7-1200 und S7-1500.

Garantiert saubereren und leichter zu wartenden Code.

Array-DB-Zugriff

Lesen und Schreiben in Datenbausteinen vom Typ Array

ReadFromArrayDB / WriteToArrayDB

Was sie machen

Ermöglichen das Lesen oder Schreiben eines bestimmten Elements in einem als 'Array DB' konfigurierten Datenbaustein.

Wann man es verwendet

Verwaltung großer Datenlisten, bei denen die Indizierung dynamisch und schnell sein muss.

Profi-Tipps

Die 'L'-Versionen (z. B. ReadFromArrayDBL) greifen auf den Ladespeicher (Load Memory) für seltene Daten zu.

Die Verwendung von Array DBs ist oft performanter als der klassische indexierte Zugriff.

Prüfen Sie, ob der Index innerhalb der Grenzen liegt, um Zugriffsfehler zu vermeiden.

Variant-Manipulation

Werkzeuge für die dynamische Programmierung

VariantGet / VariantPut

Was sie machen

VariantGet extrahiert den Wert einer Variant-Variable in eine typisierte Variable. VariantPut schreibt einen typisierten Wert in eine Variant-Variable.

Wann man sie verwendet

Verarbeitung von Daten, deren exakter Typ erst zum Zeitpunkt des Bausteinaufrufs bekannt ist.

Profi-Tipps

Verwenden Sie EQ_Type, um den Typ vor dem Extrahieren des Wertes zu prüfen.

Grundlegend für die Erstellung generischer Kommunikationsfunktionen.

CountOfElements liefert die Anzahl der Elemente, wenn der Variant auf ein Array zeigt.

Array-Grenzen

Dynamische Bestimmung von Limits

LOWER_BOUND / UPPER_BOUND

Was es macht

Liefert die untere (LOWER) oder obere (UPPER) Grenze eines als Variant-Parameter übergebenen Arrays.

Wann man es verwendet

Durchlaufen eines Arrays unbekannter Größe (z. B. Array[*] of MyUDT).

Profi-Tipps

Unerlässlich für das Schreiben robuster FOR-Schleifen: FOR i := LOWER_BOUND(...) TO UPPER_BOUND(...) DO

Funktioniert sowohl bei ein- als auch mehrdimensionalen Arrays.

Der Parameter DIM gibt die gewünschte Dimension an (Standard 1).

Legacy-Anweisungen

Kompatibilität mit älteren S7-300/400 Systemen

Anweisungen wie BLKMOV, FILL und FieldRead/FieldWrite werden aus Gründen der Kompatibilität beibehalten. Bevorzugen Sie für neue S7-1200/1500-Projekte MOVE_BLK, FILL_BLK und direkte symbolische Zugriffe.

Vergleich der Kopier-Methoden

Wahl der richtigen Transfer-Anweisung

Sie müssen...Empfohlene AnweisungBeispiel
Einfache Variable kopierenMOVESollwert -> Istwert
Speicherbereich kopierenMOVE_BLKFIFO-Puffer
Array initialisierenFILL_BLKFehler-Reset
TCP-Nachricht vorbereitenSerializeStruktur -> Byte-Strom
Wort in Bits zerlegenSCATTERWort-Diagnose -> Struktur
Dynamischer ZugriffVARIANTUniverseller Bibliotheksbaustein

Häufig gestellte Fragen

Was ist der Unterschied zwischen MOVE und MOVE_BLK ?

MOVE ist dafür gedacht, einen einzelnen Wert oder eine komplette Struktur auf einmal zu kopieren. MOVE_BLK ist für das Kopieren eines Teils eines Arrays (eine bestimmte Anzahl aufeinanderfolgender Elemente) optimiert.

Warum UMOVE_BLK anstelle von MOVE_BLK verwenden ?

Das 'U' steht für Uninterruptible (nicht unterbrechbar). Diese Anweisung garantiert, dass der Kopier-Vorgang nicht durch einen Alarmzyklus (priorisierte OBs) unterbrochen wird, was die Konsistenz der kopierten Daten sicherstellt.

Wann verwendet man Serialize und Deserialize ?

Diese Anweisungen sind lebenswichtig, wenn Sie strukturierte Daten über 'rohe' Protokolle wie TSEND/TRCV oder an Drittgeräte senden müssen. Sie verwalten das Byte-Alignment standardisiert.

Funktioniert MOVE_BLK mit absoluten Adressen (P#DB1.DBX0.0...) ?

Ja, aber TIA Portal fördert die Verwendung symbolischer Zugriffe. Für komplexe absolute Adressierung wird BLKMOV (Legacy) noch verwendet, obwohl MOVE_BLK_VARIANT die empfohlene moderne Lösung ist.

Automatisieren Sie Ihren Datentransfer

Beschreiben Sie Ihren Bedarf an Datenmanipulation und T-IA Connect generiert die optimierten MOVE- und Serialize-Bausteine für Ihre Anwendung.