Commit 6e659977 authored by Zolnierczuk, Piotr's avatar Zolnierczuk, Piotr
Browse files

working example of "get instrument config"

parent 0e9b9256
Loading
Loading
Loading
Loading
+31 −2
Original line number Diff line number Diff line
@@ -2,6 +2,9 @@

import sys
import time
import json
import pprint as pp
#
import pysen.ui.nsett as nsett
from   pysen.misc import setup_logger

@@ -12,7 +15,7 @@ if len(sys.argv)>1:
if len(sys.argv)>2:
    quit=sys.argv[2]

logger = setup_logger()
logger = setup_logger(level='debug', filename='nsett.log')

def wait_callback(dt, done, cmd=""):
    if done:
@@ -20,6 +23,19 @@ def wait_callback(dt, done, cmd=""):
        return
    print('%.3fs waiting...\r' % dt, end='', flush=True)

def parse_out(inbuf):
    result = {}
    for line in inbuf:
        if not line.startswith('val'):
            continue
        tokens = line.split()
        kind, name = tokens[1:3]
        if kind=='current':
            result[name] = float(tokens[3])
        if kind=='motor':
            result[name] = float(tokens[5])
    return result

ns = nsett.NseConnection(verbose=True, wait_callback=wait_callback)
try:
    ns.connect(hostname)
@@ -33,8 +49,21 @@ ns.send('q_move 0.50' )
ns.send('display physics') ;#print('-->',"\n".join(ns.pop()))
ns.send('show physics')    ;#print('-->',"\n".join(ns.pop()))
ns.send('show tech'   )    ;#print('-->',"\n".join(ns.pop()))
ns.send('listcoil'   )    ;print('-->',"\n".join(ns.pop()))
ns.clear() # clear resp queue

res = {}

ns.send('out current'   )
res['currents'] = parse_out(ns.pop())

ns.send('out motor'   )
res['motors'] = parse_out(ns.pop())

print(json.dumps(res, indent=4))


if quit == "yes":
if quit == "quit":
    ns.send('quit', timeout=None)

ns.disconnect()
+64 −13
Original line number Diff line number Diff line
@@ -5,28 +5,79 @@ import pickle
import hashlib
import logging

DEFAULT_LOG_LEVEL=1  # default is warnings and errors
#
ERROR=0
WARNING=1
INFO=2
DEBUG=3
TRACE=4

_MIN_LEVEL=ERROR
_MAX_LEVEL=TRACE

_STR_LEVELS={
    'error'  : ERROR,
    'warning': WARNING,
    'info'   : INFO,
    'debug'  : DEBUG,
    'trace'  : TRACE,
}

# normalize loglevel 0=ERR, 1=WARN, 2=INFO, 3=DEBUG
# so that we can simply 'count' -v/-q
_LOG_LEVELS={
    0: logging.ERROR,   # 40
    1: logging.WARNING, # 30
    2: logging.INFO,    # 20
    3: logging.DEBUG,   # 10
    ERROR:   logging.ERROR,   # 40
    WARNING: logging.WARNING, # 30
    INFO:    logging.INFO,    # 20
    DEBUG:   logging.DEBUG,   # 10
    TRACE:   logging.DEBUG    # for now TRACE==DEBUG
}
_MIN_LEVEL=0
_MAX_LEVEL=3

def setup_logger(level=DEFAULT_LOG_LEVEL, filename=None):
    "setup logger"
DEFAULT_LOG_LEVEL=WARNING  # default is warnings and errors

def get_loglevel(level):
    "get log level"
    if isinstance(level,str):
        level = _STR_LEVELS.get(level.lower(), DEFAULT_LOG_LEVEL)
    # normalize level
    level = max(min(level,_MAX_LEVEL),_MIN_LEVEL)
    loglevel = _LOG_LEVELS.get(level, logging.INFO)
    return _LOG_LEVELS.get(level, logging.INFO)


def setup_logger_standard(level=DEFAULT_LOG_LEVEL, filename=None):
    "setup logger"
    loglevel = get_loglevel(level)
    #
    log_format=r'%(message)s'
    if level<logging.INFO:
    if level<logging.INFO or filename is not None:
        log_format=r'%(levelname)s: %(funcName)s: %(message)s'
    logging.basicConfig(filename=filename, level=loglevel, format=log_format)
    return logging.getLogger()
    log = logging.getLogger()
    return log

def setup_logger_detail(level=DEFAULT_LOG_LEVEL, filename=None):
    "setup logger"
    loglevel = get_loglevel(level)

    log = logging.getLogger()
    log.setLevel(loglevel)

    stream_handler = logging.StreamHandler()
    stream_handler.setLevel(loglevel)
    stream_formatter = logging.Formatter('%(message)s')
    stream_handler.setFormatter(stream_formatter)

    file_handler   = logging.FileHandler(filename=filename)
    file_formatter = logging.Formatter('%(asctime)s | %(name)s |  %(levelname)s: %(message)s')
    file_handler.setFormatter(file_formatter)
    file_handler.setLevel(loglevel)

    log.addHandler(stream_handler)
    log.addHandler(file_handler)

    return log

setup_logger = setup_logger_standard

def dictionary_hash(arg):
    "compute object hash"
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ PySEN revision module
"""
import sys
__version__  = "1.3"
__release__  = "b6"
__release__  = "b7"
__date__     = "Mar 31, 2023"

def version(full=False):
+7 −2
Original line number Diff line number Diff line
@@ -88,7 +88,8 @@ class NseConnection:
                    raise
                finally:
                    if (time.time()-t0)>timeout:
                        raise RuntimeError("timeout in connect()")
                        self.log.error("timeout in connect()")
                        raise TimeoutError("timeout in connect()")
            return result
        # wait for connection
        result = wait_loop(self._sock.connect, connection)
@@ -136,6 +137,10 @@ class NseConnection:
        except IndexError:
            return ''

    def clear(self):
        "clear the response"
        return self._reply.clear()

    def wait(self, sleep_time=1, timeout=DEF_TIMEOUT):
        "wait for the server to respond"
        t0=time.time()
@@ -184,7 +189,7 @@ class NseConnection:
                msg = self._sock.recv(self.CMD_LEN)
                self._thread_busy.set() #
                msg = decode(msg, encoding='ascii', errors='replace')
                self.log.info(msg)
                self.log.debug(msg)
                lines = msg.split('\n')
                for line in lines:
                    if not line: