Параметрическое
программирование.
В этой статье мы поговорим
о параметрических программах и языке
программирования Macro B
(который присутствует в системах Fanuc,
а также в немного изменёном виде в
некоторых других системах) . Во многих
отношениях макропрограммирование это
высший уровень программирования в
G-кодах. Оно
предлагает большую гибкость в составлении
программ. Без него G-код
не полноценная программа, а лишь вручную
заданная серия шагов
. Если
, например, в станке нет стандартоного
цикла сверления (такого как G83),
то приходится писать код ввода-вывода
сверла вручную - долго, муторно, а если
ещё опечататься, то можно на ускоренном
одводе и в заготовку врезаться. А если
в станке нет функции копировать/вставить,
то уже не получится кусок кода отвественный
за сверление просто скопировать и
вставить в новую программу - приходится
набивать всё заново в ручную. Вместо
этого можно написать небольшую программку,
где чтобы поменять глубину сверления
достаточно поменять лишь одну переменную.
Таким образом, владея языком macroB
можно значительно снизить
время написания программ со стойки, не
говоря уже про написание универсальных
программ, макропрограмм (если надо
делать однотипные детали, отличающиеся
размерами). В общем знание языка macroB
может значительно упростить
жизнь оператору. По возможностям
параметрическое программирование
превосходит простой G-код
как алгебра превосходит арифметику.
Итак, приступим непосрественно к
изучению.
Переменные.
Переменная
представляет собой имя области памяти,
где хранятся данные. Переменным
присваиваются значения и при обращении
к ним возвращают эти самые значения.
Переменные в macroB записываются
в виде цифры, перед которой идёт решётка.
Например, #1 (переменная
1), #123 и т.д.
Переменные бывают локальные, общие и
системные. Локальные переменные это
переменные от #1 до
#33, значения
из этих переменных будут доступны только
в текущей программе и не передаются в
подпрограммы, при выключениее питания
стойки эти переменные обнуляются.
Общие
переменные хранятся в области памяти,
доступной всем программам. Значения
этих переменных можно передавать в
другие подпрограммы. Переменные в
диапазоне #100 - #199
обнуляются
при выключении пиания, в диапазоне
#500-#999 сохраняют
свои значения даже при выключенном
питании.
Системные
переменные. Это переменные, начинающиеся
с #1000 и
дальше. В этих переменных хранятся
значения параметров, если вы не знаете
значения этих переменных то их не стоит
трогать.
Также сущесвует
переменная #0,
которая не хранит никаких значений и
всегда равна нулю.
В Mach3
10.320 переменных от #0
до #10320.
Значения переменных не сбрасываются
при отключении питания.
Для того,
чтобы переменная имела каое-либо значение
ей его нужно сначала присвоить.
Присваивается значение следующим
образом. Пример:
#101
= 10 // мы присвоили значение
переменной #1
G0
X0Z#101; //
револьвер или шпиндель
или что там ещё на станке катается
переедет в координаты X0Z10
С переменными
можно производить различные арифметические
и геометрические операции, такие как
сложение(+), вычитание(-), умножение(*),
деление(/),
возведение в степень (**),
извлечение квадратного корня (SQRT),
вычисление косинуса (cos)
и подобные. Более подробно
мы их рассмотрим позже.
Пример:
#101 = 8;
#102 = 2;
G0X#101Z#101;
#101 = #101
+ #102; // мы прибавили к
значению переменной #101
значение переменной #102,
таким образом #101 теперь
у нас равняется 10.
G0X#101;
Также для
переменных доступны операторы сравнения,
такие как EQ (равно), LE
(меньше или равно) и т.д. См. таблицу
операторов сравнения macroB.
Где нельзя
применять переменные?
- в номерах
программ (т.е запись O#101
недопустима);
- в номерах
кадров (N#110 - недопустимо);
- в адресе block
skip (/120 - допустимо,
/#120 - недопустимо);
- в цикле
WHILE...DO...END (DO#1 - недопутимо);
Зачем нужны
переменные?
Переменные имеет
смысл использовать там, где надо
подставить некоторое вычисленное
значение. Например в циклах (о циклах
репь пойдёт в следующей части статьи).
Пример: нам
необходимо сделать широкую (30мм) наружную
канавку отрезным резцом, с шириной
пластины 3 мм. Можно 10 раз прописывать
координаты вручную, а можно написать
циклом. Диаметр заготовки
50мм, диаметр шейки 40 мм.
#101
= -13; // начальное
положение Z;
#102
= 3; // ширина резца;
#103
= -37; // конечный Z;
T101;
G50
S1400 M4;
G96
S120 M8;
G0
X51Z#101; // выводим резец на начальное
положение
WHILE
[#101 GE #103] DO1; // Пока
[#101 больше или равно #103]
выполнять блок
G1
X40 F0.05; //между
DO1 и END1
G0
X51;
#101
= #101 - #102; // резец
смещается по Z на ширину
резца
END1;
G0
X52;
Z#101;
// переходим
в начальное положение
G0
X41 ;
G1
X40 F0.05;
Z#103F0.03;
// и делаем чистовой
проход до конечного Z
G0
X60; // уходим на безопасный
X
G28U0W0;
// уходим в реферрентную
точку
M30;
Вот
и вся программа, а сколько пришлось
бы писать вручную. А если канавку в
следующий раз надо сместить на пару
миллиметров? Вот тут то и проявляется
вся прелесть знания языка macroB.
А если ввести ещё переменные для оси X,
то изменять размеры шейки можно будет
изменив всего 5 переменных (в кадрах,
где мы подводим резец просто пишем
X[#104+1], если, конечно за X у
нас будет отвечать переменная #104).
Также в следующий раз, когда нам надо
будет сделать шйку или зарезьбовую
канавку мы можем просто скопировать
кусок кода и подставить актуальные
значения.
Данный пример
подходит только для канавок, ширина
которых кратна ширине резца (т.к просто
тупо смещает Z на ширину
резца каждую итерацию цикла). Конечно
туда следует добавить дополнительное
условие, но давайте к более сложным
примерам перейдём в поледующих статьях.
|