LINUX.ORG.RU

NoRT CNC Control 0.5

 ,


1

3

После долгого периода разработки, наконец вышел NoRT CNC Control 0.5.

Он являет собой систему управления трехкоординатным фрезерным станком с ЧПУ, позволяющую в качестве управляющего компьютера использовать обычный ноутбук или даже планшет.

Ключевая особенность заключается в разделении кода на 2 большие части: требующую realtime и не требующую. Та часть, которая требует realtime, выполняется на недорогом микроконтроллере. А остальное исполняется на обычном компьютере. И в отличии от других схожих систем, где к компьютеру добавляется некая плата расширения, тут нет жестких realtime требований к каналу связи, достаточно чтобы хватало пропускной способности. В качестве такого канала может выступать ethernet, uart (включая usb-uart переходник).

Это позволяет с одной стороны, обходиться доступным компьютерным железом, с другой объем памяти микроконтроллеров ограничен и поместить все в него было бы тупиком, т.к. это накладывает ограничения на развитие проекта.

Проект состоит из 3 компонент:

В качестве микроконтроллеров поддерживаются stm32f103 с модулем enc28j60 для связи, а также arduino mega2560 со связью через штатный usb

Изменения:

  • Добавлена поддержка ethernet для увеличения пропускной способности по сравнению с uart
  • Код сервера полностью переписан на C#
  • Добавлена поддержка arduino mega2560
  • Устранены многочисленные баги (но возможно появились новые)
  • Добавлен режим эмуляции в прошивку. В этом случае компилируется программа, выполняемая на компьютере, а не на микроконтроллере, что позволяет «пощупать» работу системы без наличия железа
  • Добавлена возможность включать/выключать лазер или иное устройство во время движения
  • UI тоже переписан, на QT

Обработка нештатных ситуаций:

  • детектирование упирания в концевики. При этом происходит немедленная остановка. При движении на большой скорости фактическое положение головки не гарантируется, т.к. инерция

Система используется мною на моем настольном ЧПУ роутере

>>> Подробности

★★★★★

Проверено: Shaman007 ()

Как попробовать в режиме эмуляции

  1. Собираем и запускаем cnccontrol_rt по инструкции из Readme.md, в варианте emulation
  2. Собираем NoRTCNCControl, а именно NoRTServer.exe и запускаем из директории NoRTCNCControl/NoRTServer/:
mono bin/Debug/NoRTServer.exe -r runConfig.TCP.json -m machineConfig.Emulation.json -l debug.log
  1. Комплируем и запускаем NoRTGui-QT
cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 1)

Ключевая особенность заключается в разделении кода на 2 большие части: требующую realtime и не требующую. Та часть, которая требует realtime, выполняется на недорогом микроконтроллере. А остальное исполняется на обычном компьютере. И в отличии от других схожих систем, где к компьютеру добавляется некая плата расширения, тут нет жестких realtime требований к каналу связи, достаточно чтобы хватало пропускной способности. В качестве такого канала может выступать ethernet, uart (включая usb-uart переходник).

Так LinuxCNC умеет делать тоже самое и неожиданно платы расширения это

В качестве микроконтроллеров поддерживаются stm32f103 с модулем enc28j60 для связи, а также arduino mega2560 со связью через штатный usb.

Правда linuxCNC имеет полноценный ладдер. И LinuxCNC умеет работать на Raspberry Pi.

Jack_Vo ★★ ()
Ответ на: комментарий от Jack_Vo

Так LinuxCNC умеет делать тоже самое и неожиданно платы расширения это

LinuxCNC требует либо полноценного LPT порта (не через usb) либо же PCI платы расширения. Т.к. в linuxcnc realtime код выполняется на самом компьютере. Собственно поэтому linuxcnc требует rt-ядро

cvs-255 ★★★★★ ()
Ответ на: комментарий от gnu_linux

Преимущества по сравнению с grbl - вся умная логика вынесена с микроконтроллера на компьютер, что позволяет как лучше оптимизировать движение, так и больше фич.

По сравнению с linuxcnc - не требуется rt ядро на компьютере, работает на чем угодно где есть .net фреймворк. Хоть на линукс ноуте, хоть на вендопланшете. Если немного поковыряться то и на андроиде запустится

mach3 имеет те же проблемы что и linuxcnc. Не так давно один человек как раз мне жаловался, что он из mach3 через usb lpt управляет станком и все глючит.

А умение работать через usb/ethernet/wifi - это важно для хоббийного применения. Потому что современные ноуты часто ничего другого и не имеют.

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 4)
Ответ на: комментарий от zezic

Ну сейчас минимальный интервал между шагами установлен 30 мкс (но это можно менять в коде), что дает 33 кГц step импульсов. Но фактически я на такой частоте проверить не могу, т.к. у меня шаговики от 12 вольт запитаны, а надо от 36 и при частоте импульсов выше 7 кГц шаговики просто не тянут, несмотря на плавный разгон с заданным ускорением

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 3)

