fixes for flamesample
- fixes in SwitchDrive - increase range when reading is zero in autorange - add debugging log msgs
This commit is contained in:
@ -155,44 +155,52 @@ class SwitchDriv(HasConvergence, Drivable):
|
||||
|
||||
def doPoll(self):
|
||||
super().doPoll()
|
||||
if self.isBusy():
|
||||
if self._switch_target is not None:
|
||||
mid = (self.min_high + self.max_low) * 0.5
|
||||
if self._switch_target == HIGH:
|
||||
low = get_value(self.low, mid) # returns mid when low is invalid
|
||||
if low > mid:
|
||||
self.value = self.low.value
|
||||
self._switch_target = None
|
||||
self.write_target(self.target)
|
||||
return
|
||||
else:
|
||||
high = get_value(self.high, mid) # return mid then high is invalid
|
||||
if high < mid:
|
||||
self.value = self.high.value
|
||||
self._switch_target = None
|
||||
self.write_target(self.target)
|
||||
return
|
||||
else:
|
||||
if self._switch_target is not None:
|
||||
mid = (self.min_high + self.max_low) * 0.5
|
||||
if self._switch_target == HIGH:
|
||||
low = get_value(self.low, mid) # returns mid when low is invalid
|
||||
if low > mid:
|
||||
self.value = self.low.value
|
||||
self._switch_target = None
|
||||
self.write_target(self.target)
|
||||
return
|
||||
else:
|
||||
high = get_value(self.high, mid) # return mid then high is invalid
|
||||
if high < mid:
|
||||
self.value = self.high.value
|
||||
self._switch_target = None
|
||||
self.write_target(self.target)
|
||||
return
|
||||
if not self.isBusy():
|
||||
low = get_value(self.low, self.max_low)
|
||||
high = get_value(self.high, self.min_high)
|
||||
low_valid = low < self.max_low
|
||||
high_valid = high > self.min_high
|
||||
if high_valid and high > self.max_low:
|
||||
if not low_valid:
|
||||
if not low_valid and not self.low.control_active:
|
||||
set_enabled(self.low, False)
|
||||
return
|
||||
if low_valid and low < self.min_high:
|
||||
if not high_valid:
|
||||
if not high_valid and not self.high.control_active:
|
||||
set_enabled(self.high, False)
|
||||
return
|
||||
set_enabled(self.low, True)
|
||||
set_enabled(self.high, True)
|
||||
|
||||
def get_selected(self):
|
||||
low = get_value(self.low, self.max_low)
|
||||
high = get_value(self.high, self.min_high)
|
||||
if low < self.min_high:
|
||||
return 0
|
||||
if high > self.max_low:
|
||||
return 1
|
||||
return self.selected
|
||||
|
||||
def read_value(self):
|
||||
return self.low.value if self.selected == LOW else self.high.value
|
||||
return self.low.value if self.get_selected() == LOW else self.high.value
|
||||
|
||||
def read_status(self):
|
||||
status = self.low.status if self.selected == LOW else self.high.status
|
||||
status = self.low.status if self.get_selected() == LOW else self.high.status
|
||||
if status[0] >= ERROR:
|
||||
return status
|
||||
return super().read_status() # convergence status
|
||||
@ -202,17 +210,17 @@ class SwitchDriv(HasConvergence, Drivable):
|
||||
selected = self.selected
|
||||
target1 = target
|
||||
self._switch_target = None
|
||||
if target > self.max_low:
|
||||
if target > self.max_low * 0.75 + self.min_high * 0.25:
|
||||
if self.value < self.min_high:
|
||||
target1 = self.max_low
|
||||
target1 = min(target, self.max_low)
|
||||
self._switch_target = HIGH
|
||||
selected = LOW
|
||||
else:
|
||||
this, other = other, this
|
||||
selected = HIGH
|
||||
elif target < self.min_high:
|
||||
elif target < self.min_high * 0.75 + self.max_low * 0.25:
|
||||
if self.value > self.max_low:
|
||||
target1 = self.min_high
|
||||
target1 = max(self.min_high, target)
|
||||
self._switch_target = LOW
|
||||
this, other = other, this
|
||||
selected = HIGH
|
||||
|
Reference in New Issue
Block a user