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

    Show / Hide Table of Contents

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

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

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