BNA8/.resources/fbfdf27baa8d60b6666a573d6adf31e5635f38ae22aa7d983047bb97c6b7cb96

65 lines
1.7 KiB
Plaintext

import system
import generate
BASE_TAGS = [
"SetEnable",
"Color"
]
def getStatus(*args):
if len(args) % 5 <> 0:
raise ValueError('Argument list must be a multiple of (path, rowstart, rowend, colstart, colend) pairs')
groups = [args[i:i+5] for i in range(0, len(args), 5)]
# Produce tags:
tags = []
for (path, rowstart, rowend, colstart, colend) in groups:
for col in range(colstart, colend+1):
for row in range(rowstart, rowend+1):
spiral = "CH_2{:02d}{:02d}".format(row, col)
prefix = "[default]"+path+"/"+spiral+"/"+spiral+"/CH/"
tags.extend([prefix+tag for tag in BASE_TAGS])
# Get values
values = [val for val in system.tag.readBlocking(tags)]
# Produce status:
unknown = 0
faulted = 0
disabled = 0
full = 0
fullWarn = 0
jammed = 0
enabled = 0
for (SetEnable, Color) in (values[i:i+len(BASE_TAGS)] for i in range(0, len(values), len(BASE_TAGS))):
# Ignore those that don't have SetEnable:
if not SetEnable.quality.isBad():
if SetEnable.quality.isError() or Color.quality.isError():
unknown += 1
elif Color.value == 1024:
faulted += 1
elif Color.value == 512:
jammed += 1
elif not SetEnable.value:
disabled += 1
elif Color.value == 128:
full += 1
elif Color.value == 64:
fullWarn += 1
else:
enabled += 1
headers = ["status", "count", "percent"]
total = max(1, float(unknown + faulted + jammed + disabled + full + fullWarn + enabled))
values = [
["Enabled", enabled, enabled/total],
["50% Full", fullWarn, fullWarn/total],
["100% Full", full, full/total],
["Disabled", disabled, disabled/total],
["Jammed", jammed, jammed/total],
["Faulted", faulted, faulted/total],
["Unknown", unknown, unknown/total],
]
return system.dataset.toDataSet(headers, values)