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_representanty 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_representantattribut 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_VARTableau 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_VARLe 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
REALouLREALou instance de typeSTRINGouWSTRING.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_VARLe 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_VARAttribut : '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_VARPROGRAM PLC_PRG
VAR
{attribute 'ac_persist_set_default_group' := 'PROCESS'}
fbu1 : FB_Util;
{attribute 'ac_persist_set_default_group'´ := 'CONFIG'}
fbu2 : FB_Util;
END_VARAttribut : '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