Что такое LinuxCNC?

Что такое LinuxCNC?

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



LinuxCNC — набор программ, который позволяет сделать из вашего компьютера стойку управления ЧПУ. Он позволяет программно генерировать шаги в случае управление по типу STEP-DIR-ENABLE, обрабатывать информацию с датчиков, позволяет вам собрать собственную заточенную под ваш станок — панель управления.



Ну а также LinuxCNC поддерживает работу с промышленными платами с аппаратной обработкой G-code — так называемые Mesa платы.



Состав LinuxCNC


RealTime Linux ядро

Простое ядро(ванильное) в тех.процессах связанных с реальным временем. Реализаций real time в linux несколько, конкретно linuxcnc использует RTAI и хотя RTAI ушел далеко вперед(3.9 версия реализована) , на данный момент поддерживаются ядра 2.4 и 2.6 , вы скажите фи, а я отвечу что на производстве железо меняется крайне медленно, что большинство софта использует DOS а также что современный многоядерный монстр может показать… результаты на jitter time хуже чем одноядерный комп.



Драйвера


На данный момент хорошо реализованы и опробованы на практике, с работой в реальном времени , это параллельный порт(до 3-х штук) а также RS232 или COM-PORT.

Также ведутся работы(не могу оценить степень их активности), по реализации real time управления через Ethernet.

USB — использует буфферицацию и и говорить о настоящем real time не получается, в общем, с этим все сложно.

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



cnc_approx.png



Чем меньше размер шагов тем ближе мы к реальному изображению кривой, конечно это зависит и от минимального шага станка.. ну да ладно. В общем если наша задача увеличить частоту с которой компьютер передает сигналы управляющей плате, то нужно уменьшать параметр jitter time, один из способов это увеличение частоты процессора, также можно избавляться от «лишних» процессов в системе, ну там браузер выключить, музыку на этом компьютере не слушать, compiz отрубить, network demon-а развеять…. ИЗБАВИТСЯ ОТ ГРАФИЧЕСКОГО СЕРВЕРА, но это совсем хардкор и теоретически linuxcnc предполагает клиент-серверную модель, так что интерфейс будет работать на компе с браузерами и прочими кофеварками, а преобразователь G-code и вся управляющая логика на другом.

Другой вариант использовать вариант на железе с помощью ПЛИС преобразовывать G-code в управляющие сигналы, количество читаемых/передаваемых компьютером команд заметно уменьшиться, для этого и существуют MESA платы стоят они дороже чем PCI-parrport переходник.




HAL

Главная и самая интересная часть linuxcnc — Hardware Abstraction Layer. Это такая специальная прослойка которая позволяет обычному пользователю получать доступ к оборудованию(ядру) Linux. Раньше был ещё один HAL , который потом заменил проект udev , так вот это разные вещи, HAL Linuxcnc нужен только для linuxcnc.

Итак каждый компонент в HAL представлен черным ящиком с некоторым количеством ножек, каждая ножка обладает такими свойствами, как вход/выход а также тип передаваемого по ней сигнала. Ещё есть псевдо ножки, это константы, параметров компонента.

Все это похоже на блоксхемы и в итоге можно представить как вот такую вот схему(чем-то напоминает LabView, но увы удобного редактора нет).



stepper_mm.png




Пример конвертера GEDA2HAL



Ещё стоит заметить что в HAL всегда работают два типа компонентов ,работают они в разных потоках loadrt загружает компоненты работающие в real time потоке, loadusr загружает компоненты работающие не real time т.е. с периодом >=200 мс … это например интерфейс или джойстик подключенный по USB.

Также с помощью специального синтаксиса макросов и языка С, можно создавать свои компоненты, с помощью утилиты comp.

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



Подсветка синтаксиса



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




;;Подсветка синтаксиса для HAL в LinuxCNC
;;GPLv2
(define-generic-mode hal-linuxcnc-generic-mode
  '(("#".?\n) ("/*"."*/"))
  '("or" "and")
  '(;;("\\(#<_?[A-Za-z0-9_]+>\\)" (1 font-lock-type-face))
    ;;("\\([NnGgMmFfSsTtOo]\\)" (1 font-lock-function-name-face))
    ("\\(net\\|loadrt\\|loadusr\\|addf\\|setp\\|linksp\\|newsig\\)" (1 font-lock-function-name-face))
    ("\\(axis\\|stepgen\\|parport\\|pwmgen\\|iocontrol\\|motion\\|classicladder\\)" (1 font-lock-builtin-face))
    ("\\([ \t]+-+[A-Za-z0-9_]+\\)" (1 font-lock-string-face))
    ("\\(AXIS_\\|EMCMOT\\|TRAJ\\)\\(servo\\|base\\)-thread" (1 font-lock-constant-face))
    ("\\(step\\|dir\\|enable\\)" (1 font-lock-type-face))
    ("\\([0-9]+\\)" (1 font-lock-constant-face))
    )
  '("\\.hal\\'")
  nil
  "Generic mode for .hal file. LinuxCNC HAL")




Внутренняя архитектура


Здесь представлены компоненты HAL а также их деления на real time и non real time





EMC_Control_LG.gif





в linuxcnc входит свой собственный интерпретатор G-code RS274NGC , который можно дополнять пользовательскими M-кодами, написанными на bash и .hal.




Набор графических интерфейсов




