It goes without saying that tuning PID loops is a dreaded task for a majority of controls engineers. Once you hit the sweet spot and fine tune your loop, knowing how to utilize certain abilities of a PID loop (more specifically, the Rockwell standard PID function block) can be extremely helpful throughout your development process.
On a recent project, I was tasked with tuning 10 PID loops for 10 barrel zones on an extrusion line. Luckily, I was able to pull my values from another extrusion line on site, plug them into the system, and go from there. However, this system didn’t simply heat up based off of a single heating element and then stabilize its temperature. Since the mass of each zone was fairly significant, this system also utilized 10 cooling solenoids to control the temperature and cool off the zones much faster. Therefore, it was crucial to understand when and how long to activate cooling versus heating. The simplest way to do this: Integrate your Rockwell standard PID function block with the Rockwell standard SRTP function block (or Split Range Time Proportional).
Split Range Time Proportional is fairly complex in theory and the math behind it can be pretty involved; but understanding how the block works is simple and can be a powerful tool. As mentioned before, I utilized it to control when a cooling solenoid turns on, and when a heating contactor turns on. Starting at the PID function block, the value of your CVEU (Control Value in Engineering Units) populates a percentage, which in turn, can be used to control your SRTP function block by mapping the CVEU to your ‘In’ parameter. Your ‘MinHeatIn’, ‘MaxHeatIn’, ‘MinCoolIn’ and ‘MaxCoolIn’ parameters are configurable to control heating and cooling based off of that ‘In’ parameter. For my application, I set the ‘MinCoolIn’ to 0, ‘MaxCoolIn’ to 50, ‘MinHeatIn’ to 50, and ‘MaxHeatIn’ to 100. These parameters align with your CVEU in that if your CVEU is 0%, then cooling is at 100% and heating is at 0%. When the CVEU then goes to 25%, cooling is now at 50% and heating is still at 0%. In contrast, when your CVEU is 100%, cooling is at 0% and heating is at 100%. When the CVEU goes to 75%, cooling is still at 0% and heating is now at 50%. Therefore, whenever a value of 0-50 CVEU is processed, the ‘CoolOut’ parameter is set to a 1 for the allotted CycleTime. Whenever a value of 50-100 CVEU is processed, the ‘HeatOut’ parameter is set to a 1 for the allotted Cycle Time (note: if our Cycle Time is 5 seconds, and we are pulsing at 50% full output, then the Cycle Time is now at 2.5 seconds. 100% full output would denote a full 5 second Cycle Time). Map the ‘HeatOut’ and ‘CoolOut’ tags to the conditions that must be met for your actual heating and cooling outputs, and now you have successfully integrated Split Range Time Proportional into your PID Loop.
Before I discovered that the SRTP function block existed, I was attempting to do all of this coding in flat ladder logic (which is probably what a lot of engineers do.) The problem: There are a number of moving parts in this logic that made this process very difficult. For example, I couldn’t simply add two different LIM blocks in front of my outputs (one that is 0% to 50% of the CV, and another that is 50% to 100% of the CV) and expect the loop to work properly since the output would be at its full capacity without any pulsing involved. The pulsing is where the split range calculation comes into play. Remember that 50% of your full output with a 5 second Cycle Time would allot a 2.5 second pulse. This value is consistently updating and must be precise- especially in this extrusion application. Any deviation in temperature can cause issues with the extrusion mixture and cause a hold on production. Creating a calculation that could handle this operation quickly became a very precise and tiresome task. On top of those requirements, the loop for this calculation had to happen at a quicker rate than the PID loop to rapidly adjust for heating and cooling swings, which was accomplished by putting all of the SRTP blocks in a separate periodic task. The incorporation of these two Rockwell function blocks streamlined the development process- bundling everything up into a nice, easy to understand flow.
Please share your experience with Split Range Time Proportional and how you utilized it in your code!
Starline & rawpixel