Suite à une demande sur ma messagerie de Martin, voici comment je calcul le code ISO pour un cercle à partir de l'APT. Voici donc quelques explications sur l'instruction CIRCLE dans l'APT et un exemple de code VB6 pour calculer la direction de l'arc.
Notation de CIRCLE dans l'APT
La notation la plus courante de l'instruction cercle dans l'APT est CIRCLE . Elle donne le point de centre et la normal ainsi que le rayon. Cette normal permet de spécifier le sens de parcours ( G02 ou G03 par exemple pour Z=1 avec un cercle dans le plan G17 ( XY) on aura une interpolation trigo G03 et G02 si Z=-1.Syntaxe APT
CIRCLE/ XCentre,YCentre,ZCcentre, XNormal,YNormal,ZNormal, Rayon)
GOTO/ XPointFin,YPointFin,ZPointFin
Exemple :
CIRCLE/508.000,762.000,0.000,0.000,0.000,1.000,137.000
GOTO/645.000,762.000,0.000
Autre notation en utilisant INDRIV
L'autre notation reconnue et utilisée par exemple par les sorties de CATIA utilise le code TLON,GOFWD avec la notation INDIRV qui donne le sens de parcours au premier point du cercle. Le vecteur ainsi défini permet de connaitre le sens de parcours G02 / G03.Syntaxe APT
INDIRV/ x, y, z
TLON,GOFWD/(CIRCLE/ xcentre,ycentre,zcentre,rayon),ON,(LINE/ xcentre,ycentre,zcentre, xPointFin,yPointFin,zPointFin)
INDIRV/ 0.99503, 0.09957, 0.000
TLON,GOFWD/ (CIRCLE/ 16.933, 12.173, 0.000,4.177),ON,(LINE/ 16.933, 12.173, 0.000,20.325, 14.611, 0.000)
Enfin la même notation est aussi traitée si les codes CIRCLE et LINE sont défini en leur affectant une référence (Lx et Cx ) qui sera utilisée dans le code TLON,GOFWD comme dans l'exemple suivant :
C1=CIRCLE/41.6,-1.0681,14.7351,3
L1=LINE/41.6,-1.0681,14.7351,38.6,-1.0681,14.7351
INDIRV/-1,0,0
TLON,GOFWD/C1,ON,L1
Attention dans ce cas la déclaration des commandes CIRCLE et LINE doit se faire avant l'appel par TLON,GOFWD. Il n'est ainsi pas possible de définir en début de code APT toutes les références CIRCLE & LINE.
Autre syntaxe APT déjà rencontré
INDIRV/ x, y, z TLON,GOFWD/(CIRCLE/ xcentre,ycentre,zcentre,rayon), ON, 2,INTOF,(LINE/ xcentre,ycentre,zcentre, xPointFin,yPointFin,zPointFin)Où :
xcentre, ycentre, zcentre = coordonnées centre arc
xPointFin, yPointFin, zPointFin = Point fin arc
x, y, z = Vecteur de direction INDIRV
Exemple de code VB6 utilisé pour calculer le code G
Option Explicit '--------------------------------------------------------------------------------------- ' Module : Calcul_cercle ' DateTime : 05/12/2006 15:08 ' Author : usinage5axes ' Purpose : Calcul des informations pour sortie circulaires '--------------------------------------------------------------------------------------- Type INTERPO_CIRCULAIRE Code As String ' Code sous forme G02 ou G03 GCode As Integer ' valeur du Code G 02 ou 03 Centre As Point3 ' Coordonnées point de centre Centre_Relatif As Point3 ' Coordonnées point de centre en relatif depuis point de départ pour certaines notation ISO P1 As Point3 ' Point depart P2 As Point3 ' Point millieu dans le cas de définition par 3 points P3 As Point3 ' Point de fin Rayon As Double ' Rayon du cercle Normal As Point3 ' Vecteur Normal du cercle utilisé pour calculer par exemple G02 ou G03 Angle As Double ' Angle de l'arc de cercle Angle_Machine As PosAngulaire ' Angle des axes rotatifs machine A/B/C pour sortie avec CN acceptant la notation End Type '--------------------------------------------------------------------------------------- ' Procedure : Calcul_Info_Cercle ' DateTime : 05/12/2006 15:10 ' Author : usinage5axes ' Purpose : Avec les infos relues dans le fichier APT (P1, P3 , Point de centre '--------------------------------------------------------------------------------------- ' Sub Calcul_Info_Cercle(Cercle_Cur As INTERPO_CIRCULAIRE, Optional INDIRV_Vect As Point3) Dim VectP1 As Point3 ' Vecteur du point de centre au point 1 Dim VectNP1 As Point3 ' Vecteur normal Dim Po1 As Point3 Dim Po2 As Point3 Dim Po3 As Point3 Dim Angle As Double ' Se produit si l'on traite une instruction TLON,GOFWD dans ce cas il n'y a pas de notion de normal défini ' mais on utilise le vecteur INDIRV If Longueur(Cercle_Cur.Normal) = 0 Then ' Normal_Plan_Courant = Variable globale de type point défini selon G17/G18/G19 Cercle_Cur.Normal = Normal_Plan_Courant End If 'P1 Point de départ 'P3 Point de fin Po1 = VecSub(Cercle_Cur.P3, Cercle_Cur.P1) Po2 = VecteurUnitaire(VecProd(Po1, Cercle_Cur.Normal)) Po3 = VecteurUnitaire(PointMilieu(Cercle_Cur.P1, Cercle_Cur.P3)) VectP1 = VecteurUnitaire(VecSub(Cercle_Cur.P1, Cercle_Cur.Centre)) ' VectNP1 est le vecteur direction calculé au point de départ. il donne normalement le sens Trigo ' Comparé avec INDIRV il servira à déterminer G02 ( horaire ) ou G03 (Trigo) VectNP1 = VecProd(Cercle_Cur.Normal, VectP1) ' Calcul de l'angle Cercle_Cur.Angle = Angle3Pt(Cercle_Cur.P1, Cercle_Cur.Centre, Cercle_Cur.P3) ' Détermine le sens de l'intero circulaire If Longueur(INDIRV_Vect) Then ' INDIRV_Vect : Détermination du sens avec info INDIRV If Dot(VectNP1, INDIRV_Vect) < 0 Then Cercle_Cur.Code = PP_ARC_R 'G02 ( horaire ) Cercle_Cur.GCode = 2 Cercle_Cur.P2 = VecAdd(Cercle_Cur.Centre, Po2, -Cercle_Cur.Rayon) Else Cercle_Cur.Code = PP_ARC_L ' G03 (Trigo) Cercle_Cur.GCode = 3 Cercle_Cur.P2 = VecAdd(Cercle_Cur.Centre, Po2, Cercle_Cur.Rayon) End If Else ' Notation CERCLE avec vecteur NORMAL pas d'indication du sens de parcours : utilisation de la normal If Dot(Cercle_Cur.Normal, Normal_Plan_Courant) < 0 Then Cercle_Cur.Code = PP_ARC_R ' G02 ( horaire ) Cercle_Cur.GCode = 2 Cercle_Cur.P2 = VecAdd(Cercle_Cur.Centre, Po2, -Cercle_Cur.Rayon) Else Cercle_Cur.Code = PP_ARC_L ' G03 (Trigo) Cercle_Cur.GCode = 3 Cercle_Cur.P2 = VecAdd(Cercle_Cur.Centre, Po2, Cercle_Cur.Rayon) End If End If Cercle_Cur.Centre_Relatif = VecSub(Cercle_Cur.Centre, Cercle_Cur.P1) ' Remise à Zéro du vecteur INDIRV_Vect INDIRV_Vect.X = 0 INDIRV_Vect.Y = 0 INDIRV_Vect.Z = 0 End Sub |
Hi! I am a student. I'm trying to learn APT programming language and Visual Basic language.
RépondreSupprimerThe code you posted, seemed hard to understand.
Could you explain to me, please, what does VecProd, Longueur, Dot, VecSub VecAdd and sub-functions.
Why not just use a cross product INDIRV vector and the vector from the start point to the center point of the circle?
I spend a lot of time trying to find some useful information on the circular interpolation, but did not find, it looks difficult.
Salut! Je suis un élève. J'essaie d'apprendre le langage de programmation APT et le langage Visual Basic.
Le code que vous avez posté semblait difficile à comprendre.
Pourriez-vous m'expliquer, s'il vous plaît, ce que VecProd, Longueur, Dot, VecSub VecAdd et sous-fonctions.
Pourquoi ne pas utiliser un vecteur INDIRV produit croisé et le vecteur du point de départ au point central du cercle?
Je passe beaucoup de temps à essayer de trouver des informations utiles sur l'interpolation circulaire, mais n'a pas trouvé, il semble difficile.
The different codes relativ to the vector calculation can be found here : http://5axes.blogspot.fr/2016/12/code-vb-vba-generqiue.html
RépondreSupprimer