PHYSICGOTO - Перемещение в физических осях станка
Отображение команды
Как команда отображается в списке команд CLData:
PhysicGOTO COUNT 2, MACHINE, X 0, Y 0, GEOM X 125.281, Y -32, Z 194, NX 0, NY 0, NZ 1, NW 0, MSF 0, Time 0.013
PhysicGOTO - это универсальная технологическая команда, которая используется для передачи перемещения по координатам станка. Она похожа на команду MULTIGOTO, разница состоит в следующем. Команда MULTIGOTO содержит координаты осей относительно текущей системы координат заготовки (пространственные координаты относительно G54-G56 или локальной системы координат), а интерполяция базовых осей выполняется с контролем прямолинейности траектории для каждой из промежуточных точек. В ISO-кодах это соответствует командам линейной интерполяции G01. В системе управления роботом это соответствует типу перемещения Linear (L, LIN, MOVEL), Control path (CP) motion. В отличие от неё, команда PhysicGOTO содержит физические значения координат относительно машинных нулей по каждой оси, а интерполяция базовых осей не контролирует промежуточные точки траектории, проверяется только достижимость конечной точки. В ISO-кодах ей соответствует команда перемещения G53 (SUPA в Sinumerik, M91 в HEIDENHAIN). В системе управления роботом ей соответствует тип перемещения Joint move (J, MOVEJ), Point-to-point (PTP) motion.
Доступ из sppx
Обработчик: program PhysicGOTO
| Параметр | Массив CLD | Описание |
|---|---|---|
| X Y Z |
CLD[1] CLD[2] CLD[3] |
Пространственные координаты кончика инструмента относительно активной системы координат заготовки |
| NX NY NZ NW |
CLD[4] CLD[5] CLD[6] CLD[7] |
Ориентация системы координат инструмента относительно активной системы координат заготовки. Способ задания ориентации зависит от настроек схемы станка. Это могут быть углы Эйлера в разных нотациях, вектор нормали инструмента, кватернион или вращающийся вектор. |
| MSF | CLD[8] | Флаги состояния станка (flips). Актуально для роботов и станков, которые могут обеспечивать несколько конфигураций физических осей для одной и той же пространственной позиции. См. описание в следующей таблице. |
| Time | CLD[9] | Время перемещения. |
| AxesCount | CLD[10] | Число физических координат станка, задействованных в этой команде. |
| r1 | CLD[11] | Номер оси с именем Axis1Pos в списке координат. |
| Val1 | CLD[12] | Значение координаты станка Axis1Pos. |
| r2 | CLD[13] | Номер оси с именем Axis2Pos в списке координат. |
| Val2 | CLD[14] | Значение координаты станка Axis2Pos. |
| … | … | … |
| rN | CLD[2*N+9] | Номер оси с именем AxisNPos в списке координат. |
| ValN | CLD[2*N+10] | Значение координаты станка AxisNPos. |
Параметры, доступные через оператор cmd
| TCLDPhysicGoto: ComplexType | Команда многокоординатного перемещения по физическим осям станка |
|---|---|
| Axes: Array, Key="AxisID" | cmd.Ptr["Axes"] - Массив структур типа Axis. Одна команда может включать перемещение по нескольким осям, положение каждой из которых хранится в этом массиве. |
| Axis: ComplexType | cmd.Ptr["Axes"].Item[Index] или cmd.Ptr["Axes(AxisName)"] - Отдельный элемент массива Axes. Содержит информацию о перемещении по одной оси станка. Доступ к элементам массива возможен либо по индексу, либо по ключевому полю. Здесь AxisName - значение ключевого поля, которое должно совпадать со значением поля AxisID. |
| AxisID: String | cmd.Str["Axes(AxisName).AxisID"] - Идентификатор оси станка, для которой задаётся новое положение. Определяется схемой станка. |
| Value: Double | cmd.Flt["Axes(AxisName).Value"] - Новое положение оси станка, в которое она перемещается. |
| Pos5D: ComplexType | cmd.Ptr["Pos5D"] - структура, содержащая координаты, определяющие конечное положение инструмента в пространстве. Определяет не только положение настроечной точки инструмента (поля X, Y и Z - декартовы координаты), но и ориентацию инструмента относительно текущей системы координат (поля NX, NY, NZ и NW). В зависимости от настроек системы (задаются в схеме станка) ориентация инструмента может задаваться: вектором нормали n = (NX, NY, NZ), пространственными углами поворота вокруг координатных осей - углами Эйлера (нотация углов Эйлера, то есть последовательность поворотов, также задаётся в настройках) A = NX, B = NY, C = NZ, кватернионом q = (NX, NY, NZ, NW). |
| X: Double | cmd.Flt["Pos5D.X"] - декартова координата X положения кончика инструмента. |
| Y: Double | cmd.Flt["Pos5D.Y"] - декартова координата Y положения кончика инструмента. |
| Z: Double | cmd.Flt["Pos5D.Z"] - декартова координата Z положения кончика инструмента. |
| NX: Double | cmd.Flt["Pos5D.NX"] - в зависимости от настроек системы может быть компонентом NX вектора нормали инструмента, углом поворота вокруг одной из координатных осей или коэффициентом кватерниона. |
| NY: Double | cmd.Flt["Pos5D.NY"] - в зависимости от настроек системы может быть компонентом NY вектора нормали инструмента, углом поворота вокруг одной из координатных осей или коэффициентом кватерниона. |
| NZ: Double | cmd.Flt["Pos5D.NZ"] - в зависимости от настроек системы может быть компонентом NZ вектора нормали инструмента, углом поворота вокруг одной из координатных осей или коэффициентом кватерниона. |
| NW: Double | cmd.Flt["Pos5D.NW"] - если выбран способ задания ориентации инструмента в виде кватерниона, представляет собой четвёртый коэффициент кватерниона. |
| MachineStateFlags: Integer | cmd.Ptr["MachineStateFlags"].Bit[i], i=(0..31). Целое число, представляющее собой битовое поле из 32 бит от 0 до 31. Если существует несколько вариантов расположения осей станка, обеспечивающих заданное положение инструмента в пространстве, каждый бит этого поля определяет выбор одного из возможных решений. Например, пятиосевой станок с осями A и C для большинства положений инструмента имеет два возможных решения - с положительным значением оси A и с отрицательным значением оси A. Нулевой бит этого поля будет определять, какое из этих решений выбрать. Для стандартного шестиосевого шарнирного робота многие положения инструмента в пространстве могут обеспечиваться разными сочетаниями положений трёх его ключевых сочленений (базы, локтя и кисти), что даёт в общей сложности 8 возможных решений. В этом случае нулевой бит этого поля будет определять положение базы, первый бит - положение локтя, а третий бит будет задавать положение кисти робота. Таким образом, смысл каждого бита этого поля полностью определяется используемой схемой станка. При использовании станков, для которых эти флаги не нужны, в схеме станка можно отключить вывод этого параметра в CLData. |
| Time: Double | Время перемещения в минутах. |
Список координат, передаваемых через CLData команды PHYSICGOTO, определяется схемой станка CAM-системы.
Для работы с командой PHYSICGOTO используйте массив GMA. Свойствам массива GMA автоматически присваиваются заранее рассчитанные значения параметров перемещения по координатам. Параметры команды также доступны через оператор cmd.
Ниже приведён простой пример обработчика команды PHYSICGOTO с использованием оператора cmd.
program PhysicGoto
if cmd.Ptr["Axes(AxisXPos)"]<>0 then begin
X = cmd.Flt["Axes(AxisXPos).Value"]
end
if cmd.Ptr["Axes(AxisYPos)"]<>0 then begin
Y = cmd.Flt["Axes(AxisYPos).Value"]
end
if cmd.Ptr["Axes(AxisZPos)"]<>0 then begin
Z = cmd.Flt["Axes(AxisZPos).Value"]
end
if cmd.Ptr["Axes(AxisAPos)"]<>0 then begin
A = cmd.Flt["Axes(AxisAPos).Value"]
end
if cmd.Ptr["Axes(AxisCPos)"]<>0 then begin
C = cmd.Flt["Axes(AxisCPos).Value"]
end
if (X<>X@) or (Y<>Y@) or (Z<>Z@) or (A<>A@) or (C<>C@) then begin
Interp_ = 53; Interp_@ = 0; ! G53
OutBlock
end
end
Доступ из .NET
Обработчики:
public override void OnBeforeMovement(ICLDMotionCommand cmd, CLDArray cld) // групповой обработчик - перед любой командой движения
public override void OnPhysicGoto(ICLDPhysicGotoCommand cmd, CLDArray cld)
public override void OnAfterMovement(ICLDMotionCommand cmd, CLDArray cld) // групповой обработчик - после любой команды движения
Наследование: ICLDPhysicGotoCommand : ICLDMultiMotionCommand : ICLDMotionCommand : ICLDCommand.
Читайте параметры из строго типизированного объекта cmd (рекомендуется); также доступны «сырой» массив cld[i] (те же индексы, что и в sppx) и именованные помощники cmd["..."]. В таблице перечислены члены команды, включая унаследованные от базовых интерфейсов; общие члены ICLDCommand (навигация, CLD, CLDFile, TechOperation, ...) описаны в разделе Модель доступа к CLData.
| Член | Тип | Описание |
|---|---|---|
cmd.EN |
TInpRotation |
Конечная нормаль или ориентация перемещения в декартовой системе координат. В зависимости от настроек текущей схемы станка это может быть вектор нормали, углы Эйлера, кватернион и т. д. |
cmd.MSFlags |
BitArray |
Флаги состояния станка или флипы робота, которые помогают определить (совместно с декартовыми координатами) конкретное состояние механизма в случае избыточности. То, какой бит отвечает за какой флаг, зависит от типа и конфигурации оборудования. |
cmd.Time |
double |
Продолжительность перемещения в минутах. |
cmd.AxesCount |
int |
Количество осей, которые содержит перемещение внутри списка Axis[]. |
cmd.Axis |
ICLDMultiMotionAxesIndexer |
Список осей перемещения [0..(AxesCount-1)]. |
cmd.Axes |
IEnumerable |
Объект-перечислитель осей перемещения, позволяющий использовать удобный синтаксис foreach. |
cmd.HasAxis(...) |
bool |
Возвращает «true», если перемещение содержит ось с указанным текстовым идентификатором. Иначе возвращает «false». |
cmd.EP |
TInp3DPoint |
Конечная точка (X, Y, Z) перемещения |
Пример - OnPhysicGoto (из постпроцессора Fanuc (30i)_Mill_DN):
public override void OnPhysicGoto(ICLDPhysicGotoCommand cmd, CLDArray cld)
{
foreach(CLDMultiMotionAxis ax in cmd.Axes) {
if (ax.IsX) {
nc.X.Show(ax.Value);
} else if (ax.IsY) {
nc.Y.Show(ax.Value);
} else if (ax.IsZ) {
nc.Z.Show(ax.Value);
} else if (ax.IsA) {
nc.A.Show(ax.Value);
} else if (ax.IsB) {
nc.B.Show(ax.Value);
} else if (ax.IsC) {
nc.C.Show(ax.Value);
}
}
if (nc.X.Changed || nc.Y.Changed || nc.Z.Changed || nc.A.Changed || nc.B.Changed || nc.C.Changed) {
nc.GHome.Show(53);
nc.Block.Out();
}
}