Skip to main content

Access to Process Variables, served by liteServer

Project description

liteAccess

Access to Process Variables, served by liteServer

Example

import liteaccess as LA 
from pprint import pprint

Host = 'localhost'
LAserver = Host+':server'
LAdev1   = Host+':dev1'
LAdev2   = Host+':dev2'

#``````````````````Simplified programmatic way`````````````````````````````````
LA.Access.info([Host+':*'])# list of all devices and parameters, hosted by Host
LA.Access.info([LAserver])# Info of all parameters of the server
LA.Access.get([LAserver])# get values of all parameters of the server
LA.Access.get([LAserver,'*','desc'])# get descriptions of all parameters of the server

# The commands below assumes that the liteScaler server is running on the same host.
LA.Access.get([LAdev1,'frequency'])
LA.Access.get([LAdev1,('frequency','number'),'desc'])# get parameter property 'desc' for multiple parameters
LA.Access.set([LAdev1,('frequency','number'),(2.2, 9.2)])# set values of multiple parameters
# subscription example:
def testCallback(*args): print(f'callback args: {args}')
LA.Access.subscribe(testCallback,[LAdev1,'cycle'])
LA.Access.unsubscribe()
#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#``````````````````Object-oriented way`````````````````````````````````````````
# Advantage: The previuosly created PVs are reused.
allServerParameters = LA.PVs([LAserver])
pprint(allServerParameters.info())
pprint(allServerParameters.get())# get all parameters from device LAserver
# get all readable parameters from device Scaler1:server, which have been 
# modified since last read:
pprint(allServerParameters.read())

allDev1Parameters = LA.PVs([LAdev1])
pprint(allDev1Parameters.info())

server_performance = LA.PVs((LAserver,'perf'))
pprint(server_performance.info())
pprint(server_performance.get())
# simplified get: returns (value,timestamp) of a parameter 'perf' 
pprint(server_performance.value)

server_multiple_parameters = LA.PVs([LAserver,('perf','run')])
pprint(server_multiple_parameters.info())
pprint(server_multiple_parameters.get())

server_multiple_devPars = LA.PVs((LAdev1,['time','frequency']),(LAserver,['statistics','perf']))
pprint(server_multiple_devPars.get())

# setting
dev1_frequency = LA.PVs((LAdev1,'frequency'))
#TODO#dev1_frequency.set([1.5])
#TODO#dev1_frequency.value
dev1_multiple_parameters = LA.PVs([LAdev1,('frequency','coordinate')])
dev1_multiple_parameters.get() 
#TODO#dev1_multiple_parameters.set([8.,[3.,4.]])

# subscribing
ldo = LA.PVs([LAdev1,'cycle'])
ldo.subscribe()# it will print image data periodically
ldo.unsubscribe()# cancel the subscruption

# test for timeout, should timeout in 10s:
#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#``````````````````Observations````````````````````````````````````````````````
Timing of Access.get using ipython on localhost.
    from liteserver import liteAccess as LA
    Host='localhost'
    LAdev1   = Host+':dev1'
    %timeit image = LA.Access.get((LAdev1,['image']))
    145 µs ± 1.95 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    for version 3.2.0:
    317 µs ± 5.53 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
    image[(LAdev1,'image')]['value'].shape
    (120, 160, 3)
Retrieving time of 57600 values (120*160*3) is 145 µs,
which corresponds to 400 mValues/s

Retrieving time of 57600 values (120*160*3) 220 µs,
which corresponds to 260 MValues/s (on entry-level workstation). 
It was 400 MValues/s on top-level workstation.
Note: Msgpack was 4% faster.
#``````````````````Tips````````````````````````````````````````````````````````
# To enable debugging: LA.PVs.Dbg = True
# To enable transaction timing: LA.Channel.Perf = True

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

liteaccess-3.3.0.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

liteaccess-3.3.0-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file liteaccess-3.3.0.tar.gz.

File metadata

  • Download URL: liteaccess-3.3.0.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.10

File hashes

Hashes for liteaccess-3.3.0.tar.gz
Algorithm Hash digest
SHA256 5fe87d6bd8ecde0511d2d91f8c8263bd97e43a8d66788104d28670ebc93de2d7
MD5 8981e5bb981072099031c87a210e0729
BLAKE2b-256 8580405ae321bef9761e5670e3d577fa3cfafc64fd1772a4036106e61fab75ec

See more details on using hashes here.

File details

Details for the file liteaccess-3.3.0-py3-none-any.whl.

File metadata

  • Download URL: liteaccess-3.3.0-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.10

File hashes

Hashes for liteaccess-3.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 919bcbb423b445649e1a510ac45c7e80ed06014e8060debc3f16b9e76891e924
MD5 440a88c1a964f5c8b2c56ac3dc4b695d
BLAKE2b-256 af769f97781174e3a9c46175d33c515646796aa47a15d35090ffc380bb1862a0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page