Skip to content
Snippets Groups Projects
Commit 0c428c4f authored by BRONES Romain's avatar BRONES Romain
Browse files

Continue Dev

* Add basic operations
* Not full tested
parent c1b8bb4a
No related branches found
No related tags found
No related merge requests found
......@@ -16,7 +16,7 @@ if __name__ == '__main__':
# Safer import: add the parent dir in path
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import FofbTool.Utils
import FofbTool.Configuration
import FofbTool.Configuration # Still needs for one function, TODO
# Get the module logger
......@@ -39,10 +39,25 @@ if __name__ == '__main__':
parser.add_argument("--DS-conf", action="store_true",
help="Applying attribute configuration on Tango Device Servers. This is required after restart of devices.")
parser.add_argument("--stop", action="store_true",
help="Stop command for the CCN and ComBPM applications blocks.")
parser.add_argument("--stop-combpm", action="store_true",
help="Stop command for the ComBPM applications blocks.")
parser.add_argument("--stop-ccn", action="store_true",
help="Stop command for the ComBPM applications blocks.")
parser.add_argument("--configure", choices=["combpm", "ccn", "comcorr", "corr", "all", "every"], nargs="+",
help="Configuration commands for the Fofb applications blocs."+
" 'all' is for all com, not configuring corrector. 'every' configure everything.")
parser.add_argument("--start", action="store_true",
help="Start command for the CCN and ComBPM applications blocks.")
parser.add_argument("--start-combpm", action="store_true",
help="Start command for the ComBPM applications blocks.")
parser.add_argument("--start-ccn", action="store_true",
help="Start command for the ComBPM applications blocks.")
args = parser.parse_args()
# Set log level from args
......@@ -60,15 +75,26 @@ if __name__ == '__main__':
if args.DS_conf:
FofbTool.Utils.confds_opcua()
for conf in args.configure:
if conf in ("combpm", "all", "every"):
FofbTool.Utils.conf_all_combpm()
if conf in ("comcorr", "all", "every"):
FofbTool.Utils.conf_all_comcorr()
if conf in ("ccn", "all", "every"):
FofbTool.Utils.conf_all_ccn()
if conf in ("corr", "every"):
FofbTool.Configuration.centralnode_configure_corr()
if args.stop or args.stop_combpm:
FofbTool.Utils.stop_all_combpm()
if args.stop or args.stop_ccn:
FofbTool.Utils.stop_all_ccn()
if not args.configure is None:
for conf in args.configure:
if conf in ("combpm", "all", "every"):
FofbTool.Utils.conf_all_combpm()
if conf in ("comcorr", "all", "every"):
FofbTool.Utils.conf_all_comcorr()
if conf in ("ccn", "all", "every"):
FofbTool.Utils.conf_all_ccn()
if conf in ("corr", "every"):
FofbTool.Configuration.centralnode_configure_corr()
if args.start or args.start_combpm:
FofbTool.Utils.start_all_combpm()
if args.start or args.start_ccn:
FofbTool.Utils.start_all_ccn()
exit(0)
......@@ -82,19 +108,6 @@ if __name__ == '__main__':
centralnode_configure_respmat(centralnode_subscriber, args.respmat)
if args.conf:
for cnp in cellnode_subscribers:
cellnode_configure_combpm(cnp)
cellnode_configure_comcorr(cnp, not args.disable_corr)
time.sleep(2)
cellnode_configure_ccn(cnp)
centralnode_configure_ccn(centralnode_subscriber)
centralnode_configure_corr(centralnode_subscriber)
elif args.disable_corr:
for cnp in cellnode_subscribers:
cellnode_configure_comcorr(cnp, not args.disable_corr)
if args.start:
for cnp in cellnode_subscribers:
cellnode_start_ccn(cnp)
......
......@@ -8,9 +8,7 @@
import tango
import logging
import argparse
import numpy as np
import time
import FofbTool.Utils
......
###################################################################################################
# OPERATION FUNCTIONS
###################################################################################################
#
# Contains functions to operate the FOFB application.
#
###################################################################################################
import tango
import logging
import numpy as np
import time
import FofbTool.Utils
# Get the module logger
logger = logging.getLogger("FofbTool")
###################################################################################################
# OPERATIONS ON CCN
###################################################################################################
def stop_ccn(nodename):
"""
Stop the communication with cellnode on the specified fofbnode.
PARAMETERS
----------
nodename: str
The target fofbnode, ie 'cellnode-c09' or 'centralnode'
"""
prx=FofbTool.Utils.get_prx_from_nodename(nodename)
if prx is None:
logger.error("Failed to stop CCN on {}".format(nodename))
return
logger.info("Stopping CCN on {}".format(nodename))
nint=1
if 'central' in nodename:
nint = 4
for n in range(nint):
prx["ccnpack{}_control".format(n)] = False
prx["ccnunpack{}_control".format(n)] = False
def reset_ccn(nodename):
"""
Reset the communication with cellnode on the specified fofbnode.
PARAMETERS
----------
nodename: str
The target fofbnode, ie 'cellnode-c09' or 'centralnode'
"""
prx=FofbTool.Utils.get_prx_from_nodename(nodename)
if prx is None:
logger.error("Failed to reset CCN on {}".format(nodename))
return
logger.info("Reset CCN on {}".format(nodename))
nint=1
if 'central' in nodename:
nint = 4
for n in range(nint):
prx["ccneth{}_reset".format(n)] = 0x60000001 # impossible to write 0xE0000001
prx["ccneth{}_gt_reset".format(n)] = 1
time.sleep(2)
for n in range(nint):
prx["ccneth{}_gt_reset".format(n)] = 0
prx["ccneth{}_reset".format(n)] = 0
ack_ccn(nodename)
def start_ccn(nodename):
"""
Start the communication with cellnode on the specified fofbnode.
PARAMETERS
----------
nodename: str
The target fofbnode, ie 'cellnode-c09' or 'centralnode'
"""
prx=FofbTool.Utils.get_prx_from_nodename(nodename)
if prx is None:
logger.error("Failed to start CCN on {}".format(nodename))
return
logger.info("Starting CCN on {}".format(nodename))
nint=1
if 'central' in nodename:
nint = 4
for n in range(nint):
prx["ccnpack{}_control".format(n)] = True
prx["ccnunpack{}_control".format(n)] = True
def ack_ccn(nodename):
"""
Start the communication with cellnode on the specified fofbnode.
PARAMETERS
----------
nodename: str
The target fofbnode, ie 'cellnode-c09' or 'centralnode'
"""
prx=FofbTool.Utils.get_prx_from_nodename(nodename)
if prx is None:
logger.error("Failed to ack CCN on {}".format(nodename))
return
logger.info("Ack CCN error on {}".format(nodename))
nint=1
if 'central' in nodename:
nint = 4
for n in range(nint):
prx["ccnpack{}_reset_error".format(n)] = True
prx["ccnunpack{}_reset_error".format(n)] = True
time.sleep(1)
for n in range(nint):
prx["ccnpack{}_reset_error".format(n)] = False
prx["ccnunpack{}_reset_error".format(n)] = False
###################################################################################################
# OPERATIONS ON CCN
###################################################################################################
def stop_combpm(cellnodename):
"""
Stop the communication with bpm on the specified cellnode.
PARAMETERS
----------
cellnodename: str
The target fofbnode, ie 'cellnode-c09'
"""
prx=FofbTool.Utils.get_prx_from_cellnodename(cellnodename)
if prx is None:
logger.error("Failed to stop ComBPM on {}".format(p))
return
logger.info("Stopping ComBPM on {}".format(cellnodename))
prx["combpm_reset"] = 1
prx["combpm_gt_control"] = 0x5
def start_combpm(cellnodename):
"""
Start the communication with bpm on the specified cellnode.
PARAMETERS
----------
cellnodename: str
The target fofbnode, ie 'cellnode-c09'
"""
prx=FofbTool.Utils.get_prx_from_cellnodename(cellnodename)
if prx is None:
logger.error("Failed to start ComBPM on {}".format(cellnodename))
return
logger.info("Starting ComBpm on {}".format(cellnodename))
prx["combpm_reset"] = 0
prx["combpm_gt_control"] = 0x1
time.sleep(1)
ack_combpm(cellnodename)
def ack_combpm(cellnodename):
"""
Ack errors on the communication with bpm on the specified cellnode.
PARAMETERS
----------
cellnodename: str
The target fofbnode, ie 'cellnode-c09'
"""
prx=FofbTool.Utils.get_prx_from_cellnodename(cellnodename)
if prx is None:
logger.error("Failed to start ComBPM on {}".format(cellnodename))
return
logger.info("Ack ComBpm on {}".format(cellnodename))
prx["combpm_reset_error"] = True
time.sleep(1)
prx["combpm_reset_error"] = False
......@@ -9,6 +9,8 @@
import tango
import logging
import FofbTool.DeviceAttributeConfiguration
import FofbTool.Configuration
import FofbTool.Operation
# Get the module logger
logger = logging.getLogger("FofbTool")
......@@ -181,3 +183,115 @@ def conf_all_ccn():
return success
def get_prx_from_nodename(nodename):
"""
Return a tango.DeviceProxy from a node name.
On failure, log error and return None.
PARAMETERS
----------
nodename: str
The target fofbnode, ie 'cellnode-c09' or 'centralnode'
RETURN
------
prx: tango.DeviceProxy or None
"""
# Get device proxy
try:
p = FofbTool.Utils.tangopath_nodes[nodename.lower()]
except KeyError:
logger.error("Wrong nodename. Possibilities are {}".format(FofbTool.Utils.tangopath_nodes.keys()))
return None
try:
prx= tango.DeviceProxy(p)
except tango.DevFailed as e:
logger.error("Failed to get the Device proxy to '{}'".format(p))
logger.debug(str(e))
return None
return prx
def get_prx_from_cellnodename(cellnodename):
"""
Return a tango.DeviceProxy from a cellnode name.
On failure, log error and return None.
PARAMETERS
----------
nodename: str
The target fofbnode, ie 'cellnode-c09'
RETURN
------
prx: tango.DeviceProxy or None
"""
# Get device proxy
try:
p = FofbTool.Utils.tangopath_cellnodes[cellnodename.lower()]
except KeyError:
logger.error("Wrong nodename. Possibilities are {}".format(FofbTool.Utils.tangopath_cellnodes.keys()))
return None
try:
prx= tango.DeviceProxy(p)
except tango.DevFailed as e:
logger.error("Failed to get the Device proxy to '{}'".format(p))
logger.debug(str(e))
return None
return prx
def stop_all_combpm():
"""
Apply stop command on all Cellnodes.
Check beforehand that the FOFB is not running. Display warning if.
"""
if not check_fofbnotrunning():
logger.warning("Not running stop combpm because FOFB seems to be running.")
for i,(n,p) in enumerate(tangopath_cellnodes.items()):
FofbTool.Operation.stop_combpm(n)
def stop_all_ccn():
"""
Apply stop and reset commands on all fofbnodes.
Check beforehand that the FOFB is not running. Display warning if.
"""
if not check_fofbnotrunning():
logger.warning("Not running stop combpm because FOFB seems to be running.")
for i,(n,p) in enumerate(tangopath_nodes.items()):
FofbTool.Operation.stop_ccn(n)
FofbTool.Operation.reset_ccn(n)
def start_all_combpm():
"""
Apply start command on all Cellnodes.
"""
for i,(n,p) in enumerate(tangopath_cellnodes.items()):
FofbTool.Operation.start_combpm(n)
def start_all_ccn():
"""
Apply stop and reset commands on all fofbnodes.
"""
for i,(n,p) in enumerate(tangopath_nodes.items()):
FofbTool.Operation.start_ccn(n)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment