INTERPOLATION - Режим интерполяции
Отображение команды
Как команда отображается в списке команд CLData:
INTERPOLATION ON(71) | OFF(72), CARTESIAN(9020) | POLAR(9021) |
CYLINDRICAL(9022) | MULTIAXIS(9023), P1 p1, P2 p2, P3 p3
INTERPOLATION — эта команда активирует или деактивирует режимы интерполяции, такие как цилиндрическая или полярная интерполяция.
Режим интерполяции, заданный параметром CLD[2] (CLD.Mode), активируется, если параметр CLD[1] (CLD.SubCmd) равен ON(71), иначе указанная интерполяция деактивируется.
Параметры CLD[3] (CLD.P1), CLD[4] (CLD.P2), CLD[5] (CLD.P3) задают дополнительные параметры режимов интерполяции.
Доступ из sppx
Обработчик: program Interpolation
| Параметр | Массив CLD | Имя CLD | Описание |
|---|---|---|---|
| ON(71) OFF(72) |
CLD[1] | CLD.SubCmd | ON(71) – активировать, OFF(72) – деактивировать. |
| CARTESIAN(9020) POLAR(9021) CYLINDRICAL(9022) MULTIAXIS(9023) |
CLD[2] | CLD.Mode | CARTESIAN(9020) – декартова интерполяция; POLAR(9021) – полярная интерполяция; CYLINDRICAL(9022) – цилиндрическая интерполяция; MULTIAXIS(9023) – многоосевая интерполяция |
| P1 | CLD[3] | CLD.P1 | Задаёт радиус цилиндра для режима цилиндрической интерполяции |
| P2 | CLD[4] | CLD.P2 | Зарезервировано |
| P3 | CLD[5] | CLD.P3 | Зарезервировано |
Режим полярной интерполяции обычно используется на токарно-фрезерных станках без оси Y для обработки деталей сбоку. В этом режиме перемещение инструмента в направлении Y заменяется одновременным поворотом заготовки вокруг поворотной оси (C) и перемещением инструмента вдоль радиальной оси (X). В зависимости от используемой системы ЧПУ координата Y в управляющей программе может заменяться координатой C.

Режим цилиндрической интерполяции используется для обработки цилиндрических карманов на цилиндрических деталях. Управляющая программа содержит 2D-контур кармана в координатах XY, где координата X — это координата вдоль оси цилиндра, а координата Y равна радиусу цилиндра, умноженному на угол поворота заготовки вокруг поворотной оси. В зависимости от используемой системы ЧПУ координата Y в управляющей программе может заменяться координатой C.

Режим многоосевой интерполяции (MULTIAXIS) используется для одновременного пятиосевого фрезерования. В этом режиме координаты XYZ кадра управляющей программы — это координаты центральной точки инструмента относительно системы координат заготовки, вращающейся вместе с поворотным столом. В отличие от стандартного режима декартовой интерполяции, в режиме многоосевой интерполяции, если кадр УП содержит только команды позиционирования поворотных осей, положение кончика инструмента относительно заготовки остаётся неизменным. Это означает, что инструмент поворачивается вокруг своей центральной точки (см. рисунок ниже).

Если запрограммировать перемещение наклоняемого стола при активной многоосевой интерполяции, система ЧПУ соответствующим образом поворачивает систему координат. Если, например, повернуть ось C на 90° (командой позиционирования или сдвигом базы) и затем запрограммировать перемещение по оси X, система ЧПУ выполнит это перемещение по оси станка Y.
Разные системы ЧПУ используют разные команды для включения и отключения режима многоосевой интерполяции. В Heidenhain этот режим называется управлением центральной точкой инструмента и управляется функциями TCPM, M128 и M129. В Sinumeric режим включается и выключается командами TRAORI и TRAFOOF.
Пример (из постпроцессора Fanuc (30i)_Mill):
program Interpolation
case cld[2] of
9023: begin ! 5-axis
if CLD.SubCmd=71 then begin ! On
NeedKorDl = 43.4
IsMultiaxisInterpolation = 1
end else begin ! Off
KorDl = 49;! KorDl@ = MaxReal
IsMultiaxisInterpolation = 0
end
OutBlock
end
9021: begin ! POLAR
OutBlock
if CLD.SubCmd=71 then begin ! On
GInterpRot = 12.1
YAddress = "A"
IsRotaryInterpolation = 1
end else begin ! Off
GInterpRot = 13.1
YAddress = "Y"
IsRotaryInterpolation = 0
end
GInterpRot@ = MaxReal
OutBlock
end
9022: begin ! CYLINDRICAL
OutBlock
if CLD.SubCmd=71 then begin ! On
GInterpRot = 07.1
A = CLD.P1; A@ = MaxReal
YAddress = "A"
IsRotaryInterpolation = 2
CylR = CLD.P1
CirclesThroughRadius = 1
end else begin ! Off
GInterpRot = 07.1
A = 0; A@ = MaxReal
YAddress = "Y"
IsRotaryInterpolation = 0
CirclesThroughRadius = 0
end
GInterpRot@ = MaxReal
OutBlock
end
end
end
Доступ из .NET
Обработчики:
public override void OnInterpolation(ICLDInterpolationCommand cmd, CLDArray cld)
public override void OnInterpPolar(ICLDInterpolationCommand cmd, CLDArray cld) // POLAR(9021)
public override void OnInterpCylindrical(ICLDInterpolationCommand cmd, CLDArray cld) // CYLINDRICAL(9022)
public override void OnInterp5x(ICLDInterpolationCommand cmd, CLDArray cld) // MULTIAXIS(9023)
Наследование: ICLDInterpolationCommand : ICLDCommand.
Читайте параметры из строго типизированного объекта cmd (рекомендуется); доступны также «сырой» массив cld[i] (те же индексы, что и в sppx) и именованные обёртки cmd["..."]. В таблице перечислены члены команды, включая унаследованные от базовых интерфейсов; общие члены ICLDCommand (навигация, CLD, CLDFile, TechOperation, ...) описаны в разделе Модель доступа к CLData.
| Член | Тип | Описание |
|---|---|---|
cmd.IsOn |
bool |
Возвращает "True", если это команда включения интерполяции, иначе возвращает "False". |
cmd.IsOff |
bool |
Возвращает "True", если это команда выключения интерполяции, иначе возвращает "False". |
cmd.InterpMode |
CLDInterpMode |
Определяет тип интерполяции (полярная - G112, цилиндрическая - G107 или непрерывная многоосевая - G43.4, TCPM, TRAORI). |
cmd.InterpType |
int |
Числовой код, определяющий тип интерполяции (полярная, цилиндрическая или непрерывная многоосевая). |
cmd.CylRadius |
double |
Задаёт радиус цилиндра для режима цилиндрической интерполяции. |
Пример - OnInterpolation (из постпроцессора Sinumerik (840D)_Mill_DN):
public override void OnInterpolation(ICLDInterpolationCommand cmd, CLDArray cld)
{
if (cmd.InterpType == 9023){// MULTIAXIS interpolation
if (cmd.IsOn){ // Switch on
nc.Block.Out();
nc.WriteLineWithBlockN($"TRAORI");
nc.CoordSys.v0 = double.MaxValue; nc.Block.Out();
nc.WriteLineWithBlockN($"ORIWKS");
nc.WriteLineWithBlockN($"ORIAXES");
}else{ // Switch off
nc.Block.Out();
nc.WriteLineWithBlockN($"TRAFOOF");
}
}else if (cmd.InterpType == 9021) {// Polar interpolation
if (cmd.IsOn) { // Switch on
nc.Block.Out();
nc.WriteLine("TRANSMIT");
Cycle.SetPolarInterpolationStatus(true);
csC = Cos(nc.A.v);
snC = -Sin(nc.A.v);
}else { // Switch off
nc.Block.Out();
nc.WriteLine("TRANSMIT");
Cycle.SetPolarInterpolationStatus(true);
nc.A.RestoreDefaultValue(false);
}
}else if (cmd.InterpType == 9022) {// Cylindrical interpolation
if (cmd.IsOn) { // Switch on
nc.Block.Out();
nc.WriteLine("TRACYL(" + Str(2*cld[3]) + ")");
Cycle.SetCilindInterpolationStatus(true);
}else{ // Switch off
nc.Block.Out();
nc.WriteLine("TRAFOOF");
//Output "TMCOFF"
Cycle.SetCilindInterpolationStatus(false);
nc.A.RestoreDefaultValue(false);
}
}
}