ELEC4632 Lab 2
Identifying a linear model for a water-tank system via MATLAB® and Simulink Desktop Real-Time® Toolbox
In this lab, you will be running a pre-built Simulink model in MATLAB real-time environment using Simulink Desktop Real-Time® Toolbox to collect input and output data from a Water-Tank (W-T) system. Then, using similar MATLAB code to what you have created for Lab 1, you should apply linear least square method to identify a second order discrete-time model for the experimental setup you are working with.
You must study the Water-Tank System section of the ELEC4632 Lab Guide to familiarize yourself with the experimental W-T setup in this lab.
Experiment description
As we mentioned in the ELEC4632 Lab Guide, the objective is to control the water level in one tank by regulating the pump attached to the same tank, while water can flow to the second tank and exits both tanks. In this case, input signal is the applied voltage to one pump (Pump#1), and output signal is the water level in the same tank (TANK#1). Wire connections should be already configured for TANK#1 and PUMP#1 (refer to Fig. 3 in ELEC4632 Lab Guide). However, in some W-T setups, wires may be connected to TANk#2 and PUMP#2 due to some technical issues on TANK#1 and PUMP#1.
Since our goal is to identify a linear model for the W-T system, we must first find a proper operating range for the system. The W-T system is naturally a nonlinear system, but it can be approximated by a linear model if it is operated within a specified range of input and output. Thus, we need to determine a range of input voltage that creates a linear output, and this can be achieved by a trial-and-error approach. In our case, the linear output range can be considered somewhere between 80-110ml as the minimum range and 240-280ml as the maximum range. However, the input voltage range corresponding to these levels are highly dependent on the valves positions. As mentioned before in the ELEC4632 Lab Guide, there are three valves in the W-T system that can be adjusted, two outflow valves (VALVE#1 and VALVE#2), and one in- between two tanks (MAIN VALVE) as shown in Fig. 1. Any small change in the position of each valve would dramatically change the dynamics and behavior of the system, and it would require different input voltage range to cover the above-mentioned output range. Finding the suitable linear input voltage range without putting some restrictions is very difficult and time consuming. Nevertheless, to facilitate the lab procedure, we limit the upper bound of input voltage range, Vmax to be 3V.
You will need to reduce the input voltage without changing valves positions until the water level goes down to around 80-110ml and stays there. That voltage would be the lower bound of input voltage Vmin. Detailed steps of finding linear input voltage range is given in the following section.
Fig. 1. Three valves setting of a W-T setup.
Lab Exercise and Procedure (2 marks)
To collect input and output data from the W-T setup, a Simulink model has been created which works with the Simulink Desktop Real-Time Toolbox in MATLAB. Follow the steps below to run the system and collect the real-time data for system identification.
Important: After step 4, perform system identification and model verification on the newly collected data using your own MATLAB the same way you did in lab 1.
1. Running the Simulink Model (0.2 marks, checked after 15 minutes)
a. The Simulink file is available on Moodle named WaterTankSysIden.slx. Download the file from Moodle and save it in the MATLAB default directory (Documents/MATLAB). This Simulink model contains multiple blocks as shown in Fig. 2. The model is configured to run with the sampling time of 0.75 seconds.
Fig. 2. (a) The W-T system model prepared for the purpose of system identification, (a) W-T subsystem.
b. Run the model by clicking on Run in Real Time button found at the top of the Simulink model below the toolbar after clicking on the tab “DESKTOP REAL-TIME” as shown in Fig. 3.
Fig. 3. Screenshot of Simulink file toolbar showing Run button.
c. Double Click on the Scope block to see the signals showing changes in the input pump voltage and output water level. The water level sensor generates a voltage signal ranging from 0-5V corresponding to water levels from 0-300ml. In some W-T setups, they may not be properly calibrated, and you may see a slightly lower range for output measurements.
2. Finding Linear Voltage Range (0.3 marks, checked after 45 minutes)
As you can see in the Simulink model in Fig. 2(a), there are two input signals connected to the W-T system block, and you can switch between them by on the Manual Switch block, even when you are running the model in real-time. The Step block has unit value by default. The Repeating Sequence Stair block can be configured to generate a series of pulses with different amplitudes. The Step block is connected to W-T system with a Gain block in its path that allows you to change values of input voltage signal during real-time operation. Just double click on Gain block to open its configuration page (you can change the settings and parameters of any block in Simulink by double clicking on them). We use Step block to run tests and find linear input voltage range, and Repeating Sequence Stair block to generate input signal for system identification after we find a proper linear input range. Two Saturation blocks are placed at the input of the W-T system block to protect the system from any voltage higher than the maximum nominal voltage of the pumps. Two Gain blocks (i.e. Activation Gain TANK#1 and Activation Gain TANK#2) are used for activating either or both pumps (here TANK#2 is not physically wired to the W-T setup). For safety and smooth operation of W-T setup, Saturation blocks are set to 0-3V. Now, make sure the Manual Switch is connected to Step block and follow the procedures given below to find the linear input range.
Usually, the WT valves need to be adjusted to make sure that the water level stays within the desired range. The following steps can be done while the Simulink model is running.
a. Start by applying Vmax = 3V. To do so, set the Gain block for the step input to 3. Wait till the water level in TANK#1 settles in-between 240-280ml. Then, write down the corresponding water level in the table below.
b. After finding the water level corresponding to Vmax, you need to find a proper Vmin which will make the water level come down to the region 80-110ml. Initially, set the Gain block for the step input to 2.2, and observe the corresponding water level. Every time you change the gain value, you need to wait until the water level settles down. Keep reducing the gain by
0.1V until the water level reaches the region 80-110mL. This obtained voltage is the lower bound of input voltage Vmin. Keep a record of the actual water level at Vmin in-between 80- 110ml.
c. Once you find suitable input voltage and output ranges, write them down in the table below.
3. Preparation for data collection (0.5 marks, checked after 1 hour 15 minutes)
a. Find the input voltage offset using the following formula and name it u_offset,
(1)
and use it in the Constant block named u_offset as shown in Fig.2(a). This input voltage offset will bring water level around the middle of the specified linear output range, which would be output offset and you must estimate it after recording the data as you did in Lab
1. The input offset is then added to input pulses coming from Repeating Sequence Stair block, which is considered to be offset-free input signal, to generate actual input voltage to W-T system.
b. The pulse values in Repeating Sequence Stair block should be chosen based on the linear input voltage that you obtained before. Make sure that offset-free input contains both high and low jumps between two consecutive pulse levels, but it should not exceed linear input voltage range, i.e.,
(2)
where u(k) is offset-free input voltage (from here on, we call u(k) as control input), umin and umax are the offset-free control input range. If the default values for offset-free input signal in Repeating Sequence Stair block are within your identified range in Eq. (2), you can use them.
c. The next step is to choose a suitable period for the offset-free input in Repeating Sequence Stair block. Inside the block, you have to set the Sample Time dialog box of the block as the period of the offset-free input signal. The default value is 230×0.75 = 172.5sec. To change this value just change the number 230, since the final value must a multiple of the system sampling time 0.75sec. To find an optimum period for the Repeating Sequence Stair block, run the model and make sure to connect the Step block to the W-T system and set the value of the Gain block to u_offset which you have calculated in the previous steps. Wait until the water gets stable around the middle of the specified linear output range (output offset). Then, raise the input voltage to Vmax = 3 and wait until the water reaches its maximum level around 240-280ml.
d. Once the water level remains steady, stop the model and use the Scope Zoom option or Curser Measurements tool to find the amount of time it took for the water to settle at its maximum level when you have raised the voltage to Vmax = 3. Divide that time by 0.75 and compare it with the default value of 230 to see whether you need to replace it or not. If it is greater than 230, you have to use your calculated period (i.e. set the period to your_value×0.75). Make sure not to use a very large number to avoid waiting for a long time when collecting the data. For example, if you get a value greater than 250, use 250 instead (i.e. the period will be 250×0.75).
Note that since we run the W-T system using low input voltage range (less than 3V), the settling time and time constant of the system are too long. This means that after any change in input voltage level, it would take a while for the water to settle on a specific level. Also, each W-T setup may have completely different characteristics. Thus, the default period of 172.5sec may not be long enough for the water level to settle, and incomplete output data would result in a wrong identified model.
4. Real-time input-output data collection (0.5 marks, checked after 1 hour 45 minutes)
a. Make sure all the proper settings are in place. Switch to Repeating Sequence Stair block plus u_offset block by clicking on the Manual Switch block. Run the model, and open the Scope to see real-time signals. Note that the initial voltage being sent to the system will be u_offset since Repeating Sequence Stair block will generate zero value within its first period (Why?). This time should be enough to raise water level to the middle of the linear output range you determined before (output offset).
b. Wait for at least two full sequences of input pulses to be sent to the system. Then, you can stop the program. You would have some results similar to what is shown in Fig. 4. The recorded data will appear in the Workspace with the name LogData in a Structure format. Moreover, the data is always saved in the default MATLAB directory (Documents/MATLAB). The name of the data file is SysIdenData. Each time you run and stop the Simulink model, a new data file will be generated with an incremented index. Thus, you would never lose any of your test results, i.e., for first run, the file name is SysIdenData_0.mat, second run SysIdenData_1.mat, and so on. The order for which the recorded data is saved in LogData is the same as the Lab 1 data that was given to you under the name SysIdenData_StudentVersion.mat. Therefore, you can extract the time vector, noise-reduced output, and input data as you did in Lab 1.
Fig. 4. Display of Scope block after running the Simulink model with suitable system settings. You can see the Curser Measurements as well.
5. Identifying the linear second-order model (0.5 marks, checked after 2 hour 30 minutes)
Important: Use your own MATLAB code to do system identification and model verification using the newly collected data the same way as you did in lab 1. Note that you will need to do some modifications on your code from lab 1 according to the following steps.
a. Before you use the raw data in your code from Lab 1, you have to either cut off the initial transient part of the data or the first sequence plus the transient part in the second sequence in order to get a good estimate of the output offset. The transient part is shown in Fig.5(a) with the blue double-sided arrow, the output offset levels are shown in green for three sequences (i.e., the response to input voltage 2.5V in Fig. 5(a)), and the first sequence is shown in Fig.5(b).
If you observe that the output offset level in the first sequence is close to the next two output offsets, you can just cut off the transient part. Sometime, you may observe that the output offset is slightly different in the first sequence after the initial transient part compared to the next two output offsets. In this case, it is better to cut off the first sequence all together in addition to the transient part from the second sequence. An example of cutting off the first sequence is shown in Fig. 6.
Remark
Step (a) is important because sometimes the initial period may not be long enough for the output to reach its offset. That would lead to underestimating the output offset. Also, during the operation, output offset can be different between sequences of the input offset, i.e., applying the same input at different times and getting slightly different output values. Moreover, during the initial sequence (Fig. 5(b)), some unexpected events can happen which make the data to be unreliable for system identification. Therefore, you must analyze data carefully, throw out the unusable part, and only keep the most reliable part of the data for system identification.
Fig. 5. Raw collected data in three repetitions, (a) Output data, (b) Input data.
Fig. 6. Cut-off data, (a) output signal, (b) input signal.
b. After analyzing your collected data and cutting off the unusable part, use the cut-off data in your code from Lab 1 to identify a second-order discrete-time model for your W-T system.
c. You must show the lab demonstrator in charge all the figures you were previously asked to plot in Lab 1 using your own collected data to get the mark for this lab.