Страница 3 из 12

Re: Контактный сканер с помощью EMC2

Добавлено: 07 июл 2011, 17:33
Nick
Ок, давай теперь сформулируем как ему это реализовать.

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

loadrt sampler depth=1000   cfg="FFF"
addf sampler.0 servothread

net Xpos => sampler.0.pin.0
net Apos => sampler.0.pin.1 
net encoder.0.position => sampler.0.pin.2

net  motion.spindle-on => sampler.0.enable 
# Это чтобы самплер можно было включить и выключить Gкодом.

loadusr -w halsampler  filename
# Как правильно написать вписать имя файла?

Нужно что-то еще или этого хватит?
По идее, надо бы кнопочку, чтобы encoder обнулять.

А и сам Gкод... По идее он должен быть совсем простой:

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

(Параметры)
#<xstart> = 0
#<xend> = 100
#<xstep> = 0.1
#<speed> = 10

(идем в 0)
G0 X#<xstart> A0

(Включаем шпиндель/sampler)
M3

Идем по спиральке: 
G1 X<#xend> A[[#<xend>-#<xstart>]/#<xstep>] F#<speed> 

(Выключаем шпиндель/sampler)
M5

Вот только по скорости вопрос... Как на таком станке скорость задать?

Re: Контактный сканер с помощью EMC2

Добавлено: 07 июл 2011, 18:15
psha
F и задает, разве нет?

Re: Контактный сканер с помощью EMC2

Добавлено: 07 июл 2011, 18:29
Nick
Там же всего две координаты, причем одна поворотная, как будет задаваться F в этом случае?

Re: Контактный сканер с помощью EMC2

Добавлено: 07 июл 2011, 19:15
psha
Не знаю :)
А нельзя тут использовать какой-нибудь код для нарезки резьбы?

Re: Контактный сканер с помощью EMC2

Добавлено: 07 июл 2011, 19:20
psha
Знаю, подсказали:
http://www.linuxcnc.org/docs/devel/html ... :Feed-Rate
Это скорость линейного перемещения по X. A будет вращаться так, чтоб держать правильное соотношение

Re: Контактный сканер с помощью EMC2

Добавлено: 07 июл 2011, 20:01
Nick
Отлично! Тогда конечный Gкод будет выглядеть так:

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

(Параметры)
#<xstart> = 0
#<xend> = 100
#<xstep> = 0.1

#<dots_per_round> = 1000 
(точек за 1 оборот)
#<speed> = [#<xstep>*#<dots_per_round>/1000]
(скорость рассчитана на то, что sampler работает 1000 раз в секунду)

(идем в 0)
G0 X#<xstart> A0

(Включаем шпиндель/sampler)
M3

(Идем по спиральке. Ось A в градусах) 
G1 X<#xend> A[[#<xend>-#<xstart>]/#<xstep>*360] F#<speed> 


(Выключаем шпиндель/sampler)
M5
Осталось придумать кнопку на сброс энкодера и можно запускать :).

Re: Контактный сканер с помощью EMC2

Добавлено: 08 июл 2011, 09:27
gendos
А как быть с размерами контактного ролика?
диаметр равен 82 мм
радиус закругленной части 16мм
В программе Easylast3D 2.5 можно выбирать разный инструмент, она работает в режиме сканера и может писать путь фрезы для фрезера.

Re: Контактный сканер с помощью EMC2

Добавлено: 08 июл 2011, 09:33
Nick
Могу сказать только одно, он будет скруглять все вогнутые неровности. С этим бороться можно только уменьшением размера ролика.
А поправку на его размер нужно сделать при обнулении значения энкодера.

Re: Контактный сканер с помощью EMC2

Добавлено: 08 июл 2011, 09:52
gendos
Мне кажется диаметр ролика не должен влиять,
а будет влиять только радиус.
буду экспериментировать с диаметром 82мм, а радиусом 1мм,а там видно будет.

Re: Контактный сканер с помощью EMC2

Добавлено: 08 июл 2011, 13:04
Nick
Влиять будет и тот и тот, только один (радиус) на продольные вогнутости, а второй (диаметр) - на поперечные.

Re: Контактный сканер с помощью EMC2

Добавлено: 18 июл 2011, 19:59
gendos

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

loadrt sampler depth=1000   cfg="FFF"
addf sampler.0 servothread

net Xpos => sampler.0.pin.0
net Apos => sampler.0.pin.1 
net encoder.0.position => sampler.0.pin.2

net  motion.spindle-on => sampler.0.enable 
# Это чтобы самплер можно было включить и выключить Gкодом.

loadusr -w halsampler  filename
# Как правильно написать вписать имя файла?
Добрый день.
Буду пытаться реализоват то что вы мне подсказали.
Пока один вопрос ,куда мне все это сохранить?
Поставил EMC2 версия 2.4.3
Сохранил в .hal --- при запуске EMC2 ругается

Re: Контактный сканер с помощью EMC2

Добавлено: 18 июл 2011, 20:51
Nick
Что конкретно говорит? скопируй сюда в тэг code.

Re: Контактный сканер с помощью EMC2

Добавлено: 18 июл 2011, 21:17
gendos
Nick писал(а):Что конкретно говорит? скопируй сюда в тэг code.
Print file information:
RUN_IN_PLACE=no
EMC2_DIR=
EMC2_BIN_DIR=/usr/bin
EMC2_TCL_DIR=/usr/share/emc/tcl
EMC2_SCRIPT_DIR=
EMC2_RTLIB_DIR=/usr/realtime-2.6.32-122-rtai/modules/emc2
EMC2_CONFIG_DIR=
EMC2_LANG_DIR=/usr/share/emc/tcl/msgs
INIVAR=inivar
HALCMD=halcmd
EMC2_EMCSH=/usr/bin/wish8.5
EMC2 - 2.4.3
Machine configuration directory is '/home/gena/emc2/configs/мой-станок'
Machine configuration file is 'мой-станок.ini'
INIFILE=/home/gena/emc2/configs/мой-станок/мой-станок.ini
PARAMETER_FILE=emc.var
EMCMOT=motmod
EMCIO=io
TASK=milltask
HALUI=
DISPLAY=mini
NML_FILE=
Starting EMC2...
Starting EMC2 server program: emcsvr
Loading Real Time OS, RTAPI, and HAL_LIB modules
Starting EMC2 IO program: io
Shutting down and cleaning up EMC2...
Killing task emcsvr, PID=6660
Removing HAL_LIB, RTAPI, and Real Time OS modules
Removing NML shared memory segments
Cleanup done

Debug file information:
HAL: ERROR: thread 'servothread' not found
мой-станок.hal:117: addf failed
6660
PID TTY STAT TIME COMMAND
Stopping realtime threads
Unloading hal components

Kernel message information:
[ 9416.280931] I-pipe: Domain RTAI registered.
[ 9416.280940] RTAI[hal]: <3.8.1> mounted over IPIPE-NOTHREADS 2.6-03.
[ 9416.280943] RTAI[hal]: compiled with gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) .
[ 9416.280988] RTAI[hal]: mounted (IPIPE-NOTHREADS, IMMEDIATE (INTERNAL IRQs DISPATCHED), ISOL_CPUS_MASK: 0).
[ 9416.280992] PIPELINE layers:
[ 9416.280996] fcf35e20 9ac15d93 RTAI 200
[ 9416.280999] c085cb20 0 Linux 100
[ 9416.305935] RTAI[malloc]: global heap size = 2097152 bytes, <BSD>.
[ 9416.306095] RTAI[sched]: IMMEDIATE, MP, USER/KERNEL SPACE: <with RTAI OWN KTASKs>, kstacks pool size = 524288 bytes.
[ 9416.306104] RTAI[sched]: hard timer type/freq = APIC/12499938(Hz); default timing: periodic; linear timed lists.
[ 9416.306109] RTAI[sched]: Linux timer freq = 250 (Hz), TimeBase freq = 1599981000 hz.
[ 9416.306112] RTAI[sched]: timer setup = 999 ns, resched latency = 2944 ns.
[ 9416.306206] RTAI[usi]: enabled.
[ 9416.376299] RTAI[math]: loaded.
[ 9416.447976] config string '0x378 out '
[ 9417.056055] RTAI[math]: unloaded.
[ 9417.100859] SCHED releases registered named ALIEN RTGLBH
[ 9417.136391] RTAI[malloc]: unloaded.
[ 9417.232151] RTAI[sched]: unloaded (forced hard/soft/hard transitions: traps 0, syscalls 0).
[ 9417.236432] I-pipe: Domain RTAI unregistered.
[ 9417.236480] RTAI[hal]: unmounted.

Re: Контактный сканер с помощью EMC2

Добавлено: 18 июл 2011, 22:20
Nick
gendos писал(а):HAL: ERROR: thread 'servothread' not found
Поменяй addf sampler.0 servothread
на
addf sampler.0 servo-thread

Re: Контактный сканер с помощью EMC2

Добавлено: 18 июл 2011, 22:58
gendos
Nick писал(а):
gendos писал(а):HAL: ERROR: thread 'servothread' not found
Поменяй addf sampler.0 servothread
на
addf sampler.0 servo-thread


Debug file information:
мой-станок.hal:123: Signal name 'motion.spindle-on' must not be the same as a pin. Did you omit the signal name?
1585

Re: Контактный сканер с помощью EMC2

Добавлено: 18 июл 2011, 23:06
Nick
net motion.spindle-on => sampler.0.enable
поменяй на:
net spindle-enable <= motion.spindle-on => sampler.0.enable
хммм... мне казалось, что имя сигнала не обязательно, оказывается я был не прав...

Re: Контактный сканер с помощью EMC2

Добавлено: 18 июл 2011, 23:33
gendos
Nick писал(а):net motion.spindle-on => sampler.0.enable
поменяй на:
net spindle-enable <= motion.spindle-on => sampler.0.enable
хммм... мне казалось, что имя сигнала не обязательно, оказывается я был не прав...

поменял,запустил emc2 , появилась в нижнем правом углу подсказка про смену инструмента и все...
подождал 5 минут заускаю снова emc2 пишет
emc2 is still running. Restart it?
нажимаю да, выдает
Debug file information:
мой-станок.hal:125: program 'halsampler' failed, returned 1
Stopping realtime threads
Unloading hal components
ERROR: Module hal_lib does not exist in /proc/modules
ERROR: Module rtapi does not exist in /proc/modules
ERROR: Module rtai_math does not exist in /proc/modules
ERROR: Module rtai_sem does not exist in /proc/modules
ERROR: Module rtai_fifos does not exist in /proc/modules
ERROR: Removing 'rtai_sched': Device or resource busy
ERROR: Module rtai_hal is in use by rtai_sched

Re: Контактный сканер с помощью EMC2

Добавлено: 19 июл 2011, 07:36
psha
В строке

loadusr -w halsampler filename

-w означает что надо дождаться выполнения команды.
В итоге он при загрузке будет вечно ждать, пока halsampler выйдет.
Надо оставить просто 'loadusr halsampler filename' ибо заранее узнать имя его компоненты не получится

Я сейчас потестил - вроде работает (за ислючением того, что я X, Y и Z сканирую, ибо енкодера нет)

Re: Контактный сканер с помощью EMC2

Добавлено: 19 июл 2011, 17:15
gendos
Запустил такой G код
%
G0 X0 a1 z0
m3
G1 X10 a[[10-0]/1*360] F500
M5
%
файл filename пустой,добавил S3500
G0 X0 a1 z0
S3500 m3
G1 X10 a[[10-0]/1*360] F500
M5
в файле filename одни 0000000

изменил в hal
loadrt sampler depth=1000 cfg="FFF"
addf sampler.0 servo-thread

net xpos-cmd axis.0.motor-pos-cmd <= stepgen.0.position-cmd => sampler.0.pin.0
net apos-cmd axis.3.motor-pos-cmd <= stepgen.3.position-cmd => sampler.0.pin.1
net encoder.0.position => sampler.0.pin.2

net spindle-enable <= motion.spindle-on => sampler.0.enable
loadusr halsampler filename
в файле filename-
0.000083 1.029868 0.000000
0.000100 1.036120 0.000000
0.000119 1.042966 0.000000
0.000140 1.050409 0.000000
0.000162 1.058446 0.000000
.....................
7.923219 2852.566491 0.000000
7.924215 2852.925001 0.000000
7.925211 2853.283512 0.000000
7.926207 2853.642023 0.000000
7.927203 2854.000534 0.000000

Вроде все нормально ,количество данных попытаюсь уменьшить скоростью и надеюсь когда будет энкодер появится и третья колонка
Только как сделать чтоб координата А менялась только от 0 до 360 градусов и как это все перевести в нормальные координаты ?

Re: Контактный сканер с помощью EMC2

Добавлено: 19 июл 2011, 17:20
Nick
gendos писал(а):Только как сделать чтоб координата А менялась только от 0 до 360 градусов и как это все перевести в нормальные координаты
чтобы менялась только от 0 до 360 нужно взять остаток от деления на 360. В случае с hal, наверняка есть такой компонент. Чтобы перевести в нормальные координаты нужно сделать описанное выше преобразование. Хотя, возможно это будет проще сделать через отдельный пост-просцессор, чтобы не напрягать emc2 вычислениями с плавающей запятой.