Skip to content

Commit

Permalink
Merge pull request #905 from lnls-sirius/improve-pspu-dev
Browse files Browse the repository at this point in the history
Update devices and InjCtrl IOC
  • Loading branch information
fernandohds564 authored Feb 7, 2023
2 parents 4394237 + c24342e commit bda5633
Show file tree
Hide file tree
Showing 8 changed files with 117 additions and 16 deletions.
2 changes: 1 addition & 1 deletion siriuspy/siriuspy/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.65.1
2.66.0
30 changes: 30 additions & 0 deletions siriuspy/siriuspy/devices/injctrl.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ class InjCtrl(_Device):
'FilaOpCurr-SP', 'FilaOpCurr-RB', 'FilaOpCurrCmdSts-Mon',
'HVOpVolt-SP', 'HVOpVolt-RB', 'HVOpVoltCmdSts-Mon',
'PUMode-Sel', 'PUMode-Sts', 'PUMode-Mon', 'PUModeCmdSts-Mon',
'PUModeDeltaPosAng-SP', 'PUModeDeltaPosAng-RB',
'PUModeDpKckrDlyRef-SP', 'PUModeDpKckrDlyRef-RB',
'PUModeDpKckrKick-SP', 'PUModeDpKckrKick-RB',
'TargetCurrent-SP', 'TargetCurrent-RB',
'BucketListStart-SP', 'BucketListStart-RB',
'BucketListStop-SP', 'BucketListStop-RB',
Expand Down Expand Up @@ -181,6 +184,33 @@ def hvolt_cmdsts(self):
"""EGun high voltage setpoint command status (Idle or Running)."""
return self['HVOpVoltCmdSts-Mon']

@property
def pumode_delta_posang(self):
"""."""
return self['PUModeDeltaPosAng-RB']

@pumode_delta_posang.setter
def pumode_delta_posang(self, value):
self['PUModeDeltaPosAng-SP'] = value

@property
def pumode_dpkckr_dlyref(self):
"""."""
return self['PuModeDpKckrDlyRef-RB']

@pumode_dpkckr_dlyref.setter
def pumode_dpkckr_dlyref(self, value):
self['PUModeDpKckrDlyRef-SP'] = value

@property
def pumode_dpkckr_kick(self):
"""."""
return self['PUModeDpKckrKick-RB']

@pumode_dpkckr_kick.setter
def pumode_dpkckr_kick(self, value):
self['PUModeDpKckrKick-SP'] = value

@property
def pumode(self):
"""PU mode (Accumulation, Optimization or OnAxis)."""
Expand Down
29 changes: 16 additions & 13 deletions siriuspy/siriuspy/devices/injsys.py
Original file line number Diff line number Diff line change
Expand Up @@ -808,7 +808,7 @@ class InjSysPUModeHandler(_Devices, _Callback):
_DEF_SLEEP = 0.1 # [s]
SI_DPKCKR_DEFKICK = -6.7 # [mrad]
TS_POSANG_DEFDELTA = 2.5 # [mrad]
SI_DPKCKR_DLYREF = 36.8e6 # [count]
SI_DPKCKR_DLYREF = 36800000 # [count]

