Will OUT_LO_LIM be ignored or overwritten in Local Override mode?

I have searched around a lot for this but the answers seem unclear.

I have a control valve (0-100% open) which controls steam output to the heat exchanger of our main distillation tower. During normal operation, this valve should never close entirely, and so the OUT_LO_LIM in the PID is set to 5%

In case of an emergency shutdown however, the valve MUST be closed entirely, as according to our HAZOP. There is already a tracking condition on the PID for this. I read in a different topic that while TRK_VAL will not override the OUT_LO_LIM parameter, it will instead ignore any set limits entirely. Is this true?

In other words, if my control valve is forced into local override mode by an emergency shutdown, and TRK_VAL is set  to 0%, will it close entirely, even if OUT_LO_LIM is set to 5%?

  • A properly designed ESD system should not depend on a 4-20 mA signal to a control valve. Ideally, a separate discrete valve is used. Beyond that, it is common to add a solenoid valve on the air line to the control valve. Then the DO is deactivated on an ESD and you are covered as the valve will close regardless of what the 4-20 says.

    If neither of those options are possible, I would use whatever sets TRK_IN_D to also set OUT_LO_LIM to 0 on a trip and then back to 10 when it clears. I do not see any built-in options on the PID block.

    Something like the following.  Just be sure XFR1/IN_1 and IN_2 have good status.  Also set BAL_TIME to zero.

    Edit 1 - Add screenshot.

  • In reply to Douglas Crowder:

    I tested the operation of the PID tracking on a test system and confirmed that the PID tracking does not override the OUT_LO_LIM; with TRACK_IN_D set to TRUE the PID block OUT value is driven to OUT_LO_LIM, not TRACK_VAL.

    I agree that the ESD system should be designed so that an alternate solution is not necessary.

    I considered an alternate solution involving a CALC block between the PID and AO blocks to drive the CAS_IN of the AO block to zero based on actual mode of LO, but realized the "side effects" could be a problem. For example, the DeltaV Tuner drives the actual mode to LO during the test for the process dynamics.

    Other possible side effects could also be investigated.
  • In reply to JDWheelis:

    I suspected as much.

    I appreciate Douglas' advice about a discrete valve or a solenoid in the air line. I had thought of it and the discrete valve would definitely be preferred, but is a costly modification. I will offer some possible solutions and see what our Process Engineer thinks about it. Thank you
  • In reply to JDWheelis:

    What we have done when we need this functionality is to have the OUT_LO_LIM wired from a Transfer (XFR) block. IN_1 is the normal OUT_LO_LIM. IN_2 is "0". Wire the same signal that you have wired to TRK_IN_D to the Transfer Block's SELECTOR parameter. In normal operation, the normal OUT_LO_LIM applies. When TRK_IN_D becomes true, OUT_LO_LIM is set to 0. When TRK_IN_D_ becomes false again, OUT_LO_LIM returns to the normal value.
  • In reply to SBPosey:

    Great idea! Like the screenshot above?

  • In reply to JDWheelis:



    The below code may help you if you want to use a CALC or ACT block:

    IF DOWNLOAD := TRUE THEN
    OUT_LO_LIM (local parameter) := PID1/OUT_LO_LIM;
    DOWNLOAD := FALSE;
    ENDIF;

    IF MODE.TARGET := LO THEN
    PID1/OUT_LO_LIM := 0;
    ELSE
    PID1/OUT_LO_LIM := OUT_LO_LIM; (local parameter)
    ENDIF;
  • In reply to SBPosey:

    Looks good. clean solution
  • In reply to vitthalrathod:

    There are many ways to solve this issue, each introduce other possible unintended consequences. Wiring to the OUT_LO_LIM means you can no longer tune the parameter normally.

    Some other thoughts would be to add the transfer block after the PID on the Out connection to the AO/CAS_IN. The PID would track to 10%, but the AO would be forced to 0% directly. This would leave the OUT_LO_LIM unchanged and tunable to desired low limit.

    Note that the PID can be set to not be limited in MAN. Shedding the PID Target mode to MAN would allow the Track IN to drive to 0% out. Again, this allows the OUT_LO_LIM to remain tunable as always. But an operator would then be able to close the valve in manual. Changing mode could impact the current SP if SP tracks PV in MAN is enabled. You have to think about what the Mode and SP should do when you come out of the track condition.

    A CALC expression could capture the current Lim value, set value to 0 and restore the previous value coming out of track. This would allow normal tuning of OUT_LO_LIM when not in Track. But the code is a bit more complicated.

    (Note: If you store a value in a calc block using an internal variable, that value is not transferred to the standby, and if a switchover occurs, the internal variable will be initialized in the new active. You must store such a value in a module parameter so that the stored value is transferred and available to the expression when it is recalled.)

    I'm leaning to having the XFER block on the PID/OUT wire to force value to 0% to the AO block when TRACK IN is active. That leaves the OUT_LO_LIM free to be tuned as needed. The PID goes to AUTO/LO on track in true to indicate interlock is present. Field signal goes to 0%. The OUT Bar graph will show 10% due to limit. You could point the OUT bargraph and value to the AO/OUT parameter when in LO through visibility. You need the PID/OUT bargraph and value to allow operator control in MAN.

    Each has its pros and cons.

    Andre Dicaire

  • In reply to Andre Dicaire:

    Good idea Andre - Putting XFR1 between PID1 and AO1 is like software mimicking a solenoid on the air line. I usually don't worry about OUT_LO_LIM being adjusted as this is rarely done, and done by engineers in Control Studio when it is. But your suggestion leaves that functionality.
  • Assuming that the PID output is connected to an AO block (in same module as the PID block or another module via reference), an option is to interpose a BIAS GAIN block in between the PID and the AO block. Then that 5 % can be set as Bias Gain SP regardless if PID out is 0.

    Also note that the Bias Gain block provides it's own TRACK_VAL and TRACK_IN_D so it is possible to add tracking conditions outside the PID for very specific cases. For example,In this case that 5 % can be set as BIAS GAIN TRACKING value. So far, adding the Bias Gain provides to different ways to address this.
    Finally, becasue the Bias Gain provides the BKCAL parameters, wiring the BKCAL_IN and BKCAL_OUT parameters between involved function blocks can be done This mightbe specially important to avoid unexpected behavior due to the internal function blocks logic (for example unexpected recovery behavior after module download).