Hi everyone,
I have a question regarding the implementation of a cascade control for temperature regulation and I hope I can get some help for the problem that I am facing. I got an extra project at my university to develop a new tuning procedure for multivariable PID systems using optimization techniques, and as a validation step, I am attempting to apply it to a heating tank process connected to a Delta V system. However, I am facing a modelling issue that I believe is related to the delta V implementation.
The tank has two inlet streams supplying cold and hot water, which I am attempting to control the level with the cold stream and the temperature with the hot stream. Because I faced problems with valve stiction plus low frequency disturbances in the flow rates coming from building supply, I decided to use cascade control in each loop in a way that the inner loop controls the flow. All sensors are not HART and FIELD_VAL_PCT is used. The thermocouple is Type J from Omega Engineering and the level is measured using a Differential Pressure transmitter.
After running few experiments in the unit, I built a SIMULINK model and simulated the controlled process considering two PI master controllers, which matched the closed-loop response of level quite well but failed to describe the temperature. The hot water flow rate had a initial kick due to the proportional action but then it started to slowly increase as almost a straight line pattern. After reading a similar thread in this website, I thought the mismatch was caused by the implementation differences in the PID algorithm used in MATLAB and Delta V to handle reset windup. But all BKCAL_IN and BKCAL_OUT signals were tagged as "GoodCascade" during the experiment and I believe the integral action was not being turned off (Please correct me if I am wrong). AIso, I set the OUT limits the same as ARW ones for both inner and outer loops; however, none of them were crossed.
When I further analyzed the temperature data retrieved from the delta V, I realized that as soon as I put the temperature master loop in auto mode the noise in signal disappeared and a given value of temperature was held for intervals ranging from 5 sec to 8 sec. Also, plotting the data showed a trend that looked like small steps while in open-loop the noise was very clear.
My question: Could this problem be related to the thermocouple resolution, scan rate, or ARW? I've been investigating this for weeks and I could not find a good advice anywhere. I would really appreciate your help on this issue.
Best Regards,
Eugenio
In reply to James Beall:
James
Thanks so much for your reply and I really appreciate your help. Regarding the noise issue, I actually looked to the wrong the section of the data by mistake and I confused the region where I turned on the mixer with where I put in auto. The random variation was smoothed out after I started the mixing and not when I put the controller in auto. Sorry about that.
James: Please find attached the requested files, I am also sending a excel files with a portion of data that I collected other. It shows the constant value of T for a long interval. I built the cascade structure within the same module. A scan rate of 1 sec is applied to both modules and blocks within it. There are few things that I should point out:
1) I had major issues tuning the inner PID for the temperature loop and it is not near optimal due to major hardware issue with this experimental unit. The valve is oversized and has a stiction issue. Also, as I mentioned before, the hot water supply is connected to the whole building and major disturbances were affecting the system in a way that under complete manual mode the flow rate changed severely for a constant valve %. Therefore, I could not identify a model to use the lambda-tuning or other techniques. So I had to do the tuning using trial-and-error, which was a lot of work.
2) To minimize the stiction problem, I used the derivative action with filter to allow some noise to affect the system and cause the valve to constantly move in high frequency and avoid it to get stuck. The tank has good inertia and these oscillations are smoothed out before affecting the temperature (Correct me if I am wrong). The tuning for inner PID for the level module worked quite well but the temperature is much more affected by those hardware and external disturbance issues and the performance is not very good, even though it is the best that I could get after the experiments. I tried other features in Delta V such as Deadband, Nonlinear Gain, etc. but nothing changed much plus I would not be able to reproduce those features in MATLAB.
Regards,
The fhx files can be downloaded from the link: https://drive.google.com/open?id=1krjYUENlHYRbb2X-KL-558d4KBIvvjE-
In reply to Paul Hughes:
I found the problem after talking with someone from Emerson in Canada, I got confused with the definition of proportional gain in the algorithm used in Delta V. The Kc that should be set in the PID block is a normalized value Kc (Delta V) = Kc (EU units) * (Range of PV)/(Range of Controller Output) However, I was putting the Kc that I calculated in Engineering Units directly in the bock. After making the modification in the MATLAB code I could match the data. Thanks everyone Eugenio
In reply to Eugenio Turco neto:
Andre Dicaire
In reply to Andre Dicaire:
In reply to SteveWJ:
Eugenio,
Sorry for the delay, I was busy at the Emerson Global Users Exchange last week! Did you make any forward progress on your application?
Good info from all the responders!
It sounds like the valves you are using don't have positioners which means they will have a "dead band" (per ISA S75.25, the magnitude of reversal of the PID %OUT of the PID required to produce a response) of at least 5% and could be as much as 25%. Thus, your choice to add flow loop as the secondary loops for your temperature and level loops is good. Though I prefer a high performance digital valve positioner (e.g. Fisher DVC) on all control valves, a fast loop like flow "has a chance" to perform reasonable well without a positioner. However, the tuning of the flow controller must match the process without excessive PV filtering. A large filter like 20 seconds will set the dominant time constant for the typical flow loop and will require a slow Reset time of 20 or more seconds. Thus, you will not get the fast response needed for good control. 1-3 seconds of filter time should be sufficient (if not, find out why) for noise rejection and the reset time will be on the order of 2-3 seconds but not smaller than the filter time. Derivative action is used for significant secondary lags and is not usually used on flow loops. For a tutorial on tuning self-regulating loops like flow loops, see my article in the ISA Intech online magazine at https://www.isa.org/intech/201606basics/ .
Temperature loops often, but not always, have "second order overdamped response and thus benefit from derivative action. Sometimes that have an integrating response, often with a secondary lag. See the following ISA articles for more information on tuning such loops. https://www.isa.org/intech/201604basics/ https://www.isa.org/intech/201610web/
It is rare for Level loops to need derivative action (you mentioned the use of derivative on the flow loops). Level process most often have an "integrating" response which do not benefit from derivative action. However, there are few cases like dearatior tank level and boiler drum level that can exhibit an "integrator plus lag" response which can benefit significantly from derivative action. Again, see this ISA article for the integrator plus lag response. https://www.isa.org/intech/201610web/
I hope this helps! Keep us informed on your progress and reach out with any additional questions!