Параметрическое программирование (ЧПУ)

Параметри́ческое программи́рование (англ. 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 конец функции, возврат в программу

См. также править