def __init__(self, print_log=True, callback=None):
"""Init."""
Expand All @@ -817,6 +817,9 @@ def __init__(self, print_log=True, callback=None):
self.trigdpk = Trigger('SI-01SA:TI-InjDpKckr')
self.trignlk = Trigger('SI-01SA:TI-InjNLKckr')
self.posang = PosAng(PosAng.DEVICES.TS)
self.delta_posang = self.TS_POSANG_DEFDELTA
self.dpkckr_dlyref = self.SI_DPKCKR_DLYREF
self.dpkckr_kick = self.SI_DPKCKR_DEFKICK
devices = (
self.pudpk, self.punlk,
self.trigdpk, self.trignlk,
Expand All @@ -831,8 +834,8 @@ def __init__(self, print_log=True, callback=None):

@property
def is_trigdpk_onaxis(self):
"""Whether DpK trigger delay raw is above SI_DPKCKR_DLYREF."""
return self.trigdpk.delay_raw < self.SI_DPKCKR_DLYREF
"""Whether DpK trigger delay raw is above dpkckr_dlyref."""
return self.trigdpk.delay_raw > self.dpkckr_dlyref

@property
def is_accum(self):
Expand All @@ -856,7 +859,7 @@ def cmd_switch_to_accum(self):

# if previously in on-axis, do delta angle x
if self.is_onaxis:
if not self._do_delta_posang(-self.TS_POSANG_DEFDELTA):
if not self._do_delta_posang(-self.delta_posang):
return False

# set pulsed magnet pwrstate and pulse
Expand All @@ -879,7 +882,7 @@ def is_optim(self):
return False
dpk_evt_ok = self.trigdpk.source == self.trignlk.source
dpk_dly_ok = not self.is_trigdpk_onaxis
dpk_kck_ok = abs(self.pudpk.strength - self.SI_DPKCKR_DEFKICK) < 1e-3
dpk_kck_ok = abs(self.pudpk.strength - self.dpkckr_kick) < 1e-3
dpk_on = (self.pudpk.pwrstate == PowerSupplyPU.PWRSTATE.On) and \
(self.pudpk.pulse == PowerSupplyPU.PULSTATE.On)
nlk_on = (self.punlk.pwrstate == PowerSupplyPU.PWRSTATE.On) and \
Expand All @@ -897,15 +900,15 @@ def cmd_switch_to_optim(self):

# if previously in on-axis, do delta angle x
if self.is_onaxis:
if not self._do_delta_posang(-self.TS_POSANG_DEFDELTA):
if not self._do_delta_posang(-self.delta_posang):
return False

if self._check_abort():
return False

# configure DpK trigger
if self.is_trigdpk_onaxis:
delay = self.trigdpk.delay_raw + self.SI_DPKCKR_DLYREF
delay = self.trigdpk.delay_raw - self.dpkckr_dlyref
if not self._config_dpk_trigger(delayraw=delay):
return False

Expand Down Expand Up @@ -933,7 +936,7 @@ def is_onaxis(self):
return False
dpk_evt_ok = self.trigdpk.source == self.trignlk.source
dpk_dly_ok = self.is_trigdpk_onaxis
dpk_kck_ok = abs(self.pudpk.strength - self.SI_DPKCKR_DEFKICK) < 1e-3
dpk_kck_ok = abs(self.pudpk.strength - self.dpkckr_kick) < 1e-3
dpk_on = (self.pudpk.pwrstate == PowerSupplyPU.PWRSTATE.On) and \
(self.pudpk.pulse == PowerSupplyPU.PULSTATE.On)
nlk_off = (self.punlk.pwrstate == PowerSupplyPU.PWRSTATE.Off) or \
Expand All @@ -951,15 +954,15 @@ def cmd_switch_to_onaxis(self):

# if not previously in on-axis, do delta angle x
if not self.is_onaxis:
if not self._do_delta_posang(self.TS_POSANG_DEFDELTA):
if not self._do_delta_posang(self.delta_posang):
return False

if self._check_abort():
return False

# configure DpK trigger
if not self.is_trigdpk_onaxis:
delay = self.trigdpk.delay_raw - self.SI_DPKCKR_DLYREF
delay = self.trigdpk.delay_raw + self.dpkckr_dlyref
if not self._config_dpk_trigger(delayraw=delay):
return False

Expand Down Expand Up @@ -1015,11 +1018,11 @@ def _config_dpk_trigger(self, delayraw):
return True

def _config_dpk_kick(self):
self.pudpk.strength = self.SI_DPKCKR_DEFKICK
if not self._wait(self.pudpk, 'strength', self.SI_DPKCKR_DEFKICK):
self.pudpk.strength = self.dpkckr_kick
if not self._wait(self.pudpk, 'strength', self.dpkckr_kick):
self._update_status(
'ERR:Could not set DpK Kick to '
f'{self.SI_DPKCKR_DEFKICK:.1f}mrad.')
f'{self.dpkckr_kick:.1f}mrad.')
return False
return True

