Files
motorBase/motorApp/Db/EnsemblePSOFly.db
T

627 lines
28 KiB
Plaintext

#! Generated by VisualDCT v2.6
#! DBDSTART
#! DBDEND
# Here's an example of the output we want to send via $(P)$(Q)cmdWriteRead.BOUT:
#
# on Taxi:
# PSOCONTROL X RESET STATE MINOR
# PSOOUTPUT X CONTROL 1 STATE MINOR
# PSOPULSE X TIME 10000,0 STATE MINOR
# PSOOUTPUT X PULSE WINDOW MASK STATE MINOR
# PSOTRACK X INPUT 3 STATE MINOR
# PSODISTANCE X FIXED 0.001000 UNITS STATE MINOR
# PSOWINDOW X 1 INPUT 3 STATE MINOR
# PSOWINDOW X 1 RANGE 0.010500,180.010500 UNITS STATE MINOR
# PSOCONTROL X ARM STATE MINOR
#
# on fly:
# PSOCONTROL X ARM STATE MINOR
#
# when fly completes:
# PSOWINDOW X 1 OFF STATE MINOR
# PSOCONTROL X OFF STATE MINOR
record(ao, "$(P)$(Q)startPos") {
field(DESC, "data aqc start")
field(EGU, "degrees")
field(PREC, "3")
}
record(calcout, "$(P)$(Q)startPosDial") {
field(INPA, "$(P)$(Q)startPos CP")
field(INPB, "$(M).OFF")
field(INPC, "$(M).DIR")
field(PREC, "3")
field(CALC, "(a-b)*(c?-1:1)")
}
record(ao, "$(P)$(Q)endPos") {
field(DESC, "data aqc end")
field(EGU, "degrees")
field(PREC, "3")
}
record(calcout, "$(P)$(Q)endPosDial") {
field(INPA, "$(P)$(Q)endPos CP")
field(INPB, "$(M).OFF")
field(INPC, "$(M).DIR")
field(PREC, "3")
field(CALC, "(a-b)*(c?-1:1)")
}
record(ao, "$(P)$(Q)slewSpeed") {
field(EGU, "degrees/s")
field(PREC, "3")
}
record(busy, "$(P)$(Q)taxi") {
field(ONAM, "Taxi")
field(OUT, "$(P)$(Q)doTaxi.PROC PP")
}
record(busy, "$(P)$(Q)fly") {
field(ONAM, "Fly")
field(OUT, "$(P)$(Q)doFly.PROC PP")
}
record(ao, "$(P)$(Q)trigStartFrac") {
field(DRVH, "1")
field(DRVL, "0")
field(DESC, "trigger loc within scanDelta")
field(PREC, "3")
field(DOL, "0")
}
record(transform, "$(P)$(Q)calcStartEnd") {
field(CLCG, "b>a?1:-1")
field(CLCH, "f*e/2")
field(CLCI, "ceil(h/c)*c")
field(CLCJ, "n?0:d*c")
field(CLCK, "a+j*g")
field(INPA, "$(P)$(Q)startPosDial CP")
field(INPB, "$(P)$(Q)endPosDial CP")
field(INPC, "$(P)$(Q)scanDelta CP")
field(INPD, "$(P)$(Q)trigStartFrac CP")
field(INPE, "$(P)$(Q)slewSpeed CP")
field(INPF, "$(M).ACCL CP")
field(CMTA, "scan_start position")
field(CMTB, "scan_end position")
field(CMTC, "scan_delta")
field(CMTE, "scan speed")
field(CMTD, "dataOffset as fraction of scanDelta")
field(CMTF, "motor accel time")
field(CMTG, "dir (+1 if end > start, else -1)")
field(CMTH, "accelDist")
field(CMTI, "taxi dist as multiple of scanDelta")
field(CMTJ, "dataOffset from start of scanDelta")
field(CMTK, "dataStart")
field(PREC, "3")
field(CLCL, "k-i*g")
field(CLCM, "b+h*g")
field(CMTL, "taxi position")
field(CMTM, "motorEnd")
field(CMTN, "pulse type 0:trig, 1:gate")
field(INPN, "$(P)$(Q)pulseType CP")
}
record(ao, "$(P)$(Q)scanDelta") {
field(DRVH, "180")
field(DRVL, ".0001")
field(DESC, "data aqc end")
field(EGU, "degrees")
field(PREC, "5")
field(OUT, "$(P)$(Q)checkScanDelta.A PP")
}
record(calcout, "$(P)$(Q)checkScanDelta") {
field(PREC, "2")
field(CALC, "abs(NINT(a*10000)-a*10000)>.0005?1:0")
field(OCAL, "nint(a*10000)/10000")
field(OOPT, "When Non-zero")
field(DOPT, "Use OCAL")
field(OUT, "$(P)$(Q)scanDelta CA")
}
record(sseq, "$(P)$(Q)doFly") {
field(DISV, "0")
field(SDIS, "$(P)$(Q)fly.VAL")
field(DOL1, "$(M).VELO")
field(LNK1, "$(P)$(Q)armPSO.PROC CA")
field(DOL2, "$(P)$(Q)slewSpeed")
field(LNK2, "$(M).VELO")
field(DOL3, "$(P)$(Q)calcStartEnd.M")
field(LNK3, "$(M).DVAL CA")
field(WAIT3, "Wait")
field(DOL4, "$(P)$(Q)doFly.DO1")
field(LNK4, "$(M).VELO")
field(LNK5, "$(P)$(Q)disablePSO.PROC CA")
field(PREC, "3")
field(DO6, "0")
field(LNK6, "$(P)$(Q)fly CA")
field(STR6, "Done")
field(WAIT1, "Wait")
field(WAIT5, "Wait")
}
record(sseq, "$(P)$(Q)doTaxi") {
field(DISV, "0")
field(SDIS, "$(P)$(Q)taxi.VAL")
field(PREC, "3")
field(DOL1, "$(P)$(Q)calcStartEnd.L")
field(LNK1, "$(M).DVAL CA")
field(WAIT1, "Wait")
field(DO2, "0")
field(LNK2, "$(P)$(Q)initPSO.PROC CA")
field(LNK4, "$(P)$(Q)taxi CA")
field(STR4, "Done")
field(LNK3, "$(P)$(Q)armPSO.PROC CA")
field(WAIT2, "Wait")
field(WAIT4, "NoWait")
field(WAIT3, "Wait")
}
record(seq, "$(P)$(Q)fanHiLimit") {
field(DOL1, "$(M).HLM CP")
field(LNK1, "$(P)$(Q)startPos.DRVH")
field(DOL2, "$(P)$(Q)fanHiLimit.DO1")
field(LNK2, "$(P)$(Q)endPos.DRVH")
}
record(seq, "$(P)$(Q)fanLoLimit") {
field(DOL1, "$(M).LLM CP")
field(LNK1, "$(P)$(Q)startPos.DRVL")
field(DOL2, "$(P)$(Q)fanLoLimit.DO1")
field(LNK2, "$(P)$(Q)endPos.DRVL")
}
record(transform, "$(P)$(Q)calcSpeedLim") {
field(CLCC, "a<.01?b:a")
field(INPA, "$(M).VMAX CP")
field(INPB, "$(M).VELO CP")
field(CLCD, "0.001")
field(OUTC, "$(P)$(Q)slewSpeed.DRVH")
field(OUTD, "$(P)$(Q)slewSpeed.DRVL")
field(CMTA, "VMAX (if nonzero), else VELO")
}
record(ao, "$(P)$(Q)detSetupTime") {
field(DESC, "time (s) for det to be ready")
field(DRVH, "100")
field(DRVL, ".0001")
field(DOL, "0.01")
field(PREC, "3")
field(EGU, "s")
}
record(mbbo, "$(P)$(Q)pulseType") {
field(ZRST, "Trigger")
field(ONST, "Gate")
}
record(calcout, "$(P)$(Q)deltaTime") {
field(INPA, "$(P)$(Q)scanDelta CP")
field(INPB, "$(P)$(Q)slewSpeed CP")
field(CALC, "a/b")
field(PREC, "6")
}
record(scalcout, "$(P)$(Q)calcPulseTime") {
field(INPA, "$(P)$(Q)scanDelta")
field(INPB, "$(P)$(Q)detSetupTime")
field(INPC, "$(P)$(Q)slewSpeed")
field(D, "1.e6")
field(INPE, "$(P)$(Q)pulseType")
field(AA, "PSOPULSE X TIME ")
field(BB, "50,25 ")
field(CALC, "AA+(e?$P('%d,',a/c*d)+$P('%d',(a/c-b)*d):bb)")
field(PREC, "6")
}
record(sseq, "$(P)$(Q)initPSO") {
field(LNK2, "$(P)$(Q)cmdWriteRead.BOUT CA")
field(STR2, "PSOOUTPUT X CONTROL 1")
field(LNK3, "$(P)$(Q)cmdWriteRead.BOUT CA")
field(DOL3, "$(P)$(Q)calcPulseTime.SVAL PP")
field(LNK4, "$(P)$(Q)cmdWriteRead.BOUT CA")
field(STR4, "PSOOUTPUT X PULSE WINDOW MASK ")
field(LNK5, "$(P)$(Q)cmdWriteRead.BOUT CA")
field(STR5, "PSOTRACK X INPUT 3")
field(LNK6, "$(P)$(Q)pulseDstBld.PROC CA")
field(LNK7, "$(P)$(Q)cmdWriteRead.BOUT CA")
field(STR7, "PSOWINDOW X 1 INPUT 3")
field(LNK8, "$(P)$(Q)pulseWndwBld.PROC CA")
field(LNK1, "$(P)$(Q)cmdWriteRead.BOUT CA")
field(STR1, "PSOCONTROL X RESET")
field(WAIT1, "Wait")
field(WAIT2, "Wait")
field(WAIT3, "Wait")
field(WAIT4, "Wait")
field(WAIT5, "Wait")
field(WAIT6, "Wait")
field(WAIT7, "Wait")
field(WAIT8, "Wait")
}
record(asyn, "$(P)$(Q)cmdWriteRead") {
field(PORT, "$(PORT)")
field(TMOD, "Write/Read")
field(IFACE, "asynOctet")
field(OFMT, "Hybrid")
field(IFMT, "ASCII")
field(AUCT, "autoConnect")
field(ENBL, "Enable")
}
record(scalcout, "$(P)$(Q)pulseDstBld") {
field(CALC, "$P(AA,A)")
field(INPA, "$(P)$(Q)scanDelta.VAL")
field(OUT, "$(P)$(Q)cmdWriteRead.BOUT PP")
field(AA, "PSODISTANCE X FIXED %f UNITS")
}
# The PSO range command arguments are relative to the motor position at which
# it is issued, which is the "taxi" position, $(P)$(Q)calcStartEnd.L.
# For a positive-going scan, the range must go from
# dataStart-<slop> to dataEnd-<slop>,
# where <slop> is chosen arbitrarily as half the data interval.
# For a negative-going scan, the range must go from
# dataStart+<slop> to dataEnd+<slop>.
# Also, the range command arguments must be given in order so that arg1 < arg2.
# $(P)$(Q)calcRangeOffset and $(P)$(Q)pulseWndwBld together do this calculation
# and build a command for the Ensemble controller.
record(calcout, "$(P)$(Q)calcRangeOffset") {
field(PREC, "3")
field(INPA, "$(P)$(Q)calcStartEnd.C")
field(INPB, "$(P)$(Q)calcStartEnd.G")
field(INPC, "$(P)$(Q)calcStartEnd.L")
field(CALC, "c+b*a/2")
}
record(scalcout, "$(P)$(Q)pulseWndwBld") {
field(PREC, "3")
field(INPA, "$(P)$(Q)startPosDial.VAL")
field(INPB, "$(P)$(Q)endPosDial.VAL")
field(INPC, "$(P)$(Q)calcRangeOffset PP")
field(AA, "PSOWINDOW X 1 RANGE %.6f,")
field(CALC, "$P(AA,min(A,B)-C)")
field(OUT, "$(P)$(Q)pulseWndwBlds.A NPP")
field(FLNK, "$(P)$(Q)pulseWndwBld2")
}
record(scalcout, "$(P)$(Q)pulseWndwBld2") {
field(PREC, "3")
field(INPA, "$(P)$(Q)pulseWndwBld.A")
field(INPB, "$(P)$(Q)pulseWndwBld.B")
field(INPC, "$(P)$(Q)pulseWndwBld.C")
field(AA, "%.6f UNITS")
field(CALC, "$P(AA,max(A,B)-C)")
field(OUT, "$(P)$(Q)pulseWndwBlds.B PP")
}
record(aSub, "$(P)$(Q)pulseWndwBlds") {
field(SNAM, "concatString")
field(NOA, "50")
field(FTA, "CHAR")
field(NOB, "50")
field(FTB, "CHAR")
field(NOVA, "100")
field(FTVA, "CHAR")
field(OUTA, "$(P)$(Q)cmdWriteRead.BOUT PP")
}
record(scalcout, "$(P)$(Q)armPSO") {
field(AA, "PSOCONTROL X ARM")
field(CALC, "aa")
field(OUT, "$(P)$(Q)cmdWriteRead.BOUT PP")
}
record(sseq, "$(P)$(Q)disablePSO") {
field(LNK1, "$(P)$(Q)cmdWriteRead.BOUT CA")
field(STR1, "PSOWINDOW X 1 OFF")
field(LNK2, "$(P)$(Q)cmdWriteRead.BOUT CA")
field(STR2, "PSOCONTROL X OFF")
field(WAIT1, "Wait")
field(WAIT2, "Wait")
}
record(stringout, "$(P)$(Q)motorName") {
field(VAL, "$(M)")
}
#! Further lines contain data used by VisualDCT
#! View(-124,-126,0.3)
#! Record("$(P)$(Q)startPos",860,607,0,0,"$(P)$(Q)startPos")
#! Field("$(P)$(Q)startPos.VAL",16777215,1,"$(P)$(Q)startPos.VAL")
#! Field("$(P)$(Q)startPos.DRVH",16777215,0,"$(P)$(Q)startPos.DRVH")
#! Field("$(P)$(Q)startPos.DRVL",16777215,0,"$(P)$(Q)startPos.DRVL")
#! Record("$(P)$(Q)startPosDial",1180,560,0,0,"$(P)$(Q)startPosDial")
#! Field("$(P)$(Q)startPosDial.VAL",16777215,1,"$(P)$(Q)startPosDial.VAL")
#! Field("$(P)$(Q)startPosDial.INPA",16777215,0,"$(P)$(Q)startPosDial.INPA")
#! Link("$(P)$(Q)startPosDial.INPA","$(P)$(Q)startPos.VAL")
#! Field("$(P)$(Q)startPosDial.INPB",16777215,0,"$(P)$(Q)startPosDial.INPB")
#! Link("$(P)$(Q)startPosDial.INPB","$(P)$(Q)startPosDial/INPB")
#! Field("$(P)$(Q)startPosDial.INPC",16777215,0,"$(P)$(Q)startPosDial.INPC")
#! Link("$(P)$(Q)startPosDial.INPC","$(P)$(Q)startPosDial/INPC")
#! Connector("$(P)$(Q)startPosDial/INPC",null,1120,760,16777215,"",3)
#! Connector("$(P)$(Q)startPosDial/INPB",null,1120,740,16777215,"",3)
#! Record("$(P)$(Q)endPos",860,807,0,0,"$(P)$(Q)endPos")
#! Field("$(P)$(Q)endPos.VAL",16777215,1,"$(P)$(Q)endPos.VAL")
#! Field("$(P)$(Q)endPos.DRVH",16777215,0,"$(P)$(Q)endPos.DRVH")
#! Field("$(P)$(Q)endPos.DRVL",16777215,0,"$(P)$(Q)endPos.DRVL")
#! Record("$(P)$(Q)endPosDial",1180,760,0,0,"$(P)$(Q)endPosDial")
#! Field("$(P)$(Q)endPosDial.VAL",16777215,1,"$(P)$(Q)endPosDial.VAL")
#! Field("$(P)$(Q)endPosDial.INPA",16777215,0,"$(P)$(Q)endPosDial.INPA")
#! Link("$(P)$(Q)endPosDial.INPA","$(P)$(Q)endPos.VAL")
#! Field("$(P)$(Q)endPosDial.INPB",16777215,0,"$(P)$(Q)endPosDial.INPB")
#! Link("$(P)$(Q)endPosDial.INPB","$(P)$(Q)endPosDial/INPB")
#! Field("$(P)$(Q)endPosDial.INPC",16777215,0,"$(P)$(Q)endPosDial.INPC")
#! Link("$(P)$(Q)endPosDial.INPC","$(P)$(Q)endPosDial/INPC")
#! Connector("$(P)$(Q)endPosDial/INPC",null,1120,960,16777215,"",3)
#! Connector("$(P)$(Q)endPosDial/INPB",null,1120,940,16777215,"",3)
#! Record("$(P)$(Q)slewSpeed",1180,1360,0,0,"$(P)$(Q)slewSpeed")
#! Field("$(P)$(Q)slewSpeed.VAL",16777215,1,"$(P)$(Q)slewSpeed.VAL")
#! Field("$(P)$(Q)slewSpeed.DRVH",16777215,0,"$(P)$(Q)slewSpeed.DRVH")
#! Field("$(P)$(Q)slewSpeed.DRVL",16777215,0,"$(P)$(Q)slewSpeed.DRVL")
#! Record("$(P)$(Q)taxi",2380,467,0,0,"$(P)$(Q)taxi")
#! Field("$(P)$(Q)taxi.VAL",16777215,1,"$(P)$(Q)taxi.VAL")
#! Field("$(P)$(Q)taxi.OUT",16777215,1,"$(P)$(Q)taxi.OUT")
#! Link("$(P)$(Q)taxi.OUT","$(P)$(Q)doTaxi.PROC")
#! Visibility("$(P)$(Q)taxi.DISV",1)
#! Record("$(P)$(Q)fly",2360,747,0,0,"$(P)$(Q)fly")
#! Field("$(P)$(Q)fly.VAL",16777215,1,"$(P)$(Q)fly.VAL")
#! Field("$(P)$(Q)fly.OUT",16777215,1,"$(P)$(Q)fly.OUT")
#! Link("$(P)$(Q)fly.OUT","$(P)$(Q)doFly.PROC")
#! Visibility("$(P)$(Q)fly.DISV",1)
#! Record("$(P)$(Q)trigStartFrac",1560,700,0,0,"$(P)$(Q)trigStartFrac")
#! Field("$(P)$(Q)trigStartFrac.VAL",16777215,1,"$(P)$(Q)trigStartFrac.VAL")
#! Record("$(P)$(Q)calcStartEnd",1940,410,0,1,"$(P)$(Q)calcStartEnd")
#! Field("$(P)$(Q)calcStartEnd.INPA",16777215,0,"$(P)$(Q)calcStartEnd.INPA")
#! Link("$(P)$(Q)calcStartEnd.INPA","$(P)$(Q)calcStartEnd/INPA")
#! Field("$(P)$(Q)calcStartEnd.INPB",16777215,0,"$(P)$(Q)calcStartEnd.INPB")
#! Link("$(P)$(Q)calcStartEnd.INPB","$(P)$(Q)calcStartEnd/INPB")
#! Field("$(P)$(Q)calcStartEnd.INPC",16777215,0,"$(P)$(Q)calcStartEnd.INPC")
#! Link("$(P)$(Q)calcStartEnd.INPC","$(P)$(Q)calcStartEnd/INPC")
#! Field("$(P)$(Q)calcStartEnd.INPD",16777215,0,"$(P)$(Q)calcStartEnd.INPD")
#! Link("$(P)$(Q)calcStartEnd.INPD","$(P)$(Q)calcStartEnd/INPD")
#! Field("$(P)$(Q)calcStartEnd.INPE",16777215,0,"$(P)$(Q)calcStartEnd.INPE")
#! Link("$(P)$(Q)calcStartEnd.INPE","$(P)$(Q)calcStartEnd/INPE")
#! Field("$(P)$(Q)calcStartEnd.INPF",16777215,0,"$(P)$(Q)calcStartEnd.INPF")
#! Link("$(P)$(Q)calcStartEnd.INPF","$(P)$(Q)calcStartEnd/INPF")
#! Field("$(P)$(Q)calcStartEnd.L",16777215,1,"$(P)$(Q)calcStartEnd.L")
#! Field("$(P)$(Q)calcStartEnd.M",16777215,1,"$(P)$(Q)calcStartEnd.M")
#! Field("$(P)$(Q)calcStartEnd.INPN",16777215,0,"$(P)$(Q)calcStartEnd.INPN")
#! Link("$(P)$(Q)calcStartEnd.INPN","$(P)$(Q)pulseType.VAL")
#! Field("$(P)$(Q)calcStartEnd.C",16777215,1,"$(P)$(Q)calcStartEnd.C")
#! Field("$(P)$(Q)calcStartEnd.G",16777215,1,"$(P)$(Q)calcStartEnd.G")
#! Connector("$(P)$(Q)calcStartEnd/INPF",null,1620,980,16777215,"",3)
#! Connector("$(P)$(Q)calcStartEnd/INPE","$(P)$(Q)slewSpeed.VAL",1380,1200,16777215,"",0)
#! Connector("$(P)$(Q)calcStartEnd/INPD","$(P)$(Q)trigStartFrac.VAL",1840,880,16777215,"",0)
#! Connector("$(P)$(Q)calcStartEnd/INPC","$(P)$(Q)scanDelta.VAL",1420,980,16777215,"",0)
#! Connector("$(P)$(Q)calcStartEnd/INPB","$(P)$(Q)endPosDial.VAL",1420,890,16777215,"",0)
#! Connector("$(P)$(Q)calcStartEnd/INPA","$(P)$(Q)startPosDial.VAL",1460,780,16777215,"",0)
#! Record("$(P)$(Q)scanDelta",1180,907,0,1,"$(P)$(Q)scanDelta")
#! Field("$(P)$(Q)scanDelta.VAL",16777215,1,"$(P)$(Q)scanDelta.VAL")
#! Field("$(P)$(Q)scanDelta.OUT",16777215,0,"$(P)$(Q)scanDelta.OUT")
#! Link("$(P)$(Q)scanDelta.OUT","$(P)$(Q)scanDelta/OUT")
#! Connector("$(P)$(Q)scanDelta/OUT","$(P)$(Q)checkScanDelta.A",1120,1120,16777215,"",0)
#! Record("$(P)$(Q)checkScanDelta",1180,1027,0,0,"$(P)$(Q)checkScanDelta")
#! Field("$(P)$(Q)checkScanDelta.A",16777215,0,"$(P)$(Q)checkScanDelta.A")
#! Field("$(P)$(Q)checkScanDelta.OUT",16777215,0,"$(P)$(Q)checkScanDelta.OUT")
#! Link("$(P)$(Q)checkScanDelta.OUT","$(P)$(Q)checkScanDelta/OUT")
#! Connector("$(P)$(Q)checkScanDelta/OUT","$(P)$(Q)scanDelta.VAL",1100,1120,16777215,"",0)
#! Record("$(P)$(Q)doFly",2660,540,0,1,"$(P)$(Q)doFly")
#! Field("$(P)$(Q)doFly.SDIS",16777215,0,"$(P)$(Q)doFly.SDIS")
#! Link("$(P)$(Q)doFly.SDIS","$(P)$(Q)fly.VAL")
#! Field("$(P)$(Q)doFly.PROC",16777215,0,"$(P)$(Q)doFly.PROC")
#! Field("$(P)$(Q)doFly.DOL1",16777215,0,"$(P)$(Q)doFly.DOL1")
#! Link("$(P)$(Q)doFly.DOL1","$(P)$(Q)doFly1/DOL1")
#! Field("$(P)$(Q)doFly.DO1",16777215,0,"$(P)$(Q)doFly.DO1")
#! Field("$(P)$(Q)doFly.LNK1",16777215,1,"$(P)$(Q)doFly.LNK1")
#! Link("$(P)$(Q)doFly.LNK1","$(P)$(Q)doFly/LNK1")
#! Field("$(P)$(Q)doFly.DOL2",16777215,0,"$(P)$(Q)doFly.DOL2")
#! Link("$(P)$(Q)doFly.DOL2","$(P)$(Q)doFly1/DOL2")
#! Field("$(P)$(Q)doFly.LNK2",16777215,1,"$(P)$(Q)doFly.LNK2")
#! Link("$(P)$(Q)doFly.LNK2","$(P)$(Q)doFly1/LNK2")
#! Field("$(P)$(Q)doFly.DOL3",16777215,0,"$(P)$(Q)doFly.DOL3")
#! Link("$(P)$(Q)doFly.DOL3","$(P)$(Q)doFly/DOL3")
#! Field("$(P)$(Q)doFly.LNK3",16777215,1,"$(P)$(Q)doFly.LNK3")
#! Link("$(P)$(Q)doFly.LNK3","$(P)$(Q)doFly1/LNK3")
#! Field("$(P)$(Q)doFly.LNK4",16777215,1,"$(P)$(Q)doFly.LNK4")
#! Link("$(P)$(Q)doFly.LNK4","$(P)$(Q)doFly1/LNK4")
#! Field("$(P)$(Q)doFly.DOL4",16777215,0,"$(P)$(Q)doFly.DOL4")
#! Link("$(P)$(Q)doFly.DOL4","$(P)$(Q)doFly1/DOL4")
#! Field("$(P)$(Q)doFly.LNK5",16777215,1,"$(P)$(Q)doFly.LNK5")
#! Link("$(P)$(Q)doFly.LNK5","$(P)$(Q)doFly1/LNK5")
#! Field("$(P)$(Q)doFly.LNK6",16777215,0,"$(P)$(Q)doFly.LNK6")
#! Link("$(P)$(Q)doFly.LNK6","$(P)$(Q)doFly/LNK6")
#! Connector("$(P)$(Q)doFly/LNK6","$(P)$(Q)fly.VAL",2300,970,16777215,"",0)
#! Connector("$(P)$(Q)doFly1/LNK5","$(P)$(Q)disablePSO.PROC",2940,1630,16777215,"",0)
#! Connector("$(P)$(Q)doFly1/LNK4",null,2900,1040,16777215,"",2)
#! Connector("$(P)$(Q)doFly1/LNK3",null,2900,1020,16777215,"",2)
#! Connector("$(P)$(Q)doFly1/LNK2",null,2900,980,16777215,"",2)
#! Connector("$(P)$(Q)doFly1/DOL4","$(P)$(Q)doFly.DO1",2600,980,16777215,"",0)
#! Connector("$(P)$(Q)doFly/DOL3","$(P)$(Q)calcStartEnd.M",2260,1000,16777215,"",0)
#! Connector("$(P)$(Q)doFly1/DOL2","$(P)$(Q)slewSpeed.VAL",2300,1200,16777215,"",0)
#! Connector("$(P)$(Q)doFly1/DOL1",null,2580,900,16777215,"",3)
#! Connector("$(P)$(Q)doFly/LNK1","$(P)$(Q)armPSO.PROC",3020,1490,16777215,"",0)
#! Visibility("$(P)$(Q)doFly.DISV",1)
#! Visibility("$(P)$(Q)doFly.WAIT3",1)
#! Visibility("$(P)$(Q)doFly.DO6",1)
#! Record("$(P)$(Q)doTaxi",2660,317,0,1,"$(P)$(Q)doTaxi")
#! Field("$(P)$(Q)doTaxi.SDIS",16777215,0,"$(P)$(Q)doTaxi.SDIS")
#! Link("$(P)$(Q)doTaxi.SDIS","$(P)$(Q)taxi.VAL")
#! Field("$(P)$(Q)doTaxi.PROC",16777215,0,"$(P)$(Q)doTaxi.PROC")
#! Field("$(P)$(Q)doTaxi.DOL1",16777215,0,"$(P)$(Q)doTaxi.DOL1")
#! Link("$(P)$(Q)doTaxi.DOL1","$(P)$(Q)doTaxi/DOL1")
#! Field("$(P)$(Q)doTaxi.LNK1",16777215,1,"$(P)$(Q)doTaxi.LNK1")
#! Link("$(P)$(Q)doTaxi.LNK1","$(P)$(Q)doTaxi1/LNK1")
#! Field("$(P)$(Q)doTaxi.LNK2",16777215,1,"$(P)$(Q)doTaxi.LNK2")
#! Link("$(P)$(Q)doTaxi.LNK2","$(P)$(Q)doTaxi/LNK21")
#! Field("$(P)$(Q)doTaxi.LNK3",16777215,1,"$(P)$(Q)doTaxi.LNK3")
#! Link("$(P)$(Q)doTaxi.LNK3","$(P)$(Q)doTaxi/LNK3")
#! Field("$(P)$(Q)doTaxi.LNK4",16777215,0,"$(P)$(Q)doTaxi.LNK4")
#! Link("$(P)$(Q)doTaxi.LNK4","$(P)$(Q)taxi.VAL")
#! Connector("$(P)$(Q)doTaxi/LNK21","$(P)$(Q)initPSO.PROC",3080,810,16777215,"",0)
#! Connector("$(P)$(Q)doTaxi1/LNK1",null,2900,620,16777215,"",2)
#! Connector("$(P)$(Q)doTaxi/DOL1","$(P)$(Q)calcStartEnd.L",2220,800,16777215,"",0)
#! Connector("$(P)$(Q)doTaxi/LNK3","$(P)$(Q)armPSO.PROC",3020,1360,16777215,"",0)
#! Visibility("$(P)$(Q)doTaxi.DISV",1)
#! Visibility("$(P)$(Q)doTaxi.WAIT1",1)
#! Visibility("$(P)$(Q)doTaxi.DO2",1)
#! Visibility("$(P)$(Q)doTaxi.WAIT2",1)
#! Visibility("$(P)$(Q)doTaxi.WAIT3",1)
#! Record("$(P)$(Q)fanHiLimit",520,574,0,1,"$(P)$(Q)fanHiLimit")
#! Field("$(P)$(Q)fanHiLimit.DOL1",16777215,0,"$(P)$(Q)fanHiLimit.DOL1")
#! Link("$(P)$(Q)fanHiLimit.DOL1","$(P)$(Q)fanHiLimit/DOL1")
#! Field("$(P)$(Q)fanHiLimit.DO1",16777215,0,"$(P)$(Q)fanHiLimit.DO1")
#! Field("$(P)$(Q)fanHiLimit.LNK1",16777215,1,"$(P)$(Q)fanHiLimit.LNK1")
#! Link("$(P)$(Q)fanHiLimit.LNK1","$(P)$(Q)startPos.DRVH")
#! Field("$(P)$(Q)fanHiLimit.DOL2",16777215,0,"$(P)$(Q)fanHiLimit.DOL2")
#! Link("$(P)$(Q)fanHiLimit.DOL2","$(P)$(Q)fanHiLimit.DO1")
#! Field("$(P)$(Q)fanHiLimit.LNK2",16777215,1,"$(P)$(Q)fanHiLimit.LNK2")
#! Link("$(P)$(Q)fanHiLimit.LNK2","$(P)$(Q)fanHiLimit/LNK2")
#! Connector("$(P)$(Q)fanHiLimit/DOL1",null,460,680,16777215,"",3)
#! Connector("$(P)$(Q)fanHiLimit/LNK2","$(P)$(Q)endPos.DRVH",780,850,16777215,"",0)
#! Record("$(P)$(Q)fanLoLimit",500,754,0,1,"$(P)$(Q)fanLoLimit")
#! Field("$(P)$(Q)fanLoLimit.DOL1",16777215,0,"$(P)$(Q)fanLoLimit.DOL1")
#! Link("$(P)$(Q)fanLoLimit.DOL1","$(P)$(Q)fanHiLimit2/DOL1")
#! Field("$(P)$(Q)fanLoLimit.DO1",16777215,0,"$(P)$(Q)fanLoLimit.DO1")
#! Field("$(P)$(Q)fanLoLimit.LNK1",16777215,1,"$(P)$(Q)fanLoLimit.LNK1")
#! Link("$(P)$(Q)fanLoLimit.LNK1","$(P)$(Q)fanLoLimit/LNK1")
#! Field("$(P)$(Q)fanLoLimit.DOL2",16777215,0,"$(P)$(Q)fanLoLimit.DOL2")
#! Link("$(P)$(Q)fanLoLimit.DOL2","$(P)$(Q)fanLoLimit.DO1")
#! Field("$(P)$(Q)fanLoLimit.LNK2",16777215,1,"$(P)$(Q)fanLoLimit.LNK2")
#! Link("$(P)$(Q)fanLoLimit.LNK2","$(P)$(Q)fanLoLimit/LNK2")
#! Connector("$(P)$(Q)fanHiLimit2/DOL1",null,440,860,16777215,"",3)
#! Connector("$(P)$(Q)fanLoLimit/LNK2","$(P)$(Q)endPos.DRVL",780,950,16777215,"",0)
#! Connector("$(P)$(Q)fanLoLimit/LNK1","$(P)$(Q)startPos.DRVL",760,830,16777215,"",0)
#! Record("$(P)$(Q)calcSpeedLim",860,1274,0,1,"$(P)$(Q)calcSpeedLim")
#! Field("$(P)$(Q)calcSpeedLim.INPA",16777215,0,"$(P)$(Q)calcSpeedLim.INPA")
#! Link("$(P)$(Q)calcSpeedLim.INPA","$(P)$(Q)calcSpeedLim/INPA")
#! Field("$(P)$(Q)calcSpeedLim.INPB",16777215,0,"$(P)$(Q)calcSpeedLim.INPB")
#! Link("$(P)$(Q)calcSpeedLim.INPB","$(P)$(Q)calcSpeedLim/INPB")
#! Field("$(P)$(Q)calcSpeedLim.OUTC",16777215,1,"$(P)$(Q)calcSpeedLim.OUTC")
#! Link("$(P)$(Q)calcSpeedLim.OUTC","$(P)$(Q)slewSpeed.DRVH")
#! Field("$(P)$(Q)calcSpeedLim.OUTD",16777215,1,"$(P)$(Q)calcSpeedLim.OUTD")
#! Link("$(P)$(Q)calcSpeedLim.OUTD","$(P)$(Q)slewSpeed.DRVL")
#! Connector("$(P)$(Q)calcSpeedLim/INPB",null,800,1440,16777215,"",3)
#! Connector("$(P)$(Q)calcSpeedLim/INPA",null,800,1420,16777215,"",3)
#! Record("$(P)$(Q)detSetupTime",1940,1047,0,0,"$(P)$(Q)detSetupTime")
#! Field("$(P)$(Q)detSetupTime.VAL",16777215,0,"$(P)$(Q)detSetupTime.VAL")
#! Record("$(P)$(Q)pulseType",1560,1080,0,0,"$(P)$(Q)pulseType")
#! Field("$(P)$(Q)pulseType.VAL",16777215,1,"$(P)$(Q)pulseType.VAL")
#! Record("$(P)$(Q)deltaTime",1520,1674,0,0,"$(P)$(Q)deltaTime")
#! Field("$(P)$(Q)deltaTime.INPA",16777215,0,"$(P)$(Q)deltaTime.INPA")
#! Link("$(P)$(Q)deltaTime.INPA","$(P)$(Q)deltaTime/INPA")
#! Field("$(P)$(Q)deltaTime.INPB",16777215,0,"$(P)$(Q)deltaTime.INPB")
#! Link("$(P)$(Q)deltaTime.INPB","$(P)$(Q)deltaTime/INPB")
#! Connector("$(P)$(Q)deltaTime/INPB","$(P)$(Q)slewSpeed.VAL",1380,1630,16777215,"",0)
#! Connector("$(P)$(Q)deltaTime/INPA","$(P)$(Q)scanDelta.VAL",1420,1420,16777215,"",0)
#! Record("$(P)$(Q)calcPulseTime",1940,1104,0,0,"$(P)$(Q)calcPulseTime")
#! Field("$(P)$(Q)calcPulseTime.INPA",16777215,0,"$(P)$(Q)calcPulseTime.INPA")
#! Link("$(P)$(Q)calcPulseTime.INPA","$(P)$(Q)calcPulseTime/INPA")
#! Field("$(P)$(Q)calcPulseTime.INPB",16777215,0,"$(P)$(Q)calcPulseTime.INPB")
#! Link("$(P)$(Q)calcPulseTime.INPB","$(P)$(Q)detSetupTime.VAL")
#! Field("$(P)$(Q)calcPulseTime.INPC",16777215,0,"$(P)$(Q)calcPulseTime.INPC")
#! Link("$(P)$(Q)calcPulseTime.INPC","$(P)$(Q)calcPulseTime/INPC")
#! Field("$(P)$(Q)calcPulseTime.INPE",16777215,0,"$(P)$(Q)calcPulseTime.INPE")
#! Link("$(P)$(Q)calcPulseTime.INPE","$(P)$(Q)pulseType.VAL")
#! Field("$(P)$(Q)calcPulseTime.SVAL",16777215,1,"$(P)$(Q)calcPulseTime.SVAL")
#! Connector("$(P)$(Q)calcPulseTime/INPA","$(P)$(Q)scanDelta.VAL",1420,1170,16777215,"",0)
#! Connector("$(P)$(Q)calcPulseTime/INPC","$(P)$(Q)slewSpeed.VAL",1380,1390,16777215,"",0)
#! Record("$(P)$(Q)initPSO",3140,594,0,0,"$(P)$(Q)initPSO")
#! Field("$(P)$(Q)initPSO.PROC",16777215,0,"$(P)$(Q)initPSO.PROC")
#! Field("$(P)$(Q)initPSO.LNK1",16777215,1,"$(P)$(Q)initPSO.LNK1")
#! Link("$(P)$(Q)initPSO.LNK1","$(P)$(Q)cmdWriteRead.BOUT")
#! Field("$(P)$(Q)initPSO.LNK2",16777215,1,"$(P)$(Q)initPSO.LNK2")
#! Link("$(P)$(Q)initPSO.LNK2","$(P)$(Q)cmdWriteRead.BOUT")
#! Field("$(P)$(Q)initPSO.LNK3",16777215,1,"$(P)$(Q)initPSO.LNK3")
#! Link("$(P)$(Q)initPSO.LNK3","$(P)$(Q)cmdWriteRead.BOUT")
#! Field("$(P)$(Q)initPSO.LNK4",16777215,1,"$(P)$(Q)initPSO.LNK4")
#! Link("$(P)$(Q)initPSO.LNK4","$(P)$(Q)cmdWriteRead.BOUT")
#! Field("$(P)$(Q)initPSO.LNK5",16777215,1,"$(P)$(Q)initPSO.LNK5")
#! Link("$(P)$(Q)initPSO.LNK5","$(P)$(Q)cmdWriteRead.BOUT")
#! Field("$(P)$(Q)initPSO.LNK6",16777215,1,"$(P)$(Q)initPSO.LNK6")
#! Link("$(P)$(Q)initPSO.LNK6","$(P)$(Q)initPSO/LNK5")
#! Field("$(P)$(Q)initPSO.LNK7",16777215,1,"$(P)$(Q)initPSO.LNK7")
#! Link("$(P)$(Q)initPSO.LNK7","$(P)$(Q)cmdWriteRead.BOUT")
#! Field("$(P)$(Q)initPSO.LNK8",16777215,1,"$(P)$(Q)initPSO.LNK8")
#! Link("$(P)$(Q)initPSO.LNK8","$(P)$(Q)initPSO/LNK7")
#! Field("$(P)$(Q)initPSO.DOL3",16777215,0,"$(P)$(Q)initPSO.DOL3")
#! Link("$(P)$(Q)initPSO.DOL3","$(P)$(Q)calcPulseTime.SVAL")
#! Connector("$(P)$(Q)initPSO/LNK7","$(P)$(Q)pulseWndwBld.PROC",3380,1360,16777215,"",0)
#! Connector("$(P)$(Q)initPSO/LNK5","$(P)$(Q)pulseDstBld.PROC",3400,1240,16777215,"",0)
#! Visibility("$(P)$(Q)initPSO.DO9",1)
#! Record("$(P)$(Q)cmdWriteRead",4320,1414,0,1,"$(P)$(Q)cmdWriteRead")
#! Field("$(P)$(Q)cmdWriteRead.BOUT",16777215,0,"$(P)$(Q)cmdWriteRead.BOUT")
#! Record("$(P)$(Q)pulseDstBld",3460,1274,0,1,"$(P)$(Q)pulseDstBld")
#! Field("$(P)$(Q)pulseDstBld.PROC",16777215,0,"$(P)$(Q)pulseDstBld.PROC")
#! Field("$(P)$(Q)pulseDstBld.INPA",16777215,0,"$(P)$(Q)pulseDstBld.INPA")
#! Link("$(P)$(Q)pulseDstBld.INPA","$(P)$(Q)pulseDstBld/INPA")
#! Field("$(P)$(Q)pulseDstBld.OUT",16777215,1,"$(P)$(Q)pulseDstBld.OUT")
#! Link("$(P)$(Q)pulseDstBld.OUT","$(P)$(Q)cmdWriteRead.BOUT")
#! Connector("$(P)$(Q)pulseDstBld/INPA","$(P)$(Q)scanDelta.VAL",1420,1230,16777215,"",0)
#! Visibility("$(P)$(Q)pulseDstBld.CALC",1)
#! Visibility("$(P)$(Q)pulseDstBld.AA",1)
#! Record("$(P)$(Q)calcRangeOffset",2360,1600,0,0,"$(P)$(Q)calcRangeOffset")
#! Field("$(P)$(Q)calcRangeOffset.INPA",16777215,0,"$(P)$(Q)calcRangeOffset.INPA")
#! Link("$(P)$(Q)calcRangeOffset.INPA","$(P)$(Q)calcRangeOffset/INPA")
#! Field("$(P)$(Q)calcRangeOffset.INPB",16777215,0,"$(P)$(Q)calcRangeOffset.INPB")
#! Link("$(P)$(Q)calcRangeOffset.INPB","$(P)$(Q)calcRangeOffset/INPB")
#! Field("$(P)$(Q)calcRangeOffset.INPC",16777215,0,"$(P)$(Q)calcRangeOffset.INPC")
#! Link("$(P)$(Q)calcRangeOffset.INPC","$(P)$(Q)calcRangeOffset/INPC")
#! Field("$(P)$(Q)calcRangeOffset.VAL",16777215,1,"$(P)$(Q)calcRangeOffset.VAL")
#! Connector("$(P)$(Q)calcRangeOffset/INPC","$(P)$(Q)calcStartEnd.L",2220,1380,16777215,"",0)
#! Connector("$(P)$(Q)calcRangeOffset/INPB","$(P)$(Q)calcStartEnd.G",2240,1410,16777215,"",0)
#! Connector("$(P)$(Q)calcRangeOffset/INPA","$(P)$(Q)calcStartEnd.C",2260,1390,16777215,"",0)
#! Record("$(P)$(Q)pulseWndwBld",3440,1404,0,1,"$(P)$(Q)pulseWndwBld")
#! Field("$(P)$(Q)pulseWndwBld.PROC",16777215,0,"$(P)$(Q)pulseWndwBld.PROC")
#! Field("$(P)$(Q)pulseWndwBld.OUT",16777215,1,"$(P)$(Q)pulseWndwBld.OUT")
#! Link("$(P)$(Q)pulseWndwBld.OUT","$(P)$(Q)pulseWndwBld/OUT")
#! Field("$(P)$(Q)pulseWndwBld.INPA",16777215,0,"$(P)$(Q)pulseWndwBld.INPA")
#! Link("$(P)$(Q)pulseWndwBld.INPA","$(P)$(Q)pulseWndwBld/INPA")
#! Field("$(P)$(Q)pulseWndwBld.INPB",16777215,0,"$(P)$(Q)pulseWndwBld.INPB")
#! Link("$(P)$(Q)pulseWndwBld.INPB","$(P)$(Q)pulseWndwBld/INPB")
#! Field("$(P)$(Q)pulseWndwBld.INPC",16777215,0,"$(P)$(Q)pulseWndwBld.INPC")
#! Link("$(P)$(Q)pulseWndwBld.INPC","$(P)$(Q)calcRangeOffset.VAL")
#! Field("$(P)$(Q)pulseWndwBld.FLNK",16777215,1,"$(P)$(Q)pulseWndwBld.FLNK")
#! Link("$(P)$(Q)pulseWndwBld.FLNK","$(P)$(Q)pulseWndwBld/FLNK")
#! Field("$(P)$(Q)pulseWndwBld.A",16777215,1,"$(P)$(Q)pulseWndwBld.A")
#! Field("$(P)$(Q)pulseWndwBld.B",16777215,1,"$(P)$(Q)pulseWndwBld.B")
#! Field("$(P)$(Q)pulseWndwBld.C",16777215,1,"$(P)$(Q)pulseWndwBld.C")
#! Connector("$(P)$(Q)pulseWndwBld/INPB","$(P)$(Q)endPosDial.VAL",1440,1270,16777215,"",0)
#! Connector("$(P)$(Q)pulseWndwBld/INPA","$(P)$(Q)startPosDial.VAL",1460,1160,16777215,"",0)
#! Connector("$(P)$(Q)pulseWndwBld/FLNK","$(P)$(Q)pulseWndwBld2",3660,1663,16777215,"",0)
#! Connector("$(P)$(Q)pulseWndwBld/OUT","$(P)$(Q)pulseWndwBlds.A",3680,1610,16777215,"",0)
#! Visibility("$(P)$(Q)pulseWndwBld.AA",1)
#! Visibility("$(P)$(Q)pulseWndwBld.CALC",1)
#! Visibility("$(P)$(Q)pulseWndwBld.BB",1)
#! Record("$(P)$(Q)pulseWndwBld2",3740,1554,0,0,"$(P)$(Q)pulseWndwBld2")
#! Field("$(P)$(Q)pulseWndwBld2.INPA",16777215,0,"$(P)$(Q)pulseWndwBld2.INPA")
#! Link("$(P)$(Q)pulseWndwBld2.INPA","$(P)$(Q)pulseWndwBld.A")
#! Field("$(P)$(Q)pulseWndwBld2.INPB",16777215,0,"$(P)$(Q)pulseWndwBld2.INPB")
#! Link("$(P)$(Q)pulseWndwBld2.INPB","$(P)$(Q)pulseWndwBld.B")
#! Field("$(P)$(Q)pulseWndwBld2.INPC",16777215,0,"$(P)$(Q)pulseWndwBld2.INPC")
#! Link("$(P)$(Q)pulseWndwBld2.INPC","$(P)$(Q)pulseWndwBld.C")
#! Field("$(P)$(Q)pulseWndwBld2.OUT",16777215,1,"$(P)$(Q)pulseWndwBld2.OUT")
#! Link("$(P)$(Q)pulseWndwBld2.OUT","$(P)$(Q)pulseWndwBlds.B")
#! Record("$(P)$(Q)pulseWndwBlds",4000,1437,0,0,"$(P)$(Q)pulseWndwBlds")
#! Field("$(P)$(Q)pulseWndwBlds.A",16777215,0,"$(P)$(Q)pulseWndwBlds.A")
#! Field("$(P)$(Q)pulseWndwBlds.B",16777215,0,"$(P)$(Q)pulseWndwBlds.B")
#! Field("$(P)$(Q)pulseWndwBlds.OUTA",16777215,1,"$(P)$(Q)pulseWndwBlds.OUTA")
#! Link("$(P)$(Q)pulseWndwBlds.OUTA","$(P)$(Q)cmdWriteRead.BOUT")
#! Record("$(P)$(Q)armPSO",3100,1914,0,1,"$(P)$(Q)armPSO")
#! Field("$(P)$(Q)armPSO.OUT",16777215,1,"$(P)$(Q)armPSO.OUT")
#! Link("$(P)$(Q)armPSO.OUT","$(P)$(Q)cmdWriteRead.BOUT")
#! Field("$(P)$(Q)armPSO.PROC",16777215,0,"$(P)$(Q)armPSO.PROC")
#! Visibility("$(P)$(Q)armPSO.VAL",1)
#! Record("$(P)$(Q)disablePSO",3100,2007,0,1,"$(P)$(Q)disablePSO")
#! Field("$(P)$(Q)disablePSO.LNK1",16777215,1,"$(P)$(Q)disablePSO.LNK1")
#! Link("$(P)$(Q)disablePSO.LNK1","$(P)$(Q)cmdWriteRead.BOUT")
#! Field("$(P)$(Q)disablePSO.LNK2",16777215,1,"$(P)$(Q)disablePSO.LNK2")
#! Link("$(P)$(Q)disablePSO.LNK2","$(P)$(Q)cmdWriteRead.BOUT")
#! Field("$(P)$(Q)disablePSO.PROC",16777215,0,"$(P)$(Q)disablePSO.PROC")
#! Record("$(P)$(Q)motorName",520,194,0,1,"$(P)$(Q)motorName")
#! Visibility("$(P)$(Q)motorName.VAL",1)