/ docs / src / gui / pyvcp_examples_fr.txt
pyvcp_examples_fr.txt
  1  :lang: fr
  2  :toc:
  3  
  4  = Exemples d'utilisation de PyVCP
  5  
  6  == Panneau PyVCP dans AXIS
  7  
  8  Procédure pour créer un panneau PyVCP et l'utiliser, attaché dans la partie 
  9  droite de l'interface AXIS.
 10  
 11   - Créer un fichier .xml contenant la description du panneau et le placer dans
 12     le répertoire de la configuration.
 13   - Ajouter une entrée, avec le nom du fichier .xml, dans la section [DISPLAY] 
 14     du fichier ini.
 15   - Ajouter une entrée POSTGUI_HALFILE, avec le nom du fichier postgui HAL.
 16   - Ajouter les liens vers les pins de HAL pour le panneau dans le fichier
 17     postgui.hal pour "connecter" le panneau PyVCP avec LinuxCNC.
 18  
 19  == Panneaux flottants
 20  
 21  Pour créer des panneaux flottants PyVCP pouvant être utilisés avec
 22  n'importe quelle interface, suivre les points suivants:
 23  
 24   - Créer un fichier .xml contenant la description du panneau et le placer dans
 25     le répertoire de configuration.
 26   - Ajouter les lignes _loadusr_ dans le fichier.hal pour charger chaque panneau.
 27   - Ajouter les liens vers les pins de HAl du panneau dans le fichier postgui.hal,
 28     pour "connecter" les panneaux PyVCP à LinuxCNC.
 29  
 30  L'exemple suivant montre le chargement de deux panneaux PyVCP.
 31  ----
 32  loadusr -Wn btnpanel pyvcp -c btnpanel panel1.xml 
 33  loadusr -Wn sppanel pyvcp -c sppanel panel2.xml
 34  ----
 35  
 36  Les paramètres -Wn font que HAL **W**ait for **n**ame, attends le composant
 37  nommé _btnpanel_. 
 38  
 39  Les paramètres pyvcp -c font que PyVCP nomme le panneau.
 40  
 41  Les pins de HAL de panel1.xml seront nommées _btnpanel.<pin name>_
 42  
 43  Les pins de HAL de panel2.xml seront nommées _sppanel.<pin name>_
 44  
 45  Bien s'assurer qu'aucune ligne _loadusr_ ne fasse déjà appel à une de ces pins
 46  PyVCP.
 47  
 48  == Boutons de Jog
 49  
 50  Dans cet exemple nous allons créer un panneau PyVCP avec 3 boutons utilisables
 51  pour déplacer en manuel les axes X, Y et Z. Cette configuration sera réalisée
 52  avec l'assistant Stepconf qui générera la configuration de la machine.
 53  Premièrement, nous lançons l'assistant Stepconf et le configurons pour la
 54  machine, ensuite dans la page _Advanced Configuration Options_ nous effectuons
 55  les sélections pour ajouter un panneau PyVCP vierge, comme indiqué sur l'image
 56  suivante. Pour cet exemple nous avons nommé la configuration _pyvcp_xyz_ sur la
 57  page _Basic Machine Information_ de l'assistant Stepconf.
 58  
 59  .Assistant de configuration XYZ[[cap:XYZ-Wizard-Configuration]]
 60  
 61  image::images/xyz_ACO.png[alt="Assistant de configuration XYZ"]
 62  
 63  L'assistant Stepconf Wizard va créer plusieurs fichiers et les placer dans le
 64  répertoire _/emc/configs/pyvcp_xyz_. Si la case _Créer un lien_ est cochée,
 65  un lien vers ces fichiers sera créé sur le bureau.
 66  
 67  === Créer les Widgets
 68  
 69  Ouvrir le fichier custompanel.xml par un clic droit sur son nom, puis en
 70  sélectionnant _Ouvrir avec l'éditeur de texte_. Entre les balises
 71  _<pyvcp>_ et _</pyvcp>_ nous ajouterons les widgets pour le panneau.
 72  
 73  Tous les détails sur chacun des Widgets de PyVCP sont donnés dans la
 74  <<sec:Documentation-des-widgets, documentation des widgets>>.
 75  
 76  Dans le fichier custompanel.xml nous ajoutons la description des widgets.
 77  
 78  [source,xml]
 79  ----
 80  <pyvcp>
 81  
 82      <labelframe text="Boutons de Jog"> 
 83         <font>("Helvetica",16)</font>
 84  
 85          <!-- le bouton de jog de l'axe X --> 
 86          <hbox> 
 87              <relief>RAISED</relief> 
 88              <bd>3</bd> 
 89              <button> 
 90                  <font>("Helvetica",20)</font> 
 91                  <width>3</width> 
 92                  <halpin>"x-plus"</halpin> 
 93                  <text>"X+"</text> 
 94              </button> 
 95              <button> 
 96                  <font>("Helvetica",20)</font> 
 97                  <width>3</width> 
 98                  <halpin>"x-moins"</halpin> 
 99                  <text>"X-"</text> 
