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

    Show / Hide Table of Contents

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

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

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