Разработка постпроцессоров
  • Разработка постпроцессоров
v20.0.1
Search Results for

    Show / Hide Table of Contents

    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();
        }
    }
    

    Сопутствующие ссылки

    • Модель доступа к CLData
    In this article