diff --git a/Scripts/alarm_csv2xml.py b/Scripts/alarm_csv2xml.py index d53e863..fbe6084 100755 --- a/Scripts/alarm_csv2xml.py +++ b/Scripts/alarm_csv2xml.py @@ -5,6 +5,7 @@ from xml.dom import minidom import click +import re def csvtoxml(infile, outfile, cname): @@ -28,11 +29,22 @@ def csvtoxml(infile, outfile, cname): stack.append(sel) else: pv = ET.SubElement(stack[-1], 'pv') - pv.set('name', row['PV']) + pv_name = row['PV'] + pv_tokens = pv_name.split('://', 1) + if len(pv_tokens) == 2: + protocol = pv_tokens[0].lower() + if protocol == 'ca' or protocol == 'pva': + pass + elif protocol == 'major' or protocol == 'minor': + calc_expression = pv_tokens[1] + pv_name = f'eq://{protocol}Alarm({calc_expression}, "")' + else: + raise ValueError(f'Got unsupported protocol "{protocol}" in {pv_name}') + pv.set('name', pv_name) desc = ET.SubElement(pv, 'description') desc.text = row['Description'] latch = ET.SubElement(pv, 'latching') - latch.text = row['Latch'].capitalize() if row['Latch'] else "True" + latch.text = row['Latch'].capitalize() if row['Latch'] else 'True' delay = ET.SubElement(pv, 'delay') delay.text = row['Delay'] if 'Filter' in row and row['Filter']: @@ -48,7 +60,7 @@ def csvtoxml(infile, outfile, cname): if outfile is None: outfile = infile.rsplit('.', 1)[0] + '.xml' with open(outfile, 'w', encoding='utf-8') as out: - out.write(xm.toprettyxml(indent=" "*3)) + out.write(xm.toprettyxml(indent=' '*3)) click.echo(f'Conversion of {infile} complete. See {outfile}') diff --git a/Spreadsheet/KFE/TMO-alarms.csv b/Spreadsheet/KFE/TMO-alarms.csv index 61a295f..495df54 100644 --- a/Spreadsheet/KFE/TMO-alarms.csv +++ b/Spreadsheet/KFE/TMO-alarms.csv @@ -124,3 +124,4 @@ ,,LM1K4:QADC:01:OUT0_EDGE2,QADC signal monitor,,,LM1K4:QADC:01:OUT0_EDGE2>0, 1,LASER PHASE MOTOR,,,,,, ,,LAS:LHN:LLG2:01:PHAS:ERROR,Laser phase feedback,,,, +,,major://(abs(SL1K0:POWER:ACTUAL_YWIDTH_RBV) * 1000) > AT1K0:GAS_MA_Y:MMS:1,slits too wide,,,, diff --git a/XML/KFE/TMO-alarms.xml b/XML/KFE/TMO-alarms.xml index b81add5..b514762 100644 --- a/XML/KFE/TMO-alarms.xml +++ b/XML/KFE/TMO-alarms.xml @@ -524,6 +524,11 @@ True + + slits too wide + True + +