Mit der Funktion CODESYS Multicore können die IEC-Tasks selbst unter Berücksichtigung der erworbenen Anzahl von CPU-Kernen dedizierten CPU-Kernen zugewiesen werden. Dies kann zu einer verbesserten Leistung führen.
-
Die IEC-Task wird auf allen CPU-Kernen ausgeführt:
Das Betriebssystem übernimmt die Kontrolle über die Verteilung von einer oder mehreren Aufgaben einer Gruppe auf die CPU-Kerne.
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 alle Aufgaben gibt es ein gemeinsames Prozessabbild, von dem aus die Aufgaben arbeiten. Die Funktion
ReadInputs()wird am Anfang jeder Aufgabe und die FunktionWriteOutputs()am Ende aufgerufen. Folglich gilt das IPO-Modell für jede Aufgabe einzeln. Diese Funktionen lesen und schreiben in das gemeinsame Prozessabbild. Nur wenn die Buszyklus-Task aufgerufen wird, wird auch das Prozessabbild physikalisch geschrieben und die Pakete übertragen. Der Buszyklus-Task wartet jedoch auf jeden Aufruf vonWriteOutputsundReadInputsder Tasks. Dadurch wird die Datenkonsistenz innerhalb der Buszyklus-Task sichergestellt.-
Ausgänge können nur einer Aufgabe zugeordnet werden.
-
Eingaben können mehreren Aufgaben zugewiesen werden, ein direkter Zugriff sollte jedoch vermieden werden. Die Eingaben müssen mittels atomarer Operationen in lokale Variablen des Tasks geschrieben werden.
-
Ein zweiter Task, der parallel zum ersten Task das Prozessabbild mit
ReadInputs()aktualisiert, aktualisiert auch die Eingaben des ersten Tasks, während dieser läuft. -
Dadurch wird die Datenkonsistenz einer Aufgabe nur auf einzelnen Kernen für die Aufgabe mit der höchsten Priorität sichergestellt.
Hinweis: Sie können die Buszyklus-Task auf der Registerkarte „PLC Settings“ einstellen.
Hinweis: Sie können den E/A-Zugriff auf der Registerkarte anzeigen: Einsatz von Aufgaben.
-
-
Für konsistente Zähler (Inkrementierer, Dekrementierer) sollte immer die atomare externe Bibliotheksfunktion
SysCpuAtomicAdd()verwendet werden (für weitere Einzelheiten sieheSysCpuHandling.library).
Konsistenz der Daten
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 (
BOOL, BYTE, WORD/INT, DWORD/DINT, etc.) werden im IEC-Programm auch auf Multicore-CPUs konsistent (atomar) verarbeitet. -
Datentypen mit 64 Bit (
LINT, LWORD, undLREAL) 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 (
STRING, FB, STRUCT, undARRAY) müssen Sie selbst Vorkehrungen für die Synchronisation/Konsistenz treffen. -
In der Task-Konfiguration können Sie auf der Registerkarte Variablenverwendung festlegen, ob eine Variable in einer IEC-Task Lese- oder Schreibzugriff hat.
-
Auf Multicore-Systemen kann es zu einem "Memory Reordering Effect" kommen. Für weitere Informationen siehe: IEC Operator:
__MemoryBarrier().
-
Verteilung von Aufgaben auf mehrere Prozessorkerne
-
Anzeige der Prozessorlast pro Prozessorkern im Trace