Dopo aver completato il flusso di lavoro descritto sopra, sia l'esperimento con il ventilatore sia l'esperimento di controllo in posizione PID del motore in corrente continua possono essere accessibili tramite l'interfaccia web generata automaticamente. Un risultato positivo è indicato da tre osservazioni. Primo, la pagina web genera automaticamente controlli di input e campi di visualizzazione dell'output in base ai metadati delle variabili restituiti dal RIP Server. Secondo, quando l'utente modifica una variabile di input sulla pagina web, il valore modificato viene scritto nel VI di back-end LabVIEW attraverso l'interfaccia RIP. Terzo, le variabili di output calcolate dal VI di back-end vengono restituite tramite RIP e aggiornate sulla pagina web in tempo reale. Per l'esperimento con il ventilatore, dopo aver inserito http://localhost:8090/fan in un browser, la pagina genera automaticamente controlli di input e campi di output a partire dai metadati RIP, come mostrato in Figura 7. Il lato di input comprende Enable, PWM, Load, Tau, KMaxRPM e Disturbance, mentre il lato di output visualizza SpeedRPM, TimeS, SteadyRPM, SpeedNorm, CurrentA e PowerW. Durante il funzionamento normale, TimeS aumenta continuamente, indicando che il VI di back-end fengshan.vi è in esecuzione. Quando PWM viene aumentato, SpeedRPM e SteadyRPM aumentano di conseguenza. Quando Load viene aumentato, la velocità del ventilatore diminuisce perché il carico riduce la velocità di funzionamento a regime. Quando Disturbance viene regolato, si possono osservare cambiamenti corrispondenti in SpeedRPM, CurrentA e PowerW. Queste osservazioni confermano che gli input dal lato web vengono trasmessi correttamente al back-end LabVIEW e che gli output calcolati vengono restituiti al front-end tramite RIP.
Per l'esperimento di controllo di posizione PID del motore in corrente continua, dopo aver inserito http://localhost:8090/motor in un browser, la pagina genera automaticamente i corrispondenti controlli e campi di output a partire dai metadati RIP, come mostrato in Figura 12. Le variabili di ingresso includono Setpoint, Kc, Ti, Td, Disturboe Reimposta controllo, e le variabili di uscita includono Posizione, Voltaggio, Tempo, e Velocità angolare misuratay. Quando Valore di riferimento viene modificato, Posizione risponde al nuovo valore obiettivo. Quando i parametri PID Kc, Ti, e Td vengono regolati, la risposta in uscita, il controllo tensionee velocità angolare misurata modificare di conseguenza, indicando che i valori dei parametri inseriti sulla pagina Web vengono correttamente scritti nel modello di backend LabVIEW e partecipano al calcolo di controllo. Quando il controllo di reset viene attivato, le variabili del modello tornano ai loro stati iniziali secondo la logica di reset.
Gli stati di errore e di comunicazione lato browser sono mostrati in Figura 13, Figura 14, Figura 15. Figura 13 mostra un caso di accesso al browser non riuscito in cui Caddy non è in esecuzione. Il browser tenta di accedere a http://localhost:8090/motor ma visualizza un messaggio ERR_CONNECTION_REFUSED, indicando che il servizio proxy locale non è disponibile o non è in ascolto sulla porta di accesso selezionata. Figura 14 mostra un errore di comunicazione RIP POST dopo il caricamento della pagina. In questo caso, la console del browser riporta un errore 502 Bad Gateway per la richiesta RIP POST, indicando che il frontend ha raggiunto l'indirizzo del proxy ma la richiesta non può essere correttamente inoltrata o elaborata dal backend del servizio Web RIP. Al contrario, Figura 15 mostra uno stato normale di comunicazione lato browser. Gli strumenti di sviluppo del browser mostrano un caricamento della pagina avvenuto con successo, richieste RIP POST corrette e una richiesta SSE attiva con expId=fan, indicando che l'interfaccia Web frontend comunica con il servizio Web RIP attraverso il proxy Caddy e riceve aggiornamenti in tempo reale tramite il canale SSE.
I risultati positivi relativi a ventola e motore, insieme ai risultati della diagnostica lato browser, dimostrano che lo stesso flusso di lavoro per la generazione automatica dell'interfaccia utente basato sui metadati può essere riprodotto per due esperimenti diversi in LabVIEW. Questi risultati forniscono inoltre criteri osservabili per distinguere una comunicazione riuscita da guasti rappresentativi del sistema, mentre le relative procedure di risoluzione dei problemi sono trattate nella sezione Discussione.

