$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Después de completar el flujo de trabajo descrito anteriormente, tanto el experimento del ventilador como el experimento de control de posición PID del motor de corriente continua se pueden acceder a través de la interfaz web generada automáticamente. Un resultado exitoso se indica mediante tres observaciones. Primero, la página web genera automáticamente controles de entrada y campos de visualización de salida según los metadatos de variables devueltos por el servidor RIP. Segundo, cuando el usuario modifica una variable de entrada en la página web, el valor modificado se escribe en el VI de fondo de LabVIEW a través de la interfaz RIP. Tercero, las variables de salida calculadas por el VI de fondo se devuelven a través de RIP y se actualizan en la página web en tiempo real. Para el experimento del ventilador, después de ingresar http://localhost:8090/fan en un navegador, la página genera automáticamente controles de entrada y campos de salida a partir de los metadatos de RIP, como se muestra en la Figura 7. El lado de entrada incluye Enable, PWM, Load, Tau, KMaxRPM y Disturbance, mientras que el lado de salida muestra SpeedRPM, TimeS, SteadyRPM, SpeedNorm, CurrentA y PowerW. Durante el funcionamiento normal, TimeS aumenta continuamente, lo que indica que el VI de fondo fengshan.vi se está ejecutando. Cuando se incrementa PWM, SpeedRPM y SteadyRPM aumentan en consecuencia. Cuando se incrementa Load, la velocidad del ventilador disminuye porque la carga reduce la velocidad de operación estable. Cuando se ajusta Disturbance, se pueden observar cambios correspondientes en SpeedRPM, CurrentA y PowerW. Estas observaciones confirman que las entradas del lado web se transmiten correctamente al fondo de LabVIEW y que las salidas calculadas se devuelven al frontend a través de RIP.
Para el experimento de control de posición PID del motor de corriente continua, después de ingresar http://localhost:8090/motor en un navegador, la página genera automáticamente los controles y campos de salida correspondientes a partir de los metadatos de RIP, como se muestra en Figura 12. Las variables de entrada incluyen Punto de consigna, Kc, Ti, Td, Perturbación, y Restablecer control, y las variables de salida incluyen Posición, Voltaje, Tiempo, y Velocidad angular mediday. Cuando Punto de consigna se modifica, Posición responde al nuevo valor objetivo. Cuando los parámetros PID Kc, Ti, y Td se ajustan, la respuesta de salida, control voltaje, y velocidad angular medida cambian en consecuencia, lo que indica que los valores de los parámetros ingresados en la página web se escriben correctamente en el modelo de fondo de LabVIEW y participan en el cálculo de control. Cuando se activa el control de reinicio, las variables del modelo regresan a sus estados iniciales según la lógica de reinicio.
Los estados de fallo y comunicación del lado del navegador se muestran en la Figura 13, Figura 14, Figura 15. La Figura 13 muestra un caso de acceso fallido desde el navegador en el que Caddy no se está ejecutando. El navegador intenta acceder a http://localhost:8090/motor, pero muestra un mensaje ERR_CONNECTION_REFUSED, lo que indica que el servicio proxy local no está disponible o no está escuchando en el puerto de acceso seleccionado. La Figura 14 muestra un fallo en la comunicación RIP POST después de que la página se ha cargado. En este caso, la consola del navegador informa un error 502 Bad Gateway para la solicitud RIP POST, lo que indica que el frontend ha alcanzado la dirección del proxy, pero la solicitud no puede reenviarse ni procesarse correctamente en el backend del RIP WebService. En contraste, la Figura 15 muestra un estado normal de comunicación del lado del navegador. Las herramientas de desarrollo del navegador muestran una carga exitosa de la página, solicitudes RIP POST correctas y una solicitud SSE activa con expId=fan, lo que indica que el frontend web se está comunicando con el RIP WebService a través del proxy Caddy y recibiendo actualizaciones en tiempo real mediante el canal SSE.
En conjunto, los resultados satisfactorios del ventilador y del motor, junto con los resultados del diagnóstico en el lado del navegador, demuestran que el mismo flujo de trabajo de generación automática de interfaz de usuario basado en metadatos puede reproducirse para dos experimentos diferentes en LabVIEW. Estos resultados también proporcionan criterios observables para distinguir una comunicación exitosa de fallos representativos en la implementación, mientras que los procedimientos correspondientes de solución de problemas se analizan en la sección de Discusión.

Figura 1: Estructura general del sistema experimental. El sistema consta del VI de backend de LabVIEW, el servidor RIP, el proxy Caddy y la interfaz web generada automáticamente. El VI de LabVIEW proporciona las variables del modelo, el servidor RIP lee los metadatos del VI y los valores de las variables, Caddy unifica la ruta de acceso y resuelve el acceso entre orígenes, y la interfaz web genera controles automáticamente. El nombre y el logotipo de Caddy se muestran únicamente para identificar el componente del servidor web/proxy Caddy utilizado en el flujo de trabajo. Haga clic aquí para ver una versión más grande de esta figura.

Figura 2: Panel frontal del VI del ventilador. El Panel frontal contiene controles de entrada para Enable, PWM, Load, Tau, KMaxRPM y Disturbance, y visualizadores de salida para SpeedRPM, SteadyRPM, TimeS, SpeedNorm, CurrentA y PowerW. Esta captura de pantalla se tomó del Panel frontal de fengshan.vi en LabVIEW 2026 en el entorno experimental local de los autores. No se incluyen datos de usuarios externos ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 3: Diagrama de bloques del VI del ventilador. El modelo del ventilador se implementa con un bucle While, registros de desplazamiento, lógica de habilitación, un nodo de fórmula e indicadores de salida. Esta captura de pantalla se tomó del diagrama de bloques de fengshan.vi en LabVIEW 2026 en el entorno experimental local de los autores. No se incluyen datos de usuarios externos ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 4: Página de configuración de fan.vi. El experimento del ventilador se registra en la Configuración RIP con el nombre del experimento fan, la ruta real del VI, información de palabras clave, descripción y frecuencia de muestreo. Esta captura de pantalla se tomó desde la interfaz de Configuración RIP utilizada con LabVIEW 2026 y RIP WebService en el entorno experimental local de los autores. No se incluyen datos de usuarios externos ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 5: Configuraciones del identificador del experimento y lógica de generación de interfaz de usuario basada en metadatos en los archivos de interfaz XHTML. Las capturas de pantalla del código XHTML se tomaron de Fan_Automatic_UI.xhtml y Motor_Automatic_UI.xhtml abiertos en Visual Studio Code. Las páginas del ventilador y del motor utilizan la misma lógica de lectura de metadatos y generación de controles; únicamente se cambia el identificador del experimento para que coincida con el campo Nombre correspondiente en la Configuración RIP. Las capturas de pantalla del código XHTML se tomaron de Fan_Automatic_UI.xhtml y Motor_Automatic_UI.xhtml abiertos en Visual Studio Code en el entorno de desarrollo local de los autores. Los archivos de código fueron preparados por los autores para este protocolo. No se incluyen datos de usuarios de terceros ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 6: Configuración del Caddyfile. El Caddyfile define el puerto de acceso proxy local, establece el directorio raíz del interfaz, reescribe las rutas /fan y /motor a los archivos XHTML correspondientes, y realiza proxy inverso de las solicitudes /RIP/SSE* y /RIP* al puerto del WebService LabVIEW/RIP. La captura de pantalla de la configuración del Caddyfile se tomó del archivo Caddyfile abierto en Visual Studio Code en el entorno de desarrollo local de los autores. El archivo Caddyfile fue preparado por los autores para configurar Caddy como servidor web local y proxy inverso. No se incluyen datos de usuarios de terceros ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 7: Página de interfaz web de fan.vi. Esta captura de pantalla de la interfaz web se tomó de la página web del ventilador desplegada localmente por los autores utilizando Mozilla Firefox. La página frontal genera automáticamente controles de entrada y visualizaciones de salida basándose en los metadatos de variables devueltos por el servidor RIP. Esta captura de pantalla de la interfaz web se tomó de la página web del ventilador desplegada localmente por los autores utilizando Mozilla Firefox. Los controles y campos de salida mostrados se generaron a partir de los metadatos RIP en el entorno experimental local de los autores. No se incluyen datos de usuarios externos ni información confidencial. Haga clic aquí para ver una versión ampliada de esta figura.

Figura 8: Panel frontal del VI del motor. El Panel frontal contiene controles para Valor de consigna, Kc, Ti, Td, Perturbación y Reinicio, así como indicadores para Posición, Voltaje, Tiempo y Velocidad angular medida. Esta captura de pantalla se tomó del Panel frontal de Motor.vi en LabVIEW 2026 en el entorno experimental local de los autores. No se incluyen datos de usuarios externos ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 9: Diagrama del modelo de control de posición PID para motor de corriente continua. El diagrama muestra la trayectoria de la señal desde el error del punto de consigna, el control PID, el límite de voltaje, la superposición de perturbaciones, la dinámica eléctrica, la dinámica mecánica y la actualización de la posición hasta la realimentación. Haga clic aquí para ver una versión más grande de esta figura.

Figura 10: Diagrama de bloques del VI del motor. El modelo del motor se implementa mediante un bucle While, registros de desplazamiento, un nodo de fórmula, lógica de temporización e indicadores de salida. Esta captura de pantalla se tomó del diagrama de bloques de Motor.vi en LabVIEW 2026 en el entorno experimental local de los autores. No se incluye ningún dato de usuario externo ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 11: Página de configuración de Motor.vi. El experimento del motor se registra en la Configuración de RIP con el nombre del experimento Motor, la ruta real del VI, información de palabras clave, descripción y frecuencia de muestreo. Esta captura de pantalla se tomó desde la interfaz de Configuración de RIP utilizada con LabVIEW 2026 y RIP WebService en el entorno experimental local de los autores. No se incluye ningún dato de usuario de terceros ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 12: Página de interfaz web de Motor.vi. La página frontal genera automáticamente controles de entrada y visualizaciones de salida para el experimento de control de posición PID del motor de corriente continua. Esta captura de pantalla de la interfaz web se tomó desde la página web del motor desplegada localmente por los autores utilizando Mozilla Firefox. Los controles y campos de salida mostrados se generaron a partir de metadatos RIP en el entorno experimental local de los autores. No se incluyen datos de usuarios de terceros ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 13: Acceso fallido desde el navegador cuando Caddy no está en ejecución. Cuando Caddy no se ha iniciado, no se puede acceder a la dirección local proxy http://localhost:8090/motor, y el navegador muestra un mensaje ERR_CONNECTION_REFUSED. Este síntoma de fallo indica que el servicio proxy local de Caddy no está disponible o no está escuchando en el puerto de acceso seleccionado. Esta captura de pantalla del navegador se realizó utilizando Mozilla Firefox en el entorno de pruebas local de los autores y muestra el estado de acceso fallido cuando el proxy local de Caddy no estaba en ejecución. No se incluyen datos de usuarios de terceros ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 14: Fallo de comunicación RIP POST tras la carga de la página. La consola del navegador muestra un error 502 Bad Gateway para la solicitud RIP POST. Este resultado indica que la página web ha alcanzado la dirección del proxy Caddy, pero la solicitud no puede reenviarse ni procesarse correctamente en el servicio web RIP de fondo. Esta captura de pantalla de la consola del navegador se tomó utilizando las Herramientas para desarrolladores de Mozilla Firefox en el entorno de implementación local de los autores, y muestra un fallo de comunicación RIP POST 502 Bad Gateway. No se incluyen datos de usuarios de terceros ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 15: Estado de la comunicación del lado del navegador durante el funcionamiento normal. Las herramientas de desarrollo del navegador muestran una carga exitosa de la página, solicitudes POST de RIP y una solicitud SSE activa con expId=fan. Estas solicitudes indican que la interfaz web frontal se comunica con el servicio web RIP a través del proxy Caddy y recibe actualizaciones en tiempo real mediante el canal SSE. Esta captura de pantalla de las herramientas de desarrollo del navegador se tomó utilizando Mozilla Firefox en el entorno de implementación local de los autores y muestra una comunicación normal mediante solicitudes POST de RIP y SSE. No se incluyen datos de usuarios externos ni información confidencial. Haga clic aquí para ver una versión ampliada de esta figura.

