Страница 17 из 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

Добавлено: 12 янв 2013, 02:19
zilk
nkp писал(а):а как до такого можно додуматься??????
Если что-то сильно достанет, можно до чего угодно додуматься... :)

Кстати, насчет 3-х парпортов для входов - это круто, но надеюсь, что скоро появится возможность использовать ОДИН вход парпорта для приема неограниченного (в разумных пределах) количества команд, причем ОДНОВРЕМЕННО! :hehehe: Сейчас допиливаю конфигурацию железо - HAL, уперся в написание хитрого компонента - не выходит каменный цветок, языками не владею...

Re: FAQ по EMC2 LinuxCNC

Добавлено: 12 янв 2013, 02:27
Serg
Последовательный интерфейс чтоль на его пинах сделал?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 12 янв 2013, 02:33
zilk
UAVpilot писал(а):Последовательный интерфейс чтоль на его пинах сделал?
Да, что-то типа приемника последовательности с время-импульсным кодированием.. :hehehe:

Re: FAQ по EMC2 LinuxCNC

Добавлено: 12 янв 2013, 05:20
Сергей Саныч
Nick писал(а):
nkp писал(а):так как задержка более 2700000
Это же 2.7 секунды! Такое реально вообще???
Это 2,7 миллисекунды :geek:

Re: FAQ по EMC2 LinuxCNC

Добавлено: 12 янв 2013, 09:21
nkp
zilk писал(а):что-то типа приемника последовательности с время-импульсным кодированием
а я задумался над такой конфигурацией:
5и25 + 7и77 + modbus
но получается Lcnc работает slave только в режиме TCP/IP
надо во всем этом разобраться...

Re: FAQ по EMC2 LinuxCNC

Добавлено: 19 янв 2013, 00:07
zilk
Здравствуйте!
Подскажите, знатоки программирования на С, ответ на позорный вопрос дилетанта: каким образом программно реализовать временную задержку с изменением состояния выходного бита, попроще, без подключения всяких библиотек и пр. хрени? Начало временного интервала - это начало сервопериода, выход устанавливается в TRUE, далее какая-то задержка в нс, в конце интервала выход устанавливается в FALSE. Интернет о такой проблеме ничего не знает...
Пытался по аналогии использовать исходники компонента EDGE http://git.linuxcnc.org/gitweb?p=linuxc ... mp;hb=HEAD но не получается, хоть тресни... :cry:

Re: FAQ по EMC2 LinuxCNC

Добавлено: 19 янв 2013, 12:52
Nick
Это для LinuxCNC?
Если да - то там обычно это делается слегка по-другому. Функция твоего компонента прописывается в поток, скажем servo-thread, и она будет вызываться раз в servothread. Т.е. задержку самому вооще писать не надо.

PS вроде как есть nanosleep() и sleep()

Re: FAQ по EMC2 LinuxCNC

Добавлено: 19 янв 2013, 14:18
zilk
Nick, мне как раз и надо разделить сервоцикл на две части задержкой и чтобы через параметр можно было устанавливать ее величину.
Вроде в EDGE делается подобное, но там отсчет задержки начинается от переднего фронта входного импульса, причем задержка меряется в каких-то попугаях под названием period, по-видимиму связанных с величиной base-thread, подробнее об этом ничего не нашел...
А мне надо тупо отсчитывать задержку от начала сервоцикла, устанавливая в конце 1 -> 0
Вот этот компонент, я как его ни крутил под свою задачу, ничего не выходит, не могу сообразить где засада - или весь цикл на выходе 0, или 1, независимо от установленной задержки... :wik:
(для просмотра содержимого нажмите на ссылку)

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

component edge "Edge detector";

pin in bit in;
pin out bit out "Goes high when the desired edge is seen on 'in'";
pin out bit out_invert "Goes low when the desired edge is seen on 'in'";

param rw bit in_edge=TRUE "Selects the desired edge: TRUE means falling, FALSE means rising";
param rw signed out_width_ns=0 "Time in nanoseconds of the output pulse";

param r signed time_left_ns "Time left in this output pulse";
param r bit last_in "Previous input value";

function _ nofp "Produce output pulses from input edges";
license "GPL";
;;

