LINUX.ORG.RU

Вышел NoRT CNC Control

 


7

2

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

Ключевой особенностью, отличающей его от многих других систем, является разделение исполняемого кода на 2 части - часть, требующая realtime, и часть, не требующая realtime. Причем часть, работающая в realtime, исполняется на отдельном микроконтроллере. Это позволяет, с одной стороны, отказаться от необходимости установки realtime ядра на компьютер, а с другой - позволяет обойти ограничения памяти, которые возникают, если весь код находится в микроконтроллере.

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

Текущие возможности

На вход система принимает G-Code в соответствии с ISO 6983

Поддерживаются:

  • 3-х координатные перемещения, обработку концвых датчиков по всем осям, а также работу с щупом по оси Z для определения длины инструмента или положения заготовки.
  • 7 координатных систем, выбираемых по командам G53-G59.
  • Управление частотным приводом шпинделя, поддерживается Hyundai N700E через modbus.
  • Линейные перемещения и перемещения по окружности
  • Экстренная остановка перемещений и шпинделя

Планы

  • Добавить web-интерфейс (спасибо @dunmaksim за помощь!)
  • Добавить возможность конфигурировать параметры оборудования из интерфейса, а не через редактирование конфига.
  • Пауза перемещений, с дальнейшим продолжением работы
  • Добавить винтовое перемещение
  • Работа с щупом по осям X и Y
  • Добавить возможность поворачивать и масштабировать системы координат, выбираемые по G54-G59
  • Поддержка Jinja2 шаблонов в g-code

Лицензия

GNU GPL v3, или более новая

Репозиторий

Часть, запускаемая на linux: https://github.com/vladtcvs/nortcnccontrol/releases/tag/0.3

Часть, запускаемая на микроконтроллере: https://github.com/vladtcvs/cnccontrol_rt/releases/tag/0.3

★★★★★

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

А как с маштабируемостью?
Что если потребуется больше осей или GPIO чем может обеспечить один контролёр?

Какой у неё типовой сервопериод?
Насколько эфективно она работает с сложными поверхностями?
Как она выглядит по этому поводу в сравнении с LinuxCNC?
В частности с контролёрами Mesa и установленной на Orange Pi?

С какими контролёрами она работает?
Насколько сильно она привязана к конкретным контролёрам?
Насколько легко rt часть может портироваться на другие контролёры без потери функционала?

Как с организацией прямой работы с выводами GPIO компонентов лестничной логики или библиотеки логических rt компонентов?

torvn77 ★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 2)

Помнится, в далёком 198х году, будучи школьником, проходил на уроках труда практику на радиозаводе. Выбрал профессию токаря, потому что в токарном цехе было всегда интересно. Через пол-года занятий обратил внимание на какую-то бандуру, которая в дальнем углу стоит, и к ней никто никогда не подходит. Спрашиваю у мастера цеха (у него диплом местного заборостроительного был), а чего эта за х..ня? А он говорит, это станок с ЧПУ, если ты такой бл.. умный, то иди разберись, как он работает. Разобраться оказалось элементарно легко. Производительность немного ниже, чем если болты вручную вытачивать, зато и работать не надо, программку на бейсике замандячил, она мне на 3й разряд болтов наточила. А больше я вообще не видел, чтобы кто-то ещё к этой машине подходил.

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

1) grbl имеет трудности с портируемостью на разные архитектуры. Автор давно обещает HAL, но так и не сделал, по крайней мере на тот момент, когда я начал работу над своим проектом

2) в grbl интерпретация g-code происходит на микроконтроллере, что ограничивает возможности. Автор писал, что каких-либо новых фич особо уже не добавить, т.к. не влезет в память.

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

А как с маштабируемостью?

Что если потребуется больше осей или GPIO чем может обеспечить один контролёр?

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

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

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

А как у тебя со скоростью прохода рельефов?
Как в сравнении по времени с Mach3 и linuxCNC на Mesa 5i25/7i76?
Какая у тебя частота сервопериода?

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

Для тестирования на высокой скорости мне нужно таки купить/сделать блок питания на 36 вольт, а то я пока шаговики от 12 питаю, что просто не позволяет быстро перемещаться.

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

Мы точно одно и то же понимаем под сервоприводом? Сервопривод это двигатель + датчик положения. И управление чаще всего через PWM, заполненность которого и задает положение.

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

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

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

Используется следующий пайплайн работы:

1) Заранее на компьютере читается весь g-code.

2) Из него выделяются движения, и формируется список перемещений

3) В ходе исполнения микроконтроллеру отдаются команды вида «Подвинься на (+10, -5, -3) мм по осям X, Y, Z с такой-то скоростью и таким-то ускорением»

4) Микроконтроллер принимает такую команду, сам расчитывает нужное количество шагов, сам расчитывает тайминги между шагами, и сам же и шлет шаги

Таким образом в ходе движения он знает текущее положение

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

Микроконтроллер принимает такую команду и сам расчитывает

Ты и так читаешь весь ж-код. Что мешает там же посчитать и потом только отправлять уже препросчитанные шаги и тайминги? Зачем ты нагружаешь мк расчетами?

deep-purple ★★★★★ ()
Ответ на: комментарий от torvn77

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

Я собственно и записался токарем, потому что там была возможность себе оборудование всякое поделать, для лодки, для ныряния и т.д.

yvv ★★☆ ()
Последнее исправление: yvv (всего исправлений: 2)
Ответ на: комментарий от yvv

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

torvn77 ★★★★ ()

Всё это очень сложно.

