Разработка интерпретаторов
  • Разработка интерпретаторов
v3.0.3
Search Results for

    Show / Hide Table of Contents

    Рабочий цикл .NET

    Интерпретатор на C# — это проект .NET, который ссылается на пакет SDK интерпретаторов и собирается в библиотеку *.dll; рядом с ней лежит файл настроек *.snci. CAM система или NC Тюнер загружает библиотеку и вызывает её при моделировании УП. Это путь по умолчанию: ассистент выбирает его для каждого нового интерпретатора, если вы не попросили иного.

    Как создать интерпретатор из шаблона, описано в разделе Разработка собственного интерпретатора на (.NET) C#, как запустить его под отладчиком — в отладке интерпретатора в Visual Studio Code. Подробности для ассистента — в навыке develop-dotnet-interpreter.

    С чего начинать

    Чаще всего не с нуля. Если есть интерпретатор для той же или похожей стойки, поведение которого проверено на настоящих программах, — скопируйте его и доработайте. Копии нужны новые идентификаторы: GUID, который возвращает GetIdentifier (он же LibraryID в файле *.snci), и GUID в поле ID. Два интерпретатора с одинаковыми идентификаторами CAM система не различает.

    Если нужен новый, создайте его пунктом Создать интерпретатор УП в списке Расширения CAM системы или пунктом Управление интерпретаторами в NC Тюнере — оба открывают одно и то же окно Создать интерпретатор УП (создатель интерпретатора). Шаблон, из которого создаётся интерпретатор, рассчитан на одно семейство стоек; ассистент проверяет и исправляет то, чего создатель интерпретатора не делает сам: заполняет ID в файле *.snci, ставит выпущенную версию пакета SDK, убирает обработчики слов, которые на вашей стойке значат другое. У дочернего интерпретатора он исправляет и ссылку на родителя: ParentID должен совпадать с ID родителя, а ParentFileName — называть файл *.snci родителя.

    Интерпретатор может наследовать другой — см. Наследование интерпретатора. Прежде чем брать поставляемый интерпретатор родителем, проверьте его назначение в перечне интерпретаторов: у некоторых указано «Только для импорта траектории» — они не связывают кадры УП с движениями.

    В любом случае начинайте с известного состояния:

    1. Поставьте интерпретатор под контроль версий, прежде чем что-либо менять.
    2. Соберите его без изменений. Если он не собирается как есть, дальнейшая диагностика бессмысленна.
    3. Прогоните через него все ваши УП и сохраните результат как исходный для сравнения.

    Версии продукта

    У каждой версии продукта своя версия .NET: СПРУТКАМ 20 и NC Тюнер 3 работают на .NET 10, СПРУТКАМ 19 и NC Тюнер 2 — на .NET 8.

    Интерпретатор ссылается на пакет SprutTechnology.NCInterpreterSDK.Net. Его версию ассистент определяет так:

    1. Читает, с какой версией пакета собран установленный продукт: файл Bin64\STNCInterpreterSDKProject.stbuildresult.json, раздел build_results.versions. В установке NC Тюнера этого файла может не быть — тогда версию берут из CAM системы той же версии (NC Тюнеру 3 соответствует СПРУТКАМ 20, NC Тюнеру 2 — СПРУТКАМ 19). Если файл в NC Тюнере есть, номер в нём задаёт сборка NC Тюнера, которая пакеты SDK не публикует, поэтому пакета с точно таким номером в источнике может не быть.
    2. Ставит самую новую выпущенную версию пакета (без -dev, -rc и подобных окончаний) с тем же основным номером и не новее версии из шага 1. Для NC Тюнера это номер из его файла, а если файла нет — из файла CAM системы той же версии. Номер из файла NC Тюнера служит только верхней границей.

    Выпущенные пакеты лежат в публичном источнике пакетов производителя https://nexus.sprut.ru/repository/master/index.json. Подключить его можно командой:

    dotnet nuget add source "https://nexus.sprut.ru/repository/master/index.json" -n "sprut-master-feed"
    

    Поиск по источнику может показывать устаревшую «последнюю» версию: смотрите список версий самого пакета. Версию, с которой собиралась ночная или тестовая сборка продукта, заказчик скачать не может, поэтому в проект, который уходит с вашего компьютера, она не попадает.

    Если интерпретатор должен работать в нескольких версиях продукта, один проект собирается для каждой из них; проверять его нужно в каждой.

    Цикл

    1. Сформулируйте задачу как видимую разницу в моделировании: какая программа, какой кадр, что должно произойти.
    2. Попросите ассистента найти место, где интерпретатор читает это слово, и объяснить, что он делает сейчас.
    3. Решите вместе с ним, что это за изменение:
      • вариация — другое имя оси, M-функция станка, слово без влияния на траекторию. Её место — файл InterpreterSettings.ini рядом с библиотекой, а не код: тогда следующий такой случай инженер поддержки решит без сборки. Первый раз ключ настройки добавляется в код, дальше это настройка;
      • новое поведение — цикл, фрейм, режим подачи. Это изменение кода, в файле той роли, к которой оно относится;
      • ограничение ядра или SDK — нужного вызова нет. Ассистент описывает обход и его пределы и записывает, что пришлось бы изменить в продукте.
    4. Внесите одно небольшое изменение и соберите проект. Предупреждения сборки — сведения о вашем изменении, а не шум.
    5. Прогоните все УП и сравните с предыдущим результатом — см. Проверка и подтверждение результата.

    Отладка

    Клавиша F5 в Visual Studio Code собирает интерпретатор и запускает конфигурацию, выбранную на панели Run and Debug: Launch CAM — CAM систему, Launch Tuner — NC Тюнер; точка останова срабатывает, когда моделируется УП. Перед отладкой включите журнал, как описано в расширенной настройке, — иначе в журнале не будет ни сообщений ядра о прочитанных словах, ни строк, которые пишет интерпретатор.

    Чтобы смоделировать программу, создайте операцию на основе текста УП, вставьте текст программы, выберите интерпретатор в поле Файл интерпретатора на вкладке Стратегия параметров операции и рассчитайте операцию.

    Сохраняйте сборку и отладку такими, какими их сделал шаблон: коллега должен суметь открыть папку, нажать F5 и остановиться на точке останова. Ассистент не заменяет их своими скриптами и переменными среды.

    Что проверять в коде

    • Изменения содержат то, о чём просили, и ничего больше: ни переформатирования, ни посторонних переписываний.
    • Концы строк и кодировка файлов шаблона сохранены — иначе история показывает изменённой каждую строку.
    • Числа в программе читаются независимо от языка Windows: точка — всегда десятичный разделитель.
    • Состояние интерпретатора хранится в его объекте, а не в статических полях: CAM система создаёт новый экземпляр на каждый расчёт операции, отдельные — для родителя и для контура цикла, и статическое поле у них не общее; NC Тюнер, наоборот, держит один экземпляр на канал — от первой операции канала до последней, — и модальное состояние и статическое поле переходят из операции в операцию: например, G0 из конца одной операции действует в начале следующей.
    • Слово, которое интерпретатор не моделирует, не исчезает молча: оно либо значится как читаемое без влияния на траекторию, либо даёт одно предупреждение на программу, понятное оператору станка.

    Правила, которые не зависят от ядра, — разбор чисел и выражений, параметры циклов, правила для осей и шпинделей, чтение файла настроек — ассистент может покрыть модульными тестами. Тесты дополняют прогон настоящих программ, но не заменяют его.

    In this article