Austausch von Daten über das SPS-Prozessabbild

Von dem SPS-Prozessabbild werden typischerweise Daten mit dem IO-Prozessabbild ausgetauscht. Auf die gleiche Art und Weise ist es ebenso möglich, Daten innerhalb einer SPS zwischen zwei Taskkontexten auszutauschen.

Eine prinzipielle Bedingung für die Anwendbarkeit dieser Methode ist, dass nur von einer Task schreibend auf dieselben Daten zugegriffen werden soll. Die Daten werden dann so deklariert, dass sie Teil des Ausgangs-Prozessabbilds dieser Task sind.

Beispiel

 

Es dürfen nur jene Daten im Ausgangs-Prozessabbild angefügt werden, welche im anderen Taskkontext benötigt werden, um sicherzustellen, dass das Prozessabbild nicht unnötig groß ist. Das asynchrone Mapping führt in jedem Zyklus Kopieraktionen aus, um die Daten zwischen den SPS-Prozessabbildern und dem zusätzlichen temporären Puffer auszutauschen. Weil Kopieraktionen mit großen Datenblöcken viel Rechenzeit benötigen - wie dies auch beim Aufruf einer MEMCPY-Funktion der Fall ist - schränkt dies die mögliche Datenmenge meist auf deutlich weniger als 1 MB ein. Das Mapping wird von der jeweiligen Task selbst ausgeführt, sodass ein entsprechend aufwändiges Mapping die Tasklaufzeit für die eigentliche Programmabarbeitung reduziert.

Eine zweite Bedingung für die Anwendbarkeit dieser Methode ist, dass es sich bei den Daten nicht um Funktionsbausteininstanzen oder Zeiger jeglicher Art (POINTER TO, Interfacepointer/Interfacevariablen, Referenzen, ...) handeln darf. Es ist also hierbei nicht möglich, Methoden von ein und derselben Funktionsbausteininstanz aus zwei unterschiedlichen Taskkontexten aufzurufen.

Bei Bedarf können die erforderlichen Daten zu einer Struktur zusammengefasst werden.

Beispielprogramm: Synchronisation mittels Austausch von Daten über das SPS-Prozessabbild

Das Beispiel zeigt den Datenaustausch zwischen einer langsamen Task und einer schnellen Task innerhalb einer SPS-Instanz.

Exemplarisch für beliebige Datenblöcke (keine Funktionsbausteininstanzen oder Zeiger) wird eine Integer-Variable zur jeweils anderen Task übertragen. Zusätzlich ist dargestellt, wie Sie mittels einer booleschen Variablen eine Funktionalität im anderen Taskkontext triggern können.

Download: TC3_PlcSample_MultiTaskSync_PlcProcessImage.zip