Expand Down
12 changes: 11 additions & 1 deletion siriuspy/siriuspy/devices/pwrsupply.py
Original file line number Diff line number Diff line change
Expand Up @@ -565,7 +565,7 @@ class DEVICES:
SI_PING_H, SI_PING_V,
)

_properties_timing = ('Delay-SP', 'Delay-RB')
_properties_timing = ('Delay-SP', 'Delay-RB', 'DelayRaw-SP', 'DelayRaw-RB')

def __init__(self, devname):
"""."""
Expand Down Expand Up @@ -603,6 +603,16 @@ def delay(self, value):
"""."""
self._dev_timing['Delay-SP'] = value

@property
def delay_raw(self):
"""."""
return self._dev_timing['DelayRaw-RB']

@delay_raw.setter
def delay_raw(self, value):
"""."""
self._dev_timing['DelayRaw-SP'] = value

@property
def pulse(self):
"""."""
Expand Down
24 changes: 24 additions & 0 deletions siriuspy/siriuspy/injctrl/csdev.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,30 @@ def get_injctrl_propty_database():
'PUModeCmdSts-Mon': {
'type': 'enum', 'value': _ct.IdleRunning.Idle,
'enums': _et.IDLERUNNING, 'unit': 'Idle_Run'},
'PUModeDeltaPosAng-SP': {
'type': 'float', 'value': 2.5, 'unit': 'mrad',
'prec': 3, 'lolim': 0.0, 'low': 0.0, 'lolo': 0.0,
'hilim': 5.0, 'high': 5.0, 'hihi': 5.0},
'PUModeDeltaPosAng-RB': {
'type': 'float', 'value': 2.5, 'unit': 'mrad',
'prec': 3, 'lolim': 0.0, 'low': 0.0, 'lolo': 0.0,
'hilim': 5.0, 'high': 5.0, 'hihi': 5.0},
'PUModeDpKckrDlyRef-SP': {
'type': 'float', 'value': 36.8e6, 'unit': 'hard',
'prec': 0, 'lolim': 0.0, 'low': 0.0, 'lolo': 0.0,
'hilim': 37.0e6, 'high': 37.0e6, 'hihi': 37.0e6},
'PUModeDpKckrDlyRef-RB': {
'type': 'float', 'value': 36.8e6, 'unit': 'hard',
'prec': 0, 'lolim': 0.0, 'low': 0.0, 'lolo': 0.0,
'hilim': 37.0e6, 'high': 37.0e6, 'hihi': 37.0e6},
'PUModeDpKckrKick-SP': {
'type': 'float', 'value': -6.7, 'unit': 'mrad',
'prec': 3, 'lolim': -8.0, 'low': -8.0, 'lolo': -8.0,
'hilim': 0.0, 'high': 0.0, 'hihi': 0.0},
'PUModeDpKckrKick-RB': {
'type': 'float', 'value': -6.7, 'unit': 'mrad',
'prec': 3, 'lolim': -8.0, 'low': -8.0, 'lolo': -8.0,
'hilim': 0.0, 'high': 0.0, 'hihi': 0.0},
'TargetCurrent-SP': {
'type': 'float', 'value': 100.0, 'unit': 'mA',
'prec': 2, 'lolim': 0.0, 'low': 0.0, 'lolo': 0.0,
Expand Down
31 changes: 31 additions & 0 deletions siriuspy/siriuspy/injctrl/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,9 @@ def __init__(self):
'FilaOpCurr-SP': self.set_filaopcurr,
'HVOpVolt-SP': self.set_hvopvolt,
'PUMode-Sel': self.set_pumode,
'PUModeDeltaPosAng-SP': self.set_pumode_delta_posang,
'PUModeDpKckrDlyRef-SP': self.set_pumode_dpkckr_dlyref,
'PUModeDpKckrKick-SP': self.set_pumode_dpkckr_kick,
'TargetCurrent-SP': self.set_target_current,
'BucketListStart-SP': self.set_bucketlist_start,
'BucketListStop-SP': self.set_bucketlist_stop,
Expand Down Expand Up @@ -282,6 +285,16 @@ def init_database(self):
self._callback_update_pumode)
self._pumode_dev.punlk.pv_object('Pulse-Sts').add_callback(
self._callback_update_pumode)
self.run_callbacks(
'PUModeDeltaPosAng-SP', self._pumode_dev.delta_posang)
self.run_callbacks(
'PUModeDeltaPosAng-RB', self._pumode_dev.delta_posang)
self.run_callbacks(
'PUModeDpKckrDlyRef-SP', self._pumode_dev.dpkckr_dlyref)
self.run_callbacks(
'PUModeDpKckrDlyRef-RB', self._pumode_dev.dpkckr_dlyref)
self.run_callbacks('PUModeDpKckrKick-SP', self._pumode_dev.dpkckr_kick)
self.run_callbacks('PUModeDpKckrKick-RB', self._pumode_dev.dpkckr_kick)
self.run_callbacks('PUModeCmdSts-Mon', self._p2w['PUMode']['status'])
self.run_callbacks('TargetCurrent-SP', self._target_current)
self.run_callbacks('TargetCurrent-RB', self._target_current)
Expand Down Expand Up @@ -500,6 +513,24 @@ def set_pumode(self, value):
self._launch_watch_dev_thread()
return True

