Перейти к публикации

Вопросы о скорости подачи для 5-осевого станка


Рекомендованные сообщения

Пишу эмулятор 5-осевого ЧПУ контроллера для своего симулятора и хочу понять как рассчитываются скорости движения осей.

Попробую описать как я понимаю это сейчас и задать пару вопросов по ходу. Буду очень благодарен за исправления и/или подтверждение правильности.

Предположим, что все рассчитывается для 5-осевого (XYZAC стол-стол) станка Okuma MU500 с родной стойкой.

Ситуация 1 - не использует RTCP, глобальная система координат станка:

1. При получении команды G1 с 5ю координатами (XYZAC), контроллер рассчитывает разницу между текущей позицией и новой позицией для каждой координаты,

2. находит длину этого 5-компонентного вектора,

3. делит длину на текущую скорость подачи (из регистра F) и получает время, за которое должен выполнить перемещение.

4. Делит перемещение для каждой оси на это время и получает скорость каждой оси.

5. Если полученные скорости каждой оси не превышают максимальную скорость, то каждая ось движется с полученной скоростью

6. Если одна или несколько скоростей превышают максимум,

6.1 то находится коэффициент на который они превышают (скорость делится на максимальную скорость)

6.2 выбирается максимальный коэффициент

6.3 все скорости осей делятся на данный коэффициент

6.4 все оси движутся с полученными (в результате деления) скоростями.

Математически это выглядит так

P0 - текущее положение станка например, 5-компонентный вектор, например P0 = {0,0,0,0,0}

После команды: G1 XP1[0] YP1[1] ZP1[2] AP1[3] CP1[4] Ff

P1 - Новое положение, которое получено, f-скорость подачи

1. dP = P1-P0

2. L = sqrt(dP[0]^2+dP[1]^2+dP[2]^2+dP[3]^2+dP[4]^2) - рассстояние в абстрактных единицах (sqrt - корень квадратный, ^2 - возведение во вторую степень)

3. T = L/f - время в секунда(минутах)

4. VX = dP[0]/T, VY = dP[1]/T, VZ = dP[2]/T, VA = dP[3]/T, VC = dP[4]/T, VX, VY..., VC - скорость каждой оси в (абстрактные единицы в секунду)

5. Если VX<VXMax и VY<VYMax и VZ<VZMax и VA<VAMax и VC<VCMax, просто используем эти скорости

6. Иначе

6.1 KX = VX/VXMax, KY = VY/VYMax, KZ = VZ/VZMax, KA = VA/VAMax, KC = VC/VCMax, KX, KY, ..., KZ - коэффициенты превышения максимума для каждой скорости

6.2 K = max(KX, KY, KZ, KA, KC) - максимальный коэффициент превышения скорости

6.3 VX = VX/K, VY = VY/K, VA = VA/K, VA = VA/K, VC = VC/K - новые скорости для каждой оси

6.4 все оси движутся с полученными (в результате деления) скоростями.

Тут вроде все логично.

А теперь самое важное для случая RTCP

Если я правильно понимаю, то происходит тоже самое, только для расчетов используются не все 5 координат, а только линейные координаты

Ситуация 2 - использует RTCP, локальная система координат детали:

1. При получении команды G1 с 5ю координатами (XYZAC), контроллер рассчитывает разницу между текущей позицией и новой позицией для линейных координат XYZ,

2. находит длину этого 3-компонентного вектора,

3. делит длину на текущую скорость подачи (из регистра F) и получает время, за которое должен выполнить перемещение.

4. Делит перемещение для каждой оси (все 5) на это время и получает скорость каждой оси.

5. Если полученные скорости каждой оси не превышают максимальную скорость, то каждая ось движется с полученной скоростью

6. Если одна или несколько скоростей превышают максимум,

6.1 то находится коэффициент на который они превышают (скорость делится на максимальную скорость)

6.2 выбирается максимальный коэффициент

6.3 все скорости осей делятся на данный коэффициент

6.4 все оси движутся с полученными (в результате деления) скоростями.

1. dP = P1-P0

2. L = sqrt(dP[0]^2+dP[1]^2+dP[2]^2) - рассстояние в абстрактных единицах

3. T = L/f - время в секунда(минутах)

4. VX = dP[0]/T, VY = dP[1]/T, VZ = dP[2]/T, VA = dP[3]/T, VC = dP[4]/T, VX, VY..., VC - скорость каждой оси в (абстрактные единицы в секунду)

5. Если VX<VXMax и VY<VYMax и VZ<VZMax и VA<VAMax и VC<VCMax, просто используем эти скорости

6. Иначе

6.1 KX = VX/VXMax, KY = VY/VYMax, KZ = VZ/VZMax, KA = VA/VAMax, KC = VC/VCMax, KX, KY, ..., KZ - коэффициенты превышения максимума для каждой скорости

6.2 K = max(KX, KY, KZ, KA, KC) - максимальный коэффициент превышения скорости

6.3 VX = VX/K, VY = VY/K, VA = VA/K, VA = VA/K, VC = VC/K - новые скорости для каждой оси

6.4 все оси движутся с полученными (в результате деления) скоростями.

Проблема (или мое недопонимание): как пользователь тут контролирует скорость поворотных осей A, C? Получается, что они могут быть любыми в пределах максимума.

Получается, что линейная скорость зависит от величины перемещения поворотных осей, так как они не должны превышать максимум?

Т.е. в ситуации

(Начальная позиция 0,0,0,0,0)

G1 X1 Y0 Z0 A1 C0

скорость A будет 1градсу/с,

а в ситуации

G1 X1 Y0 Z0 A1 C0

скорость A будет 100градсов/с,

а если ограничение по скорости А у нас 50градусов/с, то линейная скорость будет в два раза меньше.

Прав ли я во всем этом?

Заранее большое спасибо за помощь!

Ссылка на сообщение
Поделиться на других сайтах


Вот только недавно с этим вопросом разбирался на тему создания собственного

постпроцессора, могу порекомендовать изучить мануал к IMSpost на английском.

Особенно раздел с переменными.

PS К слову, у меня желание разработать собственный постпроцессор отпало :)

мануал если интересно могу скинуть.

мой_ник@gmail.com

icq: 408-116-887

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...