100              </button> 
101          </hbox>
102  
103          <!-- le bouton de jog de l'axe Y --> 
104          <hbox> 
105              <relief>RAISED</relief> 
106              <bd>3</bd> 
107              <button> 
108                  <font>("Helvetica",20)</font> 
109                  <width>3</width> 
110                  <halpin>"y-plus"</halpin> 
111                  <text>"Y+"</text> 
112              </button> 
113              <button> 
114                  <font>("Helvetica",20)</font> 
115                  <width>3</width> 
116                  <halpin>"y-moins"</halpin> 
117                  <text>"Y-"</text> 
118              </button> 
119          </hbox>
120  
121          <!-- le bouton de jog de l'axe Z --> 
122          <hbox> 
123              <relief>RAISED</relief> 
124              <bd>3</bd> 
125              <button> 
126                  <font>("Helvetica",20)</font> 
127                  <width>3</width> 
128                  <halpin>"z-plus"</halpin> 
129                  <text>"Z+"</text> 
130              </button> 
131              <button> 
132                  <font>("Helvetica",20)</font> 
133                  <width>3</width> 
134                  <halpin>"z-moins"</halpin> 
135                  <text>"Z-"</text> 
136              </button> 
137          </hbox>
138  
139          <!-- le curseur de vitesse de jog --> 
140          <vbox> 
141              <relief>RAISED</relief> 
142              <bd>3</bd> 
143              <label> 
144                  <text>"Vitesse de Jog"</text> 
145                  <font>("Helvetica",16)</font> 
146              </label> 
147              <scale> 
148                  <font>("Helvetica",14)</font> 
149                  <halpin>"jog-speed"</halpin> 
150                  <resolution>1</resolution> 
151                  <orient>HORIZONTAL</orient> 
152                  <min_>0</min_> 
153                  <max_>80</max_> 
154              </scale> 
155          </vbox>
156      </labelframe>
157  </pyvcp>
158  ----
159  
160  Après les ajouts précédents, nous avons un panneau PyVCP tel que celui
161  de l'image suivante, attaché à droite d'Axis. Il est beau mais ne fait rien tant
162  que les boutons ne sont pas "connectés" à halui. Si, à ce stade, une erreur se 
163  produit lors du déplacement de la fenêtre vers le bas, c'est généralement dû à 
164  une erreur de syntaxe ou d'écriture, elle est donc dans cette partie qu'il 
165  conviendra tout d'abord de vérifier soigneusement.
166  
167  .Boutons de Jog[[cap:Jog-Buttons]]
168  
169  image::images/xyz_buttons.png[alt="Boutons de Jog"]
170  
171  === Effectuer les connections
172  
173  Pour effectuer les connections nécessaires, ouvrir le fichier custom_postgui.hal
174  et y ajouter le code suivant:
175  
176  [source,c]
177  ----
178  # connecte les boutons PyVCP pour X 
179  net my-jogxmoins halui.jog.0.minus <= pyvcp.x-moins 
180  net my-jogxplus halui.jog.0.plus <= pyvcp.x-plus
181  
182  # connecte les boutons PyVCP pour Y
183  net my-jogymoins halui.jog.1.minus <= pyvcp.y-moins 
184  net my-jogyplus halui.jog.1.plus <= pyvcp.y-plus
185  
186  # connecte les boutons PyVCP pour Z 
187  net my-jogzmoins halui.jog.2.minus <= pyvcp.z-moins 
188  net my-jogzplus halui.jog.2.plus <= pyvcp.z-plus
189  
190  # connecte le curseur de vitesse de jog PyVCP  
191  net my-jogspeed halui.jog-speed <= pyvcp.jog-speed-f
192  ----
193  
194  Après avoir désactivé l'A/U (E-Stop) et activé la marche machine en mode Jog,
195  le déplacement du curseur du panneau PyVCP devrait agir dès qu'il est placé au 
196  delà de zéro et les boutons de jog devraient fonctionner. Il est impossible de 
197  jogger alors qu'un fichier G-code s'exécute ou pendant qu'il est en pause ni 
198  quand l'onglet _Données manuelles [F5]_ du (MDI), est ouvert.
199  
200  == Testeur de port
201  
202  Cet exemple montre comment faire un simple testeur de port parallèle en utilisant
203  PyVCP et HAL.
204  
205  Premièrement, créer le fichier ptest.xml qui contiendra le code suivant pour créer
206  la description du panneau.
207  
208  [source,xml]
209  ----
210  <!-- Panneau de test pour la config. du port parallèle -->
211  <pyvcp>
212    <hbox>
213      <relief>RIDGE</relief>
214      <bd>2</bd>
215      <button>
216        <halpin>"btn01"</halpin>
217        <text>"Pin 01"</text>
218      </button>
219      <led>
220        <halpin>"led-01"</halpin>
221        <size>25</size>
222        <on_color>"green"</on_color>
223        <off_color>"red"</off_color>
224      </led>
225    </hbox>
226    <hbox>
227      <relief>RIDGE</relief>
228      <bd>2</bd>
229      <button>
230        <halpin>"btn02"</halpin>
231        <text>"Pin 02"</text>
232      </button>
233      <led>
234        <halpin>"led-02"</halpin>
235        <size>25</size>
236        <on_color>"green"</on_color>
237        <off_color>"red"</off_color>
238      </led>
239    </hbox>
240    <hbox>
241      <relief>RIDGE</relief>
242      <bd>2</bd>
243      <label>
244        <text>"Pin 10"</text>
245        <font>("Helvetica",14)</font>
246      </label>
247      <led>
248        <halpin>"led-10"</halpin>
249        <size>25</size>
250        <on_color>"green"</on_color>
251        <off_color>"red"</off_color>
252      </led>
253    </hbox>
254    <hbox>
255      <relief>RIDGE</relief>
256      <bd>2</bd>
257      <label>
258        <text>"Pin 11"</text>
259        <font>("Helvetica",14)</font>
260      </label>
261      <led>
262        <halpin>"led-11"</halpin>
263        <size>25</size>
264        <on_color>"green"</on_color>
265        <off_color>"red"</off_color>
266      </led>
267    </hbox>
268  </pyvcp>
269  ----
270  
271  Le panneau flottant contenant deux pins de HAL d'entrée et deux pins de 
272  HAL de sortie.
273  
274  .Panneau flottant testeur de port parallèle[[cap:Port-Tester-Panel]]
275  
276  image::images/ptest.png[alt="Panneau flottant testeur de port parallèle"]
277  
278  Pour lancer les commandes de HAL dont nous avons besoin et démarrer tout ce
279  qi'il nous faut, nous avons mis le code suivant dans notre fichier ptest.hal.
280  
281  [source,c]
282  ----
283  loadrt hal_parport cfg="0x378 out"
284  loadusr -Wn ptest pyvcp -c ptest ptest.xml
285  loadrt threads name1=porttest period1=1000000
286  addf parport.0.read porttest
287  addf parport.0.write porttest
288  net pin01 ptest.btn01 parport.0.pin-01-out ptest.led-01
289  net pin02 ptest.btn02 parport.0.pin-02-out ptest.led-02
290  net pin10 parport.0.pin-10-in ptest.led-10
291  net pin11 parport.0.pin-11-in ptest.led-11
292  start
293  ----
294  
295  Pour lancer le fichier HAL, nous utilisons, dans un terminal, les commandes 
296  suivantes:
297  ----
298  ~$ halrun -I -f ptest.hal
299  ----
300  
301  La figure suivante montre à quoi ressemble le panneau complet.
302  
303  .Testeur de port parallèle, complet[[cap:Port-Tester-Complete]]
304  
305  image::images/ptest-final.png[alt="Testeur de port parallèle, complet"]
306  
307  Pour ajouter le reste des pins du port parallèle, il suffi de modifier les 
308  fichiers .xml et .hal.
309  
310  Pour visualiser les pins après avoir lancé le script HAL, utiliser la
311  commande suivante au prompt _halcmd:_
312  
313  ----
314  halcmd: show pin
315  Component Pins:
316  Owner Type  Dir Value  Name
317      2 bit   IN  FALSE  parport.0.pin-01-out <== pin01
318      2 bit   IN  FALSE  parport.0.pin-02-out <== pin02
319      2 bit   IN  FALSE  parport.0.pin-03-out
320      2 bit   IN  FALSE  parport.0.pin-04-out
321      2 bit   IN  FALSE  parport.0.pin-05-out
322      2 bit   IN  FALSE  parport.0.pin-06-out
323      2 bit   IN  FALSE  parport.0.pin-07-out
324      2 bit   IN  FALSE  parport.0.pin-08-out
325      2 bit   IN  FALSE  parport.0.pin-09-out
326      2 bit   OUT TRUE   parport.0.pin-10-in ==> pin10
327      2 bit   OUT FALSE  parport.0.pin-10-in-not
328      2 bit   OUT TRUE   parport.0.pin-11-in ==> pin11
329      2 bit   OUT FALSE  parport.0.pin-11-in-not
330      2 bit   OUT TRUE   parport.0.pin-12-in
331      2 bit   OUT FALSE  parport.0.pin-12-in-not
332      2 bit   OUT TRUE   parport.0.pin-13-in
333      2 bit   OUT FALSE  parport.0.pin-13-in-not
334      2 bit   IN  FALSE  parport.0.pin-14-out
335      2 bit   OUT TRUE   parport.0.pin-15-in
336      2 bit   OUT FALSE  parport.0.pin-15-in-not
337      2 bit   IN  FALSE  parport.0.pin-16-out
338      2 bit   IN  FALSE  parport.0.pin-17-out
339      4 bit   OUT FALSE  ptest.btn01 ==> pin01
340      4 bit   OUT FALSE  ptest.btn02 ==> pin02
341      4 bit   IN  FALSE  ptest.led-01 <== pin01
342      4 bit   IN  FALSE  ptest.led-02 <== pin02
343      4 bit   IN  TRUE   ptest.led-10 <== pin10
344      4 bit   IN  TRUE   ptest.led-11 <== pin11
345  ------
346  
347  Cela montre quelles pins sont IN est lesquelles sont OUT, ainsi que toutes les
348  connections.
349  
350  == Compte tours pour GS2[[sec:Exemple-Compte-Tours-GS2]]
351  
352  L'exemple suivant utilise un variateur de fréquence GS2 de la société Automation 
353  Direct. footnote:[ En Europe on trouve ce type de variateur sous la marque Omron.]
354   Il permet le pilotage du moteur, la visualisation de la vitesse ainsi que
355  d'autres informations dans un panneau PyVCP. Cet exemple est basé sur un autre,
356  relatif au variateur GS2 et se trouvant dans la section des exemples matériels
357  de ce manuel.
358  Ce dernier exemple s'appuie lui même sur la description du composant de 
359  HAL gs2_vfd.
360  
361  === Le panneau
362  
363  Pour créer le panneau nous ajoutons ce code au fichier .xml.
364  
365  [source,xml]
366  ----
367  <pyvcp>
368  
369      <!-- Compte tours --> 
370      <hbox> 
371          <relief>RAISED</relief> 
372          <bd>3</bd> 
373          <meter> 
374              <halpin>"spindle_rpm"</halpin> 
375              <text>"Broche"</text> 
376              <subtext>"tr/mn"</subtext> 
377              <size>200</size> 
378              <min_>0</min_> 
379              <max_>3000</max_> 
380              <majorscale>500</majorscale> 
381              <minorscale>100</minorscale> 
382              <region1>0,10,"yellow"</region1> 
383          </meter> 
384      </hbox>
385  
386      <!-- La Led On --> 
387      <hbox> 
388          <relief>RAISED</relief> 
389          <bd>3</bd> 
390          <vbox> 
391              <relief>RAISED</relief> 
392              <bd>2</bd> 
393              <label> 
394                  <text>"On"</text> 
395                  <font>("Helvetica",18)</font> 
396              </label> 
397              <width>5</width> 
398              <hbox> 
399                  <label width="2"/> <!-- utilisé pour centrer la Led --> 
400                  <rectled> 
401                      <halpin>"on-led"</halpin> 
402                      <height>"30"</height> 
403                      <width>"30"</width> 
404                      <on_color>"green"</on_color> 
405                      <off_color>"red"</off_color> 
406                  </rectled> 
407              </hbox> 
408          </vbox>
409  
410          <!-- La Led Sens horaire --> 
411          <vbox> 
412              <relief>RAISED</relief> 
413              <bd>2</bd> 
414              <label> 
415                  <text>"Sens horaire"</text> 
416                  <font>("Helvetica",18)</font> 
417                  <width>5</width> 
418              </label> 
419              <label width="2"/> 
420              <rectled> 
421                  <halpin>"fwd-led"</halpin> 
422                  <height>"30"</height> 
423                  <width>"30"</width> 
424                  <on_color>"green"</on_color> 
425                  <off_color>"red"</off_color> 
426              </rectled> 
427          </vbox>
428  
429          <!-- La Led Sens inverse --> 
430          <vbox> 
431              <relief>RAISED</relief> 
432              <bd>2</bd> 
433              <label> 
434                  <text>"Sens inverse"</text> 
435                  <font>("Helvetica",18)</font> 
436                  <width>5</width> 
437              </label> 
438              <label width="2"/> 
439              <rectled> 
440                  <halpin>"rev-led"</halpin> 
441                  <height>"30"</height> 
442                  <width>"30"</width> 
443                  <on_color>"red"</on_color> 
444                  <off_color>"green"</off_color> 
445              </rectled> 
446          </vbox> 
447      </hbox> 
448  </pyvcp>
449  ----
450  
451  L'image ci-dessous montre notre panneau PyVCP en fonctionnement. 
452  
453  .Panneau pour GS2[[cap:Panneau-GS2]]
454  
455  image::images/gs2_panel.png[alt="Panneau pour GS2"]
456  
457  === Les connections
458  
459  Pour qu'il fonctionne, il est nécessaire d'ajouter le code suivant au fichier
460  custom_postgui.hal, il réalise les connections entre PyVCP et LinuxCNC.
461  
462  [source,c]
463  ----
464  # affiche le compte tours, calcul basé sur freq * rpm par hz 
465  loadrt mult2 
466  addf mult2.0 servo-thread 
467  setp mult2.0.in1 28.75 
468  net cypher_speed mult2.0.in0 <= spindle-vfd.frequency-out 
469  net speed_out pyvcp.spindle_rpm <= mult2.0.out 
470  
471  # la led On 
472  net gs2-run => pyvcp.on-led
473  
474  # la led Sens horaire 
475  net gs2-fwd => pyvcp.fwd-led
476  
477  # la led Sens anti-horaire
478  net running-rev spindle-vfd.spindle-rev => pyvcp.rev-led
479  ----
480  
481  Certaines lignes demandent quelques explications. 
482  
483   - La ligne de la led Sens horaire utilise le signal créé dans le fichier 
484      custom.hal dans lequel la led Sens inverse doit utiliser le bit _spindle-rev_. 
485   - On ne _peut pas_ lier deux fois le bit _spindle-fwd_ pour utiliser le signal 
486      auquel il est déjà lié.
487  
488  
489