User Tools

Site Tools


module:programming:gcodeinterpreter:gcodeinterpreter

GCodeInterpreter

Überblick

  • Lesen von GCode-Dateien
  • Abbildung GCodes nach GCommands (AsciiLines)
  • Abarbeitung der GCommands in verschiedenen GCode-Executoren:
    • nicht mehr aktuell: CommandExecutor(BaseClass)
      • nicht mehr aktuell: CommandCommon
      • nicht mehr aktuell: CommandMachine - Durchreichen von GCodes(Parametern) mit SoftwareHS über Uart-Interface
      • nicht mehr aktuell: CommandPlotter
      • nicht mehr aktuell: CommandSimulator
      • nicht mehr aktuell: CommandViewer
  • basierend auf Modulen:
    • RealTimePlot2D, RealTimePlot2DGCode
    • RealTimePlot3D
    • RealTimePlot2D3D, RealTimePlot2D3DGCode

ToDo

  • OOOOOO bei Fehler im Ablauf: Anhalten aller FSMs, totaler Abort!
  • Protocol lesen, speichern, visualisieren, löschen
  • Gui mit Frames für:
    • Status-Controls(left)
    • ViewControls(right) in Tabsheets: Protocol, Plot2D, Plot3D
    • Command-Controls(bottom)
  • !!! ComPortsRefresh am Anfang dauert bei aktiviertem BT extrem lange !!!
  • Error: Exception beim Schliessen des Programms
    • Grund: for-loop in GCodeInterpreter-CBTaskGCodeExecutionOnExecute-GCodePlot2D unterbrochen
    • Abhilfe: Task anstelle for-loop
  • GCodeInterpreter-Setup: SelectFileDialog für GCode-File
  • OOO Alle wichtigen Control-Attribute in Initdata laden / speichern!!!!
  • Latex-Dokumentation der G2/G3-Formeln
  • Auto-Aktivierung der Uart???
  • print('»> GCodeLines:') –> nach Editor auslagern?!
  • print(GCodeLines)
  • print('»> GCodeList:')
  • print(GCodeList.Text(), end='')
  • FrameUartDataflow mit Leben füllen RXD> und TXD>
  • OOO Laden einer GCode-Datei unabhängig von Conversion in dynamische Datenstrukturen (GCodelist)

Done

221130

  • X HLP.Error globalisieren - Callback!
  • X HLP.Protocol globalisieren - Callback!
  • X Protocol-Ausgaben vereinheitlichen
  • X OnError → modaler Dialog,
  • X Abbruch des Execute-Zyklus

221130

221130

  • X 'ok' nicht immer allein als Zeilen-Antwort → if ('ok' in RxLine): State…
  • X G3-GCodes verursachen sehr lange Hardware-Verzögerungen - Fehler???? (erst einmal kommentieren)
  • ??? GCodeExecutor: while not(IsBusy) → while not(IsIdle) - aber warum?????
  • !!! auf jeden Fall KEINE Hänger mehr ???!!!
  • WICHTIG: bisher müssen die Feedrates im gcode-Text mit den Vorgaben vom Programm übereinstimmen!!!

221129

  • X Aktualisierung von GUIControls PA / PT bei Abarbeitung GCode (Fehler PA)
  • X ProtocolGlobal ← all comments / debugs
  • X Übergabe der (geladenen und konvertierten) GCodeList als DDS nach GCodeExecutor:
  • X Aufarbeiten / Verstehen des Setup-Window
  • |||||| bestehendes Problem: extreme Wartezeiten bei (manchen) G1-GCodes - warum????

221129

  • X Start GCodeExecutor: Löschen aller Grafiken (GCodeExecutor:GCodeSimulator.Clear())
  • X bei aktiven Plots werden Menu-Funktionen nicht ausgeführt
  • X aktive Plots werdenn bei ProgrammEnde nicht beendet
  • X FiFo mit Task und CGCode-Einträgen
  • X GCode-List wird als Fifo abgearbeitet und dabei vernichtet
  • XXX dort Fifo-Abarbeitung mit Task, Löschung jedes ausgeführten GCodes
  • X FiFo mit Task und CGCode-Einträgen
    • X Start: konsequentes Abarbeiten(Löschen) der einzelnen GCodes
    • X Abort: Abbruch der GCode-Abarbeitung, Löschen aller Resteinträge
  • X Start: konsequentes Abarbeiten(Löschen) der einzelnen GCodes, Löschen der Plots
  • X Abort: Abbruch der GCode-Abarbeitung, Löschen aller Resteinträge (GCodeExecutor/Simulator/…)
  • X Ende des Programms: Abort in GCodeExecutor
  • || Laden eines GCode-File mit FileOpenDialog
  • || Dynamische GCode-List bleibt NICHT im Speicher
  • XX Einbezug von Plot2D / Plot3D / GCodeProtocol in die Abarbeitungskette

