dual transmitter to same pid loop

Dear ALLt

I have two different transmitters with different ranges to be connected to same PID module via input selector module 

which selects which TR according a Digital input

The system is configured using classbased modules but i will change this PID module to classless one

I have two issues

1: i try to change parameter PID  pid1/pv_scale  using VB script  by let  pid1/pv_scale := '/ai1/out_scale but got garabage

2: changing  sp limits for pid to match used TR

thanks

3 Replies

  • In general, you should avoid using VB scripts at the console to effect your control module logic. VB Scripts are useful to automate Operator actions, but when it comes to control module logic, you would be best served designing the logic in the module and providing a trigger variable the operator can use to enable desired behavior.

    As for changing the PV_SCALE range, that is not possible while the PID block is in service. Also, changing the PV_SCALE can cause a bump in the PID output. There are different ways to accomplish anything. Changing the scale on the PID block can also change the loop dynamics and result in instability if the ranges are too different, or the tuning is agressive for a given range.

    If you have two transmitters that provide you with two different control options but only one control valve, you could use two PID blocks and place a selector on the output, allowing each PID block to be tuned appropriately and each PID to operate in its intended range. Stepping back and understanding the overall control narrative can reveal a different, and possible more appropriate, or aka, accepted control solution.

    But back to changing the scale, you could add a Dynamic Reference parameter in you module and wire this to the PID block's PV_SCALE parameter. Expose this parameter as an input on the PID BLock with Show Parameter on the context menu of the block. Now you use a CALC block to write the path of the desired AI/OUT-SCALE into this dynamic reference and the PID block will receive the new scale. The CALC block logic must evaluate the condition that drives which scale is set. Will it be based on the selected input in the Input Selector, or an Operator action?

    The question to answer is will the PID block accept the new SCALE range if it is in service? I've not done this so I don't know. I'd be cautious as I also don't know if upon accepting it, this would result in a different PV Error and cause a bump in the output. I would preclude any unexpected behavior by setting the PID to Out of Service in the CALC logic, one Actual is out of service, change the scale path and once the New Scale is seen in the PID, return it to service. You can store the previous Mode temporarily and restore to that mode as needed. Or the Operator ensures the loop is restored to the correct mode. I would also think this is not a frequent activity (such that it might be flipping back and forth and leave the PID in a perpetual Out of Service mode) Error checking is always more work than the actual logic you want to do.

    So basically, perform the task manually that you want to automate, and consider all the abnormal conditions, and make sure your CALC block has a solid Go No Go monitoring. Speaking of manually, if you try to change the scale manually on line, you first place the PID block out of service, adjust the 0% or 100% range and then back to AUTO or CAS. You could use this method rather than a dynamic reference.

    Andre Dicaire

  • I'm assuming you can't change the transmitter units to match. Are these the same EU and just different scales? (e.g. one is 0-75 DegF and the other is 25-100 DegF) Are they the same variable, but different EU? (e.g. One is 0-100 DegC and the other is 32-212 DegF) Are they the same variable? (e.g. both temperature vs one being temperature and the other being pressure) Are they supposed to be interchangeable (i.e., redundant) or are the scales selected based on how the process is running? (i.e., hot phase and cold phase)

    Tuning my be different if operating in different ranges. How and when is the selection made?

    One approach you might consider depending on your answers to the above ( assuming they are the same variable with just different scale) is to use an input selector and add a scaler between each variable and the selector. Set the IN_SCALE and OUT_SCALE to be identical in a suitable range and units, such that the output of the selector is identical. In the first example, both IN_SCALEs and OUT_SCALES would be configured as 0-100 DegF. In the 2nd case, you only need one Scaler. Choose whether you want the loop to operate in DegC or Deg F. Put the scaler between the transmitter with unselected units and set the IN_SCALE to match its units to match the transmitter and the OUT_SCALE to match the other transmitter. For the controller to run in DegF the IN_SCALE of the DegC transmtter would be 0-100 DegC and the OUT_SCALE would be 32-212 DegF.

    If they are really different properties like pressure and temperature, then I think you might want to configure a pair of controllers with a Control Selector or Override strategy.
  • In reply to Andre Dicaire:

    Thanks for support
    Actually this is done only during unit shutdown as we have one unit that can operate on two products. I have total 40 TR common for two products and other 20 TR (10 for each product ) so I need to switch between these 10 TR whenever I change product
    my target here is to use one PID for both TR
    Changing only range using same EU
    No issues in taking PID module out of service then switch ten revert back to in service
    I used TP01 as source to PV_scale then used TP02, TP03 to pass the required scales
    the problem here is in SP limits I can not change.
    Thanks