Управление вакуумной установкой с ноутбука: open-source система с эмулятором и MCP
После публикаций о напылении рентгеновского зеркала с помощью LLM и локальной Qwen 3.8 в роли оператора возник закономерный вопрос: как испытать агента в управлении вакуумной установкой, не располагая ни оборудованием, ни ПЛК? Для этого мы опубликовали под лицензией Apache-2.0 пакет APS Control Community, в который входят наша рабочая программа управления напылением, физический эмулятор оборудования и MCP-сервер.
Пакет запускается на обычном компьютере с Windows без прав администратора. Доступны три конфигурации: простая камера с двумя магнетронами (Sputter), установка со шлюзом загрузки из предыдущей статьи (ADS) и четырёхкамерный кластер с транспортным роботом (Cluster). Клапанами и рецептами можно управлять вручную через операторский интерфейс или подключить по MCP локальную модель либо Claude Code.
Эмулятор в виде самостоятельного сетевого процесса
Недавно на SE7ENе вышла статья «Эмуляция АСУ ТП», посвящённая отладке самописной программы для бетонного завода без SCADA. В описанном решении Delphi-приложение при сборке переключается директивой {$IF Emulate=True} между обращением к реальному порту ComPort.Write и вызовом Emulator.Send. Вес задаётся ползунком в окне отладки, а задержка шины RS-485 воспроизводится паузой порядка 20 мс на модуль, или 400–1000 мс на цикл опроса. Для отдельного приложения такой подход прост и удобен.
Мы выбрали другую архитектуру и вынесли эмуляцию в независимый сетевой процесс. В управляющей программе нет условной компиляции #if EMULATE: штатные драйверы контроллеров Siemens S7 на порту 102 и периферийных приборов на портах 5025–5033 постоянно используют обычные TCP-сокеты. В лаборатории они соединяются с реальным оборудованием, а на ноутбуке — с локально запущенным эмулятором по адресам 127.0.0.1–127.0.0.5. Для системы управления не имеет значения, отвечает ей стойка с ПЛК или модель, написанная на C#.
Опрос устройств и физическая модель камеры
Отдельный поток для каждой шины
Распространённая ошибка при разработке систем управления — отправлять синхронные запросы к оборудованию в общий пул потоков через Task.Run. Пока приборы отвечают быстро, проблем не возникает. Но если несколько линий зависнут в ожидании сетевого таймаута, свободные потоки иссякнут, а вместе с ними остановятся операторский интерфейс и выполнение рецепта.
В нашей системе каждой шине выделен собственный постоянный поток (LongRunning), который работает без await и Task.Run. Задержка одного контроллера ограничивается его циклом и не затрагивает остальные. Состояния клапанов считываются с ПЛК одним пакетным запросом за такт. Команды оператора и шаги рецепта проходят через планировщик приоритетов и выполняются раньше фонового опроса датчиков. За обновлением цикла наблюдает сторожевой таймер: при потере связи система выдаст аварию, вместо того чтобы продолжать показывать устаревшие значения.
Расчёт вакуума и теплообмена в эмуляторе
Состояние каждой камеры эмулятор определяет по общему балансу газа и тепла. Эффективная скорость откачки квадратично зависит от степени открытия дроссельной заслонки: S_eff = PumpSpeed * (Throttle / 100)^2. Постоянная времени камеры рассчитывается как tau = Volume / S_eff. Если прикрыть заслонку до 25%, откачка замедлится в 16 раз.
Регуляторы расхода газа (MFC) достигают заданного потока с постоянной времени 0,5 с. Нагрев и остывание подложкодержателя рассчитываются по закону излучения Стефана — Больцмана (T4), отдельно от охлаждения стенок камеры. Дожидаться откачки и остывания в реальном времени необязательно: в окне эмулятора модельные часы можно ускорить в десять и более раз относительно штатного режима 1x. Там же можно на лету задать перегрев или отказ любого узла и проверить реакцию защит.
На рисунках 1–3 показан профиль ADS — камера со шлюзом загрузки, четырьмя магнетронами и ионным источником — в процессе напыления многослойного зеркала Ru/C.



Многокамерный кластер с пятью ПЛК
Для многокамерных процессов предусмотрен профиль Cluster (рисунок 4). Вокруг шестигранного модуля с транспортным роботом расположены шлюз загрузки и четыре технологические камеры с шиберными затворами. В первой камере установлены мишени из меди и титана, во второй — из вольфрама, в третьей — из кремния и карбида бора (B4C), в четвёртой находится ещё один медный магнетрон. Для этой конфигурации эмулятор запускает пять независимых виртуальных ПЛК Siemens S7. Чтобы переместить подложку по заданному маршруту, сценарию необходимо согласовать откачку, выравнивание давлений и открытие шиберов между несколькими контроллерами.

Рецепты и предотвращение ошибок
Технологический процесс описывается простым текстовым сценарием внутри XML-файла с расширением .rcpx. Встроенный редактор поддерживает подсветку синтаксиса, а в комплект поставки входят стандартные программы откачки и запуска установки, например SYSTEM_PUMP_OUT и SYSTEM_START. Ниже приведён проверенный в эмуляторе рецепт напыления пятипериодной структуры Ru/C для профиля ADS:
pump SP1 on
valve FL open
valve GVM open
pump TP on
MFC Ar1 40
valve V2 open
pwait 3mT 90
set PSU_C Power 300
power PSU_C on
set PSU_B Power 400
power PSU_B on
loop 5
deposit Ru 25 Home
deposit C 25 Home
endloop
power PSU_C off
power PSU_B off
pwait 0 1
MFC Ar1 0
valve V2 close
Сценарий работает следующим образом: сначала включаются форвакуумный насос SP1 и турбонасос TP, открываются клапаны откачки, через V2 подаётся 40 sccm аргона и система ожидает стабилизации давления на уровне 3 мТорр. Затем на магнетроны подаётся 300 и 400 Вт. В пяти циклах рутений и углерод напыляются поочерёдно по 25 секунд — всего по 125 секунд на каждый материал, или 250 секунд суммарно.
Для чего перед прекращением подачи аргона добавлена команда pwait 0 1? Если пропустить её и сразу выполнить MFC Ar1 0, синтаксис останется корректным, но встроенный анализатор validate_recipe предупредит о проблеме ещё до запуска. При обнулении последнего расходомера камера переходит в дежурный режим Idle, тогда как дроссель продолжает поддерживать рабочее давление 3 мТорр. В режиме Idle допустимо не более 0,0001 Торр, поэтому через 60 секунд установка выдаст тревогу по вакууму. Команда pwait 0 1 предварительно сбрасывает уставку и полностью открывает заслонку.
Помимо проверок рецептов, в системе управления действуют защитные блокировки. Их нельзя обойти ни через редактор, ни сетевыми командами. Так, перед открытием клапана напуска воздуха проверяются восемь условий: автоматика не разрешит его открыть, если открыт шибер турбонасоса или включён форвакуумный байпас. Блокировка по давлению с порогом 750,0 Торр, в свою очередь, не позволит подать высокое напряжение на магнетроны при разгерметизированной камере.
Подключение LLM через MCP и открытый бенчмарк
На том же профиле ADS мы испытывали локальную Qwen 3.8 на видеокарте с 16 ГБ памяти. Вместе с программой управления мы опубликовали универсальный навык оператора aps-operator-skill под лицензией CC-BY-4.0 и расширенный бенчмарк ads-benchmark (ADS-Bench v2.0). Он включает 46 задач: 40 коротких упражнений и 6 сквозных сценариев для всех трёх профилей — Sputter, ADS и Cluster. В их числе и 22 задачи из предыдущей статьи. Теперь в одинаковых условиях можно испытать любую модель или связку с Claude Code.
По умолчанию сетевой доступ для агентов выключен. Скрипт tools\Enable-AgentAccess.ps1 создаёт конфигурацию локального сервера на 127.0.0.1:8026 с TLS, привязкой сертификата и проверкой ключа по SHA-256, а затем выводит готовую команду claude mcp add aps-control … для подключения моста APS.Mcp.exe через stdio.
Семнадцать инструментов MCP распределены по трём уровням доступа:
• Read — просмотр схемы установки и текущих показаний датчиков (describe_machine, describe_hardware, device_snapshot);
• Recipe — проверка сценариев перед запуском, их выполнение и выгрузка логов (validate_recipe, start_recipe, list_runs, fetch_run_files); этот уровень активен по умолчанию;
• Manual — непосредственное управление отдельными узлами (device_command); предоставляется только с флагом -Manual.
Даже при наличии ключа управляющие команды не будут выполняться, пока человек самостоятельно не переведёт пульт в режим Online-Remote. На тестовом стенде для этого предусмотрена переменная окружения APS_DEV_CONTROL_MODE=Remote. В локальном режиме модель может считывать показания и проверять рецепты через validate_recipe, но система не разрешит ей открыть клапан или запустить напыление.
Возможности и ограничения эмулятора
Эмулятор рассчитывает общий баланс газа и тепла в объёме камеры, но не моделирует плазму и трёхмерную газодинамику. Этого достаточно для отладки защитных блокировок, последовательности переключения клапанов, инерционности расходомеров и поведения ИИ-агентов. При этом модель не воспроизводит постепенную выработку мишени магнетрона, дугообразование («прострелы») и дрейф скорости напыления в продолжительной серии процессов. О работе той же системы управления с реальным оборудованием мы рассказали в статье о цифровизации нашей лаборатории и в препринте arXiv:2609.12796.
Установка, конфигурации и первый запуск
Исходный код и установщик доступны в репозитории APS Control Community; актуальный релиз — v1.7.2. Программа устанавливается в профиль пользователя и не требует прав администратора. Интерфейс создан на WinForms, поэтому сборка работает только в Windows и нуждается в .NET 10 Desktop Runtime: базового рантайма без библиотек для настольных приложений недостаточно. Установщик пока не имеет цифровой подписи, поэтому при первом запуске Windows SmartScreen покажет предупреждение.
В папке Configs\ находятся три готовых профиля оборудования с разной сложностью:
|
Профиль |
Конфигурация установки |
Состав эмулятора |
Назначение |
|
Sputter (по умолчанию) |
Одна камера объёмом 200 л, два магнетрона (DC/PDC и RF), время разгона турбонасоса — 120 с |
1 ПЛК S7 и 2 источника питания |
Простой стенд для знакомства с системой |
|
ADS |
Камера со шлюзом загрузки, 4 магнетрона (Si, C, Ru, Co), ионный источник, дроссельная заслонка и вращающийся подложкодержатель |
1 ПЛК S7, 6 источников питания, контроллер дросселя TC1, приводы держателя и заслонки |
Установка, использованная в наших испытаниях LLM |
|
Cluster |
Шестигранный модуль с роботом TM (100 л), шлюз LL (10 л) и четыре камеры C1–C4 объёмом по 30 л |
5 независимых ПЛК S7, 6 источников питания и контроллер робота |
Многокамерный кластер с перемещением подложек |
Для первого запуска откройте APS Emulator Community, выберите профиль через меню File -> Open Project… и оставьте установленным флажок Also point Control at this project. Вручную изменять конфигурационные файлы не потребуется. Затем запустите APS Control Community — программа управления откроется с выбранной установкой. Встроенный редактор рецептов и режим Online-Remote работают без файла лицензии.
Если обнаружите ошибку в профилях или захотите добавить драйвер для своего оборудования, создавайте issue или отправляйте pull request на GitHub.
Почему большинство кошек не любят прикосновения к животу, лапам и хвосту?
Кубик Рубика возвращается на родину: его производство возобновят в Венгрии
Сборка генома из ридов на пангеномном графе с помощью открытого ПО
Как я с помощью ИИ составил семейное древо до XVIII века и опроверг дедову легенду
Три необычных способа измерения расстояний до звёзд: исторический обзор
Квантовый компьютер нового типа на основе вибраций
Пять сценариев будущего сосуществования человека и искусственного интеллекта
Нефть и трубчатые спирали