EMC2 - пояснялка от "чайника"

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
dansystems1
Мастер
Сообщения: 339
Зарегистрирован: 23 апр 2012, 19:38
Репутация: 10
Откуда: Армения
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение dansystems1 »

Автору глубочайший респект, продалжайте, плс :good: :good: :good:
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Ворон226 »

КОМАНДЫ (продолжение).

3. С этой командой мы уже встречались - net - создает связь между сигналом и одним или несколькими пинами. Очень удобно, что если этой связи ещё не было (а ведь мы помним, что в Линуксе каждая связь имеет своё имя), то эта связь автоматически создаётся.

Например, нам нужно подать высчитанный программой сигнал Step на два контакта LPT-порта (мы пожелали управлять через отдельные драйвера двумя шаговиками по координате X). Для этого мы должны написать:

net xstep <= stepgen.0.step
net xstep => parport.0.pin-02-out
net xstep => parport.0.pin-03-out

или

net xstep <= stepgen.0.step => parport.0.pin-02-out => parport.0.pin-03-out

или

net xstep <= stepgen.0.step => parport.0.pin-02-out parport.0.pin-03-out

или

net xstep stepgen.0.step parport.0.pin-02-out parport.0.pin-03-out

или

net xstep parport.0.pin-02-out parport.0.pin-03-out stepgen.0.step

Т.е. главное в этой команде:
на первом месте - команда (net), затем название связи (xstep), а уже потом источник сигнала (выходной пин компонента - stepgen.0.step) и приёмник (приёмники) сигнала (входной или входные пины компонентов parport.0.pin-02-out и parport.0.pin-03-out).
Стрелочки => и <= Линуксом не воспринимаются и нужны только на удобства написания. Советую писать на начальных шагах, пока не привыкнете к названиям пинов и компонентам.
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Ворон226 »

4. Команда setp - устанавливает значение пина или параметра.

Если открыть ваш HAL-файл, то вы легко найдёте место, где прописываются параметры ваших шаговиков по координатам.

Например, по X:

setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 55000
setp stepgen.0.dirsetup 55000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL

Тут даже переводить нечего - всё прозрачно! И мы видим, что команда setp может присваивать значения пинам и параметрам компонентов из INI-файла!!! Вот она связь между hal и ini...

Но, иногда, можно прописать значения не из ini, а непосредственно. А выглядеть это будет, например, так:

setp stepgen.0.position-scale 44.145839
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 55000
setp stepgen.0.dirsetup 55000
setp stepgen.0.maxaccel 150

Оба варианта работают.


Это основные команды. Другие будем изучать по мере встреч с ними ;)
Хочешь быть счастливым? Будь им!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Nick »

Отличная тема :good:! Ее сильно не хватало!
Несколько комментариев:
Ворон226 писал(а):К выходному пину можно подключать несколько связей. ВАЖНО, чтобы каждая связь была присоединена к выходу и к входу (входам).

В записи это может выглядеть так:

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
Так нельзя - скажет, что Pin 'motion.current-vel' was already linked to signal 'vel'. Т.е. к 1 пину можно подключить только 1 связь, но к 1 связи можно подключить несколько пинов. Правильный вариант - тот который на первом рисунке.
В принципе, несколько связей к одному сигналу не нужны, т.к. на них всегда будет одно и тоже значение.
Ворон226 писал(а):2. addf - добавляет компонент реального времени в поток. А по-русски, эта команда определяет, где будет находиться компонент: в высокоскоростном потоке (base-thread) или в низкоскоростном потоке (servo-thread).
Выглядит это как-то так:
addf - добавляет не компонент, а функцию компонента, например тот же stepgen имеет три функции, первая быстрая она генерирует шаги с заданной частотой:
addf stepgen.make-pulses base-thread
Вторая и третья - более медленные, одна рассчитывает обратную связь (т.е. сколько сделано шагов), вторая рассчитывает частоту make-pulses на следующий период:
addf stepgen.capture-position servo-thread
addf stepgen.update-freq servo-thread
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Ворон226 »

Блин! А вот исправить-то я уже и не могу...
Ник! Не трудно исправить как нужно?
И спасибо за науку ;)
Хочешь быть счастливым? Будь им!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Nick »