Figura 16: Observación representativa individual del recurso a nivel de consola del navegador y del proceso para el experimento del ventilador. La captura de pantalla se registró durante una prueba local del experimento del ventilador. La consola muestra el tiempo de solicitud/respuesta de metadatos, la cantidad de variables de metadatos, el tiempo de generación de la interfaz de usuario basado en metadatos, el tiempo de apertura de la conexión SSE y los datos SSE recibidos. La vista del administrador de tareas muestra los valores de CPU y memoria a nivel de proceso para los procesos del navegador y LabVIEW en el momento de la captura. Estos valores son observaciones descriptivas de esta prueba individual y no son mediciones de rendimiento replicadas ni una referencia estadística. Esta captura de pantalla se tomó utilizando las Herramientas para desarrolladores de Mozilla Firefox y el Administrador de tareas de Windows en el entorno de pruebas local de los autores. Mozilla Firefox se utilizó para registrar la salida de la consola del navegador, y el Administrador de tareas de Windows se utilizó para observar el uso de CPU y memoria de los procesos del navegador y LabVIEW. No se incluyen datos de usuarios externos ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.

Figura 17: Acceso simultáneo a la misma página web basada en RIP desde un navegador de escritorio y un navegador móvil. La página del experimento del ventilador se abre simultáneamente en dispositivos de PC y móviles, y ambos clientes muestran los controles y variables de salida generados automáticamente. La página web de escritorio se accedió mediante Mozilla Firefox, y la página web móvil se accedió mediante un navegador móvil en el mismo entorno de red local. Las capturas de pantalla se obtuvieron del entorno de pruebas local de los autores. No se incluyen datos de usuarios de terceros ni información confidencial. Haga clic aquí para ver una versión más grande de esta figura.
| Nombre de la variable | Tipo de dato | Entrada/Salida | Significado físico | Papel en el modelo | Rango/Ajuste |
| Enable | Boolean | Entrada | Interruptor de encendido del ventilador | Controla si el modelo recibe la entrada PWM. Cuando es Verdadero, u = PWM; cuando es Falso, u = 0. | Verdadero / Falso |
| PWM | DBL | Entrada | Señal de control | Determina la intensidad básica de accionamiento del ventilador y es la entrada principal utilizada para calcular la velocidad en estado estacionario SteadyRPM. | 0-1, paso 0,01 |
| Load | DBL | Entrada | Coeficiente de carga | Describe el efecto atenuante de la carga sobre la velocidad en estado estacionario. A medida que Load aumenta, la velocidad en estado estacionario disminuye. | 0-1, paso 0,01 |
| Tau | DBL | Entrada | Constante de tiempo de respuesta | Determina qué tan rápidamente la velocidad del ventilador se aproxima a la velocidad en estado estacionario desde el estado anterior. | 0,1-5, paso 0,1 |
| KMaxRPM | DBL | Entrada | Velocidad máxima | Establece la velocidad máxima permitida por el modelo y se utiliza para limitar la velocidad y para normalización. | 500-6000, paso 100 |
| Disturbance | DBL | Entrada | Entrada de perturbación | Representa el efecto de una perturbación externa o fluctuación de carga sobre la velocidad en estado estacionario, corriente y potencia. | 0-1, paso 0,1 |
| SpeedRPM | DBL | Salida | Velocidad real | Representa la velocidad de salida actual del ventilador y se actualiza mediante dinámica inercial de primer orden. | Calculado por el modelo |
| SteadyRPM | DBL | Salida | Velocidad en estado estacionario | Representa la velocidad teórica en estado estacionario bajo las condiciones de entrada actuales. | Calculado por el modelo |
| TimeS | DBL | Salida | Tiempo de funcionamiento | Representa el tiempo continuo de funcionamiento del modelo. | Calculado por el modelo |
| SpeedNorm | DBL | Salida | Velocidad normalizada | Representa la relación entre SpeedRPM y KMaxRPM. | 0-1 o calculado por el modelo |
| CurrentA | DBL | Salida | Corriente | Representa la corriente estimada del modelo, que varía con la entrada de control y la entrada de perturbación. | Calculado por el modelo |
| PowerW | DBL | Salida | Potencia | Representa la potencia estimada del modelo, calculada a partir de la constante de voltaje y la corriente. | Calculado por el modelo |
| Setpoint | DBL | Entrada | Posición deseada | Establece la posición que el motor debe alcanzar y forma el error e con la posición real Position. | -3-3, paso 0,1 |
| Kc | DBL | Entrada | Ganancia proporcional | Ajusta la intensidad de respuesta del controlador PID al error. | 0-10, paso 0,1 |
| Ti | DBL | Entrada | Tiempo integral | Ajusta la acción integral del controlador PID y se utiliza para reducir el error en estado estacionario. | 0-10, paso 0,1 |
| Td | DBL | Entrada | Tiempo derivativo | Ajusta la acción derivativa del controlador PID y se utiliza para suprimir cambios excesivamente rápidos del error y mejorar la respuesta dinámica. | 0-5, paso 0,1 |
| Disturbance | DBL | Entrada | Entrada de perturbación | Representa una perturbación externa superpuesta a la entrada del motor, que actúa sobre el modelo del motor junto con el voltaje de control. | 0-10, paso 0,1 |
| Reset control | Boolean | Entrada | Control de reinicio | Activa la limpieza del estado del modelo para que la posición, velocidad angular, corriente, error y término integral regresen a sus estados iniciales. | Verdadero / Falso |
| Position | DBL | Salida | Posición real | Representa la posición angular actual del motor y sirve como variable de retroalimentación para el control PID. | Calculado por el modelo |
| Voltage | DBL | Salida | Voltaje de control | Representa la salida del controlador PID después del límite de voltaje y actúa sobre la entrada del motor. | Calculado por el modelo; limitado a -24 a 24 V |
| Time | DBL | Salida | Tiempo de funcionamiento | Representa el tiempo continuo de funcionamiento del modelo del motor. | Calculado por el modelo |
| Measured angular velocity | DBL | Salida | Velocidad angular medida | Representa la velocidad angular actual del motor y es la salida de estado mecánico del motor. | Calculado por el modelo |
Tabla 1: Variables de entrada y salida utilizadas en los ejemplos del ventilador y del motor de corriente continua. La tabla enumera el nombre de cada variable, el tipo de datos, su función como entrada/salida, su significado físico, el rango recomendado y el tamaño del paso.
| Parámetro | Valor | Significado físico | Papel en el modelo |
| R | 1 | Resistencia del inducido | Representa el término resistivo en el circuito del inducido del motor y determina la caída de voltaje R × im en la ecuación de corriente. |
| L | 0.5 | Inductancia del inducido | Representa la inductancia del circuito del inducido y determina la tasa de cambio de la corriente. Un valor mayor de L produce una respuesta de corriente más lenta. |
| J | 0.01 | Momento de inercia | Representa la resistencia del rotor del motor a los cambios en la aceleración angular y determina qué tan rápidamente cambia la velocidad angular. |
| b | 0.1 | Coeficiente de amortiguamiento viscoso | Representa el amortiguamiento mecánico y describe el par amortiguador que dificulta el aumento de la velocidad angular durante la rotación. |
| Kt | 0.01 | Constante de par | Representa el coeficiente de proporcionalidad que convierte la corriente del inducido en par electromagnético. |
| Ke | 0.01 | Constante de fuerza electromotriz inversa | Representa el coeficiente de proporcionalidad mediante el cual la velocidad angular genera la fuerza electromotriz inversa y describe el efecto de retroalimentación de la velocidad sobre la corriente. |
| Vmax | 24 | Voltaje máximo de control | Representa el límite del voltaje de salida del controlador y mantiene el voltaje dentro del rango de -24 V a 24 V. |
| dt | 0.001 | Paso de simulación discreto | Representa el intervalo de tiempo para cada actualización de estado basada en bucles y se utiliza para actualizar la corriente, la velocidad angular, la posición y el tiempo de ejecución. |
Tabla 2: Parámetros internos utilizados en el modelo de control de posición PID del motor de corriente continua. La tabla enumera los parámetros eléctricos y mecánicos, símbolos, valores numéricos, unidades y funciones dentro del modelo.
Archivos de código complementarios: archivos completos de código fuente y configuración para reproducir los ejemplos del ventilador y del motor de corriente continua. Los archivos de código complementarios incluyen el código del nodo de fórmula de LabVIEW, la configuración del proxy inverso Caddy, los archivos XHTML de la interfaz frontal y los archivos fuente de VI de LabVIEW utilizados en este protocolo. El archivo Code in LabVIEW Formula Node.docx contiene el código del nodo de fórmula para los modelos de control de posición PID del ventilador y del motor CC. Caddyfile.txt contiene la configuración del servidor web local y del proxy inverso. Fan_Automatic_UI.xhtml y Motor_Automatic_UI.xhtml contienen la lógica de la interfaz web frontal basada en metadatos. fengshan.vi y Motor.vi son los archivos de VI de backend de LabVIEW para los experimentos del ventilador y del motor.Haga clic aquí para descargar este archivo.