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

    Show / Hide Table of Contents

    ORIGIN - Исходные координаты

    Отображение команды

    Как команда отображается в списке команд CLData:

    ORIGIN X x, Y y, Z z, PPFUN f, N n, A a, B b, C c
    

    Команда ORIGIN задаёт систему координат, в которой выводится последующий код управляющей программы.

    Фактически у команды Origin есть два режима.

    В первом режиме команда Origin используется для активации одной из предопределённых систем координат заготовки (G54-G59). Режим определяется параметром CLD[4] (CLD.PPFun), равным нулю. Номер активируемой системы координат задаётся параметром CLD[5] (CLD.N).

    Во втором режиме команда Origin используется для определения преобразования системы координат заготовки (Sinumeric TRANS, ROT, Heidenhain CYCLE7, CYCLE19, PLANE SPATIAL|AXIAL, Fanuc G52, G68 и т. д.). Режим определяется параметром CLD[4] (CLD.PPFun), равным PPFun(1079). Преобразование задаётся смещением по осям XYZ (CLD[1], CLD[2], CLD[3]) и поворотом вокруг тех же осей (CLD[6], CLD[7], CLD[8]).

    Доступ из sppx

    Обработчик: program Origin

    Массив cld читается по индексу или по имени - в sppx по типизированному короткому имени (например, cld.X), в .NET по тому же имени как строковому ключу (например, cld["X"]).

    Параметр Массив CLD Имя CLD Описание
    x
    y
    z
    CLD[1]
    CLD[2]
    CLD[3]
    CLD.X
    CLD.Y
    CLD.Z
    Смещения локальной системы вдоль осей X, Y и Z соответственно.
    f CLD[4] CLD.PPFun Режим определения системы координат: 0 - команда задаёт одну из стандартных систем; PPFun(1079) - преобразование локальной системы координат.
    n CLD[5] CLD.N Номер выбранной стандартной системы координат: 54 (G54), 55 (G55), 59 (G59) и так далее.
    a
    b
    c
    CLD[6]
    CLD[7]
    CLD[8]
    CLD.A
    CLD.B
    CLD.C
    Углы поворота вокруг осей X, Y и Z соответственно. Порядок поворотов вокруг осей (нотация углов Эйлера) может различаться и определяется настройками схемы станка.

    Доступ по имени параметра (вспомогательные операторы)

    Параметры, доступные через оператор cmd (одинаково в sppx и .NET):

    TCLDOrigin: ComplexType Команда определения системы координат
    OriginType: Integer cmd.Int["OriginType"] - Тип команды определения системы координат: 0 (SelectStandardLCS) - команда выбора стандартной системы координат заготовки (G54-G59), 1 (TransformLCS) - команда преобразования локальной системы координат.
    CSNumber: Integer cmd.Int["CSNumber"] - Номер стандартной системы координат заготовки: 54 (G54), 55 (G55), 59 (G59) и так далее.
    MCS: ComplexType cmd.Ptr["MCS"] - Параметры новой системы координат
    OriginPoint: ComplexType cmd.Ptr["MCS.OriginPoint"] - Смещение исходной точки системы координат
    X: Double cmd.Flt["MCS.OriginPoint.X"] - смещение по X
    Y: Double cmd.Flt["MCS.OriginPoint.Y"] - смещение по Y
    Z: Double cmd.Flt["MCS.OriginPoint.Z"] - смещение по Z
    RotAngles: ComplexType cmd.Ptr["MCS.RotAngles"] - Углы поворота системы координат вдоль осей (в градусах). Порядок поворотов вокруг осей (нотация углов Эйлера) может различаться и определяется настройками схемы станка.
    A: Double cmd.Flt["MCS.RotAngles.A"] - угол поворота вокруг оси X
    B: Double cmd.Flt["MCS.RotAngles.B"] - угол поворота вокруг оси Y
    C: Double cmd.Flt["MCS.RotAngles.C"] - угол поворота вокруг оси Z
    WCS: ComplexType cmd.Ptr["WCS"] - Параметры новой системы координат. Параметры, задающие преобразование новой системы координат относительно подвижной системы координат заготовки. Включает геометрические (пространственные) координаты.
    OriginPoint: ComplexType cmd.Ptr["WCS.OriginPoint"] - Смещение начала системы координат
    X: Double cmd.Flt["WCS.OriginPoint.X"] - смещение по X
    Y: Double cmd.Flt["WCS.OriginPoint.Y"] - смещение по Y
    Z: Double cmd.Flt["WCS.OriginPoint.Z"] - смещение по Z
    RotAngles: ComplexType cmd.Ptr["WCS.RotAngles"] - Углы поворота системы координат вдоль осей (в градусах). Порядок поворотов вокруг осей (нотация углов Эйлера) может различаться и определяется настройками схемы станка.
    A: Double cmd.Flt["WCS.RotAngles.A"] - угол поворота вокруг оси X
    B: Double cmd.Flt["WCS.RotAngles.B"] - угол поворота вокруг оси Y
    C: Double cmd.Flt["WCS.RotAngles.C"] - угол поворота вокруг оси Z
    Axes: Array, Key="AxisID" cmd.Ptr["Axes"] - Массив записей "Axes". Задаёт положения реальных (станочных) осей, соответствующих определяемой системе координат. Команда Origin может содержать положения для нескольких осей.
    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"] - Положение оси.
    IsSpatial: Integer cmd.Int["IsSpatial"] - параметр, определяющий, что имеет приоритет - геометрические координаты (A,B,C) или оси станка. Возможны два значения: 0 - приоритет имеют оси станка, заданные массивом Axes; 1 - приоритет имеют геометрические координаты, заданные MCS и WCS.
    PositioningMode: Integer cmd.Int["PositioningMode"] - параметр, определяющий, генерирует ли эта команда реальные перемещения осей станка или только задаёт локальную систему координат внутри ЧПУ без каких-либо перемещений. Возможны три значения: 0 - STAY - преобразование не создаёт реальных перемещений станка; 1 - TURN - преобразование перемещает только поворотные оси станка; 2 - MOVE - преобразование перемещает все необходимые оси, чтобы сохранить прежнее положение вершины инструмента в новой системе координат.

    Некоторые системы ЧПУ требуют определения локальных систем координат через пространственные углы, тогда как другие поддерживают определение локальных систем координат только через реальные углы осей станка. Команда ORIGIN включает всю информацию, необходимую для обоих способов определения. Свойства cmd.Ptr["MCS"] и cmd.Ptr["WCS"] содержат пространственные углы (A, B, C) локальной системы координат, а массив cmd.Ptr["Axes"] содержит соответствующие координаты поворотных осей станка. Главное преимущество свойства cmd.Ptr["Axes"] в том, что оно задаёт локальную систему координат однозначно, тогда как для cmd.Ptr["WCS"] обычно существует два возможных решения. Для систем ЧПУ, требующих пространственные углы для определения локальной системы координат, для разрешения неоднозначных случаев можно использовать углы осей станка (см. пример ниже).

    Примечание: пространственные углы задаются относительно локальной системы координат, активной на момент определения команды ORIGIN.

    Если система ЧПУ поддерживает оба способа определения локальной системы координат, желаемый формат вывода команды ORIGIN можно задать в CAM-системе в настройках параметров системы ЧПУ. В постпроцессоре желаемый формат вывода доступен в свойстве cmd.Int["IsSpatial"] команды ORIGIN.

    Некоторые системы ЧПУ поддерживают различные режимы позиционирования команды ORIGIN. CAM-система предлагает следующие режимы позиционирования локальной системы координат.

    cmd.Int["PositioningMode"]=STAY. Команда origin не перемещает оси станка.

    cmd.Int["PositioningMode"]=TURN. Команда origin поворачивает оси станка так, чтобы направление оси инструмента совпало с осью Z локальной системы координат

    cmd.Int["PositioningMode"]=MOVE. Команда origin поворачивает оси станка так, чтобы совместить ось инструмента с осью Z локальной системы координат, и перемещает линейные оси так, чтобы положение вершины инструмента относительно заготовки осталось прежним

    Системы ЧПУ определяют локальную систему координат относительно некоторой базовой системы координат заготовки (G54). В зависимости от используемой системы ЧПУ для определения локальной системы координат следует использовать либо матрицу MCS, либо матрицу WCS.

    Современные системы ЧПУ знают о кинематике станка. На таких системах ЧПУ система координат заготовки поворачивается вместе с поворотным столом. Поэтому на таких системах ЧПУ можно определять локальную систему координат относительно поворачивающейся системы координат заготовки. В этом случае удобно использовать матрицу WCS.

    Старые системы ЧПУ ничего не знают о кинематике станка и не могут поворачивать систему координат заготовки вместе с поворотным столом. Для таких систем ЧПУ для определения преобразования локальной системы координат следует использовать матрицу MCS.

    На приведённых ниже рисунках показано различие между базовыми системами координат для матриц MCS и WCS. Предпочтительнее использовать матрицу WCS, так как она не зависит от установки заготовки, тогда как MCS сильно от неё зависит.

    CSTypes

    Настройки локальной системы координат CAM-системы.

    В CAM-системе настройки команды ORIGIN задаются в файле конфигурации станка.

    SCType ID="MachineName" type="AbstractMachine"

    ...
    <ControlData>
    ...
    <LocalCS>
    <IsSpatial DefaultValue="True"/>
    <PositioningMode DefaultValue="Stay"/>
    </LocalCS>
    ...
    </ControlData>
    ...
    <SCType>
    

    Эти параметры также доступны из графического интерфейса, в разделе "Параметры системы ЧПУ" параметров станка.

    LocalCSInspector

    Примеры кода для команды ORIGIN.

    Пример - смещение начала координат G54-G59 / G52:

    program Origin
      if cmd.Int["OriginType"]=0 then begin !G54-G59
        Output "G" + cmd.Str["CSNumber"]
      end else begin !G52 X Y Z
        X = cmd.Flt["MCS.OriginPoint.X"]
        Y = cmd.Flt["MCS.OriginPoint.Y"]
        Z = cmd.Flt["MCS.OriginPoint.Z"]
        Output "G52 X" + Str(X) + " Y" + Str(Y) + " Z" + Str(Z)
      end
    end
    

    Пример - смещение начала координат и рабочая плоскость в стиле Heidenhain CYCL DEF:

    program Origin
      if CLD[4]=0 then begin ! Выбор стандартной LCS (G54-G59)
        ! Для Heidenhain ничего не делать
      end else if CLD[4]=1079 then begin ! Преобразование LCS
        Output "CYCL DEF 7.0 DATUM SHIFT"
        Output "CYCL DEF 7.1 X" + Str(cmd.Flt["WCS.OriginPoint.X"])
        Output "CYCL DEF 7.2 Y" + Str(cmd.Flt["WCS.OriginPoint.Y"])
        Output "CYCL DEF 7.3 Z" + Str(cmd.Flt["WCS.OriginPoint.Z"])
        if (abs(cmd.Flt["WCS.RotAngles.A"])>0.0001) or
        (abs(cmd.Flt["WCS.RotAngles.B"])>0.0001) or
        (abs(cmd.Flt["WCS.RotAngles.C"])>0.0001)
        then begin
          Output "CYCL DEF 19.0 WORKING PLANE"
          if cmd.Int["IsSpatial"]>0 then begin ! Пространственные координаты
            Output "CYCL DEF 19.1 A" + str(cmd.Flt["WCS.RotAngles.A"]) +
            " B" + str(cmd.Flt["WCS.RotAngles.B"]) +
            " C" + str(cmd.Flt["WCS.RotAngles.C"])
          end else begin ! Оси станка
            OutStr$ = "CYCL DEF 19.1"
            if cmd.Ptr["Axes(AxisBPos)"]<>0 then begin
              OutStr$ = OutStr$ + " B" + str(cmd.Flt["Axes(AxisBPos).Value"])
            end
            if cmd.Ptr["Axes(AxisCPos)"]<>0 then begin
              OutStr$ = OutStr$ + " C" + str(cmd.Flt["Axes(AxisCPos).Value"])
            end
            Output OutStr$
          end
        end
      end
    end
    

    Доступ из .NET

    Обработчики - помимо базового OnOrigin, платформа вызывает OnWorkpieceCS для случая G54-G59 и OnLocalCS для преобразования локальной системы координат; ORIGIN также является командой перемещения, поэтому срабатывают скобки группы перемещений:

    public override void OnOrigin(ICLDOriginCommand cmd, CLDArray cld)         // базовый диспетчер
    public override void OnWorkpieceCS(ICLDOriginCommand cmd, CLDArray cld)    // G54-G59
    public override void OnLocalCS(ICLDOriginCommand cmd, CLDArray cld)        // преобразование локальной СК
    public override void OnBeforeMovement(ICLDMotionCommand cmd, CLDArray cld)
    public override void OnAfterMovement(ICLDMotionCommand cmd, CLDArray cld)
    

    Наследование: ICLDOriginCommand : ICLDMultiMotionCommand : ICLDMotionCommand : ICLDCommand.

    Читайте параметры из строго типизированного объекта cmd (рекомендуется); также доступны «сырой» массив cld[i] (те же индексы, что и в sppx) и именованные обёртки cmd[...]. В таблице перечислены члены команды, включая унаследованные от базовых интерфейсов; общие члены ICLDCommand (навигация, CLD, CLDFile, TechOperation, ...) описаны в Модели доступа к CLData.

    Свойство Тип Описание
    cmd.OriginType CLDOriginType Выбор стандартной системы координат заготовки (G54-G59) или переключение на конкретную локальную систему координат (G68.2, PLANE SPATIAL, Cycle800).
    cmd.IsWorkpieceCS
    cmd.IsLocalCS
    bool True, если это команда выбора системы координат заготовки / переключения локальной системы координат.
    cmd.IsOn
    cmd.IsOff
    bool True, если это команда включения / выключения переключения системы координат.
    cmd.CSNumber double Номер стандартной системы координат заготовки для активации.
    cmd.MCS TInpLocation Декартовы координаты новой системы координат относительно базы станка.
    cmd.WCS TInpLocation Декартовы координаты новой системы координат относительно заготовки (может поворачиваться вместе с ней).
    cmd.QMCS
    cmd.QWCS
    TInpQuaternion Кватернион ориентации новой системы координат относительно базы станка / заготовки.
    cmd.Convention TInpComplexRotationConvention Соглашение об углах Эйлера, используемое внутри MCS и WCS.
    cmd.IsSpatial bool True, если для определения новой системы координат следует предпочесть декартовы координаты, а не физические оси станка.
    cmd.PositioningMode CLDOriginPositionMode Как изменяются оси станка при переключении системы координат: Stay, Turn или Move.

    Плюс унаследованные члены ICLDMultiMotionCommand (EN, MSFlags, Time, AxesCount, Axis, Axes, HasAxis) и EP - их описание см. в MULTIGOTO.

    Пример - OnWorkpieceCS (из постпроцессора Fanuc (30i)_Mill_DN):

    public override void OnWorkpieceCS(ICLDOriginCommand cmd, CLDArray cld)
    {
        nc.GWCS.v = cmd.CSNumber;   // G54..G59
    }
    

    Пример - OnLocalCS (из постпроцессора Fanuc (30i)_Mill_DN):

    public override void OnLocalCS(ICLDOriginCommand cmd, CLDArray cld)
    {
        if (cmd.IsOn) {
            nc.GLCS.Show(68.2);
            nc.X.Show(cmd.WCS.P.X);
            nc.Y.Show(cmd.WCS.P.Y);
            nc.Z.Show(cmd.WCS.P.Z);
            nc.I.Show(cmd.WCS.N.A);
            nc.J.Show(cmd.WCS.N.B);
            nc.K.Show(cmd.WCS.N.C);  
            nc.Block.Hide(nc.GInterp);              
            nc.Block.Out();
            nc.Block.Reset(nc.X, nc.Y, nc.Z);
            nc.OutWithN("G53.1");
        } else {
            nc.GLCS.Show(69);
            nc.Block.Out();
        }
    }
    

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

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