$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
After completing the workflow described above, both the fan experiment and the DC motor PID position control experiment can be accessed through the automatically generated Web front end. A successful result is indicated by three observations. First, the Web page automatically generates input controls and output display fields according to the variable metadata returned by the RIP Server. Second, when the user changes an input variable on the Web page, the modified value is written to the LabVIEW back-end VI through the RIP interface. Third, the output variables calculated by the back-end VI are returned through RIP and refreshed on the Web page in real time. For the fan experiment, after entering http://localhost:8090/fan in a browser, the page automatically generates input controls and output fields from the RIP metadata, as shown in Figure 7. The input side includes Enable, PWM, Load, Tau, KMaxRPM, and Disturbance, whereas the output side displays SpeedRPM, TimeS, SteadyRPM, SpeedNorm, CurrentA, and PowerW. During normal operation, TimeS increases continuously, indicating that the back-end fengshan.vi is executing. When PWM is increased, SpeedRPM and SteadyRPM increase accordingly. When Load is increased, the fan speed decreases because the load reduces the steady operating speed. When Disturbance is adjusted, corresponding changes can be observed in SpeedRPM, CurrentA, and PowerW. These observations confirm that the Web-side inputs are transmitted correctly to the LabVIEW back end and that the calculated outputs are returned to the front end through RIP.
For the DC motor PID position control experiment, after entering http://localhost:8090/motor in a browser, the page automatically generates the corresponding controls and output fields from the RIP metadata, as shown in Figure 12. The input variables include Setpoint, Kc, Ti, Td, Disturbance, and Reset control, and the output variables include Position, Voltage, Time, and Measured angular velocity. When Setpoint is changed, Position responds to the new target value. When the PID parameters Kc, Ti, and Td are adjusted, the output response, control voltage, and measured angular velocity change accordingly, indicating that the parameter values entered on the Web page are correctly written to the LabVIEW back-end model and participate in the control computation. When Reset control is activated, the model variables return to their initial states according to the reset logic.
Browser-side failure and communication states are shown in Figure 13, Figure 14, Figure 15. Figure 13 shows a failed browser access case in which Caddy is not running. The browser attempts to access http://localhost:8090/motor but displays an ERR_CONNECTION_REFUSED message, indicating that the local proxy service is unavailable or is not listening on the selected access port. Figure 14 shows a RIP POST communication failure after the page has loaded. In this case, the browser console reports a 502 Bad Gateway error for the RIP POST request, indicating that the front end has reached the proxy address but the request cannot be successfully forwarded to, or processed by, the RIP WebService back end. In contrast, Figure 15 shows a normal browser-side communication state. The browser developer tools show successful page loading, RIP POST requests, and an active SSE request with expId=fan, indicating that the Web front end is communicating with the RIP WebService through the Caddy proxy and receiving real-time updates through the SSE channel.
Together, the successful fan and motor results and the browser-side diagnostic results demonstrate that the same metadata-based automatic UI-generation workflow can be reproduced for two different LabVIEW experiments. These results also provide observable criteria for distinguishing successful communication from representative deployment failures, while the corresponding troubleshooting procedures are discussed in the Discussion section.

Figure 1: Overall experimental system structure. The system consists of the LabVIEW back-end VI, RIP Server, Caddy proxy, and auto-generated Web UI. The LabVIEW VI provides model variables, the RIP Server reads VI metadata and variable values, Caddy unifies the access path and resolves cross-origin access, and the Web UI generates controls automatically. The Caddy name and logo are shown only to identify the Caddy Web server/proxy component used in the workflow. Please click here to view a larger version of this figure.

Figure 2: Front Panel of the fan VI. The Front Panel contains input controls for Enable, PWM, Load, Tau, KMaxRPM, and Disturbance and output indicators for SpeedRPM, SteadyRPM, TimeS, SpeedNorm, CurrentA, and PowerW. This screenshot was captured from the Front Panel of fengshan.vi in LabVIEW 2026 in the authors' own local experimental environment. No third-party user data or confidential information are included. Please click here to view a larger version of this figure.

Figure 3: Block Diagram of the fan VI. The fan model is implemented with a While Loop, Shift Registers, Enable logic, a Formula Node, and output indicators. This screenshot was captured from the Block Diagram of fengshan.vi in LabVIEW 2026 in the authors' own local experimental environment. No third-party user data or confidential information are included. Please click here to view a larger version of this figure.

Figure 4: Configuration page of fan.vi. The fan experiment is registered in RIP Configuration with the experiment name fan, the actual VI path, keyword information, description, and sampling frequency. This screenshot was captured from the RIP Configuration interface used with LabVIEW 2026 and RIP WebService in the authors’ own local experimental environment. No third-party user data or confidential information are included. Please click here to view a larger version of this figure.

Figure 5: Experiment ID settings and metadata-based UI-generation logic in the XHTML front-end files. The XHTML code screenshots were captured from Fan_Automatic_UI.xhtml and Motor_Automatic_UI.xhtml opened in Visual Studio Code. The fan and motor pages use the same metadata-reading and control-generation logic; only the experiment ID is changed to match the corresponding Name field in RIP Configuration. The XHTML code screenshots were captured from Fan_Automatic_UI.xhtml and Motor_Automatic_UI.xhtml opened in Visual Studio Code in the authors’ own local development environment. The code files were prepared by the authors for this protocol. No third-party user data or confidential information are included. Please click here to view a larger version of this figure.

Figure 6: Caddyfile configuration. The Caddyfile defines the local proxy access port, sets the front-end root directory, rewrites the /fan and /motor routes to the corresponding XHTML files, and reverse-proxies /RIP/SSE* and /RIP* requests to the LabVIEW/RIP WebService port. The Caddyfile configuration screenshot was captured from the Caddyfile opened in Visual Studio Code in the authors’ own local development environment. The Caddyfile was prepared by the authors to configure Caddy as the local Web server and reverse proxy. No third-party user data or confidential information is included. Please click here to view a larger version of this figure.

Figure 7: Web UI page of fan.vi. This Web interface screenshot was captured from the authors’ locally deployed fan Web page using Mozilla Firefox. The front-end page automatically generates input controls and output displays based on the variable metadata returned by the RIP Server. This Web interface screenshot was captured from the authors’ locally deployed fan Web page using Mozilla Firefox. The displayed controls and output fields were generated from RIP metadata in the authors’ local experimental environment. No third-party user data or confidential information is included. Please click here to view a larger version of this figure.

Figure 8: Front Panel of the motor VI. The Front Panel contains controls for Setpoint, Kc, Ti, Td, Disturbance, and Reset control, and indicators for Position, Voltage, Time, and Measured angular velocity. This screenshot was captured from the Front Panel of Motor.vi in LabVIEW 2026 in the authors’ own local experimental environment. No third-party user data or confidential information is included. Please click here to view a larger version of this figure.

Figure 9: DC motor PID position control model diagram. The diagram shows the signal path from setpoint error, PID control, voltage limiting, disturbance superposition, electrical dynamics, mechanical dynamics, and position updating to feedback. Please click here to view a larger version of this figure.

Figure 10: Block Diagram of the motor VI. The motor model is implemented with a While Loop, Shift Registers, a Formula Node, timing logic, and output indicators. This screenshot was captured from the Block Diagram of Motor.vi in LabVIEW 2026 in the authors’ own local experimental environment. No third-party user data or confidential information is included. Please click here to view a larger version of this figure.

Figure 11: Configuration page of Motor.vi. The motor experiment is registered in RIP Configuration with the experiment name Motor, the actual VI path, keyword information, description, and sampling frequency. This screenshot was captured from the RIP Configuration interface used with LabVIEW 2026 and RIP WebService in the authors’ own local experimental environment. No third-party user data or confidential information is included. Please click here to view a larger version of this figure.

Figure 12: Web UI page of Motor.vi. The front-end page automatically generates input controls and output displays for the DC motor PID position control experiment. This Web interface screenshot was captured from the authors’ locally deployed motor Web page using Mozilla Firefox. The displayed controls and output fields were generated from RIP metadata in the authors’ local experimental environment. No third-party user data or confidential information is included. Please click here to view a larger version of this figure.

Figure 13: Failed browser access when Caddy is not running. When Caddy is not started, the proxied local address http://localhost:8090/motor cannot be reached, and the browser displays an ERR_CONNECTION_REFUSED message. This failure symptom indicates that the local Caddy proxy service is unavailable or is not listening on the selected access port. This browser screenshot was captured using Mozilla Firefox in the authors’ own local testing environment and shows the failed access state when the local Caddy proxy was not running. No third-party user data or confidential information is included. Please click here to view a larger version of this figure.

Figure 14: RIP POST communication failure after page loading. The browser console shows a 502 Bad Gateway error for the RIP POST request. This result indicates that the Web page has reached the Caddy proxy address, but the request cannot be successfully forwarded to, or processed by, the RIP WebService back end. This browser console screenshot was captured using Mozilla Firefox Developer Tools in the authors’ own local deployment environment and shows a RIP POST 502 Bad Gateway communication failure. No third-party user data or confidential information is included. Please click here to view a larger version of this figure.

Figure 15: Browser-side communication status under normal operation. The browser developer tools show successful page loading, RIP POST requests, and an active SSE request with expId=fan. These requests indicate that the Web front end is communicating with the RIP WebService through the Caddy proxy and receiving real-time updates through the SSE channel. This browser developer tools screenshot was captured using Mozilla Firefox in the authors’ own local deployment environment and shows normal RIP POST and SSE communication. No third-party user data or confidential information is included. Please click here to view a larger version of this figure.

Figure 16: Single representative browser-console and process-level resource observation for the fan experiment. The screenshot was recorded during a local fan experiment test. The console shows metadata request/response time, metadata variable counts, metadata-based UI generation time, SSE connection opening time, and received SSE data. The task-manager view shows process-level CPU and memory values for the browser and LabVIEW processes at the time of capture. These values are descriptive observations from this individual test and are not replicated performance measurements or a statistical benchmark. This screenshot was captured from Mozilla Firefox Developer Tools and Windows Task Manager in the authors’ own local testing environment. Mozilla Firefox was used to record browser console output, and Windows Task Manager was used to observe CPU and memory usage for the browser and LabVIEW processes. No third-party user data or confidential information is included. Please click here to view a larger version of this figure.

Figure 17: Simultaneous access to the same RIP-based Web page from a desktop browser and a mobile browser. The fan experiment page is opened concurrently on PC and mobile devices, and both clients display the automatically generated controls and output variables. The desktop Web page was accessed using Mozilla Firefox, and the mobile Web page was accessed using a mobile browser in the same local network environment. The screenshots were captured from the authors’ own local testing environment. No third-party user data or confidential information is included. Please click here to view a larger version of this figure.
| Variable name | Data type | Input/Output | Physical meaning | Role in the model | Range/Setting |
| Enable | Boolean | Input | Fan run switch | Controls whether the model receives the PWM input. When True, u = PWM; when False, u = 0. | True / False |
| PWM | DBL | Input | Drive input | Determines the basic fan drive intensity and is the main input used to calculate the steady-state speed SteadyRPM. | 0-1, step 0.01 |
| Load | DBL | Input | Load coefficient | Describes the weakening effect of load on the steady-state speed. As Load increases, the steady-state speed decreases. | 0-1, step 0.01 |
| Tau | DBL | Input | Response time constant | Determines how quickly the fan speed approaches the steady-state speed from the previous state. | 0.1-5, step 0.1 |
| KMaxRPM | DBL | Input | Maximum speed | Sets the maximum speed allowed by the model and is used for speed limiting and normalization. | 500-6000, step 100 |
| Disturbance | DBL | Input | Disturbance input | Represents the effect of external disturbance or load fluctuation on steady-state speed, current, and power. | 0-1, step 0.1 |
| SpeedRPM | DBL | Output | Actual speed | Represents the current output speed of the fan and is updated through first-order inertial dynamics. | Calculated by the model |
| SteadyRPM | DBL | Output | Steady-state speed | Represents the theoretical steady-state speed under the current input conditions. | Calculated by the model |
| TimeS | DBL | Output | Run time | Represents the continuous run time of the model. | Calculated by the model |
| SpeedNorm | DBL | Output | Normalized speed | Represents the ratio of SpeedRPM to KMaxRPM. | 0-1 or calculated by the model |
| CurrentA | DBL | Output | Current | Represents the estimated model current, which changes with the drive input and disturbance input. | Calculated by the model |
| PowerW | DBL | Output | Power | Represents the estimated model power, calculated from the voltage constant and current. | Calculated by the model |
| Setpoint | DBL | Input | Desired position | Sets the position that the motor should reach and forms the error e with the actual position Position. | -3-3, step 0.1 |
| Kc | DBL | Input | Proportional gain | Adjusts the response strength of the PID Controller to the error. | 0-10, step 0.1 |
| Ti | DBL | Input | Integral time | Adjusts the integral action of the PID Controller and is used to reduce steady-state error. | 0-10, step 0.1 |
| Td | DBL | Input | Derivative time | Adjusts the derivative action of the PID Controller and is used to suppress overly rapid error changes and improve dynamic response. | 0-5, step 0.1 |
| Disturbance | DBL | Input | Disturbance input | Represents an external disturbance superimposed at the motor input, acting on the motor model together with the control voltage. | 0-10, step 0.1 |
| Reset control | Boolean | Input | Reset control | Triggers model state clearing so that position, angular velocity, current, error, and integral term return to their initial states. | True / False |
| Position | DBL | Output | Actual position | Represents the current angular position of the motor and serves as the feedback variable for PID control. | Calculated by the model |
| Voltage | DBL | Output | Control voltage | Represents the PID Controller output after voltage limiting and acts on the motor input. | Calculated by the model; limited to -24 to 24 V |
| Time | DBL | Output | Run time | Represents the continuous run time of the motor model. | Calculated by the model |
| Measured angular velocity | DBL | Output | Measured angular velocity | Represents the current angular velocity of the motor and is the mechanical state output of the motor. | Calculated by the model |
Table 1: Input and output variables used in the fan and DC motor examples. The table lists each variable name, data type, input/output role, physical meaning, recommended range, and step size.
| Parameter | Value | Physical meaning | Role in the model |
| R | 1 | Armature resistance | Represents the resistance term in the motor armature circuit and determines the voltage drop R × im in the current equation. |
| L | 0.5 | Armature inductance | Represents the inductance of the armature circuit and determines the current change rate. A larger L produces a slower current response. |
| J | 0.01 | Moment of inertia | Represents the motor rotor resistance to angular acceleration changes and determines how quickly angular velocity changes. |
| b | 0.1 | Viscous damping coefficient | Represents mechanical damping and describes the damping torque that hinders the increase of angular velocity during rotation. |
| Kt | 0.01 | Torque constant | Represents the proportional coefficient that converts armature current into electromagnetic torque. |
| Ke | 0.01 | Back electromotive force constant | Represents the proportional coefficient by which angular velocity generates back electromotive force and describes the feedback effect of speed on current. |
| Vmax | 24 | Maximum control voltage | Represents the limit of the controller output voltage and keeps voltage within the range from -24 V to 24 V. |
| dt | 0.001 | Discrete simulation step | Represents the time interval for each loop-based state update and is used to update current, angular velocity, position, and run time. |
Table 2: Internal parameters used in the DC motor PID position-control model. The table lists the electrical and mechanical parameters, symbols, numerical values, units, and roles in the model.
Supplemental Coding Files: Complete source and configuration files for reproducing the fan and DC motor examples. The supplemental coding files include the LabVIEW Formula Node code, Caddy reverse-proxy configuration, XHTML front-end files, and LabVIEW VI source files used in this protocol. Code in LabVIEW Formula Node.docx contains the Formula Node code for the fan and DC motor PID position-control models. Caddyfile.txt contains the local Web server and reverse-proxy configuration. Fan_Automatic_UI.xhtml and Motor_Automatic_UI.xhtml contain the metadata-based Web front-end logic. fengshan.vi and Motor.vi are the LabVIEW back-end VI files for the fan and motor experiments.Please click here to download this file.