Добавление пользовательских кодов M или G в Marlin 2.0
Добавление пользовательских кодов M в Marlin не работает для Marlin 2.0
Как можно было бы добавить пользовательские G-коды или M-коды в Marlin 2.0? Тот самый Marlin_main.cpp файл не существует.
В целом для Marlin 2.0 все организовано лучше, но разбито на большее количество файлов.
@K Mmmm, 👍2
2 ответа
Лучший ответ:
- Выберите код в поле >10 000 на случай добавления новых кодов. Но в этом примере я выберу 13
- Перейдите в папку "src" Marlin
- Отредактируйте файл
gcode.cpp
вокруг линии 223, чтобы иметь новый неиспользуемый номер. Например, это создаст новую функцию G-кода для меткиG13
.
...
// Handle a known G, M, or T
switch (parser.command_letter) {
case 'G': switch (parser.codenum) {
case 13: G13(); break;
case 0: case 1: G0_G1(
...
В строке 375
gcode.h
добавьте:static void G13();
чтобы объявить его.В моем случае я считывал значения из аналоговой системы. Поэтому я пошел в
src/temperatures
и скопировалM105.cpp
бытьG13.cpp
. Затем внутри файла я заменилGcodeSuite::M105
наGcodeSuite::G13
. Я использую это, чтобы измерить вес чего-то с помощью [шкалы][1], но сейчас я просто хочу проверить функциональность, поэтому вот моя тестовая функция:
void GcodeSuite::G13() {
SERIAL_ECHOPGM(MSG_OK);
SERIAL_ECHOLNPGM("here is where weights are broadcast");
}
И опять же это единственная часть которую я изменил в своем новом экземпляре M105.cpp (новый файл с именем G13.cpp). В файле все еще больше материала, чем просто эти несколько строк.
Загрузить на борт
Когда я иду в octoprint и печатаю в
G13
, я получаю:
Send: G13
Recv: okhere is where weights are broadcast
Немного больше работы можно сделать, чтобы он выглядел красиво, но это была самая трудная часть. [1]: https://www.instructables.com/id/Arduino-Bathroom-Scale-With-50-Kg-Load-Cells-and-H/
Код в 2.0.x похож на старую ветвь 1.1.x, G-код разбирается в gcode.cpp
, в частности, в process_parsed_command
:
void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/)
В операторе case коды, считанные из файлов G-кода, анализируются (интерпретируются) и вызывается соответствующий метод (например, G28()
вызывает void GcodeSuite::G28 ()
).
Если вы хотите создать свои собственные коды, было бы неплохо начать с этого. Также подумайте об использовании другой буквы и/или кодов в диапазоне 10 000, чтобы она не сталкивалась с новыми реализованными G-кодами.
- Повторная калибровка исходного положения
- Как установить границы Z-зонда в прошивке при использовании автоматического выравнивания стола?
- Как увеличить количество точек зондирования для датчика BLTouch в прошивке Marlin?
- Marlin Регулировка скорости подачи
- Как установить смещение Z для дома
- Указание смещения Z в прошивке Marlin
- BLTouch Зондирование Периодически Терпит Неудачу
- Как добавить параметры меню в жидкокристаллическое меню (прошивка Marlin)?