summaryrefslogtreecommitdiff
path: root/docs/src/hal/halshow_fr.txt
blob: 29273cfd0e57bddb57b9a0ed00545d57da61b831 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
:lang: fr
:toc:

= Les fonctionnalités de Halshow

[[cha:halshow]] (((Halshow)))

== Le script Halshow

Le script halshow peut vous aider à retrouver votre chemin dans un HAL
en fonctionnement. Il s'agit d'un système très spécialisé qui doit se
connecter à un HAL en marche. Il ne peut pas fonctionner seul car il
repose sur la capacité de HAL de rapporter ce qu'il connaît de lui même
par la librairie d'interface de halcmd. Chaque fois que halshow
fonctionne avec une configuration de LinuxCNC différente, il sera différent.

Comme nous le verrons bientôt, cette capacité de HAL de se documenter
lui même est un des facteurs clés pour arriver à un système CNC
optimum.

On peut accéder à Halshow depuis Axis, pour cela, aller dans le menu
_Machine_ puis choisir _Afficher la configuration de HAL_.

=== Zone de l'arborescence de Hal

La gauche de l'écran que montre la figure ci-dessous est
une arborescence, un peu comme vous pouvez le voir avec certains
navigateurs de fichiers. Sur la droite, une zone avec deux onglets:
MONTRER et WATCH.

[[cap:Fenetre-Halshow]]
.La fenêtre de Halshow

image::images/halshow-1_fr.png[]

L'arborescence montre toutes les parties principales de HAL. En face
de chacune d'entre elles, se trouve un petit signe + ou - dans une
case. Cliquer sur le signe plus pour déployer cette partie de
l'arborescence et affichera son contenu. Si cette case affiche un signe
moins, cliquer dessus repliera cette section de l'arborescence.

Il est également possible de déployer et de replier l'arborescence
complète depuis le menu _Arborescence_.

[[cap:onglet-Montrer]]
.L'onglet Montrer

image::images/halshow-3.png[]

=== Zone de l'onglet MONTRER

En cliquant sur un nom dans l'arborescence plutôt que sur son signe
plus ou moins, par exemple le mot _Components_, HAL affichera tout ce
qu'il connait du contenu de celui-ci. La figure 
<<cap:Fenetre-Halshow, halshow>> montre une liste comme celle que vous verrez si
vous cliquez sur _Components_ avec une carte servo standard m5i20 en
fonctionnement. L'affichage des informations est exactement le même que
celui des traditionnels outils d'analyse de HAL en mode texte.
L'avantage ici, c'est que nous y avons accès d'un clic de souris. Accès
qui peut être aussi large ou aussi focalisé que vous le voulez.

Si nous examinons de plus près l'affichage de l'arborescence, nous
pouvons voir que les six éléments principaux peuvent tous être déployés
d'au moins un niveau. Quand ces niveaux sont à leur tour déployés vous
obtenez une information de plus en plus focalisée en cliquant sur le
nom des éléments dans l'arborescence. Vous trouverez que certaines hal
pins et certains paramètres affichent plusieurs réponses. C'est dû à la
nature des routines de recherche dans halcmd lui même. Si vous cherchez
une pin, vous pouvez en trouver deux comme cela:

    Component Pins: 
    Owner  Type  Dir  Value  Name 
    06     bit    -W   TRUE  parport.0.pin-10-in 
    06     bit    -W  FALSE  parport.0.pin-10-in-not 

Le deuxième nom de pin contient le nom complémenté du premier.

Dans le bas de l'onglet Montrer, un champ de saisie permet de jouer
sur le fonctionnement de HAL. Les commandes que vous entrez ici et leur
effet sur HAL, ne sont pas enregistrés. Elles persisteront tant que LinuxCNC
tournera, mais disparaîtront dès son arrêt.

Le champ de saisie marqué _Tester une commande HAL:_ acceptera
n'importe quelle commande valide pour halcmd. Elles incluent:

- Loadrt, unloadrt (chargement / déchargement en temps réel du module)
- Loadusr, unloadusr (chargement / déchargement de l'espace utilisateur des composants)
- addf, delf (ajout / suppression d'une fonction de / vers un fil en temps réel)
- net (créer une connexion entre deux ou plusieurs articles)
- setp (jeu de paramètres (ou broches) à une valeur)

Ce petit éditeur entrera une commande à chaque fois que vous presserez
_Entrée_ ou que vous cliquerez sur le bouton _Exécuter_. Si une
commande y est mal formée, un dialogue d'erreur s'affichera. Si vous
n'êtes pas sûr de savoir comment formuler une commande, vous trouverez
la réponse dans la documentation de halcmd et des modules spécifiques
avec lesquels vous travaillez.

Nous allons utiliser cet éditeur pour ajouter un module différentiel à
HAL et le connecter à la position d'un axe pour voir le ratio de
changement de position, par exemple, l'accélération. Il faut d'abord
charger un module de HAL nommé blocks, l'ajouter au thread servo et le
connecter à la pin position d'un axe. Une fois cela fait, nous pourrons
retrouver la sortie du différenciateur dans halscope. Alors allons-y.
(oui j'ai vérifié).

Ndt: le message qui s'affiche au chargement de blocks ne l'empêche pas
de fonctionner.
----
loadrt blocks ddt=1 
----

Maintenant, regardez dans components, vous devriez y voir blocks.
----
    Loaded HAL Components: 
    ID Type        Name 
    10 User halcmd29800 
    09 User halcmd29374 
    08   RT      blocks 
    06   RT hal_parport 
    05   RT    scope_rt 
    04   RT     stepgen 
    03   RT      motmod 
    02 User   iocontrol 
----

Effectivement, il est là. Dans notre cas l'id est 08. Ensuite nous
devons savoir quelles fonctions sont disponibles avec lui, nous
regardons dans Functions.
----
    Exported Functions: 
    Owner  CodeAddr      Arg  FP Users Name 
      08   E0B97630 E0DC7674 YES     0 ddt.0 
      03   E0DEF83C 00000000 YES     1 motion-command-handler 
      03   E0DF0BF3 00000000 YES     1 motion-controller 
      06   E0B541FE E0DC75B8  NO     1 parport.0.read 
      06   E0B54270 E0DC75B8  NO     1 parport.0.write 
      06   E0B54309 E0DC75B8  NO     0 parport.read-all 
      06   E0B5433A E0DC75B8  NO     0 parport.write-all 
      05   E0AD712D 00000000  NO     0 scope.sample 
      04   E0B618C1 E0DC7448 YES     1 stepgen.capture-position 
      04   E0B612F5 E0DC7448  NO     1 stepgen.make-pulses 
      04   E0B614AD E0DC7448 YES     1 stepgen.update-freq 
----

Ici, nous cherchons owner #08 et voyons que blocks a exporté une
fonction nommée ddt.0. Nous devrions être en mesure d'ajouter ddt.0 au
thread servo et il fera ses calculs chaque fois que le thread sera mis
à jour. Encore une fois recherchons la commande addf et on voit qu'elle
utilise trois arguments comme cela:

    addf <functname> <threadname> [<position>]

Nous connaissons déjà functname=ddt.0, pour trouver le nom du thread,
déployons l'arborescence des Threads. Nous y trouvons deux threads,
servo-thread et base-thread. La position de ddt.0 dans le thread n'est
pas critique. Passons la commande:
----
addf ddt.0 servo-thread 
----

Comme c'est juste pour visualiser, nous laissons la position en blanc
pour obtenir la dernière position dans le thread. La figure 
<<cap:Commande-addf, sur la commande addf>> affiche l'état de halshow après
que cette commande a été exécutée.

[[cap:Commande-addf]]
.Commande Addf

image::images/halshow-2_fr.png[]

Ensuite, nous devons connecter ce bloc à quelque chose. Mais comment
savoir quelles pins sont disponibles? La réponse se trouve dans
l'arbre, en regardant sous Pins. On y trouve ddt et on voit:
----
    Component Pins: 
    Owner Type  Dir Value       Name 
    08    float R-  0.00000e+00 ddt.0.in 
    08    float -W  0.00000e+00 ddt.0.out 
----

Cela semble assez facile à comprendre, mais à quel signal ou pin
voulons-nous nous connecter, ça pourrait être une pin d'axe, une pin de
stepgen, ou un signal. On vois cela en regardant dans axis.0.
----
    Component Pins: 
    Owner Type  Dir Value       Name 
    03    float -W  0.00000e+00 axis.0.motor-pos-cmd ==> Xpos-cmd 
----

Donc, il semble que Xpos-cmd devrait être un bon signal à utiliser.
Retour à l'éditeur et entrons la commande suivante:
----
linksp Xpos-cmd ddt.0.in 
----

Maintenant si on regarde le signal Xpos-cmd dans l'arbre, on voit ce
qu'on a fait.
----
    Signals: 
    Type Value Name 
    float 0.00000e+00 Xpos-cmd 
    <== axis.0.motor-pos-cmd 
    ==> ddt.0.in 
    ==> stepgen.0.position-cmd 
----

Nous voyons que ce signal provient de axis.0.motor-pos-cmd et va, à la
fois, sur ddt.0.in et sur stepgen.0.position-cmd. En connectant notre
bloc au signal nous avons évité les complications avec le flux normal
de cette commande de mouvement.

La zone de l'onglet _Montrer_ utilise halcmd pour découvrir ce qui se
passe à l'intérieur de HAL pendant son fonctionnement. Il vous donne
une information complète de ce qu'il découvre. Il met aussi à jour dès
qu'une commande est envoyée depuis le petit éditeur pour modifier ce
HAL. Il arrive un temps ou vous voulez autre chose d'affiché, sans la
totalité des informations disponibles dans cette zone. C'est la grande
valeur de l'onglet _WATCH_ d'offrir cela graphiquement.

=== Zone de l'onglet WATCH

En cliquant sur l'onglet Watch, une zone vide s'affichera.
footnote:[Le taux de rafraîchissement de la zone Watch est plus
lent que celui de Halmeter ou de Halscope. Si vous avez besoin d'une bonne résolution
dans le timming des signaux, ces outils sont plus efficaces.] 
Vous pouvez ajouter des pins ou des signaux quand l'onglet Watch est
ouvert, en cliquant sur leurs noms. La figure <<cap:onglet-Montrer, 4>>
montre cette zone avec plusieurs signaux de type _bit_. Parmis ces
signaux, les enable-out pour les trois premiers axes et deux de la
branche iocontrol, les signaux _estop_. Notez que les axes ne sont pas
activés même si les signaux estop disent que LinuxCNC n'est pas en estop. Un
bref regard sur TkLinuxCNC en arrière plan, montre que l'état de LinuxCNC est
ESTOP RESET. L'activation des amplis ne deviendra pas vraie tant que la
machine ne sera pas mise en marche.

[[Onglet-watch]]
.L'onglet WATCH
(((L'onglet watch)))

image::images/halshow-4.png[]

Les cercles de deux couleurs, simili Leds, sont toujours bruns foncé
quand un signal est faux. Elle sont jaunes quand le signal est vrai.
Quand une pin ou un signal est sélectionné mais n'est pas de type bit,
sa valeur numérique s'affiche.

Watch permet de visualiser rapidement le résultat de tests sur des
contacts ou de voir l'effet d'un changement que vous faites dans LinuxCNC en
utilisant l'interface graphique. Le taux de rafraîchissement de Watch
est un peu trop lent pour visualiser les impulsions de pas d'un moteur
mais vous pouvez l'utiliser si vous déplacez un axe très lentement ou
par très petits incréments de distance. Si vous avez déjà utilisé
IO_Show dans LinuxCNC, la page de Watch de halshow peut être réglée pour
afficher ce que fait le port parallèle.