Массив GMA
Массив GMA — это удобство sppx для обработки многоосевых перемещений MULTIGOTO: он представляет управляемые координаты станка (с их новыми/предыдущими значениями, флагами вывода и результатами приведения углов) в единой индексируемой структуре.
Только sppx. Прямого аналога GMA в .NET нет. В .NET-постпроцессоре многоосевое перемещение читается из строго типизированной команды MULTIGOTO (
ICLDMultiGotoCommand) — её коллекцияAxesдаёт каждую ось и значение — а работа с регистрами, которую GMA выполняет в sppx, делается через API регистров .NET. См. раздел Доступ из .NET команды MULTIGOTO.
Доступ из sppx
Используйте предопределённый массив GMA для удобной обработки команды многоосевого перемещения MULTIGOTO в технологической программе и в шаблоне команды. Массив GMA инициализируется непосредственно перед обработкой технологической команды MULTIGOTO.
Каждый элемент массива GMA соответствует управляемой координате схемы станка. Элементы массива GMA могут добавляться вручную через интерфейс генератора постпроцессоров либо импортироваться напрямую из схемы станка CAM-системы.
При необходимости координаты можно добавлять в массив GMA во время выполнения постпроцессора с помощью следующего синтаксиса оператора:
GMA(<AxisName> {,<RegisterName>})
Здесь AxisName — допустимое выражение, возвращающее строку. Имя новой координаты будет равно AxisName, используйте его для доступа к новому элементу. Необязательный параметр RegisterName — имя регистра, связанного с новой координатой.
Пример
GMA("AxisXPos")
Используйте имя координаты для доступа к её свойствам GMA:
GMA[<AxisName>].<Property>
Или для шаблонов:
<Axisname>.<Property>
Здесь AxisName — допустимое строковое выражение, которое должно быть корректным именем координаты. В следующем примере имя координаты AxisXPos используется для доступа к текущему значению координаты:
GMA["AxisXPos"].Vn ! Vn — текущее значение координаты
Структура 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, которому присваиваются значения 1 или 0. Используйте этот флаг для определения того, указана ли координата с именем AxisName в данной команде MULTIGOTO.GMA[<AxisName>].OutFlagимеет значение 1 (флаг установлен), если в данной команде MULTIGOTO есть координата с именем AxisName, иначе флаг равен 0.GMA[<AxisName>].Vn— поле типа Real, значение которого — новое значение координаты AxisName, установленное командой MULTIGOTO. Используйте поле Vn для чтения или задания нового значения координаты.GMA[<AxisName>].Vp— поле типа Real, содержащее значение координаты AxisName, назначенное предыдущей командой MULTIGOTO. Используйте поле Vp для чтения или задания предыдущего значения координаты.GMA[<AxisName>].Axis— поле типа String, являющееся именем координаты и равное AxisName. Поле доступно только для чтения.GMA[<AxisName>].Reg— поле типа String, значение которого — имя регистра, связанного с координатой. Поле доступно только для чтения.GMA[<AxisName>].TurnCount— поле типа Integer, которому присваивается число полных оборотов поворотной оси. Поле доступно только для чтения.GMA[<AxisName>].Dir— значение типа Integer, которому присваивается +1, если значение координаты возрастает, иначе устанавливается -1. Поле доступно только для чтения.
Используйте поля TurnCount и Dir для обработки перемещения поворотных осей. CAM-система передаёт перемещения поворотных осей в абсолютных значениях, тогда как некоторые системы ЧПУ принимают для этих координат только значения в ограниченных диапазонах, например от 0º до 360º или от 180º до -180º. Используйте диалог Параметры осей станка для задания параметров границ и диапазонов поворотных осей. Если для данной координаты определено приведение углов, то при обработке команды MULTIGOTO система приведёт значение координаты Vn к заданному диапазону, присвоит полю 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). Значение, переданное CAM-системой, "-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, if Vn' > 360
Vn = Vn' - (Vn' \ 360)*360 + 360, if Vn' < 0
Vn = -745 - (-745\360)*360 + 360 = 335
Vn' — текущее не приведённое значение координаты, Vp' — предыдущее не приведённое значение координаты.
Ниже приведён пример простой программы команды MULTIGOTO, использующей массив GMA:
program MultiGoto
! Используйте поля GMA, чтобы присвоить
! соответствующим регистрам их новые значения
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