Débutant qui n'arrive pas à manipuler des tableaux

Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011 - 25 janv. 2011 à 18:57
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 9 févr. 2011 à 17:52
Bonjour,
Je débute avec visual basic express 2010 et malgré des jours entier à me débattre avec le code je suis incapable de faire un truc tout simple.

Je souhaite découper un texte (un Gcode pour CNC) et réorganiser, dans un certain ordre, les éléments découpés.

J'ai réussi à découper le texte en sous ensembles grâce à :


colUsinages = BlocsGcodesText.Split(SeparateurUsi)

Mais ensuite je ne comprend pas comment manipuler les éléments du tableau pour les remettre dans un ordre précis.
Je bute toujours sur une erreur où VB me dit qu'il est impossible de convertir un Array en String

Je précise que ne comprend rien a la doc de Microsoft sur la classe Array

Merci infiniment de toutes réponses que vous m'apporterez car je suis en grande souffrance

157 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
6 févr. 2011 à 20:29
je pensais que les séparateurs était pour toi
à fin que ça soit plus lisible
quel séparateur fait le problème le * ou - ou
les deux
je peux faire comme ça dans la listbox j'affiche
avec des séparateurs mais le fichier sera sans
séparateur
ça peut aider ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
6 févr. 2011 à 21:32
pour ne pas perdre de temps



arretez de vous chamailler

