MULTIGOTO - Многокоординатное перемещение
Отображение команды
Как команда отображается в списке команд CLData:
MULTIGOTO COUNT 2, MACHINE, X 34.725, Y 32, GEOM X 34.725, Y 32, Z 194, NX 0, NY 0, NZ 1, NW 0, MSF 0, Time 0.003
MULTIGOTO — универсальная технологическая команда, которая используется для передачи перемещения по координатам станка. Команда MULTIGOTO используется для передачи постпроцессору переменного числа координат (также называемых «осями»). Этими координатами могут быть линейное перемещение инструмента или стола, поворот стола или инструмента либо перемещение по другим координатам станка. Также MULTIGOTO используется для передачи различных технологических команд, специфичных для конкретного станка, которые нельзя передать более специализированными командами. Команда MULTIGOTO может использоваться для управления обычными осями линейного перемещения X, Y, Z, поворотными осями A, B, C или для управления такими «осями», как кулачки патрона, тормоз шпинделя, перемещение люнета и т. д. Список координат станка определяется кинематической схемой.
Доступ из sppx
Обработчик: program MultiGOTO
Массив cld читается по индексу или по имени — в sppx по типизированному короткому имени (например, cld.X), в .NET по тому же имени в виде строкового ключа (например, cld["X"]).
| Параметр | Массив CLD | Имя CLD | Описание |
|---|---|---|---|
| X Y Z |
CLD[1] CLD[2] CLD[3] |
CLD.X CLD.Y CLD.Z |
Пространственные координаты вершины инструмента относительно активной системы координат заготовки |
| NX NY NZ NW |
CLD[4] CLD[5] CLD[6] CLD[7] |
CLD.NX CLD.NY CLD.NZ CLD.NW |
Ориентация оси инструмента относительно активной системы координат заготовки. Способ задания ориентации зависит от настройки схемы станка. Это могут быть углы Эйлера в разных соглашениях, вектор нормали инструмента, кватернион или повёрнутый вектор. |
| MSF | CLD[8] | CLD.MSF | Флаги состояния станка (флипы). Актуально для роботов и станков, которые могут иметь несколько конфигураций физических осей для одного и того же положения в пространстве. См. описание в следующей таблице. |
| Time | CLD[9] | CLD.Time | Время перемещения. |
| AxesCount | CLD[10] | CLD.AxesCount | Число физических координат станка, задействованных в этой команде. |
| 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 (одинаково в sppx и .NET):
| TCLDMultiGoto: 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 команды MULTIGOTO, определяется схемой станка CAM-системы.
Используйте массив GMA для обработки команды MULTIGOTO. Свойствам массива GMA автоматически присваиваются заранее рассчитанные значения параметров перемещения по координатам. Параметры команды также доступны через оператор cmd.
Ниже приведён простой пример обработчика команды MULTIGOTO с использованием оператора cmd.
program MultiGoto
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(AxisCPos)"]<>0 then begin
C = cmd.Flt["Axes(AxisCPos).Value"]
end
OutBlock
end
Доступ из .NET
Обработчики (специфичный обработчик плюс скобки группы перемещений):
public override void OnMultiGoto(ICLDMultiGotoCommand cmd, CLDArray cld)
public override void OnBeforeMovement(ICLDMotionCommand cmd, CLDArray cld)
public override void OnAfterMovement(ICLDMotionCommand cmd, CLDArray cld)
Наследование: ICLDMultiGotoCommand : ICLDMultiMotionCommand : ICLDMotionCommand : ICLDCommand
(ICLDMultiGotoCommand не добавляет собственных членов; всё перечисленное ниже унаследовано от
ICLDMultiMotionCommand / ICLDMotionCommand).
Читайте параметры из строго типизированного объекта cmd (рекомендуется); доступны также «сырой» массив cld[i] (те же индексы, что и в sppx) и именованные обёртки cmd[...]. В таблице перечислены члены команды, включая унаследованные от базовых интерфейсов; общие члены ICLDCommand (навигация, CLD, CLDFile, TechOperation, ...) описаны в разделе Модель доступа к CLData.
| Член | Тип | Описание |
|---|---|---|
cmd.EP |
TInp3DPoint |
Конечная точка (X, Y, Z) перемещения. (из ICLDMotionCommand) |
cmd.EN |
TInpRotation |
Конечная нормаль или ориентация перемещения (вектор нормали, углы Эйлера, кватернион, ... в зависимости от схемы станка). |
cmd.MSFlags |
BitArray |
Флаги состояния станка / флипы робота, которые (вместе с декартовыми координатами) определяют состояние механизма в случае избыточности; значение каждого бита зависит от оборудования. |
cmd.Time |
double | Продолжительность перемещения в минутах. |
cmd.AxesCount |
int | Число осей в списке Axis[]. |
cmd.Axis |
ICLDMultiMotionAxesIndexer |
Список осей перемещения [0..AxesCount-1]; доступен по индексу, по текстовому ID или по имени (Axis.X/.Y/.Z/.A/.B/.C/.C1/.C2/.A1..A6/.E1..E3, null, если отсутствует). |
cmd.Axes |
IEnumerable |
Перечислитель осей для foreach. |
cmd.HasAxis(string ID) |
bool | Истина, если перемещение содержит ось с указанным текстовым ID. |
Элемент оси (CLDMultiMotionAxis) содержит IntID (числовой идентификатор оси станка), ID (текстовый идентификатор
оси станка, заданный в схеме станка), Value (конечное значение оси; единицы — мм/дюймы/градусы/импульсы —
в соответствии с определением оси) и проверки IsX/IsY/IsZ/IsA/....
Пример (из постпроцессора Fanuc 30i mill):
public override void OnMultiGoto(ICLDMultiGotoCommand cmd, CLDArray cld)
{
foreach (CLDMultiMotionAxis ax in cmd.Axes)
{
if (ax.IsX) nc.X.v = ax.Value;
else if (ax.IsY) nc.Y.v = ax.Value;
else if (ax.IsZ) nc.Z.v = ax.Value;
else if (ax.IsA) nc.A.v = ax.Value;
else if (ax.IsB) nc.B.v = ax.Value;
else if (ax.IsC) nc.C.v = ax.Value;
}
nc.Block.Out();
}