Class ESDValve
- All Implemented Interfaces:
Serializable, Runnable, ProcessEquipmentInterface, TwoPortInterface, ValveInterface, SimulationInterface, NamedInterface
An ESD valve is a normally-open isolation valve that closes automatically during emergency shutdown events. These valves are critical safety elements designed to isolate process equipment or stop flow during hazardous conditions.
Key features:
- Fail-safe design: Fails to closed position (fail-closed)
- Solenoid/actuator control: Energized to stay open, de-energized to close
- Configurable stroke time (closure time)
- Partial stroke testing capability
- Emergency closure on ESD signal
- Status feedback for monitoring systems
- Suitable for SIL-rated safety instrumented functions
Design philosophy:
- Normally open: Allows normal process flow
- Spring-return actuator: Closes automatically on loss of power/signal
- Fast acting: Closes within defined stroke time (typically 5-30 seconds)
- Tight shutoff: Provides complete isolation when closed
Typical usage in ESD system:
// Create process stream
Stream feedStream = new Stream("Feed", thermoSystem);
feedStream.setFlowRate(10000.0, "kg/hr");
feedStream.setPressure(50.0, "bara");
// Create ESD inlet valve (normally open)
ESDValve esdValve = new ESDValve("ESD-XV-101", feedStream);
esdValve.setStrokeTime(10.0); // 10 seconds to close
esdValve.setCv(500.0); // Large Cv for minimal pressure drop when open
// Normal operation
esdValve.energize(); // Keep valve open
esdValve.run();
// Emergency shutdown
esdValve.deEnergize(); // Triggers closure
// In transient simulation loop
esdValve.runTransient(dt, UUID.randomUUID());
// Valve closes progressively over stroke time
Integration with ESD controller:
// ESD controller monitors process conditions
if (pressure > highPressureSetpoint || fireDetected || manualESDActivated) {
esdValve.deEnergize(); // Initiate emergency closure
}
- Version:
- $Id: $Id
- Author:
- ESOL
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleFail-safe position (0.0 = closed, 100.0 = open).private booleanFlag to track if valve has fully closed during current trip.private booleanIndicates if valve is currently closing.private booleanEnergization state of the valve solenoid/actuator.private doubleOpening percentage when trip started (for linear closure calculation).private booleanIndicates if partial stroke test is in progress.private doubleTarget position for partial stroke test (typically 80-90%).private static final longSerialization version UID.private doubleTime required for valve to fully close (seconds).private doubleTime elapsed since de-energization started (seconds).Fields inherited from class ThrottlingValve
isCalcPressure, logger, molarFlow, pressure, thermoSystem, valveMechanicalDesignFields inherited from class TwoPortEquipment
inStream, outStreamFields inherited from class ProcessEquipmentBaseClass
conditionAnalysisMessage, energyStream, hasController, isSolved, properties, reportFields inherited from class SimulationBaseClass
calcIdentifier, calculateSteadyState, timeFields inherited from class NamedBaseClass
name -
Constructor Summary
ConstructorsConstructorDescriptionConstructor for ESDValve.ESDValve(String name, StreamInterface inletStream) Constructor for ESDValve. -
Method Summary
Modifier and TypeMethodDescriptionvoidCompletes the partial stroke test and returns valve to normal operation.voidDe-energizes the valve (initiates emergency closure).voidenergize()Energizes the valve (allows it to open/maintain open position).doubleGets the fail-safe position.doubleGets the configured stroke time.doubleGets time elapsed since de-energization.booleanChecks if emergency closure has completed.booleanChecks if valve is currently closing.booleanChecks if valve is energized (solenoid/actuator powered).booleanChecks if partial stroke test is active.voidreset()Resets the valve after emergency shutdown.voidrunTransient(double dt, UUID id) Performs dynamic simulation step with automatic closure logic.voidsetFailSafePosition(double failSafePosition) Sets the fail-safe position (position valve moves to on loss of power).voidsetStrokeTime(double strokeTime) Sets the valve stroke time (closure time).voidstartPartialStrokeTest(double targetPosition) Initiates a partial stroke test (PST).toString()Gets a string representation of the ESD valve state.voidtrip()Trips the valve (same as de-energizing - forces closure).Methods inherited from class ThrottlingValve
calcKv, calculateMolarFlow, calculateOutletPressure, displayResult, getCapacityDuty, getCapacityMax, getCg, getClosingTravelTime, getCv, getCv, getDeltaPressure, getDeltaPressure, getEntropyProduction, getExergyChange, getFp, getInletPressure, getKv, getMechanicalDesign, getOpeningTravelTime, getOutletPressure, getPercentValveOpening, getResultTable, getTargetPercentValveOpening, getThermoSystem, getTravelModel, getTravelTime, getTravelTimeConstant, initMechanicalDesign, isAcceptNegativeDP, isAllowChoked, isAllowLaminar, isGasValve, isIsoThermal, isValveKvSet, needRecalculation, run, runController, setAcceptNegativeDP, setAllowChoked, setAllowLaminar, setClosingTravelTime, setCv, setCv, setDeltaPressure, setFp, setGasValve, setIsCalcOutPressure, setIsoThermal, setKv, setMaximumValveOpening, setMinimumValveOpening, setOpeningTravelTime, setOutletPressure, setOutletPressure, setPercentValveOpening, setPressure, setPressure, setTargetPercentValveOpening, setTravelModel, setTravelTime, setTravelTimeConstant, setValveKvSet, toJson, toJsonMethods inherited from class TwoPortEquipment
getInletStream, getInletTemperature, getMassBalance, getOutletStream, getOutletTemperature, setInletPressure, setInletStream, setInletTemperature, setOutletStream, setOutletTemperature, validateSetupMethods inherited from class ProcessEquipmentBaseClass
copy, equals, getConditionAnalysisMessage, getController, getEnergyStream, getMassBalance, getMinimumFlow, getPressure, getPressure, getProperty, getReport_json, getSpecification, getTemperature, getTemperature, hashCode, isActive, isActive, isSetEnergyStream, reportResults, run_step, runConditionAnalysis, setController, setEnergyStream, setEnergyStream, setFlowValveController, setMinimumFlow, setRegulatorOutSignal, setSpecification, setTemperature, solvedMethods inherited from class SimulationBaseClass
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTimeMethods inherited from class NamedBaseClass
getName, getTagName, setName, setTagNameMethods inherited from interface NamedInterface
getName, getTagName, setName, setTagNameMethods inherited from interface ProcessEquipmentInterface
equals, getConditionAnalysisMessage, getController, getExergyChange, getFluid, getMassBalance, getMassBalance, getPressure, getPressure, getReport_json, getRestCapacity, getSpecification, getTemperature, getTemperature, hashCode, reportResults, runConditionAnalysis, setController, setRegulatorOutSignal, setSpecification, setTemperature, validateSetupMethods inherited from interface SimulationInterface
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, run, run_step, run_step, runTransient, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTime, solvedMethods inherited from interface TwoPortInterface
getInletStream, getInletTemperature, getInStream, getOutletStream, getOutletTemperature, getOutStream, setInletPressure, setInletStream, setInletTemperature, setOutletStream, setOutletTemperature
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
isEnergized
private boolean isEnergizedEnergization state of the valve solenoid/actuator. -
strokeTime
private double strokeTimeTime required for valve to fully close (seconds). -
timeElapsedSinceTrip
private double timeElapsedSinceTripTime elapsed since de-energization started (seconds). -
openingAtTripStart
private double openingAtTripStartOpening percentage when trip started (for linear closure calculation). -
isClosing
private boolean isClosingIndicates if valve is currently closing. -
failSafePosition
private double failSafePositionFail-safe position (0.0 = closed, 100.0 = open). Default is fail-closed. -
partialStrokeTestActive
private boolean partialStrokeTestActiveIndicates if partial stroke test is in progress. -
partialStrokeTestPosition
private double partialStrokeTestPositionTarget position for partial stroke test (typically 80-90%). -
hasTripCompleted
private boolean hasTripCompletedFlag to track if valve has fully closed during current trip.
-
-
Constructor Details
-
ESDValve
-
ESDValve
Constructor for ESDValve.- Parameters:
name- name of ESD valveinletStream- inlet stream to valve
-
-
Method Details
-
setStrokeTime
public void setStrokeTime(double strokeTime) Sets the valve stroke time (closure time).- Parameters:
strokeTime- time in seconds for valve to close completely
-
getStrokeTime
public double getStrokeTime()Gets the configured stroke time.- Returns:
- stroke time in seconds
-
setFailSafePosition
public void setFailSafePosition(double failSafePosition) Sets the fail-safe position (position valve moves to on loss of power).- Parameters:
failSafePosition- position as percentage (0.0 = closed, 100.0 = open)
-
getFailSafePosition
public double getFailSafePosition()Gets the fail-safe position.- Returns:
- fail-safe position as percentage
-
isEnergized
public boolean isEnergized()Checks if valve is energized (solenoid/actuator powered).- Returns:
- true if valve is energized
-
energize
public void energize()Energizes the valve (allows it to open/maintain open position).In normal operation, ESD valves are energized to maintain the open position. This simulates the electrical/pneumatic signal that keeps the valve actuator in the open state.
-
deEnergize
public void deEnergize()De-energizes the valve (initiates emergency closure).This simulates the ESD signal that removes power from the valve actuator, causing the spring-return mechanism to close the valve. This is the primary safety action during emergency shutdown.
-
trip
public void trip()Trips the valve (same as de-energizing - forces closure).Convenience method that is semantically clearer for emergency shutdown scenarios.
-
reset
public void reset()Resets the valve after emergency shutdown.After an ESD event, the valve must be manually reset by operations personnel. This simulates the reset process after the emergency condition has been resolved.
-
isClosing
public boolean isClosing()Checks if valve is currently closing.- Returns:
- true if valve is in the process of closing
-
hasTripCompleted
public boolean hasTripCompleted()Checks if emergency closure has completed.- Returns:
- true if valve has fully closed after de-energization
-
getTimeElapsedSinceTrip
public double getTimeElapsedSinceTrip()Gets time elapsed since de-energization.- Returns:
- time in seconds since valve started closing
-
startPartialStrokeTest
public void startPartialStrokeTest(double targetPosition) Initiates a partial stroke test (PST).Partial stroke testing is a proof test method that verifies valve functionality without causing a full process shutdown. The valve closes to a specified position (e.g., 80%) and then reopens.
This is important for SIL-rated valves to verify functionality between full proof test intervals, as required by IEC 61511.
- Parameters:
targetPosition- target position for test (typically 80-90%)
-
completePartialStrokeTest
public void completePartialStrokeTest()Completes the partial stroke test and returns valve to normal operation. -
isPartialStrokeTestActive
public boolean isPartialStrokeTestActive()Checks if partial stroke test is active.- Returns:
- true if PST is in progress
-
runTransient
Performs dynamic simulation step with automatic closure logic.If the valve has been de-energized, it will close progressively according to the configured stroke time until reaching the fail-safe position.
- Specified by:
runTransientin interfaceSimulationInterface- Overrides:
runTransientin classThrottlingValve- Parameters:
dt- time step in secondsid- unique identifier for this calculation
-
toString
-