CLData
CLData — это промежуточные данные, которые CAM-система передаёт постпроцессору: упорядоченный список технологических команд (перемещения инструмента, управление шпинделем и СОЖ, смены инструмента, стандартные циклы, вспомогательные функции и т. д.), каждая из которых несёт набор параметров. Постпроцессор читает CLData и формирует управляющую программу для конкретного станка и системы ЧПУ.
Обе подсистемы постпроцессирования — Генератор постпроцессоров (sppx-постпроцессоры) и .NET-постпроцессоры — работают с одними и теми же CLData. Модуль, который читает и пишет CLData, общий для обеих; низкоуровневое взаимодействие с нативным кодом скрыто, и каждая подсистема предоставляет доступ к данным через удобные обёртки. Между подсистемами различается только синтаксис доступа — сами команды и их параметры идентичны.
В этом разделе команды CLData описаны один раз, для обеих подсистем. Для каждой команды параметры сначала описываются в синтаксически нейтральном виде, затем отдельными абзацами показывается, как их читать из sppx и из .NET. Используйте форму доступа своей подсистемы и не смешивайте два синтаксиса.
Из чего состоит CLData
CLData организованы в виде небольшой иерархии — проект, его файлы, команды внутри каждого файла и параметры каждой команды:
- Проект — весь проект CAM-системы. Помимо операций он несёт данные уровня проекта — схему станка, детали и заготовки, единицы измерения, установочные позиции и т. д.
- Файлы — CLData проекта разбиты на файлы. На каждую операцию CAM приходится один файл, для каждой подпрограммы — отдельный необязательный файл, и один файл уровня проекта, который хранит информацию о проекте и не содержит команд.
- Команды — каждый файл представляет собой упорядоченную последовательность технологических команд: перемещения инструмента, управление шпинделем и СОЖ, смены инструмента, стандартные циклы, маркеры секций, вспомогательные функции и т. д. Порядок соответствует порядку выполнения операции.
- Параметры — каждая команда несёт набор описывающих её параметров: координаты перемещения, частоту вращения шпинделя, номер инструмента, глубины и смещения цикла и т. д. У каждого типа команды свой набор параметров.
Постпроцессор обходит эту иерархию — файл за файлом, команда за командой — и для каждой команды читает нужные ему параметры, чтобы сформировать соответствующий кадр управляющей программы. В следующем разделе приведён реальный листинг такого проекта, а разделы после него объясняют, как добираться до файлов, команд и параметров из кода постпроцессора.
Структура листинга CLData
CLData проекта — это не один плоский список команд, а набор файлов, и внутри каждого файла команды сгруппированы во вложенные секции. Знание этой раскладки делает список команд читаемым и позволяет обработчику реагировать на структуру траектории. Приведённый ниже пример — реальный листинг простого токарно-фрезерного проекта, полученный небольшим постпроцессором, который обходит каждый файл и каждую команду (тот же приём обхода файлов, что и в примере из раздела Файлы CLData).
Файлы
- CLData проекта — это список файлов, нумерация начинается с
0. Нумерация файлов 0-based в обеих подсистемах. А вот нумерация команд внутри файла различается: она 1-based в sppx (for c = 1 to CldFile[f].CmdCount) и 0-based в .NET (for (int c = 0; c < file.CmdCount; c++)). - Файл
0— всегда файл уровня проекта (типCAMProject). Он не содержит команд — в нём хранится информация о проекте, читаемая оператором Project. - Каждая операция CAM становится одним файлом типа
TechOperation, в порядке списка операций. - Файлы типа
NCSubнеобязательны — они существуют, только если в проекте используются подпрограммы или циклы с подпрограммами. В отличие от файлов операций, они не транслируются автоматически; постпроцессор выводит их явным вызовом операторов работы с подпрограммами (см. Операторы работы с подпрограммами УП).
File 0 CAMProject - данные уровня проекта, без команд
File 1 NCSub - необязательно: тела подпрограмм / циклов
File 2 NCSub
File 3 TechOperation - по одному файлу на операцию CAM, в порядке списка операций
File 4 TechOperation
...
File 15 TechOperation
Секции внутри операции
- Каждый файл операции обёрнут парой
PPFUN TECHINFO(58)…PPFUN ENDTECHINFO(59)— начало / конец операции, несущие технологические данные операции. - Команды группируются во вложенные секции командой
STRUCTURE(ON(71)открывает секцию,OFF(72)закрывает). Три секции верхнего уровня — Header, Body и Tail; Header содержит подсекцию Approach, а Tail — подсекцию Return.STRUCTUREтакже используется для группировки рабочих перемещений по регионам / проходам инструмента — например, у фрезерной операции Body делится на группы по глубине Level, а каждый уровень — на проходы Offset (см.File 15ниже). В списке команд эти вложенные секции отображаются отступами. - В Header находятся команды настройки, обычно в таком порядке:
- первый
COMMENT— имя операции CAM; ORIGIN— базовая система координат, в которой выводится траектория операции;LOADTL— инструмент, которым ведётся обработка в операции;COMMENTсразу после инструмента, начинающийся с@, — имя инструмента;CUTCOM— активирует коррекцию инструмента;PLANE— активирует рабочую плоскость;SPINDL— запускает шпиндель;FROM— начальное положение инструмента; перемещения не выполняет, лишь обозначает, где инструмент уже находится к началу операции.
- первый
- Набор команд перемещения зависит от типа оборудования:
GOTO/CIRCLEдля 2D/3D токарно-фрезерных траекторий (токарные и сверлильные циклы дополнительно выводятEXTCYCLEиMULTIGOTOдля позиционирования, как в примере ниже),MULTIGOTO/MULTIARCдля пятиосевых станков и роботов, иEDMMOVEдля электроэрозионных станков. В остальном структура остаётся в основном такой же. - Ключевые точки траектории помечаются тегами —
PPRINT, текст которого начинается с#(например,#KeyPoint: StartCutting,#Approach:…,#Return:…). Постпроцессор реагирует на тег или пропускает его, чтобы метка не попала в управляющую программу; см. Теги траектории. В листинге ниже такие строки помечены! toolpath tag.
Ниже — сквозной обход всего проекта: файл проекта, файлы подпрограмм и файлы операций; длинные списки
параметров сокращены до …, повторяющиеся проходы свёрнуты; отступы показывают вложенность STRUCTURE
(индексы команд опущены):
File 0 — CAMProject (уровень проекта; команд нет)
File 1 — NCSub (тело подпрограммы / цикла; выводится только при явном вызове из постпроцессора)
COMMENT "Geometry"
PPFUN STARTSUB(50), 1
GOTO X 67.8, Y 0, Z 0
PPRINT "#KeyPoint: StartCutting" ! toolpath tag
FEDRAT F 0.5, MMPR(316), K 0
GOTO X 30.703, Y 0, Z 0
GOTO X 33.362, Y 0, Z 2.659
PPFUN ENDSUB(51), 1
File 2 — NCSub (ещё одно тело подпрограммы; та же форма, что и File 1 — опущено)
File 3 — TechOperation "Lathe facing" (точение)
STRUCTURE ON(71) TYPE "HeaderSection", Comment "$Header$"
PPFUN TECHINFO(58), 250, 30.703, 0, 0, 979.484, … ! операция начинается
STRUCTURE ON(71) TYPE "String", Comment "Header"
COMMENT "Lathe facing" ! имя операции
ORIGIN X 0, Y 0, Z 265, PPFUN 0, N 54, … ! базовая система координат (G54)
LOADTL N 2, ToolChanged 1, X 15, Y 125, … ! инструмент
COMMENT "@IC16 Re0.2 R OD cutting tool" ! имя инструмента (начинается с @)
CUTCOM ON(71), LENGTH(9)2, …, LEFT(8) ! коррекция инструмента
FROM COUNT 10, MACHINE, X 100, Y 0, Z 500, … ! начальное положение (без перемещения)
STRUCTURE OFF(72) TYPE "String", Comment "Header"
STRUCTURE ON(71) TYPE "String", Comment "Approach"
STRUCTURE ON(71) TYPE "Approach", Comment "Approach"
PPRINT "#Approach:[Rule 1]=C; Z10; X; Z" ! toolpath tag
SELWORKPIECE"Table"
SPINDL ON(71), NO -1000, K 0, MODE CSS(2), SPEED -150 ! шпиндель
RAPID N 10000
MULTIGOTO COUNT 1, MACHINE, Z 10, …
MULTIGOTO COUNT 1, MACHINE, X 67.8, …
MULTIGOTO COUNT 1, MACHINE, Z 2.659, …
STRUCTURE OFF(72) TYPE "Approach", Comment "Approach"
STRUCTURE OFF(72) TYPE "String", Comment "Approach"
STRUCTURE OFF(72) TYPE "HeaderSection", Comment "$Header$"
STRUCTURE ON(71) TYPE "BodySection", Comment "$Body$"
GOTO X 67.8, Y 0, Z 2.659
COOLNT ON(71), N 1, #1
FEDRAT F 0.5, MMPR(316), K 0
EXTCYCLE ON(71) LATHEFINISH(400), 1, 0, 3, 0, 0.3, …
EXTCYCLE CALL(52) LATHEFINISH(400), 1, 0, 3, 0, 0.3, …
EXTCYCLE OFF(72) LATHEFINISH(400), 1, 0, 3, 0, 0.3, …
STRUCTURE OFF(72) TYPE "BodySection", Comment "$Body$"
STRUCTURE ON(71) TYPE "TailSection", Comment "$Tail$"
STRUCTURE ON(71) TYPE "String", Comment "Return"
STRUCTURE ON(71) TYPE "Return", Comment "Return"
PPRINT "#Return:[Rule 1]=Z10; X; Z; C" ! toolpath tag
RAPID N 10000
MULTIGOTO COUNT 1, MACHINE, Z 10, …
STRUCTURE OFF(72) TYPE "Return", Comment "Return"
STRUCTURE OFF(72) TYPE "String", Comment "Return"
PPFUN ENDTECHINFO(59), 250, 30.703, 0, 0, 979.484, … ! операция заканчивается
STRUCTURE OFF(72) TYPE "TailSection", Comment "$Tail$"
… (Files 4…14 — остальные операции, каждая той же формы Header / Body / Tail — опущены)
File 15 — TechOperation "2D contouring" (фрезерование)
STRUCTURE ON(71) TYPE "HeaderSection", Comment "$Header$"
PPFUN TECHINFO(58), 250, -47.996, -289.976, -16, … ! операция начинается
STRUCTURE ON(71) TYPE "String", Comment "Header"
COMMENT "2D contouring" ! имя операции
ORIGIN X 0, Y 0, Z 274, PPFUN 0, N 55, … ! базовая система координат (G55)
LOADTL N 1, ToolChanged 1, …, D 8, L 40, … ! инструмент
COMMENT "@Cylindrical mill L40, D8" ! имя инструмента (начинается с @)
PLANE XY ! рабочая плоскость
SPINDL ON(71), NO 10544.01, K 0, MODE RPM(0) ! шпиндель
CUTCOM ON(71), LENGTH(9)1, …, LEFT(8) ! коррекция инструмента
FROM COUNT 10, MACHINE, X 100, Y 0, Z 500, … ! начальное положение (без перемещения)
STRUCTURE OFF(72) TYPE "String", Comment "Header"
STRUCTURE ON(71) TYPE "String", Comment "Approach"
STRUCTURE ON(71) TYPE "Approach", Comment "Approach"
PPRINT "#Approach:[Rule 1]=C; Z10; X; Z" ! toolpath tag
RAPID N 10000
AXESBRAKE COUNT 1, AxisCPos(3) OFF(72)
MULTIGOTO COUNT 1, MACHINE, C 90, …
MULTIGOTO COUNT 1, MACHINE, Z 10, …
MULTIGOTO COUNT 1, MACHINE, X -28.715, …
MULTIGOTO COUNT 1, MACHINE, Z 0, …
MULTIGOTO COUNT 1, MACHINE, Y -1.804, …
STRUCTURE OFF(72) TYPE "Approach", Comment "Approach"
STRUCTURE OFF(72) TYPE "String", Comment "Approach"
STRUCTURE OFF(72) TYPE "HeaderSection", Comment "$Header$"
STRUCTURE ON(71) TYPE "BodySection", Comment "$Body$"
STRUCTURE ON(71) TYPE "String", Comment "Level: -4" ! первый уровень по глубине
STRUCTURE ON(71) TYPE "String", Comment "Offset 2" ! первый проход на этом уровне
RAPID N 10000
GOTO X -28.715, Y -1.804, Z 0
GOTO X -28.715, Y -1.804, Z -3
AXESBRAKE COUNT 1, AxisCPos(3) ON(71)
COOLNT ON(71), N 1, #1
FEDRAT F 100, MMPM(315), K 256
GOTO X -28.715, Y -1.804, Z -4
FEDRAT F 100, MMPM(315), K 4
GOTO X -28.716, Y -3.004, Z -4
GOTO X -32.716, Y -3.001, Z -4
FEDRAT F 200, MMPM(315), K 0
GOTO X -39.887, Y -2.994, Z -4
CIRCLE XC -0.086, YC -0.024, ZC -4, R -39.911, XE -39.882, YE 3, ZE -4
GOTO X -32.725, Y 3.001, Z -4
…
STRUCTURE OFF(72) TYPE "String", Comment "Offset 2"
STRUCTURE ON(71) TYPE "String", Comment "Offset 1" ! следующий проход — та же форма — опущено
…
STRUCTURE OFF(72) TYPE "String", Comment "Offset 1"
STRUCTURE ON(71) TYPE "String", Comment "Offset 0"
…
STRUCTURE OFF(72) TYPE "String", Comment "Offset 0"
STRUCTURE OFF(72) TYPE "String", Comment "Level: -4"
… (уровни -8, -12, -16 — те же проходы на каждой глубине; затем весь набор повторяется после
каждого поворота оси C: MULTIGOTO C 180 / 270 / 360 — много повторяющихся проходов, опущено)
STRUCTURE OFF(72) TYPE "BodySection", Comment "$Body$"
STRUCTURE ON(71) TYPE "TailSection", Comment "$Tail$"
COOLNT OFF(72), N 1, #1
STRUCTURE ON(71) TYPE "String", Comment "Return"
STRUCTURE ON(71) TYPE "Return", Comment "Return"
PPRINT "#Return:[Rule 1]=Z10; X; Z; C" ! toolpath tag
RAPID N 10000
MULTIGOTO COUNT 1, MACHINE, Z 10, …
GOHOME COUNT 1, MACHINE, X 100, …
GOHOME COUNT 1, MACHINE, Z 500, …
GOHOME COUNT 1, MACHINE, Y 0, …
STRUCTURE OFF(72) TYPE "Return", Comment "Return"
STRUCTURE OFF(72) TYPE "String", Comment "Return"
CUTCOM OFF(72), LENGTH(9)0, … ! коррекция выключается
SPINDL OFF(72), NO 0, K 0 ! шпиндель выключается
PPFUN ENDTECHINFO(59), 250, -47.996, -289.976, … ! операция заканчивается
STRUCTURE OFF(72) TYPE "TailSection", Comment "$Tail$"
Модель доступа
Параметры команды бывают двух видов:
- Числовые параметры — плоский массив вещественных чисел, адресуемых по позиции. Это исходная, унаследованная форма.
- Именованные / структурированные параметры — типизированные значения, адресуемые по имени, возможно вложенные (объекты, массивы). Это современная форма, применяемая в новых командах (и доступная для большинства параметров старых). Модель именования — та же, что описана в XML-свойства — доступ из кода.
В таблице сведены способы их чтения. Подробности и примеры даются для каждой команды в справочнике команд; шаблон доступа всегда один и тот же.
| Форма доступа | sppx | .NET | Примечания |
|---|---|---|---|
| Числовой массив, по индексу | cld[i] |
cld[i] |
Общее для обеих. Массив заполняется параметрами текущей команды перед её обработкой. |
| Числовой элемент, по короткому имени | cld.X, cld.N … |
— | Только sppx. Плоский дублирующий доступ к некоторым числовым элементам. В .NET недоступен. |
| Именованный / структурированный, по имени | cmd.Str["Name"], cmd.Flt["Name"], cmd.Int["Name"], cmd.Ptr["Name"] |
cmd.Str["Name"], cmd.Flt["Name"], cmd.Int["Name"], cmd.Ptr["Name"] |
Одинаковая грамматика в обеих (пути через точку, ключи массива Name(Key), цепочки указателей). См. XML-свойства — доступ из кода. |
| По стабильному коду параметра | CmdPrm.Flt[code] |
cmdPrm.Flt[code] |
Используется расширенными / измерительными циклами, где параметры адресуются фиксированным кодом, чтобы их порядок мог меняться без поломки постпроцессоров. |
| Строго типизированная обёртка команды | — | cmd.<Property> (напр. cmd.R, cmd.IsCSS) |
Только .NET. Каждый обработчик команды получает типизированный объект cmd с именованными документированными свойствами. Современный способ для .NET; см. справочник API. |
sppx
В sppx числовые параметры текущей команды помещаются в предопределённый массив cld до запуска программы
команды, поэтому cld[1], cld[2], … адресуют их по позиции; у некоторых элементов есть также короткие
имена-члены, например cld.X. Структурированные параметры читаются по имени оператором cmd
(cmd.Str["…"], cmd.Flt["…"], cmd.Ptr["…"]), а расширенные циклы используют доступ по коду
CmdPrm.Flt[code]. Эти средства доступа описаны в разделе
Функции и операторы доступа к CLData.
.NET
В .NET постпроцессор реализует типизированный обработчик на каждую команду, например
OnSpindle(ICLDSpindleCommand cmd, CLDArray cld). Внутри обработчика можно:
- использовать строго типизированный объект
cmd— именованные документированные свойства, такие какcmd.IsCSS,cmd.RPMValue,cmd.R,cmd.Center(это рекомендуемая, современная форма); - читать именованные / структурированные параметры через
cmd.Str["Name"],cmd.Flt["Name"]и т. д.; - читать «сырой» числовой массив
cld[i](те же индексы, что и в sppx); - использовать доступ по коду
cmdPrm.Flt[code]для расширенных циклов.
Типизированные интерфейсы команд (ICLD…Command) и все их свойства описаны в справочнике API .NET SDK
— см. Справочные материалы .NET.
Поиск команд (обход CLData)
Помимо текущей команды, постпроцессор может просматривать другие команды файла (заглядывать вперёд/назад, находить следующую команду заданного типа, читать контекст проекта / операции).
- sppx:
CurCode,NextCode,CodeOfCmd,GetCld,FindCld/GFindCld, операторCLDFileи операторProject. - .NET:
CurrentFile.Cmd[i],CurrentFile.FindCommand(...),CurrentFile.IndexOfCmd(...),CurrentCmd.Next/Prev/NextMotion/PrevMotion,CurrentOperation.*,CLDProject.*.
Обе формы описаны рядом в разделе Функции и операторы доступа к CLData.
Справочник команд
Каждая команда описана один раз для обеих подсистем (общие параметры → доступ из sppx → доступ из .NET). Полный список — в разделе Описание технологических команд.
Информация о проекте в CLData
Статические данные уровня проекта, встроенные в CLData (схема станка, детали, заготовки, установочные позиции, системы координат, единицы измерения и т. д.), описаны в разделе Информация о проекте в CLData.
В этом разделе
- Функции и операторы доступа к CLData — чтение CLData из кода постпроцессора
- Информация о проекте в CLData — статические данные уровня проекта в CLData
- Описание технологических команд — список всех команд CLData