def set_pumode_delta_posang(self, value):
"""Set PU mode delta posang"""
self._pumode_dev.delta_posang = value
self.run_callbacks('PUModeDeltaPosAng-RB', value)
return True

def set_pumode_dpkckr_dlyref(self, value):
"""Set PU mode DpKckr delay."""
self._pumode_dev.dpkckr_dlyref = value
self.run_callbacks('PUModeDpKckrDlyRef-RB', value)
return True

def set_pumode_dpkckr_kick(self, value):
"""Set PU mode DpKckr kick."""
self._pumode_dev.dpkckr_kick = value
self.run_callbacks('PUModeDpKckrKick-RB', value)
return True

def set_target_current(self, value):
"""Set the target injection current value ."""
self._target_current = value
Expand Down
2 changes: 2 additions & 0 deletions siriuspy/siriuspy/stabinfo/csdev.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ class StabInfoConst(_csdev.Const):

SI_HARMNUM = 864

CURR_THRES = 5 # [mA]

DEF_BBBH_CALIBFACTOR = 1.718 # [counts/mA/um]
DEF_BBBV_CALIBFACTOR = 4.917 # [counts/mA/um]
DEF_BBBL_CALIBFACTOR = 1000 # [counts/mA/degree]
Expand Down
3 changes: 2 additions & 1 deletion siriuspy/siriuspy/stabinfo/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,11 +190,12 @@ def _update_pvs(self):
harmn = self._const.SI_HARMNUM
calib = getattr(self, '_bbb'+pln.lower()+'_calibfactor')
thres = getattr(self, '_bbb'+pln.lower()+'_oscamp_thres')
cthres = self._const.CURR_THRES
oscamp_db = dev['SRAM_PEAK1']
if oscamp_db is not None:
oscamp_phy = 10**(oscamp_db/20) * harmn / curr / calib
self.run_callbacks('BbB'+pln+'OscAmp-Mon', oscamp_phy)
status = oscamp_phy > thres
status = curr > cthres and oscamp_phy > thres
self.run_callbacks('BbB'+pln+'Status-Mon', int(status))

ttook = _time.time() - _t0
Expand Down

0 comments on commit bda5633

Please sign in to comment.