DIL5: improve states in the state machine
This commit is contained in:
parent
018ed920b9
commit
2238c20a37
@ -43,8 +43,8 @@ class Dilution(HasStates, Drivable):
|
|||||||
dump_valve = Attached()
|
dump_valve = Attached()
|
||||||
|
|
||||||
circulate_pump = Attached()
|
circulate_pump = Attached()
|
||||||
compressor = Attached(mandatory=(False))
|
compressor = Attached(mandatory=False)
|
||||||
turbopump = Attached(mandatory=(False))
|
turbopump = Attached(mandatory=False)
|
||||||
condenseline_valve = Attached()
|
condenseline_valve = Attached()
|
||||||
circuitshort_valve = Attached()
|
circuitshort_valve = Attached()
|
||||||
still_pressure = Attached()
|
still_pressure = Attached()
|
||||||
@ -54,19 +54,15 @@ class Dilution(HasStates, Drivable):
|
|||||||
|
|
||||||
condensing_p_low = Property('Lower limit for condenseline pressure', IntRange())
|
condensing_p_low = Property('Lower limit for condenseline pressure', IntRange())
|
||||||
|
|
||||||
condensing_p_high = Property('Lower limit for condenseline pressure', IntRange())
|
condensing_p_high = Property('Higher limit for condenseline pressure', IntRange())
|
||||||
|
|
||||||
target = Parameter('target state', EnumType(Targetstates))
|
target = Parameter('target state', EnumType(Targetstates))
|
||||||
|
|
||||||
value = Parameter('target state', EnumType(Targetstates))
|
value = Parameter('current state', EnumType(Targetstates))
|
||||||
|
|
||||||
init = True
|
init = True
|
||||||
|
|
||||||
def earlyInit(self):
|
|
||||||
super().earlyInit()
|
|
||||||
|
|
||||||
def read_value(self):
|
|
||||||
return self.value
|
|
||||||
|
|
||||||
def write_target(self, target):
|
def write_target(self, target):
|
||||||
"""
|
"""
|
||||||
@ -149,21 +145,20 @@ class Dilution(HasStates, Drivable):
|
|||||||
self.compressor.write_target(1)
|
self.compressor.write_target(1)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@status_code(BUSY, 'condense mode')
|
@status_code(BUSY)
|
||||||
def wait_for_condense_line_pressure(self, state):
|
def wait_for_condense_line_pressure(self, state):
|
||||||
if (self.condenseline_pressure.read_value > 500):
|
if (self.condenseline_pressure.read_value > 500):
|
||||||
return Retry
|
return Retry
|
||||||
|
self.condense_valve.write_target(0)
|
||||||
return self.circulate
|
return self.circulate
|
||||||
|
|
||||||
|
|
||||||
def initialize_condense_valves(self):
|
def initialize_condense_valves(self, state):
|
||||||
return True
|
raise NotImplementedError
|
||||||
|
|
||||||
@status_code(BUSY, 'condense state')
|
@status_code(BUSY)
|
||||||
def condense(self, state):
|
def condense(self, state):
|
||||||
"""Führt das Kondensationsverfahren durch."""
|
"""Führt das Kondensationsverfahren durch."""
|
||||||
if self.init:
|
if state.init:
|
||||||
self.initialize_condense_valves()
|
self.initialize_condense_valves()
|
||||||
self.circuitshort_valve.write_target(0)
|
self.circuitshort_valve.write_target(0)
|
||||||
self.dump_valve.write_target(0)
|
self.dump_valve.write_target(0)
|
||||||
@ -176,7 +171,6 @@ class Dilution(HasStates, Drivable):
|
|||||||
self.compressor.write_target(1)
|
self.compressor.write_target(1)
|
||||||
|
|
||||||
self.circulate_pump.write_target(1)
|
self.circulate_pump.write_target(1)
|
||||||
self.init = False
|
|
||||||
return Retry
|
return Retry
|
||||||
|
|
||||||
if self.condenseline_pressure.read_value() < self.condensing_p_low:
|
if self.condenseline_pressure.read_value() < self.condensing_p_low:
|
||||||
@ -190,63 +184,79 @@ class Dilution(HasStates, Drivable):
|
|||||||
self.condense_valve.write_target(1)
|
self.condense_valve.write_target(1)
|
||||||
|
|
||||||
if (self.turbopump is not None):
|
if (self.turbopump is not None):
|
||||||
if (self.condenseline_pressure.read_value() > 900 and self.still_pressure.read_value() > 10):
|
return self.condense_wait_before_turbo_start
|
||||||
return Retry
|
|
||||||
else:
|
|
||||||
self.turbopump.write_target(1)
|
|
||||||
|
|
||||||
return self.wait_for_condense_line_pressure
|
return self.wait_for_condense_line_pressure
|
||||||
|
|
||||||
|
|
||||||
def initialize_circulation_valves(self):
|
|
||||||
return True
|
|
||||||
|
|
||||||
@status_code(BUSY, 'circulate state')
|
|
||||||
def circulate(self):
|
|
||||||
"""Zirkuliert die Mischung."""
|
|
||||||
return self.initialize_circulation_valves()
|
|
||||||
|
|
||||||
|
@status_code(BUSY, 'condense (wait before starting turbo)')
|
||||||
@status_code(BUSY, 'remove state')
|
def condense_wait_before_turbo_start(self, state):
|
||||||
def remove(self):
|
if (self.condenseline_pressure.read_value() > 900 and self.still_pressure.read_value() > 10):
|
||||||
|
return Retry
|
||||||
|
else:
|
||||||
|
self.turbopump.write_target(1)
|
||||||
|
return self.wait_for_condense_line_pressure
|
||||||
|
|
||||||
|
def initialize_circulation_valves(self, state):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@status_code(BUSY)
|
||||||
|
def circulate(self, state):
|
||||||
|
"""Zirkuliert die Mischung."""
|
||||||
|
if state.init:
|
||||||
|
self.initialize_circulation_valves()
|
||||||
|
return Retry
|
||||||
|
|
||||||
|
@status_code(BUSY, 'remove (wait for turbo shut down)'')
|
||||||
|
def remove(self, state):
|
||||||
"""Entfernt die Mischung."""
|
"""Entfernt die Mischung."""
|
||||||
|
|
||||||
if self.init:
|
if state.init:
|
||||||
self.condenseline_valve.write_target(0)
|
self.condenseline_valve.write_target(0)
|
||||||
self.dump_valve.write_target(1)
|
self.dump_valve.write_target(1)
|
||||||
self.start_time = self.now
|
self.start_time = self.now
|
||||||
self.init = False
|
|
||||||
return Retry
|
return Retry
|
||||||
|
|
||||||
if self.turbopump is not None:
|
if self.turbopump is not None:
|
||||||
self.turbopump.write_target(0)
|
self.turbopump.write_target(0)
|
||||||
|
|
||||||
if (self.now - self.start_time < 300 or self.turbopump.read_speed() > 60):
|
if (self.now - self.start_time < 300 or self.turbopump.read_speed() > 60):
|
||||||
return Retry
|
return Retry
|
||||||
|
|
||||||
self.circuitshort_valve.write_target(1)
|
self.circuitshort_valve.write_target(1)
|
||||||
|
|
||||||
if self.turbopump is not None:
|
if self.turbopump is not None:
|
||||||
if self.still_pressure.read_value() > 20:
|
return self.remove_wait_for_still_pressure
|
||||||
return Retry
|
|
||||||
self.turbopump.write_target(1)
|
return remove_endsequence
|
||||||
|
|
||||||
|
@status_code(BUSY, 'remove (wait for still pressure low)')
|
||||||
|
def remove_wait_for_still_pressure(self, state):
|
||||||
|
if self.still_pressure.read_value() > 20:
|
||||||
|
return Retry
|
||||||
|
self.turbopump.write_target(1)
|
||||||
|
return self.remove_endsequence
|
||||||
|
|
||||||
|
@status_code(BUSY)
|
||||||
|
def remove_endsequence(self, state):
|
||||||
if self.still_pressure.read_value() > 1e-4:
|
if self.still_pressure.read_value() > 1e-4:
|
||||||
return Retry
|
return Retry
|
||||||
|
|
||||||
self.circuitshort_valve.write_target(0)
|
self.circuitshort_valve.write_target(0)
|
||||||
self.dump_valve.write_target(0)
|
self.dump_valve.write_target(0)
|
||||||
|
|
||||||
if self.compressor is not None:
|
if self.compressor is not None:
|
||||||
self.compressor.write_target(0)
|
self.compressor.write_target(0)
|
||||||
|
self.remove_check_manual_valves()
|
||||||
for valve in self.remove_closed_valves:
|
self.remove_close_valves()
|
||||||
valve.write_target(0)
|
|
||||||
|
|
||||||
self.circulate_pump.write_target(0)
|
self.circulate_pump.write_target(0)
|
||||||
|
|
||||||
return Finish
|
return Finish
|
||||||
|
|
||||||
|
def remove_check_manual_valves(self):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def remove_close_valves(self):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
class DIL5(Dilution):
|
class DIL5(Dilution):
|
||||||
|
|
||||||
MV10 = Attached()
|
MV10 = Attached()
|
||||||
@ -269,6 +279,8 @@ class DIL5(Dilution):
|
|||||||
self.circulate_open_valves = [self.MV11, self.circulate_pump, self.GV2, self.V5, self.compressor, self.condenseline_valve, self.MV1, self.MV3a, self.MV3b, self.GV1, self.MV9, self.MV14]
|
self.circulate_open_valves = [self.MV11, self.circulate_pump, self.GV2, self.V5, self.compressor, self.condenseline_valve, self.MV1, self.MV3a, self.MV3b, self.GV1, self.MV9, self.MV14]
|
||||||
self.condense_closed_valves = [self.MV10, self.MV13, self.MV8, self.MVB, self.MV2]
|
self.condense_closed_valves = [self.MV10, self.MV13, self.MV8, self.MVB, self.MV2]
|
||||||
self.condense_open_valves = [self.MV1, self.MV3a, self.MV3b, self.GV1, self.MV9, self.MV14, self.MV12, self.MV11]
|
self.condense_open_valves = [self.MV1, self.MV3a, self.MV3b, self.GV1, self.MV9, self.MV14, self.MV12, self.MV11]
|
||||||
|
self.remove_check_closed_valves = [self.MV11, self.MV9, self.MV12, self.MV1]
|
||||||
|
self.remove_closed_valves = [self.condenseline_valve, self.circuitshort_valve, self.V5, self.condense_valve, self.dump_valve]
|
||||||
super().earlyInit()
|
super().earlyInit()
|
||||||
|
|
||||||
def initialize_condense_valves(self):
|
def initialize_condense_valves(self):
|
||||||
@ -296,5 +308,13 @@ class DIL5(Dilution):
|
|||||||
valve.write_target(1)
|
valve.write_target(1)
|
||||||
self.stop_machine()
|
self.stop_machine()
|
||||||
raise ImpossibleError(f'valve {valve.name} must be open')
|
raise ImpossibleError(f'valve {valve.name} must be open')
|
||||||
|
|
||||||
|
def remove_check_manual_valves(self):
|
||||||
|
for valve in self.remove_check_closed_valves:
|
||||||
|
if (valve.read_value() == 1):
|
||||||
|
self.final_status(WARN, "manual valve {valve.name} must be closed")
|
||||||
|
|
||||||
|
def remove_close_valves(self):
|
||||||
|
for valve in self.remove_closed_valves:
|
||||||
|
valve.write_target(0)
|
||||||
|
|
||||||
|
@ -130,9 +130,9 @@ class Valve(Snap7Mixin, Drivable):
|
|||||||
self.setFastPoll(True, 0.001)
|
self.setFastPoll(True, 0.001)
|
||||||
|
|
||||||
def read_status(self):
|
def read_status(self):
|
||||||
self.log.info('read_status')
|
self.log.debug('read_status')
|
||||||
value = self.read_value()
|
value = self.read_value()
|
||||||
self.log.info('value %d target %d', value, self.target)
|
self.log.debug('value %d target %d', value, self.target)
|
||||||
if value != self.target:
|
if value != self.target:
|
||||||
if self._remaining_tries is None:
|
if self._remaining_tries is None:
|
||||||
self.target = self.read_value()
|
self.target = self.read_value()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user