Преобразование координат из локальных в машинные и обратно [РЕШЕНО]
-
- Кандидат
- Сообщения: 72
- Зарегистрирован: 03 дек 2023, 09:37
- Репутация: 0
- Настоящее имя: kharpost
- Контактная информация:
Преобразование координат из локальных в машинные и обратно [РЕШЕНО]
Возникла необходимость преобразования координат из локальных в машинные и обратно. Как это правильно сделать? Ещё интересно, как правильно считать оффсеты и поворот?
Последний раз редактировалось kharpost 28 дек 2023, 14:44, всего редактировалось 1 раз.
-
- Мастер
- Сообщения: 1476
- Зарегистрирован: 23 июн 2022, 14:13
- Репутация: 55
- Настоящее имя: Максим
- Контактная информация:
Re: Преобразование координат из локальных в машинные и обратно
через таблицу СК в любом случае.. как она организована и как туда обратиться у всех вероятно по-разному.
в WLmill это несложно делается
в WLmill это несложно делается
-
- Мастер
- Сообщения: 1719
- Зарегистрирован: 28 авг 2018, 17:13
- Репутация: 286
- Настоящее имя: Алексей
- Контактная информация:
Re: Преобразование координат из локальных в машинные и обратно
если взять только смещения, то они есть в переменных соответствующих https://linuxcnc.org/docs/html/gcode/ov ... parameters
а если полностью, с g92 и поворотами, то там много букв.
вопрос - а зачем это?
-
- Кандидат
- Сообщения: 72
- Зарегистрирован: 03 дек 2023, 09:37
- Репутация: 0
- Настоящее имя: kharpost
- Контактная информация:
Re: Преобразование координат из локальных в машинные и обратно
Пока придумал так:
Я начинающий пользователь около 2 мес. Может кто знает как это делать правильнее
Код: Выделить всё
o<conv_xyto53> sub
#<x>=#1
#<y>=#2
#<ncs>=#5220
#<xo5x>=#[5201+20*#<ncs>]
#<yo5x>=#[5202+20*#<ncs>]
#<R5x>=#[5210+20*#<ncs>]
#<xo92>=#5211
#<yo92>=#5212
#<xr>=[#<x>+#<xo92>]
#<yr>=[#<y>+#<yo92>]
#<cosr>=[cos[#<R5x>]]
#<sinr>=[sin[#<R5x>]]
#<_res_x>=[#<xr>*#<cosr>-#<yr>*#<sinr>+#<xo5x>]
#<_res_y>=[#<xr>*#<sinr>+#<yr>*#<cosr>+#<yo5x>]
o<conv_xyto53> endsub
M2
-
- Кандидат
- Сообщения: 72
- Зарегистрирован: 03 дек 2023, 09:37
- Репутация: 0
- Настоящее имя: kharpost
- Контактная информация:
Re: Преобразование координат из локальных в машинные и обратно
Обратное преобразование:
Код: Выделить всё
o<conv_53toxy> sub
#<ncs>=#5220
#<x53>=#1
#<y53>=#2
#<xo5x>=#[5201+20*#<ncs>]
#<yo5x>=#[5202+20*#<ncs>]
#<R5x>=#[5210+20*#<ncs>]
#<xo92>=#5211
#<yo92>=#5212
#<xr>=[#<x53>-#<xo5x>]
#<yr>=[#<y53>-#<yo5x>]
#<cosr>=[cos[#<R5x>]]
#<sinr>=[sin[#<R5x>]]
#<_res_x>=[#<xr>*#<cosr>+#<yr>*#<sinr>-#<xo92>]
#<_res_y>=[#<yr>*#<cosr>-#<xr>*#<sinr>-#<yo92>]
o<conv_53toxy> endsub
M2
-
- Кандидат
- Сообщения: 72
- Зарегистрирован: 03 дек 2023, 09:37
- Репутация: 0
- Настоящее имя: kharpost
- Контактная информация:
Re: Преобразование координат из локальных в машинные и обратно
Установка смещения СК по типу touch off:
Код: Выделить всё
o<set_touch_off> sub
#<x>=#1
#<y>=#2
o<conv_xyto53> call [#5420] [#5421]
#<x53pre>=#<_res_x>
#<y53pre>=#<_res_y>
o<conv_xyto53> call [#<x>] [#<y>]
#<x53>=#<_res_x>
#<y53>=#<_res_y>
#<ox53>=[#<x53pre>-#<x53>]
#<oy53>=[#<y53pre>-#<y53>]
#<ncs>=#5220
#<_res_x>=[#[5201+20*#<ncs>]+#<ox53>]
#<_res_y>=[#[5202+20*#<ncs>]+#<oy53>]
g10 l2 p0 x#<_res_x> y#<_res_y>
o<set_touch_off> endsub
M2
-
- Новичок
- Сообщения: 30
- Зарегистрирован: 27 дек 2011, 22:58
- Репутация: 4
- Контактная информация:
Re: Преобразование координат из локальных в машинные и обратно
#<_abs_x> - Return current absolute X coordinate (G53) including no offsets.
#<_abs_y> - Return current absolute Y coordinate (G53) including no offsets.
#<_abs_z> - Return current absolute Z coordinate (G53) including no offsets.
#<_abs_a> - Return current absolute A coordinate (G53) including no offsets.
#<_abs_b> - Return current absolute B coordinate (G53) including no offsets.
#<_abs_c> - Return current absolute C coordinate (G53) including no offsets.
#<_abs_y> - Return current absolute Y coordinate (G53) including no offsets.
#<_abs_z> - Return current absolute Z coordinate (G53) including no offsets.
#<_abs_a> - Return current absolute A coordinate (G53) including no offsets.
#<_abs_b> - Return current absolute B coordinate (G53) including no offsets.
#<_abs_c> - Return current absolute C coordinate (G53) including no offsets.
-
- Кандидат
- Сообщения: 72
- Зарегистрирован: 03 дек 2023, 09:37
- Репутация: 0
- Настоящее имя: kharpost
- Контактная информация:
Re: Преобразование координат из локальных в машинные и обратно
Это координаты, на которых сейчас стоит инструмент. Что делать, если нужны координаты внутри заготовки? Да и как-то не правильно гонять станок, что бы просто преобразовать координаты.lazymiller писал(а): ↑ #<_abs_x> - Return current absolute X coordinate (G53) including no offsets.
-
- Мастер
- Сообщения: 1719
- Зарегистрирован: 28 авг 2018, 17:13
- Репутация: 286
- Настоящее имя: Алексей
- Контактная информация:
Re: Преобразование координат из локальных в машинные и обратно
так он когда обмерять будет, вот тогда можно и нужно абсолютные координаты и брать.
зачем туда сюда гонять G54 да ещё и с поворотами.
потом от результатов измерения (снятых в G53) сделать смещение и поворот СК.
так что мне всё равно не понятно, зачем бы это нужно было решать именно поставленную задачу.
- hmnijp
- Мастер
- Сообщения: 1723
- Зарегистрирован: 20 авг 2017, 15:02
- Репутация: 527
- Настоящее имя: Константин
- Откуда: Ульяновск
- Контактная информация:
Re: Преобразование координат из локальных в машинные и обратно
Да в целом все +- так и считают в линуксе, по этой формуле с умножением на 20... ты на правильном пути.kharpost писал(а): ↑27 дек 2023, 12:47 Пока придумал так:Я начинающий пользователь около 2 мес. Может кто знает как это делать правильнееКод: Выделить всё
#<yo5x>=#[5202+20*#<ncs>]
#probeZAbs = #probeZ(#5063) + #[5203 + [20 * #5220]]
Можешь здесь ещё глянуть как пример макросы неплохие для измерений (начальные переменные там заполняются из специального gui при активации)
https://github.com/kcjengr/probe_basic/ ... ubroutines
или вот как пример мой код простой для поворота системы координат по двум точкам ортогонально заготовке, тебе наверное оно и нужно?:
o<autorot> call [1] - сохранение первой точки, она же будет центр вращения.
o<autorot> call [2] - сохраняем вторую точку на прямой прямой стороне заготовки
[3] - считает угол поворота, вектор смещения wcs (тк поворот вокруг точки, а не просто нуля), автоматом выравнивает систему координат вдоль ближайшей по углу оси координат.
[0] - возвращаем сохраненную wcs обратно как было
команды потом уже как хочешь вызываешь, можно просто кнопки через halui mdi_command привязать, либо из другого макроса дергать.
Код: Выделить всё
o<autorot> sub
(o<autorot> call [n])
(n=1 - save 1st center point)
(n=2 - save 2nd point)
(n=3 - auto alignment X or Y axis)
(n=4 - manual rotation around 1st point. 0 anagle = X+ axis )
(n=0 - restore offsets)
O102 if [#1 EQ 1]
#<_p1x> = #<_x>
#<_p1y> = #<_y>
(debug, save 1st point = #<_p1x> ; #<_p1y>)
O102 elseif [#1 EQ 2]
#<_p2x> = #<_x>
#<_p2y> = #<_y>
(debug, save 2nd point = #<_p2x> ; #<_p2y>)
O102 elseif [[#1 EQ 3] OR [#1 EQ 4]]
#<_wcsnum> = #5220
#<_wcsstartind> = [5201 + 20 * #<_wcsnum> ]
#<_wcsoffx> = #[#<_wcsstartind>]
#<_wcsoffy> = #[1+#<_wcsstartind>]
#<_wcsoffr> = #[10+#<_wcsstartind>]
(debug, WCS=#<_wcsnum>, Xoff=#<_wcsoffx>, Yoff=#<_wcsoffy>)
#<_dx> = [#<_p2x> - #<_p1x>]
#<_dy> = [#<_p2y> - #<_p1y>]
#<_ang> = atan[#<_dy>]/[#<_dx>]
(automatic detection of the alignment axis)
O103 if [#1 EQ 3]
O104 if [[#<_ang> GT 135] OR [#<_ang> LT -135]]
#<_ang> = [180 + #<_ang> ]
O104 elseif [[#<_ang> GT 45] AND [#<_ang> LT 135]]
#<_ang> = [ #<_ang> - 90]
O104 elseif [[#<_ang> LT -45] AND [#<_ang> GT -135]]
#<_ang> = [90 + #<_ang> ]
O104 endif
(debug, auto change rot angle = #<_ang>)
O103 else
(debug, rot angle = #<_ang>)
O103 endif
#<_vx> = [#<_p1x> * COS[#<_ang>] - #<_p1y> * SIN[#<_ang>] - #<_p1x>]
#<_vy> = [#<_p1x> * SIN[#<_ang>] + #<_p1y> * COS[#<_ang>] - #<_p1y>]
(debug, wcf off vector = #<_vx>;#<_vy>)
#<_newwcsoffx> = [#<_wcsoffx> - #<_vx>]
#<_newwcsoffy> = [#<_wcsoffy> - #<_vy>]
#<_newwcsoffr> = #<_ang>
G10 L2 P0 X[#<_newwcsoffx>] Y[#<_newwcsoffy>]
G10 L2 P0 R[#<_newwcsoffr>]
O102 elseif [#1 EQ 0]
(debug, restore wcs)
G10 L2 P0 X[#<_wcsoffx>] Y[#<_wcsoffy>]
G10 L2 P0 R0
O102 endif
o<autorot> endsub
m2
-
- Кандидат
- Сообщения: 72
- Зарегистрирован: 03 дек 2023, 09:37
- Репутация: 0
- Настоящее имя: kharpost
- Контактная информация:
Re: Преобразование координат из локальных в машинные и обратно
Это решается просто и было сделано за 10 мин. Потом выяснилось центроискатель не поцентру и это надо компенсировать, Потом выяснилось, что заготовки очень кривые и центровочное отверстие не по центру и это тоже надо компесировать. Пока доволен. Удаётся мерить с погрешностью не более 0,003, при биении центроискателя 0,15
Есть какой нибудь способ подавить сообщение, что ось z выходит за пределы? не даёт пошагово ходить.
- hmnijp
- Мастер
- Сообщения: 1723
- Зарегистрирован: 20 авг 2017, 15:02
- Репутация: 527
- Настоящее имя: Константин
- Откуда: Ульяновск
- Контактная информация:
Re: Преобразование координат из локальных в машинные и обратно
сообщения от того что у вас концевиков нет и нормально нстароенных софтлимитов, или из-за того что у вас от скриптов измерений накапливаются длинные хода в интерпретаторе и на это ругается?
если второе, то делается это так: