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, только если в настройках схемы станка включена соответствующая опция "Задавать вектора нормали поверхности контакта инструмента".

Пример:
! 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();
}