SIMCNC M06 Problem

Steuerungssoftware, CAM, 2D/3D CAD, G-Code Editoren
Antworten
Compit
Beiträge: 8
Registriert: 08.05.2025, 10:23

SIMCNC M06 Problem

Beitrag von Compit » 22.05.2025, 11:22

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
Dateianhänge
m6.zip
(4.68 KiB) 253-mal heruntergeladen
image1(1).jpeg
image0(2).jpeg
3 Fehler-M06.JPG
3 Fehler-M06.JPG (27.44 KiB) 4078 mal betrachtet
2 Fehler-M06.JPG
1 Fehler-M06.JPG

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

Re: SIMCNC M06 Problem

Beitrag von carbonkid » 22.05.2025, 13:24

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.
Gruß Daniel

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

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

Re: SIMCNC M06 Problem

Beitrag von Anton » 22.05.2025, 21:44

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!
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Compit
Beiträge: 8
Registriert: 08.05.2025, 10:23

Re: SIMCNC M06 Problem

Beitrag von Compit » 22.05.2025, 22:20

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

Compit
Beiträge: 8
Registriert: 08.05.2025, 10:23

Re: SIMCNC M06 Problem

Beitrag von Compit » 28.05.2025, 17:37

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:
IP-Ein-Aus.JPG
IO-Ein-Aus.JPG
Wie kann ich die In und Out des Modul auf der CSMIO-IO dort einfügen?
Andre-Script.JPG
Andre-Conf.JPG
Ich hoffe, daß ich mein Problem verständlich erklären konnte, wenn nicht einfach melden.

Freue mich schon auf deine Hilfe.

Gruß
Peter

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

Re: SIMCNC M06 Problem

Beitrag von Anton » 29.05.2025, 11:59

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
Dateianhänge
ModulLaden2.jpg
ModulLaden.jpg
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: 242
Registriert: 13.08.2020, 12:34

Re: SIMCNC M06 Problem

Beitrag von Anton » 01.06.2025, 21:11

Compit hat geschrieben:
28.05.2025, 17:37
...
Wie kann ich die In und Out des Modul auf der CSMIO-IO dort einfügen?
...
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")
Die Hilfsfunktionen werden an einer anderen Stelle im Programm aufgerufen. Dort musst Du die Funktionsnamen anpassen und darauf achten, dass Du die korrekten Argumente übergibst, die dann in die Funktionsparameter kopiert werden.
_______________________________________________________________________________________________________
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)}")
Auch hier musst Du alle Funktionsaufrufe ändern/anpassen (Name und Argumente)

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

Antworten

Wer ist online?

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