[WIKI] FAQ по EMC2 LinuxCNC

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

[WIKI] FAQ по EMC2 LinuxCNC

Сообщение Nick »

FAQ переехал в wiki: FAQ по LinuxCNC
Вы можете помочь нам в оформлении статьи. Для внесения изменений надо залогинится в вики (логин и пароль такие же, как на форуме).
Как внести изменения в статью в wiki
(для просмотра содержимого нажмите на ссылку)
Q: EMC2 выдает такую ошибку: "Unexpected realtime delay: chek dmesg for details.". Что делать?
A: Это означает, что один из интервалов задержки стал больше Base period. Нужно увеличить base period в настройках EMC2. Запустите Приложения -> EMC2 -> Latеncy Test, попробуйте нагрузить компьютер, откройте несколько окон веб-браузера, запустите фильм, поставьте копироваться большой файл, по-перемещайте окна по экрану. После всего этого смотрим в окно Latency Test и запоминаем параметр Max Jitter для Base thread (если вы используете серво двигатели, Вам понадобятся оба параметра). Запускаем Приложения -> EMC2 -> Stepconf и в окне настройки конфигурации указываем Base period Maximum Jitter.

Q: При выполнении поиска начал осей (homing) EMC2 выдает ошибку "joint limit error"
A: Наверняка Вы используете в качестве датчика начала (home) один из концевых переключателей оси. Для корректного выполнения поиска в этом случае нужно:
  • Чтобы Home Location не было равно Home Switch Location. Т.к. после процедуры поиска начала станок остановится в положении Home Location, и оно не должно вызывать срабатывания концевого датчика оси.
  • Чтобы в конфигурационном файле в разделе описания оси присутствовала строчка "HOME_IGNORE_LIMITS = YES".
Q: Как запустить станок избегая процедуру поиска начал (homing)? Возникает ошибка: "Не могу исполнить программу если не найдены начала" ("Can't run a program when not homed").
A: EMC2 отказывается выполнять программы до тех пор пока не найдены начала осей потому, что EMC2 должен точно знать в каком положении находится станок, чтобы не дать ему выехать за пределы осей. Настоятельно рекомендую установить концевики и делать поиск нулей при каждом запуске EMC2 (при наличии концевиков это делается нажатием одной клавиши). Если концевиков нет, начала оси можно выставлять вручную.

Если совсем не хочется выставлять начала, то можно в файле конфигурации в раздел [TRAJ] нужно добавить строчку: "NO_FORCE_HOMING = 1" и EMC2 не будет выдавать эту ошибку. Но в этом случае нужно быть особенно внимательным следя за работой станка, т.к. EMC2 не сможет контролировать пределы осей и появится вероятность их превышения, что может привести к поломке станка :attention:!

Q: LinuxCNC не запускается, выдает ошибку RTAI[hal]: ERROR, LOCAL APIC CONFIGURED BUT NOT AVAILABLE/ENABLED.
A: Проблема с установкой EMC2 #48
Это незавершенный раздел, Вы можете помочь в его оформлении.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение nkp »

для удобства (имхо) работы с питон очень помогает дополнительный модуль в gedit:
Выделение(027).jpg (1902 просмотра) <a class='original' href='./download/file.php?id=11798&mode=view' target=_blank>Загрузить оригинал (322.36 КБ)</a>
после его установки консоль питона вызывается прямо в gedit по Ctrl+F9
это намного быстрей ,чем пользовать обычный терминал
работают привычные сочетания клавиш для копипаста
zilk
Опытный
Сообщения: 139
Зарегистрирован: 07 янв 2012, 19:05
Репутация: 1
Откуда: Украина, Харьков
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

Отлично, спасибо! Буду разбираться с питоном для следующей безумной идеи... :freak:
zilk
Опытный
Сообщения: 139
Зарегистрирован: 07 янв 2012, 19:05
Репутация: 1
Откуда: Украина, Харьков
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

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

Re: FAQ по EMC2 LinuxCNC

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

Может так?

В HAL:
net strok motion.program-line имя подпрограммы.strok

а в подпрограмме прописать

h = hal.component("имя подпрограммы")
h.newpin("strok", hal.HAL_FLOAT, hal.HAL_IN)
...
Хочешь быть счастливым? Будь им!
zilk
Опытный
Сообщения: 139
Зарегистрирован: 07 янв 2012, 19:05
Репутация: 1
Откуда: Украина, Харьков
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

Ворон226 писал(а):В HAL:
net strok motion.program-line имя подпрограммы.strok
А net что, не только пины и сигналы соединяет?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение nkp »

