Цикл фрезерования резьбы
INCT_ThreadMillingCycleFormer - интерфейс CAM системы, который реализует функциональность по упрощению формирования перемещений цикла фрезерования резьбы. Объект, реализующий этот интерфейс, возвращает функция INCT_CLData.CreateMillingCycleFormer, при её выполнении с параметром mctThreadMilling.
 
Предназначение:
Выполнение перемещений в различных типах цикла фрезерования резьбы, для разных стоек в общем случае повторяют одинаковую траекторию:
- Подвод инструмента на начальный уровень на ускоренной подаче. 
- Подвод инструмента на уровень перебега при подводе на ускоренной подаче. 
- Подвод по дуге или хелику к точке начала фрезерования на рабочей подаче (перебег). 
- Фрезерование резьбы с заданными параметрами (центр, диаметр, шаг) до уровня окончания фрезерования. 
- Отвод по дуге или хелику на рабочей подаче на уровне перебега при отводе (перебег). 
- Возврат на начальный уровен на ускоренной подаче. 
Примеры таких циклов, Sinumerik: CYCLE90.
Использование формирователя позволяет сформировать траекторию движения инструмента по заданным параметрам. А также добавить в траекторию движения на любом формируемом участке необходимые для конкретного цикла особенности, изменить тип или значение подачи, либо пропустить перемещение инструмента, подготовленное формирователем.
Использование формирователя:
Рекомендуем создавать новый формирователь для каждого нового цикла в кадре управляющей программы. Таким образом, интерфейс старого формирователя должен освобождаться при создании нового или в случае завершения работы интерпретатора.
Для формирования команд движения инструмента по траектории цикла, необходимо выполнить следующие шаги:
- Получить интерфейс формирователя (INCT_CLData.CreateMillingCycleFormer). 
- Задать индексы осей, по которым будут производиться перемещения (Set_AxisIndexes). 
- Задать текущую плоскость (Set_Plane). 
- Задать рабочую подачу (Set_Feedrate). 
- Задать тип резьбы (Set_ThreadType). 
- Задать направление резьбы (Set_ThreadDirection). 
- Задать шаг резьбы (Get_ThreadStep). 
- Задать диаметр резьбы (Set_Diameter). 
- Задать точку центра резьбы (Set_CenterPoint). 
- Задать уровень подвода (Set_TopLevel) 
- Задать уровень безопасной плоскости (Set_RapidLevel). 
- Задать уровень окончания фрезерования (Set_BottomLevel). 
- Задать уровень перебега при подводе (Set_TravelInOvershoot). 
- Задать уровень перебега при отводе (Set_TravelOutOvershoot). 
- Назначить обработчик событий цикла (Set_Events), если в траекторию цикла нужно вносить изменения. 
- Сформировать команды движения инструмента по траектории цикла (MakeWorkpath). 
Описание методов интерфейса:
| Метод | Описание метода | 
| Set_AxisIndexes | Метод устанавливает индексы осей X, Y, Z в которых будут производиться перемещения при формировании траектории цикла. Входные параметры: Value (TNCDCAxisIndexes) - X (целое число) - индекс оси X, Y (целое число) - индекс оси Y, Z (целое число) - индекс оси Z. Выходных параметров нет. | 
| Get_AxisIndexes | Функция возвращает индексы осей X, Y, Z в которых будут производиться перемещения при формировании траектории цикла (TNCDCAxisIndexes). Входных параметров нет. | 
| Set_Plane | Метод устанавливает текущую плоскость. Входной параметр: Value (TNCPlaneType) - текущая плоскость. ptXY - плоскость XY, сверление отверстия производится вдоль оси Z. Выходных параметров нет. | 
| Get_Plane | Функция возвращает текущую плоскость (TNCPlaneType). Входных параметров нет. | 
| Set_ThreadType | Метод устанавливает тип резьбы. Входной параметр: Value (TNCMillingThreadType) - тип резьбы. mttInternal - внутренняя mttExternal - наружная Выходных параметров нет. | 
| Get_ThreadType | Функция возвращает тип резьбы. Входных параметров нет. | 
| Set_ThreadDirection | Метод устанавливает направление резьбы. Входной параметр: Value (TNCCircularMode) - направление резьбы. cmCW - по часовой стрелке cmCCW - против часовой стрелки Выходных параметров нет. | 
| Get_ThreadDirection | Функция возвращает значение направления резьбы. Входных параметров нет. | 
| Set_ThreadStep | Метод устанавливает значение шага резьбы. Входной параметр: Value (вещественное число) - значение шага резьбы. Выходных параметров нет. | 
| Get_ThreadStep | Функция возвращает значение шага резьбы. Входных параметров нет. | 
| Set_Diameter | Метод устанавливает значение диаметра резьбы. Входной параметр: Value (вещественное число) - значение диаметра резьбы. Выходных параметров нет. | 
| Get_Diameter | Функция возвращает значение диаметра резьбы. Входных параметров нет. | 
| Set_CenterPoint | Метод устанавливает точку центра резьбы. Входной параметр: Value (TNC2DPoint) - точка центра резьбы. Выходных параметров нет. | 
| Get_CenterPoint | Функция возвращает точку центра резьбы (TNC2DPoint). Входных параметров нет. | 
| Set_TopLevel | Метод устанавливает уровень подвода. Входной параметр: Value (вещественное число) - значение уровня подвода. Выходных параметров нет. | 
| Get_TopLevel | Функция возвращает значение уровня подвода. Входных параметров нет. | 
| Set_RapidLevel | Метод устанавливает значение уровня безопасной плоскости. Входной параметр: Value (вещественное число) - значение уровня безопасной плоскости. Выходных параметров нет. | 
| Get_RapidLevel | Функция возвращает значение уровня безопасной плоскости. Входных параметров нет. | 
| Set_BottomLevel | Метод устанавливает значение уровня окончания фрезерования. Входной параметр: Value (вещественное число) - значение уровня окончания фрезерования. Выходных параметров нет. | 
| Get_BottomLevel | Функция возвращает значение уровня окончания фрезерования. Входных параметров нет. | 
| Set_TravelInOvershoot | Метод устанавливает уровень перебега при подводе. Входной параметр: Value (вещественное число) - уровень перебега при подводе. Выходных параметров нет. | 
| Get_TravelInOvershoot | Функция возвращает уровень перебега при подводе. Входных параметров нет. | 
| Set_TravelOutOvershoot | Метод устанавливает уровень перебега при отводе. Входной параметр: Value (вещественное число) - значение перебега при отводе. Выходных параметров нет. | 
| Get_TravelOutOvershoot | Функция возвращает уровень перебега при отводе. Входных параметров нет. | 
| Set_Feedrate | Метод устанавливает значение рабочей подачи. Входной параметр: Value (вещественное число) - значение рабочей подачи. Выходных параметров нет. | 
| Get_Feedrate | Функция возвращает значение рабочей подачи. Входных параметров нет. | 
| Set_MPM | Метод устанавливает тип рабочей подачи. Входной параметр: Value (логическое) - тип рабочей подачи. Истина - мм/мин, Ложь - об/мин. Выходных параметров нет. | 
| Get_MPM | Функция возвращает тип рабочей подачи. Входных параметров нет. | 
| Set_Events | Метод назначает события для управления поведением цикла. При использовании событий можно добавить в траекторию движения на любом формируемом участке необходимые для конкретного цикла особенности, изменить тип или значение подачи, либо пропустить перемещение инструмента, подготовленное формирователем. Входной параметр: Value (INCT_MillingCycleEvents) - объект, реализующий события. Подробное описание ниже. Выходных параметров нет. | 
| Get_Events | Функция возвращает объект, реализующий события, связанный с формирователем цикла (INCT_MillingCycleEvents). Выходных параметров нет. | 
| MakeWorkpath | Метод формирует траекторию цикла по заданным параметрам. | 
INCT_MillingCycleEvents - интерфейс, реализуемый в интерпретаторе, который позволяет управлять поведением цикла фрезерования резьбы. Интерфейс представляет из себя набор методов-событий, которые выполняются при перемещении инструмента внутри формирователя траектории цикла. Используя методы интерфейса можно добавить в траекторию движения на любом формируемом участке необходимые для конкретного цикла особенности: выстой, ориентированный останов и прочее, изменить тип подачи, либо пропустить перемещение инструмента, подготовленное формирователем.
Если для формирователя траектории цикла назначены события, то любое перемещение инструмента внутри формирователя состоит из 3-х этапов:
- Выполняется метод INCT_MillingCycleEvents.BeforeMove. В качестве параметров методу передаются заданные циклом: тип перемещения, координаты точки перемещения, тип подачи. 
- Выполняется метод INCT_MillingCycleEvents.OnMove/OnArc в зависимости от типа перемещения: по прямой или по дуге. 
 Для OnMove в качестве параметров методу передаются: тип перемещения, координаты точки перемещения, тип подачи, признак выполнения перемещения. Все параметры, кроме типа перемещения, в реализации метода могут быть изменены. В зависимости от заданного в OnMove признака, производится выполнение перемещения инструмента в заданную точку с указанной подачей, или перемещение не производится.
 Для OnArc в качестве параметров методу передаются: тип перемещения, координаты центра дуги, точки перемещения, радиус, тип подачи, признак выполнения перемещения. Все параметры, кроме типа перемещения, в реализации метода могут быть изменены. В зависимости от заданного в OnArc признака, производится выполнение перемещения инструмента в заданную точку с указанной подачей, или перемещение не производится.
- Выполняется метод INCT_MillingCycleEvents.AfterMove. В качестве параметров методу передаются: тип перемещения, координаты точки перемещения, тип подачи, возвращённые методом OnMove/OnArc. 
Описание методов интерфейса:
| Метод | Описание метода | Описание использования | 
| BeforeMove | Метод будет выполнен перед каждым перемещением инструмента при формировании траектории цикла. Входные параметры: MoveType (TNCMillingCycleMoveType) - тип перемещения, описание см. ниже; Point (TNC3DPoint) - координаты точки перемещения; Feed (TNCFeedType) - тип подачи. mmMoveToTopLevel - перемещение к стартовой точке на уровне TopLevel Выходных параметров нет. | При необходимости добавления тех или иных команд перед выполнением перемещения, их нужно добавить в реализацию метода. Например, если есть необходимость включить систему охлаждения станка перед точением канавки, сделать это можно добавив в реализацию метода BeforeMove вызов INCT_CLData.AddCoolant с соответствующими параметрами по условию MoveType = mmMoveToTopLevel. | 
| OnMove | Метод будет выполнен непосредственно перед каждым перемещением инструмента при формировании траектории цикла. Входные параметры: MoveType (TNCMillingCycleMoveType) - тип перемещения, описание см. выше; Входные и выходные параметры: Point (TNC3DPoint) - координаты точки перемещения; Feed (TNCFeedType) - тип подачи; Handled (логическое) - признак выполнения перемещения внутри реализации (Истина - перемещение выполнено, Ложь - перемещение не выполнено). Если после вызова OnMove параметр Handled принимает значение Истина, это значит, что перемещение было выполнено внутри реализации метода OnMove и формирователь цикла не добавляет команду перемещения в траекторию движения инструмента. Если после вызова OnMove параметр Handled принимает значение Ложь, формирователь считает, что перемещение не было выполнено внутри реализации метода OnMove и добавляет в траекторию движения инструмента команду перемещения в точку Point с типом подачи Feed. | При необходимости переопределения значений точки перемещения или подачи, либо для отказа от перемещения (пропуска). Например, если нужно изменить тип подачи на ускоренную, при возврате на начальный уровень, после фрезерования, то в реализации метода OnMove необходимо изменить значение возвращаемого методом параметра Feed на ffRapid по условию MoveType = mmReturnToTopLevel (тип подачи описан в этой статье, см. OutStandardFeed). Если нужно выполнить перемещение инструмента в точку, отличную от рассчитанной циклом, необходимо изменить значение возвращаемого методом OnMove параметра Point. Если перемещение в рассчитанную циклом точку выполнять не нужно, тогда внутри реализации метода OnMove нужно изменить значение параметра Handled на Истина. | 
| OnArc | Метод будет выполнен непосредственно перед каждым перемещением инструмента при формировании траектории цикла. Входные параметры: MoveType (TNCMillingCycleMoveType) - тип перемещения, описание см. выше; Входные и выходные параметры: Center, Point (TNC3DPoint) - координаты центра и точки перемещения; Radius (вещественное число) - радиус дуги, Feed (TNCFeedType) - тип подачи; Handled (логическое) - признак выполнения перемещения внутри реализации (Истина - перемещение выполнено, Ложь - перемещение не выполнено). Если после вызова OnArc параметр Handled принимает значение Истина, это значит, что перемещение было выполнено внутри реализации метода OnArc и формирователь цикла не добавляет команду перемещения в траекторию движения инструмента. Если после вызова OnArc параметр Handled принимает значение Ложь, формирователь считает, что перемещение не было выполнено внутри реализации метода OnArc и добавляет в траекторию движения инструмента команду перемещения по дуге в точку Point с типом подачи Feed. | При необходимости переопределения значений точки перемещения или подачи, либо для отказа от перемещения (пропуска). | 
| AfterMove | Метод будет выполнен после каждого перемещения инструмента при формировании траектории цикла, даже если перемещение было отменено в OnMove/OnArc. Входные параметры: MoveType (TNCMillingCycleMoveType) - тип перемещения, описание см. выше; Point (TNC3DPoint) - координаты точки перемещения; Feed (TNCFeedType) - тип подачи. Выходных параметров нет. | При необходимости добавления тех или иных команд после выполнения перемещения, их нужно добавить в реализацию метода. |