Страница 20 из 48

[WIKI] FAQ по EMC2 LinuxCNC

Добавлено: 25 окт 2010, 09:53
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
Это незавершенный раздел, Вы можете помочь в его оформлении.

Re: FAQ по EMC2 LinuxCNC

Добавлено: 10 фев 2013, 14:19
nkp
для удобства (имхо) работы с питон очень помогает дополнительный модуль в gedit:
Выделение(027).jpg (1997 просмотров) <a class='original' href='./download/file.php?id=11798&mode=view' target=_blank>Загрузить оригинал (322.36 КБ)</a>
после его установки консоль питона вызывается прямо в gedit по Ctrl+F9
это намного быстрей ,чем пользовать обычный терминал
работают привычные сочетания клавиш для копипаста

Re: FAQ по EMC2 LinuxCNC

Добавлено: 10 фев 2013, 15:12
zilk
Отлично, спасибо! Буду разбираться с питоном для следующей безумной идеи... :freak:

Re: FAQ по EMC2 LinuxCNC

Добавлено: 10 фев 2013, 16:09
zilk
nkp писал(а):так что нужно "запоминать" последнюю строку
:thinking: а как бы этот номер строки из motion.program-line передать в скрипт в качестве переменной?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 10 фев 2013, 16:15
Ворон226
Может так?

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

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

h = hal.component("имя подпрограммы")
h.newpin("strok", hal.HAL_FLOAT, hal.HAL_IN)
...

Re: FAQ по EMC2 LinuxCNC

Добавлено: 10 фев 2013, 16:19
zilk
Ворон226 писал(а):В HAL:
net strok motion.program-line имя подпрограммы.strok
А net что, не только пины и сигналы соединяет?

Re: FAQ по EMC2 LinuxCNC

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

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

import linuxcnc
s = linuxcnc.stat()
s.poll()
ln=s.current_line
ln - это и есть номер активной линии

Re: FAQ по EMC2 LinuxCNC

Добавлено: 10 фев 2013, 16:25
nkp
то есть в нужный момент вызываем:

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

s.poll()
эта функция обновляет все данные состояния емс
после этого можно просмотреть-воспользоваться любыми данными
(в том числе текущей строкой)

Re: FAQ по EMC2 LinuxCNC

Добавлено: 10 фев 2013, 16:59
zilk
nkp, оказывается, тема уже подымалась... Python в LinuxCnC #2
:hehehe:

Re: FAQ по EMC2 LinuxCNC

Добавлено: 10 фев 2013, 17:40
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 :)

Re: FAQ по EMC2 LinuxCNC

Добавлено: 13 фев 2013, 01:55
Ворон226
Проблема в следующем:

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

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

Народ! Подскажите - КАК прописать вышеописанную процедуру сравнения?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 13 фев 2013, 07:42
aegis
Ворон226, ну и проблему создаете. у ручками прописать м5 в нужном месте религия не позволяет? даже если длинный отрезок проходите, разбить его на 2 части и между ними и выключить

Re: FAQ по EMC2 LinuxCNC

Добавлено: 13 фев 2013, 11:43
Ворон226
Дык, насколько я понял, тут собрались те люди, которые хотят "попивать пивко, пока ЧПУ точит титьки"? ;)
Зачем ручками прописывать полторы сотни контуров? Не проще ли один раз сконфигурировать систему так, чтобы одним "ползунком" на панели подстраивать параметр станка?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 13 фев 2013, 16:40
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 показывает сколько осталось ехать до конца текущего кадра и поэтому использовать его так просто может не получится ... хотя может я и ошибаюсь.

Re: FAQ по EMC2 LinuxCNC

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

Спасибо!

Re: FAQ по EMC2 LinuxCNC

Добавлено: 15 фев 2013, 19:03
nkp
Выделение(005).jpg (1914 просмотров) <a class='original' href='./download/file.php?id=11988&mode=view' target=_blank>Загрузить оригинал (290.61 КБ)</a>
сам пин дублирует управление кнопкой меню
при нажатой - пауза при встрече в ж-коде команды М1
при "отжатой" - игнорирует М1
можно использовать при первом прогоне программы (еще не проверенной) и т.д.

Re: FAQ по EMC2 LinuxCNC

Добавлено: 15 фев 2013, 19:25
zilk
nkp, спасибо! значит не пригодится...
Нет свежих мыслей по поводу горячей замены инструмента в ходе выполнения программы?
Если продолжать программу после замены инструмента именно с точки останова, без отката, какая в этом случае может быть вероятность запороть деталь? в чем могут быть недостатки такого варианта?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 15 фев 2013, 19:30
nkp
zilk писал(а):по поводу горячей замены инструмента
это в продолжение вот этого???
LinuxCNC реверс Gкода #70

Re: FAQ по EMC2 LinuxCNC

Добавлено: 15 фев 2013, 20:24
zilk
nkp писал(а):это в продолжение вот этого???
Да, этого, но я не совсем понял, чем все закончилось... Это все работает без вопросов, или есть какие-то недоделки? :wik:

Re: FAQ по EMC2 LinuxCNC

Добавлено: 15 фев 2013, 20:39
nkp
zilk писал(а):чем все закончилось
всё только начинается :)
----------------
проблема в единственном - как привязать инструмент после замены
вот эта доработка позволяет в режиме авто отъехать в любое место для замены затупившегося-поломанного инструмента
но не выходя из этого режима (авто) мы не можем поменять параметр ,в котором хранится длина инструмента(и не только)
если инструмент одних размеров - то вперед...))))

Re: FAQ по EMC2 LinuxCNC

Добавлено: 15 фев 2013, 20:56
Ворон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 
Нет ли явных ошибок?

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

На всякий случай прилагаю комплект файлов: