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

    Show / Hide Table of Contents

    EDMMOVE - Электроэрозионное перемещение

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

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

    EDMMOVE MODE: RAPID(0) | 2AXIS(1) | TAPER(2) | MULTIPROF(3)| 4AXIS(4),
    SPAN1: CUT(0) | ARC(1), SPAN2: CUT(0) | ARC(1),
    EP1: (X x; Y y; Z z), EP2: (X x; Y y; Z z),
    PC1: (X x; Y y), PC2: (X x; Y y), R1 r1, R2 r2, A a,
    ROLLMODE: OFF(0) | SHARP(1) | CONICAL(2) | CYLINDRICAL(3) |
    FIXED(4),
    ROLLR1 rollr1, ROLLR2 rollr2
    

    Команда перемещения при электроэрозионной обработке формируется операциями проволочно-вырезной электроэрозионной обработки CAM-системы. Команда задаёт координаты перемещения проволоки и устанавливает режимы интерполяции перемещения.

    Доступ из sppx

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

    Параметр Массив CLD Имя CLD Описание
    Режим перемещения CLD[1] CLD.Mode RAPID(0) - ускоренное перемещение, 2AXIS(1) - 2-х координатное перемещение, TAPER(2) - 2-х координатное перемещение с конусностью, MULTIPROF(3) - многоконтурное перемещение (дуги и линии), 4AXIS(4) - 4-осевое перемещение (только линии)
    Тип элемента нижнего контура CLD[2] CLD.Span1 CUT(0) - линия, ARC(1) - дуга
    Тип элемента верхнего контура CLD[3] CLD.Span2 CUT(0) - линия, ARC(1) - дуга
    Конечная точка элемента нижнего контура, EP1 CLD[4]
    CLD[5]
    CLD[6]
    CLD.Ep1X
    CLD.Ep1Y
    CLD.Ep1Z
    Координаты X, Y и Z конечной точки элемента нижнего контура
    Конечная точка элемента верхнего контура, EP2 CLD[7]
    CLD[8]
    CLD[9]
    CLD.Ep2X
    CLD.Ep2Y
    CLD.Ep2Z
    Координаты X, Y и Z конечной точки элемента верхнего контура
    Центр дуги нижнего контура, PC1 CLD[10]
    CLD[11]
    CLD.Pc1X
    CLD.Pc1Y
    Координаты X и Y центра дуги нижнего контура, если этот элемент является дугой.
    Центр дуги верхнего контура, PC2 CLD[12]
    CLD[13]
    CLD.Pc2X
    CLD.Pc2Y
    Координаты X и Y центра дуги верхнего контура, если этот элемент является дугой.
    Радиус дуги нижнего контура, R1 CLD[14] CLD.R1 Если элемент нижнего контура является дугой, параметр задаёт знаковый радиус дуги: R > 0 - дуга против часовой стрелки, R < 0 - дуга по часовой стрелке.
    Радиус дуги верхнего контура, R2 CLD[15] CLD.R2 Если элемент верхнего контура является дугой, параметр задаёт знаковый радиус дуги: R > 0 - дуга против часовой стрелки, R < 0 - дуга по часовой стрелке.
    Угол конусности, A CLD[16] CLD.A В режиме перемещения TAPER(2) параметр задаёт знаковый угол конусности: A > 0 - правая конусность, A < 0 - левая конусность.
    Режим обката острых углов, ROLLMODE CLD[17] CLD.RollMode Параметр задаёт режим обката острых углов для 2-координатной и конусной обработки (функция CornerR): OFF(0) - обкат углов выключен (R1 = 0, R2 = 0); SHARP(1) - в этом режиме обкатываются только углы нижнего контура (R1 = R1, R2 = 0); CONICAL(2) - обкатываются углы и нижнего, и верхнего контура, радиусы обката вычисляются из угла конусности (R1 = R1, R2 = R1 + смещение конусности); CYLINDRICAL(3) - обкатываются углы нижнего и верхнего контура, радиусы обката равны (R1 = R1, R2 = R1); FIXED(4) - обкатываются углы нижнего и верхнего контура, радиусы обката независимы (R1 = R1, R2 = R2)
    Радиус обката элемента нижнего контура, ROLLR1 CLD[18] CLD.RollR1 Параметр задаёт радиус обката острого угла элемента нижнего контура
    Радиус обката элемента верхнего контура, ROLLR2 CLD[19] CLD.RollR2 Параметр задаёт радиус обката острого угла элемента верхнего контура

    Пример (из постпроцессора AgieCharmilles (ROBOFIL)_WireEDM):

    program EDMMove
    
      ! Задать LCS
      if LCSSet<>1 then begin
        LCSSet = 1
        GCS = 92;        GCS@ = MaxReal
        X1  = XOrigin;   X1@  = MaxReal
        Y1  = YOrigin;   Y1@  = MaxReal
        ITop    = TopLevel;  ITop@    = MaxReal
        JBottom = BaseLevel; JBottom@ = MaxReal
        OutBlock
      end
    
      RollModeChanged = 0
      if (cld.RollMode<>0) and (RollOn<>48) then begin
        GRoll  = 48
        RollOn = 48
        RollModeChanged = 1
        GRoll@ = MaxReal
      end else
      if (cld.RollMode=0) and (RollOn<>49) then begin
        GRoll  = 49
        RollOn = 49
        GRoll@ = MaxReal
      end
    
      ! Команды заправки и обрыва проволоки
      if (cld.Mode<>0) and (WireInserted=0) and (MainProg=1) then begin
        call InsertWire
      end
      if (cld.Mode=0) and (WireInserted=1) and (MainProg=1) then begin
        if (cld.Ep1X<>Fp1X) or (cld.Ep1Y<>Fp1Y) then begin
          call BreakWire
        end
      end
    
      ! Вывод номера технологии прохода
      if (cld.Mode<>0) and (WireInserted=1) then begin
        If OldSCode<>SCode then begin
          OldSCode  = SCode
          STechCode = SCode
          STechCode@ = MaxReal
          OUTBLOCK
        end
      end
      
      ! Включение конического режима обработки
      if (Cld.Mode=2) and (TaperMode<>60) then begin
        TaperMode  = 60
        TaperMode@ = MaxReal
        OUTBLOCK
      end
    
      ! Включение коррекции
      if (CompensNeedOut>0) and (GCompens<>40) then begin
        GCompens@ = MaxReal
        CompensNeedOut = 0
      end
    
      ! Включение режима движения
      if cld.Mode=3 then G2Contour = 51 else ! 2Contour
      if cld.Mode=4 then GUV = 74            ! 4Axis_UV
    
    !  if (G2Contour<>G2Contour@) or (GUV<>GUV@) then begin
    !    OutBlock
    !    GInterp1  = 0;
    !    GInterp1@ = GInterp1;
    !  end
    
      ! Выключение коррекции
      if (CompensNeedOut>0) and (GCompens=40) then begin
        GCompens@ = MaxReal
        CompensNeedOut = 0
      end
    
      ! Вывод координат
      X1 = cld.Ep1X
      Y1 = cld.Ep1Y
      OUTG = 0
      case cld.Mode of
        0: begin ! Ускоренное перемещение
          if (Abs(X1-X1@)>Toler) or (Abs(Y1-Y1@)>Toler) then
            GInterp1 = 0 ! Ускоренное перемещение
        end
        1, 2, 3, 4: begin ! 2-координатное, конусность, 4D
          if (Abs(X1-X1@)>Toler) or (Abs(Y1-Y1@)>Toler) then begin
            if cld.Span1=1 then begin ! Дуга
              if cld.R1>0 then GInterp1 = 3
                          else GInterp1 = 2
              I1 = cld.Pc1X - Fp1X;  I1@ = MaxReal
              J1 = cld.Pc1Y - Fp1Y;  J1@ = MaxReal
            end else begin ! Линия
                GInterp1 = 1
            end
            GInterp1@ = MaxReal
            OUTG = GInterp1
          end
          if cld.Mode=2 then begin      ! Конусность
            if cld.A>0 then GTaper = 52
                       else GTaper = 51
            A = abs(cld.A);
          end else
          if cld.Mode=3 then begin ! 4D
            U = cld.Ep2X; U@ = MaxReal
            V = cld.Ep2Y; V@ = MaxReal
            if cld.Span2=1 then begin ! Дуга
              if cld.R2>0 then begin
                if (OutG=0) or (OutG<>3) then begin
                  GInterp2 = 3
                end
              end else begin
                if (OutG=0) or (OutG<>2)  then begin
                  GInterp2 = 2
                end
              end
              K = cld.Pc2X - Fp2X;  K@ = MaxReal
              L = cld.Pc2Y - Fp2Y;  L@ = MaxReal
            end else begin ! Линия
              if (Abs(U-U@)>Toler) or (Abs(V-V@)>Toler) then begin
                if (OutG=0) or (OutG<>1) then begin
                  GInterp2 = 1
                  GInterp2@ = MaxReal
                end
              end
            end
          end
          if ((cld.Mode=1) or (cld.Mode=2)) and
             (cld.RollMode>0)
          then begin  ! Обкат углов (CornerR)
            RollR1 = cld.RollR1;
            if RollModeChanged=1 then begin
              RollR1@ = MaxReal
              RollModeChanged =0
            end
          end
        end
      end
    
      ! Выключение режима движения
      if (cld.Mode<>2) and (GTaper<>50) then begin
        GTaper = 50
        !TaperMode = MaxReal;
      end
      if (cld.Mode<>4) and (GUV<>75) then begin
        U = 0; V = 0
      end
      OutBlock
      if (cld.Mode<>4) and (GUV<>75) then begin
        GUV = 75
        U = MaxReal; U@ = U
        V = MaxReal; V@ = V
      end
      OutBlock
      
      ! Запоминание текущих координат
      Fp1X = cld.Ep1X
      Fp1Y = cld.Ep1Y
      if cld.Mode<3 then begin ! 2D
        Fp2X = Fp1X
        Fp2Y = Fp1Y
      end else begin           ! 4D
        Fp2X = cld.Ep2X
        Fp2Y = cld.Ep2Y
      end
    end
    

    Доступ из .NET

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

    public override void OnBeforeMovement(ICLDMotionCommand cmd, CLDArray cld)   // групповой обработчик - перед любой командой перемещения
    public override void OnEDMMove(ICLDEDMMoveCommand cmd, CLDArray cld)
    public override void OnAfterMovement(ICLDMotionCommand cmd, CLDArray cld)   // групповой обработчик - после любой команды перемещения
    

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

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

    Член Тип Описание
    cmd.MotionMode CLDEDMMotionMode Режим перемещения: Rapid, Plain2D, Taper2D, MultiProf4D или CutsOnly4D.
    cmd.IsRapidMove bool Возвращает "True", если режим перемещения - Rapid, иначе возвращает "False".
    cmd.IsPlain2DMove bool Возвращает "True", если режим перемещения - Plain2D, иначе возвращает "False".
    cmd.IsTaper2DMove bool Возвращает "True", если режим перемещения - Taper2D, иначе возвращает "False".
    cmd.IsMultiProf4DMove bool Возвращает "True", если режим перемещения - MultiProf4D, иначе возвращает "False".
    cmd.IsCutsOnly4DMove bool Возвращает "True", если режим перемещения - CutsOnly4D, иначе возвращает "False".
    cmd.Lower ICLDEDMMoveSpan Параметры перемещения нижней направляющей (тип, координаты и радиус).
    cmd.Upper ICLDEDMMoveSpan Параметры перемещения верхней направляющей (тип, координаты и радиус).
    cmd.TaperAngle double В режиме перемещения Taper2D параметр задаёт знаковый угол конусности: "A > 0" - правая конусность, "A < 0" - левая конусность.
    cmd.RollMode EDMRollMode Режим обката острых углов для 2-координатной и конусной обработки (функция CornerR: off, sharp, conical, cylindrical или fixed).
    cmd.EP TInp3DPoint Конечная точка (X, Y, Z) перемещения

    Пример - OnEDMMove (из постпроцессора AgieCharmilles_WireEDM_DN):

    public override void OnEDMMove(ICLDEDMMoveCommand cmd, CLDArray cld)
    {
        // Команды заправки и обрыва проволоки
        if (!cmd.IsRapidMove && !wireInserted)
        {
            InsertWire();
        }
        if (cmd.IsRapidMove && wireInserted)
        {
            if (cmd.Lower.EP != previousLowerPoint)
                BreakWire();
        }
    
        // Выбор условий резания
        if (conditionsNeedOut)
        {
            nc.C.Show();
            nc.Block.Out();
            conditionsNeedOut = false;
        }
    
        // Включение коррекции
        if (compensNeedOut && nc.GCompens != 40)
        {
            nc.GCompens.Show();
            nc.H.Show();
            nc.Block.Out();
            compensNeedOut = false;
        }
    
        // Включение режима движения
        if (cmd.IsMultiProf4DMove)
        {
            nc.G2Contour.v = 61;
        }
        else if (cmd.IsCutsOnly4DMove)
        {
            nc.GUV.v = 74;
        }
        if (nc.G2Contour.ValuesDiffer || nc.GUV.ValuesDiffer)
        {
            nc.Block.Out();
            nc.GInterp1.RestoreDefaultValue(false);
            nc.GInterp2.RestoreDefaultValue(false);
        }
    
        // Выключение коррекции
        if (compensNeedOut && nc.GCompens == 40)
        {
            nc.GCompens.Show();
            compensNeedOut = false;
        }
    
        // Вывод координат
        nc.X1.v = cmd.Lower.EP.X;
        nc.Y1.v = cmd.Lower.EP.Y;
        nc.Z1.v = cmd.Lower.EP.Z;
        switch (cmd.MotionMode)
        {
            case CLDEDMMotionMode.Rapid:
                if (nc.X1.ValuesDiffer || nc.Y1.ValuesDiffer || nc.Z1.ValuesDiffer)
                {
                    nc.GInterp1.v = 0;
                }
                break;
            case CLDEDMMotionMode.Plain2D:
            case CLDEDMMotionMode.Taper2D:
            case CLDEDMMotionMode.MultiProf4D:
                if (cmd.Lower.IsArc)
                {
                    nc.GInterp1.v = cmd.Lower.ArcR > 0d ? 3 : 2;
                    nc.I1.Show(cmd.Lower.Center.X - previousLowerPoint.X);
                    nc.J1.Show(cmd.Lower.Center.Y - previousLowerPoint.Y);
                }
                else // Линия
                {
                    nc.GInterp1.v = 1;
                }
                if (cmd.IsTaper2DMove)
                {
                    nc.GTaper.v = cmd.TaperAngle > 0 ? 52 : 51;
                    nc.A.Show(Abs(cmd.TaperAngle));
                }
                else if (cmd.IsMultiProf4DMove)
                {
                    nc.Colon.Show();
                    nc.X2.v = cmd.Upper.EP.X;
                    nc.Y2.v = cmd.Upper.EP.Y;
                    nc.Z2.v = cmd.Upper.EP.Z;
                    if (cmd.Upper.IsArc)
                    {
                        nc.GInterp2.v = cmd.Upper.ArcR > 0d ? 3 : 2;
                        nc.I2.Show(cmd.Upper.Center.X - previousUpperPoint.X);
                        nc.J2.Show(cmd.Upper.Center.Y - previousUpperPoint.Y);
                    }
                    else // Линия
                    {
                        nc.GInterp2.v = 1;
                    }
                    // Обкат углов (CornerR)
                    if ((cmd.IsPlain2DMove || cmd.IsTaper2DMove) && cmd.RollMode != EDMRollMode.Off)
                    {
                        nc.RollR1.Show(cmd.Lower.RollR);
                        nc.RollR2.Show(cmd.Upper.RollR);
                    }
                }
                break;
            case CLDEDMMotionMode.CutsOnly4D:
                nc.GInterp1.v = 1;
                var d = (T3DPoint)cmd.Upper.EP - cmd.Lower.EP;
                nc.U.v = d.X;
                nc.V.v = d.Y;
                nc.W.v = d.Z;
                break;
        }
    
        // Выключение режима движения
        if (!cmd.IsTaper2DMove && nc.GTaper != 50)
        {
            nc.GTaper.v = 50;
        }
        if (!cmd.IsMultiProf4DMove && nc.G2Contour != 60)
        {
            nc.G2Contour.v = 60;
        }
        if (!cmd.IsCutsOnly4DMove && nc.GUV != 75)
        {
            nc.U.v = 0;
            nc.V.v = 0;
        }
        nc.Block.Out();
        if (!cmd.IsCutsOnly4DMove && nc.GUV != 75)
        {
            nc.GUV.v = 75;
            nc.U.Hide();
            nc.V.Hide();
        }
        nc.Block.Out();
    
        // Запоминание текущих координат
        previousLowerPoint = cmd.Lower.EP;
        if (!cmd.IsMultiProf4DMove && !cmd.IsCutsOnly4DMove) // 2D
        {
            previousUpperPoint = previousLowerPoint;
        }
        else // 4D
        {
            previousUpperPoint = cmd.Upper.EP;
        }
    }
    

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

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