Обзор проекта
Проект был посвящён Windows-приложению верхнего уровня для управления полупроводниковым технологическим оборудованием. Система на Qt/C++ обменивается данными с регуляторами температуры, игольчатым клапаном, вакуумметрами, контроллерами заслонок и промышленной камерой. SQLite хранит измерения устройств, события команд и метаданные кадров. Требовалось диагностировать разрывы температурных данных, неполное подтверждение команд, снижение частоты камеры и незаметную остановку записи, не прерывая работающую на объекте программу.
Поставка была разделена на две изолированные линии. Линия сопровождения внесла ограниченные обратимые изменения в существующее приложение и сформировала установщик Windows x64. Отдельная линия v2 использовала собственный каталог и AppId для проверки владения последовательными портами, соединениями базы, потоками камеры и выполнением скриптов. Конфигурация и исторические данные были сохранены; программное обеспечение с доступом к оборудованию не запускалось без согласованного оператором безопасного окна.
Состав системы и технологии
| Область | Технология или оборудование | Выполненная работа |
|---|---|---|
| Управляющее приложение | Windows 10/11 x64, Qt 5.12.12, C++, MSVC | Диагностика, стабилизация, Release-сборка и установщик |
| Температура | 10 регуляторов Modbus RTU, 9600 baud | Короткие чтения, последовательные транзакции, ответ записи и чтение SP |
| Клапан и заслонки | EI-BISYNCH и собственные ответы устройств | Разбор протокола, ACK/NAK и проверка состояния |
| Промышленная камера | Galaxy SDK, базовая экспозиция 125 мс | Последний кадр, исправление ACK, watchdog захвата и хранения |
| Данные и скрипты | SQLite, JPEG и технологические скрипты | Один путь записи, отдельные времена, моделирование и границы отказа |
Диагностика на основе данных
Анализ только для чтения охватил около 8,89 часа исторических журналов и баз. На COM5 зарегистрировано 5 168 очисток буфера после превышения 128 байт, а эффективное обновление десяти регуляторов было заметно медленнее настроенного двухсекундного периода. Код показывал, что каждый частый опрос читает около 35 регистров и получает типичный ответ примерно 75 байт. Планирование GUI, медленные пакеты базы и окно ожидания 150 мс повышали вероятность смешения запоздалого ответа со следующим запросом.
Дополнительное сравнение дали две исторические записи камеры с одного компьютера. Базовая версия сохраняла JPEG со скоростью 8,006 FPS, версия с регрессией — 3,919 FPS. В обеих выборках не было соседних полностью одинаковых JPEG. ACK сырого кадра возвращался в очередь рабочего потока камеры; блокирующий захват мог выполниться раньше ACK, и новый кадр регулярно пропускался, пока предыдущий считался ожидающим. Эти числа подтверждают регрессию и её диагностику, но не являются результатом приёмки исправленной версии.
Ограниченное сопровождение существующего приложения
Линия сопровождения сохранила интерфейс, конфигурацию устройств, каталоги данных и точки входа технологических скриптов. Изменяемые файлы резервировались до замены, для архива патча и установщика записывались SHA-256. Установщик сохраняет существующие MBE_Data, Scriptfile и конфигурацию и не запускает приложение автоматически после установки.
- Частое чтение температуры ограничено регистрами PV, SP и Working SP; типичный ответ уменьшен примерно с 75 до 15 байт.
- Запись температуры Sub сопоставляет ответ Modbus
0x06, затем читает SP. Отсутствие ответа или другое значение считается ошибкой. - Захват камеры выполняет рабочий поток; предпросмотр и сырая запись допускают по одному кадру в обработке и выбирают последний кадр.
- Температурные значения в градусах больше не делятся повторно на десять в строке состояния и старом пути управления.
Чтение Ramp Rate из устройства
Ячейка Ramp Rate начинается с --, а не с фиксированного программного значения. Затем приложение читает регистр 0x0023. В устойчивом режиме один регулятор читается каждые три секунды, полный цикл по десяти занимает около 30 секунд. Ramp Rate не включён в частый запрос PV/SP и не увеличивает каждый ответ на шине 9600 baud.
Изменение исправляет источник отображаемого значения: число появляется только после данных устройства. Синхронизацию после изменения на панели требуется проверить с версией 1.0.3 на реальном оборудовании; реализация не выдаётся за завершённую аппаратную приёмку.
Захват и хранение изображений
Предпросмотр и запись используют последний кадр. Если GUI или JPEG-кодировщик временно медленнее захвата, промежуточные кадры заменяются, а очередь событий не растёт без ограничения. ACK сырого кадра непосредственно освобождает атомарный флаг и не ждёт за следующим блокирующим вызовом камеры. Имена файлов и поля базы используют фактическое время захвата; начало и завершение сохранения записываются отдельно.
В 1.0.3 добавлены два watchdog-механизма. Если камера открыта, но сырой кадр не приходит три секунды, захват закрывается и открывается снова с десятисекундной паузой между перезапусками. Если задача записи или интервал от последнего сохранения превышает три секунды, зависшее состояние снимается и выполняется повтор с текущим кадром. Механизм устраняет тихую остановку, но не заменяет проверку драйвера, USB, скорости диска и ошибок базы на объекте.
Изолированная архитектурная линия v2
v2 использует отдельное дерево исходников, AppId и каталог установки и не заменяет работающее старое приложение. По умолчанию она не подключает последовательные порты, не запускает мониторинг, не открывает камеру и не отправляет команды заслонкам при старте. Один физический порт принадлежит одному PortWorker; опрос, команды оператора и скрипта входят в единую приоритетную очередь транзакций.
SQLite имеет одно соединение записи. Измерения и метаданные фиксируются по времени или размеру пакета, исторические запросы используют отдельное соединение только для чтения. Захват, предпросмотр и JPEG-запись разделены. Технологический скрипт движется короткими шагами автомата состояний и прекращает выполнение при ошибке ответа или чтения целевого значения.
Сборка, упаковка и сохранение данных
Версия сопровождения 1.0.3 собрана CMake и MSVC в конфигурации Release x64 и упакована Inno Setup 6.7.3. Размер Release-файла — 1 727 488 байт. Установочная стадия содержит 78 файлов общим объёмом 66 292 772 байта. Проверены Galaxy SDK, библиотеки Qt, драйвер SQLite, VC Runtime и конфигурация; отладочных Qt DLL нет.
Версия установщика — 1.0.3.20260728, размер — 19 884 961 байт. Полные SHA-256 программы, архива патча и установщика сохранены в записи поставки. Установщик не подписан Authenticode, поэтому Windows может показать сообщение о неизвестном издателе.
Доказательства проверки и границы
| Проверка | Зафиксированный результат | Граница |
|---|---|---|
| Историческая диагностика | 8,89 часа; 5 168 очисток COM5 | Подтверждает старую неисправность, не результат исправления |
| Историческое сравнение камеры | База 8,006 FPS; регрессия 3,919 FPS | Для диагностики ACK, не полевой тест 1.0.3 |
| Release сопровождения | Windows x64 сборка и шесть статических проверок | Сборка и путь кода, не аппаратная приёмка |
| CTest сопровождения | Код возврата 0, вывод No tests were found | Зафиксировано отсутствие автоматических тестов |
| Тестовая программа v2 | Полная Debug-сборка; CTest 1/1; 11 групп без оборудования | Протокол, состояние, скрипт, хранение; оборудование не подключено |
| Полевое оборудование | 1.0.3 и v2 не запускались с подключёнными устройствами | Ramp Rate, восстановление, запись Sub и 8 часов ожидают проверки |
Безопасность и план приёмки
После запуска приложение может подключиться к последовательным устройствам и камере и отправить управляющие команды. Поэтому удалённая сессия не запускала новую сборку на неуправляемом рабочем столе и не останавливала существующий процесс. После подтверждения безопасного состояния оператором приёмка должна пройти от мониторинга к отдельным командам, камере, клапану и заслонкам, скриптам и совместной работе.
- Наблюдать 30 минут и вычислить интервалы измерений, долю таймаутов и максимальный разрыв каждого регулятора.
- Записать несколько безопасных целей Sub и сопоставить ответ
0x06, чтение SP, панель устройства и PV. - Зафиксировать экспозицию, разрешение и каталог; измерить FPS захвата, FPS записи, пропуски и сквозную задержку.
- Отключить и восстановить камеру, проверить журнал watchdog, предпросмотр и запись.
- Выполнить восьмичасовую совместную запись до решения о замене старого приложения.
Повторно применимый инженерный подход
Подход подходит для действующих промышленных Windows-приложений, где при доработке требуется сохранить доступность и возможность отката: полупроводниковое и вакуумное оборудование, регулирование температуры, промышленные камеры, многопортовый сбор, лабораторные установки и технологические скрипты. Сначала формируются воспроизводимые доказательства из журналов, баз и протокольных путей; затем по риску выбираются ограниченные изменения или отдельная архитектурная проверка.
Входные данные для похожего проекта
Для первичной оценки обычно нужны протоколы, топология портов, карты регистров, SDK и примеры камеры, исходники и среда сборки, исторические журналы и базы, границы безопасности, способ отката и измеримые цели по периоду выборки, успеху команд, частоте кадров, задержке и непрерывной работе. Статическую диагностику, проверки без оборудования, контроль установщика и план приёмки можно выполнить до доступа к устройствам, но они не заменяют полевую приёмку.
Частые вопросы
Это новая разработка или сопровождение существующей системы?
Использованы обе линии. Сопровождение дало ограниченные изменения и установщик 1.0.3. v2 — отдельная линия для проверки владения потоками, транзакциями и данными и не заменяет старую программу.
Почему новую сборку не запустили через SSH?
Запуск может занять камеру и порты и отправить команды. Без подтверждённого безопасного состояния выполнялись только работа с кодом, сборка, упаковка и статические проверки.
8,006 FPS — это результат после исправления?
Нет. Это историческая база на том же компьютере; 3,919 FPS относится к версии с регрессией. Сравнение использовалось для поиска ошибки ACK. Исправленную версию ещё нужно измерить в заданных условиях.
Проверены ли все функции оборудования?
Нет. В проекте сопровождения автоматические тесты не зарегистрированы. Одна программа v2 покрыла 11 групп проверок протокола, состояния, скрипта и хранения без оборудования. Реальные устройства и длительная работа остаются пунктами приёмки.
Как защищены данные и конфигурация объекта?
Файлы резервировались до изменений, хэши фиксировались, установщик сохраняет данные, скрипты и конфигурацию, а v2 использует отдельные AppId и каталог. Переключение версии зависит от полевой приёмки.

Online
Phone
WeChat
Top