Vergleichen zweier Datenbereiche vom Type Byte in einer S7-CPU
-
Beitrag
-
Betrifft Produkt(e)
FRAGE:
Wie kann ich in einer S7-CPU Daten verschiedener Datenbereiche miteinander vergleichen ?
ANTWORT:
In der Programmiersprache AWL in STEP 7 existieren direkte Vergleichsoperationen für Daten bis zu 32-Bit-Länge. Für den Vergleich von Datenbereiche die darüber hinaus gehen, gibt es keine Operationen/Funktionen. Dafür muss eine entsprechende Funktionalität programmiert werden.
Das beiliegenden Programmbeispiel enthält einen Funktionsbaustein mit dem es möglich ist, zwei Datenbereiche byteweise zu vergleichen. Folgende vier Bereiche können mit dem Funktionsbaustein verglichen werden:
- Speicherbereich der Eingänge (E)
- Speicherbereich der Ausgänge (A)
- Speicherbereich der Merker (M)
- Datenbausteine (DB)
Schnittstellbeschreibung der Vergleichs Funktion (FC 1):
Deklaration | Name | Typ | Kommentar |
IN | Datenblock_1 | ANY | 1. Datenblock, der zum Vergleich ansteht |
IN | Datenblock_2 | ANY | 2. Datenblock, der zum Vergleich ansteht |
OUT | VERGLEICH_OK | BOOL | TRUE: Datenbereiche sind inhaltlich identisch |
OUT | RETVAL | INT | Vergleich nicht OK: Nr. des Bytes der ersten Nichtübereinstimmung |
OUT | ERROR | WORD | Fehlercode: W#16#0000 = kein Fehler W#16#7FFF = falscher Datentyp (nicht BYTE) W#16#8FFF = Datenlängen nicht gleich lang W#16#9FFF = falscher Speicherbereich |
Die zwei Datenbereiche sind in Form von ANY-Pointern der Funktion zu übergeben. Der Vergleich erfolgt byteweise.
Die Funktion prüft die Länge, den Datentyp und den Datenbereich der beiden Pointer und gibt gegebenenfalls eine Fehlerinformation aus.
Beschreibung des Programmierbeispiels
Im Folgenden werden beispielhaft zyklisch zwei Datenbausteine verglichen, weil herausgefunden werden soll, ob das Rezept 1 im Datenbaustein 1 dem Rezept 5 im Datenbaustein 2 entspricht. Ein Rezept besteht aus 10 Integer-Werten. Die Rezepturen können in der Variablentabelle des Demo-Programms verändert und das Ergebnis des Vergleichs verfolgt werden.
CALL "COMPARE_BYTE"
Datenblock_1:="Data 1".Rezeptur1 // P#DB1.DBX 0.0 BYTE 20
Datenblock_2:="Data 2".Rezeptur5 // P#DB2.DBX 80.0 BYTE 20
VERGLEICH_OK:=M20.0
RETVAL :=MW22
ERROR :=MW24
Mögliche Ausgabekombinationen der Funktion:
Bedingung | OUT-Parameter | Wert des Parameters |
Vergleich ist OK (Speicherbereiche stimmen überein) | VERGLEICH_OK | TRUE |
RETVAL | W#16#0000 | |
ERROR | W#16#0000 | |
Datenblöcke sind unterschiedlich | VERGLEICH_OK | FALSE |
RETVAL | Bytenummer, bei der sich die Daten zum ersten mal unterscheiden | |
ERROR | W#16#0000 | |
Parametrierfehler | VERGLEICH_OK | FALSE |
RETVAL | W#16#0000 | |
ERROR | W#16#7FFF = falscher Datentyp W#16#8FFF = falsche Datenlänge W#16#9FFF = falsche Speicherbereiche |
Der beigefügte Download enthält das STEP 7 Projekt "CompareByteArea" mit dem FC 1 zum Vergleich von Datenbereichen.
Kopieren Sie die Datei "Compare_ByteArea.exe" in ein separates Verzeichnis und starten Sie die Datei anschließend per Doppelklick. Das STEP 7 Projekt wird jetzt automatisch mit allen dazugehörigen Unterverzeichnissen entpackt. Anschließend können Sie das entpackte Projekt mit dem SIMATIC Manager öffnen und bearbeiten.
Ablauffähigkeit und Testumgebung:
Das Beispiel ist einsetzbar auf allen CPU Varianten der SIMATIC S7-300, S7-400 und WinAC.
In der folgenden Tabelle sind die Komponenten aufgeführt, mit denen dieser Beitrag erstellt und die beschriebene Funktionsweise verifiziert wurde:
Testumgebung | Version / Ausgabestand | Version / Ausgabestand |
PC Plattform | Pentium III 650MHz, 384 MB | Pentium III 800MHz, 264 MB |
Betriebssystem | Windows 2000 SP2 | Windows XP |
STEP 7 | V 5.1 SP6 | V5.2 |
S7-CPU | PLCSIM V 5.0 SP1 | 315-2DP (6ES7 315-2AF03-0AB0) |
- Englisch
- Franzoesisch
- Italienisch
- Chinesisch
- Sie haben eine Technische Frage / ein Problem: Anfrage an den Technical Support stellen
- Sie möchten in unserem Forum diskutieren und mit anderen Anwendern Erfahrungen austauschen
- Sie möchten CAx-Daten zu einem oder mehreren Produkten zusammenstellen
- Sie möchten uns ein Feedback zu diesem Beitrag senden