How to model PI flow control with throttling (butterfly) valve in hydraulic centriful pump Simscape/Simulink model?
11 次查看(过去 30 天)
显示 更早的评论
I want to model PI-controlled butterfly throttling valve to control the flow. The control variable is an early flow measurement. If this value generates a negative value when subtracting this from the setpoint, the valve must open up a bit. If this error is positive, the valve should close some more. The valve orifice has a maximum diameter of 0.19m, and is the inverse of the valve disk diameter as the disk regulates the flow by opening and closing. The control segment of my model is shown below:
For a certain valve I have about as much data as I need:
- Kv value vector over valve opening in degrees, with an approximation by formula . See plot below for normalized values.
- Maximum diameter of orifice, 0.19 m
- Pressure drop can be read from model
I have two initial questions:
1)
What is exactly meant with control member position vector? I thought this is a vector the valve disk moves which goes from 0% (0 m, fully open) to 100% (0.19 m, fully closed) that corresponds to either the orifice area vector, or the pressure drop vector 'dp' and volumetric flowrate table 'q(s,dp). However, in the help guide it says that physical signal at port S is compared to the control member position vecter. I do not understand how this position of the member, which in my case is the diameter of the valve disk, can be compared to an PI-tuned error signal from the process. Furthermore, in the linear option, 'Control member position at closed orifice' is equal to 'Control member travel between closed and open orifice' are both equal to the changing diameter of the disk, so why do I need to input them both?
2)
With the known variables, what would be the best way of accurately inputting the data for an accurate butterfly valve model?
4 个评论
回答(1 个)
Sam Chak
2023-5-27
编辑:Sam Chak
2023-5-27
Hi @DB
Due to the static nonlinearity of the valve characteristics, it is possible to find an inverse function for the valve input that allows the flow output to respond in a linear fashion. Consequently, you should be able to design the PID controller in a linear fashion.
Update: Based the provided data, you can use the fit() function from the Curve Fitting Toolbox to fit a desired curve (math model) or surface to data. Since you used a rational function previously, I also selected the rational function. It seems that a 2nd-degree rational function (rat22) can fit the data.
% Original data Kv
x1 = linspace(0, 100, 10);
y1 = [0 0.1999 2.9188 8.2767 15.5538 25.9496 41.1435 60.6557 82.4870 100.0000];
[fitobject, gof] = fit(x1', y1', "rat22")
The R-squared (coefficient of determination) and the plotting result confirms that the 2nd-degree rational function fits the 10-point data of very closely.
% Approximated Kv
x2 = linspace(0, 100, 10001);
y2 = (18.15*x2.^2 + 1259*x2 - 7800)./(x2.^2 - 190.8*x2 + 1.207e4);
figure(1)
plot(x1, y1, '.'), hold on
plot(x2, y2), grid on, hold off
xlabel('Valve Opening, %'), ylabel('Flow, %')
legend('data K_{v}', 'approx. K_{v}', 'location', 'southeast')
From the approximated function, you can use the finverse() function to compute the inverse of function , such that . In short, this g(x) is the inverse valve characteristics.
syms x
f(x) = (18.15*x^2 + 1259*x - 7800)/(x^2 - 190.8*x + 1.207e4);
g = finverse(f);
simplify(g)
Physically, it implies that if a certain percentage of flow is desired, the we can use the inverse function to calculate required percentage of valve opening that allows the actual flow output to respond in a linear proportion to the reference .
% Inverse valve characteristics
u = (95.4*(x2 + 6.59853))./(x2 - 18.15) - (0.1*sqrt(-296884*x2.^2 + 3.31379e7*x2 + 5.3784e7))./(x2 - 18.15);
y3 = (18.15*u.^2 + 1259*u - 7800)./(u.^2 - 190.8*u + 1.207e4);
figure(2)
subplot(2, 1, 1)
plot(x2, y2), grid on
xlabel('Valve Opening u, %'), ylabel('Actual Flow K_{v}, %')
subplot(2, 1, 2)
plot(x2, u), grid on, ylim([0 100])
xlabel('Reference Flow K_{v, ref}, %'), ylabel('Required valve opening u, %')
figure(3)
plot(x2, y3), grid on, ylim([0 100])
xlabel('Reference Flow K_{v, ref}, %'), ylabel('Actual Flow K_{v}, %')
6 个评论
Sam Chak
2023-5-30
Hi @DB
It is okay to explore things that you want to test with. That's how we learn things until we find a better one.
I'm unfamiliar with Simscape, because I was traditionally trained to apply pure math to describe objects statically and processes dynamically. However, Simscape has a comprehensive of library blocks for a variety of industrial-oriented and engineering stuff. Students tend to learn things relatively easier with Simscape because the components are easily idendified and they can connect the equipments required for a particular process.
When it comes maniputing the process so that the desired behavior is achieved, it is a different level because the knowledge about the equipment and the process are required. For some processes, it is possible to analytically determine the actuation signal required to achieve the desired result. Otherwise, tuning by AI and auto-optimizer are mostly preferred by students if procedure is fast and accurate. Unfortunately, some tuning results are difficult to be interpreted by humans.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Upgrading Hydraulic Models to Use Isothermal Liquid Blocks 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!