Ворон226 писал(а):а как бы этот номер строки из motion.program-line передать в скрипт в качестве переменной?

Код: Выделить всё

import linuxcnc
s = linuxcnc.stat()
s.poll()
ln=s.current_line
ln - это и есть номер активной линии
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение nkp »

то есть в нужный момент вызываем:

Код: Выделить всё

s.poll()
эта функция обновляет все данные состояния емс
после этого можно просмотреть-воспользоваться любыми данными
(в том числе текущей строкой)
zilk
Опытный
Сообщения: 139
Зарегистрирован: 07 янв 2012, 19:05
Репутация: 1
Откуда: Украина, Харьков
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

nkp, оказывается, тема уже подымалась... Python в LinuxCnC #2
:hehehe:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение nkp »

zilk писал(а):nkp, оказывается, тема уже подымалась.
да - тему я же и поднимал ;)
но решение вопроса было найдено кривое(имхо)
а тут все встроенными командами
открой axis.py - там те же функции:
например вот кусок (для просмотра содержимого нажмите на ссылку)
def estop_clicked(event=None):
s.poll()
if s.task_state == linuxcnc.STATE_ESTOP:
c.state(linuxcnc.STATE_ESTOP_RESET)
else:
c.state(linuxcnc.STATE_ESTOP)

def onoff_clicked(event=None):
s.poll()
if s.task_state == linuxcnc.STATE_ESTOP_RESET:
c.state(linuxcnc.STATE_ON)
else:
c.state(linuxcnc.STATE_OFF)
и не только Axis :)
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

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

Проблема в следующем:

Хочу использовать motion.distance-to-go для выключения двигателя насоса за 10 мм до окончания движения по контуру

Понятно, что нужно организовать процедуру сравнения значения motion.distance-to-go с "10" и по совпадению скинуть motion.analog-out-00 в ноль (у меня этот пин используется в управлении насосом). Но вот синтаксис этого "действия" мной ещё не освоен...
Пробовал самостоятельно (в другом вопросе) "поиграться" с пинами motion.spindle-on и motion.spindle-reverse, но "в лоб" не получилось... Похоже пришло время научиться.

Народ! Подскажите - КАК прописать вышеописанную процедуру сравнения?
Хочешь быть счастливым? Будь им!
Аватара пользователя
aegis
Мастер
Сообщения: 3171
Зарегистрирован: 22 мар 2012, 06:59
Репутация: 1810
Настоящее имя: Михайло
Откуда: Україна, Конотоп=>Запоріжжя=>Харьків

Re: FAQ по EMC2 LinuxCNC

Сообщение aegis »

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

Re: FAQ по EMC2 LinuxCNC

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

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

Re: FAQ по EMC2 LinuxCNC

Сообщение Nick »

Ворон226 писал(а):Понятно, что нужно организовать процедуру сравнения значения motion.distance-to-go с "10" и по совпадению скинуть motion.analog-out-00 в ноль (у меня этот пин используется в управлении насосом). Но вот синтаксис этого "действия" мной ещё не освоен...
Для этого есть компонент near: http://linuxcnc.org/docs/html/man/man9/near.9.html
На один пин подаем motion.distance-to-go, на второй 0, в difference расстояние на котором выключать шпиндель.

Только мне кажется, что motion.distance-to-go показывает сколько осталось ехать до конца текущего кадра и поэтому использовать его так просто может не получится ... хотя может я и ошибаюсь.
zilk
Опытный
Сообщения: 139
Зарегистрирован: 07 янв 2012, 19:05
Репутация: 1
Откуда: Украина, Харьков
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

Здравствуйте люди!
Подскажите, кто знает, что конкретно включает пин halui.program.optional-stop.on? При установке пина в 1 - ничего не происходит, отсюда вопрос - зачем он вообще нужен, в каких ситуациях используется?
Описание пина такойже длины, как и его название... :wik:

Спасибо!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение nkp »

Выделение(005).jpg (1819 просмотров) <a class='original' href='./download/file.php?id=11988&mode=view' target=_blank>Загрузить оригинал (290.61 КБ)</a>
сам пин дублирует управление кнопкой меню
при нажатой - пауза при встрече в ж-коде команды М1
при "отжатой" - игнорирует М1
можно использовать при первом прогоне программы (еще не проверенной) и т.д.
zilk
Опытный
Сообщения: 139
Зарегистрирован: 07 янв 2012, 19:05
Репутация: 1
Откуда: Украина, Харьков
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

