Страница 1 из 3
EMC2 - пояснялка от "чайника"
Добавлено: 08 фев 2013, 21:35
Ворон226
Пару лет назад я с друзьями взялся за проектирование и изготовление фрезерного станка. Затем был второй. Затем планшетный принтер...
Так уж вышло, что спец по Линуксу "удалился" от дел. А делать-то нужно! Вот и решил я изучить систему ЛинуксCNC самостоятельно.
Примерялся несколько месяцев, читал форум, в инете "гулял". И вот настал момент делать свою конфигурацию для своего станка.
Сразу оговорюсь - я имею высшее образование - электронщик со специализацией "Проектирование ЭВМ". Вроде как не со стороны

Но читаю описания, выставленные на форуме и понимаю - на чужом языке написано! Абракадабра!
Спасибо форумчанам - помогли "вползти" в систему (хотя понимаю, что нахожусь только на пороге).
Считаю, что просто необходимо поделиться теми "открытиями", без которых понимание этой системы просто невозможно. А писать буду тем языком, на котором говорят "паяльники", а не "программисты". Может кому поможет? Буду рад!
"Сухой остаток" от темы переношу на Вики -
http://cnc-club.ru/wiki/index.php/Linux ... 0%BE%D0%B2
Итак.
Re: EMC2 - пояснялка от "чайника"
Добавлено: 08 фев 2013, 21:41
Ворон226
НАЧАЛО. ОПИСАНИЕ EMC2 или EMC2 Integrators Manual.
Глава 1
Важные определения
Никаких проблем. Всё понятно. Идём дальше...
Часть I
Конфигурация
Глава 2
Аппаратное обеспечение (Hardware)
2.1 Latency Test
И опять всё понятно. Тест провел. Данные записал...
3. Конфигурационные файлы
И тут всё в порядке...
Дальше стал конфигурить систему, используя Stepconf. Столкнулся с проблемой, что Stepconf не дал мне возможности сконфигурировать систему такой, которая мне нужна. Испробовав несколько вариантов понял - нужно будет прописывать конфигурацию "ручками".
Вот и подошел я с INI-файлу...
Re: EMC2 - пояснялка от "чайника"
Добавлено: 08 фев 2013, 21:45
Ворон226
Глава 4. Файл INI
Вопросы начали появляться, но житейское правило: Не трогай того, что не понимаешь - помогло прописать бОльшую часть ini-файла. Больше того, прописал четвертую ось (она у меня должна качать гель: шаговик-насос). Даже подвигал насос. Но КАК его запустить программой? Да еще в нужное время, с нужной скоростью!
Тут без понимания HAL-файла не обойтись.
И тут началось!..
Re: EMC2 - пояснялка от "чайника"
Добавлено: 08 фев 2013, 21:53
Ворон226
Глава 5
EMC2 и HAL
И вот первая строка:
Motion загружается при помощи команды motmod. Родственные программы должны быть запущены до motion...
Перечитал пару раз. Непонятно. Пропустил и полез дальше. Ещё более непонятно.
Открыл HAL у себя и стал читать, взирая на реальный текст реального HAL-а... Стал понимать структуру самого файла. Но что там написано???
После двух недель стало ясно следующее:
1. Система EMC2 или LinuxCNC - это огромный набор маленьких программок, которые определенным образом сконфигурированы в систему. Потому, чтобы начать самому прописывать свою систему своего станка - необходимо понять логику этой конфигурации.
А она оказалась довольно простой. Только написана на ином языке, на языке программистов
Итак, эти маленькие программки называют КОМПОНЕНТАМИ. У каждого компонента есть своё ИМЯ.
Re: EMC2 - пояснялка от "чайника"
Добавлено: 08 фев 2013, 21:59
Ворон226
У каждого компонента есть контакты (клеммы, разъемы) входов и выходов. Их называют ПИНы. У каждого компонента пинов может быть различное количество. У каждого пина есть своё имя. Пины бывают входные и выходные. А записывать это имя пина договорились так:
(имя компонента).(имя пина)
Например:
motion.analog-out-00 , где
motion- имя компонента,
analog-out-00 - имя пина, этот пин выходной и его номер 00.
ВАЖНО!
Не стоит верить имени пина в части входной он или выходной. Есть случаи, когда в названии пина есть "in" или "out@? а на самом деле всё обстоит совсем не так. Так где же узнать входной это пин или выходной?
Вариант 1. Почитать мануал (описание) EMC2. Там это выглядит как-то так:
iocontrol.0.coolant-flood (bit, out) - как мы уже разобрались, эта запись означает, что это выходной пин coolant-flood компонента iocontrol.0
Вариант 2 (мной пока слабо используемый)
Смотреть на свойства пина можно и в емс - любой пин открываем в Halshow и смотрим.
Re: EMC2 - пояснялка от "чайника"
Добавлено: 08 фев 2013, 22:13
Ворон226
Также компонент может иметь один или несколько параметров (это такие коэффициенты, которые используются при работе компонента). Тут нет проблем - такое есть в любой схеме (номиналы резисторов, например).
Компоненты могут "соединяться" между собой посредством связей (проводки между входами и выходами). Тут есть тоже свои правила:
1. Чтобы не путаться, договорились каждую связь обзывать своим именем.
В этом случае, запись "коммутации" двух компонентов будет выглядеть так:
(команда) (имя связи) (источник "сигнала") (приёмник "сигнала")
net vel <= motion.current-vel => stepgen.3.vel , что означает
создаём (команда net) связь (vel) между пином current-vel компонента motion и пином vel компонента stepgen.3 (тут 3 - это номер компонента с таким именем - ведь один компонент может использоваться одновременно несколько раз, но под разными порядковыми номерами). Стрелочки <= и => писать необязательно. С ними на начальном этапе овладения системой проще - понятно ОТКУДА и куда передается "сигнал".
Возможно эту запись сделать так:
net vel <= motion.current-vel
net vel => stepgen.3.vel
- как вам будет удобнее и понятнее.
Кстати, эти две строчки могут быть записаны в разных местах HAL-файла.
Re: EMC2 - пояснялка от "чайника"
Добавлено: 08 фев 2013, 22:15
Ворон226
Есть и второе правило при записи связи:
2. К одному выходному пину можно подсоединить несколько входных пинов. Но один входной пин можно подсоединить только к одному выходному пину.
Re: EMC2 - пояснялка от "чайника"
Добавлено: 08 фев 2013, 22:16
Ворон226
Продолжение следует. Мэтров прошу поправлять, если "чайник" в силу своей необразованности что-то упустит или переврёт

Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 06:49
Сергей Саныч
Ворон226 - продолжай! Великое дело затеял
По себе сужу - осознание того, что
Система EMC2 или LinuxCNC - это огромный набор маленьких программок
- компонентов, которые связаны по схеме, описанной hal-файлами - пришло далеко не сразу.
Изначально представлялся некий единый монстр с кучей настроек, которые делаются через ini и hal-файлы.
Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 08:13
tooshka
Вот если бы вся документация была на таком доступном языке)) Мечта!! Автору низкий поклон.
Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 09:20
nik1
Хоть и не пользую Емс , но читаю и начинаю понимать как это работает
Статья очень правильная и нужная

Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 09:35
Impartial
Ворон226 писал(а):2. К одному выходному пину можно подсоединить несколько входных пинов. Но один входной пин можно подсоединить только к одному выходному пину.
Здесь наверное нужно добавить, что пин может состоять из множества физических проводов, переходя на язык электроники. И их количество от выхода до входа должно быть одинаковым.
Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 09:59
Ворон226
Impartial писал(а):... пин может состоять из множества физических проводов, переходя на язык электроники. И их количество от выхода до входа должно быть одинаковым.
(если я правильно понял)
К выходному пину можно подключать несколько связей. ВАЖНО, чтобы каждая связь была присоединена к выходу и к входу (входам).
В записи это может выглядеть так:
net vel <= motion.current-vel => stepgen.3.vel
net velin <= motion.current-vel => sum2.0.in0 , что означает
выходной пин current-vel компонента motion подключен связью vel к входному пину vel компонента stepgen.3 и связью velin к входному пину in0 компонента sum2.0
Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 10:59
nkp
Все разложено по полочкам
Я предложил бы автору сделать "пояснялку" в виде статьи - то есть сложить все в первый пост.
Во первых он всегда будет доступен тс для редактирования.
Во вторых - не надо читать лишнее (порой уводящее в сторону от истины) - а в шапке будет только "выжимка-концентрат".
Ну а захочет человек всю тему проштудировать - милости просим

.
--------------
один момент по содержимому - в дополнение к сказанному:
Ворон226 писал(а):Пины бывают входные (in) и выходные (out).
нужно иметь в виду , что в некоторых случаях наличие в наименовании пина приставок "in" и "out" не соответствуют
их действительному назначению
лучше всегда руководствоваться описанию пина в документации
там всегда после названия пина идет его тип и далее его описание
приведу примеры:
компонент
serport
пин:
serport.N.pin-1-in bit out
то есть в наименовании стоит "in" - а пин является выходом
это очень легко понять - если нарисовать блок-схему и увидеть,что при коммутации компонентов
их физические выходы в тоже время должны быть входами для программных компонентов
самый очевидный пример - паралельный порт:
нам нужно с условного пина "А" (который является физическим пином порта - то есть мы к нему реально можем подключить провод)
взять сигнал допустим с программного генератора шагов(компонент stepgen)
значит мы с выхода stepgen берем сигнал и подаем его на наш пин "А"
он должен в этом случае быть входом для сигнала - но в тоже время мы с него же и выводим сигнал "наружу" порта
и тут он уже работает как выход
ну в принципе этой каши можно было избежать:
нодо было бы просто у
всех компонентов сделать обязательными и входы и выходы - даже если компонент
и ничего не делает с сигналом - тупо коммутирует вход с выходом
тогда бы все было логично и стройно
но разработчики посчитали это излишним (и правильно сделали

)
а смотреть на свойства пина можно и в емс - любой пин открываем в Halshow и смотрим:
Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 11:37
Impartial
Ворон226 писал(а):К выходному пину можно подключать несколько связей. ВАЖНО, чтобы каждая связь была присоединена к выходу и к входу (входам).
Я о том, что физически пин "motion.current-vel" состоит из 32 линий и его бессмысленно раздирать по частям так как это целое число со знаком или с плавающей точкой.
Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 11:49
Сергей Саныч
Impartial писал(а):Ворон226 писал(а):К выходному пину можно подключать несколько связей. ВАЖНО, чтобы каждая связь была присоединена к выходу и к входу (входам).
Я о том, что физически пин "motion.current-vel" состоит из 32 линий и его бессмысленно раздирать по частям так как это целое число со знаком или с плавающей точкой.
А можно интерпретировать и как один провод, по которому передается
аналоговое значение.
Сейчас даже не всякий программист задумывается, сколько битов в int, long, float или double.
Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 11:53
valb
Наконец-то! Хоть электронщики взялись за ДЕЛО! Ато глядишь Ф книгу, а видишь фигу.
Топикстартеру респект!

Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 12:05
nkp
Impartial писал(а):Здесь наверное нужно добавить,
ну да - это конечно добавит понимания "чайникам" и ни в коем случае не введет их в долгий ступор

Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 13:49
vmarkiv
Главное в описаниях для " чайников " - что-бы не "ботать по фене ", а использовать терминологию ЧПУ и программирования
Re: EMC2 - пояснялка от "чайника"
Добавлено: 09 фев 2013, 15:21
Ворон226
Всем большое спасибо за поддержку!
Я действительно пока слабо разбираюсь в LinuxCNC, но хочу разобраться. Пишу именно с того уровня, на котором и нахожусь сейчас. Позднее, конечно, можно будет всё подчистить и сделать отдельный файлик, если в нём будет нужда.
vmarkiv писал(а):Главное в описаниях для " чайников " - что-бы не "ботать по фене ", а использовать терминологию ЧПУ и программирования
Полностью согласен с тобой! Потому стараюсь сначала найти понятный образ и тут же его привязать к термину, который используется в официальных описаниях. Так сказать "мостик" от "чайника" к "профи".
Продолжу...
Вот приходите вы домой (вошли в систему), подошли к телевизору, нажимаете на пульте 5 канал (обращаетесь к компоненту) и... А экран-то тёмный!
Оказывается телевизор-то не включили!!!
Так же происходит и с компонентами Линукса.
В HAL-е нужно первым делом "включить" нужные компоненты - "загрузить компонент HAL реального времени"!
Так мы подошли к понятию
КОМАНДЫ.
1.
loadrt - загружает компонент HAL реального времени.
Например,
loadrt stepgen step_type=0,0,0,0 , что означает: загружаем (loadrt) компонет stepgen с некоторыми установками (step_type=0,0,0,0), о которых поговорим позже.
2.
addf - добавляет компонент реального времени в поток. А по-русски, эта команда определяет, где будет находиться компонент: в высокоскоростном потоке (base-thread) или в низкоскоростном потоке (servo-thread).
Выглядит это как-то так:
addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
ВАЖНО!
Эти команды должны быть обязательно! Именно они определяют: какими компонентами мы собираемся пользоваться и какие требования к этим компонентам мы предъявляем по скорости.