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