simCNC, Python, Planfräsen, Taschenfräsen

Steuerungssoftware, CAM, 2D/3D CAD, G-Code Editoren
Anton
Beiträge: 179
Registriert: 13.08.2020, 12:34

simCNC, Python, Planfräsen, Taschenfräsen

Beitrag von Anton » 30.09.2021, 21:20

Die simCNC -Gemeinde hier im Forum ist anscheinend größer geworden.
Es ist bestimmt interessant, was man mit Python-Scripts in simCNC machen kann. Bisher habe ich keine Erfahrung mit Python gesammelt, aber ich habe schon häufig in anderen Sprachen programmiert.
Die Doku von cs-lab ist ganz gut, aber bei weitem nicht vollständig (GUI und Maschinenparameter fehlt komplett).

Normalerweise verwendet man z.B. Fusion zur G-Code-Erstellung. Vielleicht will man aber nur mal schnell eine Tasche fräsen oder ein Werkstück planen und es wäre doch schön, wenn man sich den benötigten G-Code direkt aus simCNC heraus generieren könnte.
Für das Planen habe ich jetzt ein einfaches, noch nicht vollständig fertiges und nicht getestetes Script (meine CNC-Fräse befindet ist noch nicht fertig) erstellt.
Hierzu habe ich mit dem eingebauten GUI-Editor ein neues Tab Planfräsen erstellt (siehe Bild). Dann noch einige Textfelder und Labels hinzugefügt (braucht etwas Übung, wegen der Layoutmanager, geht dann aber ganz gut). Zum Schluss noch einen Button hinzugefügt, der das Python-Script zur Codeerstellung aufruft. Im Script werden dann die Textfelder aus der GUI ausgelesen und die Bahnen berechnet. Hierbei schreibe ich den G-Code in eine Datei und am Ende des Scripts wird diese Datei in das G-Code-Fenster von simCNC geladen.
Weder die GUI noch das Script sind z.Z. optimiert, man kann aber das grundsätzliche Vorgehen erkennen. Vielleicht hat ja jemand Lust ein Kreistaschenzyklus, Bohrzyklus, … zu schreiben. Vielleicht mache ich das auch, ich habe aber im Moment wenig Zeit.
Hier kommt das Script:

# Planfräsen
#Einfaches noch nicht vollständig getestetes Programm zum Planfräsen mit nur einer Zustellung

#Mögliche Erweiterungen
#Anzahl mehrer Tiefenschnitte bis auf Endtiefe ermöglichen
#Planen beginnt z.Z. immer an Position X0 Y0 , Verschiebung von x/y ermöglichen
#Rückzugseben eingeben können
#Planen in nur eine Richtung ermöglichen ...
#...
#Autor: Bös

import math
import sys
#Nicht bei aktivierter Maschine (Idle-Button) diese Script laufen lassen
if d.getState( )==State.Idle:
msg.info( "Für Import von G-Code den Idle-Status verlassen", "Info" )
sys.exit("Für Import von G-Code den Idle-Status verlassen !!!")

#Dateipfad - Hier wird später der erzeugte G-Code gespeichert
cncFilePath = "C:\Program Files\simCNC\myNc\planfraesen.nc"

try:
File = open(cncFilePath, "w")
except IOError:
sys.exit("\n No access to file !!!")

#String zum Speichern des G-Codes
txt_NC_Prog = "%\n(1001)\nG90 G94 G17 G49 G40 G80 \nG21\nG53 G00 Z0.\nT1 M06\n"


#Daten aus GUI auslesen
#Namensgebung Bsp.: pf_txt_fraeserDurchmesser, pf->PlanFräsen, txt->Textfeld
fraeserdurchmesser = float(gui.pf_txt_fraeserDurchmesser.getText())
laengeX = float(gui.pf_txt_laengeX.getText())
laengeY = float(gui.pf_txt_laengeY.getText())
endtiefe = float(gui.pf_txt_endpositionZ.getText())
#Überlappung der Fräsbahnen
ueberlappung = float(gui.pf_txt_ueberlappung.getText())
vorschub = float(gui.pf_txt_Vorschub.getText())
drehzahl = int(gui.pf_txt_drehzahl.getText())
eilgang = 10000
zustellungY = fraeserdurchmesser - ueberlappung

txt_NC_Prog += "S" + str(drehzahl) + " M03\nG54\n"


#print("Durchmesser Fräser = " + str(fraeserdurchmesser))
#print("Tiefe in Z =" + str(endtiefe))
#print ( "Überlappung = " + str(ueberlappung ))
#print("ZustellungY=" + str(zustellungY))