code modifié
 Public Class Formcnc
    Dim listitems() As String
    Dim enditems() As String
    Dim vectorZn() As Double
    Dim vectseparator() As Integer
    Dim newlistitems() As String

    Private Sub readfile()

        Try
            listitems = System.IO.File.ReadAllLines(OpenFileDialog1.FileName)

            Codein.Items.Clear()
            Codein.Items.AddRange(listitems)
            proceed.Enabled = True
        Catch ex As Exception
            MessageBox.Show("fichier introuvable")
            End
        End Try

    End Sub
    
    Private Sub SearchEndCode()
        Dim array1() As String
        Dim iter As Integer
        iter = listitems.Length - 1
        Do Until listitems(iter).IndexOf("G0 Z") >= 0
            iter -= 1
        Loop

        ReDim enditems(listitems.Length - 1 - iter)
        Array.Copy(listitems, iter, enditems, 0, listitems.Length - iter)
        ReDim array1(iter - 1)
        Array.Copy(listitems, 0, array1, 0, array1.Length)
        ReDim listitems(array1.Length - 1)
        Array.Copy(array1, listitems, array1.Length)
    End Sub
    Private Function GetdecimalSeparator() As Char
        Dim sp As String
        sp = 1 / 2
        Return (sp.Substring(1, 1))
    End Function
    Private Sub CreateZvector()

        'vectorZn contient tous les cotes des GO Z 
        Dim sp As Char
        Dim zn As Double
        Dim iterzn As Integer

        Dim iter As Long

        Dim iternewlist As Long

        sp = GetdecimalSeparator()
        iternewlist = 0
        iterzn = 0
        ReDim vectorZn(iterzn)
        For iter = 0 To listitems.Length - 1
            If listitems(iter).IndexOf("G0 Z") >= 0 Then
                If sp <> "." Then
                    listitems(iter) = listitems(iter).Replace(".", sp)
                End If
                'zn le nombre du Go Z
                Try
                    zn = Double.Parse(listitems(iter).Substring("G0 Z".Length))

                    If Not vectorZn.Contains(zn) Then
                        ReDim Preserve vectorZn(iterzn)
                        vectorZn(iterzn) = zn
                        iterzn += 1
                    End If
                Catch ex As Exception
                    MessageBox.Show("ERROR CODE G0")
                    End
                End Try
            End If
        Next
        Array.Sort(vectorZn)
    End Sub


    Private Sub GroupGoZ()
        Dim iterz As Integer
        Dim iterlist As Integer
        Dim itergroup As Integer
        Dim start As Integer
        Dim countseparator As Integer
        Dim flagfirst As Boolean
        Dim str As String
        Dim sp As Char
        sp = GetdecimalSeparator()
        flagfirst = False
        countseparator = 0
        For iterz = 0 To vectorZn.Length - 1
            If Math.Truncate(vectorZn(iterz)) - vectorZn(iterz) = 0 Then
                str = "G0 Z" & vectorZn(iterz).ToString("#0.0")
            Else
                str = "G0 Z" & vectorZn(iterz).ToString()
            End If
            start = 0
            iterlist = 0
            Do Until iterlist > listitems.Length - 1
                If listitems(iterlist).IndexOf(str) >= 0 Then
                    If Not flagfirst Then
                        ReDim Preserve newlistitems(iterlist + 1)
                        System.Array.Copy(listitems, newlistitems, iterlist)
                        flagfirst = True
                        newlistitems(iterlist) = "*".PadLeft(60, "*")
                        ReDim Preserve vectseparator(countseparator)
                        vectseparator(countseparator) = iterlist
                        listitems(iterlist) = listitems(iterlist).Replace(sp, ".")
                        newlistitems(iterlist + 1) = listitems(iterlist)
                    End If
                    itergroup = iterlist + 1
                    listitems(iterlist) = listitems(iterlist).Replace(sp, ".")
                    newlistitems(newlistitems.Length - 1) = listitems(iterlist)
                    Do While listitems(itergroup).IndexOf("G0 Z") < 0
                        ReDim Preserve newlistitems(newlistitems.Length)
                        newlistitems(newlistitems.Length - 1) = listitems(itergroup)
                        itergroup += 1
                        If itergroup = listitems.Length Then
                            Exit Do
                        End If
                    Loop
                    ReDim Preserve newlistitems(newlistitems.Length)
                    countseparator += 1
                    ReDim Preserve vectseparator(countseparator)
                    vectseparator(countseparator) = newlistitems.Length - 1
                    newlistitems(newlistitems.Length - 1) = "-".PadLeft(60, "-")
                    iterlist = itergroup
                    ReDim Preserve newlistitems(newlistitems.Length)
                End If
                iterlist += 1
            Loop
        Next
        ReDim Preserve newlistitems(newlistitems.Length - 1 + enditems.Length - 1)
        Array.Copy(enditems, 0, newlistitems, newlistitems.Length - enditems.Length, enditems.Length)
    End Sub
    Private Sub SaveGcode()
        RemoveSeparator()
        If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            Try
                System.IO.File.WriteAllLines(SaveFileDialog1.FileName, newlistitems)
            Catch ex As Exception
                MessageBox.Show("problème de sauvegarde")
            End Try
        End If

    End Sub
    Private Sub RemoveSeparator()
        Dim iter As Integer
        Dim indextemplistitem As Integer
        Dim templistitem() As String
        ReDim templistitem(0)
        indextemplistitem = 0
        For iter = 0 To newlistitems.Length - 1
            If Not vectseparator.Contains(iter) Then
                ReDim Preserve templistitem(indextemplistitem)
                templistitem(indextemplistitem) = newlistitems(iter)
                indextemplistitem += 1
            End If
        Next
        ReDim newlistitems(templistitem.Length - 1)
        Array.Copy(templistitem, newlistitems, templistitem.Length)
    End Sub

    Private Sub GcodeIn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FileGcodeName.Click
        Save.Enabled = False
        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
            readfile()

        End If
    End Sub

    Private Sub Formcnc_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        With FileGcodeName
            .Left = Me.Width / 2 - FileGcodeName.Width / 2
            .Top = Me.Top + FileGcodeName.Height
        End With

        With proceed
            .Enabled = False
            .Left = Me.Width / 2 - proceed.Width / 2
            .Top = FileGcodeName.Bottom + 2
        End With

        With Save
            .Enabled = False
            .Left = Me.Width / 2 - Save.Width / 2
            .Top = proceed.Bottom + 2
        End With
        With Codein
            .Visible = True
            .Left = Me.Location.X + 6
            .Top = FileGcodeName.Top
            .Width = Me.Width / 2 - 3 * FileGcodeName.Width / 4
            .Height = Me.Height - FileGcodeName.Height * 2
        End With
        With codeout
            .Left = FileGcodeName.Right + 3
            .Top = FileGcodeName.Top
            .Width = Me.Width / 2 - 3 * FileGcodeName.Width / 4
            .Height = Me.Height - FileGcodeName.Height * 2
            codeout.Visible = False
        End With


    End Sub


    Private Sub proceed_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles proceed.Click
        SearchEndCode()
        CreateZvector()
        GroupGoZ()
        codeout.Visible = True
        codeout.Items.Clear()
        codeout.Items.AddRange(newlistitems)
        proceed.Enabled = False
        Save.Enabled = True

    End Sub

    Private Sub Save_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Save.Click
        SaveGcode()
    End Sub
End Class
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
6 févr. 2011 à 23:25
C'est une super idée !

c'est vrai que les séparateurs ont un rôle intéressant pour bien visualiser la structure du g-code. De plus, ils pourraient
servir pour repérer les changements d'outils. En effet, il faudra trouver un moyen d'intercaler des petits bouts de g-codes, entre chaque bloc d'instructions, pour piloter les moteurs qui basculeront les différents outils(encore du travail en perspective).

