I work at a food processing plant that requires that we hold a liquid product at a certain temperature while it is travelling through piping.

A Rockwell PIDE controller controls this process, which is essentially a heat exchanger that opens a valve (0-100%) to release steam, heating the product in a triple tube heater to its desired set point. If the product does not reach this set temperature by the time it reaches the end of the hold pipe, it is sent back to the product hold tank to be recirculated.

The main problem: the current system is overheating our product by ~20°F, which is essentially burning it, incurring build-up on probes, and affecting quality.

enter image description here

Above is a brief drawing of what the system looks like. TT-130 is the incoming product temperature, TT-132 is what the product is being heated to by the hot water, TT-135 is the hot water temperature (which is controlled by opening/closing a valve), TT-133 is what the finished product temperature is (if the temperature set point is reached, release to bottles; if not, recirculate).

Currently, our PID controller is set to Kp = 4, Ki = 4, Kd = 0. Clearly there is some overshoot, and because the process is so slow and delicate, it is not in our best interest to use trial and error to figure out the best parameters. Below is a plot I created in MATLAB to try and model our plant. The empirical data is normalized (TT-132 "Triple tube heater temp"/Set point) and shows many oscillations. Note the time (in seconds); the initial rise time is approx. 10 minutes.

enter image description here

The empirical plot includes the current controller settings (p = 4, i = 4, d = 0) during a start up period. The blue graph is a first-order-plus-deadtime representation of the heat exchanger (taking 't' at 28.3 % and 63.2% of the final value then finding τ/θ to create a transfer function as the plant model). The following is the code used to execute the green plot, which is my attempt at using an ITAE PID controller alongside the calculated transfer function.

enter image description here

Obviously this response isn't exactly desirable for our system.. I want to remove the overshoot (from 220°F to our setpoint of 200°F) without the risk of using a trial and error method.

Am I modelling this plant properly? What is a strategy I could employ that I could use to create an accurate plant model? Do IAE/ITAE formulas work for such a slow process? I noticed that the Ti and Td values were fairly large, while Kc was always <1.

Any guidance on this topic would be fantastic; controls are not my strong suit.

  • \$\begingroup\$ Not to detract from the heavier duty answers below, but "seat of the pants" control tuning for me usually starts with PD to get the desired step response and then add I to achieve steady state tracking. Also does your controller feature an anti-windup integrator? Control theory is nice and all but has some limitations when your control effort saturates, and your energy addition rate is not equal to your energy subtraction rate (heating power != cooling power) \$\endgroup\$
    – Bryan
    Commented Jul 28, 2022 at 2:45

2 Answers 2


Thermal systems are really hard to tune up, and often the solution involves not just PID tuning but also physical modifications, like changing sensor position, adding insulation, adjusting the heating power etc. I've outlined some issues and potential solutions in this answer before.

Having said that, if your control loop continuously overheats the product by the same 20 degrees, the simplest solution could be changing system setpoint. Note that doing so will not affect the dynamic response of the system in any way.

I am not familiar with your controller, but most of them do have anti-windup provisions. Anti-windup is extremely important in slow systems, so make sure it is configured properly in your controller.

Another solution could be adding a variable manual valve to the steam pipe and using it to fine-tune the heating power. This will reduce the proportional band and should simplify PID tuning.

Finally, couple words about your system as a whole. It seems it uses TT-132 (product temperature after heat exchanger) to control water heating by the steam. This is an awful arrangement, because:

  • Water has high heat capacity, so it cannot be heated quickly. as a result your control loop has long delay affected by both steam-water and water-product heat exchangers.
  • Ignoring the thermal losses, the only way to cool water is to pass cold product through the exchange. This means that overheated water will continue to burn product until it cools down.
  • Finally, the required amount of heating depends on product flow. If the bottling process slows down a little it almost certain that the product will be burned until the flow restored or water cools down. This, of course, depends on the recirculation design, i.e. if you keep the flow constant by sending the excess of the heated product to holding tank then this is not an issue.

I'd suggest adding a bypass loop from TT-133 to TT-130 with a valve controlled by product temperature at TT-133. If the product is cold it flows back to the heat exchanger. If it is at right temperature it is allowed to go to bottles with excess recirculating to hold tank.

The idea is to reduce the product volume in the plant process, which should result in faster heating and consequently in less overshot of the water temperature.


You have a pretty complex problem. It is possible that it can't be solved with a single-point PID loop. Here's how I would go about it:

First, you must set the parameters that you can control. Any loop will be designed to hold your output temperature in some finite range, so what is the tolerance of your end product temperature? Also, since this is a bang-bang system, at what minimum period are you going to open/close the valve? Since you are running a proportional system, the resolution of available duty cycles can be calculated. Increasing or decreasing this duty cycle is how you will control your loop output. You should verify that the valve's minimum "on" time is short enough to cause a small change in output temperature an order of magnitude less than your acceptable output temperature range, while not so small as to wear out the valve or overheat the solenoid from constant open/close.

Now list your inputs and their intuitive contribution to the problem. For example, the duty cycle might need to be proportional to the difference between your input temperature and output temperature, implying that a Kp is needed on this term. The same is true for flow rate, if it can vary. However, you might not want to react too quickly to a sudden drop (high differential) in input temperature, which could result in applying too much heat to the fluid making its way through the loop (if it is moving slowly). So you would want a Kd to counteract rapid changes in the difference temperature. You would also want a Kd on your target temperature value, and a Ki to get you to mid-range. You will likely have to have different value K's for heating (valve on) vs. cooling (valve off), because your system does not lose energy at the same rate that you can add it.

There is really no way that I can think of to tune this quickly without having some overshoot, so if possible, use another fluid (water?) that has similar specific heat but will not foul your system. You'll have to run different scenarios (constant and changing flow rates and input temperatures). Start out verifying that your valve "on" time is sufficiently short, then find Kp's that settle near your target temperature (with some over/undershoot). Find Kd's to knock down overshoot, then finish with Ki's if necessary to get you right on target.

Good luck!


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.