コード例 #1
0
    def __init__(self,
                 agent,
                 port,
                 ip_address,
                 f_sample=2.5,
                 fake_errors=False):
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()
        self.ip_address = ip_address
        self.fake_errors = fake_errors

        self.port = port
        self.module: Optional[Module] = None
        self.f_sample = f_sample

        self.initialized = False
        self.take_data = False

        # Registers data feeds
        agg_params = {
            'frame_length': 60,
        }
        self.agent.register_feed('ptc_status',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
コード例 #2
0
    def __init__(self, agent, name, ip, fake_data=False, dwell_time_delay=0):

        # self._acq_proc_lock is held for the duration of the acq Process.
        # Tasks that require acq to not be running, at all, should use
        # this lock.
        self._acq_proc_lock = TimeoutLock()

        # self._lock is held by the acq Process only when accessing
        # the hardware but released occasionally so that (short) Tasks
        # may run.  Use a YieldingLock to guarantee that a waiting
        # Task gets activated preferentially, even if the acq thread
        # immediately tries to reacquire.
        self._lock = YieldingLock(default_timeout=5)

        self.name = name
        self.ip = ip
        self.fake_data = fake_data
        self.dwell_time_delay = dwell_time_delay
        self.module = None
        self.thermometers = []

        self.log = agent.log
        self.initialized = False
        self.take_data = False

        self.agent = agent
        # Registers temperature feeds
        agg_params = {
            'frame_length': 10 * 60  #[sec]
        }
        self.agent.register_feed('temperatures',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
コード例 #3
0
    def __init__(self, agent, sn, ip, f_sample=0.1,
                 threshold=0.1, window=900):
        self.agent = agent
        self.sn = sn
        self.ip = ip
        self.f_sample = f_sample
        self.t_sample = 1/self.f_sample - 0.01
        assert self.t_sample < 7200, \
            "acq sampling freq must be such that t_sample is less than 2 hours"

        self._lock = TimeoutLock()
        self.log = agent.log
        self.initialized = False
        self.take_data = False

        self.module = None

        # for stability checking
        self.threshold = threshold
        self.window = window
        self._recent_temps = None
        self._static_setpoint = None

        agg_params = {'frame_length': 10*60}  # sec

        # combined feed for thermometry and control data
        self.agent.register_feed(
            'temperatures',
            record=True,
            agg_params=agg_params,
            buffer_time=1
        )
コード例 #4
0
ファイル: LS240_agent.py プロジェクト: hoangducthuong/socs
    def __init__(self,
                 agent,
                 num_channels=2,
                 fake_data=False,
                 port="/dev/ttyUSB0"):
        print(num_channels)
        self.active = True
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()
        self.fake_data = fake_data
        self.module = None
        self.port = port
        self.thermometers = [
            'Channel {}'.format(i + 1) for i in range(num_channels)
        ]
        self.log = agent.log

        self.initialized = False
        self.take_data = False

        # Registers Temperature and Voltage feeds
        agg_params = {
            'frame_length': 60,
        }
        self.agent.register_feed('temperatures',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
コード例 #5
0
    def __init__(self, agent, ip_addr, port, mode=None, samp=2):

        self.ip_addr = ip_addr
        self.port = port

        self.xy_stage = None
        self.initialized = False
        self.take_data = False
        self.is_moving = False

        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()

        if mode == 'acq':
            self.auto_acq = True
        else:
            self.auto_acq = False
        self.sampling_frequency = float(samp)

        ### register the position feeds
        agg_params = {
            'frame_length': 10 * 60,  #[sec] 
        }

        self.agent.register_feed('positions',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=0)
コード例 #6
0
    def __init__(self, agent, ip=IP_DEFAULT, port=17123):
        '''
        Parameters
        ----------
        ip : string
            IP address
        port : int
            Port number
        '''

        self.active = True
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()
        self.take_data = False

        self._dev = dS378(ip=ip, port=port)

        self.initialized = False

        agg_params = {'frame_length': 60}
        self.agent.register_feed('relay',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
コード例 #7
0
ファイル: labjack_agent.py プロジェクト: simonsobs/socs
    def __init__(self, agent, ip_address, active_channels, function_file,
                 sampling_frequency):
        self.active = True
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()
        self.ip_address = ip_address
        self.module = None
        self.ljf = LabJackFunctions()
        self.sampling_frequency = sampling_frequency

        # Labjack channels to read
        if active_channels[0] == 'T7-all':
            self.chs = ['AIN{}'.format(i) for i in range(14)]
        elif active_channels[0] == 'T4-all':
            self.chs = ['AIN{}'.format(i) for i in range(12)]
        else:
            self.chs = active_channels

        # Load dictionary of unit conversion functions from yaml file. Assumes
        # the file is in the $OCS_CONFIG_DIR directory
        if function_file == 'None':
            self.functions = {}
        else:
            function_file_path = os.path.join(os.environ['OCS_CONFIG_DIR'],
                                              function_file)
            with open(function_file_path, 'r') as stream:
                self.functions = yaml.safe_load(stream)
                if self.functions is None:
                    self.functions = {}
                self.log.info(
                    f"Applying conversion functions: {self.functions}")

        self.initialized = False
        self.take_data = False

        # Register main feed. Exclude influx due to potentially high scan rate
        agg_params = {'frame_length': 60, 'exclude_influx': True}
        self.agent.register_feed('sensors',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)

        # Register downsampled feed for influx.
        agg_params_downsampled = {'frame_length': 60}
        self.agent.register_feed('sensors_downsampled',
                                 record=True,
                                 agg_params=agg_params_downsampled,
                                 buffer_time=1)
        self.agent.register_feed('registers',
                                 record=True,
                                 agg_params={'frame_length': 10 * 60},
                                 buffer_time=1.)
コード例 #8
0
ファイル: synacc.py プロジェクト: simonsobs/socs
    def __init__(self, agent, ip_address, username, password):
        """
        Initializes the class variables

        Args:
            ip_address(str): IP Address for the agent.
            username(str): username credential to login to strip
            password(str): password credential to login to strip
        """
        self.agent = agent
        self.lock = TimeoutLock()
        self.ip_address = ip_address
        self.user = username
        self.passw = password
コード例 #9
0
    def __init__(self, agent, args):
        self.agent: ocs_agent.OCSAgent = agent
        self.log = agent.log

        self.prot = None
        self.protocol_lock = TimeoutLock()

        self.current_session = None

        if args.monitor_id is not None:
            self.agent.subscribe_on_start(
                self._on_session_data,
                'observatory.{}.feeds.pysmurf_session_data'.format(
                    args.monitor_id),
            )
コード例 #10
0
ファイル: tektronix_agent.py プロジェクト: mjrand/SOBUTT
    def __init__(self, agent, ip_address, gpib_slot):
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()

        self.job = None
        self.ip_address = ip_address
        self.gpib_slot = gpib_slot
        self.monitor = False

        self.awg = None
        # Registers data feeds
        agg_params = {
            'frame_length': 60,
        }
        self.agent.register_feed('AWG', record=True, agg_params=agg_params)
コード例 #11
0
ファイル: hwp_simulator_agent.py プロジェクト: gdevenyi/socs
    def __init__(self, agent, port='/dev/ttyACM0'):
        self.active = True
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()
        self.port = port
        self.take_data = False
        self.arduino = HWPSimulator(port=self.port)

        self.initialized = False

        agg_params = {'frame_length': 60}
        self.agent.register_feed('amplitudes',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
コード例 #12
0
    def __init__(self, agent, ip_address, port, f_sample=2.5):
        self.active = True
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()
        self.f_sample = f_sample
        self.take_data = False
        self.gauge = Pfeiffer(ip_address, int(port))
        agg_params = {
            'frame_length': 60,
        }

        self.agent.register_feed('pressures',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
コード例 #13
0
ファイル: rotation_agent.py プロジェクト: simonsobs/socs
    def __init__(self, agent, kikusui_ip, kikusui_port, pid_ip, pid_port,
                 pid_verbosity):
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()
        self._initialized = False
        self.take_data = False
        self.kikusui_ip = kikusui_ip
        self.kikusui_port = int(kikusui_port)
        self.pid_ip = pid_ip
        self.pid_port = pid_port
        self._pid_verbosity = pid_verbosity > 0
        self.cmd = None  # Command object for PSU commanding
        self.pid = None  # PID object for pid controller commanding

        agg_params = {'frame_length': 60}
        self.agent.register_feed('hwprotation',
                                 record=True,
                                 agg_params=agg_params)
コード例 #14
0
    def __init__(self, agent_obj, port=8080):
        self.active = True
        self.agent = agent_obj
        self.log = agent_obj.log
        self.lock = TimeoutLock()
        self.port = port
        self.take_data = False
        self.initialized = False
        # For clock count to time conversion
        self.rising_edge_count = 0
        self.irig_time = 0

        agg_params = {'frame_length': 60}
        self.agent.register_feed('HWPEncoder', record=True,
                                 agg_params=agg_params)
        agg_params = {'frame_length': 60, 'exclude_influx': True}
        self.agent.register_feed('HWPEncoder_full', record=True,
                                 agg_params=agg_params)
        self.parser = EncoderParser(beaglebone_port=self.port)
コード例 #15
0
ファイル: keithley_agent.py プロジェクト: gdevenyi/socs
    def __init__(self, agent, ip_address, gpib_slot):
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()

        self.job = None
        self.ip_address = ip_address
        self.gpib_slot = gpib_slot
        self.monitor = False

        self.psu = None

        # Registers Temperature and Voltage feeds
        agg_params = {
            'frame_length': 10 * 60,
        }
        self.agent.register_feed('psu_output',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=0)
コード例 #16
0
    def __init__(self, agent, ipaddr=IPADDR_DEFAULT):
        '''
        Parameters
        ----------
        ipaddr : str
           IP address of AC supply
        '''
        self.active = True
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()
        self.take_data = False
        self.initialized = False
        self._pcr = PCR500MA(ipaddr)

        agg_params = {'frame_length': 60}
        self.agent.register_feed('acsupply',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
コード例 #17
0
ファイル: LS425_agent.py プロジェクト: simonsobs/socs
    def __init__(self, agent, port, f_sample=1.):

        self.agent: ocs_agent.OCSAgent = agent
        self.log = agent.log
        self.lock = TimeoutLock()

        self.port = port
        self.dev = None

        self.f_sample = f_sample

        self.initialized = False
        self.take_data = False

        # Registers Temperature and Voltage feeds
        agg_params = {'frame_length': 60}
        self.agent.register_feed('mag_field',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
コード例 #18
0
ファイル: labjack_agent.py プロジェクト: gdevenyi/socs
    def __init__(self, agent, ip_address, num_channels):
        self.active = True
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()
        self.ip_address = ip_address
        self.module = None
        self.sensors = ['Channel {}'.format(i+1) for i in range(num_channels)]

        self.initialized = False
        self.take_data = False

        # Register feed
        agg_params = {
            'frame_length': 60,
        }
        self.agent.register_feed('Sensors',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
コード例 #19
0
ファイル: LS240_agent.py プロジェクト: simonsobs/socs
    def __init__(self, agent, port="/dev/ttyUSB0", f_sample=2.5):

        self.agent: ocs_agent.OCSAgent = agent
        self.log = agent.log
        self.lock = TimeoutLock()

        self.port = port
        self.module: Optional[Module] = None

        self.f_sample = f_sample

        self.initialized = False
        self.take_data = False

        # Registers Temperature and Voltage feeds
        agg_params = {
            'frame_length': 60,
        }
        self.agent.register_feed('temperatures',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
コード例 #20
0
    def __init__(self, agent, port=PORT_DEFAULT):
        '''
        Parameters
        ----------
        port : string
            Port to connect
        '''
        self.active = True
        self.agent = agent
        self.log = agent.log
        self.lock = TimeoutLock()
        self.take_data = False

        self._ble2 = BLE2(port=port)

        self.initialized = False

        agg_params = {'frame_length': 60}
        self.agent.register_feed('motor',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
コード例 #21
0
    def __init__(self, agent, config_file):
        self.agent = agent
        self.lock = TimeoutLock()
        self.meas_cap = meas_cap_builder(config_file)

        agg_params = {
            'frame_length': 60,
        }

        for meas, capdists in self.meas_cap.items():
            self.agent.register_feed("Cap{}".format(meas.num),
                    record=True,
                    agg_params=agg_params)
            for n, capdist in enumerate(capdists):
                for i in range(len(capdist.avgs) + 1):
                    self.agent.register_feed("Dist{}_Cal{}_Intvl{}".format(meas.num, n, i),
                        record=True,
                        agg_params=agg_params)

        self.initialized = False
        self.take_data = False
        self.f_poll = POLL_FREQUENCY
        self.send_interval = self.f_poll/SEND_FREQUENCY
コード例 #22
0
ファイル: vantage_pro2_agent.py プロジェクト: simonsobs/socs
    def __init__(self, agent, port="/dev/ttyUSB0", sample_freq=0.5):
        self.active = True
        self.agent: ocs_agent.OCSAgent = agent
        self.log = agent.log
        self.lock = TimeoutLock()

        self.port = port
        self.module: Optional[VantagePro2] = None

        if sample_freq > 0.5:
            self.log.warn("Sample frequency too fast! Setting to 0.5Hz")
            sample_freq = 0.5
        self.sample_freq = sample_freq

        self.initialized = False
        self.take_data = False

        # Registers weather data feed
        agg_params = {
            'frame_length': 60,
        }
        self.agent.register_feed('weather_data',
                                 record=True,
                                 agg_params=agg_params)
コード例 #23
0
    def __init__(self, agent, acu_config='guess'):
        self.lock = TimeoutLock()
        self.jobs = {
            'monitor': 'idle',
            'broadcast': 'idle',
            'control': 'idle',  # shared by all motion tasks/processes
        }

        self.acu_config = aculib.guess_config(acu_config)
        self.base_url = self.acu_config['base_url']
        self.sleeptime = self.acu_config['motion_waittime']
        self.udp = self.acu_config['streams']['main']
        self.udp_ext = self.acu_config['streams']['ext']

        self.log = agent.log

        # self.data provides a place to reference data from the monitors.
        # 'status' is populated by the monitor operation
        # 'broadcast' is populated by the udp_monitor operation
        self.data = {
            'status': {
                'summary': {},
                'full_status': {}
            },
            'broadcast': {},
            'uploads': {},
        }

        self.health_check = {'broadcast': False, 'status': False}

        self.agent = agent

        self.take_data = False

        self.web_agent = tclient.Agent(reactor)
        tclient._HTTP11ClientFactory.noisy = False

        self.acu = aculib.AcuControl('guess',
                                     backend=TwistedHttpBackend(
                                         self.web_agent))
        agent.register_process('monitor',
                               self.start_monitor,
                               lambda: self.set_job_stop('monitor'),
                               blocking=False,
                               startup=True)
        agent.register_process('broadcast',
                               self.start_udp_monitor,
                               lambda: self.set_job_stop('broadcast'),
                               blocking=False,
                               startup=True)
        agent.register_process('generate_scan',
                               self.generate_scan,
                               lambda: self.set_job_stop('generate_scan'),
                               blocking=False,
                               startup=False)
        agg_params = {'frame_length': 60}
        self.agent.register_feed('acu_status_summary',
                                 record=True,
                                 agg_params={
                                     'frame_length': 60,
                                     'exclude_influx': True
                                 },
                                 buffer_time=1)
        self.agent.register_feed('acu_status_full',
                                 record=True,
                                 agg_params={
                                     'frame_length': 60,
                                     'exclude_influx': True
                                 },
                                 buffer_time=1)
        self.agent.register_feed('acu_status_influx',
                                 record=True,
                                 agg_params={
                                     'frame_length': 60,
                                     'exclude_aggregator': True
                                 },
                                 buffer_time=1)
        self.agent.register_feed('acu_udp_stream',
                                 record=True,
                                 agg_params={
                                     'frame_length': 60,
                                     'exclude_influx': True
                                 },
                                 buffer_time=1)
        self.agent.register_feed('acu_broadcast_influx',
                                 record=False,
                                 agg_params={
                                     'frame_length': 60,
                                     'exclude_aggregator': True
                                 },
                                 buffer_time=1)
        self.agent.register_feed('acu_health_check',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
        self.agent.register_feed('acu_upload',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
        self.agent.register_feed('acu_error',
                                 record=True,
                                 agg_params=agg_params,
                                 buffer_time=1)
        agent.register_task('go_to', self.go_to, blocking=False)
        agent.register_task('run_specified_scan',
                            self.run_specified_scan,
                            locking=False)
        agent.register_task('set_boresight',
                            self.set_boresight,
                            blocking=False)
        agent.register_task('stop_and_clear',
                            self.stop_and_clear,
                            blocking=False)