En donnant le nom d'un attribut en paramètre, la fonction renvoie son expression.
# Détail des propriétés principales
# Détail des propriétés principales
## AttributesNames
## AttributesNames
Les attributs à lire dans le système Tango sont décrits par la propriété `AttributeNames`
Les attributs à lire dans le système Tango sont décrits par la propriété `AttributeNames`
Exemple :
### Exemple :
*`p1,TDL-D13-1/DG/XBPM.1/verticalPosition1`
*`p1,TDL-D13-1/DG/XBPM.1/verticalPosition1`
*`p2,TDL-D13-1/DG/XBPM.1/verticalPosition2`
*`p2,TDL-D13-1/DG/XBPM.1/verticalPosition2`
*`p3,TDL-D13-1/DG/XBPM.2/verticalPosition1`
*`p3,TDL-D13-1/DG/XBPM.2/verticalPosition1`
*`p4,TDL-D13-1/DG/XBPM.2/verticalPosition2`
*`p4,TDL-D13-1/DG/XBPM.2/verticalPosition2`
Explication :
La « variable » `p1` va maintenant contenir le résultat de la lecture de l’attribut `TDL-D13-1/DG/XBPM.1/verticalPosition1` et sera utilisable dans les autres propriétés.
La « variable » `p1` va maintenant contenir le résultat de la lecture de l’attribut `TDL-D13-1/DG/XBPM.1/verticalPosition1` et sera utilisable dans les autres propriétés.
## InputNames
## InputNames
...
@@ -57,7 +64,6 @@ Les attributs dynamiques en écriture seule sont dans la propriété `InputNames
...
@@ -57,7 +64,6 @@ Les attributs dynamiques en écriture seule sont dans la propriété `InputNames
*`DevDouble p5, p1=p5*3`
*`DevDouble p5, p1=p5*3`
*`DevDouble p5, p2=p5/2`
*`DevDouble p5, p2=p5/2`
### Explication
* Créer un nouveau attribut `p5`,
* Créer un nouveau attribut `p5`,
* A chaque fois qu’un client écrit dans l’attribut p5, le Parser écrit dans les attributs p1 et p2 les nouvelles valeurs calculées en fonction de p5 et selon les expressions définies dans InputNames.
* A chaque fois qu’un client écrit dans l’attribut p5, le Parser écrit dans les attributs p1 et p2 les nouvelles valeurs calculées en fonction de p5 et selon les expressions définies dans InputNames.
* La partie read visible dans l'ATKPanel contient la dernière valeur saisie.
* La partie read visible dans l'ATKPanel contient la dernière valeur saisie.
...
@@ -73,7 +79,6 @@ Les attributs en lecture seule sont décrits par la propriété `OutputNames`
...
@@ -73,7 +79,6 @@ Les attributs en lecture seule sont décrits par la propriété `OutputNames`
*`DevDouble angleZ1,(p3-p1)/3.030`
*`DevDouble angleZ1,(p3-p1)/3.030`
*`DevDouble angleZ2,(p4-p2)/3.030`
*`DevDouble angleZ2,(p4-p2)/3.030`
### Explication
4 nouveaux attributs de type DevDouble sont maintenant disponibles dans TANGO
4 nouveaux attributs de type DevDouble sont maintenant disponibles dans TANGO
Un nouvel attribut `IO` est disponible. Sa partie read contiendra le résultat de « <spanstyle="color: green">p1+p2</span> » et lorsque l’on écrira dessus, le Parser écrira sur les attributs p1 et p2.
Un nouvel attribut `IO` est disponible. Sa partie read contiendra le résultat de « <spanstyle="color: green">p1+p2</span> » et lorsque l’on écrira dessus, le Parser écrira sur les attributs p1 et p2.
On ne peut définir qu’une seule expression (la première) pour la lecture. Et autant que souhaitées pour l’écriture.
On ne peut définir qu’une seule expression (la première) pour la lecture et autant que souhaitées pour l’écriture.

### Variables
On peut créer de nouvelles variables (non définies dans AttributeNames) dans InputNames ou IONames:
Il y a deux attributs en Read/Write. Chaque écriture sur detcRW ou nbbin modifie la partie read de detcRW.
On peut réutiliser les variables créées dans OuputNames.
## AutoInputProperties
## AutoInputProperties
On peut automatiser l’écriture des attributs définis dans IONames par la propriété AutoInputProperties.
Chaque ligne paramètre un attribut en précisant :
* Son nom,
* Son activation au démarrage du TangoParser
* Sa fréquence d’actualisation,
* La précision, elle est optionnelle et ignorée dans le cas des types non numériques (booléen, chaines de caractères). Dans le cas des vecteurs, elle s’applique à chaque élément.
Pour chaque attribut IOName présent dans la liste des valeurs de AutoInputProperties, un attribut booléen en Read/Write est créé pour permettre son activation ou désactivation. Il n’est visible qu’en mode expert.
### Exemple
valIO;false;0.5;0.01
valIO2;true;1
La valeur présente dans la partie « output » de valIO, sera vérifiée toutes les 0,5 secondes et, si elle change de plus de 0,01 en valeur absolue, elle est écrite dans la partie « input ». Dès le démarrage du TangoParser, le processus de recopie est activé et une première recopie à lieu.
:warning:Attention, ce mécanisme est dangereux.:warning:
Pour valIO2, la recopie devra être activée via l’attribut booléen « valIO2AutoInputActivation ». Il sera vérifié toutes les secondes et recopié en cas de changement strict.
# Format d'attributs
* SPECTRUM
Tous les attributs créés peuvent être de type SPECTRUM. Il suffit de spécifier "SPECTRUM" devant leur définition. Si c'est le cas, le type d'attribut devient obligatoire.
* SCALAR
Le type par défaut est SCALAR.
# Type d'attribut
Les type d'attributs possibles sont les suivants :
2 By default functions like acos(2) will return Double.NaN. A constructor is available which sets a flag to make the function return the appropriate complex result for such cases.
2 By default functions like acos(2) will return Double.NaN. A constructor is available which sets a flag to make the function return the appropriate complex result for such cases.
# Exemple d'atttribut SECTRUM avec transformée de fourier
Un nouvel attribut A5 est crée et est le résultat de la multiplication de B2 par un scalaire
B2 est un attribut spectrum READ-ONLY relu sur un Device Tango
Un nouvel attribut A6 est la somme de 2 attributs spectrum


# Aide au diagnostic
# Aide au diagnostic
## Les logs

## Tester les fonctions
A l'aide de la commande `evaluateExpression`, il est possible de tester une fonctions qui n'aurait pas fonctionnée à l'init du device.
## Vérifier l'expression d'un attribut
Cela peut se faire soit par la commande `GetExpression` soit dans le détail de l'attribut dans l'ATKPanel.
