module:programming:gcodeinterpreter:gcodeinterpreter
                This is an old revision of the document!
Table of Contents
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
- 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>
 
- || O Übergabe der (geladenen und konvertierten) GCodeList als DDS nach GCodeExecutor:
 - O Protocol in ProtocolGCode
 - || Aufarbeiten / Verstehen des Setup-Window
 - OOO Laden einer GCode-Datei unabhängig von Conversion in dynamische Datenstrukturen (GCodelist)
 - OOO G3-GCodes verursachen sehr lange Hardware-Verzögerungen - Fehler???? (erst einmal kommentieren)
 
Done
221129
- X Aktualisierung von GUIControls PA / PT bei Abarbeitung GCode (Fehler PA)
 - X ProtocolGlobal ← all comments / debugs
 
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
 - Download : 2211291304_GCodeInterpreter_02V0A.zip
 
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
- X LoadExecuteGCodeFile und AbortExecutionGCodeList
 - Download : 2211281540_GCodeInterpreter_02V08.zip
 
221127
- X ProtocolGlobal als erstes Tabsheet
 - X doppelter Aufruf: ReadInitdata
 - X Application-Protocol in ProtocolGlobal (GCodeSimulator)
 - X ExecutionGCodeList → ProtocolGlobal
 
221127
- X || Verbesserungen, Fehler beim Start ohne Console
 - Download : 2211271203_GCodeInterpreter_02V02.zip
 
221126
- X Wiederaufnahme der aktuellen GCodeInterpreter-Version
 - X (Asynchrone) Korrekturen an Plot2D, Plot3D
 - X Plot2D, Plot3D mit mehreren Kurven angepasst
 - neue Darstellung Plot2D, Plot3D
 - Download : 2211262044_GCodeInterpreter_02V01.zip
 
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
 - Download : 2211221859_GCodeInterpreter_02V006.zip
 
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
 - Download : 2211211900_GCodeInterpreter_02V006.zip
 
221120
- X Uart: Einbau der Schnittstellenkommunikation
 - X Uart-Protocol im UartDataflow-Frame
 - Download : 2211201945_GCodeInterpreter_02V005.zip
 
221120
- Vorbereitung der GUI:
- X basierend auf alter Version 2210191701_GCodeInterpreter_01V44_g0123ijr.zip
 - X Reintegration Uart und Uart-Konfiguration (in Tabsheet)
 
 - Download : 2211201719_GCodeInterpreter_02V004.zip
 
221114
- Basierend auf FrameHierarchy Neudefinition von UserControls
 - entwickelt unter FrameControls
 - Download : 2211141929_GCodeInterpreter_02V002.zip
 
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
 - Download : 2211131653_GCodeInterpreter_00V05.zip
 
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
- nach TaskEvent nun (nochmaliger, erneuerter) Einbau von DualThread und Event in GCodeInterpreter
 - Disable aller PLotFunktionen: comment in FrameGCodePlot2D, NC GCodePlot2D
 
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?! !!!
 - Siehe RealTimePlot2D
 - 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
- X G2/G3 : bisher: IJ-Vorgabe → berechne R
 - X G2/G3 : jetzt: R-Vorgabe → berechne IJ
 - Download : 2210191701_GCodeInterpreter_01V44_g0123ijr
 
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!
 
 
\\
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:
- RealTimePlot2DRefreshData : 2210161913_RealTimePlot2DRefreshData_01V02.zip
 - GCodeInterpreter : aktuelle Version (2210161700_GCodeInterpreter_preplotdualtask)
 
 - 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!):
 - Download : 2210171757_GCodeInterpreter_01V41.zip
 
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
- X FrameGCodeReport aktivieren
 - X SendReport : Anfügen einer ReportLine
 - X FrameGCodeReport
 - X FrameGCodeHardware
 
 
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
- (Klinik, erst ab 17 Uhr)
 
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
- Modul : RealTimePlot2D
 - Modul : RealTimePlot3D
 - gedacht als Templates für GCodeInterpreter - Command/GCode-Simulator/Viewer
 
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
 
 - Download : 2210011129_GCodeInterpreter_pregrafic.zip
 
220930
- Versuch Umsortierung Command-Classes
- CommandExecutor : GCommandFile → GCodelist
 - Basis-Class mit Thread-Verwaltung
 
 - Download : 2209301003_GCodeInterpreter_01V21.zip
 - Download : 2209302131_GCodeInterpreter_01V22.zip
 
220929
- Software-HS aller GCommands mit ok/ok über Uart
 - Abfangen aller Fehler! Fehler führen immer zum Ende des Porgramms!
 - Einbau Uart
 - Download : 2209291537_GCodeInterpreter_00V17.zip
 
220928
- Einbau Task
 - Command-Module:
- CommandExecutor
 - CommandCommon
 - CommandMachine
 - CommandPlotter
 - CommandSimulator
 - CommandViewer
 
 - Download : 2209282205_GCodeInterpreter_00V16.zip
 
220927
- Download : 2209270738_GCodeInterpreter_00V11.zip
 - Wiederaufnahme von 221001118_GCodeInterpreter_01V23.zip
 
module/programming/gcodeinterpreter/gcodeinterpreter.1669742184.txt.gz · Last modified: 2022/11/29 18:16 by omdevelop
                
                
 
