Konsistente Datenübertragung von Positionswerten über Taskgrenzen

Frage:

Bei der Übertragung von Winkelinformationen für elektrische Wellen über Taskgrenzen hinweg kann es zur Übertragung falscher Werte (Dateninkonsistenzen) kommen. Wie können diese vermieden werden?

Antwort:

Grundsätzlich stehen zwei unterschiedliche Verfahren zur Verfügung:

1. Semaphore (Übertragungsmerker), vgl. Beitrag 20010105 (Datenkonsistenz bei Verwendung von 32 Bit Variablen in mehreren Tasks). Dieses Verfahren führt jedoch bei schnell veränderlichen Positionswerten zu sprunghaften Änderungen und ist deshalb bei elektrischen Wellen nicht anwendbar.
2. Funktionsblöcke für den 32-Bit-Transfer (Systemvoraussetzung: Betriebssystem 6.2 oder höher sowie DDS  ab V2.0): Diese Funktionsblöcke sind für schnell veränderliche Positionswerte das adäquate Mittel.
Für die Servo-PLC stellt ab Betriebssystem 6.2 eine Funktionsblockbibliothek (Lenze32BitTransverDrv.lib) mit Funktionsblöcke für die konsistente Datenübertragung von 32-Bit Werten zur Verfügung. Diese Bibliothek wird automatisch ab DDS V2.0 installiert und ist erst ab dieser Version nutzbar. Dabei wird unterschieden zwischen einem Funktionsblock für Daten vom Typ DINT bzw. DWORD. Für die Übertragung von Positionswerten wird das Format DINT benötigt. Der dazugehörige Funktionsblock lautet: L_32BitTransferDINT.

Ziel ist es, eine globale DINT-Variable auf eine lokale zu kopieren und eine Unterbrechung des Kopiervorgangs zu verhindern. Anschließend kann diese Variable ohne die Gefahr einer Dateninkonsistens in der entsprechenden Task weiter verwendet werden. Die Variablen pdnSource (Quelle) und pdnDestination (Ziel) sind als Zeigervariablen (Pointer) angelegt und über die ADR-Blöcke zu adressieren. Als Beispiel wird hier die X-Achsenposition einer Kurvenscheibenanwendung gewählt (g_dnVertShaftCamDataIn_p), die in die Task mit der niederen Priorität kopiert werden soll (dnVertShaftCamDataIn_p). Der Aufruf der Funktion findet in der niederprioren Task statt.

URL zur Verlinkung dieses AKB-Artikels: https://www.lenze.com/de-de/go/akb/20031727/0/
Contact form