Вот, например, в случае с NC Studio (5-й версии, например) всё, что мне нужно для запуска производства, это купить за ~$40 с бесплатной доставкой платку на али, кабель и плату развязки (если её на станке еще нет). Подключил, установил софт и готово, можно начинать дуть на станок.

А в сабже, как во многом подобном — ничего не ясно для простых рабочих людей, какие-то микроконтроллеры, разделение на рилтайм и не рилтайм, а чтобы в этом разобраться перед тем как это всё начнет работать (если начнет) и гнать изделия — пройдет нереально много потраченного времени, которое можно было изначально потратить на выпуск изделий или отдых.

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

продолжу.

Добавить web-интерфейс

ребят, работающий браузер или подключенный интернет на компьютере-контроллере управляющем работающим станком?

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

Вполне можно. Но зачем? Ведь ж-код загружается весь и не в мк.

И ещё что я хотел спросить:

У меня есть необходимость рассчитывать обрабатываемую площадь с учетом шага и кол-ва слоёв проходки. А для анализа надо загрузить ж-код. Что за либа используется у тебя для парсинга ж-кода? Где брать? Какие подводные камни есть при её подключении?

deep-purple ★★★★★ ()

Контроль вершины? Есть какие интересные алго, связанные оптимизацией перемещений? Большой и умный lookahead? Может считаете рывки, а не только ускорения?

anonymous ()

Звучит интересно. Отдельный блок работы с железом - это очень хорошо. G53-G59 - мало :)

Добавить винтовое перемещение

Это как? Это типа нарезания резьбы вращением и перемещением по оси Z, или перемещение по дуге? Если первое, то проблема в индексированом управлении шпинделя, на сколько я понял, а если второе, то в чём проблема?

Поддержка Jinja2 шаблонов в g-code

Впервые слышу. Можете просветить?

Добавить возможность поворачивать и масштабировать системы координат, выбираемые по G54-G59

И до кучи ещё «локальную координатную систему», типа G52 (или G53.1 или ещё как) - полезно для работы с нестингом. Координаты деталей располагаются относительно G54, потом переход в локальную систему G52, поворот системы соотв. детали и выполнение подпрограммы детали. Одна программа/подпрограмма на номинал на весь проект, прям люблю такое.

GNU GPL v3, или более новая

Прям вообще полюбил.

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

Впервые слышу. Можете просветить?

Например, не

G01 X95

а

G01 X{{width-r}}

И просто задаешь переменные width и r

Зачем это надо? Для некоторых случаев (не 3d фрезерование) иногда проще самому написать gcode, чем в cam делать. Но вот необходимость вычислять координаты огорчает.

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

Есть какие интересные алго, связанные оптимизацией перемещений

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

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

Большой и умный lookahead?

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

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

Ой, я имел ввиду по спирали. Хотел исправить, но кровавая модерация тоталитарно не позволяет беззвёздочникам править сообщения.

А в чём проблема с движением по спирали? Ведь математически тут и считать по сравнению с движением по дуге на три копейки больше, скорость по Z постоянная же. Не хватает мощи позиционирования в контролере для одновременного использование всех трёх осей?

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

Есть оптимизация скорости на стыках между перемещениями с учетом допустимых ускорений и скачка скорости

Мой вам совет - начинайте считать рывок по траекторным перемещениям и фактическим перемещениям по осям. Влупите большой буфер опережающего чтения и расчёта v/a/j очень сильно пригодится на freeform финише, где обычно всё улетает в 0.2-0.7 перемещения на довольно приличных подачах.

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

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

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

Это хорошо. А что будет на условном коде X0Y0

X0.3 F4000

X.6

X.9

...

X299.7

X300

Y0.3

X299.7

X299.4

...

Когда начнете оттормаживаться (на каком блоке), с какими v/a/j пройдете поворот?

anonymous ()

Добавить возможность конфигурировать параметры оборудования из интерфейса, а не через редактирование конфига.

Обрати внимание, гуй на Linux почти никто не делает и причин тут несколько.
1) После того как выучил настройки удобнее редактировать текстовый фаил.
2) Из-за того что добавление настроек в гуй требует сил и времени настройки в гуе всегда отстают от конфига.
3) Время потраченное на разработку и вёрстку гуя можно потратить на чтог-то более полезное.
4) Текстовый фаил можно пересылать, настройки в гуе нельзя(ну или тебе ещё и поддержку XML или YAML делать придётся.

Добавить винтовое перемещение
Работа с щупом по осям X и Y

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

Добавить возможность поворачивать и масштабировать системы координат, выбираемые по G54-G59

Лучшще добавь в свой Gcode поддержку переменных и арифметических операций.

А вообще ты изучал опыт LinuxCNC или действуешь в слепую?

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

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

Кстати, как у тебя обстоят дела с оффсетом на радиус инструмента (G41, G42)? И в свете этого как с углами?

Фреза 10мм, фрезеруем квадрат 100х100. Дошли до угла X0Y100, фактически фреза находится в X-5Y100. Для перехода в X0Y105 для фрезеровки второй грани что делаешь - выход в X-5Y105 и прямой ход в X0Y105 ? Или перемещение по дуге с центром в X0Y100 и радиусом 5мм? По практике я не доволен ни тем ни этим методом в чистом виде. Резкий поворот насилует фрезу, а вращение по дуге сложнее в рассчётах и округлениях.

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

подумаю

Полезно чтобы начинать не с начала? Пробежаться по препросчитанным данным и тупо отправить суммарную команду в мк куда ему приехать (и с какой скоростью), чтобы продолжить со строчки N.

паршу g-code сам

Дай ссылку в репе на файл и номер строки откуда можно глянуть как оно у тебя реализовано.

deep-purple ★★★★★ ()