mercredi 26 février 2014

VisuOutil 2.9.9 et interface HyperMILL

Interface HyperMILL


Les fichiers de format d’échange pour les outils des CFAO, c’est devenu au fil du temps ma petite marotte.  Et comme tout collectionneur, je suis toujours à la recherche de nouveaux formats pour enrichir ma collection. Depuis pas mal de temps, je désirai m’intéresser au format HyperMill. D’une part c’est un peu le dernier qui me manquait, mais aussi car étant donné le niveau du logiciel on peut s’attendre à trouver un format de fichier assez intéressant à traiter.
Malheureusement, le logiciel est assez peu utilisé en France et je n’ai pas de contact avec des utilisateurs de ce logiciel.  Mais, finalement en cherchant d’autres informations je suis tombé sur le site du fournisseur Pokolm qui intégrait déjà dans son site web un export de ses produits sur différents format CFAO. Et j’ai pu constater avec plaisir,  qu’il propose maintenant un format HyperMILL (figure 1).
Figure 1 Export depuis le site Pokolm
Généralement, les fichiers générés par Pokolm sont d’assez mauvaises qualités avec des informations manquantes, mais bon c’est déjà un début.  Bien évidemment la version de cette interface est encore une « Alpha », mais j’ai déjà pu relire quelques porte-outils et quelques outils. Autre avantage avec les export Tebis et WorkNC , j’ai des formats de référence pour comprendre plus facilement l’export HyperMILL en procédant par analogie.
J’ai donc le plaisir de pouvoir épingler à ma liste des interfaces : OpenMind et son format HyperMILL  (xml).

Figure 2 Import VisuOutil

Pokolm

Pour les personnes intéressées, les formats des fichiers sont donc accessibles via le site Web de pokolm. https://www.pokolm.de/fr/spindelsysteme/

Figure 3 Site Web Pokolm

Après relecture et assemblage on retrouve donc des données cohérentes.  Pour le moment Pokolm ne fournissant que les éléments individuellement, je n’ai pas pu tester le cas des assemblages. Mais j’ai déjà pu créer la structure de traitement pour pouvoir dans le futur intégrer rapidement ce type de format. De plus le format xml est aujourd’hui assez facile à traiter pour moi, puisqu'il est devenu la base de plusieurs formats. De plus au niveau des informations et l’organisation des données, je retrouve quelque chose assez proche des formats Tebis. Seul nouveauté, que je n’avais encore jamais rencontré c’est la partie « Formule » . Cette notion de formule permet de définir au niveau des conditions d’usinage les vitesses d’usinage les valeurs en fonctions de Vc fz etc. Pour le moment j'ai laissé ce point de coté.
Figure 4 VisuOutil 2.9.9

 

VisuOutil 2.9 et les outils de tournage

Les versions 2.9 de VisuOutil, commencent aussi à intégrer les outils de tournage. Mais ce point sera assez long à mener à terme, étant donné la complexité des informations sur ces outils.  Pour les outils de tournage on retrouve notamment un nombre important de paramètres normalisés (comme par exemple la norme NF ISO 1832 pour la désignation des plaquettes amovibles pour outils coupants) qui définissent les plaquettes d’usinage mais aussi le porte plaquette. Vous pouvez voir sur la figure Figure 5, l’ensemble des paramètres actuellement intégrés dans VisuOutil pour définir les outils.
Figure 5 Fenêtre de dialogue pour les outils de tournage

Comme je dois aussi créer l’ensemble des géométries en 3D pour le rendu OpenGL, ce travail est assez long.  N’utilisant que mes petites connaissances mathématiques et informatiques chaque type de plaquette et de porte outil doit être défini manuellement.  Et quand l’on sait qu’il y a plus de 16 types de plaquette  « Standard » et pratiquement 26 type de porte plaquette ( de A à Z):
·        H Plaquettes hexagonales 120°

·        Plaquettes octogonales 135°

·        P Plaquettes pentagonales 108°

·        S Plaquettes carrées 90°

·        T Plaquettes triangulaires 60°

·        C Plaquettes rhombiques 80°

·        D Plaquettes rhombiques 55°

·        E Plaquettes rhombiques 75°

·        M Plaquettes rhombiques 86°

·        V Plaquettes rhombiques 35°

·        W Plaquettes trigones 80°a

·        L Plaquettes rectangulaires 90°

·        A Plaquettes parallélogramme 85°

·        B Plaquettes parallélogramme 82°

·        K Plaquettes parallélogramme 55°

·        R Plaquettes rondes

A cela on devra rajouter les plaquettes  pour le tronçonnage et les gorges ainsi que les plaquettes de filetage. Je me donne 6 mois pour terminer à raison de 3 à 4 heures par semaine de boulot.


Figure 6 Première version de relecture d’outil de tournage
Pour le traitement des outils de tournage je suis parti sur la relecture des fichiers Esprit. C’est de tous les formats, celui qui m’est apparu comme le plus complet sur la définition d’un outil de tournage.
Vous pouvez trouver la version actuelle de VisuOutil avec ces dernières modifications sur mon site : VisuOutil 2.9.9 du 26 février 2014.


mercredi 12 février 2014

Exemple Focas en VB Part 3

Pour faire suite à un précédent article, voici un petit exemple de code complémentaire sur la programmation sur CN Fanuc par la liaison FOCAS. Le code reprend l'utilisation de la fonction "Status_of_Function" définie dans le précédent billet. Cet exemple permet de relire le type de CN présent sur la machine .

'---------------------
' Ethernet connexion
'---------------------
' allocate library handle 3
Declare Function cnc_allclibhndl3 Lib "fwlib32.dll" (ByVal sIPaddr As String, ByVal nPort As Integer, ByVal nTimeout As Long, FlibHndl As Integer) As Integer
' free library handle
Declare Function cnc_freelibhndl Lib "fwlib32.dll" (ByVal FlibHndl As Integer) As Integer
' read CNC system information
Declare Function cnc_sysinfo Lib "fwlib32.dll" (ByVal FlibHndl As Integer, Odb As ODBSYS) As Integer
' cnc_sysinfo:read CNC system information
#If FS15BD Then

Type ODBSYS
  Dummy As Integer             ' dummy
  Max_axis As Integer          ' maximum axis number
  Cnc_type As String * 2       ' cnc type <ascii char>
  Mt_type As String * 2        ' M/T/TT <ascii char>
  Series As String * 4         ' series NO. <ascii char>
  Version As String * 4        ' version NO.<ascii char>
  Axes As String * 2           ' axis number<ascii char>
End Type

#Else

Type ODBSYS
  Addinfo As Integer           ' additional information
  Max_axis As Integer          ' maximum axis number
  Cnc_type As String * 2       ' cnc type <ascii char>
  Mt_type As String * 2        ' M/T/TT <ascii char>
  Series As String * 4         ' series NO. <ascii char>
  Version As String * 4        ' version NO.<ascii char>
  Axes As String * 2           ' axis number<ascii char>
End Type

#End If


Private Sub Form_Load()
   Dim LibHndl As Integer
    Dim Ret As Integer
    Dim SysInfo As ODBSYS
    Dim Result(16) As Integer
    Dim TypeS As String


'  192.0.0.1 Addresse connexion Ethernet sur CN
'  8193 : Port Focas
   Ret = cnc_allclibhndl3("192.0.0.1", "8193", 10, LibHndl)
   If Ret Then call Status_of_Function(Ret, "cnc_allclibhndl3")

' Recupère les informations sur la CN
    Ret = cnc_sysinfo(LibHndl, SysInfo)
    If Ret Then call Status_of_Function(Ret, "cnc_sysinfo")

'Affiche la description de la CN
    TypeS = "Fanuc " & CStr(SysInfo.Cnc_type)
' Addinfo
' bit 1
'0 : not an i Series CNC
'1 : i Series CNC


    Ret = ConvBin(SysInfo.Addinfo, Result) ' si 10 alors 1 : i Series CNC
    If Result(1) = 1 Then
     TypeS = TypeS & "i Series CNC"
    End If
   
 ' L'information MT_type indique si la CN est du type fraisage ou tournage
' M' : Machining center
' T' : Lathe
' MM' : M series with 2 path control
' TT' : T series with 2/3 path control
' MT' : T series with compound machining function

    TypeS = TypeS & " " & SysInfo.Axes & " axes"
    TypeS = TypeS & " " & SysInfo.Mt_type 
 
    MsgBox TypeS

'  De-allocate handle
    Ret = cnc_freelibhndl(LibHndl)
    If Ret Then Call Status_of_Function(Ret, "cnc_freelibhndl")
End Sub

' Conversion d'un entier en binaire
Function ConvBin(ByVal Number As Integer, Res() As Integer) As Integer
    Dim Rest As Integer
    Dim Result As String
    Dim IND As Integer
    IND = 0
   
    Do
        Rest = Number Mod 2
        Number = Number \ 2
        Res(IND) = Rest
        IND = IND + 1
        'Result = CStr(Rest) & Result
    Loop While Number > 0
   
    ConvBin = IND - 1
   
End Function

Exemple FOCAS suite

Pour faire suite à un précédent article, voici un petit exemple de code complémentaire sur la programmation FOCAS. Le code reprend l'utilisation de la fonction "Status_of_Function" définie dans le précédent billet. Cet exemple permet de relire les valeurs des correcteurs outils.

'---------------------
' Ethernet connexion
'---------------------
' allocate library handle 3
Declare Function cnc_allclibhndl3 Lib "fwlib32.dll" (ByVal sIPaddr As String, ByVal nPort As Integer, ByVal nTimeout As Long, FlibHndl As Integer) As Integer

' free library handle
Declare Function cnc_freelibhndl Lib "fwlib32.dll" (ByVal FlibHndl As Integer) As Integer
' set path number(for 4 axes lathes, multi-path)
Declare Function cnc_setpath Lib "fwlib32.dll" (ByVal FlibHndl As Integer, ByVal A As Integer) As Integer
'  read tool offset information
Declare Function cnc_rdtofsinfo Lib "fwlib32.dll" (ByVal FlibHndl As Integer, Odb As ODBTLINF) As Integer
' read tool offset value
Declare Function cnc_rdtofs Lib "fwlib32.dll" (ByVal FlibHndl As Integer, ByVal A As Integer, ByVal B As Integer, ByVal c As Integer, Odb As ODBTOFS) As Integer

' cnc_rdtofsinfo:read tool offset information
Type ODBTLINF
  Ofs_type As Integer
  Use_no As Integer
End Type

' cnc_rdtofs:read tool offset value
Type ODBTOFS
  Datano As Integer         ' data number
  Type As Integer            ' data type
  Data As Long                ' data
End Type

Private Sub Form_Load()
Dim LibHndl As Integer
Dim Ret As Integer
Dim tlinf As ODBTLINF

Dim Ncorrecteur As Integer  ' Variable pour le numero de correcteur à relire
Dim tofs As ODBTOFS


'  192.0.0.1 Addresse connexion Ethernet sur CN (Attention deux ports généralement port  communication et Data serveur)
'  8193 : Port Focas
   Ret = cnc_allclibhndl3("192.0.0.1", "8193", 10, LibHndl)
   If Ret Then call Status_of_Function(Ret, "cnc_allclibhndl3")


'  Définition du canal dans le cas de CN utilisant plusieurs cannaux
'  Dans ce cas la CN est du type :
                  ' MM:M series with 2 path control
                  ' TT:T series with 2/3 path control
    Ret = cnc_setpath(LibHndl, 2)
    If Ret Then Call Status_of_Function(Ret, "cnc_setpath")


' Récupère le nombre de correcteur maxi disponible sur la machine

    Ret = cnc_rdtofsinfo(LibHndl, tlinf)
    If Ret Then Call Status_of_Function(Ret, "cnc_rdtofsinfo")

  Ncorrecteur=10 ' Numéro du correcteur outil à relire
 If Ncorrecteur>tlinf.Use_no Then 'Test pour éviter de relire un numéro de correcteur dépassant la limite machine
        Ncorrecteur = tlinf.Use_no
 End If


' Type de variable pour récupération correcteur outil
' Lathe Series (T series)
'           X axis  Z axis  Nose R  Imaginary tool nose     Y axis
' Wear          0       2           4       6                   8
' Geometry   1       3           5       7                   9

' ( Z,GEOMETRY)
    Ret = cnc_rdtofs(LibHndl, Ncorrecteur , 3, 8, tofs) ' 3= Z axis Gometry et taille =8 (toujours ?)
    If Ret Then Call Status_of_Function(Ret, "cnc_rdtofs")

   MsgBox "Valeur du correcteur de géométrie Z pour l'outil : " & Ncorrecteur & "=" & (tofs.Data/1000)     ' La valeur est à diviser par 1000 pour avoir en mm


'  De-allocate handle
    Ret = cnc_freelibhndl(LibHndl)
    If Ret Then Call Status_of_Function(Ret, "cnc_freelibhndl")
End Sub