221128

  • X GCodeHadware mit in GCodeExecutor einbeziehen,
  • X Vorlage (alte Version): 2210191701_GCodeInterpreter_01V44_g0123ijr
  • X korrekte AR.gcode-Datei mit allen M-Commands (vgl. Original) verarbeiten!
  • || Hardware-Fehlerbehandlung bei “Error:xx” → GUI

221128

221127

  • X ProtocolGlobal als erstes Tabsheet
  • X doppelter Aufruf: ReadInitdata
  • X Application-Protocol in ProtocolGlobal (GCodeSimulator)
  • X ExecutionGCodeList → ProtocolGlobal

221127

221126

  • X Wiederaufnahme der aktuellen GCodeInterpreter-Version
  • X (Asynchrone) Korrekturen an Plot2D, Plot3D
  • X Plot2D, Plot3D mit mehreren Kurven angepasst
  • neue Darstellung Plot2D, Plot3D

221125

  • X Idee: nochmaliger Versuch, Plot2D(hat bisher schon geklappt) und Plot3D(hat bisher nicht geklappt)
  • XXX einzeln als Module vom TimeSlotRefresh auf AsynchroneReplot umzustellen
  • → X Plot2D: RealTimePlot2D
  • → X Plot3D: RealTimePlot3D

221124

  • Fehler durch TimeSlot-Refresh bei Plot2D und Plot3D nicht behebbar

221123

  • Versionen jünger als 2211141929_GCodeInterpreter_02V002 sind fehlerhaft:
  • Problem bei Stoppen des Timers aus einem anderen Thread (???)
  • Idee: ab 2211141929_GCodeInterpreter_02V002 alle höheren Änderungen wieder stückweise einbauen…

221122

  • X btnLoadGCodeFile immer 'normal'
  • X btnStartExecution
    • X 'disable' : keine GCodeList-Elemente nach dem Laden (mit Callback über LoadGCodeFile)
    • X 'normal' : mindestens ein GCodeList-Elemente nach dem Laden (mit Callback über LoadGCodeFile)
  • X GCodeReport: Ausgabe GCodeList (nach Konvertierung aus GCodeFile)
  • X GCodeReport: WriteToFile und ClearAll (über Callback)
  • X Callback OnStart/AbortExecution
  • X Übergabe der (geladenen und konvertierten) GCodeList als DDS nach GCodeExecutor

221121

  • X Menu-Striche beseitigen mit 'filemenu = Menu(menubar, tearoff=0)'
  • X Eigenes Protocol-Fenster(Tabsheet) als letztes Tabsheet
  • X Menu-Punkte ProtocolWriteToFile und ProtocolClearAll über Callback (FrameApplication.tbsProtocol, Main)
  • X ProtocolUart ← UartDataFlow
  • X ProtocolGlobal ← Protocol

221120

221120

221114

 2211142003_GCodeInterpreter.png

221113

  • Neuauflage GCodeInterpreter basierend auf: 2211121943_RealTimePlot2D3DGCode_01V01.zip
  • aus “altem” GCode-Interpreter Übernahme UartSetup-Frames:
    • WindowMain → FrameApplication
      • X Exit → WMOnDeleteWindow
      • X AboutDialog
      • x Read/WriteInitfile
  • Neuauflage der Gui:
    • Gui mit Frames für:
      • x Status-Controls(left)
      • x ViewControls(right) in Tabsheets: Protocol, Plot2D, Plot3D
      • x Command-Controls(bottom)
  • Gui mit place()-Manager
  • Protocol nicht an Gui-Bottom anfügen, sonder als eigenes Tabsheet vom View-Notebook

 2211131653_GCodeInterpreter_00V05.png


















so könnte prinzipiell die Gui von GCodeInterpreter aussehen:
- links: States
- rechts oben:: Views
- rechts unten: Commands
(aus Zeitgründen wird das aktuelle Fenstermass fixiert, später dann freie Skalierung…)

221025

  • FrameHierarchy - GCodeInterpreter (RealTimePlot2D)
  • GcodeInterpreter: Neu: Einführung einer Protocollist im unteren Teil von GCI
  • marked: join → hangsup
  • OnWindowDelete

221024

  • FrameHierarchy als Basis-Gerüst für GCodeInterpreter
  • FrameHierarchy mit RealTimePlot2D
  • GcodeInterpreter: Menu
  • GcodeInterpreter: Read/WriteInitdata

221022

221021

  • Arzt bis 15:00 Uhr, jetzt Module-Task-Event TaskEvent

221020

  • (Re)Einbau RealTimePlot-Funktionen
  • Timing-Fehler im DualTask-Betrieb lokalisiert und reproduzierbar sicher umgangen:
  • !!! eine Thread-Execute-Methode darf KEINE Leerzeilen enthalten - warum auch immer?! !!!
  • Morgen: Test auf Lösung im Plotverzug von GCodeInterpreter!

221020

  • (Re)Einbau TaskRefresh
[1666277036.9053943] *** RealTimePlot2DRefreshData: begin
...
[1666277036.9063644] ~~~ OnTask[TaskRefresh]-Execute: begin
---
---
[1666277038.9793437] ~~~ OnTask[TaskRefresh]-Execute: end
[1666277038.9953027] --- Task[TaskRefresh]-JOINed...
...
[1666277038.9953027] ~~~ OnTask[TaskRefresh]-Execute: begin
---
---
[1666277041.091677] ~~~ OnTask[TaskRefresh]-Execute: end
[1666277041.091677] --- Task[TaskRefresh]-JOINed...
[1666277041.091677] ### OnTask[TaskExecute]-AbortExecute:=True
[1666277041.091677] --- Task[TaskRefresh]-JOINed...
[1666277041.092278] --- Task[TaskExecute]-JOINed...
[1666277041.0971415] *** RealTimePlot2DRefreshData: end

221020

  • RealTimePlot2DTaskTask:
  • Task OHNE while-loop, while, falls benötigt in: OnTaskMainExecute
  • TaskExecute ruft periodisch TaskRefresh auf…
  • WICHTIG - flushen aller Ausgaben (base Main):
  • Abort mit join versehen, zuvor in OnAbort Main-Task beenden!
  • Einbau von join()
  • thread.daemon = False (default) : sonst kein Warten auf Thread-Ende!

WICHTIG - flushen aller Ausgaben (base Main):

import sys
sys.stdout.flush()
[1666275018.8945642] *** RealTimePlot2DRefreshData: begin
[1666275018.8945642] ### OnTask[TaskExecute]-waiting: begin
...
...
[1666275022.4725285] ### OnTask[TaskExecute]-AbortExecute:=True
[1666275022.4725285] --- Task[TaskExecute]-JOIN: begin
[1666275022.9286542] ### OnTask[TaskExecute]-waiting: end
[1666275022.9286542] --- Task[TaskExecute]-JOIN: end
[1666275022.9366367] *** RealTimePlot2DRefreshData: end

221020

  • leider Problem: Niedrige Darstellungs-Geschwindigkeits bei Plot2D im MultiTasking(GCodeInterpreter):
  • ThreadExecute - ThreadPlot - gca, draw
  • 0. Sicherung: GCodeInterpreter
  • 1. Idee: RealTimePlotTaskTask, vermutlich volle Geschwindigkeit
  • 2. Idee: RealTimePlotTaskTask &rightarrow& GCodeInterpreter - hoffentlich volle Geschwindigkeit
  • 3. Idee: Urversion GCodeInterpreter wieder mit voller Geschwindigkeit herstellen

221019

221018

  • X FindExtremaX/Y/Z für PlotRangeX/Y/Z
  • .. G00, G01 : Erzeugung von (Zwischen-)Punkten, welche in einem Extra-Task bei der CodeExecution sequentiell abgearbeitet werden… (vorher Sicherung GCodeInterpreter_514.zip)
  • X Plot aller (durch einen GCode) erzeugten Zwischenpunkte: keine weitere Abarbeitung von GCodes erlaubt $\Rightarrow$ Schleife in GCodePlot2D !!!
  • X jetzt endlich Moving in Arcs (based on I and J - R still missing!)
  • X G2 und G3 mit I,J (ohne R)
  • man beachte die Kreisbögen in der FreeCad-Vorlage (→ GCode) und Interpretation/Plot des GCodes!

 2210181947_Rectangles.png





































\\


221017

  • Generierung der korrekten Plot2D-Daten aus GCode-Folge:
  • Aktualiserung Field-Variablen (in EndDataTypes):
    • self.ParameterX = 0.0 # [mm]
    • self.ParameterY = 0.0 # [mm]
    • self.ParameterZ = 0.0 # [mm]
    • self.ParameterE = 0.0 # [mm]
    • self.ParameterF = 100.0 # [mm/s]
  • Zeichnen ausschliesslich von Geraden