Теперь и на роутерах. А потому что можно и проводная сеть имеется. Осталось только объяснить как GUI заведется без видеокарты. Ну или придется через переходник на USB цеплять видеокарту.

anonymous ()

Для хоббийного проекта вместо невнятного stm32 который еще шить надо взять любой одноплатник у которго есть u-boot (у всех) и написать для него расширение - там все нужные драйверы есть и чистый bare metal. Вместо непонятного «сервера» который тут нужен как корове противогаз написать загружалку G-кода и колотить ножками. В 100 раз проще и функциональней.

anonymous ()
Ответ на: комментарий от anonymous

О, уже stm32 невнятным обозвали.

Ты предлагаешь весь код превращения g-code в перемещения запихнуть в bare-metal приложение? Удачи, чо.

G-code для фрезерных (а в перспективе и токарных) станков это гораздо более сложная вещь, чем для тех же 3д принтеров, у которых он элементарен

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от cvs-255

Ты предлагаешь весь код превращения g-code в перемещения запихнуть в bare-metal приложение?

в чём сложность и какое отличие от не bare metal ? у одноплатников памяти немеряно и процессор как на планшетах с андроедами.

anonymous ()
Ответ на: комментарий от anonymous

Это довольно большой объем кода. К тому же абсолютно не требующий реалтайма. А программировать под ОС проще, чем под голое железо и меньше шансов накосячить

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от cvs-255

А программировать под ОС проще, чем под голое железо и меньше шансов накосячить

вот это не понятно - что конкретно нужно от ОС конвертеру ? ты же можешь сразу сгенерировать все перемещения - памяти немяряно по сравнению с прыщеконтроллерами

anonymous ()
Ответ на: комментарий от anonymous

Во-первых, есть возможность использовать удобные языки, имеющие автоматическое управление памятью, такие как C#.

Во-вторых, многопоточность

В-третьих, вообще не надо париться о драйверах, они уже в ОС

В-четвертых, легче отладка

Поэтому гораздо проще запустить конвертер на чем-то, где установлена ОС, и чтобы он по мере работы программы слал команды на микроконтроллер, чем пихать все в сложное приложение, работающее в bare metal на мощном микропроцессоре

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от cvs-255

А умение работать через usb/ethernet/wifi - это важно для хоббийного применения. Потому что современные ноуты часто ничего другого и не имеют.

Почему используя STM32f103 для G-кодов, коммуникацию делают любую, кроме встроенного USB?

Tester500 ()
Ответ на: комментарий от cvs-255

Как тебе удобней, можно и сервер оставить, но прыщеконтроллер зачем когда у каждого в доме есть одноплатники ? Смастерил свою надстройку над fastboot например и скидывай убуту перемещения через USB, причём там сразу двусторонний обмен. Интерфейс gpio стандартный через прослойку драйверов - практически на любом одноплатнике можно завести.

anonymous ()

Можно и usb добавить. Просто мне хотелось иметь возможность коммуницировать с девайсом через локалку. Поэтому я и прикрутил к stm32f103 ethernet адаптер. Но вполне можно и связь через usb добавить.

cvs-255 ★★★★★ ()
Ответ на: комментарий от cvs-255

Только на практике хватает и микроконтроллера

смысл моего предложения - использовать любой одноплатник где есть убут, интерфейс к gpio там как в ос одинаковый. При желании можно было и сервер с гуи ликвидировать - писать плагины для CAD-ов.

anonymous ()
Ответ на: комментарий от cvs-255

Да в принципе можно и вместо stm32 поставить одноплатник, который будет делать то же самое. Только на практике хватает и микроконтроллера

даже не знаю что так все по поводу одноплатников возбудились. По моему - это крутая идея вынести функции, с которыми у обычных пользовательских ос, на относительно дешёвый, но хорошо делающий свою работу контроллер.

anonymous ()
Ответ на: комментарий от anonymous

То, что realtime часть вполне можно на одноплатнике запустить - с этим я не спорю, это не составит проблемы. Основной код у меня в виде аппаратно-независимой библиотеки, для запуска на одноплатнике надо лишь написать немного аппаратно зависимого кода.

Что до плагина к cad - ну так во-первых это и будет тот же самый сервер, но в виде плагина. Во-вторых всякие простые вещи без всякого cad делаются. Сразу g-code в текстовом редакторе пишешь и все. А в третьих - различных cad много и под каждый плагинов не напишешься

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от cvs-255

Что до плагина к cad - ну так во-первых это и будет тот же самый сервер, но в виде плагина.

не совсем - с одноплатником можно сразу сгенерировать все перемещения и в sdram ему закинуть, рам там гигами уже давно меряют

Во-вторых всякие простые вещи без всякого cad делаются

можно тогда на станке с ручными крутилками без всяких компьютеров

anonymous ()
Ответ на: комментарий от anonymous

с одноплатником можно сразу сгенерировать все перемещения

Так кто генерировать то будет? Это конвертер и делает. Причем делает это не всегда простым способом. Надо много чего учитывать в процессе