FUNCTION(_){ 
    int new_in = in;
    if(in_edge) new_in = ! new_in;
    if(new_in && new_in != last_in) {
        time_left_ns = out_width_ns;
        out = 1; out_invert = 0;
    } else if(time_left_ns > 0) {
        time_left_ns -= period;
        out = 1; out_invert = 0;
    } else {
        time_left_ns = 0;
        out = 0; out_invert = 1;
    }
    last_in = new_in;
}


Re: FAQ по EMC2 LinuxCNC

Добавлено: 19 янв 2013, 14:27
nkp
а что этот EDGE делает???

Re: FAQ по EMC2 LinuxCNC

Добавлено: 19 янв 2013, 14:52
zilk
nkp писал(а):а что этот EDGE делает???
По переднему фронту входного сигнала формирует импульс с заданной длительностью в наносекундах. Есть еще аналогичный компонент ONESHOT, но он для больших задержек, больших длительности сервопериода.

Re: FAQ по EMC2 LinuxCNC

Добавлено: 19 янв 2013, 15:37
Nick
В принципе можно тем же period воспользоваться, и написать что-то вроде того же edge:
Functions are implicitly passed the period parameter which is the time in nanoseconds of the last period to execute the comp. Functions which use floating-point can also refer to fperiod which is the floating-point time in seconds, or (period*1e-9). This can be useful in comps that need the timing information.
http://www.linuxcnc.org/docs/html/hal/c ... parameters

А что в итоге этим компонентом должно управляться?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 19 янв 2013, 20:00
zilk
Nick писал(а):В принципе можно тем же period воспользоваться, и написать что-то вроде того же edge:
Только что проверил - не работает EDGE, если запускать его от начала сервоцикла! :pssdoff: запускаю его от charge_pump, получается, каждый цикл на его выходе состояние меняется на противоположное - на подключенном выходе парпорта меандр, а EDGE от его фронта НЕ СРАБАТЫВАЕТ!
Что делать???

PS ёханыйбабай... EDGE надо подключать к base-thread, тогда все работает! и нигде ни слова об этом.. :wik:
Отсюда вопрос - насколько мешают работе LINUXCNC компоненты, кроме парпорта, подключенные к base-thread? есть ли какие ограничения или рекомендации на этот счет, например, по количеству таких компонентов?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 21 янв 2013, 08:48
Nick
До тех пор, пока не вылазит ошибка unexpected delay можно пихать :).

Да, его надо в base thread пихать, или использовать переменную fperiod и servo-thread. Но если грузить компонент в servo-thread, то не выйдет менять состояние пина несколько раз за период.

Так а что ты в итоге с этим сигналом хочешь делать?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 21 янв 2013, 10:34
zilk
Nick писал(а): Так а что ты в итоге с этим сигналом хочешь делать?
Этим сигналом я хочу проверить, произошло ли событие в заданное время в течение сервоцикла, а если конкретнее - из последовательности надо выделить синхронизирующий импульс

Re: FAQ по EMC2 LinuxCNC

Добавлено: 21 янв 2013, 10:40
Nick
Может watchdog поможет? http://linuxcnc.org/docs/html/man/man9/watchdog.9.html
А что потом по этому импульсу делать?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 21 янв 2013, 11:01
zilk
Меня не покидает бредовая идея сделать последовательный канал передачи данных от пульта с кучей кнопок в LINUXCNC, в будущем, возможно и дуплексный... :hehehe:

Re: FAQ по EMC2 LinuxCNC

Добавлено: 21 янв 2013, 11:48
Serg
В смысле юзерских кнопок? А зачем для этого в RT влезать?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 21 янв 2013, 12:37
zilk
UAVpilot писал(а):В смысле юзерских кнопок? А зачем для этого в RT влезать?
Предложите другой вариант через один пин параллельного порта связать LINUXCNC и десяток кнопок с парой переключателей на 4-8 положений на пульте. Поставить еще одну плату расширения LPT можно не предлагать..

Re: FAQ по EMC2 LinuxCNC

Добавлено: 21 янв 2013, 13:50
Nick
USB? Если кнопки user space, то им realtime не нужен, значит можно через usb работать...

Re: FAQ по EMC2 LinuxCNC

Добавлено: 21 янв 2013, 16:49
Serg
Вот именно! Дался вам этот пин LPT-порта. Что других портов на компе нет? Зачем в рукопашную реализовывать транспортный протокол, влезая при этом в base-thread, если рядом наверняка есть их аппаратные реализации?