Source code for pydevmgr_elt.devices.shutter

from pydevmgr_elt.devices.shutter.stat import ShutterStat as Stat
from pydevmgr_elt.devices.shutter.cfg  import ShutterCfg as Cfg
from pydevmgr_elt.devices.shutter.rpcs import ShutterRpcs as Rpcs

from pydevmgr_elt.base import EltDevice
from pydevmgr_core import record_class, Defaults
from typing import Optional


Base = EltDevice


class ShutterCtrlConfig(Base.Config.CtrlConfig):
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Data Structure (on top of CtrlConfig)
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    low_closed:    Optional[bool] =  False
    low_fault:     Optional[bool] =  False  # If T, signal is active low
    low_open:      Optional[bool] =  False  # If T, signal is active low
    low_switch:    Optional[bool] =  False  # If T, signal is active low
    ignore_closed: Optional[bool] =  False  # If T, ignore the signal
    ignore_fault:  Optional[bool] =  False  # If T, ignore the signal
    ignore_open:   Optional[bool] =  False  # If T, ignore the signal
    initial_state: Optional[bool] =  False
    timeout:       Optional[int]  =  2000
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
class ShutterConfig(Base.Config):
    CtrlConfig = ShutterCtrlConfig
    
    Cfg = Cfg.Config
    Stat = Stat.Config
    Rpcs = Rpcs.Config
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Data Structure (redefine the ctrl_config)
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    type: str = "Shutter"
    ctrl_config : CtrlConfig= CtrlConfig()
    
    cfg: Defaults[Cfg] = Cfg()
    stat: Defaults[Stat] = Stat()
    rpcs: Defaults[Rpcs] = Rpcs()
    
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




[docs]@record_class class Shutter(Base): """ ELt Standard Shutter device """ Config = ShutterConfig Cfg = Cfg Stat = Stat Rpcs = Rpcs class Data(Base.Data): Cfg = Cfg.Data Stat = Stat.Data Rpcs = Rpcs.Data cfg: Cfg = Cfg() stat: Stat = Stat() rpcs: Rpcs = Rpcs()
[docs] def open(self) -> Base.Node: """ open the shutter Returns: is_open: the :class:`NodeAlias` .stat.is_open to check if the shutter is open Example: :: wait( shutter.open() ) """ self.rpcs.rpcOpen.rcall() return self.stat.is_open
[docs] def close(self) -> Base.Node: """ close the shutter Returns: is_closed: the :class:`NodeAlias` .stat.is_closed to check if the shutter is closed Example: :: wait( shutter.close() ) """ self.rpc.rpcClose.rcall() return self.stat.is_closed
[docs] def stop(self): """ stop any motion """ self.rpcs.rpcStop.rcall()
if __name__ == "__main__": s = Shutter('s') s.stat.is_closed