Der M3117 Befehl
-
- 3D-Drucker
- Beiträge: 59
- Registriert: Mo 23. Nov 2015, 13:35
- Has thanked: 2 times
- Been thanked: 2 times
Der M3117 Befehl
Hallo zusammen,
Ich habe mal versucht, über den M3117 Meldungen auszugeben. Im Gegensatz zu M117, der zumindest gefühlt alles ausgibt, was in die 16 Zeichen passt, ist der M3117 zickiger.
Wenn die Ausgabe z. B. mit einem "F" oder "f" beginnt, gibt er nichts aus. Wenn Unterstriche (vllt. sogar Sonderzeichen allgemein) enthalten sind, gibt er ebenfalls nichts aus. Kennt jemand die Regel, die hier hinterlegt ist?
OT: Vielleicht noch eine Anregung fürs Wiki: Die Zeichenlänge für M3117 und M117 ist 16 Zeichen und nicht wie im Wiki beschrieben 17 Zeichen. Alles über 16 Zeichen wird hinten abgeschnitten. Beim G02/G03 könnte man ggf. noch anfügen, dass der Kreismittelpunkt (I, J) immer relativ zur Startposition angegeben werden muss. Unabhängig von G90, G91.
Viele Grüße
Tom
Ich habe mal versucht, über den M3117 Meldungen auszugeben. Im Gegensatz zu M117, der zumindest gefühlt alles ausgibt, was in die 16 Zeichen passt, ist der M3117 zickiger.
Wenn die Ausgabe z. B. mit einem "F" oder "f" beginnt, gibt er nichts aus. Wenn Unterstriche (vllt. sogar Sonderzeichen allgemein) enthalten sind, gibt er ebenfalls nichts aus. Kennt jemand die Regel, die hier hinterlegt ist?
OT: Vielleicht noch eine Anregung fürs Wiki: Die Zeichenlänge für M3117 und M117 ist 16 Zeichen und nicht wie im Wiki beschrieben 17 Zeichen. Alles über 16 Zeichen wird hinten abgeschnitten. Beim G02/G03 könnte man ggf. noch anfügen, dass der Kreismittelpunkt (I, J) immer relativ zur Startposition angegeben werden muss. Unabhängig von G90, G91.
Viele Grüße
Tom
- Nibbels
- Developer
- Beiträge: 2264
- Registriert: Mi 17. Aug 2016, 17:01
- Has thanked: 831 times
- Been thanked: 599 times
Re: Der M3117 Befehl
Hallo Tom,
Das mit den Zeichen habe ich letzte oder vorletzte Woche entdeckt und an RF1000 gemeldet. In meiner Firmware ist das Problem bereits überarbeitet. Der RF2000 kann bei mir nun bei M117 20 Zeichen nutzen.
Zu deinem F-Problem: Immer wenn ein "Block" im Befehl mit z.B.
G
M
T
oder auch
S
P
F
X
Y
Z
...
beginnt, dann kann es sein, dass dieses Wort als "Zahleneingabe" erfasst werden will.
LG
Das mit den Zeichen habe ich letzte oder vorletzte Woche entdeckt und an RF1000 gemeldet. In meiner Firmware ist das Problem bereits überarbeitet. Der RF2000 kann bei mir nun bei M117 20 Zeichen nutzen.
Zu deinem F-Problem: Immer wenn ein "Block" im Befehl mit z.B.
G
M
T
oder auch
S
P
F
X
Y
Z
...
beginnt, dann kann es sein, dass dieses Wort als "Zahleneingabe" erfasst werden will.
LG
RF2000
Firmware Mod 1.45.00.Mod - geht SD wieder 100%?
Bitte 1.42.17 bis 1.42.21 meiden!
SD-Druck mit der Community-FW <= 1.43.99 aktuell meiden.
Firmware Mod 1.45.00.Mod - geht SD wieder 100%?
Bitte 1.42.17 bis 1.42.21 meiden!
SD-Druck mit der Community-FW <= 1.43.99 aktuell meiden.
-
- 3D-Drucker
- Beiträge: 59
- Registriert: Mo 23. Nov 2015, 13:35
- Has thanked: 2 times
- Been thanked: 2 times
Re: Der M3117 Befehl
Vielen Dank Nibbels!
Kannst Du mir noch sagen, wo in der Firmware ich da was ändern kann? Ich habe da bisher nichts gefunden..... Soweit ich verstanden habe, gibt es ja seit dem M3117 den Befehl M3110 nicht mehr, mit dem man die M117 Meldung "einfrieren" konnte. Insofern bin ich auf den M3117 angewiesen. Beim Pausieren überschreibt er die M117 Ausgaben immmer mit "Miller ready"
Ich habe mir eine "ULP" zum Bohren von Platinen für Eagle geschrieben bzw. bin noch dabei. Dort soll er halt nach jedem Bohrdurchgang in eine "Werkzeugwechselposition" fahren und mir ausgeben, welchen Bohrer oder Fräser ich einspannen muss. Mit M117 überschreibt er das sofort.
VG Tom
Kannst Du mir noch sagen, wo in der Firmware ich da was ändern kann? Ich habe da bisher nichts gefunden..... Soweit ich verstanden habe, gibt es ja seit dem M3117 den Befehl M3110 nicht mehr, mit dem man die M117 Meldung "einfrieren" konnte. Insofern bin ich auf den M3117 angewiesen. Beim Pausieren überschreibt er die M117 Ausgaben immmer mit "Miller ready"
Ich habe mir eine "ULP" zum Bohren von Platinen für Eagle geschrieben bzw. bin noch dabei. Dort soll er halt nach jedem Bohrdurchgang in eine "Werkzeugwechselposition" fahren und mir ausgeben, welchen Bohrer oder Fräser ich einspannen muss. Mit M117 überschreibt er das sofort.
VG Tom
- Nibbels
- Developer
- Beiträge: 2264
- Registriert: Mi 17. Aug 2016, 17:01
- Has thanked: 831 times
- Been thanked: 599 times
Re: Der M3117 Befehl
Ich habe das so gepatched:
https://github.com/RF1000community/Repe ... 8b9c0f8fb4
(Die Änderung in der ui.cpp sollte reichen)
So wie ich das im Quellcode verstehe
Es gibt zwei Funktionen:
void UIDisplay::setStatusP(PGM_P txt,bool error)
void UIDisplay::setStatus(char *txt,bool error,bool force)
Und setStatus war bisher auf 16 begrenzt. Das wurde dort wohl einfach vergessen. Sowohl 117 als auch 3117 setzen den Text mit derselben Funktion.
https://github.com/RF1000community/Repe ... 8b9c0f8fb4
(Die Änderung in der ui.cpp sollte reichen)
So wie ich das im Quellcode verstehe
Setzt M3117 TEXT den Text und M3117 ohne Text entsperrt die Anzeige wieder.RF.cpp hat geschrieben:Code: Alles auswählen
case 3117: // M3117 - set a status text which is not overwritten by M117 { if( pCommand->hasString() ) { if( !uid.locked ) { // ensure that the current text won't be overwritten uid.lock(); if( Printer::debugInfo() ) { Com::printFLN( PSTR( "M3117: lock" ) ); } } uid.setStatus( pCommand->text, false, true ); uid.refreshPage(); } else { if( uid.locked ) { // allow to overwrite the current string again uid.unlock(); if( Printer::debugInfo() ) { Com::printFLN( PSTR( "M3117: unlock" ) ); } g_uStartOfIdle = HAL::timeInMilliseconds(); } } break; }
Es gibt zwei Funktionen:
void UIDisplay::setStatusP(PGM_P txt,bool error)
void UIDisplay::setStatus(char *txt,bool error,bool force)
Und setStatus war bisher auf 16 begrenzt. Das wurde dort wohl einfach vergessen. Sowohl 117 als auch 3117 setzen den Text mit derselben Funktion.
RF2000
Firmware Mod 1.45.00.Mod - geht SD wieder 100%?
Bitte 1.42.17 bis 1.42.21 meiden!
SD-Druck mit der Community-FW <= 1.43.99 aktuell meiden.
Firmware Mod 1.45.00.Mod - geht SD wieder 100%?
Bitte 1.42.17 bis 1.42.21 meiden!
SD-Druck mit der Community-FW <= 1.43.99 aktuell meiden.
-
- 3D-Drucker
- Beiträge: 59
- Registriert: Mo 23. Nov 2015, 13:35
- Has thanked: 2 times
- Been thanked: 2 times
Re: Der M3117 Befehl
Hallo Nibbels,
danke für die ausführliche Erklärung. Wenn ich das richtig verstehe, hast Du aber lediglich die Zeichenlänge verändert. An den Zeichen, die 3117 akzeptiert hast Du nichts geändert, oder?
Dann werde ich es wohl so lassen wie es ist. Bin mit Arduino auch nicht so vertaut. Habe zwar in C schon manches programmiert - quick and dirty für den Eigengebrauch - aber durch die Firmware steige ich nicht so richtig durch....
Würde z. B. auch gerne einen freien Pin für eine Zusatzfunktion benutzen und einen eigenen M-Befehl für eine "Helix"-Funktion integrieren. Aber die Latte liegt wohl zu hoch für mich
VG
Tom
danke für die ausführliche Erklärung. Wenn ich das richtig verstehe, hast Du aber lediglich die Zeichenlänge verändert. An den Zeichen, die 3117 akzeptiert hast Du nichts geändert, oder?
Dann werde ich es wohl so lassen wie es ist. Bin mit Arduino auch nicht so vertaut. Habe zwar in C schon manches programmiert - quick and dirty für den Eigengebrauch - aber durch die Firmware steige ich nicht so richtig durch....
Würde z. B. auch gerne einen freien Pin für eine Zusatzfunktion benutzen und einen eigenen M-Befehl für eine "Helix"-Funktion integrieren. Aber die Latte liegt wohl zu hoch für mich
VG
Tom
- Nibbels
- Developer
- Beiträge: 2264
- Registriert: Mi 17. Aug 2016, 17:01
- Has thanked: 831 times
- Been thanked: 599 times
Re: Der M3117 Befehl
Code: Alles auswählen
M3117 01234567890123456789
https://github.com/RF1000community/Repe ... 8b9c0f8fb4
Du müsstest nur in Repetier/ui.cpp die 16 zu der 20 ändern, dann hättest du schon diesen Effekt. Ich habe noch etwas weiter aufgeräumt, dass allgemein Ordnung entstand - wäre aber nicht notwendig gewesen.
UI_COLS ist beim RF1000 ein Platzhalter für die Zahl 16 und beim RF2000 die Zahl 20.
Darum habe ich nicht 16 und 20 reingeschrieben sondern UI_COLS.
LG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
RF2000
Firmware Mod 1.45.00.Mod - geht SD wieder 100%?
Bitte 1.42.17 bis 1.42.21 meiden!
SD-Druck mit der Community-FW <= 1.43.99 aktuell meiden.
Firmware Mod 1.45.00.Mod - geht SD wieder 100%?
Bitte 1.42.17 bis 1.42.21 meiden!
SD-Druck mit der Community-FW <= 1.43.99 aktuell meiden.
-
- 3D-Drucker
- Beiträge: 59
- Registriert: Mo 23. Nov 2015, 13:35
- Has thanked: 2 times
- Been thanked: 2 times
Re: Der M3117 Befehl
Ja das habe ich verstanden. Vielleicht nochmal als Erläuterung. Mir geht es eigentlich in erster Linie nicht um die Zeichenanzahl. Ich habe ja den RF1000. Ich würde die Funktion gerne dahin ändern, dass der 3117 alle Zeichen auch ausgibt. Bei einigen, die Du ja auch schon aufgezählt hast, gibt er dann einfach nichts aus, wie z. B. alles was mit "f" beginnt.
LG
LG
- Nibbels
- Developer
- Beiträge: 2264
- Registriert: Mi 17. Aug 2016, 17:01
- Has thanked: 831 times
- Been thanked: 599 times
Re: Der M3117 Befehl
Danke!
Das habe ich nicht mehr im Blick gehabt!
Ja. Kurz in den Code geschaut: Es existieren zwei Funktionen, die Gcode-Daten auswerten:
- parseBinary
- parseASCII
Die zweite Funktion hat die Unterscheidung drin, ob nach dem M-Code nur Text erwartet wird, die erste nicht. Und offensichtlich wird das über die erste eingelesen. Die erste Funktion ist die "neuere" weil man damit Daten spart, um die serielle Leitung zu entlasten.
[Ein Fix, der uns gefallen würde, ist in der originalen Repetier auch nicht drin.]
Ich habe noch nicht ganz verstanden, warum alle vor uns diesen Umstand komplett irgnoriert hatten.
-> Ich teste mal ob das einfach gefixt werden kann und keine Komplikationen bringt. Mein Drucker läuft nur leider aktuell.
LG
Das habe ich nicht mehr im Blick gehabt!
Ja. Kurz in den Code geschaut: Es existieren zwei Funktionen, die Gcode-Daten auswerten:
- parseBinary
- parseASCII
Die zweite Funktion hat die Unterscheidung drin, ob nach dem M-Code nur Text erwartet wird, die erste nicht. Und offensichtlich wird das über die erste eingelesen. Die erste Funktion ist die "neuere" weil man damit Daten spart, um die serielle Leitung zu entlasten.
[Ein Fix, der uns gefallen würde, ist in der originalen Repetier auch nicht drin.]
Ich habe noch nicht ganz verstanden, warum alle vor uns diesen Umstand komplett irgnoriert hatten.
-> Ich teste mal ob das einfach gefixt werden kann und keine Komplikationen bringt. Mein Drucker läuft nur leider aktuell.
LG
RF2000
Firmware Mod 1.45.00.Mod - geht SD wieder 100%?
Bitte 1.42.17 bis 1.42.21 meiden!
SD-Druck mit der Community-FW <= 1.43.99 aktuell meiden.
Firmware Mod 1.45.00.Mod - geht SD wieder 100%?
Bitte 1.42.17 bis 1.42.21 meiden!
SD-Druck mit der Community-FW <= 1.43.99 aktuell meiden.
- Nibbels
- Developer
- Beiträge: 2264
- Registriert: Mi 17. Aug 2016, 17:01
- Has thanked: 831 times
- Been thanked: 599 times
Re: Der M3117 Befehl
Diese Änderung bringt das gewünschte Ergebnis:
https://github.com/Nibbels/Repetier-Fir ... 70775dR794
(nur die unteren Änderungen in der gcode.cpp sind für M3117 wichtig.)
Das sieht im Github-commit etwas chaotisch aus, aber wenn man beide Dateien nebeneinander legt und etwas abgleicht, wird schnell klar, was ich gemacht habe:
- Ich prüfe erst ob M117 oder M3117 (etc.) vorliegt
- und behandle in diesen Fällen alles weitere als purer Text.
- ansonsten: so wie bisher.
Das Vorgehen ist ganz grob aus parseASCII kopiert. Bei mir hat das anstandslos funktioniert. Ich werde das weiter testen. Sollte das jemand testen und einen Bug oder negative Effekte feststellen, meldet das mir bitte
LG
EDIT: Das ist jetzt auch hier geupdated (aktuell nur in der development):
https://github.com/RF1000community/Repe ... 96c4a6aa94
https://github.com/Nibbels/Repetier-Fir ... 70775dR794
(nur die unteren Änderungen in der gcode.cpp sind für M3117 wichtig.)
Das sieht im Github-commit etwas chaotisch aus, aber wenn man beide Dateien nebeneinander legt und etwas abgleicht, wird schnell klar, was ich gemacht habe:
- Ich prüfe erst ob M117 oder M3117 (etc.) vorliegt
Code: Alles auswählen
if(hasM() && (M == 23 || M == 28 || M == 29 || M == 30 || M == 32 || M == 117 || M == 3117))
- ansonsten: so wie bisher.
Code: Alles auswählen
else
{
Das Vorgehen ist ganz grob aus parseASCII kopiert. Bei mir hat das anstandslos funktioniert. Ich werde das weiter testen. Sollte das jemand testen und einen Bug oder negative Effekte feststellen, meldet das mir bitte
LG
EDIT: Das ist jetzt auch hier geupdated (aktuell nur in der development):
https://github.com/RF1000community/Repe ... 96c4a6aa94
RF2000
Firmware Mod 1.45.00.Mod - geht SD wieder 100%?
Bitte 1.42.17 bis 1.42.21 meiden!
SD-Druck mit der Community-FW <= 1.43.99 aktuell meiden.
Firmware Mod 1.45.00.Mod - geht SD wieder 100%?
Bitte 1.42.17 bis 1.42.21 meiden!
SD-Druck mit der Community-FW <= 1.43.99 aktuell meiden.
-
- 3D-Drucker
- Beiträge: 59
- Registriert: Mo 23. Nov 2015, 13:35
- Has thanked: 2 times
- Been thanked: 2 times
Re: Der M3117 Befehl
Wow Du bist der Hammer..........
....kurz mal in den Code geschaut.....ich habe mich todgesucht und nix gefunden
Ich muss mich wohl jetzt doch mal mit Arduino beschäftigen. Hab bisher alles mit Atmel Studio gemacht.
Ich versuche das die nächsten Tage mal umzusetzen und auch zu verstehen was da genau passiert.
Erstmal vielen vielen Dank für Deine Mühe und Hilfe
LG
....kurz mal in den Code geschaut.....ich habe mich todgesucht und nix gefunden
Ich muss mich wohl jetzt doch mal mit Arduino beschäftigen. Hab bisher alles mit Atmel Studio gemacht.
Ich versuche das die nächsten Tage mal umzusetzen und auch zu verstehen was da genau passiert.
Erstmal vielen vielen Dank für Deine Mühe und Hilfe
LG