UAVpilot писал(а):G1 X12 Y34 Z56 A78 B90 C87 U65 V43 W21
@UAVpilot спасибо!
Что ж это получается? g-код может крутить каждую ось?! Это хорошая новость(наверное).
Тогда получается именно в g-коде задается управление осями, а не LinuxCNC этим занимается.
Получается это именно задача CAM-программы - написать по 3Д модели правильный g-код? Я правильно понял?
Если да, то для меня это хорошо, т.к. я уже немного писал свой CAM (правда только для 3ех-осевика) и имею опыт в разработке CAM систем.
Я скачал хорошую документацию по g-кодам на русском. Кому нужно вот ссылка:
https://www.chipmaker.ru/files/file/240/
См.п.1.4.
Адреса перемещений состоят из буквы, указывающей на ось, по которой
необходимо выполнить движение, и числа, указывающего на конечную позицию движения
в абсолютном значении (по отношению к началу системы координат - при G90)
или в относительном (по отношению к текущей позиции - при G91).
Как мне кажется в этом определении есть ошибка\неточность, которая потом всех путает.
Правильнее сказать не "указывающего на конечную позицию движения", а "перемещения привода на заданное количество миллиметров\дециметров\градусов\попугаев".
Я тут вот что подумал:
Когда у нас 3ох осевик у которого каждая ось строго соответствует координатам осей в пространстве: X, Y и Z - тогда g-коды читаются как перемещение инструмента по этим 3ем осям.
Например:
G1 X12 Y34 Z56
Читается как:
G1 - это команда линейного перемещения. Т.е. перемещения по линии.
X12 - крутить двигатель столько, чтобы инструмент сдвинулся на 12мм\дюймов по оси X
Y34 - крутить двигатель столько, чтобы инструмент сдвинулся на 34мм\дюймов по оси Y
Z56 - крутить двигатель столько, чтобы инструмент сдвинулся на 56мм\дюймов по оси Z
И работает это все очень просто: в LinuxCNC для каждой оси задается коэффициент.
Обратите внимание - я сказали "оси", а не "привода". И, как ни странно, не у кого это не вызывает диссонанса, несмотря на то, что
это правильно только для 3х-осевика.
Так вот LinuxCNC:
* читает g-код,
* берет значение g-кода(типа количество миллиметров\дюймов на которое нужно переместить инструмент),
* умножает на коэффициент и получает значение: количество шагов шаговика что бы их прошагать или количество управляющих сигналов серводвигателя чтобы послать на серву или количество попугаев, которые нужно подать на электронику, чтобы привод совершил свою работу и сдвинул инструмент на нужное нам количество миллиметров\дюймов.
И все это прекрасно работает пока у нас не больше 3ех двигателей и стоят они в кинематической схеме параллельно, а не последовательно.
Т.к. когда мы в коде пишем Y12 - то мы знаем, что наш инструмент сдвинется только(!) по оси Y. Движения по другим осям не будет.
Но когда кинематика последовательная, и мы крутим двигатель, который перемещает весь наш станок cо всеми другими приводами,
то код
G1 X12 Y34 Z56 A78 B90 C87 U65 V43 W21 нельзя так же прочитать как:
G1 - это команда линейного перемещения. Т.е. перемещения по линии.
X12 - крутить двигатель X столько, чтобы инструмент сдвинулся на 12мм\дюймов по оси X
Y34 - крутить двигатель Y столько, чтобы инструмент сдвинулся на 34мм\дюймов по оси Y
Z56 - крутить двигатель Z столько, чтобы инструмент сдвинулся на 56мм\дюймов по оси Z
A78 - крутить двигатель A столько, чтобы инструмент сдвинулся на 78мм\дюймов
по оси A( <<-- ???)
B90 - крутить двигатель B столько, чтобы инструмент сдвинулся на 90мм\дюймов
по оси B( <<-- ???)
C87 - крутить двигатель C столько, чтобы инструмент сдвинулся на 87мм\дюймов
по оси C( <<-- ???)
U65 - крутить двигатель U столько, чтобы инструмент сдвинулся на 65мм\дюймов
по оси U( <<-- ???)
V43 - крутить двигатель V столько, чтобы инструмент сдвинулся на 43мм\дюймов
по оси V( <<-- ???)
W21 - крутить двигатель W столько, чтобы инструмент сдвинулся на 21мм\дюймов
по оси W( <<-- ???)
Что такое "оси A, B, C,..." если в нашем измерении только 3 координаты задания пространства: X, Y, Z(хотя физики могут и это оспорить
).
Добавляет масла в огонь непонимания и путаницы еще и тот факт, что само слово "ось" может обозначать как
1. "ось направления координат пространства"(которых(в моем представлении о Вселенной) может быть только 3),
2. так и "ось вращения или ось перемещения одного механизма\сустава станка относительно другого".
А для 3ех осевика справедливо так же формулировка что "ось перемещения
инструмента в
пространстве". Которую все чаще всего использую, т.к. большинство ЧПУшников строят именно 3х осевики, т.к. они проще в производстве, настройке и управлении.
Но когда у нас количество осей приводов не соответствуют осям пространства - то нельзя говорить,
что код G1 X12 - сдвинет инструмент по оси X на 12мм\дюймов,
а код G1 V43 - сдвинет инструмент на 43мм по оси V, т.к. оси V не существует.
По большому счету, идея того, что в g-коде X12 сдвинет инструмент в пространстве на 12мм по оси X - даже для 3ох осевика не всегда справедлива.
Например если хотя бы одну из осей: X,Y,Z сделать поворотной. Или если оси приводов стоят последовательно на руке\хоботе.
Надеюсь я смог донести свою мысль, что код: G1 X12 Y34 Z56 - не всегда перемещает инструмент в пространстве по осям X,Y,Z на указанные в g-коде значения.
Код G1 X12 Y34 Z56 - обозначает на сколько попугаев LinuxCNC должен прокрутить двигатели приводов X,Y,Z.
Хорошая новость заключается в том, что мы можем в g-коде управлять каждым двигателем руки.
Плохая новость в том, что у CAM системы прибавляется работы. Мало того, что CAM должен уметь строить нормали(задачи апроксимации) к 3Д модели для траектории движения инструмента с учетом допусков и конфигурации режущего инструмента, мало того что CAM должен уметь высчитывать минимальный маршрут движения инструмента, так еще и понимать кинематику именно твоего станка(Карл) и писать g-код для каждого двигателя руки.