nkp, спасибо! значит не пригодится...
Нет свежих мыслей по поводу горячей замены инструмента в ходе выполнения программы?
Если продолжать программу после замены инструмента именно с точки останова, без отката, какая в этом случае может быть вероятность запороть деталь? в чем могут быть недостатки такого варианта?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение nkp »

zilk писал(а):по поводу горячей замены инструмента
это в продолжение вот этого???
LinuxCNC реверс Gкода #70
zilk
Опытный
Сообщения: 139
Зарегистрирован: 07 янв 2012, 19:05
Репутация: 1
Откуда: Украина, Харьков
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

nkp писал(а):это в продолжение вот этого???
Да, этого, но я не совсем понял, чем все закончилось... Это все работает без вопросов, или есть какие-то недоделки? :wik:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение nkp »

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

Re: FAQ по EMC2 LinuxCNC

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

Nick писал(а):
Ворон226 писал(а):Понятно, что нужно организовать процедуру сравнения значения motion.distance-to-go с "10" и по совпадению скинуть motion.analog-out-00 в ноль (у меня этот пин используется в управлении насосом). Но вот синтаксис этого "действия" мной ещё не освоен...
Для этого есть компонент near: http://linuxcnc.org/docs/html/man/man9/near.9.html
На один пин подаем motion.distance-to-go, на второй 0, в difference расстояние на котором выключать шпиндель.

Только мне кажется, что motion.distance-to-go показывает сколько осталось ехать до конца текущего кадра и поэтому использовать его так просто может не получится ... хотя может я и ошибаюсь.
Пробую самостоятельно прописать этот процесс. Прошу проверить и ткнуть носом - где я ошибаюсь?

Логика работы такая:
Сравниваю значение motion.distance-to-go с значением "ползунка" DIST на панели управления. Но сравниваю только тогда, когда это сравнение разрешено G-кодом через motion.analog-out-00. Получаю управляющий сигнал upr, который передаю в подпрограмму расчёта скорости насоса vel и далее на stepgen.3.vel

Теперь по шагам что и где делаю:

1. Пропишу "ползунок" в velxml.xml:

Код: Выделить всё

  <?xml version="1.0" encoding="UTF-8" ?> 
- <pyvcp>
- <vbox>
  <bd>3</bd> 
- <label>
  <text>"VELPUMP"</text> 
  <font>("Helvetica",16)</font> 
  </label>
- <scale>
  <font>("Helvetica",14)</font> 
  <halpin>"velpump"</halpin> 
  <resolution>0.1</resolution> 
  <orient>VERTICAL</orient> 
  <max_>3</max_> 
  <min_>0.1</min_> 
  </scale>
- <button>
  <padx>16</padx> 
  <halpin>"b1"</halpin> 
  <text>"cw"</text> 
  <font>('Helvetica',10)</font> 
  </button>
- <button>
  <padx>16</padx> 
  <halpin>"b2"</halpin> 
  <text>"ccw"</text> 
  <font>('Helvetica',10)</font> 
  </button>
- [b]<label>
  <text>"DIST"</text> 
  <font>("Helvetica",16)</font> 
  </label>[/b]
- [b]<scale>
  <font>("Helvetica",14)</font> 
  <halpin>"dist"</halpin> 
  <resolution>0.5</resolution> 
  <orient>VERTICAL</orient> 
  <max_>10</max_> 
  <min_>1</min_> 
  </scale>[/b]
  </vbox>
  </pyvcp>
2. Пропишу "ползунок в custom_postgui.hal (последняя строка):

Код: Выделить всё

net  pyvcp1    vel.setpyvcp   pyvcp.velpump-f  
    net  b1      pyvcp.b1     mux4.0.sel1
    net  b2      pyvcp.b2     mux4.0.sel0 
net  pyvcp2    near.0.difference   pyvcp.dist-f   
3. Затем в hal:

Код: Выделить всё

    loadrt near 
    loadrt mult2 

    addf near.0   servo-thread
    addf mult2.0   servo-thread

       setp  near.0.in2  0

    net nearout  near.0.out  vel.upr

       setp  mult2.0.in0  motion.distance-to-go
       setp  mult2.0.in1  motion.analog-out-00

    net multout  mult2.out  near.0.in1
    net velout  vel.velout  stepgen.3.velocity-cmd 
Нет ли явных ошибок?

(пора подумать об испытательном макете-имитаторе на дому ;) )

На всякий случай прилагаю комплект файлов:
Вложения
вариант11останов.rar
(1.73 КБ) 344 скачивания
Хочешь быть счастливым? Будь им!
Ответить

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