Skip to content

seanalsop/acq400_hapi

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

acq400_hapi: acq400 Host API

python module to connect to remote hosts

NB: works with Python 2.7. Does not work with Python 3.x

class Acq400 nails up a socket connection to all the site servers at 4220+s,
as well as running a status monitor thread on 2235 and 
allowing access to post-shot data on 53000+ch

each knob on the site is presented as a property of the connection, so that 
simple bash-script-like syntax can be used

uut.s0.set_arm=1

Example: running a session interactively while a test loop is running:
>>> import acq400_hapi
>>> uut = acq400_hapi.Acq400("10.12.132.22", monitor=False)
>>> uut.s1.shot
'348'
>>> uut.s1.shot
'348'
>>> uut.s1.shot
'349'


The goal is to make it easy to remote-script multiple uut's.

Example:

from acq400_hapi import *
uut1=acq400.Acq400("acq1001_144")
uut2=acq400.Acq400("acq1001_145")

for ii in range(0,10):
	c1 = uut1.s1.SIG_SAMPLE_COUNT_COUNT.split(" ")[1]
	c2 = uut2.s1.SIG_SAMPLE_COUNT_COUNT.split(" ")[1]
	print("%s %s" % (c1, c2))
11078689363247 11078689363247
11078689363247 11078689363247
11078739404360 11078739404360
11078739404360 11078739404360
11078739404360 11078789398809
11078789398809 11078789398809
11078789398809 11078789398809
11078839399330 11078839399330
11078839399330 11078839399330


... and yes, these are EPICS PV's, so we could use capy.
But, this way, it's all vanilla python, no other installs required.

Note also, knob names eg
SIG:SAMPLE_COUNT:COUNT are auto converted to valid python identifiers:
SIG_SAMPLE_COUNT_COUNT

You can enumerate all the knobs with

uut.s0.help()
..
uut.s6.help()

Help also takes a regex.
uut.s0.help(*COUNT)

Example:
>>> import acq400_hapi
>>> uut = acq400_hapi.Acq400("10.12.132.22", monitor=False)
>>> for f in uut.s0.help('.*FREQ'):
...     uut.s0.get_knob(f)
... 
'SIG:CLK_EXT:FREQ 25007219'
'SIG:CLK_MB:FREQ 50012464'
'SIG:CLK_S1:FREQ 50010624'
'SIG:CLK_S2:FREQ 0'
'SIG:EVT_EXT:FREQ 0'
'SIG:EVT_MB:FREQ 0'
'SIG:EVT_S1:FREQ 0'


The Acq400 class can be fairly slow to instantiate
(imagine an ACQ2106 with 6 sites populated), but once the connections are 
nailed up, then control links are fast. 
=> The use case is: make the connection at the beginning, then operate over
long periods.

TODO:
- add a 4210 socket for live stream?. 


About

Host App Python Interface : remote control connection layer via tcp/ip

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Python 100.0%