Предопределенный массив <GMA>
Предопределенный массив <GMA> предназначен для удобного обращения с параметрами команды многокоординатного перемещения <MULTIGOTO> внутри процедуры обработки, а также при использовании шаблонов обработки этой команды. Массив <GMA>, также как и массив <CLD>, заполняется каждый раз перед обработкой команды. Но если массив <CLD> является универсальным и может использоваться для любой команды, то <GMA> следует использовать только для команды <MULTIGOTO>.
Каждый из элементов в массиве <GMA> всегда соответствует управляемой координате в кинематической схеме соответствующего станка. Список возможных элементов массива <GMA> определяется для каждого станка однократно. Он может быть импортирован из кинематической схемы станка SprutCAM, либо заполнен вручную.
Добавление управляемых координат в список может производиться не только в режиме проектирования постпроцессора, но и в режиме исполнения путем доступа из кода процедур обработки, например команды <PartNo>. Синтаксис добавления управляемой координаты в список следующий:
GMA(<AxisName> {,<RegisterName>})
Здесь:
<AxisName> – строковая переменная или константа, содержащая имя управляемой координаты.
<RegisterName> – имя регистра, ассоциированного с управляемой координатой (необязательный параметр).
Пример добавления:
GMA(“AxisXPos”)
Обращение к элементам массива <GMA> следует производить по имени управляемой координаты.
GMA[<AxisName>]
Здесь <AxisName> – строковая переменная или константа, содержащая имя управляемой координаты. Например, для управляемой координаты с именем <AxisXPos> обращаться к массиву в процедуре обработки нужно так:
GMA[“AxisXPos”].Vn ! Vn – текущее значение координаты
Примечание: Доступ к элементам массива <GMA> может быть осуществлен не только из программы обработки технологической команды <MultiGoto>, но и из шаблона данной команды. Более подробно об использовании <GMA> в шаблонах написано в разделе <Шаблоны>.
Каждым элементом массива <GMA> является структура, имеющая следующие составляющие:
GMA[<AxisName>].OutFlag
GMA[<AxisName>].Vn
GMA[<AxisName>].Vp
GMA[<AxisName>].Axis
GMA[<AxisName>].Reg
GMA[<AxisName>].TurnCount
GMA[<AxisName>].Dir
<GMA[<AxisName>].OutFlag> – поле имеет тип <Integer> (целое) и может содержать только два значения: 0 или 1. Данный признак идентифицирует наличие управляемой координаты с именем <AxisName> в списке текущей команды <MULTIGOTO>. Если в данной команде <MULTIGOTO> координата с именем <AxisName> присутствует, то <OutFlag> имеет значение 1, иначе <OutFlag> равен 0. Поле <OutFlag> может использоваться только для чтения.
<GMA[<AxisName>].Vn> – поле имеет тип <Real> (вещественные) и содержит новое значение управляемой координаты с именем <AxisName>, т.е. то значение, которое содержится в текущей команде <MULTIGOTO>. Поле <Vn> может использоваться как для чтения значения, так и для записи в него другого значения (т.е. может находиться слева от оператора присвоения <=>).
<GMA[<AxisName>].Vp> – элемент структуры имеет тип <Real> (вещественные) и содержит значение управляемой координаты <AxisName>, присвоенное предыдущей командой <MULTIGOTO>. Элемент <Vp> может использоваться как для чтения значения, так и для записи в него другого значения (т.е. может находиться слева от оператора присвоения <=>).
<GMA[<AxisName>].Axis> – поле имеет тип <String> (строка) и содержит имя соответствующей управляемой координаты. Может использоваться только для чтения.
<GMA[<AxisName>].Reg> – поле имеет тип <String> (строка) и содержит имя регистра, связанного с соответствующей управляемой координатой. Может использоваться только для чтения.
<GMA[<AxisName>].TurnCount> и <GMA[<AxisName>].Dir> – поля имеют смысл только для поворотных (периодических) осей станка. В системе SprutCAM величины углов поворотных осей могут не ограничиваться значениями от 0º до 360º, а, к примеру, могут принимать значения 764º, -135º, 1276º и т.п. Однако в некоторых стойках ЧПУ используются значения только из ограниченного диапазона: от 0º до 360º или от -180º до 180º. В настройках генератора постпроцессоров для любой из поворотных управляемых координат станка можно установить произвольный диапазон, к которому должны приводиться неограниченные значения, приходящие из системы SprutCAM. Поля <TurnCount> и <Dir> имеют тип <Integer> (целые) и используются для сохранения информации соответственно о количестве полных оборотов и о направлении изменения управляемой координаты после приведения ее к указанному ограничивающему диапазону. Поле <Dir> может принимать только два значения: +1 и -1. Значение +1 сигнализирует об изменении состояния координаты в положительном направлении (в направлении увеличения), а -1 – в отрицательном направлении (направлении уменьшения). <TurnCount> и <Dir> могут использоваться только для чтения.
Рассмотрим несколько примеров заполнения массива <GMA> параметрами команды <MULTIGOTO>. Предположим, что поворотная ось C (<AxisCPos>) ограничена диапазоном от 0º до 360º.
Команда:
MULTIGOTO COUNT 4, AxisXPos(18) 80, AxisYPos(20) 19.877,
AxisZPos(22) -200, AxisCPos(24) 0
Массив <GMA> для команды <MULTIGOTO> |
|||||||
Имя управляемой координаты |
OutFlag |
Vn |
Vp |
Axis |
Reg |
TurnCount |
Dir |
AxisXPos |
1 |
80 |
-//-//- |
“AxisXPos” |
“X” |
-//-//- |
-//-//- |
AxisYPos |
1 |
19.877 |
-//-//- |
“AxisYPos” |
”Y” |
-//-//- |
-//-//- |
AxisZPos |
1 |
-200 |
-//-//- |
“AxisZPos” |
”Z” |
-//-//- |
-//-//- |
AxisCPos |
1 |
0 |
-//-//- |
“AxisCPos” |
”C” |
-//-//- |
-//-//- |
Неопределенность некоторых величин (помечены знаком «-//-//-») связана с отсутствием информации о предыдущем значении координаты.
Команда:
MULTIGOTO COUNT 1, AxisCPos(24) 270
Массив <GMA> для команды <MULTIGOTO> |
|||||||
Имя управляемой координаты |
OutFlag |
Vn |
Vp |
Axis |
Reg |
TurnCount |
Dir |
AxisXPos |
0 |
80 |
80 |
“AxisXPos” |
”X” |
-//-//- |
-//-//- |
AxisYPos |
0 |
19.877 |
19.877 |
“AxisYPos” |
”Y” |
-//-//- |
-//-//- |
AxisZPos |
0 |
-200 |
-200 |
“AxisZPos” |
”Z” |
-//-//- |
-//-//- |
AxisCPos |
1 |
270 |
0 |
“AxisCPos” |
”C” |
0 |
+1 |
Команда:
MULTIGOTO COUNT 2, AxisZPos(22) 250, AxisCPos(24) -745
Массив <GMA> для команды <MULTIGOTO> |
|||||||
Имя управляемой координаты |
OutFlag |
Vn |
Vp |
Axis |
Reg |
TurnCount |
Dir |
AxisXPos |
0 |
80 |
80 |
“AxisXPos” |
”X” |
-//-//- |
-//-//- |
AxisYPos |
0 |
19.877 |
19.877 |
“AxisYPos” |
”Y” |
-//-//- |
-//-//- |
AxisZPos |
1 |
250 |
-200 |
“AxisZPos” |
”Z” |
-//-//- |
-//-//- |
AxisCPos |
1 |
335 |
270 |
“AxisCPos” |
”C” |
2 |
-1 |
В последнем примере исходное значение оси <AxisCPos(C)> «-745 º» приводится к диапазону от 0º до 360º следующим образом:
TurnCount = |(Vn’ - Vp’) \ 360|
TurnCount = |(-745 -270) \ 360| = 2
Dir = Sgn(Vn’-Vp’)
Dir = Sgn(-745 -270) = -1
Vn = Vn’ – (Vn’ \ 360)*360, если Vn’ > 360
Vn = Vn’ – (Vn’ \ 360)*360 + 360, если Vn’ < 0
Vn = -745 – (-745\360)*360 + 360 = 335
Здесь <Vn’> – текущее неприведенное значение координаты, <Vp’> – предыдущее неприведенное значение координаты.
Рассмотрим простейший пример обработки технологической команды <MULTIGOTO> с использованием предопределенного массива <GMA>:
program MultiGoto
! Заносим в соответствующие регистры значения
! координат из текущей команды MULTIGOTO
if GMA["AxisXPos"].OutFlag>0 then
X = GMA["AxisXPos"].Vn
if GMA["AxisYPos"].OutFlag>0 then
Y = GMA["AxisYPos"].Vn
if GMA["AxisZPos"].OutFlag>0 then
Z = GMA["AxisZPos"].Vn
if GMA["AxisCPos"].OutFlag>0 then
C = GMA["AxisCPos"].Vn
! Выводим полученные значения в кадр УП
OutBlock
end
Сопутствующие ссылки: