Package: gepace
GE Pace libraryThis library is used to control basic features of a GE Pressure Automated
Calibration Equipment (Pace) models 1000, 5000 and 6000.It is composed of a core library, an optional simulator and
an optionaltangodevice server.It has been tested with the Pace 5000 model, but should work with other models.It can be used with either the ETH or the serial line connection (read below
on the recommended way to setup a serial line connection)InstallationFrom within your favorite python environment type:$ pip install gepaceLibraryThe core of the gepace library consists of Pace object.
To create a Pace object you need to pass a communication object.The communication object can be any object that supports a simple API
consisting of two methods (either the sync or async version is supported):write_readline(buff: bytes) -> bytesorasync write_readline(buff: bytes) -> byteswrite(buff: bytes) -> Noneorasync write(buff: bytes) -> NoneA library that supports this API issockio(gepace comes pre-installed so you don't have to worry about installing it).This library includes both async and sync versions of the TCP object. It also
supports a set of features like reconnection and timeout handling.Here is how to connect to a GE Pace controller:importasynciofromsockio.aioimportTCPfromgepaceimportPaceasyncdefmain():tcp=TCP("192.168.1.123",5000)# use host name or IPpace=Pace(tcp)idn=awaitpace.idn()name=awaitpace.name()print("Connected to{}({})".format(idn,name))# channel access:temp_A=awaitpace['A'].temperature()unit=awaitpace['A'].unit()print("Channel A temperature:{}{}".format(temp_A,unit))# loop access:source_1=awaitpace[1].source()print("Loop 1 source:{}".format(source_1))# activate controlawaitpace.control(True)# hardware only accepts queries every 100ms. Yo can, however,# group queries in single request:asyncwithpaceasgroup:pace.idn()pace.control()pace['A'].temperature()idn,ctrl,temp_A=group.repliesasyncio.run(main())Serial lineTo access a serial line based Pace device it is strongly recommended you spawn
a serial to tcp bridge usingser2netorsocatAssuming your device is connected to/dev/ttyS0and the baudrate is set to 19200,
here is how you could use socat to expose your device on the machine port 5000:socat -v TCP-LISTEN:5000,reuseaddr,fork file:/dev/ttyS0,rawer,b19200,cs8,eol=10,icanon=1It might be worth considering starting socat or ser2net as a service usingsupervisororcircus.SimulatorA Pace simulator is provided.Before using it, make sure everything is installed with:$ pip install gepace[simulator]Thesinstrumentsengine is used.To start a simulator you need to write a YAML config file where you define
how many devices you want to simulate and which properties they hold.The following example exports 2 hardware devices. The first is a minimal
configuration using default values and the second defines some initial values
explicitly:# config.ymldevices:-class:Pacepackage:gepace.simulatortransports:-type:tcpurl::5000To start the simulator type:$ sinstruments-server -c ./config.yml --log-level=DEBUG
2020-05-14 16:02:35,004 INFO  simulator: Bootstraping server
2020-05-14 16:02:35,004 INFO  simulator: no backdoor declared
2020-05-14 16:02:35,004 INFO  simulator: Creating device Pace ('Pace')
2020-05-14 16:02:35,080 INFO  simulator.Pace[('', 5000)]: listening on ('', 5000) (newline='\n') (baudrate=None)(To see the full list of options typesinstruments-server --help)You can access it as you would a real hardware:$ nc localhost 5000
*IDN?
GE,Pace5000,204683,1.01Aor using the library:$python>>>fromsockio.sioimportTCP# use synchronous socket in the CLI!>>>fromgepaceimportPace>>>pace=Pace(TCP('localhost',5000))>>>print(pace.idn())GE,Pace5000,204683,1.01ATango serverAtangodevice server is also provided.Make sure everything is installed with:$ pip install gepace[tango]Register a gepace tango server in the tango database:$ tangoctl server add -s GEPace/test -d Pace test/cryocon/1
$ tangoctl device property write -d test/pace/1 -p address -v "tcp://192.168.123:5000"(the above example usestangoctl. You would need
to install it withpip install tangoctlbefore using it. You are free to use any other
tango tool likefandangoor Jive)Launch the server with:$ GEPace testTODOAddon_connection_madecallback to initialize controller with:unit=Kcache IDN, fw revision, hw revisionshould we cache system:name? and input:name? in theory in could be modified
directly with the hardware front panel