Hinweise zur AutoLevel-Funktion in simCNC v3.600 Beta 1

Die AutoLevel-Funktion wird standardmäßig mit den Befehlen M151 und M150 ein- bzw. ausgeschaltet. Diese werden über die Makros M150.py und M151.py realisiert. Diese Makros werden automatisch zu jedem neu erstellten Konfigurationsprofil hinzugefügt.

Für ein bestehendes Profil können sie aus folgendem Verzeichnis kopiert werden: „<Installationspfad des Programms>/python/defaultScripts/scripts“, oder manuell erstellt werden.

M150.py – Makro für den Befehl zum Ausschalten der AutoLevel-Funktion

d.setAutoLevelingState( AutoLevelingState.Off )
print("AutoLeveling Correction: OFF")

M151.py – Makro für den Befehl zum Einschalten der AutoLevel-Funktion

d.setAutoLevelingState( AutoLevelingState.On )
print("AutoLeveling Correction: ON")

Ein Beispielmakro zum Abtasten eines Punktgitters wird vorbereitet und mit der Beta-2-Version bereitgestellt. Bis dahin können Sie experimentell eigene Daten an die Funktion übergeben. Unten ein Beispielmakro, das ein Punktgitter (geneigte Oberfläche) erzeugt, an die Steuerung übergibt und AutoLevel aktiviert.

d.setAutoLevelingState( AutoLevelingState.Off )
time.sleep(0.5)
rows = 10
cols = 10
# Initialize the matrix with zeros
matrix: List[List[float]] = [[0.0 for _ in range(cols)] for _ in range(rows)]
def fn_surface(x: int, y: int)->float:
     a = 0.1
     b = 0.2
     c = 1.0
     return (a * x + b * y + c)
for y in range(rows):
     for x in range(cols):
         v = fn_surface(x, y)
         matrix[x][y] = v
d.setAutoLevelingGridData( matrix )
d.setAutoLevelingGridStep( 25.0, 25.0 )
d.setAutoLevelingOrigin( d.getCurrentWorkOffset( ) )
time.sleep(0.5)
d.setAutoLevelingState( AutoLevelingState.On )

Zur Steuerung der AutoLevel-Funktion aus einem Python-Makro dienen die folgenden Befehle:

  • d.setAutoLevelingState (AutoLevelingState)

    Ein- / Ausschalten der AutoLevel-Funktion
  • d.getAutoLevelingState()

    Abfrage des aktuellen AutoLevel-Status
  • d.setAutoLevelingGridData( <2D float array>)

    Übertragung der Z-Korrekturdaten – 10×10-Punktgitter als 2D-Array von Z-Korrekturwerten
  • d.setAutoLevelingGridStep(<xStep>, <yStep>)

    Abstand zwischen den Gitterpunkten in X- und Y-Richtung
  • d.setAutoLevelingOrigin( <abs coords> )

    Festlegen der Position des „0/0“-Gitterpunktes – Maschinenkoordinaten

 

Es wurden außerdem folgende Maschinenparameter implementiert:

  • #9100

    Information über den Status der AutoLevel-Funktion
  • #9101

    Aktuelle AutoLevel-„Z“-Korrektur – Wert aus dem Gitterinterpolator. Bei deaktivierter AutoLevel-Funktion ist der Korrekturwert = 0.

 

⚠️ Hinweise

  • Die AutoLevel-Funktion arbeitet transparent auf der Seite des CSMIO/IP-Steuerungsgeräts. Das bedeutet, dass sich der Z-Achsenwert auf dem Bildschirm nicht zusammen mit der sich ändernden Korrektur verändert. Zur Anzeige des Korrekturwerts dient der Parameter #9101 – er wird im Standard-Interface des Programms verwendet. Wird ein eigenes Interface-Projekt genutzt, kann dort ein Widget hinzugefügt werden, das die Korrektur anzeigt. Widget-Eingang: „Machine Param“ und Nummer #9101 einstellen.
  • Die AutoLevel-Funktion begrenzt die Achsgeschwindigkeit bzw. -beschleunigung nicht. Sie ist grundsätzlich dafür gedacht, kleine Korrekturen für Oberflächenunregelmäßigkeiten vorzunehmen. Das Einrichten eines Punktgitters, in dem große Höhenunterschiede zwischen den Punkten auftreten, kann zu einer Überschreitung der Geschwindigkeits- bzw. Beschleunigungsgrenzen der Z-Achse führen und im Extremfall auch einen PID-Reglerfehler der Z-Achse verursachen. Eine entsprechende Prüfung der Daten, z. B. nach dem Scannen, sollte durch ein Python-Skript erfolgen, bevor d.setAutoLevelingGridData aufgerufen wird.
  • Die AutoLevel-Funktion arbeitet in Maschinenkoordinaten, d. h. eine Änderung der Werkstücknullpunkte verschiebt das Punktgitter nicht. Hierfür dient die Funktion d.setAutoLevelingOrigin.