Станок канатной резки камня с ЧПУ

Намоточные, сверлильные, электроэррозионные и другие станки с ЧПУ.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

Хочеться довести до логического завершения компонент тангенциального ножа.
Протестировав atan2 во всех модификациях, не нашел полностью удовлетворения требованиям такого рода инструмента.
если ножом управляет серводвигатель - то хочеться схематично говоря такого:
Выделение(034).jpg (3917 просмотров) <a class='original' href='./download/file.php?id=16365&sid=07319f89b72bec67107b7f38d96c92dd&mode=view' target=_blank>Загрузить оригинал (44.01 КБ)</a>
то есть выход atan2 в диапазоне 0-360 и желательно переходы по кратчайшему пути...
для наглядности можнт умножать выход на значение рад :

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

         a1 = atan2(x,y);
         a = a1*57,295779513;
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение Nick »

Не совсем понял схему... как подключить два пина к PID? и зачем там AND2?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

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

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

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

component atan2;
pin in float x;
pin in float y;
pin out float a;
function _;
license "GPL";
;;
#include <rtapi_math.h>;

FUNCTION(_) { 
   if (x==0 && y==0) {a=0;}      // sudo comp --install atan2.comp
   else {
         float a1;
         a1 = atan2(x,y);
         if (x>0 && y>0) 
            {a = a1*57,295779513;}
         else  if  (y<0 && x>0)
            {a = a1*57,295779513;}
         else  if  (x>0 && y==0)
            {a = 90;}
         else  if  (x==0 && y>0)
            {a = 0;}
         else  if  (y<0 && x==0)
            {a = 180;}
         else  if (x<0 && y<0) 
            {a = 360 + a1*57,295779513;}
         else  if  (y==0 && x<0)
            {a = 270;}
         else  if (y>0 && x<0) 
            {a = 360 + a1*57,295779513;}       
      }
}
при вот таком перевертыше:

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

net  vel_in1 <= axis.1.joint-vel-cmd 
net  vel_in  <= axis.0.joint-vel-cmd 
#===================
loadrt atan2
addf atan2.0 servo-thread
net vel_in  => atan2.0.y  
net vel_in1 => atan2.0.x 
работа устраивает
кривость присутствует и вынужденная и непринужденная :freak:
upd:
даже наверно можно убрать первое условие - чтоб при остановке нож сохранял положение:
(для просмотра содержимого нажмите на ссылку)

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

component atan2;  // sudo comp --install atan2.comp
pin in float x;
pin in float y;
pin out float a;
function _;
license "GPL";
;;
#include <rtapi_math.h>;
FUNCTION(_) { 
         float a1;
         a1 = atan2(x,y);
         if (x>0 && y>0) 
            {a = a1*57,295779513;}
         else  if  (y<0 && x>0)
            {a = a1*57,295779513;}
         else  if  (x>0 && y==0)
            {a = 90;}
         else  if  (x==0 && y>0)
            {a = 0;}
         else  if  (y<0 && x==0)
            {a = 180;}
         else  if (x<0 && y<0) 
            {a = 360 + a1*57,295779513;}
         else  if  (y==0 && x<0)
            {a = 270;}
         else  if (y>0 && x<0) 
            {a = 360 + a1*57,295779513;}      
}
Последний раз редактировалось nkp 17 июл 2013, 07:10, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

теперь задумка реализации:
нож выполняется как ось на серве ,энкодер на рисунке заведен на "pos" , atan- это выход нашего компонента...
near сравнивает задание (atan) и позицию - count энкодера и при совпадении - запрещает шим через enable...
направление вращения берем через sum , abs и mux... где то так:
(для просмотра содержимого нажмите на ссылку)

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

#=================================================== http://cnc-club.ru/forum/viewtopic.php?t=2449&p=75810#p75808
loadrt atan2
loadrt sum2
loadrt abs
loadrt near
loadrt mux2

addf atan2.0 servo-thread
addf sum2.0  servo-thread
addf abs.0   servo-thread
addf near.0  servo-thread
addf mux2.0  servo-thread

net vel_in    axis.0.joint-vel-cmd             => atan2.0.y  
net vel_in1   axis.1.joint-vel-cmd             => atan2.0.x 

net  sum_in0  hm2_5i20.0.encoder.02.position   => sum2.0.in0  
net  sum_in1  atan2.0.a                        => sum2.0.in1  
net  sum_out  sum2.0.out                       => abs.0.in
net  abs_pos  abs.0.is-positive                => mux2.0.sel  
net  mux_out  mux2.0.out                       => hm2_5i20.0.pwmgen.02.value 
setp mux2.0.in0  -0.5 
setp mux2.0.in1   0.5

net  near_in1  hm2_5i20.0.encoder.02.position  => near2.0.in1  
net  near_in2  atan2.0.a                       => near2.0.in2  
net  near_out  near2.0.out                     => hm2_5i20.0.pwmgen.02.enable
setp near.0.difference 0
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение Nick »

Серва по скорости управляется?
Вообще сервой все равно надо бы через ПИД управлять...


И лучше добавь в компонент atan параметр scale... формат в радианах тоже достаточно часто используется... (надо бы эти компоненты в linuxcnc запостить...)

Первое условие нужно, по крайней мере, чтобы не высчитывать atan2, а то в манах пишут: If both arguments passed are zero, a domain error occurs.

PS а зачем у нас столько интервалов? нам [-пи,пи] не подходит?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

Nick писал(а):Серва по скорости управляется?
да
Nick писал(а):Вообще сервой все равно надо бы через ПИД управлять...
если напрямую не получится - пропустим через пид
Nick писал(а):Первое условие нужно, по крайней мере, чтобы не высчитывать atan2,
если не убрать его - то при любой паузе в движении нож уходит в ноль...
Nick писал(а):PS а зачем у нас столько интервалов? нам [-пи,пи] не подходит?
чесно сказать - накрапал эти строки "самым научным способом" :)
если кто то поправит - буду признателен
(нужен выход компонента 0 - 360 в зависимости - "куда едем")
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

If both arguments passed are zero, a domain error occurs.
не знаю какая там ошибка возникает (надо посмотреть в терминале) - но программу на емс выполняет без ошибок и
при переездах по Z (x и y - ноль) выход не менялся...
а вообще прописать if (x==0 && y==0)
{a = a1}
можно ли так и нужно ли вначале a1=0
??
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение Nick »

nkp писал(а):если не убрать его - то при любой паузе в движении нож уходит в ноль...
Лучше всего оставить это условие, просто убрать a=0. Т.е. если x=0 && y=0 то ничего не делаем, тогда в a сохранится предыдущее значение.
nkp писал(а):(нужен выход компонента 0 - 360 в зависимости - "куда едем")
и ехать кратчайшим путем, так?

Тут появляется вечная засада с полными оборотами... надо придумать как их избежать, точнее как избежать скачков при полном обороте, скорее всего надо делать через mod - деление по модулю...

щас придумаем...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

Nick писал(а):и ехать кратчайшим путем, так?
нет - это все будет работать без пересечения нулевой метки энкодера - то есть по длинному пути
тут бы так запустить - потом можно и с коротким путем подумать(с первого взгляда показалось это сложным)))
Nick писал(а):Т.е. если x=0 && y=0 то ничего не делаем
а как pass в си пишеться?
Последний раз редактировалось nkp 17 июл 2013, 10:44, всего редактировалось 1 раз.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение Nick »

nkp писал(а):нет - это все будет работать без пересечения нулевой метки энкодера - то есть по длинному пути
Тогда в чем вообще проблема? atan->pid->pwm и все....
Зачем тебе mux, abs, near и прочее?

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

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

Nick писал(а):Тогда в чем вообще проблема? atan->pid->pwm и все.... Зачем тебе mux, abs, near и прочее?
ну нету у меня таланта коротко написать :)
я мыслил так - near будет сравнивать задание с позицией и выдавать да или нет на шимгенератор
а знак шим будет вычислять abs
(приветствуются другие идеи :) )
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение Nick »

А чем тебе pid не подходит для этих целей? :)
там и deadband есть если что.

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

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

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

Re: Станок канатной резки камня с ЧПУ

Сообщение Nick »

никак - просто {} и все :)
в питоне pass нужен для того, чтобы синтаксис не портился, в питоне после ":" по любому должен быть отступ иначе будет sintax error или invalid indent вот для этого pass и нужен.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение Nick »

nkp писал(а):я ж так и хотел (см. первый кривой риунок )....
Там у тебя еще какой-то and2 закрался... :)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

Nick писал(а):Там у тебя еще какой-то and2 закрался...
поздно наверно было :oops: (на что бы пореалистичней сослаться :thinking: :hehehe: )
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

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

Re: Станок канатной резки камня с ЧПУ

Сообщение Nick »

В принципе, можешь сам попробовать обнулить ось. У тебя как все это подключено (через месу)?
Надо сделать encoder.index-enable 1 и G02 X0 I1 - так проедем круг, на котором переберем все значения и обнулим энкодер. Главное, чтобы ось сильно не скаканула после обнуления, хотя быстрее чем pid позволит все равно не получится...

хотя, можно и motor-pos перекидывать, через mux кинуть atan и motorpos, a в качестве условия:
halui.joint.N.is-homed bit out
status pin telling that joint N is homed
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Станок канатной резки камня с ЧПУ

Сообщение nkp »

пока написал с homed - завтра попробую...

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

net  z_homed  axis.2.homed  mux2.0.sel
net  mux2in0  mux2.0.in0    axis.2.motor-pos-cmd
net  mux2in1  mux2.0.in1    atan2.0.a 
net  mux_out  mux2.0.out    pid.z.command
Последний раз редактировалось nkp 17 июл 2013, 21:07, всего редактировалось 1 раз.
Ответить

Вернуться в «Прочие станки»