Страница 22 из 48
[WIKI] FAQ по EMC2 LinuxCNC
Добавлено: 25 окт 2010, 09:53
Nick
(для просмотра содержимого нажмите на ссылку)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 не сможет контролировать пределы осей и появится вероятность их превышения, что может привести к поломке станка

!
Q: LinuxCNC не запускается, выдает ошибку RTAI[hal]: ERROR, LOCAL APIC CONFIGURED BUT NOT AVAILABLE/ENABLED.
A: Проблема с установкой EMC2 #48
Это незавершенный раздел, Вы можете помочь в его оформлении.
Re: FAQ по EMC2 LinuxCNC
Добавлено: 17 фев 2013, 17:15
Ворон226
Достаточно реализовать такую функцию:
Начальное состояние выходного триггера - TRUE (bit)
Триггер сбрасывается в FALSE при сумме входных сигналов = 0
Формат входных сигналов - float
Триггер возвращается в TRUE при входном сигнале in1, равном 0.
В чём писать? Как писать? Когда-то изучал Fortran, Си, PL, с логикой Бэйсика тоже знаком...
Нет ли образца, например, Исключающего ИЛИ и любого компонента с сигналами float ?
А там я бы постарался разобраться... И вообще - нет ли "стандарта" написания компонента?
Re: FAQ по EMC2 LinuxCNC
Добавлено: 17 фев 2013, 17:22
nkp
Ворон226 писал(а):И вообще - нет ли "стандарта" написания компонента?
http://www.linuxcnc.org/docs/2.5/html/h ... odule.html
создаем нужные пины
по команде активировать проверу начинаем сравнивать dtg с уставкой
если меньше уставки - сигнал на выход
Ворон226 писал(а): чём писать? Как писать?
питон
ты уже правил такой компонент (vel.py)
(может даже в нем можно добавить эту проверку)
Re: FAQ по EMC2 LinuxCNC
Добавлено: 17 фев 2013, 17:54
zilk
Ворон226 писал(а):мне-то нужно оперативно менять значение этого параметра! Что делать?
Заменить в исходнике компонента near одну строчку, изменив параметр на пин, и переустановить его...
(для просмотра содержимого нажмите на ссылку)Код: Выделить всё
component near "Determine whether two values are roughly equal.";
pin in float in1_;
pin in float in2_;
pin in float difference; # вот эту строчку изменили (этот коммент лучше убрать...)
param rw float scale=1;
pin out bit out """
\\fBout\\fR is true if \\fBin1\\fR and \\fBin2\\fR are within a factor of
\\fBscale\\fR (i.e., for in1 positive, in1/scale <= in2 <= in1*scale), OR
if their absolute difference is no greater than \\fBdifference\\fR (i.e.,
|in1-in2| <= difference). \\fBout\\fR is false otherwise.""";
function _;
license "GPL";
;;
#include "rtapi_math.h"
FUNCTION(_) {
double in1 = in1_, in2 = in2_;
if(in1 < 0) {
in1 = -in1;
in2 = -in2;
}
if((scale > 1 && in1/scale <= in2 && in2 <= in1*scale) || fabs(in1-in2) <= difference)
out = 1;
else
out = 0;
}

Re: FAQ по EMC2 LinuxCNC
Добавлено: 17 фев 2013, 18:00
nkp
zilk писал(а):и переустановить его...
а может лучше "старый" оставить,а в "новом" исправить и установить (ну с другим названием конечно)
Re: FAQ по EMC2 LinuxCNC
Добавлено: 17 фев 2013, 18:06
zilk
nkp писал(а):а может лучше "старый" оставить
может и так, но исправленный вариант будет универсальным, т.к. пин можно пихать куда угодно, а командой setp можно устанавливать значение и параметра, и отключенного пина. А у человека вон какие проблемы из-за этого...

Re: FAQ по EMC2 LinuxCNC
Добавлено: 17 фев 2013, 19:06
Ворон226
Ну смотрите...
Вариант 1 (переделка стандартного near - удалил scale, и вход difference стал пином, а не параметром)
Код: Выделить всё
component near "Determine whether two values are roughly equal.";
pin in float in1_;
pin in float in2_;
pin in float difference;
pin out bit out """
\\fBout\\fR if their absolute difference is no greater than \\fBdifference\\fR (i.e.,
|in1-in2| <= difference). \\fBout\\fR is false otherwise.""";
function _;
license "GPL";
;;
#include "rtapi_math.h"
FUNCTION(_) {
double in1 = in1_, in2 = in2_;
if(in1 < 0) {
in1 = -in1;
in2 = -in2;
}
if(fabs(in1-in2) <= difference)
out = 0;
else
out = 1;
}
Вариант 2 (типа подпрограмма

):
Код: Выделить всё
#!/usr/bin/python
import hal
h = hal.component("dist")
h.newpin("in1", hal.HAL_FLOAT, hal.HAL_IN) #pin for motion.distance-to-go
h.newpin("in2", hal.HAL_FLOAT, hal.HAL_IN) #pin for difference
h.newpin("out", hal.HAL_BIT, hal.HAL_OUT) #pin for enable
h.ready()
try:
while 1:
if 0 <= abs(h['in1'] - h['in2']) <= h['in2'] :
h['out']=FALSE
else:
h['out']=TRUE
except KeyboardInterrupt:
raise SystemExit
Re: FAQ по EMC2 LinuxCNC
Добавлено: 17 фев 2013, 19:43
nkp
Ворон226 писал(а):Ну смотрите...
первый вариант как бы предпочтительней - получаем компонент RT
Ворон226 писал(а):Вариант 2 (типа подпрограмма ):
почему "подпрограмма" - тоже компонент ,только пользовательский и не требует компиляции
загружай оба - проверяй

Re: FAQ по EMC2 LinuxCNC
Добавлено: 17 фев 2013, 20:28
Ворон226
"Загружай!" - это опять сильно сказано...
Как, куда? ну и дальше по списку...
А я уж постараюсь разобраться

Re: FAQ по EMC2 LinuxCNC
Добавлено: 17 фев 2013, 20:42
nkp
ну со вторым вариантом наверно вопросов нет
сохраняем в файл dist.py и ложим его в папку с конфигом
в хал : loadusr -Wn dist python dist.py
проверяем в halshow появившийся компонент dist и соответствующие пины
-----------
с первым вариантом точно не скажу - поскольку если что и менял в исходниках - то потом собирал емс целиком
пользовать нужно
comp
скорей всего так:
comp --install name.comp
zilk с этим делом на "ты"

Re: FAQ по EMC2 LinuxCNC
Добавлено: 17 фев 2013, 21:31
Ворон226
Второй вариант подготовил для проверки. Завтра посмотрим... Кстати, начал пользовать hal meter - интересно...
А с первым, без помощи спеца - точно не прорвусь. Я ведь с системными командами Линукса ваще не знаком...
Re: FAQ по EMC2 LinuxCNC
Добавлено: 17 фев 2013, 21:39
nkp
немного еще про comp
если следовать этому - то помещаем name.comp в домашнюю папку
затем открываем терминал,и там пишем:
Re: FAQ по EMC2 LinuxCNC
Добавлено: 18 фев 2013, 09:25
Ворон226
При запуске второго варианта Линукс ругается:
Код: Выделить всё
111.hal:1: Warning: file contains DOS-style line endings.
File "dist.py", line2
import hal
IndentationError: unexpected indent
111.hal:114: python exited without becoming ready
с какого конца браться?
loadusr -Wn vel python vel.py
loadusr -Wn dist python dist.py
loadrt mux4
loadrt and2
строка 114 выделена.
Re: FAQ по EMC2 LinuxCNC
Добавлено: 18 фев 2013, 11:28
nkp
здесь скорей всего ругается сам питон на неправильный отступ в dist.py
(питон строго следит за отступами

)
выложи не текст этого файла - а заархивированный файл полностью
(заархивированный - так как расширение .py не пройдет )
Re: FAQ по EMC2 LinuxCNC
Добавлено: 18 фев 2013, 15:14
Nick
nkp писал(а):comp --install name.comp
только лучше sudo comp --install name.comp
Ворон226 писал(а):IndentationError: unexpected indent
Да, там у тебя перед import hal стоит пробел...
в питоне по начальным пробелам определяются границы циклов, операторов и прочего.
Re: FAQ по EMC2 LinuxCNC
Добавлено: 18 фев 2013, 15:15
Ворон226
файл dist.py в "прищепке"...
Ещё вопрос:
Хочу я перемножить ТРИ пина. Вроде бы нет проблем.
loadrt mult2
addf mult2.0 servo-thread
addf mult2.1 servo-thread
net ain a mult2.0.in0
net bin b mult2.0.in1
net multout mult2.0.out mult2.1.in0
net cin c mult2.1.in1
net out mult2.1.out d
где a, b, c, d - пины
А вот Линукс ругается на
addf mult2.1 servo-thread ...
Аналогично, пробовал с суммированием (sum2) - не получается! Не хочет Линукс принимать sum2.1
Неужели нельзя использовать несколько функций? Вроде в описании эта возможность не исключается...
Re: FAQ по EMC2 LinuxCNC
Добавлено: 18 фев 2013, 15:20
Ворон226
Nick писал(а):... Да, там у тебя перед import hal стоит пробел...
в питоне по начальным пробелам определяются границы циклов, операторов и прочего.
Похоже и в другом месте такая же причина:
я вставил логическую часть в работающий vel.py и получил ругательство на "else"...
Может тоже пробелы? И где про пробелы почитать, если это так важно? (пока почитываю -
http://ru.wikibooks.org/wiki/%D3%F7%E5% ... Python_2.6)
Re: FAQ по EMC2 LinuxCNC
Добавлено: 18 фев 2013, 15:22
nkp
Ворон226 писал(а):loadrt mult2
надо:
loadrt mult2 count=2
то есть загружаем два компонента mult2
===============
-----------
Ворон226 писал(а):если это так важно?
не то слово

Re: FAQ по EMC2 LinuxCNC
Добавлено: 18 фев 2013, 15:29
nkp
Ворон226 писал(а):И где про пробелы почитать, если это так важно?
вот например
и вот !?
Re: FAQ по EMC2 LinuxCNC
Добавлено: 18 фев 2013, 18:58
Ворон226
nkp писал(а):надо:
loadrt mult2 count=2
то есть загружаем два компонента mult2
Сделано! Работает! Сразу устранил подпрограмму расчета скорости насоса.
Пользовательский компонент не заработал!
Крутил его и так, и сяк...
А оказалось знаешь что?
В if вместо FALSE и TRUE прописал 0 и 1 - работает!
И кто может объяснить в чём дело? Типа, не выпендривайся, а пиши прямо: нолик и единичка?

Re: FAQ по EMC2 LinuxCNC
Добавлено: 18 фев 2013, 19:06
nkp
Ворон226 писал(а):TRUE
а вот так: True ???