#Anzahl der Bahnen berechnen
bahnen = math.ceil(laengeY / zustellungY)
#print ("Anzahl Bahnen = " + str(bahnen))


txt_NC_Prog += "G00 Z100\n"

#Positionen für Planfräsen - hier 1mm Überlauf gewählt
posX=-(fraeserdurchmesser+1)
posY=-(fraeserdurchmesser+1)

#Starposition Planfräsen
txt_NC_Prog += "G00 x"+ str(posX) +" Y" + str(posY) +"\nG00 Z2\n"
#Auf Endtiefe zustellen
txt_NC_Prog += "G01 Z" + str(endtiefe)+ "F"+str(vorschub) + "\n(start Planfraesen))\n"


#Planen
durchgang = 0
while durchgang<=bahnen:
durchgang+=1
#Zustellung in y-Richtung
posY=posY+zustellungY
txt_NC_Prog += "G01 x" + str(posX) + " y" + str(posY)+"\n"
if posX < 0 :
posX = laengeX + fraeserdurchmesser
else:
posX = -fraeserdurchmesser
#Bahn in x-Richtung fräsen
txt_NC_Prog += "G01 x" + str(posX) + " y" + str(posY) +"\n"

txt_NC_Prog += "M09\nG53 G00 Z50\nG49\nG53 G00 x0 y0\nM30\n%"


#Den String txt_NC_Prog in Datei schreiben
try:
File.write(txt_NC_Prog)
except IOError:
File.close()
sys.exit("\n File write error !!!")
#G-Code aus erzeugten Datei laden
d.openGCodeFile( cncFilePath )

Unbenannt-1.png
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Anton
Beiträge: 179
Registriert: 13.08.2020, 12:34

Re: simCNC, Python, Planfräsen, Taschenfräsen

Beitrag von Anton » 06.10.2021, 09:07

Moin, ich will Euch meine neusten Erkenntnisse zum Thema Python-Programmierung für simCNC mitteilen.
Ich habe „PyCharm Community Edition 2021.2.2“ installiert, weil der in simCNC eingebaute Python-Editor doch sehr rudimentär ist. Mit PyCharm Community Edition (kostenlos) läuft das Erstellen eines Python-Programmes doch deutlich flüssiger.
Man legt in PyCharm einfach ein neues Python-Projekt an und kopiert die benötigten Skripts aus simCNC in dieses Projekt. Die benötigten Skript-Dateien findet Ihr unter profiles:
„..\simCNC\profiles\Fraesen\scripts“.
Durch das Hinzufügen dieser Dateien in Euer PyCharm Python-Projekt habt Ihr nun die volle Funktionalität der Python-Schnittstelle von simCNC.
Hinweise:
Die Datei ___GUI.py wird sich ändern, wenn Ihr Änderungen mit dem GUI-Editor von simCNC durchführt. In diesem Fall müsst Ihr die ___GUI.py in Eurem Projekt in PyCharm einfach durch die neue ___GUI.py ersetzen.
In der Datei __INIT.py musste ich den try-catch-Block auskommentieren, sonst gab es einen Fehler (siehe Bild).
In Eure eigenen Skripte müsst Ihr dann nur noch folgende Zeile ganz oben einfügen:
From ___INIT import *
(siehe Bilder)

Für das Fräsen einer Kreistasche habe ich zwei Strategien vorgesehen:
a) Einfach in Kreisbahnen von innen nach außen zerspanen
b) Mit einer spiralförmigen Fräsbahn (archimedische Spirale) zerspanen und die letzten beiden Bahnen mit G03 fräsen (Ein Schrupp- und ein Schlichtschnitt)
In beiden Fällen würde ich mit einer Helix eintauchen, was dann aber auch bedeutet, dass die Tasche mindestens 2x Fräserdurchmesser groß werden muss.
Bei a) sehe ich die Querzustellung als evtl. problematisch an.
Bei b) Würde ich die archimedische Spirale durch viele Geraden annähern, was viele Zeilen G-Code bringen wird, je nachdem wie viele Punkte man bei einem Umlauf anfahren möchte.
Welche Strategie findet Ihr besser. Was mir fehlt ist die Fräs-Erfahrung, mit einer DIY-Fräse und einer 2,2KW-Spindel. Also was kann man der Spindel beim Eintauchen zumuten und wie verhält sie sich bei einer Querzustellung in Abhängigkeit von ae und ap.
Dateianhänge
PyCharmImport.PNG
pycharmAutovervollstädigung.png
pycharmAutovervollständigung.png
PyCharmINIT.PNG
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Benutzeravatar
carbonkid
Beiträge: 232
Registriert: 28.09.2016, 16:08

