Object: „Aufgabe Konfiguration“
Immer mehr der heutigen Steuerungen haben Prozessoren mit mehreren CPU-Kernen. Um dies für das IEC-Programm zu nutzen und die Leistung zu verbessern, bietet CODESYS Möglichkeiten, die IEC-Aufgaben auf diese CPU-Kerne zu verteilen. Außerdem sollte das IEC-Programm in mehrere Aufgaben unterteilt werden.
In CODESYS gibt es zwei grundsätzlich unterschiedliche Strategien zur Verteilung von IEC-Aufgaben auf CPU-Kerne:
-
Die Verknüpfung eines IEC-Tasks mit einem CPU-Kern wurde korrigiert:
Die Aufgabe wird immer auf diesem speziellen CPU-Kern ausgeführt. In diesem Fall können auch mehrere Tasks auf ein und denselben CPU-Kern gebündelt werden, wenn das IEC-Programm noch nicht auf mehreren CPU-Kernen gleichzeitig ausgeführt werden kann.
-
Die IEC-Task wird auf allen CPU-Kernen ausgeführt:
Das Betriebssystem übernimmt die Kontrolle über die Verteilung der Aufgabe auf die CPU-Kerne.




HINWEIS

Wenn die IEC-Aufgaben auf CPU-Kerne verteilt werden, ergeben sich einige Änderungen im Verhalten des IEC-Programms, die berücksichtigt werden müssen.
-
Die Bearbeitung von IEC-Aufgaben nach Priorität ist nicht mehr selbstverständlich. Sie werden nur dann nach Priorität abgearbeitet, wenn die Aufgaben auf einen CPU-Kern gebündelt werden.
-
Die Zykluskonsistenz der Daten in der IEC-Task mit der höchsten Priorität ist nicht mehr gegeben. Daher müssen die Daten zu Beginn des IEC-Task-Zyklus lokal kopiert werden, wenn sich die Werte während des Zyklus nicht ändern sollen.
-
Für konsistente Zähler (Inkrementierer, Dekrementierer) sollte immer die atomare externe Bibliotheksfunktion
SysCpuAtomicAdd()
verwendet werden (für weitere Einzelheiten sieheSysCpuHandling.library
).




HINWEIS

Konsistenz der Daten
-
Der Bit-Zugriff (Datentyp
BIT
) wird auf Multicore-CPUs im IEC-Programm nicht konsistent (atomar) verarbeitet. Hierfür empfehlen wir Ihnen die Verwendung der externen BibliotheksfunktionSysCpuTestAndSetBit()
. (Für weitere Informationen siehe:SysCpuHandling.library
) -
Einfache Datentypen bis zu einer Breite von 32 Bit (
BYTE, WORD/INT, DWORD/DINT
, etc.) werden im IEC-Programm auch auf Multicore-CPUs konsistent (atomar) verarbeitet. -
Datentypen mit 64 Bit (
LINT, LWORD, LREAL)
) werden im IEC-Programm nur auf 64-Bit-Systemen und Multicore-Systemen konsistent (atomar) verarbeitet. Dazu brauchen Sie keine Vorsichtsmaßnahmen zu treffen. -
Für den Zugriff auf komplexe Datentypen (
STRINGs, FBs, STRUCTs, ARRAYs
) müssen Sie selbst Vorkehrungen für die Synchronisation/Konsistenz treffen. -
In der Task-Konfiguration auf der Registerkarte „Variablenverwendung“ können Sie festlegen, ob eine Variable in einer IEC-Task Lese- oder Schreibzugriff hat.
-
Auf Multicore-Systemen kann es zu einem "Memory Reordering Effect" kommen. Weitere Informationen finden Sie in der IEC-Bedienungsanleitung
__MemoryBarrier()
.
-
Siehe auch: ⮫ Aufgabengruppen
-
Verteilung von Aufgaben auf mehrere Prozessorkerne
-
Anzeige der Prozessorlast pro Prozessorkern im Trace