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

    Show / Hide Table of Contents

    TLCONTACT - Контакт инструмента

    Команда TLContact сообщает нормаль к обрабатываемой поверхности в точке контакта инструмента с этой поверхностью. Эти данные используются для расчёта 5D-коррекции. По сути, они определяют, в каком направлении (по какому вектору) нужно сместить инструмент в пространстве на величину коррекции (разницу между радиусом теоретического и фактического инструмента).

    Доступ из sppx

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

    Параметр Массив CLD Имя CLD Описание
    OnOff CLD[1] CLD.OnOff Определяет, контактирует ли инструмент с обрабатываемой поверхностью в последующих перемещениях. ON(1) - информация о контакте есть, OFF(0) - информации о контакте нет.
    NX CLD[2] CLD.NX X-компонента вектора нормали поверхности
    NY CLD[3] CLD.NY Y-компонента вектора нормали поверхности
    NZ CLD[4] CLD.NZ Z-компонента вектора нормали поверхности

    Эта команда формируется в CLData, только если в настройках схемы станка включена соответствующая опция "Задавать вектора нормали поверхности контакта инструмента".

    image2024-8-21_17-24-44

    Пример:

    ! deltaR - разница между радиусом инструмента, заданным в CAM, и реальным радиусом инструмента на станке
    ! (присваивается один раз, там, где становится известен реальный радиус инструмента)
    
    program TLContact
      ! cld[1] - флаг контакта ON(1)|OFF(0); cld[2..4] - нормаль поверхности контакта NX, NY, NZ
      if cld[1] = 1 then begin
        NcX = cld[2]  NcY = cld[3]  NcZ = cld[4]             ! запоминаем нормаль контакта в глобальных переменных
        HasContact = 1
        Output "( CONTACT N = " + Str(NcX) + " " + Str(NcY) + " " + Str(NcZ) + " )"
      end else
        HasContact = 0
    end
    
    program AbsMov
      ! смещаем острие инструмента вдоль запомненной нормали контакта на deltaR
      if HasContact = 1 then begin
        X = cld[1] + NcX * deltaR
        Y = cld[2] + NcY * deltaR
        Z = cld[3] + NcZ * deltaR
      end else begin
        X = cld[1]  Y = cld[2]  Z = cld[3]
      end
      OutBlock
    end
    

    Доступ из .NET

    Обработчик:

    public override void OnTLContact(ICLDTLContactCommand cmd, CLDArray cld)
    

    Наследование: ICLDTLContactCommand : ICLDCommand.

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

    Член Тип Описание
    cmd.IsOn bool Определяет, контактирует ли инструмент с обрабатываемой поверхностью в последующих перемещениях. "True" - информация о контакте есть, "False" - информации о контакте нет.
    cmd.IsOff bool Определяет, контактирует ли инструмент с обрабатываемой поверхностью в последующих перемещениях. "True" - информации о контакте нет, "False" - информация о контакте есть.
    cmd.ContactNormal TInp3DPoint Вектор нормали контакта обрабатываемой поверхности (X, Y, Z).

    Пример:

    // deltaR - разница между радиусом инструмента, заданным в CAM, и реальным радиусом инструмента на станке
    TInp3DPoint contactNormal;
    bool hasContact;
    
    public override void OnTLContact(ICLDTLContactCommand cmd, CLDArray cld)
    {
        if (cmd.IsOn) {
            contactNormal = cmd.ContactNormal;      // запоминаем нормаль контакта поверхности
            hasContact = true;
            nc.OutWithN($"( CONTACT N = {contactNormal.X} {contactNormal.Y} {contactNormal.Z} )");
        } else {
            hasContact = false;
        }
    }
    
    public override void OnGoto(ICLDGotoCommand cmd, CLDArray cld)
    {
        // смещаем острие инструмента вдоль запомненной нормали контакта на deltaR (коррекция по радиусу)
        if (hasContact) {
            nc.X.Show(cmd.EP.X + contactNormal.X * deltaR);
            nc.Y.Show(cmd.EP.Y + contactNormal.Y * deltaR);
            nc.Z.Show(cmd.EP.Z + contactNormal.Z * deltaR);
        } else {
            nc.X.Show(cmd.EP.X);
            nc.Y.Show(cmd.EP.Y);
            nc.Z.Show(cmd.EP.Z);
        }
        nc.Block.Out();
    }
    

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

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