Con la funzione CODESYS Multicore, i task IEC possono essere assegnati a core CPU dedicati, tenendo conto del numero di core CPU acquisiti. Questo può portare a un miglioramento delle prestazioni.
-
Il task IEC viene eseguito su tutti i core della CPU:
Il sistema operativo assume il controllo della distribuzione di uno o più compiti di un gruppo sui core della CPU.
Quando i compiti IEC sono distribuiti sui core della CPU, si verificano alcuni cambiamenti nel comportamento del programma IEC, che devono essere presi in considerazione.
-
L'elaborazione dei compiti IEC per priorità non è più scontata. Vengono elaborati in base alla priorità solo se i task sono raggruppati in un unico core della CPU.
-
La coerenza del ciclo dei dati nel task IEC con la priorità più alta non è più un dato di fatto. Pertanto, i dati devono essere copiati localmente all'inizio del ciclo del task IEC se i valori non devono cambiare durante il ciclo.
-
Per tutti i compiti, esiste un'immagine di processo condivisa da cui i compiti operano. La funzione
ReadInputs()viene chiamata all'inizio di ogni attività e la funzioneWriteOutputs()viene chiamata alla fine. Di conseguenza, il modello IPO si applica a ogni singolo compito. Queste funzioni leggono e scrivono sull'immagine del processo condiviso. Anche l'immagine del processo viene scritta fisicamente e i pacchetti vengono trasmessi solo quando viene richiamato il task del ciclo del bus. Tuttavia, il task del ciclo del bus attende per ogni chiamata diWriteOutputseReadInputsdei task. Ciò garantisce la coerenza dei dati all'interno del task del ciclo bus.-
Le uscite possono essere assegnate solo a un compito.
-
Gli ingressi possono essere assegnati a più compiti, ma l'accesso diretto deve essere evitato. Gli input devono essere scritti nelle variabili locali del task mediante operazioni atomiche.
-
Un secondo task, che aggiorna l'immagine del processo con
ReadInputs()in parallelo al primo task, aggiorna anche gli input del primo task mentre è in esecuzione. -
Di conseguenza, la coerenza dei dati di un task è garantita solo su singoli core per il task a priorità più alta.
Nota: È possibile impostare il task ciclo bus nella scheda «PLC Settings».
Nota: È possibile visualizzare l'accesso I/O sulla scheda: Distribuzione dei compiti.
-
-
Per i contatori coerenti (incrementatore, decrementatore), si deve sempre utilizzare la funzione di libreria esterna atomica
SysCpuAtomicAdd()(per maggiori dettagli, vedereSysCpuHandling.library).
Coerenza dei dati
Coerenza dei dati
-
L'accesso ai bit (tipo di dati
BIT) non viene elaborato in modo coerente (atomico) sulle CPU multicore nel programma IEC. A questo scopo si consiglia di utilizzare la funzione di libreria esternaSysCpuTestAndSetBit(). (Per maggiori dettagli, vedere:SysCpuHandling.library) -
I tipi di dati semplici fino a una larghezza di 32 bit (
BOOL, BYTE, WORD/INT, DWORD/DINT, ecc.) vengono elaborati in modo coerente (atomico) nel programma IEC anche su CPU multicore. -
I tipi di dati a 64 bit (
LINT, LWORD, eLREAL) vengono elaborati in modo coerente (atomico) nel programma IEC solo su sistemi a 64 bit e sistemi multicore. Per farlo, non è necessario prendere alcuna precauzione. -
Per accedere a tipi di dati complessi (
STRING, FB, STRUCT, eARRAY), è necessario provvedere autonomamente alla sincronizzazione/consistenza. -
Nella configurazione del task, nella scheda Uso delle variabili, è possibile definire se una variabile in un task IEC ha accesso in lettura o in scrittura.
-
Sui sistemi multicore può verificarsi un "effetto di riordino della memoria". Per ulteriori informazioni, vedere: Operatore IEC:
__MemoryBarrier().
-
Distribuzione dei compiti su più core del processore
-
Visualizzazione del carico del processore per core del processore nella traccia