Параметрическое программирование (ЧПУ)
Параметри́ческое программи́рование (англ. parametric programming, также — ма́кропрограммирование) в обрабатывающих системах числового программного управления (ЧПУ) технологическим оборудованием — подход к повышению уровня программирования, реализуемый созданием специализированных языков или расширений к существующим средствам программирования.
Исторически первый язык программирования станков с ЧПУ — G-код по своей сути является языком описания циклограмм движения обрабатывающего инструмента, включения/выключения шпинделя, подачи смазочно-охлаждающих жидкостей (СОЖ) и других действий и не имеет средств текущей проверки состояния процесса обработки. Например, при поломке обрабатывающего инструмента или отсутствии СОЖ, циклограмма, описанная G-кодом, будет бесполезно продолжаться или исполняться опасно для оборудования до вмешательства оператора или окончания G-кода. Для устранения этого существенного недостатка G-кода и были разработаны языки параметрического программирования.
Эти языки имеют много общего с обычными высокоуровневыми языками программирования, например, Фортран, Си. Основное преимущество по сравнению с G-кодом — наличие команд/операторов условного перехода. Это расширение позволяет изменять ход обработки при изменении состояния процесса, например, останавливать обработку с подачей аварийного сигнала при срабатывании датчика износа или поломки инструмента.
Дополнительное преимущество параметрического программирования для станков с ЧПУ — возможность организации сложных вычислений координат инструмента и его перемещений для обработки криволинейных поверхностей, заданных математически в виде 3D-сплайнов или поверхностей Безье.
Особенности параметрического программирования
Производители систем управления используют параметрическое программирование в качестве расширения G-кода. Его можно сравнить с компьютерными языками программирования, такими, как Basic, но он может быть доступен на уровне G-функций (кодов). В отличие от ЧПУ-программирования, в параметрическом программировании расширяются возможности, сравнимые с объектно ориентированными. Используя его системах управления ЧПУ, становятся возможными вариантность вычисления, применение логических операторов, работа с проходами инструмента, движениями манипуляторов, возможность организации циклов, выбор по условию, переход, работа с подпрограммами, добавляются элементы, осуществляющие полный контроль над ЧПУ, — доступ к системным переменным и ячейкам программы электроавтоматики, возможность создавать свои собственные G-коды и функции, которые наиболее полно реализуют управление всех компонентов станка. Возможен доступ к параметрам ЧПУ, хранящим информацию об инструменте, положении рабочих органов, манипуляторов, системы координат, значений G-кода управляющей программы и ошибок. С помощью параметрического программирования можно разрабатывать диалоговые управляющие программы. Подобно компьютерным языкам программирования, в параметрическом программировании их существует несколько версий: Custom Macro, User Task (Okuma), Q Routine (Sodick), Advanced Programming Language (APL G& L). Например, язык макропрограммирования FMS-3000 из подмножества языка Basic дает возможность организовать дополнительные информационные окна, систему слежения за параметрами, режимы контроля и протоколирования процессов обработки. Такие программы выполняются в фоновом режиме и в свободное от всех других задач время, при большой загрузке могут временно приостанавливать свою работу. Используя такие возможности, имеешь один из эффективных способов управления станком, роботом, системой ЧПУ.
Структура программы
Программа, написанная с использованием языка макропрограммирования, имеет аналогичную структуру G-кодов системы управления. Структурную единицу составляет кадр. Кадр является последовательностью символов языка программирования. Элементом кадра является слово, которое состоит из адреса и числового значения или переменной, глобальной переменной.
Пример программы
В качестве примера макропрограммы можно написать подпрограмму функцию G200 для системы управления FMS-3000 и использовать эту G-функцию в качестве отскока и перехода инструмента между проходами, как в случае перехода сверла от одной координате к другой.
Свойства функции:
1. Начальные условия.
2. Отскок на W (в случае простого отскока) или выход в точку смены инструмента, и следуем далее.
3. Выбор инструмента взятие корректора на длину.
4. Выбор G54 G55 G56 G57 G58 G59.
5. Определяем угол поворота детали A
6. Выбор M3 M13 M4 M14.
7. Выбор числа оборотов S.
8. Выход инструмента на позицию по X Y (с коррекцией H).
a=(_a+getparameter(65)) | определяем параметр A (угол поворота) как сумму глобальной переменной (заданной постоянно, угол поворота) и локальной (возвращенной из функции, угол поворота) |
g=getparameter(71) | определяем параметр (выбор точки G54 G55 G56 G57 G58 G59) G как переменную (возвращенной из функции) |
m=getparameter(77) | определяем параметр (дополнительные функции) M как переменную (возвращенной из функции) |
s=getparameter(83) | определяем параметр (число оборотов) S как переменную (возвращенной из функции) |
t=getparameter(84) | определяем параметр (номер инструмента) T как переменную (возвращенной из функции) |
x=getparameter(88) | определяем параметр (координату) X как переменную (возвращенной из функции) |
y=getparameter(89) | определяем параметр (координату) Y как переменную (возвращенной из функции) |
w=getparameter(87) | определяем параметр (величина отскока) W как переменную (возвращенной из функции) |
tt=getdatacadr(134) | переменной tt возвращаем значение предшествующего (предыдущего номера инструмента) |
В отличие от Custom Macro (система управления Fanuc), параметры функции в FMS-3000 необходимо определить в начале подпрограммы.
_t=t | для организации работы последующих функций текущий инструмент T, определяем, как глобальную переменную |
hh=t+100 | задаем номер корректора на длину инструмента |
Выражение hh=t+100 представляет собой таблицу корректоров от 1 до 200. Все корректоры мы разделили на две части от 1..100 корректора на диаметр инструмента, от 101..201 на длину инструмента. Инструменту T1 соответствует номер корректора на диаметр 1 и номер корректора на длину 101. Инструменту T2, номер 2 и номер 102 и т. д.
if paramactive(71)=0 then g=_g | если в функции G54 G55 G56 G57 G58 G59 не задан, выбор точки будет определён из глобальной переменной |
Если в функции G200 параметр G не задать, точка будет взята по умолчанию из глобальной переменной из функции G201.
G37X0Y0A0 | отменяем заданный ранее угол поворота |
if paramactive(87)=0 then goto 500 | если параметр W (отскок) не задан, выходим в точку смены инструмента, переход на метку 500 |
N100G1F2000G17G40G80G91Zw | если параметр W (отскок) не задан, выходим в точку смены инструмента, переход на метку 500 |
G32M1 | технологический стоп |
G90GgG37X0Y0Aa | задаем угол поворота |
goto 600 | если функция задана как простой отскок (без смены инструмента), переходим на метку 600. |
Отскок в точку смены инструмента.
N500M9 | выкл. охлаждение |
G53G1F2000G90G40G49G80Z0 | выход в точку смены инструмента |
M5 | выкл. обороты |
Функции смены инструмента на каждом станке имеют свои особенности в зависимости от количества инструмента в магазине. Например, когда инструмента много, иногда применяются алгоритмы, расставляющие инструмент в произвольном порядке, чтобы не привязывать инструмент к определённым ячейкам и сократить время замены. Большое значение имеет конструкция механики смены инструмента, различного рода манипуляторы, ползуны и т. д.
rem S100 | переключаем диапазон скоростей для ручной смены инструмента |
N502G32M0 | технологический стоп |
hh1=getsystemdata (1000+hh) | читаем значение корректора на длину |
G1G91G43HhhZ-hh1F2000 | отрабатываем корректор |
G90GgG37X0Y0Aa | корректор взят, отрабатываем угол поворота |
if paramactive(83)=0 then goto 600 | если параметр S (обороты) не задан, пропускаем кадры и переходим на метку 600 |
if paramactive(77)><0 then m= | по умолчанию вспомогательная функция M будет M3 |
N520MmSs | задаем дополнительные функции M и S |
Tt | выбираем номер инструмента |
N600if paramactive(88)=0 then goto 9999 | если хоть одна из координат XY позиции не задана, в позицию не выходим, пропускаем кадры и переходим на 9999 |
if paramactive(89)=0 then goto 9999 | если хоть одна из координат XY позиции не задана, в позицию не выходим, пропускаем кадры и переходим на 9999 |
G1F2000G1X(x+1)Y(y+1) | выходим в предпозицию, даем натяг по XY 1mm |
F100G9XxYy | точный выход в позицию XY с проверкой |
N9999G1F2000 | задаем начальные условия для контура |
G32 | тормозим просчет программы |
M99 | конец функции, возврат в программу |