[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
Это незавершенный раздел, Вы можете помочь в его оформлении.
zilk
Опытный
Сообщения: 139
Зарегистрирован: 07 янв 2012, 19:05
Репутация: 1
Откуда: Украина, Харьков
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

UAVpilot писал(а):Что других портов на компе нет?
Ну если для поговорить, то согласен - портов разных хватает. А если конкретно - просьба по пунктам пояснить, каким образом мне подсоединить к этим портам свои 20 кнопок, чтобы они соответствовали командам, которые мне необходимы? В частности, каким боком мне прицепить их к USB? Написть самостоятельно под это дело драйвер или тому подобное - не предлагать! :hehehe:
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение Serg »

А самостоятельно их присоедить предлагать можно? :hehehe:

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

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

UAVpilot писал(а):Драйвер COM-порта в системе уже есть, даже того, который поверх USB. Библиотеки для работы с RS232 и USB на разных микроконтроллерах великое множество. Даже тут есть тема как подобные кнопки с HAL скрестить.
Спасибо! Теперь все совершенно конкретно и понятно, даже новичку!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение Nick »

Ну все же просто :hehehe:, берем скажем ту же arduino, и используем уже готовый компонент и получаем кучу аналоговых и дискретных пинов.
http://www.cnc-club.ru/forum/viewtopic.php?f=15&t=958

Можно и написать что-то свое на основе этого компонента.

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

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

Nick писал(а):А что будет на аппаратной части?
На аппаратной части будет пару микросхем мультиплексора 8->1 и еще по мелочи, кстати, аппаратная чать уже работает..
А вот программная часть хромает - не могу понять, как защелкнуть выходной бит до тех пор, пока не изменятся условия для его перехода в другое состояние?
Например, счетчик считает по переднему фронту, и в зависимости от наличия на входе данных, соответствующий выход устанавливается в 0 или 1. И состояние этого выхода должно сохраняться до следующего его опроса, допустим, через 16 сервоциклов, а он у меня сбрасывается в начале следующего... :wik: :monkey:

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

	if (clk && !oldclk) i++;

	if (data_in) out(i) = 1;
	else out(i) = 0;
	
	oldclk = clk;
	count = i;
PS. Я слово arduino с трудом выговариваю - как же я, по-твоему, его программировать буду?? :hehehe:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение Nick »

zilk писал(а):out(i) = 1;
Хмм... я вот эту строчку не понимаю.... там не out должно быть?

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

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

Получилось таким образом - добавил новую переменную, значение которой присваиваю соответствующему выходу под номером i. Теперь состояние этого выхода запоминается до следующего цикла:
(для просмотра содержимого нажмите на ссылку)

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

component demux;

pin in bit clk;
pin in bit data_in;
pin in bit enable=TRUE;
pin out bit out##[16];

variable int oldclk;
variable int select;
variable int first = 1;
function _ nofp;

license "GPL";
;;

FUNCTION(_) {
	int i = count;

	if (first) {
		oldclk = clk;
		first = 0;
	}
	if (clk && !oldclk) {
		i++;
		if (data_in) select = 1;
		else select = 0;
	}
	if ((!clk && data_in) || i > 15) i = 0;

	out(i) = select;
	oldclk = clk;
	count = i;
}
А почему out(i) не правильно? Вроде как в квадратных скобках задается общий размер массива, а в круглых - его элемент под соотв. номером. По крайней мере, в других компонентах так работает, оттуда я это и содрал... :freak:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение Nick »

Т.е. если убрать i и все манипуляции делать просто c count, то его значение не сохраняется???
zilk писал(а):А почему out(i) не правильно? Вроде как в квадратных скобках задается общий размер массива, а в круглых - его элемент под соотв. номером. По крайней мере, в других компонентах так работает, оттуда я это и содрал...
Да? Ну я Си не знаю, может в нем и так :freak:.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение Serg »

Квадратные скобки - это массив, круглые скобки - это функция.
В объявлении массива в квадратных скобках задаётся его размер, при операциях над массивом в квадратных скобках указывается номер элемента массива.
Обращение к элементу массива как out(i) синтаксически неверно и приведёт к разнообразным глюкам. Сейчас это работает из-за особенностей компилятора C по размещению переменных в памяти и тут просто совпало правильно. Но стоит например в этой-же функции объявить ещё переменных после массива и всё сломается.

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

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

UAVpilot писал(а):при операциях над массивом в квадратных скобках указывается номер элемента массива.
Обращение к элементу массива как out(i) синтаксически неверно
Заменил в вышеприведенном коде круглые скобки на квадратные, т.е. написал out вместо out(i) - при компиляции был послан подальше с указанием на ошибку... :wik:
Т.е. если убрать i и все манипуляции делать просто c count, то его значение не сохраняется???

Выяснил, что состояние выходов out(i) сохраняется до следующей проверки, если сначала записывать, в соответствии с входными данными, значения на выходы, а после этого проверять, не пора ли счетчик сбросить в ноль, т.е. if ((!clk && data_in) || i > 15) i = 0;
Если делать наоборот, то выходы сбрасываются после окончания сервоцикла. В общем, темный лес... :cheesy:
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение Serg »

zilk писал(а):Заменил в вышеприведенном коде круглые скобки на квадратные, т.е. написал out вместо out(i) - при компиляции был послан подальше с указанием на ошибку... :wik:

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

Re: FAQ по EMC2 LinuxCNC

Сообщение Nick »

Так это не ардуино - это компилятор от LinuxCNC вроде...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение Serg »

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

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

UAVpilot писал(а):Тогда показывайте текст ошибки.
Если это вопрос ко мне, то пожалуйста:
(для просмотра содержимого нажмите на ссылку)

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

zilk@atom:~$ cd ~/linuxcnc
zilk@atom:~/linuxcnc$ sudo comp --install demux.comp
make KBUILD_EXTRA_SYMBOLS=/usr/realtime-2.6.32-122-rtai/modules/linuxcnc/Module.symvers -C /usr/src/linux-headers-2.6.32-122-rtai SUBDIRS=`pwd` CC=gcc V=0 modules
make[1]: Вход в каталог `/usr/src/linux-headers-2.6.32-122-rtai'
  CC [M]  /tmp/tmpG4qw50/demux.o
demux.comp: In function ‘_’:
demux.comp:30: error: ‘out’ undeclared (first use in this function)
demux.comp:30: error: (Each undeclared identifier is reported only once
demux.comp:30: error: for each function it appears in.)
make[2]: *** [/tmp/tmpG4qw50/demux.o] Ошибка 1
make[1]: *** [_module_/tmp/tmpG4qw50] Ошибка 2
make[1]: Выход из каталога `/usr/src/linux-headers-2.6.32-122-rtai'
make: *** [modules] Ошибка 2
zilk@atom:~/linuxcnc$ 
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение Serg »

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

Re: FAQ по EMC2 LinuxCNC

Сообщение Nick »

ааа... вот оно как, наверное это хитрый способ заводить массивы в виде пинов.

Там у тебя pin out bit out##[16] - это 16 бит?
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение PKM »

только что выложили схему расширителя 4 пинов LPT до 16 входов и 16 выходов http://wiki.linuxcnc.org/cgi-bin/wiki.p ... t_Expander
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение nkp »

PKM,
а есть на wiki RSS ?
хотел тоже следить за новыми публикациями - но не нашел как ...)))
zilk
Опытный
Сообщения: 139
Зарегистрирован: 07 янв 2012, 19:05
Репутация: 1
Откуда: Украина, Харьков
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение zilk »

PKM писал(а):только что выложили схему расширителя
апиридили.... :cry:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: FAQ по EMC2 LinuxCNC

Сообщение nkp »

zilk писал(а):апиридили....
ничего!
емс такое поле непаханое - есть над чем поработать :)
Ответить

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