$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
После выполнения описанного выше рабочего процесса доступ к эксперименту с вентилятором и эксперименту по ПИД-регулированию положения двигателя постоянного тока можно получить через автоматически сгенерированный веб-интерфейс. Об успешном результате свидетельствуют три наблюдения. Во-первых, веб-страница автоматически создает элементы управления вводом и поля отображения вывода в соответствии с метаданными переменных, возвращаемыми сервером RIP. Во-вторых, когда пользователь изменяет входную переменную на веб-странице, измененное значение записывается в VI бэкенда LabVIEW через интерфейс RIP. В-третьих, выходные переменные, вычисленные VI бэкенда, возвращаются через RIP и обновляются на веб-странице в режиме реального времени. Для эксперимента с вентилятором после ввода http://localhost:8090/fan в браузере страница автоматически генерирует элементы управления вводом и поля вывода на основе метаданных RIP, как показано на Рисунке 7. Сторона ввода включает Enable, PWM, Load, Tau, KMaxRPM и Disturbance, в то время как на стороне вывода отображаются SpeedRPM, TimeS, SteadyRPM, SpeedNorm, CurrentA и PowerW. При нормальной работе значение TimeS непрерывно увеличивается, что указывает на выполнение бэкенда fengshan.vi. При увеличении PWM соответствующие значения SpeedRPM и SteadyRPM также растут. При увеличении Load скорость вентилятора снижается, так как load уменьшает установившуюся скорость вращения. При регулировке Disturbance можно наблюдать соответствующие изменения в SpeedRPM, CurrentA и PowerW. Эти наблюдения подтверждают, что входные данные с веб-стороны корректно передаются в бэкенд LabVIEW, а вычисленные выходные данные возвращаются на фронтенд через RIP.
Для эксперимента по ПИД-регулированию положения двигателя постоянного тока после ввода адреса http://localhost:8090/motor в браузере страница автоматически генерирует соответствующие элементы управления и поля вывода на основе метаданных RIP, как показано на рисунке 12. Входные переменные включают Setpoint, Kc, Ti, Td, Disturbance и управление Reset, а выходные переменные включают Position, Voltage, Time и Measured angular velocity. При изменении Setpoint параметр Position реагирует на новое целевое значение. При настройке ПИД-параметров Kc, Ti и Td соответствующим образом изменяются выходной отклик, управляющее voltage и measured angular velocity, что указывает на корректную запись значений параметров, введенных на веб-странице, в серверную модель LabVIEW и их участие в вычислениях системы управления. При активации управления Reset переменные модели возвращаются в исходные состояния согласно логике сброса.
Состояния сбоев на стороне браузера и состояния связи показаны на Рисунке 13, Рисунке 14, Рисунке 15. На Рисунке 13 представлен случай неудачного доступа через браузер, при котором Caddy не запущен. Браузер пытается получить доступ по адресу http://localhost:8090/motor, но отображает сообщение ERR_CONNECTION_REFUSED, что указывает на недоступность локального прокси-сервиса или на то, что он не прослушивает выбранный порт доступа. На Рисунке 14 показан сбой связи RIP POST после загрузки страницы. В этом случае в консоли браузера отображается ошибка 502 Bad Gateway для запроса RIP POST, что означает, что фронтенд достиг адреса прокси, но запрос не может быть успешно перенаправлен в бэкенд RIP WebService или обработан им. Напротив, на Рисунке 15 показано нормальное состояние связи на стороне браузера. Инструменты разработчика браузера демонстрируют успешную загрузку страницы, запросы RIP POST и активный запрос SSE с expId=fan, что указывает на взаимодействие веб-фронтенда с RIP WebService через прокси Caddy и получение обновлений в реальном времени через канал SSE.
В совокупности успешные результаты работы вентилятора и двигателя, а также результаты диагностики на стороне браузера демонстрируют, что один и тот же рабочий процесс автоматической генерации пользовательского интерфейса на основе метаданных может быть воспроизведен для двух различных экспериментов в LabVIEW. Эти результаты также предоставляют наблюдаемые критерии для разграничения успешной связи и типичных сбоев развертывания, в то время как соответствующие процедуры поиска и устранения неисправностей обсуждаются в разделе «Обсуждение».

Рисунок 1: Общая структура экспериментальной системы. Система состоит из серверной части LabVIEW VI, сервера RIP, прокси-сервера Caddy и автоматически сгенерированного веб-интерфейса. LabVIEW VI предоставляет переменные модели, сервер RIP считывает метаданные VI и значения переменных, Caddy унифицирует путь доступа и решает проблему кросс-доменного доступа, а веб-интерфейс автоматически генерирует элементы управления. Название и логотип Caddy указаны только для идентификации компонента веб-сервера/прокси Caddy, используемого в рабочем процессе. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 2: Передняя панель VI вентилятора. Передняя панель содержит органы управления вводом для Enable, PWM, Load, Tau, KMaxRPM и Disturbance, а также индикаторы вывода для SpeedRPM, SteadyRPM, TimeS, SpeedNorm, CurrentA и PowerW. Данный скриншот был сделан с передней панели fengshan.vi в LabVIEW 2026 в локальной экспериментальной среде авторов. Сторонние пользовательские данные или конфиденциальная информация отсутствуют. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 3: Блок-схема VI вентилятора. Модель вентилятора реализована с использованием цикла While Loop, сдвиговых регистров (Shift Registers), логики разрешения Enable, узла формул (Formula Node) и выходных индикаторов. Данный скриншот был сделан с блок-схемы fengshan.vi в LabVIEW 2026 в собственной локальной экспериментальной среде авторов. Сторонние пользовательские данные или конфиденциальная информация не включены. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 4: Страница конфигурации fan.vi. Эксперимент с вентилятором зарегистрирован в RIP Configuration с указанием названия эксперимента fan, фактического пути к VI, ключевых слов, описания и частоты дискретизации. Данный скриншот был сделан в интерфейсе RIP Configuration, используемом с LabVIEW 2026 и RIP WebService в локальной экспериментальной среде авторов. Сторонние пользовательские данные или конфиденциальная информация отсутствуют. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 5: Настройки ID эксперимента и логика генерации пользовательского интерфейса на основе метаданных в XHTML-файлах фронтенда. Скриншоты XHTML-кода были сделаны из файлов Fan_Automatic_UI.xhtml и Motor_Automatic_UI.xhtml, открытых в Visual Studio Code. Страницы для вентилятора и двигателя используют одну и ту же логику чтения метаданных и генерации элементов управления; изменяется только ID эксперимента для соответствия соответствующему полю Name в RIP Configuration. Скриншоты XHTML-кода были сделаны из файлов Fan_Automatic_UI.xhtml и Motor_Automatic_UI.xhtml, открытых в Visual Studio Code в локальной среде разработки авторов. Файлы кода были подготовлены авторами специально для данного протокола. Сторонние пользовательские данные или конфиденциальная информация отсутствуют. Нажмите здесь, чтобы просмотреть этот рисунок в большем размере.

Рисунок 6: Конфигурация Caddyfile. В Caddyfile определяется порт локального прокси-доступа, задается корневой каталог фронтенда, перенаправляются маршруты /fan и /motor на соответствующие XHTML-файлы, а запросы /RIP/SSE* и /RIP* передаются через обратный прокси на порт LabVIEW/RIP WebService. Скриншот конфигурации Caddyfile был сделан из файла Caddyfile, открытого в Visual Studio Code в локальной среде разработки авторов. Caddyfile был подготовлен авторами для настройки Caddy в качестве локального веб-сервера и обратного прокси-сервера. Сторонние пользовательские данные или конфиденциальная информация отсутствуют. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 7: Веб-интерфейс страницы fan.vi. Скриншот данного веб-интерфейса был сделан авторами с локально развернутой веб-страницы управления вентилятором с использованием браузера Mozilla Firefox. Фронтенд-страница автоматически генерирует элементы управления вводом и дисплеи вывода на основе метаданных переменных, возвращаемых сервером RIP. Скриншот данного веб-интерфейса был сделан авторами с локально развернутой веб-страницы управления вентилятором с использованием браузера Mozilla Firefox. Отображаемые элементы управления и поля вывода были сгенерированы из метаданных RIP в локальной экспериментальной среде авторов. Данные сторонних пользователей или конфиденциальная информация не включены. Пожалуйста, нажмите здесь, чтобы просмотреть этот рисунок в большем размере.

Рисунок 8: Передняя панель VI двигателя. На передней панели расположены элементы управления Setpoint, Kc, Ti, Td, Disturbance и Reset, а также индикаторы Position, Voltage, Time и Measured angular velocity. Данный скриншот был сделан с передней панели Motor.vi в LabVIEW 2026 в локальной экспериментальной среде авторов. Пользовательские данные третьих лиц или конфиденциальная информация отсутствуют. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 9: Схема модели ПИД-регулирования положения двигателя постоянного тока. На схеме показан путь сигнала от ошибки уставки, ПИД-регулятора, ограничения напряжения, суперпозиции возмущений, электрической динамики, механической динамики и обновления положения до обратной связи. Пожалуйста, нажмите здесь, чтобы просмотреть этот рисунок в большем размере.

Рисунок 10: Блок-схема VI двигателя. Модель двигателя реализована с помощью цикла While, регистров сдвига, формульного узла, логики синхронизации и выходных индикаторов. Данный скриншот был получен с блок-схемы Motor.vi в LabVIEW 2026 в локальной экспериментальной среде авторов. Пользовательские данные третьих лиц или конфиденциальная информация отсутствуют. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 11: Страница конфигурации Motor.vi. Эксперимент с двигателем зарегистрирован в RIP Configuration с именем эксперимента Motor, фактическим путем к VI, ключевыми словами, описанием и частотой дискретизации. Данный скриншот был сделан в интерфейсе RIP Configuration, используемом с LabVIEW 2026 и RIP WebService в локальной экспериментальной среде авторов. Сторонние пользовательские данные или конфиденциальная информация не представлены. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 12: Веб-интерфейс Motor.vi. На главной странице автоматически создаются элементы управления вводом и дисплеи вывода для эксперимента по ПИД-регулированию положения двигателя постоянного тока. Данный скриншот веб-интерфейса был получен с локально развернутой веб-страницы двигателя авторов с помощью браузера Mozilla Firefox. Отображаемые элементы управления и поля вывода были созданы на основе метаданных RIP в локальной экспериментальной среде авторов. Сторонние пользовательские данные или конфиденциальная информация отсутствуют. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 13: Ошибка доступа через браузер при неактивном Caddy. Когда Caddy не запущен, проксируемый локальный адрес http://localhost:8090/motor недоступен, и браузер отображает сообщение ERR_CONNECTION_REFUSED. Данный симптом указывает на то, что локальная прокси-служба Caddy недоступна или не прослушивает выбранный порт доступа. Этот скриншот браузера был сделан с помощью Mozilla Firefox в собственной локальной тестовой среде авторов и демонстрирует состояние ошибки доступа при неработающем локальном прокси-сервере Caddy. Сторонние пользовательские данные или конфиденциальная информация отсутствуют. Пожалуйста, нажмите здесь, чтобы просмотреть этот рисунок в большем размере.

Рисунок 14: Сбой связи RIP POST после загрузки страницы. В консоли браузера отображается ошибка 502 Bad Gateway для запроса RIP POST. Этот результат указывает на то, что веб-страница достигла адреса прокси-сервера Caddy, но запрос не может быть успешно перенаправлен в бэкенд RIP WebService или обработан им. Данный скриншот консоли браузера был сделан с помощью Mozilla Firefox Developer Tools в собственной локальной среде развертывания авторов и демонстрирует сбой связи RIP POST 502 Bad Gateway. Сторонние пользовательские данные или конфиденциальная информация отсутствуют. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 15: Статус связи на стороне браузера при нормальном функционировании. Инструменты разработчика браузера демонстрируют успешную загрузку страницы, RIP POST-запросы и активный SSE-запрос с expId=fan. Эти запросы указывают на то, что веб-интерфейс взаимодействует с RIP WebService через прокси-сервер Caddy и получает обновления в режиме реального времени через канал SSE. Данный скриншот инструментов разработчика браузера был сделан с помощью Mozilla Firefox в собственной локальной среде развертывания авторов и демонстрирует нормальную связь по протоколам RIP POST и SSE. Сторонние пользовательские данные или конфиденциальная информация отсутствуют. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 16: Одиночный репрезентативный пример наблюдения за ресурсами на уровне консоли браузера и процессов для эксперимента с вентилятором. Скриншот был сделан во время локального тестового эксперимента с вентилятором. В консоли отображаются время запроса/ответа метаданных, количество переменных метаданных, время генерации пользовательского интерфейса на основе метаданных, время открытия соединения SSE и полученные данные SSE. Окно диспетчера задач показывает значения загрузки ЦПУ и памяти на уровне процессов для браузера и процессов LabVIEW в момент захвата. Эти значения представляют собой описательные наблюдения в ходе данного отдельного теста и не являются воспроизводимыми измерениями производительности или статистическим эталоном. Данный скриншот был сделан с помощью инструментов разработчика Mozilla Firefox и диспетчера задач Windows в собственной локальной тестовой среде авторов. Mozilla Firefox использовался для записи вывода консоли браузера, а диспетчер задач Windows — для наблюдения за использованием ЦПУ и памяти процессами браузера и LabVIEW. Сторонние пользовательские данные или конфиденциальная информация отсутствуют. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.

Рисунок 17: Одновременный доступ к одной и той же веб-странице на базе RIP из браузера настольного компьютера и мобильного браузера. Страница эксперимента с вентилятором открыта одновременно на ПК и мобильных устройствах, и оба клиента отображают автоматически созданные элементы управления и выходные переменные. Доступ к веб-странице на настольном компьютере был осуществлен через Mozilla Firefox, а к мобильной веб-странице — через мобильный браузер в той же локальной сети. Снимки экрана были сделаны в собственной локальной тестовой среде авторов. Сторонние пользовательские данные или конфиденциальная информация не included. Пожалуйста, нажмите здесь, чтобы просмотреть увеличенную версию этого рисунка.
| Имя переменной | Тип данных | Вход/Выход | Физический смысл | Роль в модели | Диапазон/Настройка |
| Enable | Boolean | Вход | Переключатель работы вентилятора | Определяет, получает ли модель входной сигнал ШИМ. Если True, u = ШИМ; если False, u = 0. | True / False |
| PWM | DBL | Вход | Вход управления | Определяет базовую интенсивность привода вентилятора и является основным входом, используемым для расчета установившейся скорости SteadyRPM. | 0-1, шаг 0,01 |
| Load | DBL | Вход | Коэффициент нагрузки | Описывает ослабляющее влияние нагрузки на установившуюся скорость. При увеличении Load установившаяся скорость снижается. | 0-1, шаг 0,01 |
| Tau | DBL | Вход | Постоянная времени отклика | Определяет, насколько быстро скорость вентилятора приближается к установившейся скорости из предыдущего состояния. | 0,1-5, шаг 0,1 |
| KMaxRPM | DBL | Вход | Максимальная скорость | Задает максимальную скорость, допустимую моделью; используется для ограничения и нормирования скорости. | 500-6000, шаг 100 |
| Disturbance | DBL | Вход | Вход возмущения | Представляет влияние внешнего возмущения или колебаний нагрузки на установившуюся скорость, ток и мощность. | 0-1, шаг 0,1 |
| SpeedRPM | DBL | Выход | Фактическая скорость | Представляет текущую выходную скорость вентилятора и обновляется посредством инерционной динамики первого порядка. | Рассчитывается моделью |
| SteadyRPM | DBL | Выход | Установившаяся скорость | Представляет теоретическую установившуюся скорость при текущих входных условиях. | Рассчитывается моделью |
| TimeS | DBL | Выход | Время работы | Представляет непрерывное время работы модели. | Рассчитывается моделью |
| SpeedNorm | DBL | Выход | Нормированная скорость | Представляет отношение SpeedRPM к KMaxRPM. | 0-1 или рассчитывается моделью |
| CurrentA | DBL | Выход | Ток | Представляет расчетный ток модели, который изменяется в зависимости от входного сигнала управления и входного возмущения. | Рассчитывается моделью |
| PowerW | DBL | Выход | Мощность | Представляет расчетную мощность модели, вычисляемую на основе константы напряжения и тока. | Рассчитывается моделью |
| Setpoint | DBL | Вход | Заданное положение | Задает положение, которого должен достичь двигатель, и вместе с фактическим положением Position формирует ошибку e. | -3-3, шаг 0,1 |
| Kc | DBL | Вход | Пропорциональный коэффициент | Регулирует силу отклика ПИД-регулятора на ошибку. | 0-10, шаг 0,1 |
| Ti | DBL | Вход | Интегральное время | Регулирует интегральное действие ПИД-регулятора и используется для уменьшения статической ошибки. | 0-10, шаг 0,1 |
| Td | DBL | Вход | Дифференциальное время | Регулирует дифференциальное действие ПИД-регулятора; используется для подавления слишком резких изменений ошибки и улучшения динамического отклика. | 0-5, шаг 0,1 |
| Disturbance | DBL | Вход | Вход возмущения | Представляет внешнее возмущение, накладываемое на вход двигателя и воздействующее на модель двигателя совместно с управляющим напряжением. | 0-10, шаг 0,1 |
| Reset control | Boolean | Вход | Сброс управления | Инициирует очистку состояния модели, чтобы положение, угловая скорость, ток, ошибка и интегральный член вернулись к своим начальным значениям. | True / False |
| Position | DBL | Выход | Фактическое положение | Представляет текущее угловое положение двигателя и служит переменной обратной связи для ПИД-регулирования. | Рассчитывается моделью |
| Voltage | DBL | Выход | Управляющее напряжение | Представляет выход ПИД-регулятора после ограничения напряжения и воздействует на вход двигателя. | Рассчитывается моделью; ограничено от -24 до 24 V |
| Time | DBL | Выход | Время работы | Представляет непрерывное время работы модели двигателя. | Рассчитывается моделью |
| Measured angular velocity | DBL | Выход | Измеренная угловая скорость | Представляет текущую угловую скорость двигателя и является выходным параметром механического состояния двигателя. | Рассчитывается моделью |
Таблица 1: Входные и выходные переменные, используемые в примерах с вентилятором и двигателем постоянного тока. В таблице указаны название каждой переменной, тип данных, роль (вход/выход), физический смысл, рекомендуемый диапазон и шаг.
| Параметр | Значение | Физический смысл | Роль в модели |
| R | 1 | Сопротивление якоря | Представляет собой член сопротивления в цепи якоря двигателя и определяет падение напряжения R × im в уравнении тока. |
| L | 0.5 | Индуктивность якоря | Представляет индуктивность цепи якоря и определяет скорость изменения тока. Большее значение L приводит к более медленному отклику тока. |
| J | 0.01 | Момент инерции | Представляет сопротивление ротора двигателя изменениям углового ускорения и определяет скорость изменения угловой скорости. |
| b | 0.1 | Коэффициент вязкого трения | Представляет механическое демпфирование и описывает демпфирующий момент, который препятствует увеличению угловой скорости при вращении. |
| Kt | 0.01 | Коэффициент крутящего момента | Представляет собой коэффициент пропорциональности, который преобразует ток якоря в электромагнитный крутящий момент. |
| Ke | 0.01 | Коэффициент противо-ЭДС | Представляет собой коэффициент пропорциональности, с помощью которого угловая скорость создает противо-ЭДС, и описывает влияние скорости на ток через обратную связь. |
| Vmax | 24 | Максимальное управляющее напряжение | Представляет предел выходного напряжения контроллера и удерживает напряжение в диапазоне от -24 V до 24 V. |
| dt | 0.001 | Шаг дискретного моделирования | Представляет временной интервал для каждого обновления состояния в цикле и используется для обновления тока, угловой скорости, положения и времени работы. |
Таблица 2: Внутренние параметры, используемые в модели ПИД-регулятора позиционирования двигателя постоянного тока. В таблице перечислены электрические и механические параметры, их обозначения, числовые значения, единицы измерения и роль в модели.
Дополнительные файлы кода: полные исходные файлы и файлы конфигурации для воспроизведения примеров с вентилятором и двигателем постоянного тока. Дополнительные файлы кода включают код узла формул (Formula Node) LabVIEW, конфигурацию обратного прокси-сервера Caddy, XHTML-файлы пользовательского интерфейса и исходные файлы VI LabVIEW, используемые в данном протоколе. Файл Code in LabVIEW Formula Node.docx содержит код узла формул для моделей ПИД-регулирования положения вентилятора и двигателя постоянного тока. Файл Caddyfile.txt содержит конфигурацию локального веб-сервера и обратного прокси-сервера. Файлы Fan_Automatic_UI.xhtml и Motor_Automatic_UI.xhtml содержат логику веб-интерфейса на основе метаданных. Файлы fengshan.vi и Motor.vi представляют собой серверные файлы VI LabVIEW для экспериментов с вентилятором и двигателем.Пожалуйста, нажмите здесь, чтобы скачать этот файл.