Mantenere la coerenza dei dati per le operazioni multicore
Di default, il programma IEC della visualizzazione (Visu_Prg
) esegue il proprio compito (VISU_TASK
). La visualizzazione generalmente mostra i dati dell'applicazione principale. I dati dell'applicazione principale vengono elaborati in un'altra attività. Per questo motivo, la coerenza dei dati è un argomento importante quando l'applicazione viene eseguita su un controller multicore.
È importante sapere che non esiste un'assegnazione atomica (tempo indivisibile) per il STRING
e WSTRING
tipi di dati così come per i dati strutturati. La data non deve essere modificata al superamento di una data di questo tipo. Tuttavia, se la data viene modificata da un'attività diversa da VISU_TASK
, potrebbe essere visualizzato in modo errato per un breve periodo.
Di seguito puoi vedere dove dovresti mantenere la coerenza dei dati in modo esplicito durante la creazione di un file CODESYS visualizzazione per l'utilizzo su un sistema multicore.
Suggerimento
Prestare attenzione alle note generali su operazione multicore.
Lettura dei dati IEC in un ciclo di visualizzazione
Se la visualizzazione di un elemento di visualizzazione dipende da più variabili, l'assegnazione di queste variabili non è coerente con il ciclo. Ad esempio, se un elemento viene spostato nella direzione x e y per mezzo di due variabili IEC, ciò può avere l'effetto che l'elemento di visualizzazione si muova solo nella direzione x in un ciclo e quindi si muova nella direzione y- direzione nel ciclo successivo.
Lo stesso vale per i dati utilizzati da più elementi di visualizzazione.
Esempio: l'elemento 1 legge la variabile di stato invisible
e ne aggiorna lo stato. Un altro compito di VISU_TASK
modifica la rispettiva variabile IEC. L'elemento 2 legge la variabile di stato Invisible
e ne aggiorna lo stato. Risultato: gli elementi hanno uno stato diverso per un breve periodo. Questo comportamento può verificarsi per tutte le variabili di animazione.
Azioni di input generiche
Modifica della visualizzazione | Notare i problemi descritti sopra quando si utilizzano tipi di dati stringa. |
Esegui comando | Notare i problemi descritti sopra quando si utilizzano tipi di dati stringa. |
Attiva/disattiva visualizzazione cornice | Notare i problemi descritti sopra quando si utilizzano tipi di dati stringa. |
Scrivi variabile | Come per la lettura, non è possibile scrivere assegnazioni atomiche |
Eseguire il codice ST | Quando si crea il codice ST, assicurarsi che la coerenza dei dati non sia a rischio. |
Variabili di interfaccia di una visualizzazione
Se una struttura viene trasferita tramite VAR_INPUT
, la coerenza dei dati non è garantita. Utilizza i dati strutturati tramite VAR_IN_OUT
o utilizzare un'interfaccia tramite VAR_INPUT
.
Gestione utente della visualizzazione
Se la gestione utenti viene chiamata tramite le interfacce pubbliche (VisuUserMgmt.library
), allora questo deve sempre provenire dal VISU_TASK
.
Elemento di visualizzazione 'Poligono'
Il Poligono l'elemento di visualizzazione ha il Punti dinamici proprietà. Qui puoi configurare una serie di punti. Si noti che la lettura dell'intero array non è atomica.
Variabili di tipo di dati STRING
Non esiste un'assegnazione atomica per tutte le proprietà configurate con variabili del tipo di dati STRING
. Esempio: la variabile di controllo per l'URL per il Programma di navigazione in rete elemento di visualizzazione.
Librerie utente
|
|
| Non utilizzare il blocco funzione |
| Attenzione: l'accesso alla struttura avviene durante l'utilizzo |
| Attenzione: l'accesso alla stringa si verifica durante l'utilizzo |
Dialoghi
Il passaggio dei parametri per le finestre di dialogo dovrebbe essere considerato allo stesso modo dei tipi di dati complessi. Quando viene aperta una finestra di dialogo, viene creata una copia di tutti i parametri passati.
Eccezione: VAR_IN_OUT
parametri che hanno {attribute 'VAR_IN_OUT_AS_POINTER'}
. Se viene assegnato questo attributo, non viene creata alcuna copia e la finestra di dialogo funziona sull'oggetto originale.