Re: simCNC, Python, Planfräsen, Taschenfräsen

Beitrag von carbonkid » 06.10.2021, 18:06

Sehr gut, leider verstehe ich vom programmieren nix. Daher kann ich hier nur mitlesen.
Die Skripte bräuchten dann halt grafische Oberflächen, meiner Meinung nach, aber da bin ich auch raus...ist ja auch wieder programmieren.
Es gab ja vor kurzem hier einen Beitrag wegen des 3D Antasten. Sebeastian hatte diesbezüglich ja schon einiges programmiert und Kontakt zu CS-Lab aufgenommen wegen der Implementierung in simCNC.
Das könntest du ja auch machen, dann hätten Alle simCNC Nutzer etwas davon.
Gruß Daniel

DiY Fräse : CSMIO-IP-M / JMC-iHSS57 / simCNC-CS-Lab / intel NUC6i3
3D Drucker: Anycubic Delta Linear

Anton
Beiträge: 179
Registriert: 13.08.2020, 12:34

Re: simCNC, Python, Planfräsen, Taschenfräsen

Beitrag von Anton » 10.10.2021, 23:11

Hallo Daniel,

das Ändern der Oberfläche über den GUI-Editor ist recht leicht und programmieren würde ich das nicht nennen.
Du kannst Dir doch einfach simCNC auf einem anderen Computer installieren und dort im GUI-Editor fröhlich drauf los Klicken.
Im aller schlimmsten Fall startet das Programm dann nicht mehr (habe ich bis jetzt aber noch nicht geschafft), aber das ist ja auch egal, du kannst es ja erneut installieren.
Eine echte IP-Steuerung musst du ja auch nicht für diese Zwecke dranhängen. Unter Settings -> Simulator -> kann man ja eine Steuerung als Simulator auswählen.

Aber was willst Du z.B. mit 6 Achsen in der GUI, wenn du nur 3 hast. Den Platz kann man für andere Dinge besser verwenden.
Ich finde es gerade gut, dass man bei simCNC die Oberfläche der GUI recht leicht anpassen kann.

VG
Michael
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Anton
Beiträge: 179
Registriert: 13.08.2020, 12:34

Re: simCNC, Python, Planfräsen, Taschenfräsen

Beitrag von Anton » 10.10.2021, 23:44

Hallo, ich habe jetzt mal eine erste Version eines Python-Skripts zur Erstellung einer Kreistasche programmiert.
Das Ergebnis könnt Ihr in den Bildern sehen. In der ZIP-Datei ist das Script. Bisher stehen die Parameter (Durchmesser, Vorschub, ...) als festeingetragene Werte unten im Skript. Die müssen dann später durch die GUI in simCNC befüllt werden.
Der Inhalt des Scripts kann auch einfach in den Script-Editor von simCNC ausgeführt werden - bitte zunächst nur Simulation verwenden!!!
Alle nicht simCNC Interessenten mit etwas Python-Erfahrung können das Skript auch einfach unter Python laufen lassen, dafür müssen einfach die simCNC spezifischen Zeilen (z.B. d.openGCodeFile) auskommentiert werden.

Insgesamt war es eher Fleißarbeit, bis auf die Berechnung der Punkte auf der Spiralbahn - da habe ich eine Weile für gebraucht.
Bestimmt sind noch kleinere Fehler drin, aber in der Simulation sieht es schon recht gut aus.

Ich habe zwei Frässtrategien für das Ausräumen der Taschen implementiert. Entweder kann man die Tasche kreisförmig oder spiralförmig ausräumen.
Eintauchen erfolgt über eine Helix.

Hinweis: Es handelt sich um eine nicht getestete Beta-Version. Verwendung auf eigene Gefahr!!!
Dateianhänge
KreistascheKlasse.zip
(2.8 KiB) 93-mal heruntergeladen
KreistascheSpirale.PNG
KreistascheKreis.PNG
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Anton
Beiträge: 179
Registriert: 13.08.2020, 12:34

Re: simCNC, Python, Planfräsen, Taschenfräsen

Beitrag von Anton » 10.10.2021, 23:50

Habe gerade gesehen, dass noch keine Drehzahl im G-Code steht. Die müsste noch hinzugefügt werden.
Ich ändere es demnächst im Skript.
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Benutzeravatar
carbonkid
Beiträge: 232
Registriert: 28.09.2016, 16:08

Re: simCNC, Python, Planfräsen, Taschenfräsen

Beitrag von carbonkid » 11.10.2021, 08:32

Moin Anton,
der GUI Editor macht mir keine Probleme damit hab ich ja die deutsche Oberfläche gemacht.
Das meinte ich auch nicht mit Programmieren, sondern das was du jetzt mit den Zyklen machst. Die Funktion des Zyklus selbst und dann das man diesen dann per Parameter in die Oberfläche integriert. Aber gut das hier welche sind die das können.
Zeig mal noch ein Bild hier vom Tab Planfräsen. Kann erst später das zip installieren.
Sehr gut und danke für die Arbeit!
Gruß Daniel

DiY Fräse : CSMIO-IP-M / JMC-iHSS57 / simCNC-CS-Lab / intel NUC6i3
3D Drucker: Anycubic Delta Linear

Anton
Beiträge: 179
Registriert: 13.08.2020, 12:34

Re: simCNC, Python, Planfräsen, Taschenfräsen

Beitrag von Anton » 11.10.2021, 09:56

Moin Daniel,

im ersten Beitrag war bereits ein Bild vom Planfräsen. Hier kommen jetzt nochmal zwei Bilder aus dem GUI-Editor.
Ein neues Tab kannst Du über das TabWidget erstellen, in dem Du die Eigenschaft "tabs quantity" auf einen größeren Wert stellst.
Wenn Du den Button erzeuge "G-Code" im Gui-Editor ausgewählt hast, dann musst du nur noch - wie im ersten Bild unten gezeigt - "Run script" einstellen und in der Zeile darunter den Script-Editor öffnen. Dort habe ich dann mein Script reinkopiert und abgespeichert.
Auf die GUI-Elemente der simCNC-Oberfläche kannst Du aus einem Script einfach über deren ID zugreifen - siehe ersten Beitrag in diesem Thread. Also z.B. so:

fraeserdurchmesser = float(gui.pf_txt_fraeserDurchmesser.getText())

Hier wäre pf_txt_fraeserDurchmesser die ID des LineEdit.

Planfräsen hatte ich absichtlich ganz einfach gehalten, damit man (und ich) erst mal versteht, wie das Zusammenspiel zwischen Script und GUI funktioniert. Da werde ich demnächst bestimm eine Klasse schreiben mit etwas mehr Funktionalität.

Bohrbilder (Kreis, Rechteck) wären als Zyklen vielleicht auch noch interessant!?

VG Michael
Dateianhänge
Neuestab.PNG
GUIeditorBtn.PNG
GUIeditorPlanfräsen.PNG
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Anton
Beiträge: 179
Registriert: 13.08.2020, 12:34

Re: simCNC, Python, Planfräsen, Taschenfräsen

Beitrag von Anton » 11.10.2021, 10:02

Hier kommt das Script und jetzt mit Drehzahl.

Status:
-noch nicht getestet
-Verwendung auf eigene Gefahr

Den vom Skript erzeugten G-Code für folgende Parameter habe ich auch in die ZIP-Datei gelegt.




# -----------später folgende Werte aus GUI holen ---------------------------------
durchmesser = 30
durchmesserFraeser = 6
zentrumKreistascheX = 20
zentrumKreistascheY = 20
schlichtaufmassDurchmesser = 0.5
querzustellung = 3
starttiefeZ = 0
endtiefeZ = -4
schnitttiefeEinzelschnitt = 2
schlichtaufmassZ = 0.1
vorschubEintauchen = 300
vorschubQuerzustellung = 400
vorschubSchruppen = 1000
vorschubSchlichten = 500
drehzahlSchruppen = 4000
drehzahlSchlichten = 5000
Dateianhänge
Kreistasche.zip
(4.84 KiB) 102-mal heruntergeladen
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Benutzeravatar
carbonkid
Beiträge: 232
Registriert: 28.09.2016, 16:08

Re: simCNC, Python, Planfräsen, Taschenfräsen

Beitrag von carbonkid » 11.10.2021, 20:52

Ah jetzt verstehe ich. Zu dem Script muß man sich dann im GUI Editor die passende Oberfläche erstellen. Na gut auf die Art und Weise würde ich das hinbekommen.
Ich dachte die ganze Zeit an etwas grafisches mit Bildchen, siehe Beispiel in meinen Anhang - natürlich schöner wie in Mach3 damals. Das wiederum müßte man halt wirklich programmieren in Python und davon hab ich keine Ahnung. ;-)
Die Kreistasche werde ich mal probieren die Tage.
Dateianhänge
Zyklen_Tab2.jpg
Gruß Daniel

DiY Fräse : CSMIO-IP-M / JMC-iHSS57 / simCNC-CS-Lab / intel NUC6i3
3D Drucker: Anycubic Delta Linear

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste