$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Après avoir terminé le flux de travail décrit ci-dessus, l'expérience sur le ventilateur et celle sur la commande de position PID d'un moteur à courant continu peuvent être accessibles via l'interface Web générée automatiquement. Un résultat concluant se manifeste par trois observations. Premièrement, la page Web génère automatiquement des commandes d'entrée et des champs d'affichage de sortie conformément aux métadonnées des variables renvoyées par le serveur RIP. Deuxièmement, lorsque l'utilisateur modifie une variable d'entrée sur la page Web, la valeur modifiée est écrite dans le VI d'arrière-plan LabVIEW via l'interface RIP. Troisièmement, les variables de sortie calculées par le VI d'arrière-plan sont renvoyées via RIP et actualisées en temps réel sur la page Web. Pour l'expérience sur le ventilateur, après avoir saisi http://localhost:8090/fan dans un navigateur, la page génère automatiquement des commandes d'entrée et des champs de sortie à partir des métadonnées RIP, comme illustré dans la Figure 7. Le côté entrée comprend Enable, PWM, Load, Tau, KMaxRPM et Disturbance, tandis que le côté sortie affiche SpeedRPM, TimeS, SteadyRPM, SpeedNorm, CurrentA et PowerW. Pendant le fonctionnement normal, TimeS augmente continuellement, indiquant que le VI d'arrière-plan fengshan.vi s'exécute. Lorsque PWM augmente, SpeedRPM et SteadyRPM augmentent en conséquence. Lorsque Load augmente, la vitesse du ventilateur diminue, car la charge réduit la vitesse de fonctionnement en régime permanent. Lorsque Disturbance est ajustée, des changements correspondants peuvent être observés dans SpeedRPM, CurrentA et PowerW. Ces observations confirment que les entrées côté Web sont correctement transmises à l'arrière-plan LabVIEW et que les sorties calculées sont renvoyées à l'interface frontale via RIP.
Pour l'expérience de commande de position PID d'un moteur à courant continu, après avoir saisi http://localhost:8090/motor dans un navigateur, la page génère automatiquement les champs de commande et de sortie correspondants à partir des métadonnées RIP, comme illustré dans Figure 12. Les variables d'entrée comprennent Consigne, Kc, Ti, Td, Perturbation, et Réinitialiser contrôle, et les variables de sortie comprennent Position, Tension, Temps et Vélocité angulaire mesuréey. Lorsque Consigne est modifié, Position répond à la nouvelle valeur cible. Lorsque les paramètres PID Kc, Ti, et Td sont ajustés, la réponse en sortie, contrôle tension, et vitesse angulaire mesurée changer en conséquence, indiquant que les valeurs de paramètres saisies sur la page Web sont correctement écrites dans le modèle backend LabVIEW et participent au calcul de contrôle. Lorsque la commande de réinitialisation est activée, les variables du modèle reviennent à leur état initial conformément à la logique de réinitialisation.
Les états de défaillance et de communication côté navigateur sont illustrés dans Figure 13, Figure 14, Figure 15. Figure 13 présente un cas d'accès au navigateur ayant échoué, dans lequel Caddy n'est pas en cours d'exécution. Le navigateur tente d'accéder à http://localhost:8090/motor, mais affiche un message ERR_CONNECTION_REFUSED, indiquant que le service proxy local est indisponible ou n'écoute pas sur le port d'accès sélectionné. Figure 14 montre un échec de communication RIP POST après le chargement de la page. Dans ce cas, la console du navigateur signale une erreur 502 Bad Gateway pour la requête RIP POST, ce qui indique que le client a atteint l'adresse du proxy, mais que la requête ne peut pas être correctement transférée ou traitée par le service Web RIP en arrière-plan. En revanche, Figure 15 illustre un état de communication normal côté navigateur. Les outils de développement du navigateur montrent un chargement de page réussi, des requêtes RIP POST réussies et une requête SSE active avec expId=fan, indiquant que l'interface Web communique avec le service Web RIP via le proxy Caddy et reçoit des mises à jour en temps réel par le biais du canal SSE.
Ensemble, les résultats positifs concernant le ventilateur et le moteur ainsi que les résultats des diagnostics côté navigateur démontrent que le même flux de travail de génération automatique d'interface utilisateur basé sur les métadonnées peut être reproduit pour deux expériences LabVIEW différentes. Ces résultats fournissent également des critères observables permettant de distinguer une communication réussie des échecs représentatifs de déploiement, tandis que les procédures de dépannage correspondantes sont discutées dans la section Discussion.

Figure 1 : Structure générale du système expérimental. Le système comprend le VI backend LabVIEW, le serveur RIP, le proxy Caddy et l'interface Web générée automatiquement. Le VI LabVIEW fournit les variables du modèle, le serveur RIP lit les métadonnées du VI et les valeurs des variables, Caddy unifie le chemin d'accès et résout les problèmes d'accès inter-origines, et l'interface Web génère automatiquement les contrôles. Le nom et le logo de Caddy sont indiqués uniquement pour identifier le composant serveur/proxy Web Caddy utilisé dans le flux de travail. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 2 : Panneau avant du VI du ventilateur. Le panneau avant comprend des commandes d'entrée pour Enable, PWM, Load, Tau, KMaxRPM et Disturbance, ainsi que des indicateurs de sortie pour SpeedRPM, SteadyRPM, TimeS, SpeedNorm, CurrentA et PowerW. Cette capture d'écran a été réalisée à partir du panneau avant de fengshan.vi dans LabVIEW 2026, dans l'environnement expérimental local des auteurs. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 3 : Schéma fonctionnel du VI du ventilateur. Le modèle du ventilateur est implémenté à l'aide d'une boucle While, de registres à décalage, d'une logique Enable, d'un nœud de formule et d'indicateurs de sortie. Cette capture d'écran a été réalisée à partir du schéma fonctionnel du fichier fengshan.vi dans LabVIEW 2026, dans l'environnement expérimental local des auteurs. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 4 : Page de configuration de fan.vi. L'expérience sur le ventilateur est enregistrée dans RIP Configuration avec le nom de l'expérience « fan », le chemin réel du VI, les informations de mots-clés, la description et la fréquence d'échantillonnage. Cette capture d'écran a été réalisée à partir de l'interface RIP Configuration utilisée avec LabVIEW 2026 et RIP WebService dans l'environnement expérimental local des auteurs. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 5 : Paramètres de l'identifiant de l'expérience et logique de génération de l'interface utilisateur basée sur les métadonnées dans les fichiers frontaux XHTML. Les captures d'écran du code XHTML ont été réalisées à partir des fichiers Fan_Automatic_UI.xhtml et Motor_Automatic_UI.xhtml ouverts dans Visual Studio Code. Les pages ventilateur et moteur utilisent la même logique de lecture des métadonnées et de génération des contrôles ; seul l'identifiant de l'expérience est modifié pour correspondre au champ Nom correspondant dans la configuration RIP. Les captures d'écran du code XHTML ont été réalisées à partir des fichiers Fan_Automatic_UI.xhtml et Motor_Automatic_UI.xhtml ouverts dans Visual Studio Code dans l'environnement de développement local des auteurs. Les fichiers de code ont été préparés par les auteurs pour ce protocole. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 6 : Configuration du Caddyfile. Le Caddyfile définit le port d'accès proxy local, indique le répertoire racine du front-end, réécrit les routes /fan et /motor vers les fichiers XHTML correspondants, et achemine en proxy inverse les requêtes /RIP/SSE* et /RIP* vers le port du WebService LabVIEW/RIP. La capture d'écran de la configuration du Caddyfile a été réalisée à partir du fichier ouvert dans Visual Studio Code dans l'environnement de développement local des auteurs. Le Caddyfile a été préparé par les auteurs afin de configurer Caddy en tant que serveur Web local et proxy inverse. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 7 : Page Web UI de fan.vi. Cette capture d'écran de l'interface Web a été réalisée à partir de la page Web locale du ventilateur déployée par les auteurs, à l'aide de Mozilla Firefox. La page frontale génère automatiquement des commandes d'entrée et des affichages de sortie en fonction des métadonnées des variables renvoyées par le serveur RIP. Les commandes et champs de sortie affichés ont été générés à partir des métadonnées RIP présentes dans l'environnement expérimental local des auteurs. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 8 : Panneau avant du VI du moteur. Le panneau avant comprend des commandes pour le Consigne, Kc, Ti, Td, Perturbation et la commande de Réinitialisation, ainsi que des indicateurs pour la Position, la Tension, le Temps et la Vitesse angulaire mesurée. Cette capture d'écran a été réalisée à partir du panneau avant de Motor.vi dans LabVIEW 2026, dans l'environnement expérimental local des auteurs. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 9: Schéma du modèle de contrôle de position PID pour moteur à courant continu. Le schéma illustre le trajet du signal, depuis l'erreur de consigne, le contrôle PID, la limitation de tension, la superposition de perturbation, la dynamique électrique, la dynamique mécanique et la mise à jour de la position jusqu'à la rétroaction. Veuillez cliquer ici pour visualiser une version agrandie de cette figure.

Figure 10 : Schéma fonctionnel du VI du moteur. Le modèle du moteur est implémenté à l’aide d’une boucle While, de registres à décalage, d’un nœud de formule, d’une logique de temporisation et d’indicateurs de sortie. Cette capture d’écran a été réalisée à partir du schéma fonctionnel de Motor.vi dans LabVIEW 2026, dans l’environnement expérimental local des auteurs. Aucune donnée utilisateur tierce ni information confidentielle n’est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 11 : Page de configuration de Motor.vi. L'expérience sur le moteur est enregistrée dans RIP Configuration avec le nom de l'expérience « Motor », le chemin réel du VI, les informations de mots-clés, la description et la fréquence d'échantillonnage. Cette capture d'écran a été réalisée à partir de l'interface RIP Configuration utilisée avec LabVIEW 2026 et RIP WebService dans l'environnement expérimental local des auteurs. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 12 : Page Web UI de Motor.vi. La page frontale génère automatiquement des commandes d'entrée et des affichages de sortie pour l'expérience de contrôle de position PID du moteur à courant continu. Cette capture d'écran de l'interface Web a été réalisée à partir de la page Web du moteur déployée localement par les auteurs, à l'aide de Mozilla Firefox. Les commandes et champs de sortie affichés ont été générés à partir des métadonnées RIP dans l'environnement expérimental local des auteurs. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 13 : Échec d'accès au navigateur lorsque Caddy n'est pas en cours d'exécution. Lorsque Caddy n'est pas démarré, l'adresse locale proxy http://localhost:8090/motor est inaccessible et le navigateur affiche un message d'erreur ERR_CONNECTION_REFUSED. Ce symptôme d'échec indique que le service proxy local Caddy est indisponible ou n'écoute pas sur le port d'accès sélectionné. Cette capture d'écran du navigateur a été réalisée à l'aide de Mozilla Firefox dans l'environnement de test local des auteurs et illustre l'état d'accès échoué lorsque le proxy local Caddy n'était pas en cours d'exécution. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 14 : Échec de communication RIP POST après le chargement de la page. La console du navigateur affiche une erreur 502 Bad Gateway pour la requête RIP POST. Ce résultat indique que la page web a atteint l'adresse du proxy Caddy, mais que la requête ne peut pas être correctement transférée ou traitée par le service web backend RIP. Cette capture d'écran de la console du navigateur a été réalisée à l'aide des outils de développement Mozilla Firefox dans l'environnement de déploiement local des auteurs, et montre un échec de communication RIP POST avec l'erreur 502 Bad Gateway. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 15 : État des communications côté navigateur en fonctionnement normal. Les outils de développement du navigateur montrent un chargement réussi de la page, des requêtes POST RIP et une requête SSE active avec expId=fan. Ces requêtes indiquent que l'interface Web frontale communique avec le service Web RIP via le proxy Caddy et reçoit des mises à jour en temps réel par le biais du canal SSE. Cette capture d'écran des outils de développement du navigateur a été réalisée à l'aide de Mozilla Firefox dans l'environnement de déploiement local des auteurs et illustre une communication POST RIP et SSE normale. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 16 : Observation représentative unique au niveau de la console du navigateur et des ressources au niveau du processus pour l'expérience du ventilateur. La capture d'écran a été réalisée lors d'un test local de l'expérience du ventilateur. La console affiche le temps de requête/réponse des métadonnées, le nombre de variables de métadonnées, le temps de génération de l'interface utilisateur basée sur les métadonnées, le temps d'ouverture de la connexion SSE et les données SSE reçues. La vue du gestionnaire des tâches montre les valeurs de l'UC et de la mémoire au niveau du processus pour les processus du navigateur et de LabVIEW au moment de la capture. Ces valeurs correspondent à des observations descriptives issues de ce test individuel et ne constituent pas des mesures de performance répliquées ni une référence statistique. Cette capture d'écran a été effectuée à l'aide des outils de développement de Mozilla Firefox et du Gestionnaire des tâches de Windows dans l'environnement de test local des auteurs. Mozilla Firefox a été utilisé pour enregistrer la sortie de la console du navigateur, et le Gestionnaire des tâches de Windows a permis d'observer l'utilisation du processeur et de la mémoire par les processus du navigateur et de LabVIEW. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.

Figure 17 : Accès simultané à la même page Web basée sur RIP depuis un navigateur d'ordinateur de bureau et un navigateur mobile. La page de l'expérience du ventilateur est ouverte simultanément sur des appareils PC et mobiles, et les deux clients affichent les commandes et variables de sortie générées automatiquement. La page Web de bureau a été consultée à l'aide de Mozilla Firefox, et la page Web mobile a été consultée à l'aide d'un navigateur mobile dans le même environnement de réseau local. Les captures d'écran ont été réalisées dans l'environnement de test local des auteurs. Aucune donnée utilisateur tierce ni information confidentielle n'est incluse. Veuillez cliquer ici pour afficher une version agrandie de cette figure.
| Nom de la variable | Type de données | Entrée/Sortie | Sens physique | Rôle dans le modèle | Plage/Réglage |
| Enable | Booléen | Entrée | Interrupteur de fonctionnement du ventilateur | Contrôle si le modèle reçoit l'entrée PWM. Lorsque True, u = PWM ; lorsque False, u = 0. | True / False |
| PWM | DBL | Entrée | Entrée de commande | Détermine l'intensité de commande de base du ventilateur et constitue l'entrée principale utilisée pour calculer la vitesse en régime permanent SteadyRPM. | 0-1, pas de 0,01 |
| Load | DBL | Entrée | Coefficient de charge | Décrit l'effet affaiblissant de la charge sur la vitesse en régime permanent. Lorsque Load augmente, la vitesse en régime permanent diminue. | 0-1, pas de 0,01 |
| Tau | DBL | Entrée | Constante de temps de réponse | Détermine la rapidité avec laquelle la vitesse du ventilateur atteint la vitesse en régime permanent à partir de l'état précédent. | 0,1-5, pas de 0,1 |
| KMaxRPM | DBL | Entrée | Vitesse maximale | Fixe la vitesse maximale autorisée par le modèle et est utilisée pour la limitation et la normalisation de la vitesse. | 500-6000, pas de 100 |
| Disturbance | DBL | Entrée | Entrée de perturbation | Représente l'effet d'une perturbation externe ou d'une fluctuation de charge sur la vitesse en régime permanent, le courant et la puissance. | 0-1, pas de 0,1 |
| SpeedRPM | DBL | Sortie | Vitesse réelle | Représente la vitesse de sortie actuelle du ventilateur et est mise à jour selon une dynamique inertielle du premier ordre. | Calculée par le modèle |
| SteadyRPM | DBL | Sortie | Vitesse en régime permanent | Représente la vitesse théorique en régime permanent sous les conditions d'entrée actuelles. | Calculée par le modèle |
| TimeS | DBL | Sortie | Durée de fonctionnement | Représente la durée continue de fonctionnement du modèle. | Calculée par le modèle |
| SpeedNorm | DBL | Sortie | Vitesse normalisée | Représente le rapport entre SpeedRPM et KMaxRPM. | 0-1 ou calculée par le modèle |
| CurrentA | DBL | Sortie | Courant | Représente le courant estimé du modèle, qui varie en fonction de l'entrée de commande et de l'entrée de perturbation. | Calculé par le modèle |
| PowerW | DBL | Sortie | Puissance | Représente la puissance estimée du modèle, calculée à partir de la constante de tension et du courant. | Calculée par le modèle |
| Setpoint | DBL | Entrée | Position souhaitée | Fixe la position que le moteur doit atteindre et forme l'erreur e avec la position réelle Position. | -3 à 3, pas de 0,1 |
| Kc | DBL | Entrée | Gain proportionnel | Ajuste l'intensité de la réponse du régulateur PID à l'erreur. | 0-10, pas de 0,1 |
| Ti | DBL | Entrée | Temps d'intégration | Ajuste l'action intégrale du régulateur PID et est utilisé pour réduire l'erreur en régime permanent. | 0-10, pas de 0,1 |
| Td | DBL | Entrée | Temps de dérivation | Ajuste l'action dérivée du régulateur PID et est utilisé pour limiter les variations trop rapides de l'erreur et améliorer la réponse dynamique. | 0-5, pas de 0,1 |
| Disturbance | DBL | Entrée | Entrée de perturbation | Représente une perturbation externe superposée à l'entrée du moteur, agissant sur le modèle du moteur conjointement avec la tension de commande. | 0-10, pas de 0,1 |
| Reset control | Booléen | Entrée | Commande de réinitialisation | Déclenche l'effacement de l'état du modèle afin que la position, la vitesse angulaire, le courant, l'erreur et le terme intégral reviennent à leurs états initiaux. | True / False |
| Position | DBL | Sortie | Position réelle | Représente la position angulaire actuelle du moteur et sert de variable de retour pour la commande PID. | Calculée par le modèle |
| Voltage | DBL | Sortie | Tension de commande | Représente la sortie du régulateur PID après limitation de tension et agit sur l'entrée du moteur. | Calculée par le modèle ; limitée à -24 à 24 V |
| Time | DBL | Sortie | Durée de fonctionnement | Représente la durée continue de fonctionnement du modèle du moteur. | Calculée par le modèle |
| Measured angular velocity | DBL | Sortie | Vitesse angulaire mesurée | Représente la vitesse angulaire actuelle du moteur et constitue la sortie d'état mécanique du moteur. | Calculée par le modèle |
Tableau 1 : Variables d'entrée et de sortie utilisées dans les exemples de ventilateur et de moteur à courant continu. Ce tableau énumère chaque nom de variable, le type de données, le rôle entrée/sortie, la signification physique, la plage recommandée et la taille du pas.
| Paramètre | Valeur | Signification physique | Rôle dans le modèle |
| R | 1 | Résistance de l'induit | Représente le terme de résistance dans le circuit de l'induit du moteur et détermine la chute de tension R × im dans l'équation du courant. |
| L | 0,5 | Inductance de l'induit | Représente l'inductance du circuit de l'induit et détermine la vitesse de variation du courant. Une valeur plus élevée de L produit une réponse en courant plus lente. |
| J | 0,01 | Moment d'inertie | Représente la résistance du rotor du moteur aux variations de l'accélération angulaire et détermine la rapidité avec laquelle la vitesse angulaire évolue. |
| b | 0,1 | Coefficient de frottement visqueux | Représente l'amortissement mécanique et décrit le couple d'amortissement qui s'oppose à l'augmentation de la vitesse angulaire en rotation. |
| Kt | 0,01 | Constante de couple | Représente le coefficient de proportionnalité qui convertit le courant de l'induit en couple électromagnétique. |
| Ke | 0,01 | Constante de force électromotrice induite | Représente le coefficient de proportionnalité selon lequel la vitesse angulaire génère la force électromotrice induite et décrit l'effet de rétroaction de la vitesse sur le courant. |
| Vmax | 24 | Tension de commande maximale | Représente la limite de la tension de sortie du contrôleur et maintient la tension dans la plage allant de -24 V à 24 V. |
| dt | 0,001 | Pas de simulation discret | Représente l'intervalle de temps pour chaque mise à jour d'état par boucle et est utilisé pour mettre à jour le courant, la vitesse angulaire, la position et le temps d'exécution. |
Tableau 2 : Paramètres internes utilisés dans le modèle de commande de position PID du moteur à courant continu. Ce tableau énumère les paramètres électriques et mécaniques, leurs symboles, leurs valeurs numériques, leurs unités et leurs rôles dans le modèle.
Fichiers de codage supplémentaires : Fichiers complets de code source et de configuration permettant de reproduire les exemples du ventilateur et du moteur à courant continu. Les fichiers de codage supplémentaires comprennent le code du nœud formule LabVIEW, la configuration du serveur mandataire inverse Caddy, les fichiers XHTML d'interface frontale et les fichiers sources VI de LabVIEW utilisés dans ce protocole. Le document Code in LabVIEW Formula Node.docx contient le code du nœud formule pour les modèles de commande de position PID du ventilateur et du moteur à courant continu. Le fichier Caddyfile.txt contient la configuration locale du serveur Web et du serveur mandataire inverse. Les fichiers Fan_Automatic_UI.xhtml et Motor_Automatic_UI.xhtml contiennent la logique d'interface Web frontale basée sur les métadonnées. Les fichiers fengshan.vi et Motor.vi sont les fichiers VI LabVIEW de back-end pour les expériences avec le ventilateur et le moteur.Veuillez cliquer ici pour télécharger ce fichier.