Skip to content
Snippets Groups Projects
Utils.py 2.72 KiB
Newer Older
###################################################################################################
#    Utilities
###################################################################################################
#
# This file contains usefull function and attributes to simplify life
#
###################################################################################################

import tango
import logging
import DeviceAttributeConfiguration

# Get the module logger
logger = logging.getLogger("FofbTool")

tangopath_nodes = {
        "centralnode":"ans/dg/fofb-centralnode",
        "cellnode-c01":"ans/dg/fofb-cellnode-c01",
        "cellnode-c06":"ans/dg/fofb-cellnode-c06",
        "cellnode-c09":"ans/dg/fofb-cellnode-c09",
        "cellnode-c14":"ans/dg/fofb-cellnode-c14",
        }

tangopath = {
        "fofb-watcher":"ans/dg/fofb-watcher",
        "fofb-command":"ans/dg/fofb-command",
        "fofb-manager":"ans/dg/fofb-manager",
        "bpm-manager":"ans/dg/bpm-manager",
        }.update(tangopath_nodes)

def init_opcua():
    """
    Run init on all OPCUA devices. Catch DevFailed and inform via log.
    """

    for i,(n,p) in enumerate(tangopath_nodes.items()):
        logger.info("Perform init() on {} '{}'".format(n,p))
        try:
            tango.DeviceProxy(p).init()
        except tango.DevFailed as e:
            logger.error("Could not perform init() '{}', got DevFailed.".format(p))
            logger.debug(str(e))

def init_watcher():
    """
    Run init on Fofb-Watcher, waiting for its completion then init on the FofbCommand.
    """

    wprx=tango.DeviceProxy(tangopath["fofb-watcher"])
    wprx.set_timeout_millis(30000)

    logger.info("Perform init() on Fofb-Watcher. This takes nearly a minute.")
    try:
        wprx.init()
    except tango.DevFailed as e:
        logger.error("Could not perform init() on Fofb-Watcher.")

    logger.info("Perform init() on Fofb-Command.")
    tango.DeviceProxy(tangopath["fofb-command"]).init()

def confds_opcua():
    """
    Apply attribute configuration on all OPCUA devices. Catch DevFailed and inform via log.
    """
    for i,(n,p) in enumerate(tangopath_nodes.items()):
        try:
            prx = tango.DeviceProxy(p)
        except tango.DevFailed as e:
            logger.error("Could not get proxy '{}', got DevFailed.".format(p))
            logger.debug(str(e))
            break

        try:
            if 'central' in n:
                DeviceAttributeConfiguration.set_attr_config_centralnode(prx)
            else:
                DeviceAttributeConfiguration.set_attr_config_cellnode(prx)
        except tango.DevFailed as e:
            logger.error("Could not set attribute configuration for '{}', got DevFailed.".format(p))
            logger.debug(str(e))