Figura 1: Struttura complessiva del sistema sperimentale. Il sistema è costituito dal VI di backend LabVIEW, dal server RIP, dal proxy Caddy e dall'interfaccia web (Web UI) generata automaticamente. Il VI LabVIEW fornisce le variabili del modello, il server RIP legge i metadati del VI e i valori delle variabili, Caddy unifica il percorso di accesso e risolve i problemi di accesso cross-origin, mentre l'interfaccia web genera automaticamente i controlli. Il nome e il logo di Caddy sono mostrati esclusivamente per identificare il componente server/proxy web Caddy utilizzato nel flusso di lavoro. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 2: Pannello Frontale del VI del ventilatore. Il Pannello Frontale contiene controlli di ingresso per Enable, PWM, Load, Tau, KMaxRPM e Disturbance e indicatori di uscita per SpeedRPM, SteadyRPM, TimeS, SpeedNorm, CurrentA e PowerW. Questa schermata è stata acquisita dal Pannello Frontale di fengshan.vi in LabVIEW 2026 nell'ambiente sperimentale locale degli autori. Non sono inclusi dati utente di terze parti o informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 3: Diagramma a blocchi del VI del ventilatore. Il modello del ventilatore è implementato mediante un ciclo While, registri a scorrimento, logica Enable, un nodo formula e indicatori di uscita. Questa schermata è stata acquisita dal diagramma a blocchi di fengshan.vi in LabVIEW 2026 nell'ambiente sperimentale locale degli autori. Non sono inclusi dati utente di terze parti o informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 4: Pagina di configurazione di fan.vi. L'esperimento relativo al ventilatore viene registrato nella Configurazione RIP con il nome dell'esperimento (fan), il percorso effettivo del VI, informazioni sulle parole chiave, una descrizione e la frequenza di campionamento. Questa schermata è stata acquisita dall'interfaccia di Configurazione RIP utilizzata con LabVIEW 2026 e RIP WebService nell'ambiente sperimentale locale degli autori. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 5: Impostazioni dell'ID dell'esperimento e logica di generazione dell'interfaccia utente basata su metadati nei file front-end XHTML. Gli screenshot del codice XHTML sono stati catturati da Fan_Automatic_UI.xhtml e Motor_Automatic_UI.xhtml aperti in Visual Studio Code. Le pagine del ventilatore e del motore utilizzano la stessa logica di lettura dei metadati e di generazione dei controlli; soltanto l'ID dell'esperimento viene modificato per corrispondere al campo Nome nella configurazione RIP. Gli screenshot del codice XHTML sono stati catturati da Fan_Automatic_UI.xhtml e Motor_Automatic_UI.xhtml aperti in Visual Studio Code nell'ambiente di sviluppo locale degli autori. I file di codice sono stati preparati dagli autori per questo protocollo. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 6: Configurazione del Caddyfile. Il Caddyfile definisce la porta di accesso del proxy locale, imposta la directory radice per l'interfaccia utente, riscrive i percorsi /fan e /motor nei corrispondenti file XHTML e inoltra tramite proxy inverso le richieste /RIP/SSE* e /RIP* alla porta del WebService LabVIEW/RIP. Lo screenshot della configurazione del Caddyfile è stato acquisito dal file aperto in Visual Studio Code nell'ambiente di sviluppo locale degli autori. Il Caddyfile è stato predisposto dagli autori per configurare Caddy come server Web locale e proxy inverso. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 7: Pagina dell'interfaccia web di fan.vi. Questo screenshot dell'interfaccia web è stato acquisito dalla pagina web fan, distribuita localmente dagli autori, utilizzando Mozilla Firefox. La pagina front-end genera automaticamente controlli di input e visualizzazioni di output in base ai metadati delle variabili restituiti dal RIP Server. I controlli e i campi di output mostrati sono stati generati dai metadati RIP nell'ambiente sperimentale locale degli autori. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 8: Pannello frontale del VI del motore. Il pannello frontale contiene i controlli per Setpoint, Kc, Ti, Td, Disturbo e Ripristino, e gli indicatori per Posizione, Tensione, Tempo e Velocità angolare misurata. Questa schermata è stata acquisita dal pannello frontale di Motor.vi in LabVIEW 2026 nell'ambiente sperimentale locale degli autori. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 9: Diagramma del modello di controllo della posizione PID per motore in corrente continua. Il diagramma mostra il percorso del segnale, dall'errore del punto di riferimento, attraverso il controllo PID, il limite di tensione, la sovrapposizione del disturbo, la dinamica elettrica, la dinamica meccanica e l'aggiornamento della posizione, fino al feedback. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 10: Diagramma a blocchi del VI del motore. Il modello del motore è implementato mediante un ciclo While, registri a scorrimento, un nodo formula, logica di temporizzazione e indicatori di uscita. Questa schermata è stata acquisita dal diagramma a blocchi di Motor.vi in LabVIEW 2026 nell'ambiente sperimentale locale degli autori. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 11: Pagina di configurazione di Motor.vi. L'esperimento sul motore viene registrato nella configurazione RIP con il nome dell'esperimento (Motor), il percorso effettivo del VI, informazioni sui keyword, descrizione e frequenza di campionamento. Questa schermata è stata acquisita dall'interfaccia RIP Configuration utilizzata con LabVIEW 2026 e RIP WebService nell'ambiente sperimentale locale degli autori. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 12: Pagina dell'interfaccia web di Motor.vi. La pagina front-end genera automaticamente controlli di ingresso e visualizzazioni di uscita per l'esperimento di controllo di posizione PID del motore in corrente continua. Questa schermata dell'interfaccia web è stata acquisita dalla pagina web del motore, distribuita localmente dagli autori, utilizzando Mozilla Firefox. I controlli e i campi di uscita visualizzati sono stati generati dai metadati RIP nell'ambiente sperimentale locale degli autori. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 13: Accesso dal browser non riuscito quando Caddy non è in esecuzione. Quando Caddy non è avviato, l'indirizzo locale inoltrato http://localhost:8090/motor non è raggiungibile e il browser visualizza un messaggio ERR_CONNECTION_REFUSED. Questo sintomo di errore indica che il servizio proxy locale Caddy non è disponibile o non è in ascolto sulla porta di accesso selezionata. Questa schermata del browser è stata acquisita utilizzando Mozilla Firefox nell'ambiente di test locale degli autori e mostra lo stato di accesso non riuscito quando il proxy locale Caddy non era in esecuzione. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 14: Errore di comunicazione RIP POST dopo il caricamento della pagina. La console del browser mostra un errore 502 Bad Gateway per la richiesta RIP POST. Questo risultato indica che la pagina web ha raggiunto l'indirizzo del proxy Caddy, ma la richiesta non può essere inoltrata o elaborata correttamente dal backend del servizio web RIP. Questa schermata della console del browser è stata acquisita utilizzando gli strumenti per sviluppatori di Mozilla Firefox nell'ambiente di distribuzione locale degli autori e mostra un errore di comunicazione RIP POST 502 Bad Gateway. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 15: Stato della comunicazione lato browser durante il funzionamento normale. Gli strumenti di sviluppo del browser mostrano un caricamento della pagina avvenuto con successo, richieste POST RIP e una richiesta SSE attiva con expId=fan. Queste richieste indicano che l'interfaccia web front-end sta comunicando con il WebService RIP attraverso il proxy Caddy e sta ricevendo aggiornamenti in tempo reale tramite il canale SSE. Questa schermata degli strumenti di sviluppo del browser è stata catturata utilizzando Mozilla Firefox nell'ambiente di distribuzione locale degli autori e mostra una comunicazione POST RIP e SSE normale. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 16: Osservazione rappresentativa singola della console del browser e dell'utilizzo delle risorse a livello di processo per l'esperimento sul ventilatore. Lo screenshot è stato registrato durante un test locale dell'esperimento sul ventilatore. La console mostra il tempo delle richieste/risposte dei metadati, il numero di variabili nei metadati, il tempo di generazione dell'interfaccia utente basata sui metadati, il tempo di apertura della connessione SSE e i dati SSE ricevuti. La vista del gestore attività mostra i valori di CPU e memoria a livello di processo per i processi del browser e di LabVIEW al momento dell'acquisizione. Questi valori sono osservazioni descrittive di questo singolo test e non rappresentano misurazioni di prestazioni replicate o un benchmark statistico. Lo screenshot è stato acquisito utilizzando gli strumenti di sviluppo di Mozilla Firefox e il Task Manager di Windows nell'ambiente di test locale degli autori. Mozilla Firefox è stato utilizzato per registrare l'output della console del browser, mentre il Task Manager di Windows è stato impiegato per osservare l'utilizzo di CPU e memoria da parte dei processi del browser e di LabVIEW. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 17: Accesso contemporaneo alla stessa pagina Web basata su RIP da un browser desktop e da un browser mobile. La pagina dell'esperimento sul ventilatore viene aperta contemporaneamente su dispositivi PC e mobili, e entrambi i client visualizzano i controlli e le variabili di uscita generati automaticamente. La pagina Web desktop è stata accessibile tramite Mozilla Firefox, mentre la pagina Web mobile è stata accessibile tramite un browser mobile nello stesso ambiente di rete locale. Gli screenshot sono stati catturati dall'ambiente di testing locale degli autori. Non sono inclusi dati utente di terze parti né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.
| Nome della variabile | Tipo di dato | Ingresso/Uscita | Significato fisico | Ruolo nel modello | Intervallo/Impostazione |
| Enable | Boolean | Ingresso | Interruttore di accensione del ventilatore | Controlla se il modello riceve l'ingresso PWM. Quando è True, u = PWM; quando è False, u = 0. | True / False |
| PWM | DBL | Ingresso | Ingresso di comando | Determina l'intensità base del comando del ventilatore ed è l'ingresso principale utilizzato per calcolare la velocità a regime SteadyRPM. | 0-1, passo 0.01 |
| Load | DBL | Ingresso | Coefficiente di carico | Descrive l'effetto riduttivo del carico sulla velocità a regime. Aumentando il carico, la velocità a regime diminuisce. | 0-1, passo 0.01 |
| Tau | DBL | Ingresso | Costante di tempo di risposta | Determina con quale rapidità la velocità del ventilatore si avvicina alla velocità a regime partendo dallo stato precedente. | 0,1-5, passo 0,1 |
| KMaxRPM | DBL | Ingresso | Velocità massima | Imposta la velocità massima consentita dal modello ed è utilizzata per limitare la velocità e per la normalizzazione. | 500-6000, passo 100 |
| Disturbance | DBL | Ingresso | Ingresso di disturbo | Rappresenta l'effetto di un disturbo esterno o di una fluttuazione del carico sulla velocità a regime, sulla corrente e sulla potenza. | 0-1, passo 0,1 |
| SpeedRPM | DBL | Uscita | Velocità effettiva | Rappresenta la velocità attuale in uscita dal ventilatore ed è aggiornata attraverso dinamiche inerziali del primo ordine. | Calcolata dal modello |
| SteadyRPM | DBL | Uscita | Velocità a regime | Rappresenta la velocità teorica a regime sotto le attuali condizioni di ingresso. | Calcolata dal modello |
| TimeS | DBL | Uscita | Tempo di esecuzione | Rappresenta il tempo continuativo di funzionamento del modello. | Calcolata dal modello |
| SpeedNorm | DBL | Uscita | Velocità normalizzata | Rappresenta il rapporto tra SpeedRPM e KMaxRPM. | 0-1 oppure calcolata dal modello |
| CurrentA | DBL | Uscita | Corrente | Rappresenta la corrente stimata dal modello, che varia in base all'ingresso di comando e all'ingresso di disturbo. | Calcolata dal modello |
| PowerW | DBL | Uscita | Potenza | Rappresenta la potenza stimata dal modello, calcolata a partire dalla costante di tensione e dalla corrente. | Calcolata dal modello |
| Setpoint | DBL | Ingresso | Posizione desiderata | Imposta la posizione che il motore deve raggiungere e forma l'errore e insieme alla posizione effettiva Position. | -3-3, passo 0,1 |
| Kc | DBL | Ingresso | Guadagno proporzionale | Regola l'intensità di risposta del controllore PID all'errore. | 0-10, passo 0,1 |
| Ti | DBL | Ingresso | Tempo integrale | Regola l'azione integrale del controllore PID ed è utilizzato per ridurre l'errore a regime. | 0-10, passo 0,1 |
| Td | DBL | Ingresso | Tempo derivativo | Regola l'azione derivativa del controllore PID ed è utilizzato per sopprimere variazioni troppo rapide dell'errore e migliorare la risposta dinamica. | 0-5, passo 0,1 |
| Disturbance | DBL | Ingresso | Ingresso di disturbo | Rappresenta un disturbo esterno sovrapposto all'ingresso del motore, che agisce sul modello del motore insieme alla tensione di controllo. | 0-10, passo 0,1 |
| Reset control | Boolean | Ingresso | Controllo di reset | Attiva la cancellazione dello stato del modello in modo che posizione, velocità angolare, corrente, errore e termine integrale tornino ai loro stati iniziali. | True / False |
| Position | DBL | Uscita | Posizione effettiva | Rappresenta la posizione angolare corrente del motore e funge da variabile di retroazione per il controllo PID. | Calcolata dal modello |
| Voltage | DBL | Uscita | Tensione di controllo | Rappresenta l'uscita del controllore PID dopo il limitamento della tensione ed agisce sull'ingresso del motore. | Calcolata dal modello; limitata tra -24 e 24 V |
| Time | DBL | Uscita | Tempo di esecuzione | Rappresenta il tempo continuativo di funzionamento del modello del motore. | Calcolata dal modello |
| Measured angular velocity | DBL | Uscita | Velocità angolare misurata | Rappresenta la velocità angolare corrente del motore ed è l'uscita dello stato meccanico del motore. | Calcolata dal modello |
Tabella 1: Variabili di ingresso e di uscita utilizzate negli esempi del ventilatore e del motore in corrente continua. La tabella elenca il nome di ciascuna variabile, il tipo di dati, il ruolo di ingresso/uscita, il significato fisico, il campo raccomandato e l'incremento.
| Parametro | Valore | Significato fisico | Ruolo nel modello |
| R | 1 | Resistenza dell'avvolgimento | Rappresenta il termine resistivo nel circuito dell'avvolgimento del motore e determina la caduta di tensione R × im nell'equazione della corrente. |
| L | 0,5 | Induttanza dell'avvolgimento | Rappresenta l'induttanza del circuito dell'avvolgimento e determina il tasso di variazione della corrente. Un valore maggiore di L produce una risposta di corrente più lenta. |
| J | 0,01 | Momento d'inerzia | Rappresenta la resistenza del rotore del motore alle variazioni di accelerazione angolare e determina la rapidità con cui cambia la velocità angolare. |
| b | 0,1 | Coefficiente di smorzamento viscoso | Rappresenta lo smorzamento meccanico e descrive la coppia smorzante che ostacola l'aumento della velocità angolare durante la rotazione. |
| Kt | 0,01 | Costante di coppia | Rappresenta il coefficiente di proporzionalità che converte la corrente nell'avvolgimento in coppia elettromagnetica. |
| Ke | 0,01 | Costante della forza elettromotrice inversa | Rappresenta il coefficiente di proporzionalità con cui la velocità angolare genera la forza elettromotrice inversa e descrive l'effetto di retroazione della velocità sulla corrente. |
| Vmax | 24 | Tensione di controllo massima | Rappresenta il limite della tensione in uscita dal controllore e mantiene la tensione nell'intervallo compreso tra -24 V e 24 V. |
| dt | 0,001 | Passo di simulazione discreto | Rappresenta l'intervallo temporale per ciascun aggiornamento dello stato basato su ciclo e viene utilizzato per aggiornare corrente, velocità angolare, posizione e tempo di esecuzione. |
Tabella 2: Parametri interni utilizzati nel modello di controllo di posizione PID del motore in corrente continua. La tabella elenca i parametri elettrici e meccanici, i simboli, i valori numerici, le unità di misura e le funzioni all'interno del modello.
File di codice supplementari: file completi di sorgente e configurazione per riprodurre gli esempi del ventilatore e del motore in corrente continua. I file di codice supplementari includono il codice LabVIEW Formula Node, la configurazione del reverse-proxy Caddy, i file front-end XHTML e i file sorgente VI di LabVIEW utilizzati in questo protocollo. Il documento Code in LabVIEW Formula Node.docx contiene il codice del Formula Node per i modelli di controllo posizionale PID del ventilatore e del motore CC. Il file Caddyfile.txt contiene la configurazione del server Web locale e del reverse-proxy. I file Fan_Automatic_UI.xhtml e Motor_Automatic_UI.xhtml contengono la logica front-end basata su metadati. I file fengshan.vi e Motor.vi sono i file VI di back-end LabVIEW per gli esperimenti con il ventilatore e il motore.Fare clic qui per scaricare il file.