lundi 23 avril 2012

Calcul d'angle machine avec IJK

Voici un exemple de code utilisé pour le calcul des angles machines en fonction de IJK dans mes sources sur Winpost :


'Calcul des angles machine avec machine tête twist A/C

 Function Calcul_A_C(IJK As Point3, PosAng As PosAngulaire) As PosAngulaire

    Dim Flip As Boolean

    If IJK.Y = 0 And IJK.X = 0 Then

       Calcul_A_C.A = 0

       Calcul_A_C.C = 0

    Else

        Calcul_A_C.C = Atan2(IJK.Y, IJK.X) * RADTODEG

        If Abs(PosAng.C - Calcul_A_C.C) >= 180 Then

            Flip = True

            Calcul_A_C.C = Calcul_A_C.C - 180

        Else

            Flip = False

        End If

       Calcul_A_C.A = Atan2(IJK.Z, Sqr(IJK.Y * IJK.Y + IJK.X * IJK.X)) * RADTODEG

       If Flip Then

            Calcul_A_C.A = -Calcul_A_C.A

       End If

    End If

 End Function


 'Calcul des angles machine avec machine tête twist B/C

 Function Calcul_B_C(IJK As Point3, PosAng As PosAngulaire) As PosAngulaire

 Dim Flip As Boolean

     If IJK.Y = 0 And IJK.X = 0 Then

       ' Tete Vertical

       Calcul_B_C.B = 0

       Calcul_B_C.C = 0

    Else

        Calcul_B_C.C = Atan2(IJK.X, IJK.Y) * RADTODEG

        If Abs(PosAng.C - Calcul_B_C.C) >= 180 Then

        Flip = True

            Calcul_B_C.C = Calcul_B_C.C - 180

        Else

            Flip = False

        End If

        Calcul_B_C.B = Atan2(IJK.Z, Sqr(IJK.Y * IJK.Y + IJK.X * IJK.X)) * RADTODEG

        If Flip Then

            Calcul_B_C.B = -Calcul_B_C.B

        End If

      End If

 End Function

 

  'Calcul des angles machine avec machine plateau A/C

 Function Calcul_A_C_Plateau(IJK As Point3, PosAng As PosAngulaire) As PosAngulaire

    If IJK.Y = 0 And IJK.X = 0 Then

       Calcul_A_C_Plateau.A = 0

       Calcul_A_C_Plateau.C = 0

    Else

       If IJK.X = 0 Then

            If IJK.Y > 0 Then

                Calcul_A_C_Plateau.C = -90

            Else

                Calcul_A_C_Plateau.C = 90

            End If

       Else

            Calcul_A_C_Plateau.C = -Atan2(IJK.Y, IJK.X) * RADTODEG

       End If

       Calcul_A_C_Plateau.A = -Atan2(IJK.Z, Sqr(IJK.Y * IJK.Y + IJK.X * IJK.X)) * RADTODEG

 

    End If

 End Function

 

 'Calcul des angles machine avec machine plateau B/C

 Function Calcul_B_C_Plateau(IJK As Point3, PosAng As PosAngulaire) As PosAngulaire

    If IJK.Y = 0 And IJK.X = 0 Then

       Calcul_B_C_Plateau.B = 0

       Calcul_B_C_Plateau.C = 0

    Else

       If IJK.Y = 0 Then

            If IJK.X > 0 Then

                Calcul_B_C_Plateau.C = -90

            Else

                Calcul_B_C_Plateau.C = 90

            End If

       Else

            Calcul_B_C_Plateau.C = -Atan2(IJK.X, IJK.Y) * RADTODEG

       End If

       Calcul_B_C_Plateau.B = -Atan2(Sqr(IJK.Y * IJK.Y + IJK.X * IJK.X), IJK.Z) * RADTODEG

    End If

 End Function

3 commentaires:

  1. Bonjour

    Vos calculs n'inclue pas la longueur pivot (je parle notamment pour le calcul des angles machine avec machine tête twist A/C

    Comment vous pouvez calculer sans la connaître ?

    Cordialement

    RépondreSupprimer
  2. Bonjour,

    Il y a bien longtemps que l'on n'utilise plus la longueur Pivot pour calculer les coordonnées pour les machines 5 axes.
    Maintenant sur les CN modernes l'on a inventé le RTCP et le calcul est fait directement par la CN :
    RTCP : Traori sur Siemens, G43.4 sur Fanuc , M128 sur Heidenhain , G151 sur les NUM etc ...

    Le code ne calcul donc que les valeurs de A B ou C.

    Salutations,

    RépondreSupprimer
  3. oui je suis d'accord mais la séquence de l'axe C ne fonctionne pas correctement pour la tête AC

    Cordialement

    RépondreSupprimer