Mais par contre, leur présence, dans le résultat final, génère une erreur dans le logiciel qui interprète le g-code(Emc2).
Car Emc2 ne les reconnait pas comme un g-code valide(un peu comme une erreur de syntaxe).
Sauf si on les passe en commentaire(avec des parenthèses pour le g-code). Mais si on peut dissocier l'affichage et le résultat sauvegardé, c'est encore mieux !
En ce moment je reprend le fichier de départ (celui qui m'a servi à réaliser le g-code test)pour refaire un autre g-code plus propre car l'ancien avait des petites erreurs qui empêchait le bon déroulement des tests. Par contre ton trieur s'avère fiable pour le nouveau g-code, félicitations !

Je m'empresse de tester ton nouveau code, merci mille fois.
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
6 févr. 2011 à 23:47
Ça marche du tonner ! quel luxe !

Tout autre chose, j'ai toujours une répartition aléatoire des boutons et textboxs à chaque lancement du windows form.
L'application ne suit pas la mise en page que j'ai choisi dans l'éditeur Form-design

Peut-être as-tu une idée de ce qui provoque ce comportement étrange ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 févr. 2011 à 13:33
Salut

oui je sais j'ai oublié de redimensionner
donc encore une fois le nouveau code
Public Class Formcnc
    Dim listitems() As String
    Dim enditems() As String
    Dim vectorZn() As Double
    Dim vectseparator() As Integer
    Dim newlistitems() As String

    Private Sub readfile()

        Try
            listitems = System.IO.File.ReadAllLines(OpenFileDialog1.FileName)

            Codein.Items.Clear()
            Codein.Items.AddRange(listitems)
            proceed.Enabled = True
        Catch ex As Exception
            MessageBox.Show("fichier introuvable")
            End
        End Try

    End Sub
    
    Private Sub SearchEndCode()
        Dim array1() As String
        Dim iter As Integer
        iter = listitems.Length - 1
        Do Until listitems(iter).IndexOf("G0 Z") >= 0
            iter -= 1
        Loop

        ReDim enditems(listitems.Length - 1 - iter)
        Array.Copy(listitems, iter, enditems, 0, listitems.Length - iter)
        ReDim array1(iter - 1)
        Array.Copy(listitems, 0, array1, 0, array1.Length)
        ReDim listitems(array1.Length - 1)
        Array.Copy(array1, listitems, array1.Length)
    End Sub
    Private Function GetdecimalSeparator() As Char
        Dim sp As String
        sp = 1 / 2
        Return (sp.Substring(1, 1))
    End Function
    Private Sub CreateZvector()

        'vectorZn contient tous les cotes des GO Z 
        Dim sp As Char
        Dim zn As Double
        Dim iterzn As Integer

        Dim iter As Long

        Dim iternewlist As Long

        sp = GetdecimalSeparator()
        iternewlist = 0
        iterzn = 0
        ReDim vectorZn(iterzn)
        For iter = 0 To listitems.Length - 1
            If listitems(iter).IndexOf("G0 Z") >= 0 Then
                If sp <> "." Then
                    listitems(iter) = listitems(iter).Replace(".", sp)
                End If
                'zn le nombre du Go Z
                Try
                    zn = Double.Parse(listitems(iter).Substring("G0 Z".Length))

                    If Not vectorZn.Contains(zn) Then
                        ReDim Preserve vectorZn(iterzn)
                        vectorZn(iterzn) = zn
                        iterzn += 1
                    End If
                Catch ex As Exception
                    MessageBox.Show("ERROR CODE G0")
                    End
                End Try
            End If
        Next
        Array.Sort(vectorZn)
    End Sub


    Private Sub GroupGoZ()
        Dim iterz As Integer
        Dim iterlist As Integer
        Dim itergroup As Integer
        Dim start As Integer
        Dim countseparator As Integer
        Dim flagfirst As Boolean
        Dim str As String
        Dim sp As Char
        sp = GetdecimalSeparator()
        flagfirst = False
        countseparator = 0
        For iterz = 0 To vectorZn.Length - 1
            If Math.Truncate(vectorZn(iterz)) - vectorZn(iterz) = 0 Then
                str = "G0 Z" & vectorZn(iterz).ToString("#0.0")
            Else
                str = "G0 Z" & vectorZn(iterz).ToString()
            End If
            start = 0
            iterlist = 0
            Do Until iterlist > listitems.Length - 1
                If listitems(iterlist).IndexOf(str) >= 0 Then
                    If Not flagfirst Then
                        ReDim Preserve newlistitems(iterlist + 1)
                        System.Array.Copy(listitems, newlistitems, iterlist)
                        flagfirst = True
                        newlistitems(iterlist) = "*".PadLeft(60, "*")
                        ReDim Preserve vectseparator(countseparator)
                        vectseparator(countseparator) = iterlist
                        listitems(iterlist) = listitems(iterlist).Replace(sp, ".")
                        newlistitems(iterlist + 1) = listitems(iterlist)
                    End If
                    itergroup = iterlist + 1
                    listitems(iterlist) = listitems(iterlist).Replace(sp, ".")
                    newlistitems(newlistitems.Length - 1) = listitems(iterlist)
                    Do While listitems(itergroup).IndexOf("G0 Z") < 0
                        ReDim Preserve newlistitems(newlistitems.Length)
                        newlistitems(newlistitems.Length - 1) = listitems(itergroup)
                        itergroup += 1
                        If itergroup = listitems.Length Then
                            Exit Do
                        End If
                    Loop
                    ReDim Preserve newlistitems(newlistitems.Length)
                    countseparator += 1
                    ReDim Preserve vectseparator(countseparator)
                    vectseparator(countseparator) = newlistitems.Length - 1
                    newlistitems(newlistitems.Length - 1) = "-".PadLeft(60, "-")
                    iterlist = itergroup
                    ReDim Preserve newlistitems(newlistitems.Length)
                End If
                iterlist += 1
            Loop
        Next
        ReDim Preserve newlistitems(newlistitems.Length - 1 + enditems.Length - 1)
        Array.Copy(enditems, 0, newlistitems, newlistitems.Length - enditems.Length, enditems.Length)
    End Sub
    Private Sub SaveGcode()
        RemoveSeparator()
        If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            Try
                System.IO.File.WriteAllLines(SaveFileDialog1.FileName, newlistitems)
            Catch ex As Exception
                MessageBox.Show("problème de sauvegarde")
            End Try
        End If

    End Sub
    Private Sub RemoveSeparator()
        Dim iter As Integer
        Dim indextemplistitem As Integer
        Dim templistitem() As String
        ReDim templistitem(0)
        indextemplistitem = 0
        For iter = 0 To newlistitems.Length - 1
            If Not vectseparator.Contains(iter) Then
                ReDim Preserve templistitem(indextemplistitem)
                templistitem(indextemplistitem) = newlistitems(iter)
                indextemplistitem += 1
            End If
        Next
        ReDim newlistitems(templistitem.Length - 1)
        Array.Copy(templistitem, newlistitems, templistitem.Length)
    End Sub

    Private Sub GcodeIn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FileGcodeName.Click
        Save.Enabled = False
        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
            readfile()

        End If
    End Sub
    Private Sub Design()
        With Codein
            .Visible = True
            .Left = Me.Width / 2 - (Codein.Width + codeout.Width + FileGcodeName.Width + 6) / 2
            .Top = 6
            .Width = Me.Width / 2 - 3 * FileGcodeName.Width / 4
            .Height = Me.Height - FileGcodeName.Height * 2
        End With

        With FileGcodeName
            .Left = Codein.Right + 3
            .Top = 6
        End With

        With proceed
            .Left = Codein.Right + 3
            .Top = FileGcodeName.Bottom + 2
        End With

        With Save

            .Left = Codein.Right + 3
            .Top = proceed.Bottom + 2
        End With

        With codeout
            .Left = FileGcodeName.Right + 3
            .Top = 6
            .Width = Me.Width / 2 - 3 * FileGcodeName.Width / 4
            .Height = Me.Height - FileGcodeName.Height * 2

        End With


    End Sub
    Private Sub Formcnc_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Design()
        proceed.Enabled = False
        Save.Enabled = False
        codeout.Visible = False
    End Sub


    Private Sub proceed_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles proceed.Click
        SearchEndCode()
        CreateZvector()
        GroupGoZ()
        codeout.Visible = True
        codeout.Items.Clear()
        codeout.Items.AddRange(newlistitems)
        proceed.Enabled = False
        Save.Enabled = True

    End Sub

    Private Sub Save_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Save.Click
        SaveGcode()
    End Sub

    Private Sub Formcnc_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize, Codein.Resize, codeout.Resize, FileGcodeName.Resize, proceed.Resize, Save.Resize
        Design()
    End Sub

End Class
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
7 févr. 2011 à 13:46
Bonjour,

alors là , c'est top !
Plus de boutons baladeurs .
Je retourne, à mon atelier, poursuivre les tests.
Je te tiens au courant.
Encore un immense merci !
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
7 févr. 2011 à 16:32
Résultat des tests : encore du pain sur la planche...

J'ai réussi à exécuter la première tranche d'usinage(avec les trois G0Z3.0) sans problème mais Emc2 refuse d'exécuter la deuxième tranche( avec les trois G0Z5.0). Je me suis rendu compte que la structure du g-code est différente et que ça pose problème.
Je vais tenter de te l'expliquer et essayer, moi-même, de mieux comprendre ce qui ne va pas.

D'abord j'isole les deux premières tranches (si ça marche pour ces deux là, le reste ira tout seul :




( Made using CamBam - http://www.cambam.co.uk )
( coussin2 2/6/2011 10:44:35 PM )
( T1 : 1.0 )
( T2 : 60.0 )
( T3 : -60.0 )
G21 G90 G64 G40
(*)
G0 Z3.0
( T1 : 1.0 )
T1 M6
( 3DSurface1 )
G17
M3 S1000
G0 X124.2984 Y268.433
G1 F1000.0 Z0.0 (F1000 défini la vitesse d'avance et G1 Z0.0 la hauteur de l'outil)
G3 X88.8904 Y233.0249 I0.0 J-35.4081
G1 Y125.3007
G3 X124.2984 Y89.8926 I35.4085 J0.0004
G1 X124.2985
G1 X124.2984
G1 X291.8695
G3 X327.2776 Y125.3007 I-0.0004 J35.4085
G1 Y233.025
G3 X291.8695 Y268.433 I-35.4079 J0.0002
G1 X124.2984
(-)
G0 Z3.0
( T2 : 60.0 )
T2 M6
M3 S1000
G1 Y238.933
G1 Z0.0
G3 X118.3904 Y233.025 I0.0 J-5.9081
G1 Y233.0249
G1 Y125.3009
G1 Y125.3007
G1 Y125.301
G1 Y125.3009
G3 X124.2987 Y119.3926 I5.9085 J0.0002
G1 X124.2988
G1 X124.2984
G1 X124.2987
G1 X291.8692
G1 X291.8695
G1 X291.8691
G3 X291.8692 I-0.0001 J5.9085
G3 X297.7776 Y125.301 I-0.0002 J5.9085
G3 Y125.3011 I-5.9085 J0.0002
G1 Y125.3007
G1 Y125.301
G1 Y233.025
G1 Y233.0251
G3 X291.8696 Y238.933 I-5.9079 J0.0
G1 X291.8695
G1 X124.2984
(-)
G0 Z3.0
( T3 : -60.0 )
T3 M6
M3 S1000
G0 X124.2985 Y298.933
G1 Z0.0
G3 X58.3904 Y233.0249 I0.0 J-65.9081
G1 Y125.3007
G1 Y125.3004
G3 X124.2981 Y59.3926 I65.9085 J0.0007
G1 X124.2984
G1 X291.8695
G1 X291.8699
G3 X357.7776 Y125.3003 I-0.0008 J65.9085
G1 Y125.3007
G1 Y233.0249
G1 Y233.025
G1 Y233.0248
G1 Y233.0249
G3 X291.8694 Y298.933 I-65.9079 J0.0002
G1 X291.8693
G1 X291.8695
G1 X291.8694
G1 X124.2985
G1 X124.2984
G1 X124.2985
(-)
G0 Z5.0
G3 X88.8904 Y233.0249 I0.0 J-35.4081
G1 Y125.3007
G3 X124.2984 Y89.8926 I35.4085 J0.0004
G1 X124.2985
G1 X124.2984
G1 X291.8695
G3 X327.2776 Y125.3007 I-0.0004 J35.4085
G1 Y233.025
G3 X291.8695 Y268.433 I-35.4079 J0.0002
G1 X124.2984
(-)
G0 Z5.0
G3 X118.3904 Y233.025 I0.0 J-5.9081
G1 Y233.0249
G1 Y125.3009
G1 Y125.3007
G1 Y125.301
G1 Y125.3009
G3 X124.2987 Y119.3926 I5.9085 J0.0002
G1 X124.2988
G1 X124.2984
G1 X124.2987
G1 X291.8692
G1 X291.8695
G1 X291.8691
G3 X291.8692 I-0.0001 J5.9085
G3 X297.7776 Y125.301 I-0.0002 J5.9085
G3 Y125.3011 I-5.9085 J0.0002
G1 Y125.3007
G1 Y125.301
G1 Y233.025
G1 Y233.0251
G3 X291.8696 Y238.933 I-5.9079 J0.0
G1 X291.8695
G1 X124.2984
(-)
G0 Z5.0
G3 X58.3904 Y233.0249 I0.0 J-65.9081
G1 Y125.3007
G1 Y125.3004
G3 X124.2981 Y59.3926 I65.9085 J0.0007
G1 X124.2984
G1 X291.8695
G1 X291.8699
G3 X357.7776 Y125.3003 I-0.0008 J65.9085
G1 Y125.3007
G1 Y233.0249
G1 Y233.025
G1 Y233.0248
G1 Y233.0249
G3 X291.8694 Y298.933 I-65.9079 J0.0002
G1 X291.8693
G1 X291.8695
G1 X291.8694
G1 X124.2985
G1 X124.2984
G1 X124.2985




Là je me rend compte que dans la première tranche on trouve un petit groupe d'instructions qui ne se retrouvent pas dans la suite du g-code :

G0 Z3.0
( T1 : 1.0 )
T1 M6
( 3DSurface1 )
G17
M3 S1000
G0 X124.2984 Y268.433


Je les ai coloré en rouge. Ces instructions correspondes au relèvement au changement d'outil et au positionnement de l'outil . En effet sur chaque tranche, il y à trois usinages distinct avec trois outils différents et avant chaque changement, l'outil doit être relevé pour ne pas endommager la pièce puis changé(appel d'outil : M6) puis replacé au bon endroit.
CamBam a écrit cette opération au début de chaque bloc d'usinage mais n'a pas eu besoin de le réécrire entre chaque tranche puisque l'outil restait inchangé du bas vers le haut.
Mais si on exécute les trois usinage d'un même plan, l'un après l'autre, alors, il faut impérativement écrire les changement d'outils à chaque niveau.

Je ne suis pas sur d'être très clair.

Voici un exemple de ce ver quoi je dois aller :




( Made using CamBam - http://www.cambam.co.uk )
( coussin2 2/6/2011 10:44:35 PM )
( T1 : 1.0 )
( T2 : 60.0 )
( T3 : -60.0 )
G21 G90 G64 G40
(*)
G0 Z3.0
( T1 : 1.0 )
T1 M6
( 3DSurface1 )
G17
M3 S1000
G0 X124.2984 Y268.433
G1 F1000.0 Z0.0 (F1000 défini la vitesse d'avance et G1 Z0.0 la hauteur de l'outil)
G3 X88.8904 Y233.0249 I0.0 J-35.4081
G1 Y125.3007
G3 X124.2984 Y89.8926 I35.4085 J0.0004
G1 X124.2985
G1 X124.2984
G1 X291.8695
G3 X327.2776 Y125.3007 I-0.0004 J35.4085
G1 Y233.025
G3 X291.8695 Y268.433 I-35.4079 J0.0002
G1 X124.2984
(-)
G0 Z3.0
( T2 : 60.0 )
T2 M6
M3 S1000
G1 Y238.933
G1 Z0.0
G3 X118.3904 Y233.025 I0.0 J-5.9081
G1 Y233.0249
G1 Y125.3009
G1 Y125.3007
G1 Y125.301
G1 Y125.3009
G3 X124.2987 Y119.3926 I5.9085 J0.0002
G1 X124.2988
G1 X124.2984
G1 X124.2987
G1 X291.8692
G1 X291.8695
G1 X291.8691
G3 X291.8692 I-0.0001 J5.9085
G3 X297.7776 Y125.301 I-0.0002 J5.9085
G3 Y125.3011 I-5.9085 J0.0002
G1 Y125.3007
G1 Y125.301
G1 Y233.025
G1 Y233.0251
G3 X291.8696 Y238.933 I-5.9079 J0.0
G1 X291.8695
G1 X124.2984
(-)
G0 Z3.0
( T3 : -60.0 )
T3 M6
M3 S1000
G0 X124.2985 Y298.933
G1 Z0.0
G3 X58.3904 Y233.0249 I0.0 J-65.9081
G1 Y125.3007
G1 Y125.3004
G3 X124.2981 Y59.3926 I65.9085 J0.0007
G1 X124.2984
G1 X291.8695
G1 X291.8699
G3 X357.7776 Y125.3003 I-0.0008 J65.9085
G1 Y125.3007
G1 Y233.0249
G1 Y233.025
G1 Y233.0248
G1 Y233.0249
G3 X291.8694 Y298.933 I-65.9079 J0.0002
G1 X291.8693
G1 X291.8695
G1 X291.8694
G1 X124.2985
G1 X124.2984
G1 X124.2985
(-)
G0 Z8.0 (note que Z 5.0 + 3.0 8.0)
( T1 : 1.0 )
T1 M6
( 3DSurface1 )
G17
M3 S1000
G0 X124.2984 Y268.433
G0 Z5.0
G3 X88.8904 Y233.0249 I0.0 J-35.4081
G1 Y125.3007
G3 X124.2984 Y89.8926 I35.4085 J0.0004
G1 X124.2985
G1 X124.2984
G1 X291.8695
G3 X327.2776 Y125.3007 I-0.0004 J35.4085
G1 Y233.025
G3 X291.8695 Y268.433 I-35.4079 J0.0002
G1 X124.2984
(-)
G0 Z8.0 (note que Z 5.0 + 3.0 8.0)

( T2 : 60.0 )
T2 M6
M3 S1000
G1 Y238.933
G0 Z5.0
G3 X118.3904 Y233.025 I0.0 J-5.9081
G1 Y233.0249
G1 Y125.3009
G1 Y125.3007
G1 Y125.301
G1 Y125.3009
G3 X124.2987 Y119.3926 I5.9085 J0.0002
G1 X124.2988
G1 X124.2984
G1 X124.2987
G1 X291.8692
G1 X291.8695
G1 X291.8691
G3 X291.8692 I-0.0001 J5.9085
G3 X297.7776 Y125.301 I-0.0002 J5.9085
G3 Y125.3011 I-5.9085 J0.0002
G1 Y125.3007
G1 Y125.301
G1 Y233.025
G1 Y233.0251
G3 X291.8696 Y238.933 I-5.9079 J0.0
G1 X291.8695
G1 X124.2984
(-)
G0 Z8.0 (note que Z 5.0 + 3.0 8.0)
( T3 : -60.0 )
T3 M6
M3 S1000
G0 X124.2985 Y298.933
G0 Z5.0
G3 X58.3904 Y233.0249 I0.0 J-65.9081
G1 Y125.3007
G1 Y125.3004
G3 X124.2981 Y59.3926 I65.9085 J0.0007
G1 X124.2984
G1 X291.8695
G1 X291.8699
G3 X357.7776 Y125.3003 I-0.0008 J65.9085
G1 Y125.3007
G1 Y233.0249
G1 Y233.025
G1 Y233.0248
G1 Y233.0249
G3 X291.8694 Y298.933 I-65.9079 J0.0002
G1 X291.8693
G1 X291.8695
G1 X291.8694
G1 X124.2985
G1 X124.2984
G1 X124.2985

J'espère que cette nouvelle difficulté ne sera pas trop insurmontable. J'ai le sentiment d'abusé vraiment de ta patience
et je comprendrais si tu en avais mare. je suis vraiment près du but et sans ce dernier réglage tout ton travail ne servirait à rien. je te remercie d'avance et ce, quelque soit ta décision.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 févr. 2011 à 20:29
Salut

Je n'ai pas trop compris
Là je me rend compte que dans la première tranche on trouve un petit groupe d'instructions qui ne se retrouvent pas dans la suite du g-code :


il faut que ces instructions se répetent à tous
les gcodes
( T1 : 1.0 )
T1 M6
( 3DSurface1 )
G17
M3 S1000
G0 X124.2984 Y268.433

mais ce n'est pas toujours pareil
( T2 : 60.0 )
T2 M6
M3 S1000
G1 Y238.933

( T3 : -60.0 )
T3 M6
M3 S1000
G0 X124.2985 Y298.933

ça diffère à chaque fois
comment savoir les instructions qui doivent se
répeter à tous les gcodes

G0 Z8.0 (note que Z 5.0 + 3.0 8.0)
pourquoi as tu marqué ça ?

ou plutot que vient faire le G0 Z8.0 ici
tant que ça m'est pas clair je ne sais pas
ce qu'il faut faire
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
7 févr. 2011 à 21:55
Effectivement, ce n'est pas très clair

Mais ne t'inquiète pas, je vais reprendre ma méthode au niveau de CamBam pour voir si je n'ai pas un début de solution.
Ensuite, je vais essayer de schématiser le problème pour le rendre le plus intelligible possible.
Enfin je ferais un organigramme des modifications à apporter au g-code. Ce sera plus simple pour toi.

En attendant, je vais tenter d'analyser, avec toi, la structure du g-code qu'il faudra recopier.




G0 Z3.0 cette instruction demande à l'outil de s'élever de 3 mm au dessus de la pièce pour mettre l'outil en sécurité.
( T1 : 1.0 )commentaire
T1 M6 appel de l'outil n° 1 : gère le changement d'outil.
( 3DSurface1 )commentaire
G17 désigne le plan de travail X etY
M3 S1000 allume la rotation de la broche à la vitesse 1000, mais, dans mon cas, cette instruction ne sert à rien.
G0 X124.2984 Y268.433 déplace l'outil dans ces deux directions et c'est là que réside le principal problème car ce sont
des coordonnées relative(incrémentales) donc je n'ai effectivement aucun moyen des savoir leur valeur. la solution serai de travailler en coordonnées absolue( c'est à dire par rapport à un point de repère unique)



Donc pour résumer, la structure de ce qu'il faudra intercaler dans le g-ode, peut se résumer à ceci :


G0 Z3.0
T1 M6
G17
G0 X124.2984 Y268.433



G0 Z3.0 : la subtilité, c'est que dans le cas du premier niveau, la rehausse de 3mm se fait à partir du niveau 0.0 pour le niveau suivant il faut ajouter le rehaussement de 3mm à la hauteur courante(dans ce cas 5.0 mm )
ce qui donne : la hauteur Z courante + le rehaussement de sécurité. soit : 5.0 + 3.0 = 8.0mm

PourT1 M6 : il suffira d'associer l'appel d'outil en fonction de l'usinage d'origine(1, 2 ou 3)

PourG17 : ce sera constant donc pas de grosses difficultés

Enfin pour G0 X124.2984 Y268.433 : Le plus dur sera de déduire cette information, du reste, du code . Mais je suppose que se sera plus facile si les coordonnées sont absolues. c'est à dire par rapport à un point de repère unique que l'on appelle l'origine de la pièce.
C'est sur cette question que je vais travailler dan CamBam.

Demain je planche là dessus et je te donne mes conclusions. Le problème sera, je l'espère, un peu plus simple à résoudre.

J'espère que je ne t'ai pas trop saoulé...
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 févr. 2011 à 23:20
J'espère que je ne t'ai pas trop saoulé...


non pas encore mais les admins vont se demander
si on écrit un roman plus de 15 pages
on va battre le record

il faut que
G0 Z3.0
T1 M6
G17
G0 X124.2984 Y268.433 se répetent
G0 Z3.0 aussi ?

par ex
G0 Z5.0
si
G0 Z3.0 cette instruction demande à l'outil de s'élever de 3 mm au dessus de la pièce pour mettre l'outil en sécurité.
donc
G0 Z5.0 cette instruction demande à l'outil de s'élever de 5 mm au dessus de la pièce pour mettre l'outil en sécurité.
ou je me trompe

G0 Z3.0 (tu as un G0 Z inclus dans un G0 Z ce n'est pas une faute
T1 M6
G17
G0 X124.2984 Y268.433
G3 X58.3904 Y233.0249 I0.0 J-65.9081
G1 Y125.3007
G1 Y125.3004
G3 X124.2981 Y59.3926 I65.9085 J0.0007
G1 X124.2984
G1 X291.8695
G1 X291.8699
G3 X357.7776 Y125.3003 I-0.0008 J65.9085
G1 Y125.3007
G1 Y233.0249
G1 Y233.025
G1 Y233.0248
G1 Y233.0249
G3 X291.8694 Y298.933 I-65.9079 J0.0002
G1 X291.8693
G1 X291.8695
G1 X291.8694
G1 X124.2985
G1 X124.2984
G1 X124.2985

peut etre ouvre le forum cnc
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
8 févr. 2011 à 17:22
Bonjour ShayW,

Les tests réalisé sur ma machine sont concluants.

Si je rajoute manuellement les petits bouts de g-code, Emc2 exécute son travail sans problème.
Je vais réfléchir à une solution pour automatiser l'insertion de ces instructions. Mais ça va être un travail de longue alêne et je ne veux pas mobiliser ton temps indéfiniment. Je te reposerai des questions plus précises, quand je buterai sur des problèmes de programmation.

De plus j'ai posté une demande d'aide sur le forum de CamBam pour trouver un moyen d'insérer les changements d'outils directement dans CamBam.

En tous cas, ton trieur me permet d'avancer beaucoup plus vite et de reprendre les tests sur ma machine.

J'ai aussi beaucoup appris sur les recherches d'erreurs dans Visual Studio. Ça me sera fort utile pour progresser en programation.

Je te remercie encore vivement pour tout tes efforts. Et si tu veux te lancer dans la CNC je serais très heureux de t'aider.

je te tiens au courant de l'évolution de ton code.

A bientôt.
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
8 févr. 2011 à 17:55
Excuse moi les posts se sont croisés.

L'outil a deux positions : une pour le travail( Z5.0 par exemple) et une autre pour pouvoir se déplacer 3 mm au dessus de la pièce.( Z8.0 soit 5 + 3).

G0 Z3.0 est relatif à la position Z de l'opération courante. Donc si on travail à la hauteur de Z10.0 (par exemple)
alors le relèvement se fera à la hauteur de Z13.0

Le gros problème auquel je suis confronté, c'est que CamBam n'a pas écrit les déplacements d'outil entre chaque usinage.
Il n'a eu à le faire que pour le premier niveau (G0 Z3.0). Malheureusement je n'ai aucun moyen pour déduire les coordonnées nécessaire au bon positionnement de l'outil à chaque nouvelle tranche.
La réponse se trouve au niveau de CamBam. Et là où ça va être coton, c'est qu'il va falloir que j'intègre ton code dans un plug-in qui s'exécutera dans l'environnement de CamBam. Heureusement le développeur de CamBam à permis la création de plug-in en Visual Basic.
Mais il me faut en apprendre beaucoup plus sur la création de plug-in.

"Parfois le chemin est dur ! "
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 févr. 2011 à 19:41
Merci c'est comme ça que j'apprends je suis
débutant en vb.net .Seulement en écrivant des programmes et confronter toutes sortes de problèmes on apprend
ça serait beaucoup
mieux pour automatiser l'insertion des instructions

pour coder en vb.net ce n'est pas facile
l'important ce n'est pas le langage mais l'algorithm pour inserer les instructions c'est
un algorithm compliquer
comme on dit c'est en forgeant qu'on devient
forgeron ce qui donnne
c'est en codant qu'on devient corderon
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
8 févr. 2011 à 22:45
et en sciant que Léonard De Vinci ...

Ça me me rendrai service de construire une sorte de petit éditeur de g-code pour faire les modifications et les insertions
de g-code. Avec un joli bouton pour le tri et des outils pour copier coller des fragments choisis de g-code. Je ne souhaite pas tout automatiser, mais avoir quelques outils qui faciliteront le travail.

Je réfléchi à une ébauche et je te poste le code demain. Tu me diras ce que tu en pense.
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
8 févr. 2011 à 23:04
En tous cas,félicitation à tous les deux...chapeau bas,je ne sais que dire devant une telle détermination et une telle patience!!
je pense que vous avez battu un record là!!

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...

Visual Basic .Net is the best
and vb6.0
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
9 févr. 2011 à 15:19
Merci pour tes encouragements NSUADI.

J'espère que les administrateur ne regarderons pas le squat de leur forum d'un trop mauvais œil.

J'ai un peu progressé concernant CamBam. si bien que j'ai espoir de résoudre notre dernier problème en son sein.
Ce ne serait pas évident à expliquer, mais l'idée, c'est que j'ai trouvé le moyen d'ouvrir le g-code trié dans CamBam, de le convertir en géométrie et de me servir de cette géométrie pour réécrire un nouveau G-code bien ordonné.
Si ça marche le trieur sera un élément clé dans ma chaine de logiciel.

C'est pas encore gagné, mais c'est une piste qui mérite d'être creusée.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
9 févr. 2011 à 17:52
Merci Nsuadi et bonne programmation

Treleau passes le bonjour à Cambam
0
Rejoignez-nous