Définition des variables persistantes
Les variables simples ainsi que les instances de structure et les instances de blocs fonctionnels peuvent être marquées comme « persistantes » à l'aide d'attributs. Lorsqu'une instance est marquée, tous les membres de VAR
, VAR_INPUT
, et VAR_OUTPUT
sera stocké de manière persistante. Dans le cas où des variables dans un VAR PERSISTENT
section sont marquées comme « persistantes », un avertissement sera créé.
De plus, il existe des attributs permettant de définir un groupe de stockage par défaut, ainsi que d'exclure des variables particulières du stockage persistant de structures ou d'instances de blocs fonctionnels.
Si la définition des variables persistantes a été modifiée (ajout, suppression, renommage, changement de type de données), aucune nouvelle génération de code composer (commande Generate) ne doit être exécutée. Ces modifications seront automatiquement mises à jour dans les instances de Persistent Manager lors de la compilation.
Pour plus d'informations sur les conversions implicites possibles en cas de définition de type de données modifiée, veuillez consulter : Paramètre
Types de données pris en charge
Les instances avec les types de données suivants ne peuvent pas être stockées de manière persistante :
PEU
Aiguille
Interfaces
Constantes
Tableaux de types de données non persistants
Tous les autres types de données sont pris en charge. Cela inclut les énumérations, les types de données de sous-gamme, les tableaux de tableaux et les tableaux multidimensionnels :
ARRAY[0..9] OF ARRAY[5..6, 7..8, 9..10] OF INT
Type de données: SYNDICAT
Pour enregistrer l'instance d'une union de manière persistante, l'un de ses champs doit être marqué comme "représentatif". Il y a trois manières possibles :
Exactement un champ dans la déclaration de l'union est marqué avec l'attribut
ac_persist_union_representant
(sans valeur d'attribut). Ce champ « représente » alors le syndicat. Sa valeur sera enregistrée et chargée de manière représentative pour l'union complète.Exactement un champ dans la déclaration de l'union est marqué avec l'attribut
ac_persist
– cela définit en même temps le représentant.L'instance de l'union est marquée avec l'attribut
ac_persist_union_set_representant
y compris la valeur de l'attribut. La valeur de l'attribut décrit le nom du champ union qui doit être utilisé comme représentant. Cet attribut écrase un existantac_persist_union_representant
attribut dans la déclaration du syndicat. Les tableaux d'unions peuvent également être marqués et faire référence aux éléments du tableau.
'ac_persist_union_representant'
TYPE UnionWithRep : UNION di : DINT ; {attribute 'ac_persist_union_representant'} dw : DWORD ; END_UNION END_TYPE
'ac_persist'
TYPE UnionWithPersist : UNION di : DINT ; {attribute 'ac_persist' := 'TestUnion'} dw : DWORD ; END_UNION END_TYPE
'ac_persist_union_set_representant'
FUNCTION_BLOCK FBTestUnion VAR {attribute 'ac_persist_union_set_representant' := 'dw'} u2 : UnionWithoutRep ; END_VAR
Tableau d'union
VAR {attribute 'ac_persist_union_set_representant' := 'dw'} aElems ARRAY[0..7] OF SomeUnion ; {attribute 'ac_persist_union_set_representant' := 'dw'} aaElems ARRAY[0..7] OF ARRAY[0..1] OF SomeUnion ; END_VAR
Le représentant doit avoir la même taille que l'ensemble du syndicat. Sinon, les données complètes ne seraient pas enregistrées. Le représentant ne doit pas non plus disposer de zones de remplissage (zones de données vides créées par le compilateur pour aligner les données dans le stockage).
La décomposition du représentant en types de données primitifs ne doit pas contenir d'instances de type
REAL
ouLREAL
ou instance de typeSTRING
ouWSTRING
.De plus, le représentant doit être composé de types pris en charge (voir ci-dessus). Par exemple le représentant peut être du type
Structure
– cependant, la structure elle-même ne doit pas contenir de pointeur.
Attribut : 'ac_persist'
L'attribut 'ac_persist
' peut être utilisé pour
Variables
Instances de structures
Instances de blocs fonctionnels
Membres des structures
Membres des blocs fonctionnels
{attribute 'ac_persist' [ := '<PERSISTENCE_GROUP>']}
PERSISTENCE_GROUP
est le nom du groupe de persistance auquel la déclaration doit être affectée. Il doit s'agir d'un identifiant CEI valide. Si aucun groupe de persistance n'est nommé ici, l'affectation sera effectuée selon l'attribut 'ac_persist_set_default_group'
, qui dans ce cas doit être défini.
Si une instance de structure ou une instance de bloc fonctionnel est marquée comme « persistante » et qu'au moins un membre de la déclaration est également marqué comme « persistant », un message d'erreur sera créé.
La variable t
est affecté au groupe de persistance PROCESS
. Tous les membres seront stockés de manière persistante.
PROGRAM PLC_PRG VAR {attribute 'ac_persist' := 'PROCESS'} t : TON; END_VAR
Le membre iNumIOs
est affecté au groupe de persistance CONFIG
. Ce membre sera stocké de manière persistante pour toutes les instances du bloc fonction (s'il n'est pas explicitement supprimé par l'attribut 'ac_persist_exclude'
).
FUNCTION_BLOCK FB VAR {attribute 'ac_persist' := 'CONFIG'} iNumIOs : INT := 0; END_VAR
Attribut : 'ac_persist_set_default_group'
Si le nom du groupe est manquant dans l'attribut 'ac_persist'
, un groupe par défaut doit être défini dans une instance de bloc fonctionnel ou une instance de structure contenant la variable correspondante directement ou indirectement. Ceci est possible avec l'attribut 'ac_persist_set_default_group'
. L'attribut peut également être défini pour un membre du bloc fonctionnel. La définition la plus intime de 'ac_persist_set_default_group'
sera utilisé comme groupe par défaut pour la variable.
Il est interdit d'utiliser 'ac_persist_set_default_group'
ensemble avec 'ac_persist'
ou 'ac_persist_exclude'
. Dans ce cas, un message d'erreur sera créé lors de la génération du code.
FUNCTION_BLOCK FB_Util VAR {attribute 'ac_persist'} // no group //'ac_persist_set_default_group‘ and 'ac_persist_exclude' not allowed here i : INT := 0; END_VAR
PROGRAM PLC_PRG VAR {attribute 'ac_persist_set_default_group' := 'PROCESS'} fbu1 : FB_Util; {attribute 'ac_persist_set_default_group'´ := 'CONFIG'} fbu2 : FB_Util; END_VAR
Attribut : 'ac_persist_exclude'
L'attribut 'ac_persist_exclude'
est utilisé pour exclure une variable du stockage persistant, peu importe si les membres de la structure ou de la déclaration du bloc fonctionnel sont définis comme « persistants ». S'il n'existe aucun membre persistant dans la déclaration, une erreur sera créée lors de la génération du code.
PROGRAM PLC_PRG VAR {attribute 'ac_persist_exclude'} fb1 : FB; END_VAR