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()
|
||||
|
||||
circulate_pump = Attached()
|
||||
compressor = Attached(mandatory=(False))
|
||||
turbopump = Attached(mandatory=(False))
|
||||
compressor = Attached(mandatory=False)
|
||||
turbopump = Attached(mandatory=False)
|
||||
condenseline_valve = Attached()
|
||||
circuitshort_valve = Attached()
|
||||
still_pressure = Attached()
|
||||
@ -54,19 +54,15 @@ class Dilution(HasStates, Drivable):
|
||||
|
||||
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))
|
||||
|
||||
value = Parameter('target state', EnumType(Targetstates))
|
||||
value = Parameter('current state', EnumType(Targetstates))
|
||||
|
||||
init = True
|
||||
|
||||
def earlyInit(self):
|
||||
super().earlyInit()
|
||||
|
||||
def read_value(self):
|
||||
return self.value
|
||||
|
||||
|
||||
def write_target(self, target):
|
||||
"""
|
||||
@ -149,21 +145,20 @@ class Dilution(HasStates, Drivable):
|
||||
self.compressor.write_target(1)
|
||||
return True
|
||||
|
||||
@status_code(BUSY, 'condense mode')
|
||||
@status_code(BUSY)
|
||||
def wait_for_condense_line_pressure(self, state):
|
||||
if (self.condenseline_pressure.read_value > 500):
|
||||
return Retry
|
||||
|
||||
self.condense_valve.write_target(0)
|
||||
return self.circulate
|
||||
|
||||
|
||||
def initialize_condense_valves(self):
|
||||
return True
|
||||
|
||||
@status_code(BUSY, 'condense state')
|
||||
def initialize_condense_valves(self, state):
|
||||
raise NotImplementedError
|
||||
|
||||
@status_code(BUSY)
|
||||
def condense(self, state):
|
||||
"""Führt das Kondensationsverfahren durch."""
|
||||
if self.init:
|
||||
if state.init:
|
||||
self.initialize_condense_valves()
|
||||
self.circuitshort_valve.write_target(0)
|
||||
self.dump_valve.write_target(0)
|
||||
@ -176,7 +171,6 @@ class Dilution(HasStates, Drivable):
|
||||
self.compressor.write_target(1)
|
||||
|
||||
self.circulate_pump.write_target(1)
|
||||
self.init = False
|
||||
return Retry
|
||||
|
||||
if self.condenseline_pressure.read_value() < self.condensing_p_low:
|
||||
@ -190,63 +184,79 @@ class Dilution(HasStates, Drivable):
|
||||
self.condense_valve.write_target(1)
|
||||
|
||||
if (self.turbopump is not None):
|
||||
if (self.condenseline_pressure.read_value() > 900 and self.still_pressure.read_value() > 10):
|
||||
return Retry
|
||||
else:
|
||||
self.turbopump.write_target(1)
|
||||
return self.condense_wait_before_turbo_start
|
||||
|
||||
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, 'remove state')
|
||||
def remove(self):
|
||||
@status_code(BUSY, 'condense (wait before starting turbo)')
|
||||
def condense_wait_before_turbo_start(self, state):
|
||||
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."""
|
||||
|
||||
if self.init:
|
||||
if state.init:
|
||||
self.condenseline_valve.write_target(0)
|
||||
self.dump_valve.write_target(1)
|
||||
self.start_time = self.now
|
||||
self.init = False
|
||||
return Retry
|
||||
|
||||
if self.turbopump is not None:
|
||||
if self.turbopump is not None:
|
||||
self.turbopump.write_target(0)
|
||||
|
||||
if (self.now - self.start_time < 300 or self.turbopump.read_speed() > 60):
|
||||
return Retry
|
||||
if (self.now - self.start_time < 300 or self.turbopump.read_speed() > 60):
|
||||
return Retry
|
||||
|
||||
self.circuitshort_valve.write_target(1)
|
||||
|
||||
if self.turbopump is not None:
|
||||
if self.still_pressure.read_value() > 20:
|
||||
return Retry
|
||||
self.turbopump.write_target(1)
|
||||
|
||||
return self.remove_wait_for_still_pressure
|
||||
|
||||
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:
|
||||
return Retry
|
||||
|
||||
self.circuitshort_valve.write_target(0)
|
||||
self.dump_valve.write_target(0)
|
||||
|
||||
|
||||
if self.compressor is not None:
|
||||
self.compressor.write_target(0)
|
||||
|
||||
for valve in self.remove_closed_valves:
|
||||
valve.write_target(0)
|
||||
|
||||
self.remove_check_manual_valves()
|
||||
self.remove_close_valves()
|
||||
self.circulate_pump.write_target(0)
|
||||
|
||||
return Finish
|
||||
|
||||
|
||||
def remove_check_manual_valves(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def remove_close_valves(self):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class DIL5(Dilution):
|
||||
|
||||
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.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.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()
|
||||
|
||||
def initialize_condense_valves(self):
|
||||
@ -296,5 +308,13 @@ class DIL5(Dilution):
|
||||
valve.write_target(1)
|
||||
self.stop_machine()
|
||||
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)
|
||||
|
||||
def read_status(self):
|
||||
self.log.info('read_status')
|
||||
self.log.debug('read_status')
|
||||
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 self._remaining_tries is None:
|
||||
self.target = self.read_value()
|
||||
|
Loading…
x
Reference in New Issue
Block a user