$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Dopo aver completato il flusso di lavoro descritto in precedenza, sia l'esperimento sul ventilatore sia l'esperimento sul controllo di posizione PID del motore in corrente continua possono essere accessibili tramite l'interfaccia web generata automaticamente. Un risultato positivo è indicato da tre osservazioni. In primo luogo, la pagina web genera automaticamente controlli di input e campi di visualizzazione dell'output in base ai metadati delle variabili restituiti dal server RIP. In secondo luogo, 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. In terzo luogo, 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 sul 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 Punto di regolazione, Kc, Ti, Td, Disturbo, e Reimposta controllo, e le variabili di uscita includono Posizione, Tensione, 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 tensione, e velocità angolare misurata modificare di conseguenza, indicando che i valori dei parametri inseriti nella pagina web vengono correttamente scritti nel modello LabVIEW sul backend 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 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 segnala un errore 502 Bad Gateway per la richiesta RIP POST, indicando che il front-end ha raggiunto l'indirizzo del proxy ma la richiesta non può essere inoltrata correttamente al back-end del servizio Web RIP o elaborata da esso. Al contrario, Figura 15 mostra uno stato normale di comunicazione lato browser. Gli strumenti di sviluppo del browser mostrano un caricamento della pagina riuscito, richieste RIP POST e una richiesta SSE attiva con expId=fan, indicando che il front-end Web sta comunicando 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 delle diagnosi lato browser, dimostrano che lo stesso flusso di lavoro basato sui metadati per la generazione automatica dell'interfaccia utente può essere riprodotto per due esperimenti LabVIEW diversi. Questi risultati forniscono inoltre criteri osservabili per distinguere una comunicazione riuscita dai tipici malfunzionamenti durante il deployment, mentre le corrispondenti procedure di risoluzione dei problemi sono discusse nella sezione Discussione.

Figura 1: Struttura complessiva del sistema sperimentale. Il sistema è composto dal VI di back-end LabVIEW, dal server RIP, dal proxy Caddy e dall'interfaccia web UI generata automaticamente. Il VI di 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 l'accesso cross-origin, mentre l'interfaccia web UI 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 né 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 né informazioni riservate. Cliccare qui per visualizzare una versione ingrandita di questa figura.

Figura 4: Pagina di configurazione di fan.vi. L'esperimento sul ventilatore è 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 sui metadati nei file front-end XHTML. Gli screenshot del codice XHTML sono stati acquisiti 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 acquisiti 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 proxy locale, imposta la directory principale 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 Caddyfile 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 Web UI di fan.vi. Questa schermata dell'interfaccia Web è stata acquisita dalla pagina Web del ventilatore, 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. Questa schermata dell'interfaccia Web è stata acquisita dalla pagina Web del ventilatore, distribuita localmente dagli autori, utilizzando Mozilla Firefox. I controlli e i campi di output 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 8: Pannello frontale del VI del motore. Il pannello frontale contiene i controlli per Setpoint, Kc, Ti, Td, Disturbo e Reset, 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 di posizione PID per motore in corrente continua. Il diagramma mostra il percorso del segnale dall'errore del punto di riferimento, al controllo PID, al limite di tensione, alla sovrapposizione del disturbo, alla dinamica elettrica, alla dinamica meccanica e all'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 temporale 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 è registrato nella Configurazione RIP con il nome dell'esperimento (Motor), il percorso effettivo del VI, informazioni sulle parole chiave, descrizione e 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 12: Pagina Web UI di Motor.vi. La pagina front-end genera automaticamente controlli di input e visualizzazioni di output 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 output 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 al 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 Caddy locale 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 Caddy locale 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. Questo screenshot della console del browser è stato acquisito 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 corretto della pagina, 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 a livello di console del browser e delle risorse a livello di processo per l'esperimento con il ventilatore. Lo screenshot è stato registrato durante un test locale dell'esperimento con il ventilatore. La console mostra il tempo di richiesta/risposta 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 per sviluppatori 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 utilizzato 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 simultaneo 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 mostrano 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 test locale degli autori. Non sono inclusi dati di utenti terzi 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à di comando di base 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 di riduzione della velocità a regime dovuto al carico. 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 a partire dallo stato precedente. | 0,1-5, passo 0,1 |
| KMaxRPM | DBL | Ingresso | Velocità massima | Imposta la velocità massima consentita dal modello ed è utilizzata per il limitatore di velocità e 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 del ventilatore ed è aggiornata attraverso dinamiche inerziali del primo ordine. | Calcolata dal modello |
| SteadyRPM | DBL | Uscita | Velocità a regime | Rappresenta la velocità teorica a regime nelle attuali condizioni di ingresso. | Calcolata dal modello |
| TimeS | DBL | Uscita | Tempo di funzionamento | Rappresenta il tempo continuo di funzionamento del modello. | Calcolato dal modello |
| SpeedNorm | DBL | Uscita | Velocità normalizzata | Rappresenta il rapporto tra SpeedRPM e KMaxRPM. | 0-1 o calcolato dal modello |
| CurrentA | DBL | Uscita | Corrente | Rappresenta la corrente stimata del 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 del 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 con la 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 eccessivamente 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 attuale 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 limitatore di tensione ed agisce sull'ingresso del motore. | Calcolata dal modello; limitata tra -24 e 24 V |
| Time | DBL | Uscita | Tempo di funzionamento | Rappresenta il tempo continuo di funzionamento del modello del motore. | Calcolato dal modello |
| Measured angular velocity | DBL | Uscita | Velocità angolare misurata | Rappresenta la velocità angolare attuale 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, l'intervallo 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 la velocità 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 quanto rapidamente 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 dell'avvolgimento in coppia elettromagnetica. |
| Ke | 0,01 | Costante della forza elettromotrice contraria | Rappresenta il coefficiente di proporzionalità secondo cui la velocità angolare genera la forza elettromotrice contraria e descrive l'effetto di retroazione della velocità sulla corrente. |
| Vmax | 24 | Tensione di controllo massima | Rappresenta il limite della tensione di uscita del controllore e mantiene la tensione nell'intervallo compreso tra -24 V e 24 V. |
| dt | 0,001 | Passo di simulazione discreto | Rappresenta l'intervallo di tempo per ciascun aggiornamento di stato basato su ciclo ed è 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 i ruoli all'interno del modello.
File di codice supplementari: file completi di codice sorgente e configurazione per riprodurre gli esempi del ventilatore e del motore in corrente continua. I file di codice supplementari includono il codice per il nodo formula di LabVIEW, 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 nodo formula 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 di LabVIEW per gli esperimenti con ventilatore e motore.Fare clic qui per scaricare questo file.