CNC Schrittmotorsteuerung über LPT

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von fraju.

    CNC Schrittmotorsteuerung über LPT

    Hallo,
    ich habe vor mir eine CNC-Fräsmaschine zu bauen, oder eine Maschine umzubauen.
    Zur Ansteuerung der Achsen sollen Schrittmotoren verwendet werden, die an eine solche Steuerung (ebay.de/itm/170937711832?ssPag…_trksid=p3984.m1438.l2649)angeschlossen sind.
    Diese Steuerungen funktioniern mit Takt- und Richtungssignalen.
    Wie kann ich also nun die Takt- und Richtungssignale an dem LPT ausgeben?
    Ich habe dazu in einer Richtextbox das Programm stehen:
    T1 S8000 F500 M13 (Werkzeug 1 einwechseln, Spindeldrehzahl 8000 1/min, Vorschub 500 mm/min, Spindel an und Kühlung an)
    G0 X-20 Y0 Z20 (Eilgang (Max Geschwindigkeit aller Achsen) zu den angegeben Koordinaten)
    G0 Z-10
    G2 I20 J0 (Kreis)
    G0 Z20
    T0 M30 (Werkzeug auswechseln, Programmende und Rücksprung auf Programmanfang)
    Wenn der Schrittmotor 1.8° pro Schritt macht, die Steigung der Kugelumlaufspindel 5mm Steigung hat, brauche ich bei einer Geschwindigkeit von 5000mm/min 200000 Schritte/min.




    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Und wenn das Progeamm fertrig ist, kannst Du aus einem Stück Eisen eine Lokomotive fräsen. :D :D :D
    Mach mal alles schön einzeln.
    1. die Kommunikation zwischen Rechner und Maschine:
    - Interface initialisieren
    - Format der Kommandos
    - Kommando senden
    - Antwort empfangen
    2. Primärbefehle, sofern sie nicht in der Maschine implementiert sind:
    - Beschleunigung
    - Abbremsen
    - Fahrt mit komnstanter Geschwindigkeit
    - Not-Halt
    - Drehzahlregelung (Fräser)
    3. höhere Ansteuerbefehle
    - Fahrt von a nach b
    - Fahrt eines Kreisbogens
    usw.
    -----
    Löse ein Problem, bevor Du das nächste angehst.
    Und pass auf, dass das Werkstück ordentlich eingespannt ist, wenn Du mit Fräsen beginnst. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    -> such lieber nach einer dll dafür ^^, bevor du den ganzen Mist selber programmieren mußt.
    Da gehört nämlich einiges dazu wie z.b. Rampen(Brems+ Beschleunigung), Steps(Full, Half usw), on off, stops aktiv usw,Encoder Stellungen etc. etc.
    Nimms mir nicht übel, aber eine solche Steuerung zu bauen ist WIRKLICH schwer.
    Du musst sehr viele Dinge beachten. @bastimw: hat schon einige aufgezählt.

    Ich habe selbst mal eine solche Steuerung vor einigen Jahren mit QuickBasic entwickelt.
    Sie hat funktioniert.. Jaja.. Aber schön war was anderes.
    Die Anfahrkurven waren viel zu steil, den Fehler hab ich dort nie gefunden und ich hab mindestens 5 Schrittmotoren auf dem Gewissen..

    Versuchs aber ruhig mal.. Stell dich aber auf ne Menge Arbeit ein...
    Das dachte ich mir schon, dass man da viel Arbeit reinstecken muss.
    Ich will jetzt ersmal damit anfangen die Textbox auszuwerten.
    Also muss ich Zeile für Zeile durchgehen und gucken was darin steht.
    Ich könnte es doch auch erstmal so ausprobieren:
    3 Label die das Richtungssignal simulieren, also zeigen sie entweder + oder - an.
    3 Pictureboxen, die ihre farbe bei einem Taktsignal wechseln.
    Ist das eine gute Idee ?(
    Ich glaube dabei brauche ich aber hilfe...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „chke93“ ()

    Hallo,
    ich habe jetzt meine Richtextbox, in der der CNC-Code steht. Diese lasse ich mit einer For Next Schleife durchlaufen.

    VB.NET-Quellcode

    1. For i As Integer = 0 To RichTextBox1.Lines.Length - 1

    Wie suche ich da jetzt mit Regex mir die einzelnen Befehle raus?
    So suche ich ja nur nach einem einzelnen Zeichen

    VB.NET-Quellcode

    1. If RichTextBox1.Lines(i) = "0" Then MsgBox("0") End If


    Und wie kann ich auf die aktive Lines(i) den Focus setzen??

    chke93 schrieb:

    Und wie kann ich auf die aktive Lines(i) den Focus setzen?
    Das geht über RTB.SelectionStart und RTB.SelectionLength.
    Da aber eine RTB von Hand editiert werden kann, solltest Du, wenn Du die Befehle abarbeitest, dies unmöglich machen.
    Mach die RTB unsichtbar, zeig eine ListBox an und pack die Info so rüber:

    VB.NET-Quellcode

    1. Me.ListBox1.DataSource = Me.RichTextBox1.Lines
    In der ListBox kannst Du dann mit

    VB.NET-Quellcode

    1. Me.ListBox1.SelectedIndex += 1
    die Abarbeitung anzeigen.
    Achtung, die Überlaufkontrolle musst Du selber machen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Achtung, die Überlaufkontrolle musst Du selber machen.
    Danke für den Tipp!
    Ich habe das jetzt so gemacht:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. ListBox1.SelectedIndex = 0
    3. If Regex.IsMatch(ListBox1.Items(0), "F[0-9]", RegexOptions.IgnoreCase) Then MsgBox("Ich hab was gefunden") End If
    4. For i As Integer = 1 To ListBox1.Items.Count - 1 ListBox1.SelectedIndex += 1
    5. If Regex.IsMatch(ListBox1.Items(i), "F[0-9]", RegexOptions.IgnoreCase) Then MsgBox("Ich hab was gefunden") End If Next
    6. End Sub

    So gibt es keine Probleme
    Wie kann ich jetzt den Befehl F100 splitten? Den Split mache ich bei "F" und dann soll mir Teil 1 in einer Msgbox angezeigt werden.

    chke93 schrieb:

    Wie kann ich jetzt den Befehl F100 splitten?
    Warum willst Du den splitten? Was passiert bei "FE100"?
    Mach das doch über eine StartsWith()-Abfrage.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Offensichtlich gibt es Befehle mit einem und mit zwei Buchstaben plus Zahl, wahrscheinlich gibt es noch Buchstaben ohne Zahl.
    Wenn Du die Syntax kennst, brauchst Du keinen Split-Befehl, sondern kannst über sine ordentliche If-Abfrage mit StarstWith() die Befehle zuordnen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    ich empfehle: Nimm Mach3! Ich habe selber eine CNC-Fräse. Da hab ich mir auch gedacht, dass ich dafür eine Steuersoftware entwickle. DAS hab ich dann ganz schnell sein gelassen, als mir das Teil fast um die Ohren geflogen wär. Und ganz nebenbei: Das Programm muss dann auch sehr schnell laufen, denn üblicher G-Code ist um die 100 Millionen Zeilen lang... Gut, fürs Isolationsfräsen ist das weniger; rund 5000 Zeilen auf einer Europlatine.
    Mit freundlichen Grüßen,
    Thunderbolt

    RodFromGermany schrieb:

    Wenn Du die Syntax kennst, brauchst Du keinen Split-Befehl, sondern kannst über sine ordentliche If-Abfrage mit StarstWith() die Befehle zuordnen.
    Aber wie geht das?
    Wenn in der Zeile steht: "G1 X200 F400" , dann startet die Zeile ja mit G1 und ich muss die Zahl hinter dem F "haben"

    timmi31061 schrieb:

    ich empfehle: Nimm Mach3!
    Wie gesagt, das entspricht nicht meinen erwartungen. Wenn ich mit Bahnkorrektur an die Kontur fahre, dann möchte ich mir da keinen Kreis programmieren.
    Ich arbeite jetzt in meiner Ausbildung an einer Deckel FP2NC, da gebe ich dann ein: G41 G47 A10 X-20 Y0 G0
    Bahnkorrektur an, Anfahren im Viertelkreis, Kreisradius von 10mm, zu X-20 Y0, Positionieren im Eilgang


    timmi31061 schrieb:

    denn üblicher G-Code ist um die 100 Millionen Zeilen lang
    Aber nur bei extremen 3D-Teilen! Wenn ich für den Modellbau fräse sind es keine 500 Zeilen.

    chke93 schrieb:

    Aber wie geht das?

    VB.NET-Quellcode

    1. IndexOf(" F")
    2. SubString(START_INDEX, LAENGE)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo nochmal,
    wie ist das denn mit der taktfrequenz, die ich am lpt ausgebe?
    Mit dem Timer soll das wohl nicht so schnell gehen, gibt es eine andere möglichkeit?
    Bei den Industrie-CNC's ist manchmal auch windows xp drauf und die schaffen z.b. 52m/min!

    chke93 schrieb:

    wie ist das denn mit der taktfrequenz, die ich am lpt ausgebe?
    Mach dazu ggf. einen neuen Thread auf.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!