Flux de création de fichiers GCODE avec des outils libres

Après le petit tutoriel de ce matin, voici un post qui résume le « flux de production » de mes fichiers GCODE.

  • La base

Tout commence par l’objet indipensable à la prise de mesure: le pied à coulisse.

  • Les matériaux

Une fois l’objet à créer correctement dimensionné, il faut trouver le matériau dans lequel on va le créer. J’utilise principalement des bois et plastiques, les métaux étant (à par pour de la gravure) trop difficiles à fraiser avec mon matériel (il manque un refroidissement liquide ou un moteur de broche avec une faible vitesse et un gros couple).

  • Pour le bois, je prends en général du MDF ou du contreplaqué qui peuvent faire entre 3 et 15 mm.
  • Pour le plastique j’utilise beaucoup le PVC qui a un bon rapport qualité / prix ainsi que du PEHD ( c’est ce qui est utilisé pour les plaques à découper dans votre cuisine 😉  ou encore du DELRIN (qui est excellent mais cher)

Le choix du matériau est fait, maintenant les logiciels ! Ne soyez pas effrayés, il y en a un certain nombre mais chacun est très performant dans son domaine.

  • Les logiciels de CAO

Pour dessiner des pièces à usiner, celui que j’utilise le plus, c’est LibreCAD. C’est un fork libre du projet QCAD. Avec un peu d’habitude, vous dessinerez en quelques minutes des pièces relativement complexes en 2D. Vous pouvez commencer par regarder le tutoriel d’Andre PASCUAL, il parle de QCAD mais c’est la même chose, à part les icones qui changent, le principe est identique et le tutoriel est excellent.

 

Quand il s’agit de graver des dessins ou du texte, rien de vaut inkscape qui n’est plus à présenter. Il est préférable lorsque vous utilisez inkscape pour créer des fichiers DXF, nécessaires dans la suite du flux de production, d’enregistrer avec le greffon « Better DXF Output ». Pour certains dessins contenant des courbes de bezier ( splines ), je suis obligé d’ouvrir les DXF de LibreCAD avec Inkscape puis de les réenregistrer pour qu’il convertisse tout en polyline. Sinon, j’ai des plantages lors de la génération du GCODE avec HeeksCNC. Un bug qui sera surement corrigé par les développeurs, mais en attendant…

Dans un autre cadre très particulier, celui de la création de circuits imprimés, j’utilise KiCAD, un concurrent du très connu EagleCAD. Avec ce logiciel, je génère des fichiers GERBER qui seront ensuite convertis en GCODE.

  • Les logiciels de création du GCODE

Ici, seulement deux logiciels sont utilisés:

HeeksCAD / HeeksCNC vont permettre de transformer le fichier DXF 2D en un fichier permettant de piloter la machine CNC. On renseigne au logiciel le diamètre de l’outil, son positionnement par rapport à la pièce, la vitesse d’avance… Bien qu’assez jeune, ce logiciel donne de très bon résultats.

 

En dehors des DXF, il y a les fichiers GERBER de Kicad. Là j’utilise pcb2gcode qui est un logiciel en ligne de commande.

 

pcb2gcode --metric --zsafe 2 --zwork -0.06 --offset 0.2 --zchange 25 --mill-feed 100 --mill-speed 5000 --back $back
  •  Pilotage de la CNC

Ici, un seul choix et non des moindres: EMC (LinuxCNC). Il prend en entrée les fichiers gcode et pilote la machine au travers d’un support temps réel du noyau linux. Il est préférable d’ailleurs de lui dédier une ancienne machine.

Et voilà après 2 heures de travail une manette de coinceur pour un voilier. L’originale en rouge est fendue, la nouvelle en DELRIN est très solide 🙂 et identique à l’originale (les économies de plastique en moins), elle parait plus épaisse mais ce n’est qu’un effet d’optique sur la photo.

 

 

Diagramme du flux de production

 

Si vous connaissez, utilisez d’autres outils, mettez les en commentaire c’est toujours intéressant !

Compilation de RPM et erreur « *** ERROR: No build ID note found »

Si vous avez des erreurs « *** ERROR: No build ID note found » lors de la construction de paquets RPM ( J’utilise ici une Centos 6.2 x64 ) ça vient du script find-debuginfo.sh

+ /usr/bin/install -d /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install
+ /bin/cp -R ./FILES ./Makefile.PL ./apps ./bin ./doc ./etc ./installer ./lib ./man ./resources ./vmware-install.pl ./yes /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install
+ /usr/lib/rpm/find-debuginfo.sh --strict-build-id /home/build/rpm/BUILD/vmware-vsphere-sdk-4.0.0.161974
*** ERROR: No build ID note found in /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install/lib/XML-LibXML-1.63/lib/auto/XML/LibXML/LibXML.so
erreur: Mauvais status de sortie pour /home/build/rpm/tmp/rpm-tmp.3M3FWw (%install)
    Mauvais status de sortie pour /home/build/rpm/tmp/rpm-tmp.3M3FWw (%install)
Exécution_de(%prep): /bin/sh -e /home/build/rpm/tmp/rpm-tmp.ilG9fL

Vous pouvez passer outre en ajoutant la directive

%undefine _missing_build_ids_terminate_build

au début de votre fichier SPEC. Voici un extrait de mon fichier:

%undefine _missing_build_ids_terminate_build
Name:           vmware-vsphere-sdk
Version:        4.0.0.161974
Release:        2%{?dist}
Summary:       Vmware SDK for Perl

L’erreur précédente devient qu’un simple Warning sans incidence.

+ /usr/bin/install -d /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install
+ /bin/cp -R ./FILES ./Makefile.PL ./apps ./bin ./doc ./etc ./installer ./lib ./man ./resources ./vmware-install.pl ./yes /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install
+ /usr/lib/rpm/find-debuginfo.sh /home/build/rpm/BUILD/vmware-vsphere-sdk-4.0.0.161974
*** WARNING: No build ID note found in /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install/lib/XML-LibXML-1.63/lib/auto/XML/LibXML/LibXML.so
*** WARNING: No build ID note found in /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install/lib/Compress-Raw-Zlib-2.005/lib/auto/Compress/Raw/Zlib/Zlib.so
*** WARNING: No build ID note found in /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install/lib/Data-Dumper-2.121/lib/auto/Data/Dumper/Dumper.so
*** WARNING: No build ID note found in /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install/lib/UUID-0.03/lib/auto/UUID/UUID.so
*** WARNING: No build ID note found in /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install/lib/bin/libcrypto.so.0.9.8
*** WARNING: No build ID note found in /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install/lib/bin/libssl.so.0.9.8
*** WARNING: No build ID note found in /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install/lib/Class-MethodMaker-2.10/lib/auto/Class/MethodMaker/MethodMaker.so
*** WARNING: No build ID note found in /home/build/rpm/BUILDROOT/vmware-vsphere-sdk-4.0.0.161974-2.el6.x86_64/usr/local/vmware-sdk-install/lib/XML-LibXML-Common-0.13/lib/auto/XML/LibXML/Common/Common.so

 

Agent d’inventaire OCS-NG et clients légers

Depuis quelques années nous utilisons des clients légers HP pour lesquels nous avons développé une image sous linux (t5tux). Cette drôle d’idée présente de nombreux avantages:

  • On ne dépend de personne pour les mises à jour des client ( RDP, Citrix et autres… ).
  • Cette image a été faite quand HP ne proposait pas linux sur ses clients légers.
  • La même image fonctionne sur plusieurs générations de clients.
  • La config est téléchargée en TFTP.
  • L’image se met à jour toute seule avec PXE.
  • On apprend plein de choses…

Bref… l’histoire continue avec un nouveau problème: inventorier ces postes avec OCS-NG.

OCS dispose d’un agent d’inventaire pour linux mais celui-ci est assez lourd. De plus, il dispose d’un grand nombre de fonctionnalités inutiles dans notre cas. Nous souhaitons un minimum d’infos: numéro de série, model, ip, mac…

La communication entre l’agent et le serveur se fait avec un fichier XML compressé ou non avec ZLIB et transmis dans une reqûete de type POST. Pourquoi ne pas générer un XML minimaliste et l’envoyer nous même ?

Un simple script bash, épaulé de quelques utilitaires: dmidecode, busybox, wget fera l’affaire.


#! /bin/sh

model=`/usr/local/sbin/dmidecode -s system-product-name`
type=`/usr/local/sbin/dmidecode -s baseboard-product-name`
bytes=`free -k | grep Mem | awk '{ print $2 }'`
memory=$(($bytes/1024))
bytes=`fdisk -l | grep Disk | grep da | cut -f2 -d, | awk '{ print $1 }'`
disk=$(($bytes/1024/1024))
serial=`/usr/local/sbin/dmidecode -s system-serial-number`
hwaddr=`ifconfig eth0 | grep HWaddr | sed "s/.*HWaddr \(.*\)/\1/"`
ip=`ifconfig eth0 | grep "inet addr" | sed "s/.*addr:\(.*\) B.*/\1/"`
tag=`hostname | cut -f1 -d-`
hostname=`hostname`

echo "Model: $model"
echo "Ram: $memory"
echo "Disk: $disk"
echo "Serial: $serial"
echo "Mac: $hwaddr"
echo "ip: $ip"
echo "tag: $tag"
echo "hostname: $hostname"

cat << EOF > /tmp/inventory.xml


  
    
      TAG
      $tag
    
    
      $serial
      Hewlett-Packard
      Hewlett-Packard
      $serial
      Hewlett-Packard
      $model - $type
      $serial
    
    
      131071
      $memory
      $hostname
      T5TUX
      t5tux
      Physical
    
    
      eth0
      $ip
      $hwaddr
      Ethernet
    
    
      FLASH
      $disk
      disk
    
  
  $hostname-9999-01-01-01-01-01
  INVENTORY


EOF

wget --post-file=/tmp/inventory.xml http://ocs-ng.xxxx.fr/ocsinventory

Quelques astuces:

  • wget avec un « –post-file monfichier » ou curl avec un « –binary-data @monfichier » permettent de poster des données.
  • le CHECKSUM à 131071 indique que toutes les données sont modifiées. J’ai trouvé cette info sur un forum mais pas dans la doc officielle.
  • Le client léger est en lecture seule du coup le DEVICEID ne peut être stocké. La date servant à sa génération est falsifiée: « 9999-01-01-01-01-01 »

Très simple et pas forcément très élégant mais ça marche très bien !

Archlinux, udev et les mots clefs.

Dans les dernières versions d’UDEV, le mot clef SYSFS n’est plus supporté. Si vous utilisez des règles udev personnalisées, vous aurez ce message d’erreur dans la console et les logs:

udevd[257]: unknown key 'SYSFS{idVendor}'
in /etc/udev/rules.d/51-garmin.rules

Allez dans /etc/udev/rules.d et lancez un petit coup de sed:

sed -i -e s/SYSFS/ATTR/g *.rules