Variable : VAR_GENERIC CONSTANT
Variable constante générique
Une constante générique est une variable dans VAR_GENERIC CONSTANT
portée d'un bloc fonctionnel. La variable est définie uniquement lorsque l'instance du bloc fonctionnel est déclarée.
Les constantes génériques peuvent être utilisées dans les méthodes. Cela peut être particulièrement utile dans les VAR_IN_OUT
ou VAR_IN_OUT CONSTANT
portée.
Syntaxe de la déclaration de type
Syntaxe de la déclaration de type d'un bloc fonctionnel avec des constantes génériques
FUNCTION_BLOCK <function block name> VAR_GENERIC CONSTANT <generic constant name> : <integer data type> := <initial value> ; //Initial value will be overwritten END_VAR
| Nom du bloc fonctionnel |
| Portée des constantes génériques Vous pouvez déclarer n'importe quel nombre de constantes génériques dans le |
| Nom de variable des constantes génériques |
| Construisez le type de la constante générique. Un type de données entier ou la sous-étendue d'un type de données entier est autorisé. Exemple :
|
| Facultatif Initialisation ImportantLa valeur initiale n'est nécessaire que pour les contrôles de compilation. Au moment de l'exécution, la valeur est remplacée . |
La constante générique peut être utilisée comme d'habitude dans l'implémentation du bloc fonctionnel. Ces types de constantes peuvent être utilisés, par exemple, pour les indices de tableaux ou les longueurs de chaînes
Syntaxe de la déclaration de variable
Syntaxe de la déclaration de variable (instanciation du bloc fonctionnel) avec une constante spécifiée
Les options suivantes sont possibles :
PROGRAM <program name> VAR <fb instance name> : <function block name> < <literal> > ; <fb instance name> : <function block name> <( <expression> )> ; <fb instance name> : ARRAY [ <index start > .. <index end> ] OF <function block name> < <array length> > ; END_VAR
| Portée |
| Variable ; nom de l'instance du bloc fonctionnel |
| Tasse la variable avec le bloc de fonction Il s'agit d'un bloc fonctionnel avec des constantes génériques. |
| Facultatif Assigne une valeur spécifique au type de données qui n'est valide que pour cette instance de bloc fonctionnel. La valeur est formellement insérée Exemple : Si multiple des constantes génériques ont été déclarées pour le bloc fonctionnel définissant le type, puis une liste de valeurs séparées par des virgules est passée entre crochets angulaires. Il existe une valeur pour chaque constante. Example: |
| Facultatif Assigne une expression spécifique au type de données qui n'est valide que pour cette instance de bloc fonctionnel. L'expression est insérée Les crochets sont nécessaires car il est permis d'utiliser des symboles tels que Example: |
| Facultatif Tome la variable à l'aide d'un tableau de blocs fonctionnels. La longueur du tableau est la suivante :
Il s'agit d'un bloc fonctionnel avec des constantes génériques. Les constantes sont utilisées comme indices de tableau. Exemple : |
| Assigne une longueur de tableau spécifique au type de données, qui est valide en particulier pour cette instance de bloc fonctionnel. La longueur de tableau spécifiée est formellement insérée entre crochets angulaires en tant que suffixe du type de données. La valeur spécifiée doit correspondre à la longueur du tableau telle que définie par les index de début et de fin. Example: |
Exemples
FUNCTION_BLOCK FB_Pou VAR_GENERIC CONSTANT lnstring : DINT := 10; numstring : DINT := 100; END_VAR VAR arraystring : ARRAY[0..numstring-1] OF STRING(lnstring); END_VAR ;
PROGRAM PLC_PRG VAR fbPou : FB_Pou<100, 1000>; END_VAR
FUNCTION_BLOCK FB_SrString VAR_GENERIC CONSTANT maxlen2 : INT(5..10) := 5; //subrange data type END_VAR VAR arrTest : ARRAY[0..maxlen-1] OF BYTE; END_VAR ;
PROGRAM SrMain VAR CONSTANT cconst: INT(5..10) := 5; END_VAR VAR fbMyString1 : FB_SrString<5>; fbMyString2 : FB_SrString<(2 * cconst)>; arrMyString : ARRAY [0..5] OF FB_SrString<6>; END_VAR
Le code suivant montre comment définir un bloc de fonction capable de traiter des tableaux de longueur arbitraire. Le bloc fonctionnel possède un tableau de longueur générique mais constante. « Constante » signifie que, bien que la longueur de la matrice de chaque instance de bloc fonctionnel varie, elle est constante pendant toute la durée de vie de l'objet.
Ce type de construction est bénéfique, par exemple, pour un programmeur de bibliothèque qui souhaite implémenter une bibliothèque générique POU.
FUNCTION_BLOCK FB_MyString VAR_GENERIC CONSTANT maxlen : UDINT := 1; END_VAR VAR test : ARRAY[0..maxlen-1] OF BYTE; END_VAR ;
PROGRAM PLC_PRG VAR CONSTANT cconst: DINT := 1000; END_VAR VAR fbMyString1 : FB_MyString<100>; fbMyString2 : FB_MyString<(2 * cconst)>; arrMyString : ARRAY[0..5] OF FB_MyString<6>; END_VAR ;
Héritage
Un bloc fonctionnel peut hériter d'un bloc fonctionnel de base avec une constante générique (EXTENDS
). Le bloc de fonction héritant nécessite sa propre constante générique. Une valeur spécifique peut ensuite être transférée en externe.
Syntaxe :
FUNCTION_BLOCK <function block name> VAR_GENERIC CONSTANT <generic constant name> : <integer data type> ; END_VAR EXTENDS <function block base> < <generic constant name> >
Un bloc fonctionnel avec une constante générique peut implémenter une interface (IMPLEMENTS
). L'interface déclare une propriété (PROPERTY
) avec laquelle la valeur spécifiée est accessible de l'extérieur. L'interface elle-même ne doit pas déclarer de constantes génériques ou de variables locales. Les interfaces n'ont aucune implémentation.
Syntaxe :
FUNCTION_BLOCK <function block name> VAR_GENERIC CONSTANT <generic constant name> : <integer data type> ; END_VAR IMPLEMENTS <interface name>
Astuce
Lors du codage, assurez-vous que la déclaration des constantes génériques est insérée en premier, suivie de EXTENDS
et IMPLEMENTS
. Il faut un certain temps pour s'y habituer, mais la raison en est que les constantes génériques peuvent également être utilisées avec les classes de base.
Définition de IString
interface pour un bloc fonctionnel générique.
It is strongly recommended to define an interface for generic function blocks. The interface should allow the generic function block instance to be used without knowledge of the generic constants.
Le Length
Cette propriété permet d'accéder à la constante générique.
INTERFACE IString METHOD Append : BOOL VAR_INPUT strAppend : IString; END_VAR METHOD Assign : BOOL VAR_INPUT stringIn : STRING; END_VAR METHOD ToString : STRING VAR_INPUT END_VAR PROPERTY Length : DINT
Déclaration du bloc fonctionnel FB_MyString
avec la constante générique maxlen
FUNCTION_BLOCK FB_MyString VAR_GENERIC CONSTANT maxlen : UDINT; END_VAR IMPLEMENTS IString
Le bloc fonctionnel FB_LongString
est une extension du bloc fonctionnel spécifié FB_MyString
.
FUNCTION_BLOCK FB_LongString EXTENDS FB_MyString<1000>
Déclaration du bloc fonctionnel FB_MySpecialString
avec la constante générique maxlen2
en tant qu'extension du bloc fonctionnel spécifié FB_MyString
. Le bloc fonctionnel est étendu par la méthode METH_ToLatin
.
FUNCTION_BLOCK FB_MySpecialString VAR_GENERIC CONSTANT maxlen2 : UDINT:= 1; END_VAR EXTENDS FB_MyString<maxlen2>
METHOD METH_ToLatin : STRING VAR_INPUT END_VAR
Instanciation des blocs de fonctions avec des constantes spécifiques
PROGRAM PLC_PRG VAR CONSTANT cconst: DINT := 1000; END_VAR VAR string1 : FB_MyString<100>; string2 : FB_MyString<(2 * cconst)>; derived1 : FB_LongString; derived2 : FB_MySpecialString<100>; END_VAR
Appels
string1.METH_Assign ('Welt'); string2.METH_Assign ('Hallo '); string2.METH_Append(string1); derived2.METH_ToLatin('Hello World');