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

Добавлено: 21 янв 2013, 17:03
zilk
UAVpilot писал(а):Что других портов на компе нет?
Ну если для поговорить, то согласен - портов разных хватает. А если конкретно - просьба по пунктам пояснить, каким образом мне подсоединить к этим портам свои 20 кнопок, чтобы они соответствовали командам, которые мне необходимы? В частности, каким боком мне прицепить их к USB? Написть самостоятельно под это дело драйвер или тому подобное - не предлагать! :hehehe:

Re: FAQ по EMC2 LinuxCNC

Добавлено: 21 янв 2013, 17:34
Serg
А самостоятельно их присоедить предлагать можно? :hehehe:

Драйвер COM-порта в системе уже есть, даже того, который поверх USB. Библиотеки для работы с RS232 и USB на разных микроконтроллерах великое множество. Даже тут есть тема как подобные кнопки с HAL скрестить.

Re: FAQ по EMC2 LinuxCNC

Добавлено: 21 янв 2013, 19:34
zilk
UAVpilot писал(а):Драйвер COM-порта в системе уже есть, даже того, который поверх USB. Библиотеки для работы с RS232 и USB на разных микроконтроллерах великое множество. Даже тут есть тема как подобные кнопки с HAL скрестить.
Спасибо! Теперь все совершенно конкретно и понятно, даже новичку!

Re: FAQ по EMC2 LinuxCNC

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

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

А что будет на аппаратной части?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 23 янв 2013, 18:25
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:

Re: FAQ по EMC2 LinuxCNC

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

Скинь весь код... так не понятно...

Re: FAQ по EMC2 LinuxCNC

Добавлено: 24 янв 2013, 00:08
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:

Re: FAQ по EMC2 LinuxCNC

Добавлено: 24 янв 2013, 10:40
Nick
Т.е. если убрать i и все манипуляции делать просто c count, то его значение не сохраняется???
zilk писал(а):А почему out(i) не правильно? Вроде как в квадратных скобках задается общий размер массива, а в круглых - его элемент под соотв. номером. По крайней мере, в других компонентах так работает, оттуда я это и содрал...
Да? Ну я Си не знаю, может в нем и так :freak:.

Re: FAQ по EMC2 LinuxCNC

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

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

Re: FAQ по EMC2 LinuxCNC

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

Выяснил, что состояние выходов out(i) сохраняется до следующей проверки, если сначала записывать, в соответствии с входными данными, значения на выходы, а после этого проверять, не пора ли счетчик сбросить в ноль, т.е. if ((!clk && data_in) || i > 15) i = 0;
Если делать наоборот, то выходы сбрасываются после окончания сервоцикла. В общем, темный лес... :cheesy:

Re: FAQ по EMC2 LinuxCNC

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

Понятно - привет вам от ардуинского компилятора. Потом, когда с этими знаниями возмёте в руки настоящий компилятор, то будете посланы вторично. :hehehe:

Re: FAQ по EMC2 LinuxCNC

Добавлено: 25 янв 2013, 09:49
Nick
Так это не ардуино - это компилятор от LinuxCNC вроде...

Re: FAQ по EMC2 LinuxCNC

Добавлено: 25 янв 2013, 15:06
Serg
Тогда показывайте текст ошибки.

Re: FAQ по EMC2 LinuxCNC

Добавлено: 25 янв 2013, 17:03
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$ 

Re: FAQ по EMC2 LinuxCNC

Добавлено: 26 янв 2013, 00:43
Serg
Так это не компилятор C ругается, и вообще это не язык C. Это ж скрипт для HAL Component Generator.
А я увидел не C-шный синтаксис и подумал, что вы про свою ардуину. :)

Re: FAQ по EMC2 LinuxCNC

Добавлено: 29 янв 2013, 16:02
Nick
ааа... вот оно как, наверное это хитрый способ заводить массивы в виде пинов.

Там у тебя pin out bit out##[16] - это 16 бит?

Re: FAQ по EMC2 LinuxCNC

Добавлено: 29 янв 2013, 18:01
PKM
только что выложили схему расширителя 4 пинов LPT до 16 входов и 16 выходов http://wiki.linuxcnc.org/cgi-bin/wiki.p ... t_Expander

Re: FAQ по EMC2 LinuxCNC

Добавлено: 29 янв 2013, 18:05
nkp
PKM,
а есть на wiki RSS ?
хотел тоже следить за новыми публикациями - но не нашел как ...)))

Re: FAQ по EMC2 LinuxCNC

Добавлено: 29 янв 2013, 18:33
zilk
PKM писал(а):только что выложили схему расширителя
апиридили.... :cry:

Re: FAQ по EMC2 LinuxCNC

Добавлено: 29 янв 2013, 18:36
nkp
zilk писал(а):апиридили....
ничего!
емс такое поле непаханое - есть над чем поработать :)