Ramp/Soak (RMPS)
This information applies to the
CompactLogix
5370, ControlLogix
5570, Compact GuardLogix
5370, GuardLogix
5570, Compact GuardLogix
5380, CompactLogix
5380, CompactLogix
5480, ControlLogix
5580, and GuardLogix
5580 controllers.The Ramp/Soak (RMPS) instruction provides for a number of segments of alternating ramp and soak periods.
Available Languages
Ladder Diagram
This instruction is not available in ladder diagram logic.
Function Block
Structured Text
RMPS(RMPS_tag,RampValue,SoakValue,SoakTime);
Operands
Function Block
Operand | Type | Format | Description |
---|---|---|---|
RMPS tag | RAMP_SOAK | structure | RMPS structure |
RampValue | REAL | array | Ramp Value array. Enter a ramp value for each segment (0 to NumberOfSegs-1). Ramp values are entered as time in minutes or as a rate in units/minute. The TimeRate parameter reflects which method is used to specify the ramp. If a ramp value is invalid, the instruction sets the appropriate bit in Status and changes to Operator Manual or Program Hold mode. The array must be at least as large as NumberOfSegs.
Valid = 0.0 to maximum positive float |
SoakValue | REAL | array | Soak Value array. Enter a soak value for each segment (0 to NumberOfSegs-1). The array must be at least as large as NumberOfSegs.
Valid = any float |
SoakTime | REAL | array | Soak Time array. Enter a soak time for each segment (0 to NumberOfSegs-1). Soak times are entered in minutes. If a soak value is invalid, the instruction sets the appropriate bit in Status and changes to Operator Manual or Program Hold mode. The array must be at least as large as NumberOfSegs.
Valid = 0.0 to maximum positive float |
Structured Text
Operand | Type | Format | Description |
---|---|---|---|
RMPS tag | RAMP_SOAK | structure | RMPS structure |
RampValue | REAL | array | Ramp Value array. Enter a ramp value for each segment (0 to NumberOfSegs-1). Ramp values are entered as time in minutes or as a rate in units/minute. The TimeRate parameter reflects which method is used to specify the ramp. If a ramp value is invalid, the instruction sets the appropriate bit in Status and changes to Operator Manual or Program Hold mode. The array must be at least as large as NumberOfSegs.
Valid = 0.0 to maximum positive float |
SoakValue | REAL | array | Soak Value array. Enter a soak value for each segment (0 to NumberOfSegs-1). The array must be at least as large as NumberOfSegs.
Valid = any float |
SoakTime | REAL | array | Soak Time array. Enter a soak time for each segment (0 to NumberOfSegs-1). Soak times are entered in minutes. If a soak value is invalid, the instruction sets the appropriate bit in Status and changes to Operator Manual or Program Hold mode. The array must be at least as large as NumberOfSegs.
Valid = 0.0 to maximum positive float |
See
Structured Text Syntax
for more information on the syntax of expressions within structured text.RMPS Structure
Specify a unique RMPS structure for each instruction.
Input Parameter | Data Type | Description |
---|---|---|
EnableIn | BOOL | Enable input. If false, the instruction does not execute and outputs are not updated.
Default is true. |
PV | REAL | The scaled analog temperature signal input to the instruction.
Valid = any float
Default = 0.0 |
PVFault | BOOL | Bad health indicator of PV. If true, the input is invalid, the instruction is placed in Program Hold or Operator Manual mode, and the instruction sets the appropriate bit in Status.
Default is false. |
NumberOfSegs | DINT | Number of segments. Specify the number of ramp/soak segments used by the instruction. The arrays for RampValue, SoakValue, and SoakTime must be at least as large as NumberOfSegs. If this value is invalid, the instruction is placed into Operator Manual or Program Hold mode and the instruction sets the appropriate bit in Status.
Valid = 1 to (minimum size of RampValue, SoakValue, or SoakTime arrays)
Default = 1 |
ManHoldAftInit | BOOL | Manual/Hold after initialization. If true, the ramp/soak is in Operator Manual or Program Hold mode after initialization completes. Otherwise, the ramp/soak remains is in its previous mode after initialization completes.
Default is false. |
CyclicSingle | BOOL | Cyclic/single execution. True for cyclic action or false for single action. Cyclic action continuously repeats the ramp/soak profile. Single action performs the ramp/ soak profile once and then stops.
Default is false. |
TimeRate | BOOL | Time/rate ramp value configuration. True if the RampValue parameters are entered as a time in minutes to reach the soak temperature. False if the RampValue parameters are entered as a rate in units/minute.
Default is false. |
GuarRamp | BOOL | Guaranteed ramp. If true and the instruction is in Auto, ramping is temporarily suspended if the PV differs from the Output by more than RampDeadband.
Default is cleared. |
RampDeadband | REAL | Guaranteed ramp deadband. Specify the amount in engineering units that PV is allowed to differ from the output when GuarRamp is on. If this value is invalid, the instruction sets RampDeadband = 0.0 and the instruction sets the appropriate bit in Status.
Valid = any float 0.0
Default = 0.0 |
GuarSoak | BOOL | Guaranteed soak. If true and the instruction is in auto, the soak timer is cleared if the PV differs from the Output by more than SoakDeadband.
Default is false. |
SoakDeadband | REAL | Guaranteed soak deadband. Specify the amount in engineering units that the PV is allowed to differ from the output when GuarSoak is on. If this value is invalid, the instruction sets SoakDeadband = 0.0 and the instruction sets the appropriate bit in Status.
Valid = any float 0.0
Default = 0.0 |
CurrentSegProg | DINT | Current segment program. The user program writes a requested value for the CurrentSeg into this input. This value is used if the ramp/soak is in Program Manual mode. If this value is invalid, the instruction sets the appropriate bit in Status.
Valid = 0 to NumberOfSegs-1
Default = 0 |
OutProg | REAL | Output program. The user program writes a requested value for the Out into this input. This value is used as the Out when the ramp/soak is in Program Manual mode.
Valid = any float
Default = 0.0 |
SoakTimeProg | REAL | Soak time program. The user program writes a requested value for the SoakTimeLeft into this input. This value is used if the ramp/soak is in Program Manual mode. If this value is invalid, the instruction sets the appropriate bit in Status.
Valid = 0.0 to maximum positive float
Default = 0.0 |
CurrentSegOper | DINT | Current segment operator. The operator interface writes a requested value for the CurrentSeg into this input. This value is used if the ramp/soak is in Operator Manual mode. If this value is invalid, the instruction sets the appropriate bit in Status.
Valid = 0 to NumberOfSegs-1
Default = 0 |
OutOper | REAL | Output operator. The operator interface writes a requested value for the Out into this input. This value is used as the Out when the ramp/soak is in Operator Manual mode.
Valid = any float
Default = 0.0 |
SoakTimeOper | REAL | Soak time operator. The operator interface writes a requested value for the SoakTimeLeft into this input. This value is used if the ramp/soak is in Operator Manual mode. If this value is invalid, the instruction sets the appropriate bit in Status.
Valid = 0.0 to maximum positive float
Default = 0.0 |
ProgProgReq | BOOL | Program program request. Set to true by the user program to request Program control. Ignored if ProgOperReq is true. Holding this true and ProgOperReq false locks the instruction in Program control.
Default is false. |
ProgOperReq | BOOL | Program operator request. Set to true by the user program to request Operator control. Holding this true locks the instruction in Operator control.
Default is false. |
ProgAutoReq | BOOL | Program auto mode request. Set to true by the user program to request the ramp/soak to enter Auto mode. Ignored if the loop is in Operator control, if ProgManualReq is true, or if ProgHoldReq is true.
Default is false. |
ProgManualReq | BOOL | Program manual mode request. Set to true by the user program to request the ramp/soak to enter Manual mode. Ignored if the ramp/soak is in Operator control or if ProgHoldReq is true.
Default is false. |
ProgHoldReq | BOOL | Program hold mode request. Set to true by the user program to request to stop the ramp/ soak without changing the Out, CurrentSeg, or SoakTimeLeft. Also useful when a PID loop getting its setpoint from the ramp/soak leaves cascade. An operator can accomplish the same thing by placing the ramp/soak into Operator Manual mode.
Default is false. |
OperProgReq | BOOL | Operator program request. Set to true by the operator interface to request Program control. Ignored if ProgOperReq is true. The instruction clears this input to false.
Default is false. |
OperOperReq | BOOL | Operator operator request. Set to true by the operator interface to request Operator control. Ignored if ProgProgReq is true and ProgOperReq is false. The instruction clears this input to false.
Default is false. |
OperAutoReq | BOOL | Operator auto mode request. Set to true by the operator interface to request the ramp/soak to enter Auto mode. Ignored if the loop is in Program control or if OperManualReq is true. The instruction clears this input to false.
Default is false. |
OperManualReq | BOOL | Operator manual mode request. Set to true by the operator interface to request the ramp/soak to enter Manual mode. Ignored if the loop is in Program control. The instruction clears this input to false.
Default is false. |
Initialize | BOOL | Initialize program and operator values. When true and in manual, the instruction sets CurrentSegProg = 0, CurrentSegOper = 0, SoakTimeProg = SoakTime[0], and SoakTimeOper = SoakTime[0]. Initialize is ignored when in Auto or Hold mode. The instruction clears this parameter to false.
Default is false. |
ProgValueReset | BOOL | Reset program control values. When true, the instruction clears ProgProgReq, ProgOperReq, ProgAutoReq, ProgHoldReq, and ProgManualReq to false.
Default is false. |
Output Parameter | Data Type | Description |
---|---|---|
EnableOut | BOOL | Indicates if instruction is enabled. Cleared to false if Out overflows. |
Out | REAL | The output of the ramp/soak instruction. |
CurrentSeg | DINT | Current segment number. Displays the current segment number in the ramp/soak cycle. Segments start numbering at 0. |
SoakTimeLeft | REAL | Soak time left. Displays the soak time remaining for the current soak. |
GuarRampOn | BOOL | Guaranteed ramp status. Set to true if the Guaranteed Ramp feature is in use and the ramp is temporarily suspended because the PV differs from the output by more than the RampDeadband. |
GuarSoakOn | BOOL | Guaranteed soak status. Set to true if the Guaranteed Soak feature is in use and the soak timer is cleared because the PV differs from the output by more than the SoakDeadband. |
ProgOper | BOOL | Program/Operator control indicator. True when in Program control. False when in Operator control. |
Auto | BOOL | Auto mode. True when the ramp/soak is in Program Auto or Operator Auto mode. |
Manual | BOOL | Manual mode. True when the ramp/soak is in Program Manual or Operator Manual mode. |
Hold | BOOL | Hold mode. True when the ramp/soak is in program Hold mode. |
Status | DINT | Status of the function block. |
InstructFault (Status.0) | BOOL | The instruction detected one of the following execution errors. This is not a minor or major controller error. Check the remaining status bits to determine what occurred. |
PVFaulted (Status.1) | BOOL | PVHealth is bad. |
NumberOfSegsInv (Status.2) | BOOL | The NumberOfSegs value is invalid value or is not compatible with an array size. |
RampDeadbandInv (Status.3) | BOOL | Invalid RampDeadband value. |
SoakDeadbandInv (Status.4) | BOOL | Invalid SoakDeadband value. |
CurrSegProgInv (Status.5) | BOOL | Invalid CurrSegProg value. |
SoakTimeProgInv (Status.6) | BOOL | Invalid SoakTimeProg value. |
CurrSegOperInv (Status.7) | BOOL | Invalid CurrSegOper value. |
SoakTimeOperInv (Status.8) | BOOL | Invalid SoakTimeOper value. |
RampValueInv (Status.9) | BOOL | Invalid RampValue value. |
SoakTimeInv (Status.10) | BOOL | Invalid SoakTime value |
Description
The RMPS instruction is typically used to provide a temperature profile in a batch heating process. The output of this instruction is typically the input to the setpoint of a PID loop.
Whenever the value computed for the output is invalid, NAN, or INF, the instruction sets Out = the invalid value and sets the math overflow status flag. The internal parameters are not updated. In each subsequent scan, the output is computed using the internal parameters from the last scan when the output was valid.
Monitoring the RMPS Instruction
There is an operator faceplate available for the RMPS instruction.
Affects Math Status Flags
No
Major/Minor Faults
None specific to this instruction. See
Common Attributes
for operand-related faults.Execution
Function Block
Condition/State | Action Taken |
---|---|
Prescan | EnableIn and EnableOut bits are cleared to false. |
Tag.EnableIn is false | EnableIn and EnableOut bits are cleared to false. |
Tag.EnableIn is true | EnableIn and EnableOut bits are set to true. The instruction executes. |
Instruction first run | Clear CurrentSeg to 0. Mode is set to operator manual mode. SoakTimeProg and SoakTimeOper are set to SoakTime[0] if SoakTime[0] is valid. |
Instruction first scan | All the operator request inputs are cleared to false. If ProgValueReset is true, all the program request inputs are cleared to false. The operator control mode is set to manual mode if the current mode is hold. |
Postscan | EnableIn and EnableOut bits are cleared to false. |
Structured Text
Condition/State | Action Taken |
---|---|
Prescan | See Prescan in the Function Block table. |
Normal Execution | See Tag.EnableIn is true in the Function Block table. |
Postscan | See Postscan in the Function Block table. |
Initial Mode Applied on Instruction First Scan
The following table shows the ending control based on the program request inputs.
Control at Start of First Scan | ProgOperReq | ProgProgReq | ProgValueReset | FirstRun | Control at End of First Scan |
---|---|---|---|---|---|
Operator Control | false | true | false | na | Program Control |
na | false | na | na | Operator Control | |
Program Control | true | Na | false | false | Operator Control |
na | Na | true | true | Operator Control | |
false | false | false | true | Operator Control | |
false | true | false | na | Program Control | |
na | Na | true | false | Program Control | |
false | false | false | false | Program Control |
The following table shows the ending control based on the Manual, Auto, and Hold mode requests.
Control at Start of First Scan | Oper
Auto
Req | Oper
Man
Req | Prog
Auto
Req | Prog
Man
Req | Prog
Hold
Req | Man
Hold
AftInit | Prog
Value
Reset | First
Run | Control at End
of First Scan |
---|---|---|---|---|---|---|---|---|---|
Operator Control | na | na | na | na | na | false | na | false | Operator Current mode |
na | na | na | na | na | na | na | Operator Manual mode | ||
na | na | na | na | na | true | na | na | ||
Program Control | na | na | false | false | false | false | na | false | Program Current mode |
na | na | na | na | na | false | true | false | ||
na | na | true | false | false | false | false | na | Program Auto mode | |
na | na | na | true | false | false | false | na | Program Manual mode | |
na | na | na | na | true | false | false | na | Program Hold mode | |
na | na | na | na | na | true | na | na |
Example
In this example, the RMPS instruction drives the setpoint of a PIDE instruction. When the PIDE instruction is in Cascade/Ratio mode, the output of the RMPS instruction is used as the setpoint. The PV to the PIDE instruction can be optionally fed into the PV input of the RMPS instruction if you want to use guaranteed ramping and/or guaranteed soaking.
In this example, the AutoclaveRSSoakValue, AutoclaveRSSoakTime, and AutoclaveRSRampValue arrays are REAL arrays with 10 elements to allow up to a 10 segment RMPS profile.
Function Block
Switching Between Program Control and Operator Control
The RMPS instruction can be controlled by either a user program or through an operator interface. Control can be changed at any time.
(1) You can lock the instruction in Operator control by leaving ProgOperReq to true.
(2) You can lock the instruction in Program control by leaving ProgProgReq to true while ProgOperReq is false.
When transitioning from Operator control to Program control while the ProgAutoReq, ProgManualReq, and ProgHoldReq inputs are false, the mode is determined as follows:
If the instruction was in Operator Auto mode, then the transition is to Program Auto mode.
If the instruction was in Operator Manual mode, then the transition is to Program Manual mode.
When transitioning from Program control to Operator control while the OperAutoReq and OperManualReq inputs are false, the mode is determined as follows:
If the instruction was in Program Auto mode, then the transition is to Operator Auto mode.
If the instruction was in Program Manual or Program Hold mode, then the transition is to Operator Manual mode.
Program Control
The following diagram shows how the RMPS instruction operates when in Program control.
(1) In single (non-cyclic) execution, you must toggle ProgAutoReq from false to true if one execution of the ramp/soak profile is complete and you want another execution of the ramp/soak profile.
(2) When the instruction is configured for single execution, and the Auto mode Ramp-Soak profile completes, the instruction transitions to Hold mode.
(3) The instruction is placed in Hold mode if PVFaulted is true or any of the following inputs are invalid: NumberOfSegs, CurrentSegProg, or SoakTimeProg.
The following table describes the possible Program modes.
Mode | Description |
---|---|
Program Auto Mode | While in Auto mode, the instruction sequentially executes the ramp/ soak profile. |
Program Manual Mode | While in Manual mode the user program directly controls the instruction’s Out. The CurrentSegProg, SoakTimeProg, and OutProg inputs are transferred to the CurrentSeg, SoakTimeLeft, and Out outputs. When the instruction is placed in auto mode, the ramp/soak function resumes with the values last input from the user program. CurrentSegProg and SoakTimeProg are not transferred if they are invalid. To facilitate a "bumpless" transition into Manual mode, the CurrentSegProg, SoakTimeProg, and OutProg inputs are continuously updated to the current values of CurrentSeg, SoakTimeLeft, and Out when ProgValueReset is set and the instruction is not in Program Manual mode. |
Program Hold Mode | While in Hold mode, the instruction’s outputs are maintained at their current values. If in this mode when ProgOperReq is set to change to Operator control, the instruction changes to Operator Manual mode. |
Operator Control
The following diagram shows how the RMPS instruction operates when in Operator control.
(1) When the instruction is configured for Single Execution, and the Auto mode ramp/soak profile completes, the instruction transitions to manual mode.
(2) The instruction is placed in Manual mode if PVFaulted is true or any of the following inputs are invalid: NumberOfSegs, CurrentSegOper, or SoakTimeOper.
The following table describes the possible Operator modes.
Mode | Description |
---|---|
Operator Auto Mode | While in Auto mode, the instruction sequentially executes the ramp/ soak profile. |
Operator Manual Mode | While in Manual mode the operator directly controls the instruction’s Out. The CurrentSegOper, SoakTimeOper, and OutOper inputs are transferred to the CurrentSeg, SoakTimeLeft, and Out outputs. When the instruction is placed in Auto mode, the ramp/soak function resumes with the values last input from the operator. CurrentSegOper and SoakTimeOper are not transferred if they are invalid. To facilitate a "bumpless" transition into Manual mode, the CurrentSegOper, SoakTimeOper, and OutOper inputs are continuously updated to the current values of CurrentSeg, SoakTimeLeft, and Out whenever the instruction is not in Operator Manual mode. |
Executing the Ramp/Soak Profile
The following diagram illustrates how the RMPS instruction executes the ramp/soak profile.
(1) The Ramp is complete when Out = SoakValue. If, during ramp execution, Out > SoakValue, Out is limited to SoakValue.
(2) Soaking is complete when Out is held for the amount of time specified in the current segment’s SoakTime. If the segment executed was not the last segment, CurrentSeg increments by one.
(3) Soaking has completed for the last programmed segment and the instruction is configured for cyclic execution. The instruction sets CurrentSeg = 0.
(4) Soaking has completed for the last programmed segment and the instruction is configured for single execution.
(5) When returning to Auto mode, the instruction determines if ramping or soaking resumes. What to do next depends on the values of Out, SoakTimeLeft, and the SoakValue of the current segment. If Out = SoakValue for the current segment, and SoakTimeLeft = 0, then the current segment has completed and the next segment starts.
Ramping
The ramp cycle ramps Out from the previous segment’s SoakValue to the current segment’s SoakValue. The time in which the ramp is traversed is defined by the RampValue parameters.
Ramping is positive if Out < target SoakValue of the current segment. If the ramp equation calculates a new Out which exceeds the target SoakValue, the Out is set to the target SoakValue.
Ramping is negative if Out > the target SoakValue of the current segment. If the ramp equation calculates a new Out which is less than the target SoakValue, the Out is set to the target SoakValue.
Each segment has a ramp value. You have the option of programming the ramp in units of time or rate. All segments must be programmed in the same units. The following table describes the ramping options:
Parameter | Description |
---|---|
Time-based ramping | TimeRate is set to true for time-based ramping (in minutes) The rate of change for the current segment is calculated and either added or subtracted to Out until Out reaches the current segment’s soak value. In the following equation, DeltaT is the elapsed time in minutes since the instruction last executed. Where RampStart is the value of Out at the start of the Current Segment. |
Rate-based ramping | TimeRate is cleared to false for rate-based ramping (in units/minute) The programmed rate of change is either added or subtracted to Out until Out reaches the current segment’s soak value. In the following equation, DeltaT is the elapsed time in minutes since the instruction last executed. |
Guaranteed Ramping
Set the input GuarRamp to true to enable guaranteed ramping. When enabled, the instruction monitors the difference between Out and PV. If the difference is outside of the programmed RampDeadband, the output is left unchanged until the difference between PV and Out are within the deadband. The output GuarRampOn is set to true whenever Out is held due to guaranteed ramping being in effect.
Soaking
Soaking is the amount of time the block output is to remain unchanged until the next ramp-soak segment is started. The soak cycle holds the output at the SoakValue for a programmed amount of time before proceeding to the next segment. The amount of time the output is to soak is programmed in the SoakTime parameters.
Each segment has a SoakValue and SoakTime. Soaking begins when Out is ramped to the current segment’s SoakValue. SoakTimeLeft represents the time in minutes remaining for the output to soak. During ramping, SoakTimeLeft is set to the current segment’s SoakTime. Once ramping is complete, SoakTimeLeft is decreased to reflect the time in minutes remaining for the current segment. SoakTimeLeft = 0 when SoakTime expires.
Guaranteed Soaking
Set the input GuarSoak to true to enable guaranteed soaking. When enabled, the instruction monitors the difference between Out and PV. If the difference is outside of the SoakDeadband, timing of the soak cycle is suspended and the internal soak timer is cleared. When the difference between Out and PV returns to within the deadband, timing resumes. The output GuarSoakOn is set to true when timing is held due to guaranteed soaking being in effect.
Provide Feedback