Основы макропрограммирования
-
Макро-программирование: Полезный инструмент для мастерских с ЧПУ ️
Макро-программирование — это полезный инструмент для любой мастерской с ЧПУ, будь то гараж одного человека или международный конгломерат. Макро-программирование позволяет сократить код и выполнять повторяющиеся задачи легко и быстро. Все встроенные циклы в управлении — это не что иное, как макросы. Макросы также чрезвычайно полезны для серийных деталей.
Все компьютерное программирование на фундаментальном уровне очень похоже. Синтаксис команд и цель программирования могут изменяться, но основы подхода к нему, логика работы и поток выполнения программы остаются практически одинаковыми.
Первый шаг в программировании
Первый шаг в любом программировании — определить функциональность, требуемую от программы. Функциональность определяется как конечный результат(ы) и возможности, ожидаемые от компьютерного кода. Другими словами, что программа должна делать.
Определение желаемого результата
Когда мы пишем макрос, у нас есть желаемый результат. Запишите общий результат, который вы хотите получить от программы. Общий результат может быть таким, как:
- Сверление по окружности ️
- Фрезеровка прямоугольного кармана
- Обработка поверхности блока
- Прорезание пазов
Пример: Сверление по окружности
После того как мы определили общую функциональность, нам нужно уточнить специфику того, что мы хотим от программы. Мы должны установить пределы функциональности, которую мы хотим достичь. Если не установить пределы, программа становится слишком большой, громоздкой и трудоемкой.
В нашем примере одним из основных ограничений, которое мы должны установить, является максимальное количество отверстий, которые мы сможем просверлить в макросе. Ради краткости ограничим себя 10 отверстиями (у нас есть другой вопрос, который на самом деле позволяет неограниченное количество отверстий, используя только 10 как максимум здесь).
- Максимальное количество отверстий в шаблоне: 10
Следующий пункт в списке функциональности, касающийся сверления отверстий: Есть ли в управлении машины цикл сверления или нет? В большинстве случаев ответ будет "да", так что будем исходить из этого.
- Цикл сверления в управлении: Да
Следующий пункт в списке функциональности: Хотим ли мы иметь возможность начинать шаблон отверстий под углом, отличным от основной оси машины (X, Y, Z)? Это часто встречается в деталях, так что да, мы хотим эту функциональность.
- Возможность начинать отверстия под углом, заданным оператором: Да
Далее: Хотим ли мы, чтобы макрос вызывал инструмент, или инструмент уже будет в шпинделе при вызове макроса? Давайте сделаем так, чтобы макрос не вызывал инструмент. Это действительно предпочтение программиста, но поскольку существует вероятность того, что мы можем выполнять несколько шаблонов болтов одним и тем же инструментом, нам не нужно переходить в положение смены инструмента каждый раз между шаблонами.
- Макрос вызывает инструмент: Нет
Далее: Хотим ли мы включить возможность множества наших максимальных отверстий? Это позволит вам сверлить больше, чем заявленное максимальное количество отверстий. Думаю, мы можем реализовать это коротко, так что сделаем это.
- Макрос позволяет множества отверстий: Да
Какую еще функциональность мы должны определить? Пока больше ничего не приходит в голову, так что продолжаем с описанной выше функциональностью.
-
Стандарты для переменных в макро-программировании ️
Теперь, когда мы определили функциональность, нам нужно установить некоторые стандарты в отношении макро-программирования. Первое, что следует учесть, это таблица переменных. Существует четыре (4) типа переменных:
Локальные переменные
Эти переменные локальны для программы. Обычно используются для передачи значений в циклические вызовы или как промежуточные математические значения. Я не люблю использовать локальные переменные из-за одной основной проблемы: они сбрасываются в null (не 0), когда управление сбрасывается или программа заканчивается. Хотя они вполне подходят для передачи переменных в встроенные циклы и т.д., они могут вызвать проблемы, если использовать их для других целей. По политике я никогда не использую их для чего-либо. В Fanuc они обычно обозначаются как #100-#499 (если у вас столько доступно). Локальные переменные доступны только для программы, в которой они используются.
Глобальные переменные
Эти переменные, однажды установленные, остаются установленными, если вы не измените или не сбросите их через макрос или клавиатуру управления. В отличие от локальных переменных, глобальные переменные доступны для любой программы в управлении. Я использую глобальные переменные, потому что они сохраняются, могут использоваться в любой программе, и вы можете отслеживать, что происходит, если возникнет проблема. В Fanuc они обычно обозначаются как #500-#999.
Системные переменные ️
Эти переменные доступны для использования в макро-программировании и позволяют вам записывать и извлекать информацию из самого управления, такую как инструмент в шпинделе, активное инструментальное смещение, запись и чтение смещений, проверка активных кодов и т.д. Очень полезны, НО они НЕ стандартизированы в значительной степени. Вам нужно будет проконсультироваться с разделом макро-программирования ваших руководств по управлению, чтобы определить, что это за переменные.
Строковые переменные
Строковые переменные — это группа символов, интерпретируемых как одно значение. Обычно определяются с помощью символа. Строковые переменные позволяют манипулировать текстом и фразами и т.д. Не все управления поддерживают строковые функции.
Определение полей переменных
Обычно я определяю свои поля переменных следующим образом:
- #500-599: Входные переменные для макроса
- #600-799: Математические функции макроса
- #800-899: Переменные, связанные с инструментами, смещениями и системными переменными
- #900-999: Логические биты, счётчики и т.д.
-
Определение входных данных
После того как мы определили нашу функциональность и стандартизировали использование таблицы переменных, нам нужно определить входные данные для нашей программы, необходимые для получения желаемых результатов функциональности. Мой метод заключается в том, чтобы поместить входные данные в отдельную подпрограмму от основной рабочей программы. Это помогает предотвратить ошибки при редактировании из-за любопытства или случайных изменений в основном макросе.
Входные данные, которые нам нужны для выполнения сверления, следующие:
- #500: Количество отверстий для сверления
- #501: Диаметр окружности болтов
- #502: Угол первого отверстия вдоль оси X при угле координат машины 0. Обычно это направление X+.
- #503: Абсолютная позиция по оси X для центра окружности болтов
- #504: Абсолютная позиция по оси Y для центра окружности болтов
- #505: Глубина отверстия
- #506: Глубина захода (Pecking Depth)
- #507: Высота плоскости R (R plane clearance)
- #508: Скорость подачи (Feedrate) для сверления
- #509: Высота зазора (над частью Z0) для быстрых перемещений между отверстиями
- #510: Скорость шпинделя для сверления
- #511: Функция W в цикле сверления G82
- #512: Функция E в цикле сверления G82
- #513: Функция V в цикле сверления G82
- #514: Функция L в цикле сверления G82
Это все, что я могу придумать на данный момент, что нам нужно для достижения нашей заявленной функциональности. Если кто-то заметит что-то пропущенное, дайте мне знать, так как я пишу это и обдумываю по ходу. Кстати, я пишу это, основываясь на реализации Fanuc на Brother B00.
Металлический
калькулятор
веса онлайн