221017

  • X Zusammenführung:
  • X Ziel: stückweises Zeichnen der GCode-Curve mit gezieltem programmtechnischen Refresh des Plot2D
  • X Ersetzen aller RTPlot2D-Elemente durch neue RealTimePlot2DRefreshData-Elemente
  • X Einführung WindowMain.IsActive(zuvor:WindowMain.IsBusy) zur Verhinderung von Exceptions bei deleted WindowMain
  • O WindowMain.py und MainWindow = CWindowMain(…)
  • .. Verschmelzung OnTaskRefreshData mit altem Plot2DRefresh
  • Ergebnis: GCodeInterpreter mit Verabeitung von GCodeProtocol, GCodeHardware, GCodePlot2D(noch Pseudodaten!):

















221016

  • Versuch fehlgeschlagen: CCommand - CGCommand/CMCommand mit GetLine/GetReport-Methoden
  • Erweiterung von RealTimePlot auf RealTimePlot2D - RealTimePlotDualTask:
    • 1. Task PlotAutomation : View-Refresh der aktuellen Plotdaten
    • 2. Task PlotData : Data-Refresh der akutellen Plotdaten

221015

  • Beginn Einbau : RealTimePlot2D in GCodeInterpreter : basic realisiert mit Übertrag Demo-RealTimePlot2D
  • Zeichnen einer G2/G3-Curve mit CCR(positiv) and CR(negativ) :

221013

  • OOO Tabsheet Execution: Checkboxes für alle Arten der ExecuteMachines
  • zweitens: Darstellung von RealTimePlot3D-Frame in GCodeInterpreter
  • Globale Setup-Tabsheet(s)
    • Erzeugung von FrameSetup
    • Erzeugung von FrameSetupGlobal
      • / Checkboxes: GCodeReport, GCodePlot2D, GCodePlot3D, GCodeHardware
    • / Erzeugung von FrameSetupUart
      • State Uart → CB für Checkbox GCodeHardware!
  • Austausch: SetupUart vor Setup… vor SetupGlobal
  • Main / FrameSetup-FrameSetupGlobal : OnStartExecution
  • Main / FrameSetup-FrameSetupGlobal : OnAbortExecution

221012

  • Wiederaufnahme GCodeInterpreter nach Krankenhaus
  • zuerst: Darstellung von ReportData-Frame in GCodeInterpreter

221005

  • Reorder GCodeInterpreter
  • Entnahme Task aus GCodeHardware
  • GCodeHardware(Uart) mit zeilenweise Abarbeitung einer GCodeLine
  • GCodeReport mit zeilenweise Abarbeitung einer GCodeLine
  • GCodeReport : M/G-Code mit Comment-Ergänzung

221004

221003

  • GCodeFile $\rightarrow$ CGCodeConverter $\rightarrow$ GCodeLines
  • GCodeLines $\rightarrow$ CGCodeConverter $\rightarrow$ GCodeList
  • CGCodeConverter arbeitet GCodes in GCodeList ab
  • CGCodeConverter ruft über CB CGCodeHardware / CGCodeSimulator auf mit Software-HS
  • jetzt Versuch, GCodelist (als Ergebnis von Commandlist) in einem Thread abzuarbeiten
  • dabei werden die einzelnen GCodelines (typisch ein GCode-Command mit Parametern, Kommentar)
  • mit CB sequentiell zu den Interpreter-Modulen gereicht

221002

221001

  • Übernahme der Plot3D und Curve3D files aus '2208232227_Plot3DOrbitalProjection_01V01'
  • An alle Command-Classes wird die zuvor erzeugte GCodelist übergeben:
    • CommandMachine(Uart) / CommandMachine.Start(GCodelist)
    • CommandDisplay(Canvas(???)) / CommandDisplay.Start(GCodelist)
  • Umsortierung Command-Classes:
    • CommandExecutor → CommandConverter : GCommandFile → GCodelist
    • CommandConverter.BuildGCodeFromCommandlist(Commandlist)
    • KEINE Basis-Class mehr, nur noch parallele eigenständige Classes!
  • Wiederherstellung des Uno-Pinout-Led-Breadboards
    • Led-Anzeige der Stepper-Signale
    • ??? noch keine Spindle-Dir/Pwm-Anzeige (M3/M5), warum auch immer

220930

220929

220928

220927

module/programming/gcodeinterpreter/gcodeinterpreter.txt · Last modified: 2022/11/30 17:48 by omdevelop