record(aSub, "$(p)P") {
field(INPA, "$(p)WF")
field(NOA, "6")
field(FTA, "DOUBLE")
field(INPB, "$(p)WF:X")
field(NOB, "6")
field(FTB, "SHORT")
field(OUTC, "$(p)TO1 NPP")
field(FTVC, "DOUBLE")
field(NOVC, "1")
field(OUTD, "$(p)TO1.DISV PP")
field(FTVD, "SHORT")
field(NOVD, "1")
field(OUTE, "$(p)TO2 NPP")
field(FTVE, "DOUBLE")
field(NOVE, "1")
field(OUTF, "$(p)TO2.DISV PP")
field(FTVF, "SHORT")
field(NOVF, "1")
field(OUTG, "$(p)TO3 NPP")
field(FTVG, "DOUBLE")
field(NOVG, "1")
field(OUTH, "$(p)TO3.DISV PP")
field(FTVH, "SHORT")
field(NOVH, "1")
field(SNAM, "splitMarkedVals")
}
Here is the Python test code and its output:
# the initial three values
caput(["l:TO1", "l:TO2", "l:TO3"], [10,20,30])
print caget(["l:TO1", "l:TO2", "l:TO3"])
# split this l:WF to TO1,TO2,TO3, using l:WF:X as mask
caput("l:WF:X", [0, 1, 1])
caput("l:WF", [6, 5, 4])
caput("l:TO1.DISA", 0)
caput("l:TO2.DISA", 0)
caput("l:TO3.DISA", 0)
print "initial TO1:", caget(["l:TO1", "l:TO1.DISV",
"l:TO1.DISA"])
print "initial TO2:", caget(["l:TO2", "l:TO2.DISV",
"l:TO2.DISA"])
print "initial TO3:", caget(["l:TO3", "l:TO3.DISV",
"l:TO3.DISA"])
print caget(["l:TO1", "l:TO2", "l:TO3"])
caput("l:P.PROC", 1)
# the result should be [6, 20, 30] or [10, 5, 4]
# depending mask means drop or drop
print "TO1", caget(["l:TO1", "l:TO1.DISV", "l:TO1.DISA"])
print "TO2", caget(["l:TO2", "l:TO2.DISV", "l:TO2.DISA"])
print "TO3", caget(["l:TO3", "l:TO3.DISV", "l:TO3.DISA"])
[10.0, 20.0, 30.0]
initial TO1: [10.0, 0, 0]
initial TO2: [20.0, 1, 0]
initial TO3: [30.0, 1, 0]
[10.0, 20.0, 30.0]
TO1 [6.0, 0, 0]
TO2 [5.0, 1, 0]
TO3 [4.0, 1, 0]