Я вот думаю, может эту статью целиком в вики перенести?
Там редактировать сможет каждый, и будет сохраняться история изменений.
Вот сюда:
http://cnc-club.ru/wiki/index.php/Linux ... 0%BE%D0%B2

Чтобы редактировать wiki надо залогиниться, пароль и логин такие же как в форуме.
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Ворон226 »

Вики не хочет мой логин брать - говорит "Вы не указали допустимого имени участника."!
Хочешь быть счастливым? Будь им!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Nick »

Попробуй сейчас... вроде что-то исправил :)
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Ворон226 »

заработало - буду переносить материалы...
Хочешь быть счастливым? Будь им!
Аватара пользователя
solo
Мастер
Сообщения: 1374
Зарегистрирован: 20 окт 2011, 18:39
Репутация: 272
Настоящее имя: Юрий Соловьев
Откуда: Украина Харьков
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение solo »

А можно ссылку где можно прочитать продолжение данной темы
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Nick »

Вот тут, но там пока тоже самое, все ждем продолжения :)
http://cnc-club.ru/wiki/index.php/Linux ... 0%BE%D0%B2
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Ворон226 »

Вместе с продолжением испытаний станка появится и продолжение... На этой неделе - точно!
Планирую следующее:
- Сообщения об ошибках (это очень здОрово, что Линукс проверяет за нами ошибки и сообщает о них!)
- Разбор hal на примере (примерах?)
- логические и арифметические операции в hal
- типы переменных и числовых значений...

А дальше посмотрим...
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Ворон226 »

