Skip to main content

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 STRING/WSTRING variabili.

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_OUTo 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

VisuUtils.library

FbOpenDialogExtended.CallOpenDialog usi SysMemCpy. Non riconfigurare l'istanza mentre xBusy == TRUE.

IECStringUtils.library

Non utilizzare il blocco funzione VisuFbAnalyzeDateTimeFormatString con lo stesso buffer da più attività.

StringUtils.library

Attenzione: l'accesso alla struttura avviene durante l'utilizzo DateFormatter.Format.

IECStringUtils.library

Attenzione: l'accesso alla stringa si verifica durante l'utilizzo VisuFbAnalyzeDateTimeFormatString.GetMonth.

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.