Abilitare JavaScript per vedere questo sito.

Introduzione

Le variabili globali (da qui e in seguito denominate GV) sono aree di memoria condivise con accesso semaforato.

Lo scopo di queste variabili è di essere usate per lo scambio dati. Sfruttandole non si è più costretti a dover definire una variabile come public in un task e quindi come extern in un altro task che la utilizza.

Argomenti correlati

Segnalibri

Creazione variabili globali

Creazione tramite file XML

La creazione di queste variabili viene fatta, tipicamente, leggendo i file di configurazione presenti nella directory /GV/.

Il file, in formato XML, contiene:

Nome della variabile

Decrizione testuale del tipo di variabile

Dimensione della variabile in byte

Attributi della variabile

Rappresentazione dell'area dati (questa può essere omessa)

I nomi dei file seguono la seguente struttura: GV_nomedellavariabile_dimensione.CFG

Esempio

File XML "GV_globalVar1_4.CFG":

<?xml version="1.0" encoding="utf-8"?>

<!-- Global Variable updated on date(ymd)/time(hms) 2019/03/14 08:25:20 -->

<globalVariables version="1">

    <globalVariable persistent="true" size="4" dataInFile="true" onlyOneWrite="false">

        <fullName>globalVar1</fullName>

        <dataType>U32</dataType>

        <wp></wp>

        <hexasciiData>73000000</hexasciiData>

        <crc>695D</crc>

    </globalVariable>

</globalVariables>

Dopo la generazione delle GV da file, quelle di tipo persistente sono collegate alla componente ritentiva.

All'accensione, per le GV persistenti, si procede all'aggiornamento dei dati nel file di configurazione utilizzando i valori letti in memoria ritentiva, se presenti.

Creazione tramite istruzione GV_CREATE

È possibile creare le GV da istruzione (GV_CREATE) specificando:

Il nome (chiave di riferimento per successivi collegamenti)

Informazione testuale del tipo di area dati (es "U32" o "Struct PUNTO" ...)

Informazione della dimensione dell'area dati

Eventuale password per abilitare l'accesso in scrittura

Attributi (persistente, opzione per creare il file di definizione, opzione per memorizzazione dei dati nel file, ...)

Eventuali dati per inizializzare la variabile

La creazione delle GV è possibile solo se non ne esiste già una con lo stesso nome (che viene utilizzato come chiave).

Creando una variabile da istruzione, il file di configurazione della variabile viene creato automaticamente.

Nota: i nomi delle GV sono gestiti come case insentive, pertanto "pippo" e "Pippo" definiscono il nome della medesima GV.

Collegamento alle variabili globali

Il collegamento delle aree di memoria (istruzione GV_LINK) delle GV avviene mediante il nome e la dimensione (che devono coincidere con le GV definite) e una copia locale della stessa.

La funzione di collegamento rende un riferimento all'interfaccia di connessione tra la copia locale e quella globale della variabile.

Tutte le operazioni sulle GV avvengono utilizzando il solo riferimento all'interfaccia.

È possibile aver più interfacce verso la stessa GV in task o contesti diversi.

Nota: ogni ambito omogeneo di lavoro (task, rule od OB) deve avere la propria copia locale connessa con la propria interfaccia. È da considerarsi un errore usare la stessa interfaccia in contesti di task diversi (es. RULE e TASK) o più interfacce che utilizzano la stessa area dati locale.

Accesso alle variabili globali

L'accesso alle GV avviene in modo indiretto tramite funzioni (GV_READ, GV_WRITE...).

Mediante funzioni è possibile quindi aggiornare i dati da area locale a quella globale e viceversa. Queste operazioni sono, ovviamente, gestite con semafori in modo da garantire che l'operazione (in ambo le direzioni) sia consistente (o atomica).

È inoltre possibile imporre una restrizione all'accesso a ogni singola GV in modo che solo l'interfaccia che ha preso i diritti su essa possa accedervi.

Nota: attualmente non sono gestiti l'annidamento della presa/rilascio diritti di accesso sulla stessa interfaccia.

In caso che sia presente una password di scrittura solo i link che forniscono la corretta password possono avere accesso in scrittura.

È inoltre posssibile specificare che solo il primo che si connette alla variabile con la corretta password ha diritto di scrittura.

È posssibile anche aggiornare solo una parte della variabile con l'apposita istruzione.

GV persistenti

Per poter gestire le GV persistenti è indispensabile aver impostato l'area di memoria ritentiva preposta alle GV nella configurazione del progetto (Versioni RDE superiori alla versione 3.51.1).

Quando si crea una GV con l'attributo persistente si crea anche la componente in memoria ritentiva. La creazione è abortita se non c'é memoria a disposizione almeno pari alla dimensione della nuova GV sommata alla dimensione massima tra le GV presenti in memoria ritentiva. L'accesso all'area delle GV persistenti è gestita tramite un semaforo. Una sola GV persistente può essere aggiornata alla volta.

L'aggiornamento in area ritentiva avviene quando si effettua la copia dei dati da area locale ad area globale.

Dato che l'operazione di copia non è istantanea, qualora il controllo venisse spento durante tale operazione, è garantito che i dati ritentivi non sono persi, ovviamente saranno validi gli ultimi scritti completamente e non quelli in fase di aggiornamento.

Se invece la GV di tipo persistente non è già presente in area ritentiva ne viene creata una inizializzata con i valori presenti nel file.

È possibile che in memoria ritentiva ci siano delle variabili globali non connesse ad alcuna variabile globale definita. In tal caso rimangono in memoria ritentiva senza essere utilizzabili fino a che non si riusi il file descrittore o si ricrei la variabile con lo stesso nome e la stessa dimensione.

Direttive GV

GV_INFO

Elenca tutte le variabili globali e i loro attributi

PGVRESET

Forza la cancellazione dell'area di variabili persistenti

Allarmi GV

 

  

Keyboard Navigation

F7 for caret browsing
Hold ALT and press letter

This Info: ALT+q
Page Header: ALT+h
Topic Header: ALT+t
Topic Body: ALT+b
Contents: ALT+c
Search: ALT+s
Exit Menu/Up: ESC