Рабочий цикл .NET
.NET-постпроцессор — это проект на C#, собираемый с SDK постпроцессирования: типизированные обработчики, .csproj и скомпилированная сборка, которую исполняет пакетный генератор. Ассистент работает здесь так же, как в любом проекте на C# — языковой сервис даёт расширение C#, сборку выполняет dotnet, — а специфика постпроцессора сводится к шаблону, файлу настроек и генератору.
Справочник по API — в документации по .NET-постпроцессорам, входные данные — в справочнике CLData.
С чего начинать
Чаще всего не с нуля. Возьмите ближайший из уже существующих постпроцессоров — поставляемый с CAM-системой или написанный ранее для похожего станка или системы ЧПУ, — скопируйте и доработайте. Вы начинаете с кода, который уже работает, и разбираться приходится именно с теми отличиями, которые действительно важны.
Если новый постпроцессор действительно нужен, создайте его в CLData Viewer: CLData viewer → Create new postprocessor → Simple postprocessor…, затем укажите пустую папку — её имя станет именем постпроцессора. Проект создаётся за вас, а из контекстного меню он открывается в VS Code. В документации по .NET-постпроцессорам это описано в разделе «How to prepare the computer to start writing the postprocessors». Просить ассистента создать проект из шаблонов стоит только если вы хотите именно этого — это его работа, а не ваша.
Если вы копируете .NET-постпроцессор в папку с новым именем, переименуйте и файл .csproj, задав ему то же имя. Имя папки и имя .csproj должны совпадать: задача сборки из шаблона берёт путь к проекту из имени папки, а конфигурация отладки — имя сборки из него. Если имена различаются, обе конфигурации ищут несуществующие файлы.
Работайте с ним, открыв в VS Code папку самого постпроцессора: этого ждут языковой сервис C#, сборка и отладчик. Чтобы постоянная памятка и заметки при этом оставались доступны, нужен один приём — он описан в организации рабочего пространства.
В любом случае начинайте с известного состояния:
- Поставьте постпроцессор под контроль версий, прежде чем что-либо менять.
- Соберите его без изменений. Если он не собирается как есть, дальнейшая диагностика бессмысленна.
- Сформируйте им УП и сохраните её как исходный результат для сравнения.
Цикл
- Исследуйте CLData тестового проекта и найдите нужную команду. Инспектор показывает каждую команду и в типизированном .NET-представлении — интерфейс, имя обработчика и значения свойств — и умеет копировать имя параметра в том виде, в котором его вставляют в код C#.
- Найдите типизированный обработчик этой команды. Попросите ассистента перечислить обработчики проекта и открыть нужный.
- Внесите одно небольшое изменение, заранее сформулировав ожидаемый результат в УП. Пользуйтесь именованными типизированными свойствами SDK, а не индексами, там где SDK их предоставляет.
- Соберите проект. Относитесь к предупреждениям как к сведениям о вашем изменении, а не как к шуму, который надо заглушить.
- Запустите на тестовом проекте и прочитайте отчёт о запуске: сформированный файл УП, сообщения, код результата.
- Сравните полученную УП с эталоном и перейдите к проверке и подтверждению результата.
Запуск из VS Code
DotNet Posts выполняет запуск и показывает отчёт в панели Generate NC — так же, как это делает SPPX Tools. Две точки входа покрывают оба случая: Generate NC Program работает с открытым в воркспейсе проектом постпроцессора и сам находит собранную сборку, а Generate NC Program from DLL… принимает скомпилированный постпроцессор, на который вы указываете, без исходников — что позволяет держать несколько постпроцессоров в отдельных вкладках Generate NC и сравнивать их вывод на одном проекте.
Настройка dotnetPosts.autoBuild заставляет расширение собрать проект перед запуском, чтобы правка не проверялась на устаревшей сборке. В панели есть и команды, которыми ассистент работает вместе с вами: перечислить и открыть обработчики, подсветить участок кода, сообщить, где стоит ваш курсор, и открыть текущий CLData в инспекторе.
Запуск постпроцессора, к которому нет исходников
Постпроцессор несёт настройки по умолчанию внутри сборки, и генератор умеет выгрузить их в виде файла Settings.xml рядом с входными данными — именно это делает возможной команду Generate NC Program from DLL…. Пользуйтесь файлом, который сформировал генератор: формат не совпадает с форматом SPPX, поэтому написанный вручную не подойдёт. Если настройки извлечь не удаётся, установленная CAM-система старее, чем требует этот сценарий, — проверьте её версию, прежде чем подозревать постпроцессор.
Запуск считается завершённым только тогда, когда отчёт и результат процесса согласуются. Молча завершившийся прогон не дал ничего, что стоит сравнивать.
Что проверять в коде
Просмотрите обработку null и границ, единицы измерения, зависящее от локали форматирование чисел, кодировку и переводы строк выходного файла, модальное состояние между командами, коррекцию инструмента, преобразования координат и ветви обработки исключений. Сформированный код на C# нужно собрать и прогнать на представительных данных, прежде чем ему доверять: для типизированного API компилятор ловит меньшую долю реальных ошибок, чем кажется.