Predict vs PredictPro for APC - A Case Study

I had the privilege to help a customer of mine learn to use DeltaV Predict a few years ago and gained a good friend in doing so.  He recently asked me to help him with a new problem he was trying to solve. 

The process problem is control of the removal of SO2 from a waste gas stream, a frequent requirement in Oil & Gas, Metals processing, and the tail end of sulfuric acid production.  There are 2 common ways to remove SO2.  One is by absorption, typically using an amine solution as the absorbent (more common for removing H2S). The other, and the one used in this case, employs an aqueous ammonia solution to react with the SO2, which actually produces the fertilizer ammonium sulfite as a by-product.  The process is essentially a multistage neutralization.  The SO2 in the gas is being consumed by an aqueous ammonia solution.  Fresh ammonia solution is added to 3 stages.  The acid gas passes serially through all stages and the treated gas is exhausted through a stack.  The plan was to use Predict and the problem was defined with the following variables:

If you are not familiar with Predict, it requires a square problem definition.  That is, the number of CVs must equal the number of MVs.  But in this case, there were 3 MVs and only 1 CV.  There were some workarounds, but none were very desirable.  Two of the constraints could be converted to CVs.  The problem with this is that there is no desired setpoint for the pH in any of the stages.  Turning the pH into a CV would require a setpoint and could limit the controller compared with giving the controller the freedom to work within a range of pH values.  There is the notion of a shadow CV, in which the case the MV is tied back as a CV.  The actual MV is a setpoint to a PID loop.  The shadow CV could be the same exact setpoint value, but is usually the PV of the PID loop or in some cases the PID loop output.  A shadow CV works well when it is desirable to maximize or minimize a stream, because it can be set up as an optimized variable.  But in this case, there are 2 flows to worry about and there was no desire to maximize or minimize the NH3 to any particular stage.  A third approach is to create 2 new CVs.  These could be the relative ratio or difference of NH3 addition to the different stages.  For example, it may be desirable to add most of the NH3 in the first stage as sort of a course control.  The third stage might be treated as a trim stage and little NH3 would be added there.  In this case, CV2 would be the Stg 1:Total NH3 addition ratio and might be set at 0.6.  CV3 might be the Stg 3:Total NH3 addition ratio and might be 0.1.  This would drive the second stage NH3 addition to be 30% of the total NH3 feed without an explicit variable.  While this would require the addition of some calculations for Total NH3 and the stage fractions, these calculations would be quite straight forward and easy to configure.  One could imagine alternative ways to develop the new CVs.  Perhaps it would be more desirable for each NH3 addition to be equal.  In this case, we might use a difference calculation.  We would create a calculation for Stg 1 NH3 – Stg 2 NH3 and another calculation for Stg 2 NH3 – Stg 3 NH3.  The target for each of these would be set to zero.  Another approach might be to do the same with the pH values in the stages.  We would expect the pH to rise as the acid gas passes through each stage and more of the acid gas is neutralized.  So we might set differential pH targets rather than absolute pH targets.  But this approach was also not desirable.  There really was no target difference or ratio and while it would work, it adds more complexity for the operator.

Predict is a APC great tool, but is really targeted at replacing advanced regulatory control strategies currently configured with feedforward and override techniques.  The better choice in this case is to use PredictPro instead of Predict.  If you are not familiar, PredictPro can have up to 40 process inputs and 80 process outputs, far more than required in this problem.  But more importantly, the process inputs can be any combination of MVs and DVs and the Process Outputs can be any combination of CVs and Constraints.  There is no need to have the same number of MVs and CVs.  Furthermore, PredictPro has a built-in LP optimizer which can take advantage of the potentially extra degrees of freedom.  For instance, it might be desirable to minimize the total consumption of NH3.  This could be achieved by adding a minimize objective to the NH3 additions or by adding a Maximize objective to the stack gas SO2.  In either case, NH3 addition would be reduced until either the stack gas SO2 was at constraint and/or one of the MVs or Constraint variables hit a constraint limit.  Since the problem would often likely have 2 extra degrees of freedom in the latter case, these can be handled in one of 2 ways.  One way would be to configure the MVs to have Preferred Settling Values (PSV), which would be reached if they could be without violating MV or Constraint limits.  Another approach in the case where it is desirable to add approximately equal amounts of NH3 to each stage would be to use the Equalize objective on each of the MVs.  Instead of targeting an explicit NH3 flow, the controller would use the extra degrees of freedom to try and equalize the NH3 flows.  It is helpful to think about your degrees of freedom when using PredictPro.  Since the LP is always active, it will search out constraints.  When there is an extra degree of freedom, it tends to drive one or more variables toward their constraints, which may not be what the operator is expecting.

Ultimately, the decision was made to try PredictPro for the first time in this plant.  Stay tuned.  After it is implemented, I will try to report on the results.  Does anybody else have any interesting or novel experience or opinions on using Predict vs PredictPro?  I'd love to hear about it.