Skip to content
Snippets Groups Projects
Commit 625c8284 authored by PICHON's avatar PICHON
Browse files

README v1

parent accc5d24
No related branches found
No related tags found
No related merge requests found
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Description # Description
L'objectif du TangoParser est de fournir de nouveaux attributs TANGO qui soient le résultat de calculs à partir d’attributs déjà existants L'objectif du TangoParser est de fournir de nouveaux attributs TANGO qui soient le résultat de calculs à partir d’attributs déjà existants
Exemple : ## Exemple
Je calcule la position du faisceau au Point Z en fonction des mesures effectuées sur les xbpm 1 et xbpm2 (mesures déjà disponibles dans TANGO) Je calcule la position du faisceau au Point Z en fonction des mesures effectuées sur les xbpm 1 et xbpm2 (mesures déjà disponibles dans TANGO)
<img src="doc/img/exemple_usage.png" alt="Exemple d'usage" width="600px"/> <img src="doc/img/exemple_usage.png" alt="Exemple d'usage" width="600px"/>
...@@ -32,22 +32,29 @@ Je calcule la position du faisceau au Point Z en fonction des mesures effectuée ...@@ -32,22 +32,29 @@ Je calcule la position du faisceau au Point Z en fonction des mesures effectuée
![Propriétés](doc/img/properties_full.png) ![Propriétés](doc/img/properties_full.png)
# State et status # State et status
Le parser indique le State de chacun des Devices utilisés pour les calculs
L’état du parser prend le state avec la priorité la plus élevée. (Voir propriété : PriorityList)
![Exemple de state et status](doc/img/state_status.png) ![Exemple de state et status](doc/img/state_status.png)
# Commandes # Commandes
## EvaluateExpression
La commande execute la fonction donnée en paramètre et renvoie le résultat. Si l'expression contient des erreurs, un message apparaitra.
![Evaluation d'expression](doc/img/expression.png)
## GetExpression
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
<img src="doc/img/output_names.png" alt="Exemple d'OutputNames" width="400px"/> <img src="doc/img/output_names.png" alt="Exemple d'OutputNames" width="400px"/>
...@@ -84,23 +89,94 @@ Les nouveaux attributs en écriture et en lecture sont décrits par la propriét ...@@ -84,23 +89,94 @@ Les nouveaux attributs en écriture et en lecture sont décrits par la propriét
### Exemple ### Exemple
DevDouble IO;<span style="color: green">p1+p2</span>;<span style="color: orange">p1=IO+1</span>;<span style="color: orange">p2=IO+2</span> DevDouble IO;<span style="color: green">p1+p2</span>;<span style="color: orange">p1=IO+1</span>;<span style="color: orange">p2=IO+2</span>
> :warning: « ; » est le séparateur > :warning: « `;` » est le séparateur
### Explication
Un nouvel attribut `IO` est disponible. Sa partie read contiendra le résultat de « <span style="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 « <span style="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.
![Exemple d'IONames](doc/img/io_names.png)
### Variables
On peut créer de nouvelles variables (non définies dans AttributeNames) dans InputNames ou IONames:
#### Exemple
Création des variables « aux1 » et « coef »:
nbbin;<span style="color: green">aux1</span>;<span style="color: orange">aux1=nbbin</span>
detcRW;<span style="color: green">10*(coef^(100/aux1))</span>;<span style="color: orange">coef=detcRW</span>
![Exemple d'IOputNames](doc/img/io_names.png) ![Exemple de variables](doc/img/variables.png)
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 :
* DevBoolean,
* DevShort,
* DevLong,
* DevFloat,
* DevDouble,
* DevUShort,
* DevULong,
* DevString,
* State,
* DevUChar,
* DevLong64,
* DevULong64
Le type par défaut est DevDouble.
# Opérateurs
| | | Double | Complex | String | Vector |
| :--------------------------- | :----: | :----------------: | :----------------: | :-------------------------: | :----------------: |
| Power | ^ | :heavy_check_mark: | :heavy_check_mark: | | |
| Boolean Not | ! | :heavy_check_mark: | | | |
| Unary Plus, Unary Minus | +x, -x | :heavy_check_mark: | :heavy_check_mark: | | |
| Dot product, cross product | ., ^^ | | | | :heavy_check_mark: |
| Modulus | % | :heavy_check_mark: | | | |
| Division | / | :heavy_check_mark: | :heavy_check_mark: | | :heavy_check_mark: |
| Multiplication | * | :heavy_check_mark: | :heavy_check_mark: | | :heavy_check_mark: |
| Addition, Subtraction | +, - | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: (only +) | :heavy_check_mark: |
| Less or Equal, More or Equal | <=, >= | :heavy_check_mark: | | :heavy_check_mark: | |
| Less Than, Greater Than | <, > | :heavy_check_mark: | | :heavy_check_mark: | |
| Not Equal, Equal | !=, == | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
| Boolean And | && | :heavy_check_mark: | | | |
| Boolean Or | \| | | :heavy_check_mark: | | |
| Assignment | = | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
# Fonctions et constantes disponibles # Fonctions et constantes disponibles
Trigonometric Functions ## Trigonometric Functions
All functions accept arguments of the Double and Complex type, except atan2 which only accepts Double arguments. All functions accept arguments of the Double and Complex type, except atan2 which only accepts Double arguments.
| Description | Function Name | | Description | Function Name |
|:------------|:--------------| | :------------------------- | :------------ |
| Sine | sin(x) | | Sine | sin(x) |
| Cosine | cos(x) | | Cosine | cos(x) |
| Tangent | tan(x) | | Tangent | tan(x) |
...@@ -115,54 +191,52 @@ All functions accept arguments of the Double and Complex type, except atan2 whic ...@@ -115,54 +191,52 @@ All functions accept arguments of the Double and Complex type, except atan2 whic
| Hyperbolic Cosine | cosh(x) | | Hyperbolic Cosine | cosh(x) |
| Hyperbolic Tangent | tanh(x) | | Hyperbolic Tangent | tanh(x) |
| Inverse Hyperbolic Sine | asinh(x) | | Inverse Hyperbolic Sine | asinh(x) |
| Inverse Hyperbolic Cosine1 | acosh(x) | | Inverse Hyperbolic Cosine | acosh(x) |
| Inverse Hyperbolic Tangent1 | atanh(x) | | Inverse Hyperbolic Tangent | atanh(x) |
Log and Exponential Functions ## Log and Exponential Functions
All functions accept arguments of the Double and Complex types. All functions accept arguments of the Double and Complex types.
| Description | Function Name | | Description | Function Name |
|:------------|:--------------| | :---------------- | :------------ |
| Natural Logarithm1 | ln(x) | Natural Logarithm | ln(x) |
| Logarithm base 101 | log(x) | Logarithm base 10 | log(x) |
| Logarithm base 21 | lg(x) | Logarithm base 2 | lg(x) |
| Exponential (e^x) | exp(x) | Exponential (e^x) | exp(x) |
| Power1 | pow(x) | Power | pow(x) |
Statistical Functions ## Statistical Functions
All functions accept either a vector (e.g. min([1,2,3])) or a set of numbers (e.g. min(1,2,3)). All functions accept either a vector (e.g. min([1,2,3])) or a set of numbers (e.g. min(1,2,3)).
| Description | Function Name | | Description | Function Name |
|:------------|:--------------| | :---------- | :----------------- |
| Average | avg(x1,x2,x3,...) | | Average | avg(x1,x2,x3,...) |
| Minimum | min(x1,x2,x3,...) | MinMax(true) | Minimum | min(x1,x2,x3,...) |
| Maximum | max(x1,x2,x3,...) | MinMax(false) | Maximum | max(x1,x2,x3,...) |
| Vector Sum | vsum(x1,x2,x3,...) | | Vector Sum | vsum(x1,x2,x3,...) |
Rounding Functions ## Rounding Functions
| Description | Function Name | | Description | Function Name |
|:------------|:--------------| | :--------------- | :-------------------- |
| Round | round(x), round(x, p) | | Round | round(x), round(x, p) |
| Round to integer | rint(x), rint(x, p) | | Round to integer | rint(x), rint(x, p) |
| Floor | floor(x) | | Floor | floor(x) |
| Ceiling | ceil(x) | | Ceiling | ceil(x) |
Miscellaneous Functions ## Miscellaneous Functions
| Description | Function Name | | Description | Function Name |
|:------------|:--------------| | :-------------------------------------------- | :-------------------------- |
| If | if(cond, trueval, falseval) | | If | if(cond, trueval, falseval) |
| Str (convert number to string) | str(x) | | Str (convert number to string) | str(x) |
| Absolute Value / Magnitude | abs(x) | | Absolute Value / Magnitude | abs(x) |
| Random number | Random number (between 0 and 1) | rand() |
| (between 0 and 1) | rand() | | Modulus = x % y | mod(x,y) |
| Modulus | mod(x,y) | Square Root | sqrt(x) |
| = x % y |
| Square Root1 | sqrt(x) |
| Sum | sum(x,y,...) | | Sum | sum(x,y,...) |
| Binomial coefficients | binom(n, i) | | Binomial coefficients | binom(n, i) |
| Signum (-1,0,1 depending on sign of argument) | signum(x) | | Signum (-1,0,1 depending on sign of argument) | signum(x) |
Complex Functions ## Complex Functions
| Description | Function Name | | Description | Function Name |
|:------------|:--------------| | :----------------------------------------------------------------- | :-------------- |
| Real Component | re(c) | | Real Component | re(c) |
| Imaginary Component | im(c) | | Imaginary Component | im(c) |
| Complex Modulus (Absolute Value) | cmod(c) | | Complex Modulus (Absolute Value) | cmod(c) |
...@@ -177,5 +251,23 @@ Notes ...@@ -177,5 +251,23 @@ Notes
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
![Exemple de propriétés spectrum](doc/img/spectrum_prop.png)
![Exemple de spectrum dans l'ATKPanel](doc/img/spectrum_atk.png)
# Aide au diagnostic # Aide au diagnostic
## Les logs
![Exemple de log d'erreur](doc/img/log_error.png)
## 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.
![Exemple de variables](doc/img/attribut_description.png)
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment