mardi 21 septembre 2021

Code Siemens 840 D

 Un autre exemple de code pour Siemens permettant de réaliser un palpage sur machine pour la mesure d'un alésage.

les valeurs R101,R102,R105 seront utilisées pour stocker le centre et diamètre de l'alésage.


DEF REAL ZCLEAR, RG1X, RG1Y, RG1Z

DEF REAL PDEPTH1,RGDIA 


ZCLEAR=100.0

RG1X=10.0

RG1Y=20.0

RG1Z=-1.5

PDEPTH1=3.0

RGDIA=10.0


T1 M6


G54


SPOS=0


G01 F300. ;VITESSE APPROCHE

G00 Z=ZCLEAR ;DEPLACEMENT PLAN SECU

C0. A0.

X=RG1X

Y=RG1Y ;SE DÉPLACER VERS LE CENTRE DE L'ALESAGE

Z=RG1Z+10. ;DÉPLACER À Z 10" AU-DESSUS DU HAUT DE LA PIECE


G1 Z=RG1Z-PDEPTH1 ; POSITIONNMENT DANS L'ALEASGE


; Définir les paramètres modaux

_VMS=150

_NMSP=2 ; 2 mesures

_FA=5.0  ; Course mesure

_PRNUM=1 ; Palpeur 1


_MVAR=1   ; Mesure alésage

_SETVAL=RGDIA ; Diamètre

_KNUM=0   ; Sans Correction et sans DO


CYCLE977 ; CYCLE977 Pièce: Mesure d'alésage


R101=_OVR[5];Valeur du centre en X

R102=_OVR[6];Valeur du centre en Y

R105=_OVR[4];Valeur du diamètre


G01 Z=RG1Z+2. F300 ;DÉPLACER À Z 2" AU-DESSUS DU HAUT DE LA PIECE


G00 Z=ZCLEAR ;DEPLACEMENT PLAN SECU


M30

CODE SIEMENS Prise origine sur fraiseuse

 Exemple de code SIEMENS pour dégauchir une pièce. Le code permet de dégauchir la pièce en prenant :

l'origine en Z sur un point

le X Y à l'intérieur d'un alésage

Et calcul de l'angle avec 2 pts palpé sur Y


T1 M6

G0 D1 M23 ;ALLUMER LE PALPEUR M23 AVANCE SANS ROTATION DE LA BROCHE

G500 ;ANNULER TOUT DÉCALAGE ACTIF

G0 X46 Y14 ; POSITION 1ER POINT

G0 Z6 ; APPROCHE PREMIER POINT


_MVAR=100 _SETVAL=3.0 _MA=3 _KNUM=0 _TSA=.5 _FA=15 _PRNUM=1

CYCLE978 ; PALPER "Z"

R1=_OVR[4]; "VALEUR DE Z"

G0 Z15


G0 X52.7 Y10.2 ; {POSITION DU CENTRE DU TROU}

; {DOIVENT CORRESPONDRE AUX ÉLÉMENTS SUIVANTS CYCLE979}

; {CPA=C/L POUR X & CPO=C/L POUR Y}

; CPA Centre en abscisses

; CPO Centre en ordonnées

G0 Z=R1+5

G1 F60 Z=R1-1.5 ; PENETRATION DANS L'ALÉSAGE


; 101 Détermination DO dans alésage avec correction DO

_MVAR=101 _SETVAL=10.0 _PRNUM=1101 _TSA=.5 _NMSP=1

_FA=15 _VMS=0 _KNUM=0 _CPA=52.7 _CPO=10.2

_RF=1000 _INCA=90 _STA1=90


CYCLE979   ; "X" & "Y" CENTRE DU TROU DE CENTRAGE 


R30=_OVR[5] ; R30 = "X1" C/L  ALESAGE

R31=_OVR[6] ; R31 = "Y1" C/L ALESAGE


G0 Z15

G0 X7 Y5.00

G0 Z=R1+1

G1 Z=R1-1.5


_MA = 2 selon Y

_MVAR=100 _SETVAL=8.0 _MA=2 _KNUM=0 _TSA=.5 _FA=15 _PRNUM=1

CYCLE978; PALPER "Y1"

R3=_OVR[4]; "Y1"


G0 Z15

G0 X56 Y5.00

G0 Z=R1+5

G1 Z=R1-1.5

_MVAR=100 _SETVAL=8.0 _MA=2 _KNUM=0 _TSA=.5 _FA=15 _PRNUM=1

CYCLE978; PALPER "Y2"

R13=_OVR[4]; "Y2"

G0 Z15


;CALCULER L'ANGLE DE ROTATION DE LA PIÈCE

R53=R13-R3

R54=49.0 ;DISTANCE ENTRE LES PALPAGES 'Y'.


R60=ATAN2(R53,R54)

$P_UIFR[1]=CROT(Z,R60):CTRANS(X,R30,Y,R31,Z,R1);ENTRÉE DES DONNÉES D'OFFSET DANS G54 (1=G54 2=G55 ...)

$P_UIFR[1,C,TR]=$P_UIFR[1,C,TR]+R60

M30


CYCLE978 Palpage Pièce: Mesure d'une surface parallèle à l'axe

CYCLE979 Palpage  Pièce Alésage

ATAN2 = Calcul d'un angle Opposé/Adjacent

CTRANS = Calcul de la matrice de translation

$P_UIFR  => définir les origines

jeudi 16 septembre 2021

La FAO ne sait pas tout faire

Un petit article qui est plus pour moi un pense-bête sur les limites des solutions CFAO et les stratégies ou applications qui aujourd’hui sont peu ou pas gérées par les logiciels de CFAO. Ca ne veut pas dire que vous ne trouverez pas de solution existante chez certains fournisseurs mais dans l’ensemble ce sont des stratégies qui sont encore peu ou mal intégrées dans les logiciels et qui doivent bien souvent être géré par d’autre moyens voir pas géré du tout conduisant à l’abandon ou la difficulté d’utilisation de ces outils/stratégies sur les machines actuelles.

Segment arc Tool (outil arc de cercle)

Si tous les éditeurs disent gérer ces outils peu sont capable de les gérer sur des surfaces gauches et dans des applications multi-surfaces.

https://www.youtube.com/watch?v=1eDapcd92cw

Turning B Axis (Tournage axe B)

Ces stratégies sont maintenant assez bien intégrées dans les logiciels actuels. Mais il reste encore des limitations relatives au type de plaquette utilisé. De même que les Ebauches en tournage axe B ne sont pas encore disponibles chez beaucoup d’éditeurs.

https://www.youtube.com/watch?v=rQ8ksj9cRyw

Multi-tool management like the CoroPlex™ MT by Sandvik

On trouve pas mal de simulation de ces outils mais une vraie gestion qui intègre la collision ou les possibilités de ces outils dès la création des parcours reste très rare.

https://youtu.be/vq15A7US3MM?t=69

Prime turning™  by Sandvik

Si l'on se réfère aux conditions de mise en œuvre préconisées par Sandvik, en plus d'une gestion des géométries des plaquettes, des réductions de vitesse  dans les angles et un lissage de ces derniers est aussi nécessaire. Ce qui n'est pas le cas dans toutes les FAO.

https://www.youtube.com/watch?v=7g1QIdfSRCo

InvoMilling™ by Sandvik

Stratégie de niche, liée à la réalisation de denture, la programmation passe par des solutions indépendantes et à ma connaissance sauf une solution comme Euklid que l'on pourrait qualifier de "génralise" propose via Euklid GearCam ce type de statégie.

https://www.youtube.com/watch?v=vDf0lEN3ekg

PowerSkiving

Comme pour la stratégie précédente cette partie est liée à la réalisation de denture ou cannelure.

https://www.youtube.com/watch?v=l6IzpvntOrU

Plunge Milling (Trefflage)

Pour être honnête il y a plein de solution CFAO qui propose des ébauches ou des stratégies. Mais finalement peu de mon point de vue ont réellement intégré correctement ces stratégies, notamment quand il s’agit de réaliser des ébauches en 3D.

https://youtu.be/DIOeR5hJWfc?t=279

Thread Whirling  (Tourbillonage)

https://www.youtube.com/watch?v=Z09Km7-EcuM

Polygonal turning (tournage polygonale)

https://www.youtube.com/watch?v=uS3D0VPnDSY

Superimposition

L'usinage dit super imposé est  la combinaison du mouvement des axes de la contre broche en X et Z avec les mouvements sur la broche principale permettant ainsi à la machine d'usiner avec 3 ou même 4 outils en même temps. 

Wobble broaching

https://www.youtube.com/watch?v=8zd-TdB42o4

Une explication assez intéressante à partir de 110s sur la vidéo suivante.

https://youtu.be/tRAqTXmMbNU?t=110

Broaching \ Slotting Tool on a Lathe (Brochage sur tour)

https://www.youtube.com/watch?v=ManzchRqRko

rollFEED® turning by Vandurit

https://www.youtube.com/watch?v=bScQgWWsGfI

Facing option U-axis

https://youtu.be/GlG9wMAOI9c?t=250s

Virtual Y axis head

Je n'ai pas réussi a trouver une vidéo sur Youtube pour cette partie. La technologie étant introduite en 2013 par le constructeur Bost, elle ne semble pas avoir totalement séduit les acheteurs.

https://www.linkedin.com/posts/bost-machine-tools-company_bost-virtual-y-axis-milling-head-activity-6843902562274422784-a06L

Steady rest management (Gestion de la lunette)

Gestion dynamique du positionnement des lunettes en fonction des usinages et séquences de programmation automatique.

https://www.youtube.com/watch?v=frongtBhWLs

Balance cutting

Tournage combiné sur tour multi-tourelles. Permet de diviser les temps d’usinage supprimer variation et flexion des pièces par les efforts de coupe

https://www.youtube.com/watch?v=xrbDUl19D2s

Profiling head

Gestion et pilotage des dispositifs additionnelle d'alésage sur machine.

https://www.youtube.com/watch?v=DGNdaugpWdg

Angled Head

Usinage avec tête à renvoi d'angle ( sans recours à des configurations cinématique particulières de machine uniquement pour ce genre de cas).

Interpolated turning (Turn-cut)

Technologie mise en avant par Okuma.

https://www.youtube.com/watch?v=gay0z-MHV3s

Gear Hobbing (Taillage d’engrenage)

https://www.youtube.com/watch?v=4Rvye1TPUBs

Lolipop deburring

Il est à noter que sous l'impulsion aussi de ModuleWorks qui fournit beaucoup de solution FAO d'entrée et de milieu de gamme les stratégies d'ébavurage ont fait assez collectivement l'apparition dans les logiciels ces derniers temps.

https://www.youtube.com/watch?v=55xCGNKxiTQ

kniffe cutting (Découpe au couteau)

Découpe au couteau pour les mousses et composites.

https://www.youtube.com/watch?v=Aiv8Dp04aak

Eccentric, Elliptical, and Interpolation Turning

https://www.youtube.com/watch?v=mFq4fPM449Y

https://www.youtube.com/watch?v=Yv4R-WWyiJ4

Spinning Tool

Stratégie plutôt réservée à de gros enlèvement de matière à cause du diamètre des plaquettes circulaires. La stratégie était porté par Mori-Seiki / Esprit, mais les difficultés d'approvisionnement des outils et les conditions rendant possible la mise en œuvre n'ont pas permis une diffusion de la technologie.

https://www.youtube.com/watch?v=nGXUFFOWn9M

Deep Driling

https://www.youtube.com/watch?v=Xp8tSfxS9F0

Span Milling

Tellement confidentiel que je n’ai pas retrouvé de vidéo pour illustrer. Pourtant ça marche 😊. C’est une opération de tournage réalisée avec une fraise comme outil. Peut être utile pour les ébauches en tournage nécessitant la segmentation du copeau (matière plastique par exemple).


Vous pourrez compléter la liste.

vendredi 8 décembre 2017

Utilisation compteur Temps et pièce sur Siemens840D

Pour afficher des temps d'exécution d'un programme sur CN Siemens il existe plusieurs variables système, qui peuvent être utilisés pour surveiller des processus technologiques. On peut par exemple utiliser :
$AN_SETUP_TIME          Temps depuis la dernière initialisation en minutes,
$AN_POWERON_TIME  Temps depuis la dernière mise sous tension en minutes.


Les trois temps suivants sont définis en tant que variables système spécifiques à un canal et peuvent être activés par le biais d'un paramètre machine.


$AC_OPERATING_TIME Temps global d'exécution de programmes CN en mode automatique en secondes,
$AC_CYCLE_TIME Temps d'exécution du programme CN sélectionné en secondes, $AC_CUTTING_TIME Temps de mise en oeuvre de l'outil en secondes.


Si l'on désire utiliser un compteur de pièce c'est un peu plus complexe car le fonctionnement dépend de variables système. Il faut regarder par exemple quel code M va incrémenter automatiquement le compteur :




Le code qui pilote l'incrémentation est défini par la variable $MC_PART_COUNTER_MCODE, sur cette machine c'est 97 donc M97 va incrémenter le code mais on pourrait le régler à M17 (fin d'un sous programme), M02.


Donc chaque fois que le programme va rencontrer M97 il augmentera la variable $AC_TOTAL_PARTS de 1. Si la variable $AC_REQUIRED_PARTS est définie,  une fois que le nombre de pièce produites ( $AC_TOTAL_PARTS) sera égal au nombre de pièces à produire ($AC_REQUIRED_PARTS), un message va s'afficher sur la CN pour dire que le nombre de pièce à produire est atteint.


Voici un exemple de programme ou l'on retrouve quelques exemple d'utilisation de : $AC_TOTAL_PARTS, $AC_REQUIRED_PARTS et $AC_CYCLE_TIME


A la fin de chaque boucle j'affiche un message pour donner le nombre des pièces produites et le temps d'exécution globale :


;Test Variable
G71 G90
G54 G17
G0 SUPA Z-5 D0


$AC_TOTAL_PARTS=0 ; RAZ du nombre de pièce produites
$AC_REQUIRED_PARTS=5 ; Nombre de pièces demandés


MSG("Piece demandee :"<<$AC_REQUIRED_PARTS) ; Nombre de pièce demandées


BOUCLE:


T="OUTIL1"
M06


S2500 D1
M03
G0 X0.0 Y0.0
Z100.0
X100.0
Z200.0
M05


M97 ; Incrémente nb pièce produite


MSG("Pieces produites : "<<$AC_TOTAL_PARTS<<" / "<<$AC_CYCLE_TIME<<" secondes") ; Nombre de pièce produites et temps execution depuis lancement du programme
M00


G0 SUPA Z-5 D0


; Si on a pas atteint le nombre de pièce retourne au départ


IF $AC_TOTAL_PARTS<$AC_REQUIRED_PARTS GOTOB BOUCLE


M02

dimanche 18 décembre 2016

Code VB /VBA générique

Voici quelques codes générique que j'utilise dans tous mes développements  et qui me servent régulièrement dans du calcul mathématique ou de traitement de chaine de caractères :

'---------------------------------------------------------------------------
' Point en 3D
'---------------------------------------------------------------------------

Public Type Point3
    X As Double
    Y As Double
    Z As Double
End Type

'Longueur de vecteur
Function Longueur(ByRef P1 As Point3) As Double
  Longueur = Sqr((P1.X ^ 2) + (P1.Y ^ 2) + (P1.Z ^ 2))
End Function
 
'Distance entre 2 points
Function Distance(ByRef P1 As Point3, ByRef P2 As Point3) As Double
    Distance = Sqr((P2.X - P1.X) ^ 2 + (P2.Y - P1.Y) ^ 2 + (P2.Z - P1.Z) ^ 2)
End Function
 
'Addition de vecteur
Function VecAdd(ByRef P1 As Point3, ByRef P2 As Point3, Optional F As Double = 1) As Point3
 VecAdd.X = P1.X + F * P2.X
 VecAdd.Y = P1.Y + F * P2.Y
 VecAdd.Z = P1.Z + F * P2.Z
End Function
 
'Produit Scalaire
Function Dot(ByRef p As Point3, ByRef Q As Point3) As Double
    Dot = p.X * Q.X + p.Y * Q.Y + p.Z * Q.Z
End Function

'Soustraction de point
Function SubVect(ByRef P1 As Point3, ByRef P2 As Point3, ByRef F As Double) As Point3
 SubVect.X = P1.X - P2.X * F
 SubVect.Y = P1.Y - P2.Y * F
 SubVect.Z = P1.Z - P2.Z * F
End Function
 
'Produit vectoriel
Function VecProd(ByRef P1 As Point3, ByRef P2 As Point3) As Point3
Dim P4 As Point3

 P4.X = (P1.Y * P2.Z) - (P1.Z * P2.Y)
 P4.Y = (P1.Z * P2.X) - (P1.X * P2.Z)
 P4.Z = (P1.X * P2.Y) - (P1.Y * P2.X)
 VecProd = P4
End Function
 
' Soustraction de vecteur
Function VecSub(ByRef P1 As Point3, ByRef P2 As Point3, Optional t As Double = 1) As Point3
 VecSub.X = P1.X - t * P2.X
 VecSub.Y = P1.Y - t * P2.Y
 VecSub.Z = P1.Z - t * P2.Z
End Function
 
'Récupération du vecteur normal de 3 points
Function NormVec(ByRef P1 As Point3, ByRef P2 As Point3, ByRef P3 As Point3) As Point3
 NormVec = VecteurUnitaire(VecProd(VecSub(P1, P2), VecSub(P3, P2)))
End Function

' Transforme un vecteur en vecteur unitaire
Function VecteurUnitaire(ByRef P1 As Point3) As Point3
Dim Norm As Double
     Norm = Sqr(P1.X * P1.X + P1.Y * P1.Y + P1.Z * P1.Z)
     If Norm = 0 Then
            Exit Function
     End If
   
    VecteurUnitaire.X = P1.X / Norm
    VecteurUnitaire.Y = P1.Y / Norm
    VecteurUnitaire.Z = P1.Z / Norm
End Function
 
' Coordonnées du point Milieu
Function PointMilieu(ByRef P1 As Point3, ByRef P2 As Point3) As Point3
 PointMilieu.X = 0.5 * (P1.X + P2.X)
 PointMilieu.Y = 0.5 * (P1.Y + P2.Y)
 PointMilieu.Z = 0.5 * (P1.Z + P2.Z)
End Function
 
'****************************************************************
' Name: Round
'
' Inputs:DP is the decimal place to round to (0 to 14) e.g
' Round (3.56376, 3) will give the result 3.564
' Round (3.56376, 1) will give the result 3.6
' Round (3.56376, 0) will give the result 4
' Round (3.56376, 2) will give the result 3.56
' Round (1.4999, 3) will give the result 1.5
' Round (1.4899, 2) will give the result 1.49
' Returns:None
' Assumes:None
' Side Effects:None
'
'****************************************************************

Function Round(X1 As Double, DP As Integer) As Double
    Round = Int((X1 * 10 ^ DP) + 0.5) / 10 ^ DP
End Function

'****************************************************************
' Name: A 'strtok' function for VB
' Description:I wrote four functions to tokenize strings. He
'     re they are...
'The functions work like this TokLeftLeft finds the leftmost token and
'then returns the left part of the string (empty if not there). You
'can figure out the rest. Note that if the token is more than 1 character
'then the function will always return "".
'****************************************************************

Public Function TokLeftLeft(ByRef Source As String, ByRef token As String) As String
Dim I As Integer
       TokLeftLeft = Source

              For I = 1 To Len(Source)
                            If Mid(Source, I, 1) = token Then
                                   TokLeftLeft = Left(Source, I - 1)
                                   Exit Function
                            End If
              Next I

End Function


Public Function
TokLeftRight(ByRef Source As String, ByRef token As String) As String

Dim I As Integer
       TokLeftRight = Source

              For I = 1 To Len(Source)
                            If Mid(Source, I, 1) = token Then
                                   TokLeftRight = Right(Source, Len(Source) - I)
                                   Exit Function
                            End If
              Next I
End Function


Public Function
TokRightLeft(ByRef Source As String, ByRef token As String) As String 

Dim I As Integer
       TokRightLeft = ""

              For I = Len(Source) To 1 Step -1
                            If Mid(Source, I, 1) = token Then
                                   TokRightLeft = Left(Source, I - 1)
                                   Exit Function
                            End If
              Next I
End Function

 
Public Function TokRightRight(ByRef Source As String, ByRef token As String) As String
Dim I As Integer
       TokRightRight = ""
              For I = Len(Source) To 1 Step -1
                            If Mid(Source, I, 1) = token Then
                                   TokRightRight = Right(Source, Len(Source) - I)
                                   Exit Function
                            End If

              Next I
End Function

mercredi 9 novembre 2016

Réglage des options de relecture des données WorkNC dans Visu Outil

Dans les options de relecture des données WorkNC, la partie la plus complexe à appréhender, concerne les niveau de relecture. Les données définissants les conditions d'usinage de WorkNC ne contiennent pas l'information relative à la matière usinée, la matière de l'outil, le type d'opération ou la machine pour laquelle ces données sont adaptées. Mais traditionnellement les utilisateurs ont contourné cette limitation en structurant leurs données dans des dossiers qui reprennent cette information (figure 2) . Pour relire ces informations, Visu_Outil va donc analyser le nom des dossiers pour en extraire ces informations. Ce post permet donc de reprendre une information plus détaillé sur le réglage de ces options.



Figure 1 Options Import/Export WorkNC

·         Niveau relecture

Les options concernant le niveau de relecture permettent via le chemin de relecture du fichier WKZ de compléter les infos pour VISU_OUTIL. Ce chiffre indique le niveau à partir duquel les noms des répertoires vont constituer une source d’information pour VISU_OUTIL :



Figure 2 Niveau de relecture

L’exemple ci-dessus permet d’illustrer les réglages des options de relecture. Les données sont organisées de manière à classifier les données d’usinage selon, la machine (DMU_80, HERMLE_C30), la matière (X38CrMoV5 49HRC, X38CrMoV5 54HRC etc.) et le type d’opération (01-Ebauche, 02-Finition, 03-Percage …). La relecture des infos permettant de renseigner dans les données des conditions d’usinage les informations non présentes dans les définitions d’outils de WorkNC mais qui sont généralement intégrés par les utilisateurs en structurant leurs données sous ce type d’archivage par dossier.



Figure 2 Relecture dans Visu_Outil

La figure ci-dessus permet d’illustrer la relecture de ces données dans le logiciel Visu_Outil et le traitement fait de ces données.

Dernière version de Visu_Outil 2.13.02 : http://5axes.free.fr/Outil/Visu_outil_213X.exe

jeudi 1 septembre 2016

Une de plus mais la premiere qui me parrait pertinente dans l'idée


Ces derniers mois, les offres en machine hybride se sont multipliées. Et Thermwood offre aujourd'hui une nouvelle solution. Une de plus à rajouter dans la série des machines Hybrides :

Thermwood LSAM system.
Mais cette fois la solution semble pertinente dans la mesure ou la déposition  d’un polymère permet un volume de déposition assez important (68kg /h) en lien avec la taille de la machine.  Cette application est en phase avec les produits Thermwood qui sont très présent dans les composites et le thermoformage ( Comme Normaprofil chez nous). 



Tête de déposition 4 axes ( XYZ + Rotation tête dépose)

Cette activité requière la réalisation de montage d’usinage généralement réalisé pour les petites séries en contre-plaqué+ forme 3D en Lab pour grande pièce et lab + support métallique pour les petites pièces . La prise de pièce étant assuré par des venturis comme pour le placage des plaques dans le moule de formage.

 

Modèle outillage (Image bischoff-pelloux)



Dans ce cas on peut imaginer l’utilisation de la partie additive pour la réalisation de l’outillage , avec  la partie aspiration intégrée et réusinage/détourage avec la tête 5 axes.