axis_joystick_experiments.png




  • Главный интерфейс который часто изображен называется — AXIS , можно дополнять этот интерфейс с помощью python , а также графических элементов из Tk/Gtk библиотек.
  • TkLinux — по проще и менее жрущий
  • Touchy интерфейс для планшетов


  • Keystick самое минимальное из минимально возможного.


В общем, AXIS это основной интерфейс и его можно расширять PyVCP и GladeVCP , второе краше и Gtk виджеты лучше приспособлены для touch интерфейсов.




Измерительные и вспомогательные утилиты.



halmeter и halscope позволяют отслеживать сигналы проходящие между компонентов, разница такая же как между вольтметром и осциллографом.




halmeter.png




halscope.png





Есть ещё Latency Test , которые измеряет минимальное время в которое может откликаться система — jitter time





ФУНКЦИИ ПЛК



LinuxCNC также включает программно-программируемый логический контроллер (PLC), который обычно используется в различных конфигурациях (например, сложных обрабатывающих центрах). Программный ПЛК основан на проекте с открытым исходным кодом Classicladder и работает в среде реального времени.






АРХИТЕКТУРА СИСТЕМЫ


Типичная схема системы управления состоит из встроенного ПК, установленного с картой управления движением PCI и его аппаратной средой, взаимодействующей с сервоприводами, датчиками и другими исполнительными механизмами. Программное обеспечение LinuxCNC с открытым исходным кодом, основанное на ПК, легко настраивается и настраивается для различных типов приложений.






SERVO INTERFACE - 6 осей / плата PCI


На внутреннем краю карты имеется шесть осевых разъемов для управления инкрементальными или классическими аналоговыми сервомоторами. Доступны четыре различных небольших осей для установки на DIN-рейку, что позволяет экономично экономить шесть различных типов сервоусилителей. Интерфейс может быть выполнен с точным сочетанием подходящих модулей осей для фактической конфигурации сервопривода. Интерфейс CAN можно увидеть на верхнем краю с правой стороны: это для цифровых сервосистем, которые обмениваются данными по CAN-шине.


ОБЩИЙ НАЗНАЧЕНИЕ ввода-вывода - 4 x 8-контактный и 20-контактный изолированный


Четырехпозиционные выводы ввода / вывода общего назначения размещаются на стандартных плоских кабельных наконечниках. Эти голые выводы ввода-вывода можно настроить в LinuxCNC для любых пользовательских целей. Имеется еще 20 оптически изолированных входных штырей для прямого подключения двух концевых выключателей и одного датчика самонаведения для каждой оси и двух оптически изолированных входов E-stop.


ФУНКЦИИ ПЛК - вдоль полевой шины RS485


Оптически изолированные модули на DIN-рейке могут быть привязаны к шине RS485 для расширения возможностей ввода-вывода и функций платы PCI. До 16 модулей могут быть подключены к шине в целом.


ПОДКЛЮЧЕНИЕ МОДУЛЯ SERVO


Малогабаритные интерфейсные модули на DIN-рейке обеспечивают простой способ подключения различных типов сервомодулей к разъемам осей. Типичная конфигурация системы может быть настроена по разному: аналоговые серво модули, которые имеют напряжение входа уровня опорного сигнала , инкрементные системы с шагом / направлением или по часовой стрелке / против часовой стрелки или входными сигналами / типа В квадрант А, а также серво модулями, соединенных по CAN шины интерфейс. При необходимости может применяться дополнительная обратная связь с датчиком.



Аналоговая система с обратной связью энкодера:






Инкрементальная цифровая система с обратной связью датчика и дифференциальным выходом:





Инкрементальная цифровая система с обратной связью энкодера и выходом TTL:





Инкрементальная цифровая система с дифференциальным выходом:





Инкрементальная цифровая система с выходом TTL:





Абсолютная цифровая (CAN-система):





Абсолютная цифровая (CAN-система) с традиционной обратной связью датчика:






RS485 EXPANDER MODULES



Эти модули были разработаны для расширения возможностей ввода / вывода и функций по линии RS485 платы управления движением PCI.



8-канальный релейный модуль



Модуль релейного выхода дает восемь релейных выходов NO-NC на трехполюсном разъеме для каждого канала.





8-канальный цифровой входной модуль


Модуль цифрового ввода предоставляет восемь оптически изолированных цифровых входных контактов.





8-канальный АЦП и 4-канальный ЦАП



Модуль АЦП и ЦАП предоставляет четыре выхода цифрового аналогового преобразователя и восемь аналого-цифровых входов. Этот модуль также оптически изолирован от платы PCI.





Обучающийть модуль джойстиков





Модуль «Обучающий кулон» предоставляет 8 цифровых входных каналов для кнопок, 6 входных каналов АЦП для джойстиков или потенциометров и один вход энкодера для маховика.







Подключение модулей



Модули на шине должны быть подключены в последовательной топологии с концевыми резисторами на конце. Начало топологии - карта PCI, а конец - последний модуль.





Автоматическое распознавание узлов



Каждый узел, подключенный к шине, автоматически распознается картой PCI. Во время запуска LinuxCNC драйвер автоматически экспортирует контакты и параметры всех доступных модулей.



Включение узлов



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





С чего начать?


Если вы решили освоиться с linuxcnc





Написать:
12:34
6579
No comments yet. Be the first to add a comment!