Написал об ошибках (не забываем, что это "Пояснялка от "ЧАЙНИКА"". Потому она далеко не претендует на справочник - только помогает не утонуть в море новой информации.
Удачного плавания!
Хочешь быть счастливым? Будь им!
Аватара пользователя
solo
Мастер
Сообщения: 1374
Зарегистрирован: 20 окт 2011, 18:39
Репутация: 272
Настоящее имя: Юрий Соловьев
Откуда: Украина Харьков
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение solo »

В своей пояснялке вы рассказываете о КОМПОНЕНТАХ (маленьких программах) из которых состоит Lcnc было бы не плохо, чтобы в такой доступной форме рассказали бы и об этом, дали ссылку на первоисточник. Просто манера изложения мне очень понятна и легко понимаема.
Большое ВАМ спасибо. :beer_blow:
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Ворон226 »

BIT или не BIT? Вот в чём вопрос!

Захотели, например, мы включать и выключать внешний двигатель, управляемый stepgen.2, командой из g-кода.
Выбрали motion.analog-out-00 (команда M68 E0 Q1 и M68 E0 Q0) , а управлять решили через stepgen.2.enable

Прописываем связь этих пинов в hal:

net upr motion.analog-out-00 stepgen.2.enable

(это означает: создаём связь upr для соединения выходного пина analog-out-00 компонента motion со входным пином enable компонента stepgen.2)

и ... НЕ РАБОТАЕТ!!!

А причина проста - несоответствие типа выходного и входного пинов:
motion.analog-out-00 (float, out)
(bit) stepgen.<chan>.enable

Выход из ситуации может быть таким:
Использовать motion.digital-out-00 (команды M64 P0 и M65 P0) - формат сигнала BIT
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Ворон226 »

Нужно ли изобретать велосипед или Компоненты реального времени
(часть первая)

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

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

Пропишем эти две кнопки:

net start1 <= parport.0.pin-10-in
net start2 <= parport.0.pin-11-in

а дальше нужно включать станок только если эти "кнопочки" (start1 и start2) нажаты (= 0). Сделаем это через пины

stepgen.0.enable
stepgen.1.enable
stepgen.2.enable

всех трех координат. Т.е. пока отрабатывается программа - держи руки на кнопках!


Т.е. условием включения станка должно быть:

start1 = 0
start2 = 0
stepgen.0.enable , stepgen.1.enable и stepgen.2.enable имеют уровень сигнала равный 1 или True

Мы, как электронщики, прекрасно знаем, что это легко реализовать через двух-входовый элемент ИЛИ-НЕ и двух-входовый И

(start1 или start2), затем инвертируем и на первый вход элемента И, а на второй вход того же И - axis.0.amp-enable-out

Тогда на выходе, при start1 = 0 и start2 = 0, получим тот же уровень, что и axis.0.amp-enable-out и передаём его на stepgen.0.enable

И так по всем трем осям...

А, если хотя бы один start (хотя бы одна кнопка) равен 1 (отжата), то stepgen.0.enable равен 0 (False) и движение по осям прекращается.


Что нам может предложить CNC из стандартного набора компонентов?

Смотрим мануал:

6.5 Логические компоненты
6.5.3 or2
Компонент "or2" это двух вводовый вентиль "или" ("or").
6.5.2 not
Компонент "not" ("не") это битовый инвертор.
6.5.1 and2
Компонент "and2" это вентиль "и" ("and") с двумя вводами.


Пропишем всё в логике CNC (только одну координату для краткости):

net start1 => or2.0.in0
net start2 => or2.0.in1
net orout <= or2.0.out => not.0.in1
net notout <= not.0.out => and2.0.in0
net andin1 <= axis.0.amp-enable-out => and2.0.in1
net andout <= and2.0.out => stepgen.0.enable

Вроде всё... НЕТ! Опять забыли для начала "включить" компоненты и определить их в нужном потоке... Мы используем один компонент or2, один компонент not и один компонент and2 (для одной оси) или три компонента and2 (для трёх осей). Получается всё вместе:

loadrt or2
loadrt not
loadrt and2 count=3

addf or2.0 servo-thread
addf not.0 servo-thread
addf and2.0 servo-thread
addf and2.1 servo-thread
addf and2.2 servo-thread

net start1 <= parport.0.pin-10-in
net start2 <= parport.0.pin-11-in

net start1 => or2.0.in0
net start2 => or2.0.in1
net orout <= or2.0.out => not.0.in1
net notout <= not.0.out => and2.0.in0 => and2.1.in0 => and2.2.in0
net andin0 <= axis.0.amp-enable-out => and2.0.in1
net andout0 <= and2.0.out => stepgen.0.enable
net andin1 <= axis.1.amp-enable-out => and2.1.in1
net andout1 <= and2.1.out => stepgen.1.enable
net andin2 <= axis.2.amp-enable-out => and2.2.in1
net andout2 <= and2.2.out => stepgen.2.enable

Здесь loadrt and2 count=3 говорит о том, что мы будем использовать компонент 2-И трижды.

Это пример использования готовых компонентов для реализации "цифровой схемы". Но это далеко не все возможности компонентов реального времени.
Последний раз редактировалось Ворон226 21 фев 2013, 20:27, всего редактировалось 1 раз.
Хочешь быть счастливым? Будь им!
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Сергей Саныч »

Вот потому "электронщики не понимают программистов",
что логика работы вот такой схемы
то же самое в графическом виде
то же самое в графическом виде
halogic1.PNG (5.79 КБ) 2173 просмотра
схватывается глазом за полторы секунды,
а об hal-описание ее работы "моск сломать можно".
Или у меня это с непривычки?
Кстати, не было попыток написать транслятор схемы логики работы в hal?
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Ворон226 »

Точно!

Самое простое и понятное - графическое изображение. Тут и говорить-то не нужно!

А схемку я "прикручу" к вики - сам не успел нарисовать... ;)
Хочешь быть счастливым? Будь им!
Аватара пользователя
Тима
Почётный участник
Почётный участник
Сообщения: 3162
Зарегистрирован: 01 мар 2012, 20:47
Репутация: 1089
Настоящее имя: Тимур
Откуда: КБР
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Тима »

Serg-tmn писал(а):Вот потому "электронщики не понимают программистов",
:good: В университете писал программы на паскали и бейсике. После окончания универа заинтересовался промышленной автоматизацией и программированием ПЛК. Поюзав языки LD и FBD :thinking: , понял что это проще и понятнее!
Дорогу осилит идущий!
Я все пойму, Вы только дайте денег!!!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: EMC2 - пояснялка от "чайника"

Сообщение Nick »

ИМХО лучше эти кнопки на Estop завести.
Но как пример использования компонентов - хорошо :good:.
Ответить

Вернуться в «LinuxCNC»