Разработка постпроцессоров
  • Разработка постпроцессоров
v20.0.1
Search Results for

    Show / Hide Table of Contents

    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
    In this article