= pyVCP
Panneau virtuel de contrôle en python (*Py*thon *V*irtual *C*ontrol
*P*anel)
== Introduction
Le panneau de contrôle virtuel pyVCP (python Virtual Control Panel) a
été créé pour donner à l'intégrateur la possibilité de personnaliser
l'interface graphique AXIS avec des boutons et des indicateurs destinés
aux tâches spéciales.
Le coût d'un panneau de contrôle physique est très élevé et il peut
utiliser un grand nombre de broches d'entrées/sorties. C'est là que le
panneau virtuel prends l'avantage car il ne coûte rien d'utiliser
pyVCP.
Les panneaux virtuels de contrôle peuvent être utilisés pour tester ou
monitorer le matériel, les entrées/sorties et remplacer temporairement
d'autres matériels d'entrées/sorties pendant le déboguage d'une logique
ladder, ou pour simuler un panneau physique avant de le construire et
de le câbler vers les cartes électroniques.
L'image suivante montre plusieurs widgets pyVCP.
image:images/pyvcp_group.png[]
== pyVCP
La disposition d'un panneau pyVCP est spécifiée avec un fichier XML
qui contient les balises des widgets entre et . Par
exemple:
image:images/pyvcp_mypanel_fr.png[]
Si vous placez ce texte dans un fichier nommé tiny.xml et que vous le
lancez avec:
pyvcp -c panneau tiny.xml
pyVCP va créer le panneau pour vous, il y inclut deux widgets, un
Label avec le texte “Ceci est un indicateur à LED” et une LED rouge,
utilisée pour afficher l'état d'un signal HAL de type BIT. Il va aussi
créer un composant HAL nommé “panneau” (tous les widgets dans ce
panneau sont connectés aux pins qui démarrent avec “panneau”). Comme
aucune balise n'était présente à l'intérieur de la balise
, pyVCP nomme automatiquement la pin HAL pour le widget LED
panneau.led.0
Pour obtenir la liste des widgets, leurs balises et options, consultez
la documentation des widgets: <>
Un fois que vous avez créé votre panneau, connecter les signaux HAL de
la forme à la pin pyVCP se fait avec la commande 'halcmd linksp'
habituelle. Si vous débutez avec HAL, le tutoriel de HAL
<> est vivement recommendé.
== Sécurité avec pyVCP
Certaines parties de pyVCP sont évaluées comme du code Python, elles
peuvent donc exécuter n'importe quelle action disponible dans les
programmes Python. N'utilisez que des fichiers pyVCP en .xml à partir
d'une source de confiance.
== Utiliser pyVCP avec AXIS [[sec:pyvcp-avec-axis]]
Puisque AXIS utilise le même environnement graphique et les même
outils (Tkinter) que pyVCP, il est possible d'inclure un panneau pyVCP
sur le côté droit de l'interface utilisateur normale d'AXIS. Un exemple
typique est présenté ci-dessous.
Placer le fichier pyVCP XML décrivant le panneau dans le même
répertoire que le fichier .ini. Nous voulons afficher la vitesse
courante de la broche sur un widget barre de progression. Copier le
code XML suivant dans un fichier appelé broche.xml:
Ici nous avons fait un panneau avec un label “Vitesse broche:” et un
widget barre de progression. Nous avons spécifié que la pin HAL
connectée à la barre de progression devait s'appeler “spindle-speed” et
réglé la valeur maximum de la barre à 5000 (se reporter à la
documentation des widgets, plus loin, pour toutes les options
disponibles). Pour faire connaître ce fichier à AXIS et qu'il l'appelle
au démarrage, nous devons préciser ce qui suit dans la section
[DISPLAY] du fichier .ini:
PYVCP = broche.xml
Pour que notre widget affiche réellement la vitesse de la broche
“spindle-speed”, il doit être raccordé au signal approprié de HAL. Le
fichier .hal qui sera exécuté quand AXIS et pyVCP démarreront doit être
spécifié, de la manière suivante, dans la section [HAL] du fichier
.ini:
POSTGUI_HALFILE = broche_vers_pyvcp.hal
Ce changement lancera la commande HAL spécifiée dans
“broche_vers_pyvcp.hal”. Dans notre exemple, ce fichier contiendra
juste la commande suivante:
net spindle-rpm-filtered => pyvcp.spindle-speed
ce qui suppose que le signal appelé “spindle-rpm-filtered” existe
aussi. Noter que lors de l'exécution avec AXIS, toutes les pins des
widgets de pyVCP ont des noms commençant par “pyvcp.”.
image:images/pyvcp_AXIS_fr.png[]
Voila à quoi ressemble le panneau pyVCP que nous venons de créer,
incorporé à AXIS. La configuration `sim/lathe` fournie en exemple, est
configurée de cette manière.
== Documentation des widgets de pyVCP [[sec:Documentation-des-widgets]]
Les signaux de HAL existent en deux variantes, BIT et FLOAT. pyVCP
peut afficher la valeur d'un signal avec un widget indicateur, ou
modifier la valeur d'un signal avec un widget de contrôle. Ainsi, il y
a quatre classes de widgets pyVCP connectables aux signaux de HAL. Une
cinquième classe de widgets d'aide permet d'organiser et d'appliquer
des labels aux panneaux.
- Widgets de signalisation, signaux BIT: led, rectled
- Widgets de contrôle, signaux BIT: button, checkbutton, radiobutton
- Widgets de signalisation, signaux FLOAT: number, s32, u32, bar, meter
- Widgets de contrôle, signaux FLOAT: spinbox, scale, jogwheel
- Widgets d'aide: hbox, vbox, table, label, labelframe
==== Syntaxe
Chaque widget est décrit brièvement, suivi par la forme d'écriture
utilisée et d'une capture d'écran. Toutes les balises contenues dans la
balise du widget principal, sont optionnelles.
==== Notes générales
à l'heure actuelle, les deux syntaxes, basée sur les balises et basée
sur les attributs, sont supportées. Par exemple, les deux fragments de
code XML suivants sont traités de manière identique:
et
"ma-led"
Quand la syntaxe basée sur les attributs est utilisée, les règles
suivantes sont utilisées pour convertir les valeurs des attributs en
valeurs Python:
. Si le premier caractère de l'attribut est un des suivants: `{(["'` ,
Il est évalué comme une expression Python.
. Si la chaine est acceptée par int(), la valeur est traitée comme un
entier.
. Si la chaine est acceptée par float(), la valeur est traitée comme un
flottant.
. Autrement, la chaine est acceptée comme une chaine.
Quand la syntaxe basée sur les balises est utilisée, le texte entre
les balises est toujours évalué comme un expression Python.
Les exemples ci-dessous montrent un mélange des deux formats.
==== Commentaires
Pour ajouter un commentaire utiliser la syntaxe de xml.
==== Editer un fichier XML
Editer le fichier XML avec un éditeur de texte. La plupart du temps un
double click sur le nom de fichier permet de choisir "ouvrir avec
l'editeur de texte" ou similaire.
==== Couleurs
Les couleurs peuvent être spécifiées en utilisant les couleurs RGB de
X11 soit par le nom, par exemple: "gray75" ou soit en hexa décimal, par
exemple: "#0000ff”. Une liste complète est consultable ici:
http://sedition.com/perl/rgb.html[http://sedition.com/perl/rgb.html].
Couleurs les plus courantes (les numéros suivant la couleur indiquent
la nuance de la couleur)
- white
- black
- blue and blue1 - 4
- cyan and cyan1 - 4
- green and green1 - 4
- yellow and yellow1 - 4
- red and red1 - 4
- purple and purple1 - 4
- gray and gray0 - 100
=== LED
Une LED est utilisée pour indiquer l'état d'un signal BIT. La couleur
de la LED sera on_color quand le signal BIT est vrai et off_color
autrement.
image:images/pyvcp_led.png[]
définit le nom de la pin, par défaut: “led.n”, où n est un
entier +
définit la taille de la led, par défaut: 20 +
définit la couleur de la led LED quand la pin est vraie,
par défaut: “green” +
définit la couleur de la LED quand la pin est fausse, par
défaut: “ref”
=== LED rectangulaire (rectled)
C'est une variante du widget "led".
+
RIDGE +
6 +
+
"ma-led-rect" +
"50" +
"100" +
"green" +
"red" +
+
Le code ci-dessus produit cet exemple. +
Il affiche également un relief autour de la boîte. +
image:images/pyvcp_rectled.png[]
=== Bouton (button)
Un bouton permet de contrôler une pin BIT. La pin sera mise vraie
quand le bouton sera pressé et maintenu enfoncé, elle sera mise fausse
quand le bouton sera relâché.
Les boutons peuvent suivre le format suivant:
- n où "n" est le nombre d'espaces horizontaux
supplémentaires
- n où "n" est le nombre d'espaces verticaux supplémentaires
- "color" Couleur au survol du
curseur
- "color" Couleur du bouton
==== Bouton avec texte (Text Button)