module:programming:gcodeinterpreter:gcodeinterpreter
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
- 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
- Download : 2211301745_GCodeInterpreter_02V12.zip
221130
- X Feedrates aus gcode-Source übernehmen!!!
- Download : 2211301323_GCodeInterpreter_02V11.zip
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!!!
- Download : 2211301154_GCodeInterpreter_02V10.zip
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????
- Download : 2211291820_GCodeInterpreter_02V0B.zip
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.txt · Last modified: 2022/11/30 17:48 by omdevelop