Multitask-Datenzugriffs-Synchronisation

Wenn von mehreren Tasks auf dieselben Daten zugegriffen wird, kann es je nach Task‑/Echtzeitkonfiguration vorkommen, dass die Tasks gleichzeitig auf dieselben Daten zugreifen. Wenn die Daten dabei von mindestens einer der Tasks geschrieben werden, können die Daten während oder nach einer Änderung einen inkonsistenten Zustand haben. Um dies zu verhindern, müssen alle konkurrierenden Zugriffe synchronisiert werden, sodass zu einem Zeitpunkt nur von höchstens einer Task auf die gemeinsam genutzten Daten zugegriffen werden kann.

Wenn also von mehreren Tasks auf dieselben Daten zugegriffen wird und bei mindestens einem dieser Zugriffe die Daten geschrieben werden, müssen alle lesenden und schreibenden Zugriffe synchronisiert werden. Dies gilt unabhängig davon, ob die Tasks auf einem oder mehreren CPU Kernen laufen.

WARNUNG

Inkonsistenzen und weitere Gefahren durch ungesicherten Datenzugriff

Werden konkurrierende Zugriffe nicht synchronisiert, so besteht die Gefahr eines inkonsistenten oder ungültigen Datensatzes. Je nachdem wie die Daten im weiteren Programmverlauf genutzt werden, kann dies ein Fehlverhalten des Programms, eine ungewünschte Achsbewegung oder auch den plötzlichen Programmstillstand zur Folge haben. Abhängig von der gesteuerten Anlage können Schäden an Anlage und Werkstücken entstehen oder Gesundheit und Leben von Personen gefährdet werden.

Allgemeine Synchronisationsmöglichkeiten zwischen den TcCOM Modulen sind bereits im Kapitel Modul zu Modul Kommunikation beschrieben. Hierbei wurden die folgenden Mechanismen beschrieben:

Idealerweise sollte jedoch versucht werden die Notwendigkeit einer Synchronisation zu vermeiden, ansonsten ist der einfachste Weg meistens der Austausch über das Prozessabbild, welche die Daten zwischen den Zyklen von den Ausgangs-Prozessabbildern zu den Eingangs-Prozessabbildern kopieren und dadurch für einen konsistenten Zustand sorgen.
Wenn dieses nicht ausreicht und auf Daten aus unterschiedlichen Kontexten zugegriffen werden muss, kann einer der folgenden Möglichkeiten genutzt werden.

Es ist dabei wichtig, die Task-Kontexte zu unterscheiden, welche auf die Daten zugreifen sollen. In der TwinCAT Runtime wird zwischen den Windows Kernel Mode Thread-Kontexten (kurz: Windows Kontext) sowie den TwinCAT Realtime Task-Kontexten (RT-Kontext) unterschieden. Während der Initialisierung von TwinCAT Modulen werden die Transitionen IP, PS, SP, PI im Windows Kontext ausgeführt. Die Transitionen SO und OS werden im RT-Kontext ausgeführt.

Das SDK bietet für solche Szenarien entsprechende Synchronisierungsmöglichkeiten. Trotzdem sollten die TcCOM Module in einer Weise konzipiert werden, dass sie zumindest im Windows-Kontext unabhängig voneinander sind und damit ohne Synchronisierungs-Bedarf auskommen. Die Transitionen im RT-Kontext können bei Bedarf CriticalSections nutzen.

Für die CriticalSection und Semaphoren gilt, dass im Fall einer Sperre die Task auf die Freigabe wartet, in der Zwischenzeit der Core für andere Tasks freigegeben wird. Bei CriticalSections erbt die jeweils aktive Task dabei ggf. die Priorität der wartenden Task („Priority Inheritence“).