GOHOME - Возврат в исходное положение
Отображение команды
Как команда отображается в списке команд CLData:
GOHOME 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
GOHOME — эта команда используется для перемещения инструмента в ноль станка. Обычно команда GOHOME транслируется в код G28. Ноль станка определяется системой ЧПУ, постпроцессор получает только код команды.
Доступ из sppx
Обработчик: program GoHome
| Параметр | Массив 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
| TCLDGoHome: 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 и с отрицательным. Нулевой бит этого поля выбирает одно из этих решений. Для стандартного шестиосевого шарнирного робота многие положения инструмента в пространстве могут обеспечиваться разными сочетаниями положений трёх его ключевых шарниров (основания, локтя и запястья), что даёт в сумме 8 возможных решений. В этом случае нулевой бит этого поля определит положение основания, первый бит - положение локтя, а третий бит - положение запястья робота. Таким образом, значение каждого из этих битов полностью определяется используемой схемой станка. При использовании станков, которым эти флаги не требуются, вывод этого параметра в CLData можно отключить в схеме станка. |
| Time: Double | Время перемещения в минутах. |
Список координат, передаваемых через CLData команды GOHOME, определяется схемой станка CAM-системы.
Используйте массив GMA для обработки команды GOHOME. Свойствам массива GMA автоматически присваиваются предварительно рассчитанные значения параметров перемещения по координатам. Параметры команды также доступны через оператор cmd.
Пример (из постпроцессора Fanuc (30i)_Mill):
program GoHome
if CycleOn=1 then begin
CycleOn = 0
Cycle = 80
end
!OutBlock ! Output in block
if Cmd.Ptr["Axes(AxisXPos)"]<>0 then begin
X = 0; X@ = MaxReal
end
if Cmd.Ptr["Axes(AxisYPos)"]<>0 then begin
Y = 0; Y@ = MaxReal
end
if Cmd.Ptr["Axes(AxisZPos)"]<>0 then begin
Z = 0; Z@ = MaxReal
end
if Cmd.Ptr["Axes(AxisAPos)"]<>0 then begin
A = 0; A@ = MaxReal
HasAxisA = 1
end
if Cmd.Ptr["Axes(AxisBPos)"]<>0 then begin
B = 0; B@ = MaxReal
HasAxisB = 1
end
if Cmd.Ptr["Axes(AxisCPos)"]<>0 then begin
C = 0; C@ = MaxReal
HasAxisC = 1
end
if (X<>X@) or (Y<>Y@) or (Z<>Z@) or
(A<>A@) or (B<>B@) or (C<>C@)
then begin
GFunc = 28; GFunc@ = MaxReal
GAbsInc = 91
OutBlock
if NextCode<>CodeOfCmd("GoHome") then begin
GAbsInc = 90
OutBlock
end
end
end
Доступ из .NET
Обработчики:
public override void OnBeforeMovement(ICLDMotionCommand cmd, CLDArray cld) // group handler - before any motion command
public override void OnGoHome(ICLDGoHomeCommand cmd, CLDArray cld)
public override void OnAfterMovement(ICLDMotionCommand cmd, CLDArray cld) // group handler - after any motion command
Наследование: ICLDGoHomeCommand : ICLDMultiMotionCommand : ICLDMotionCommand : ICLDCommand.
Читайте параметры из строго типизированного объекта cmd (рекомендуется); доступны также «сырой» массив cld[i] (те же индексы, что и в sppx) и именованные обёртки cmd["..."]. В таблице перечислены члены команды, включая унаследованные от базовых интерфейсов; общие члены ICLDCommand (навигация, CLD, CLDFile, TechOperation, ...) описаны в разделе Модель доступа к CLData.
| Член | Тип | Описание |
|---|---|---|
cmd.EN |
TInpRotation |
Конечная нормаль или ориентация перемещения в декартовой системе координат. В зависимости от настроек текущей схемы станка это может быть нормальный вектор, углы Эйлера, кватернион и т. д. |
cmd.MSFlags |
BitArray |
Флаги состояния станка или flips робота, которые вместе с декартовыми координатами помогают определить конкретное состояние механизма в случае избыточности. Какой бит отвечает за какой флаг, зависит от типа и конфигурации оборудования. |
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) перемещения |
Пример - OnGoHome (из постпроцессора Fanuc (30i)_Mill_DN):
public override void OnGoHome(ICLDGoHomeCommand cmd, CLDArray cld)
{
foreach(CLDMultiMotionAxis ax in cmd.Axes) {
if (ax.IsX) {
nc.U.Show(0);
} else if (ax.IsY) {
nc.V.Show(0);
} else if (ax.IsZ) {
nc.W.Show(0);
}
}
if (nc.U.Changed || nc.V.Changed || nc.W.Changed) {
nc.GHome.Show(28);
nc.Block.Out();
}
}