можно тогда на станке с ручными крутилками без всяких компьютеров

Сверление пары сотен отверстий + вырезание нескольких десятков одинаковых деталек? замучаешься ручными крутилками крутить В то время как gcode для этого может быть вполне компактным за счет наличия циклов и подпрограмм

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 4)
Ответ на: комментарий от cvs-255

Так кто генерировать то будет? Это конвертер и делает. Причем делает это не всегда простым способом

ну так делай на компе код уже написан

А не замучаешься ручными крутилками крутить?

да мне непонятно для кого этот прожект, для хобби их и так хватает. Надо думать как свои наработки продать. ПО открытое и раздавать свободно но делать красиво и конечно с рисовалкой графической. Деньги зарабатывать на контроллере который управляет приводами - прошивку его свободно раздавать с исходниками, продавать саму плату. stm32 дорого не продашь да и что с ним делать если станок надоест, на нормальных процессорах можно хоть кино смотреть :)

anonymous ()
Ответ на: комментарий от anonymous

ну так делай на компе код уже написан

Ну так преобразование gcode в непосредственно движения - это и есть одна из задач сервера. Он сперва преобразует gcode в движения, а затем по мере исполнения отсылает их на микроконтроллер

gcode != готовый список движений.

cvs-255 ★★★★★ ()

Отличная идея!

Система используется мною на моем настольном ЧПУ роутере

А с какими-то ещё ЧПУ оно тестировалось?

Любопытно, насколько сложно прикрутить её к имеющемуся станку или собрать новый с использованием MK.

zabbal ★★★ ()
Ответ на: комментарий от cvs-255

Он сперва преобразует gcode в движения, а затем по мере исполнения отсылает их на микроконтроллер

да это понятно, это же только потому что у микроконтроллера память ограничена.

anonymous ()
Ответ на: комментарий от anonymous

Ну если позарез хочется отсылать все сразу, то без проблем, можно ставить одноплатник с прошивкой под голое железо или RTOS, выставить длину очереди движений в несколько миллионов и тогда зальется все сразу. Но каких-то явных преимуществ я по крайней мере не вижу

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от cvs-255

Ну если позарез хочется отсылать все сразу, то без проблем, можно ставить одноплатник с прошивкой под голое железо или RTOS, выставить длину очереди движений в несколько миллионов и тогда зальется все сразу.

воот, сделать красивый плагин для CAD, контроллер в красивой коробочке и с красивым логотипом и надписи на иностранном языке. А дальше кикстартер, кучи бабла, звонки от поклонниц :)

anonymous ()
Ответ на: комментарий от anonymous

Я далеко не спец в этой теме, собрал лазерный гравер на ардуине с grbl, и то вижу что ты чушь несёшь.

По теме: не увидел преимуществ перед grbl, а она работает даже на arduino nano, какая там умная логика которую вы вынесли на комп? Какие фитчи в связи с этим появились?

lucky_guy ★★★ ()
Ответ на: комментарий от cvs-255

Хочется потестить конечно. Но вот моё ретроградство не позволяет. У меня сейчас два фрезера по LPT трудятся. Токарный уже на 40% родился) Тоже c LPT будет. Но в закладки твою софтинку добавил.

gnu_linux ()
Ответ на: комментарий от cvs-255

По сравнению с linuxcnc - не требуется rt ядро на компьютере

Согласен, раньше хотя-бы preempt-rt-ядра в дистрах были, - можно было xenomai ним использовать, а сейчас preempt-rt выкинули (там ядра старые), жаль.

mach3 имеет те же проблемы что и linuxcnc

У mach3 же не надо RT вроде бы из-за чего и возникают приколюхи с USB, или уже надо?

shkolnick-kun ★★★★ ()
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от shkolnick-kun

А зачем тебе свежие ядра? Так-то, если их нет в дистрибутиве, то можно и руками нужное собрать. Так-то rt совсем не заброшено, вот, посмотри: https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/
https://wiki.linuxfoundation.org/realtime/start
rt.wiki.kernel.org

sehellion ★★★★★ ()
Ответ на: комментарий от gnu_linux

Сентябрьский релиз LinuxCNC порадовал. Разрабы на правильном пути.

Запили новость, а? Всегда интереснее пост от человека «в теме» чем очередная копипаста с опеннета.

zabbal ★★★ ()
Ответ на: комментарий от sehellion

А зачем тебе свежие ядра? Так-то, если их нет в дистрибутиве, то можно и руками нужное собрать.

Мне не нравится история, когда нужно ручками ядро обновлять, лучше, когда его обновляют мейнтейнеры дистрибутива.

Так-то rt совсем не заброшено, вот, посмотри

Я и не говорил, что оно заброшено, я говорил, что ядра выкинули из дистрибутивов и предположил, основываясь на информации с wiki LinuxCNC, что дело в старых версиях поддерживаемых ядер.

shkolnick-kun ★★★★ ()
Последнее исправление: shkolnick-kun (всего исправлений: 1)