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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
gendos
Мастер
Сообщения: 1117
Зарегистрирован: 06 июл 2011, 15:26
Репутация: 81
Настоящее имя: Геннадий
Откуда: Ростов-на-дону
Контактная информация:

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

Сообщение gendos »

Подскажите кто может
Пытался сделать сканер с помощью mach3 но он не может записывать данные с энкодера.Думаю эту задачу можно решить с помощью emc2.
emc2 у меня сейчас в стадии изучения.
Заказал себе плату 7i43.может она для этой задачи подойдет?

Просил помощи для этой задачи для mach3 на форуме по ссылке

http://cnc.userforum.ru/viewtopic.php?id=621#p27060
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Давай определим, что нужно получить...

Нужен тач, нужно считывание данных по событию и как-то все это записывать в файл...

С тачем все просто, направляем внешний пин в probe-input
net probe parport.0.pin-10-in => motion.probe-input

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

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

Сообщение Nick »

Так, нашел. Есть такая замечательная ngc управляющая программка для EMC2, которая делает скан прямоугольника и выводит все в файл
smartprobe.ngc, находтся в каталоге nc_files в исходных кодах emc2, куда она попадает при установке, честно говоря, не знаю.

Сохраняется все в файл probe-results.ngc, там в программе есть задание этого файла.

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

(smartprobe.ngc)

( Rectangular Probing                                                   )
(                                                                        )
( This program repeatedly probes in a regular XY grid and writes the    )
( probed location to the file 'probe-results.ngc' in the same directory )
( as the .ini file                                                      )

(Configuration section)
G20   (Inches)            (ВОТ ТУТ ЛУЧШЕ ПОСТАВИТЬ G21 - мм)
F20    (probe speed)

#1=-1  (X start)
#2=.04 (X increment)
#3=51 (X count)

#4=-1
#5=.04
#6=51 (Y count)

#7=1.1 (Z safety)
#8=-.1 (Z probe)
(End configuration section)

(LOGOPEN,probe-results.ngc)
#9=0 #10=0
G0Z#7
O1 while [#9 lt #6]
    #10=0
    G0 Y[#4+#5*#9]
    O2 while [#10 lt #3]
        O3 if [[#9/2] - fix[#9/2] eq 0]
            #11=[#1+#2*#10]
        O3 else      
            #11=[#1+#2*[#3-#10-1]]
        O3 endif
        (#11 is X target)
        #5070=1
        O4 while [#5070 NE 0]
            G38.5 z#7
            G38.3 x#11
        O4 endwhile

        G38.2Z#8
        (LOG,G1 X#5061 Y#5062 Z#5063)
        #10=[#10+1]
    O2 endwhile
    G0Z#7
    #9=[#9+1]
O1 endwhile

(LOGCLOSE)
G0Z#7
G0X#1Y#4
M2
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

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

Сообщение aftaev »

Такое нужно ???
https://www.youtube.com/watch?v=R9i4DbwZrKI

Модель "щупается" 3D пробником типо Renishaw. Точки записываются в файл, потом иих преобразуют в 3D модель.

В Маче насколько помню для этого есть специальный мастер. Запускаете, задаете параметры и он общупывает модель сканируя ее.
7i43 вам шибко не поможет. Можно было это реализовать в ЕМС и на на LPT. Если портов нехватает втыкаете еще карточку LPT баксов за 15.

Что за щуп у тебя?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
gendos
Мастер
Сообщения: 1117
Зарегистрирован: 06 июл 2011, 15:26
Репутация: 81
Настоящее имя: Геннадий
Откуда: Ростов-на-дону
Контактная информация:

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

Сообщение gendos »

Координата А вращает колодку рычаг двигает энкодер
координата Х смещает рычаг с энкодером через шаг 1мм после поворота оси А на 360 градусов
записывается в текстовый файл
х,а,у
где y данные с энкодера


но нужно еще перевести угловые координаты через sina и cosa

но это я потом буду думать как сделать
gendos
Мастер
Сообщения: 1117
Зарегистрирован: 06 июл 2011, 15:26
Репутация: 81
Настоящее имя: Геннадий
Откуда: Ростов-на-дону
Контактная информация:

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

Сообщение gendos »

щупа у меня нет
есть ролик который обкатывает модель и через рычаг вращает энкодер
данные которого нужно записать в текстовый файл важна скорость обработки модели так как очень много точек
нужно уложится хотябы в 10 минут
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

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

Сообщение aftaev »

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

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

Сообщение Nick »

Т.е. ты у тебя щуп постоянно находится на объекте, и ты хочешь считывать значения энкодера в определенных точках?
gendos писал(а):но нужно еще перевести угловые координаты через sina и cosa
но это я потом буду думать как сделать
Это две строчки на питоне.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

gendos писал(а):есть ролик который обкатывает модель и через рычаг вращает энкодерданные которого нужно записать в текстовый файл важна скорость обработки модели так как очень много точек нужно уложится хотябы в 10 минут
Тогда вообще просто.
Есть команда, которая пишет в лог данные:
Координаты по осям хранятся в параметрах #5420 - X, #5421 - Y и т.д.
(LOG,G1 X#5420 Y#5421 A#...тут скорее всего... #5423)

И главное, энкодер нужно прикрутить на axis.N.joint-pos-fb.
gendos
Мастер
Сообщения: 1117
Зарегистрирован: 06 июл 2011, 15:26
Репутация: 81
Настоящее имя: Геннадий
Откуда: Ростов-на-дону
Контактная информация:

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

Сообщение gendos »

gendos
Мастер
Сообщения: 1117
Зарегистрирован: 06 июл 2011, 15:26
Репутация: 81
Настоящее имя: Геннадий
Откуда: Ростов-на-дону
Контактная информация:

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

Сообщение gendos »

плату 7i43 заказал чтоб поставить серву на 675 фрезерный станок для экспериментов ,а если пойдет для сканера закажу еще.
gendos
Мастер
Сообщения: 1117
Зарегистрирован: 06 июл 2011, 15:26
Репутация: 81
Настоящее имя: Геннадий
Откуда: Ростов-на-дону
Контактная информация:

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

Сообщение gendos »

Тогда вообще просто.
Есть команда, которая пишет в лог данные:
Координаты по осям хранятся в параметрах #5420 - X, #5421 - Y и т.д.
(LOG,G1 X#5420 Y#5421 A#...тут скорее всего... #5423)

И главное, энкодер нужно прикрутить на axis.N.joint-pos-fb.[/quote]

я думаю это то что нужно.
Только куда записывать команду Log,G1X#5420 в исполняемый G-код ?
и как мне записать y=z(cosa)
x=z(sina)
где а угол поворота сканируемой детали
z- показания энкодера в мм
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

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

Сообщение aftaev »

gendos писал(а):Фото станка
http://cnc.userforum.ru/uploads/0009/00 ... 57-2-f.jpg
У меня не открывается. Грузи сюды.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Да, в любом месте Gкода пишешь (LOG, ...) и в указанный (в команде log) выше файл пишется все, что после запятой.

sin и cos пишутся так
#<z> = #5422
#<a> = #5423
(LOG, #<z> * sin[#<a>], #<z> * cos[#<a>], #<z> )

Всю эту конструкцию можно вставить в описанную вверху программку, чтобы самому не задавать решетку, а она генерировалась сама.

Только меня смущает одно но, он может выдать Trajectory Following Error, т.к. EMC2 ось z не двигает, а положение ее изменяется. Сейчас посмотрю можно ли в Gcode использовать пины hal...


-------------


странно, а у меня открылось...
gendos
Мастер
Сообщения: 1117
Зарегистрирован: 06 июл 2011, 15:26
Репутация: 81
Настоящее имя: Геннадий
Откуда: Ростов-на-дону
Контактная информация:

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

Сообщение gendos »

aftaev писал(а):
gendos писал(а):Фото станка
http://cnc.userforum.ru/uploads/0009/00 ... 57-2-f.jpg
У меня не открывается. Грузи сюды.
фото сканера
Вложения
контактный_сканер.JPG (7401 просмотр) <a class='original' href='./download/file.php?id=1717&mode=view' target=_blank>Загрузить оригинал (133.97 КБ)</a>
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

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

Сообщение aftaev »

На тюбике было видео как обувь снимают на камеру и переносят в 3D.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Таких видео и программ есть уйма, но страдает точность и модель получается сложнее. Если есть станок, то сделать через сканирование при помощи энкодера и щупа гораздо проще.
gendos
Мастер
Сообщения: 1117
Зарегистрирован: 06 июл 2011, 15:26
Репутация: 81
Настоящее имя: Геннадий
Откуда: Ростов-на-дону
Контактная информация:

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

Сообщение gendos »

Nick писал(а):Таких видео и программ есть уйма, но страдает точность и модель получается сложнее. Если есть станок, то сделать через сканирование при помощи энкодера и щупа гораздо проще.
я тоже так считаю
контактный сканер лучше всего,потом не нужно править облако точек
gendos
Мастер
Сообщения: 1117
Зарегистрирован: 06 июл 2011, 15:26
Репутация: 81
Настоящее имя: Геннадий
Откуда: Ростов-на-дону
Контактная информация:

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

Сообщение gendos »

Nick писал(а):Да, в любом месте Gкода пишешь (LOG, ...) и в указанный (в команде log) выше файл пишется все, что после запятой.

sin и cos пишутся так
#<z> = #5422
#<a> = #5423
(LOG, #<z> * sin[#<a>], #<z> * cos[#<a>], #<z> )

Всю эту конструкцию можно вставить в описанную вверху программку, чтобы самому не задавать решетку, а она генерировалась сама.

Только меня смущает одно но, он может выдать Trajectory Following Error, т.к. EMC2 ось z не двигает, а положение ее изменяется. Сейчас посмотрю можно ли в Gcode использовать пины hal...

Благодарю за помощь. буду пробовать когда приеду домой ,а то я сейчас в отпуске на море.
-------------


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

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

Сообщение Nick »

Значит так, есть еще два варианта, один сложный, в компоненте thc.comp используется что-то подобное. THC - Torch Height Control используется для контроля высоты плазменного или газового резака. Можно его слегка переделать и использовать...
thc.comp (для просмотра содержимого нажмите на ссылку)
component thc "Torch Height Control";

description
"""
Torch Height Control
Mesa THC > Mesa 5i20 Encoder > EMC THC
The Mesa THC sends a pulse based on the scaled voltage detected.
A velocity is used from the encoder that is being driven by a frequency from
the Mesa THC.
If enabled and torch is on and X + Y velocity is within tolerance of set speed
allow the THC to offset the Z axis as needed to maintain voltage.

If enabled and torch is off and the Z axis is moving up remove any correction
at a rate not to exceed the rate of movement of the Z axis.

If enabled and torch is off and there is no correction
pass the Z position and feed back untouched.

If not enabled pass the Z position and feed back untouched.

Physical Connections
Plasma Torch Arc Voltage Signal => 6 x 487k 1% resistors => THC Arc Voltage In
THC Frequency Signal => Encoder #0, pin A (Input)
Plasma Torch Arc OK Signal => parport.0.pin-15-in
parport.0.pin-16-out => Plasma Torch Start Arc Contacts

HAL Plasma Connections
hm2_5i20.0.encoder.00.velocity => thc.encoder-vel (tip voltage)
motion.spindle-on => parport.0.pin-16-out (start the arc)
thc.arc-ok <= motion.digital-in-00 <= parport.0.pin-15-in (arc ok signal)

HAL Motion Connections
thc.requested-vel <= motion.requested-vel
thc.current-vel <= motion.current-vel

""";

author "John Thornton";

license "GPL";

option singleton yes;

// Input Pins
pin in float encoder_vel "Connect to hm2_5i20.0.encoder.00.velocity";
pin in float current_vel "Connect to motion.current-vel";
pin in float requested_vel "Connect to motion.requested-vel";
pin in float volts_requested "Tip Volts current_vel >= min_velocityequested (SP)";
pin in float vel_tol "Velocity Tolerance (Corner Lock)";
pin in bit torch_on "Connect to motion.spindle-on";
pin in bit arc_ok "Arc OK from Plasma Torch";
pin in bit enable "Enable the THC, if not enabled Z position is passed through";
pin in float z_pos_in "Z Motor Position Command in from axis.n.motor-pos-cmd";

// Output Pins
pin out float z_pos_out "Z Motor Position Command Out";
pin out float z_fb_out "Z Position Feedback to Axis";
pin out float volts "The Calculated Volts";
pin out bit vel_status "When the THC thinks we are at requested speed";

// Parameters
param rw float vel_scale "The scale to convert the Velocity signal to Volts";
param rw float scale_offset "The offset of the velocity input at 0 volts";
param rw float velocity_tol "The deviation percent from planned velocity";
param rw float voltage_tol "The deviation of Tip Voltage before correction takes place";
param rw float correction_vel "The Velocity to move Z to correct";

// Global Variables
variable float offset;
variable float last_z_in;

function _;

;;

#include "rtapi_math.h"

FUNCTION(_) {
// convert encoder velocity to volts
volts = (encoder_vel - scale_offset) * vel_scale;
if(volts < 0){volts = 0;} // make sure volts is not negative

if(enable){
float min_velocity = requested_vel -(requested_vel*(1/velocity_tol));
if(current_vel > 0 && current_vel >= min_velocity){vel_status = 1;}
else {vel_status =0;}

if(torch_on && arc_ok && vel_status){ // allow correction
if((volts + voltage_tol) > volts_requested){
offset -= correction_vel;
}
if((volts - voltage_tol) < volts_requested){
offset += correction_vel;
}
last_z_in = 0;
}
if(!torch_on){ // remove any offset
float z_diff;
z_diff = z_pos_in - last_z_in;
if(z_diff > 0 && offset != 0){ // torch is moving up
if(offset > 0){ // positive offset
if(offset > z_diff){ // remove some
offset -= z_diff;
}
else {offset = 0;}
}
if(offset < 0){ // negative offset
if(offset < z_diff){ // remove some
offset += z_diff;
}
else {offset = 0;}
}
}
last_z_in = z_pos_in;
}
z_pos_out = z_pos_in + offset;
z_fb_out = z_pos_in; // keep axis motor position fb from being confused
}
if(!enable){
z_pos_out = z_pos_in;
z_fb_out = z_pos_in; // keep axis motor position fb from being confused
}
}



И второй путь, гораздо более простой. В .hal заводим пин encoder.0.position на motion.analog-in-00.
Т.е. net encoder.0.position => motion.analog-in-00
После этого при выполнении Gкода
M66 E0 L0
Значение пина motion.analog-in-00 будет сохранено в параметре #5399.
Т.е. вся операция считывания и вывода значения будет выглядеть следующим образом:

M66 E0 L0
#<z> = #5399
#<a> = #5423
(LOG, #<z> * sin[#<a>], #<z> * cos[#<a>], #<z> )
Ответить

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