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)