Hallo Zusammen,
zu meinem Problem mit der A Achse, möchte ich mein
weiteres Problem,welches ich, mit der Umstellung Mach3 auf SIMCNC habe, beschreiben.
Freundlicherweise habe ich von Andre' das Macro bekommen und habe meine Werte eingetragen.
Leider bekomme ich nur die fehlermeldungen siehe Bilder.
Da ich kein Programmirer bin, komme ich mit der Macrosprache nicht zu recht.
Vielleicht kann mir jemand meine Fehler erklären.
Auf den Bilder kann man mein WZW sehen, welcher pneumatisch nach vorne fährt.
Vielen Dank.
Gruß
Peter
SIMCNC M06 Problem
SIMCNC M06 Problem
- Dateianhänge
-
- m6.zip
- (4.68 KiB) 253-mal heruntergeladen
-
- 3 Fehler-M06.JPG (27.44 KiB) 4080 mal betrachtet
Re: SIMCNC M06 Problem
Hast du die scripte auf deine Maschine angepasst?
Wenn nein kannst du froh sein das sie nicht funktionieren -> wenn ja hätte es auch zum crash kommen können.
Deine Maschine ist ja nicht 1:1 die Selbe bzw. auch nicht gleich konfiguriert, somit muß das natürlich angepasst werden.
Da wirst du dich wohl mit Python befassen müssen um zu verstehen was in dem script passiert und um die Werte entsprechend
auf deine Maschine/WZW anzupassen.
Wenn nein kannst du froh sein das sie nicht funktionieren -> wenn ja hätte es auch zum crash kommen können.
Deine Maschine ist ja nicht 1:1 die Selbe bzw. auch nicht gleich konfiguriert, somit muß das natürlich angepasst werden.
Da wirst du dich wohl mit Python befassen müssen um zu verstehen was in dem script passiert und um die Werte entsprechend
auf deine Maschine/WZW anzupassen.
Gruß Daniel
DiY Fräse : CSMIO-IP-M / JMC-iHSS57 / simCNC-CS-Lab / intel NUC6i3
3D Drucker: Anycubic Delta Linear
DiY Fräse : CSMIO-IP-M / JMC-iHSS57 / simCNC-CS-Lab / intel NUC6i3
3D Drucker: Anycubic Delta Linear
Re: SIMCNC M06 Problem
Hallo Peter,
in vielen Fällen musst Du heute nicht mehr programmieren können - Prompten schon eher.
Dass der Fehler in Zeile 41 in der Datei __CONF.py ist hat die Fehlermeldung gezeigt.
Ziehe die Datei __CONF.py einfach in die Eingabemaske einer KI (z.B. https://www.perplexity.ai/)
Und frage nach dem Fehler in Zeile 41 und der Korrektur. Du kannst Dir das Programm auch Zeile für Zeile erklären lassen oder die KI auffordern, dass sie für dich in das Skript hilfreiche Kommentare einfügt. Du wirst sehen, dass das recht gut funktioniert.
Vermutlich hast Du an Zeile 41 gebastelt, weil es bei dem Andre vorher bestimmt funktioniert hat!?
Das hat Perplexity ausgespuckt:
In der Datei CONF.py ist in Zeile 41 folgender Fehler:
python
pos_atc_pockets = {1:['X': -175 'Y': 330 'Z': -2], 2:['X': -71 'Y': 330 'Z': -2]}
Fehler:
Die Syntax für Dictionaries und Listen ist falsch.
Nach jedem Wert in einer Liste oder einem Dictionary muss ein Komma stehen.
Bei Dictionaries mit mehreren Key-Value-Paaren innerhalb eines Werts (wie ['X': -175, 'Y': 330, 'Z': -2]) muss die äußere Struktur ein Dictionary sein, nicht eine Liste.
Korrekte Schreibweise:
python
pos_atc_pockets = {
1: {'X': -175, 'Y': 330, 'Z': -2},
2: {'X': -71, 'Y': 330, 'Z': -2}
}
Erklärung:
Die äußere Struktur ist ein Dictionary mit den Schlüsseln 1 und 2.
Jeder Wert ist wiederum ein Dictionary mit den Schlüsseln 'X', 'Y', 'Z' und den jeweiligen Werten.
Die Werte sind durch Kommas getrennt.
So sollte Zeile 41 aussehen:
python
pos_atc_pockets = {
1: {'X': -175, 'Y': 330, 'Z': -2},
2: {'X': -71, 'Y': 330, 'Z': -2}
}
Damit ist der Syntaxfehler behoben!
in vielen Fällen musst Du heute nicht mehr programmieren können - Prompten schon eher.
Dass der Fehler in Zeile 41 in der Datei __CONF.py ist hat die Fehlermeldung gezeigt.
Ziehe die Datei __CONF.py einfach in die Eingabemaske einer KI (z.B. https://www.perplexity.ai/)
Und frage nach dem Fehler in Zeile 41 und der Korrektur. Du kannst Dir das Programm auch Zeile für Zeile erklären lassen oder die KI auffordern, dass sie für dich in das Skript hilfreiche Kommentare einfügt. Du wirst sehen, dass das recht gut funktioniert.
Vermutlich hast Du an Zeile 41 gebastelt, weil es bei dem Andre vorher bestimmt funktioniert hat!?
Das hat Perplexity ausgespuckt:
In der Datei CONF.py ist in Zeile 41 folgender Fehler:
python
pos_atc_pockets = {1:['X': -175 'Y': 330 'Z': -2], 2:['X': -71 'Y': 330 'Z': -2]}
Fehler:
Die Syntax für Dictionaries und Listen ist falsch.
Nach jedem Wert in einer Liste oder einem Dictionary muss ein Komma stehen.
Bei Dictionaries mit mehreren Key-Value-Paaren innerhalb eines Werts (wie ['X': -175, 'Y': 330, 'Z': -2]) muss die äußere Struktur ein Dictionary sein, nicht eine Liste.
Korrekte Schreibweise:
python
pos_atc_pockets = {
1: {'X': -175, 'Y': 330, 'Z': -2},
2: {'X': -71, 'Y': 330, 'Z': -2}
}
Erklärung:
Die äußere Struktur ist ein Dictionary mit den Schlüsseln 1 und 2.
Jeder Wert ist wiederum ein Dictionary mit den Schlüsseln 'X', 'Y', 'Z' und den jeweiligen Werten.
Die Werte sind durch Kommas getrennt.
So sollte Zeile 41 aussehen:
python
pos_atc_pockets = {
1: {'X': -175, 'Y': 330, 'Z': -2},
2: {'X': -71, 'Y': 330, 'Z': -2}
}
Damit ist der Syntaxfehler behoben!
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi
https://www.youtube.com/@boessi
Re: SIMCNC M06 Problem
Hallo Anton,
Vielen Dank für deine Hilfe.
Das werde ich Morgen gleich versuchen.
Das mit den Kommata habe ich schon versucht, leider ohne Erfolg.
Das mit der Umstellung von Mach3 auf Simcnc ist, so denke ich ein
Sehr guter Schritt.
Simcnc macht einen sehr guten Eindruck, doch es sind sehr viele Baustellen, welche man
Wieder zu beackern hat.
Darum bin ich sehr dankbar, das Ihr den Neueinsteiger von Simcnc weiterhelft.
Ich hoffe das ich später auch ein paar Hilfestellungen geben kann.
Nochmals vielen Dank
Vielen Dank für deine Hilfe.
Das werde ich Morgen gleich versuchen.
Das mit den Kommata habe ich schon versucht, leider ohne Erfolg.
Das mit der Umstellung von Mach3 auf Simcnc ist, so denke ich ein
Sehr guter Schritt.
Simcnc macht einen sehr guten Eindruck, doch es sind sehr viele Baustellen, welche man
Wieder zu beackern hat.
Darum bin ich sehr dankbar, das Ihr den Neueinsteiger von Simcnc weiterhelft.
Ich hoffe das ich später auch ein paar Hilfestellungen geben kann.
Nochmals vielen Dank
Re: SIMCNC M06 Problem
Hallo Anton, 28-05-2025
das nit der Syntax hat funktioniert, leider hänge ich gerade an einem weiteren Problem, bei dem ich einfach
(keine Python Erfahrung) hänge.
Problem ist: Mein Ausgang "5" (CSMIO/IP) => Sindel CW, und Spindel Klemmung Aktiv "5" (CSMIO-IO).
Problem ist das ich die CSMIO/IP-S Ein und Ausgänge im Script habe, bei mir aber die Spindelabfrage WZ vorhanden
auf der CSMIO IO habe.
Aus der Anleitung: Wie kann ich die In und Out des Modul auf der CSMIO-IO dort einfügen? Ich hoffe, daß ich mein Problem verständlich erklären konnte, wenn nicht einfach melden.
Freue mich schon auf deine Hilfe.
Gruß
Peter
das nit der Syntax hat funktioniert, leider hänge ich gerade an einem weiteren Problem, bei dem ich einfach
(keine Python Erfahrung) hänge.
Problem ist: Mein Ausgang "5" (CSMIO/IP) => Sindel CW, und Spindel Klemmung Aktiv "5" (CSMIO-IO).
Problem ist das ich die CSMIO/IP-S Ein und Ausgänge im Script habe, bei mir aber die Spindelabfrage WZ vorhanden
auf der CSMIO IO habe.
Aus der Anleitung: Wie kann ich die In und Out des Modul auf der CSMIO-IO dort einfügen? Ich hoffe, daß ich mein Problem verständlich erklären konnte, wenn nicht einfach melden.
Freue mich schon auf deine Hilfe.
Gruß
Peter
Re: SIMCNC M06 Problem
Hallo Peter,
wenn ich dich richtig verstanden habe, dann willst Du einfach nur auf die I/O des Erweiterungsmoduls zugreifen.
Ich besitze das IO Modul nicht und kann es deshalb auch nicht testen, aber in der Doku steht doch auf Seite 8 ganz klar, wie Du das I/O Modul lädst und auf Seite 10 sind Beispiele. Wenn es dann immer noch zu wenig Ausgänge sind, dann schau doch mal in meinem Kanal vorbei
. https://youtu.be/f4wbI27Vt1w
Doku:
https://en.cs-lab.eu/wp-content/uploads ... cLlluI3Epl
Auf Seite 10 sind dann die Beispiele:
CSMIO-IO - Modul von zusätzlichen Ein/Aus – Nummer 0
mod_IO_0 = d.getModule( ModuleType.IO, 0 )
# Den Zustand des digitalen Eingangs Nr. 7 ablesen
if mod_IO _0.getDigitalIO( IOPortDir.InputPort, 7 ) == DIOPinVal.PinReset :
print("CSMIO-IO 0, digital input 7 = 0")
if mod_IO_0.getDigitalIO( IOPortDir.InputPort, 7 ) == DIOPinVal.PinSet :
print("CSMIO-IO 0, digital input 7 = 1")
# Den Zustand des digitalen Ausgangs Nr. 2 ablesen
if mod_IO_0.getDigitalIO( IOPortDir.OutputPort, 2 ) == DIOPinVal.PinReset :
print("CSMIO-IO 0, digital output 2 = 0")
if mod_IO_0.getDigitalIO( IOPortDir.OutputPort, 2 ) == DIOPinVal.PinSet :
print("CSMIO-IO 0, digital output 2 = 1")
CSMIO-IO - Modul von zusätzlichen Ein/Aus – Nummer 15
mod_IO_15 = d.getModule( ModuleType.IO, 15 )
# Den Zustand des digitalen Eingangs Nr. 11 ablesen
if mod_IO_15.getDigitalIO( IOPortDir.InputPort, 11 ) == DIOPinVal.PinReset :
print("CSMIO-IO 15, digital input 11 = 0")
if mod_IO_15.getDigitalIO( IOPortDir.InputPort, 11 ) == DIOPinVal.PinSet :
print("CSMIO-IO 15, digital input 11 = 1")
...
VG Anton
wenn ich dich richtig verstanden habe, dann willst Du einfach nur auf die I/O des Erweiterungsmoduls zugreifen.
Ich besitze das IO Modul nicht und kann es deshalb auch nicht testen, aber in der Doku steht doch auf Seite 8 ganz klar, wie Du das I/O Modul lädst und auf Seite 10 sind Beispiele. Wenn es dann immer noch zu wenig Ausgänge sind, dann schau doch mal in meinem Kanal vorbei

Doku:
https://en.cs-lab.eu/wp-content/uploads ... cLlluI3Epl
Auf Seite 10 sind dann die Beispiele:
CSMIO-IO - Modul von zusätzlichen Ein/Aus – Nummer 0
mod_IO_0 = d.getModule( ModuleType.IO, 0 )
# Den Zustand des digitalen Eingangs Nr. 7 ablesen
if mod_IO _0.getDigitalIO( IOPortDir.InputPort, 7 ) == DIOPinVal.PinReset :
print("CSMIO-IO 0, digital input 7 = 0")
if mod_IO_0.getDigitalIO( IOPortDir.InputPort, 7 ) == DIOPinVal.PinSet :
print("CSMIO-IO 0, digital input 7 = 1")
# Den Zustand des digitalen Ausgangs Nr. 2 ablesen
if mod_IO_0.getDigitalIO( IOPortDir.OutputPort, 2 ) == DIOPinVal.PinReset :
print("CSMIO-IO 0, digital output 2 = 0")
if mod_IO_0.getDigitalIO( IOPortDir.OutputPort, 2 ) == DIOPinVal.PinSet :
print("CSMIO-IO 0, digital output 2 = 1")
CSMIO-IO - Modul von zusätzlichen Ein/Aus – Nummer 15
mod_IO_15 = d.getModule( ModuleType.IO, 15 )
# Den Zustand des digitalen Eingangs Nr. 11 ablesen
if mod_IO_15.getDigitalIO( IOPortDir.InputPort, 11 ) == DIOPinVal.PinReset :
print("CSMIO-IO 15, digital input 11 = 0")
if mod_IO_15.getDigitalIO( IOPortDir.InputPort, 11 ) == DIOPinVal.PinSet :
print("CSMIO-IO 15, digital input 11 = 1")
...
VG Anton
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi
https://www.youtube.com/@boessi
Re: SIMCNC M06 Problem
Hallo Peter,
ich habe deinen Post gerade nochmal gelesen und erst jetzt verstanden, dass es Dir um die Hilfsfunktionen geht.
Ich würde jeweils eine get und set Methode für die IP-S und jeweils eine für die IO schreiben - etwa so:
Code: Alles auswählen
#Für die csmio IP
def getpinStatusIP(pin_in):
csmioIP = d.getModule(ModuleType.IP, 0)
if pin_in is None:
return None
return csmioIP.getDigitalIO(IOPortDir.InputPort, pin_in) == DIOPinVal.PinSet
def setOutputPinIP(pin_out, state):
if pin_out is None:
return
state2 = DIOPinVal.PinSet if state else DIOPinVal.PinReset
try:
csmioIP = d.getModule(ModuleType.IP, 0)
csmioIP.setDigitalIO(pin_out, state2)
except NameError:
print("Digital Out falsch definiert")
#Und für die IO:
def getpinStatusIO(module_nr, pin_in):
"""
Gibt True zurück, wenn der Eingang gesetzt ist, sonst False.
module_nr: Nummer des IO-Moduls (z.B. 0, 15)
pin_in: Nummer des Eingangs (z.B. 7, 11)
"""
mod_IO = d.getModule(ModuleType.IO, module_nr)
if pin_in is None:
return None
return mod_IO.getDigitalIO(IOPortDir.InputPort, pin_in) == DIOPinVal.PinSet
def setOutputPinIO(module_nr, pin_out, state):
"""
Setzt den Ausgang auf high (True) oder low (False).
module_nr: Nummer des IO-Moduls (z.B. 0, 15)
pin_out: Nummer des Ausgangs (z.B. 2, 5)
state: True für PinSet, False für PinReset
"""
if pin_out is None:
return
state2 = DIOPinVal.PinSet if state else DIOPinVal.PinReset
try:
mod_IO = d.getModule(ModuleType.IO, module_nr)
mod_IO.setDigitalIO(pin_out, state2)
except NameError:
print("Digital Out falsch definiert")
_______________________________________________________________________________________________________
Du kannst auch alles in eine Funktion schreiben, dann hast du aber mehr Parameter und somit mehr Argumente beim Aufruf:
Code: Alles auswählen
def ioDigital(
module_type, # ModuleType.IP oder ModuleType.IO
module_nr, # Nummer des Moduls (0 oder 15)
port_dir, # IOPortDir.InputPort oder IOPortDir.OutputPort
pin, # Pin-Nummer
value=None # None = lesen, True/False = schreiben
):
"""
Universelle Funktion zum Lesen/Schreiben eines digitalen IO-Pins.
- value=None: Pin wird gelesen (True/False wird zurückgegeben)
- value=True: Pin wird gesetzt (set)
- value=False: Pin wird gelöscht (reset)
"""
mod = d.getModule(module_type, module_nr)
if value is None:
# Lesen
return mod.getDigitalIO(port_dir, pin) == DIOPinVal.PinSet
else:
# Schreiben
state = DIOPinVal.PinSet if value else DIOPinVal.PinReset
mod.setDigitalIO(pin, state)
#Beispiele für die Anwendung
#Lesen eines Eingangs am IO-Modul 0, Pin 7:
status = ioDigital(ModuleType.IO, 0, IOPortDir.InputPort, 7)
print(f"CSMIO-IO 0, digital input 7 = {int(status)}")
#Setzen eines Ausgangs am IO-Modul 0, Pin 5 auf HIGH:
ioDigital(ModuleType.IO, 0, IOPortDir.OutputPort, 5, True)
#Lesen eines Eingangs am IP-Modul, Pin 8:
status = ioDigital(ModuleType.IP, 0, IOPortDir.InputPort, 8)
print(f"CSMIO/IP digital input 8 = {int(status)}")
Testen kann ich das nicht, ich habe kein IO-Modul.
VGA
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi
https://www.youtube.com/@boessi
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste