Skip to content

Commit

Permalink
Merge pull request #815 from lnls-sirius/fix-dev
Browse files Browse the repository at this point in the history
Fix and improve EGun.set_hv_voltage
  • Loading branch information
anacso17 authored May 23, 2022
2 parents 4d886d2 + 04cdca0 commit 4985c34
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 20 deletions.
2 changes: 1 addition & 1 deletion siriuspy/siriuspy/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.48.0
2.49.0
40 changes: 21 additions & 19 deletions siriuspy/siriuspy/devices/egun.py
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,8 @@ class EGun(_Devices):
HV_TOLERANCE = 1.0 # [kV]
HV_LEAKCURR_OPVALUE = 0.015 # [mA]
HV_MAXVALUE = 90.0 # [kV]
HV_RAMP_NRPTS = 15
HV_RAMPUP_NRPTS = 15
HV_RAMPDN_NRPTS = 6
HV_RAMP_DURATION = 70 # [s]
FILACURR_OPVALUE = 1.38 # [A]
FILACURR_TOLERANCE = 0.20 # [A]
Expand Down Expand Up @@ -658,8 +659,8 @@ def set_hv_voltage(self, value=None, duration=None, timeout=DEF_TIMEOUT):
if not self._check_status_ok():
self._update_last_status('ERR:MPS or LI Status not ok. Aborted.')
return False
if not self.hvps.is_on():
self._update_last_status('ERR:HVPS voltage is not on.')
if not self.hvps['swstatus'] == self.hvps.PWRSTATE.On:
self._update_last_status('ERR:HVPS switch is not on.')
return False
if value is None:
value = self._hv_opval
Expand All @@ -674,7 +675,7 @@ def set_hv_voltage(self, value=None, duration=None, timeout=DEF_TIMEOUT):
return True

# if needed, enable HVPS
if not self.hvps['enstatus']:
if not self.hvps['enstatus'] == self.hvps.PWRSTATE.On:
self._update_last_status('Sending enable command to HVPS...')
_time.sleep(0.1) # needed for InjCtrl IOC to get logs
if not self.hvps.cmd_enable(5):
Expand All @@ -686,29 +687,25 @@ def set_hv_voltage(self, value=None, duration=None, timeout=DEF_TIMEOUT):
# before voltage setpoints, set leakage current to suitable value
self._update_last_status(
f'Setting max. leak current to {self._hv_leakcurr:.3f}mA.')
_time.sleep(0.1) # needed for InjCtrl IOC to get logs
self.hvps.current = self._hv_leakcurr
if not self.hvps.wait_current(self._hv_leakcurr):
self._update_last_status(
'ERR:Timed out waiting for HVPS leak current.')
return False
_time.sleep(0.1) # needed for InjCtrl IOC to get logs

# if value is lower, do only one setpoint
# if value is lower, do a ramp down
if value < self.hvps.voltage:
self._update_last_status(f'Setting voltage to {value:.3f}kV...')
self.hvps.voltage = value
if self.hvps.wait_voltage(value, self._hv_tol, timeout=3*timeout):
self._update_last_status('HVPS Ready!')
return True
self._update_last_status('ERR:Timed out waiting for HVPS voltage.')
return False

# else, do a ramp up
nrpts = EGun.HV_RAMPDN_NRPTS
power = 1
else: # else, do a ramp up
nrpts = EGun.HV_RAMPUP_NRPTS
power = 2
duration = duration if duration is not None else EGun.HV_RAMP_DURATION
nrpts = EGun.HV_RAMP_NRPTS
max_value = EGun.HV_MAXVALUE
ydata = self._get_ramp(
self.hvps.voltage, value, nrpts, max_value)
self.hvps.voltage, value, nrpts, max_value, power)
t_inter = duration / (nrpts-1)

self._update_last_status(f'Starting HVPS ramp to {value:.3f}kV.')
Expand All @@ -733,7 +730,7 @@ def set_hv_voltage(self, value=None, duration=None, timeout=DEF_TIMEOUT):
else:
self._update_last_status(
'ERR:HVPS Voltage is taking too'
' long to increase. Aborted.')
' long to reach setpoint. Aborted.')
return False
self._update_last_status('HVPS Ready!')
return True
Expand Down Expand Up @@ -816,13 +813,18 @@ def set_fila_current(self, value=None):

def _get_ramp(self, curr_val, goal, nrpts, max_val, power=2):
xdata = _np.linspace(0, 1, nrpts)
if curr_val > goal:
xdata = _np.flip(xdata)

ydata = 1 - (1-xdata)**power
# ydata = _np.sqrt(1 - (1-xdata)**2)
# ydata = _np.sin(2*np.pi * xdata/4)

ydata *= max_val
ydata = ydata[ydata > curr_val]
ydata = ydata[ydata < goal]
mini = min(curr_val, goal)
maxi = max(curr_val, goal)
ydata = ydata[ydata > mini]
ydata = ydata[ydata < maxi]
ydata = _np.r_[curr_val, ydata, goal]
return ydata

Expand Down

0 comments on commit 4985c34

Please sign in to comment.