# Solved: when the slit is stopped, the hard motors are rarely in exactly
# the positions they should be, because one was started slightly before the
# other.  Thus, if you move 'center' and stop during the move, 'size' will sync
# to a slightly new value. 
# New sync strategy:
# If 'center' was moved and stopped, calc new positions for (xn,xp) so that
# 'size' will be preserved, move hard motors to those positions, and sync.
# if 'size' was moved and stopped, calc new positions for (xn,xp) so that
# 'center' will be preserved, move hard motors to those positions, and sync.
# if xn or xp was moved, just sync.
#

#! Generated by VisualDCT v2.6
#! DBDSTART
#! DBDEND


record(transform, "$(P)$(SLIT)setMonitor") {
	field(INPA, "$(P)$(SLIT)xp.SET CP")
	field(INPB, "$(P)$(SLIT)xn.SET CP")
	field(INPC, "$(P)$(SLIT)size.SET CP")
	field(INPD, "$(P)$(SLIT)center.SET CP")
	field(CLCE, "a||b||c||d")
	field(OUTE, "$(P)$(mXn).SET CA")
	field(CLCF, "e")
	field(OUTF, "$(P)$(mXp).SET CA")

}
record(bo, "$(P)$(SLIT)set1") {
  field(DTYP, "Soft Channel")
  field(OMSL, "closed_loop")
  field(DOL, "$(P)$(SLIT)set.VAL  NPP NMS")
  field(OUT, "$(P)$(mXp).SET  PP MS")
  field(ZNAM, "Use")
  field(ONAM, "Set")
}

record(bo, "$(P)$(SLIT)set") {
  field(DTYP, "Soft Channel")
  field(FLNK, "$(P)$(SLIT)set1  PP MS")
  field(OUT, "$(P)$(mXn).SET  PP MS")
  field(ZNAM, "Use")
  field(ONAM, "Set")
}

# Listen to all soft motors' .STOP fields.  If any go to 1, stop all
# soft and hard motors.  (We have to stop soft motors so they'll know that
# they're supposed to sync to hard motor values when the move ends.)
# But if we write to the .STOP fields we're monitoring, we don't want to
# respond to monitors from our own writes.
# Thus, when we write, weSaidStop disables that response.
record(bo, "$(P)$(SLIT)weSaidStop") {
	#field(TPRO, "1")
	field(ZNAM, "No")
	field(ONAM, "Yes")
}
record(transform, "$(P)$(SLIT)monitorStop") {
	#field(TPRO, "1")
	field(SDIS, "$(P)$(SLIT)weSaidStop")
	field(DISV, "1")
	# listen to our soft motors' .STOP fields
	field(INPA, "$(P)$(SLIT)xp.STOP CP MS")
	field(INPB, "$(P)$(SLIT)xn.STOP CP MS")
	field(INPC, "$(P)$(SLIT)size.STOP CP MS")
	field(INPD, "$(P)$(SLIT)center.STOP CP MS")
	# also listen to the soft motors of the other 2slit_soft database
	# that we're paired with (if it exists)
	field(INPE, "$(P)$(PAIRED_WITH=)xp.STOP CP MS")
	field(INPF, "$(P)$(PAIRED_WITH=)xn.STOP CP MS")
	field(INPG, "$(P)$(PAIRED_WITH=)size.STOP CP MS")
	field(INPH, "$(P)$(PAIRED_WITH=)center.STOP CP MS")
	# I==any soft motor was told to stop
	field(CLCI, "a||b||c||d||e||f||g||h")
	field(OUTI, "$(P)$(SLIT)weSaidStop PP MS")
	# don't write to the .STOP field that triggered us to process
	field(CMTJ, "bitmask for doStop")
	field(CLCJ, "!a+!b*2+!c*4+!d*8+16+32+64")
	field(OUTK, "$(P)$(SLIT)doStop.PROC PP")
}
record(seq, "$(P)$(SLIT)doStop") {
	#field(TPRO, "1")
	field(SDIS, "$(P)$(SLIT)weSaidStop")
	field(DISV, "0")
	field(SELL, "$(P)$(SLIT)monitorStop.J")
	field(SELM, "Mask")
	field(DOL1, "1")
	field(LNK1, "$(P)$(SLIT)xp.STOP PP")
	field(DOL2, "1")
	field(LNK2, "$(P)$(SLIT)xn.STOP PP")
	field(DOL3, "1")
	field(LNK3, "$(P)$(SLIT)size.STOP PP")
	field(DOL4, "1")
	field(LNK4, "$(P)$(SLIT)center.STOP PP")
	field(DOL5, "1")
	field(LNK5, "$(P)$(mXp).STOP PP")
	field(DOL6, "1")
	field(LNK6, "$(P)$(mXn).STOP PP")
	# We need to wait for all the postings resulting from puts to stop_*
	# fields to be received by monitorStop's CP links before enabling
	# that record to respond to new postings of those fields.  Writing
	# with a CA link should ensure that, but delaying by 0.1 s provides
	# additional protection.
	# On second thought, try leaving weSaidStop==1 until the motors stop.
	#field(DOL7, "0")
	#field(DLY7, ".1")
	#field(LNK7, "$(P)$(SLIT)weSaidStop CA")
}

record(motor, "$(P)$(SLIT)xp") {
  field(DESC, "$(SLIT) X+")
  # ignore the SET field, we're going to implement it in the database, rather
  # than in individual motor records
  field(IGSET, "1")
  # spec might be able to use this alias
  alias("$(P)$(SLIT)m2")
  field(DTYP, "Soft Channel")
  field(OUT, "$(P)$(SLIT)tFwd.A  PP MS")
  field(RDBL, "$(P)$(SLIT)tRev.A  NPP MS")
  field(MRES, ".00001")
  field(RRES, "1")
  field(URIP, "Yes")
  field(PREC, "5")
  field(EGU, "mm")
  field(TWV, "1")
  field(DINP, "$(P)$(SLIT)calcDone.VAL  NPP MS")
  field(RTRY, "0")
}

record(motor, "$(P)$(SLIT)xn") {
  field(DESC, "$(SLIT) X-")
  field(IGSET, "1")
  alias("$(P)$(SLIT)m1")
  field(DTYP, "Soft Channel")
  field(OUT, "$(P)$(SLIT)tFwd.B  PP MS")
  field(RDBL, "$(P)$(SLIT)tRev.B  NPP MS")
  field(MRES, ".00001")
  field(RRES, "1")
  field(URIP, "Yes")
  field(PREC, "5")
  field(EGU, "mm")
  field(TWV, "1")
  field(DINP, "$(P)$(SLIT)calcDone.VAL  NPP MS")
  field(RTRY, "0")
}

record(motor, "$(P)$(SLIT)size") {
  field(DESC, "$(SLIT) Size")
  field(IGSET, "1")
  alias("$(P)$(SLIT)m3")
  field(DTYP, "Soft Channel")
  field(OUT, "$(P)$(SLIT)tFwd.C  PP MS")
  field(RDBL, "$(P)$(SLIT)tRev.C  NPP MS")
  field(MRES, ".00001")
  field(RRES, "1")
  field(URIP, "Yes")
  field(PREC, "5")
  field(EGU, "mm")
  field(TWV, "1")
  field(DINP, "$(P)$(SLIT)calcDone.VAL  NPP MS")
  field(RTRY, "0")
}

record(motor, "$(P)$(SLIT)center") {
  field(DESC, "$(SLIT) Center")
  field(IGSET, "1")
  alias("$(P)$(SLIT)m4")
  field(DTYP, "Soft Channel")
  field(OUT, "$(P)$(SLIT)tFwd.D  PP MS")
  field(RDBL, "$(P)$(SLIT)tRev.D  NPP MS")
  field(MRES, ".00001")
  field(RRES, "1")
  field(URIP, "Yes")
  field(PREC, "5")
  field(EGU, "mm")
  field(TWV, "1")
  field(DINP, "$(P)$(SLIT)calcDone.VAL  NPP MS")
  field(RTRY, "0")
}
record(transform, "$(P)$(SLIT)spectator") {
}
record(transform, "$(P)$(SLIT)latchSpectator") {
	# latch values of spectator, so we'll know who started this move
	field(SDIS, "$(P)$(SLIT)newMove")
	field(DISV, "1")
	field(INPA, "$(P)$(SLIT)spectator.A")
	field(INPB, "$(P)$(SLIT)spectator.B")
	field(INPC, "$(P)$(SLIT)spectator.C")
	field(INPD, "$(P)$(SLIT)spectator.D")
}

record(ao, "$(P)$(SLIT)xpBPut") {
  field(DTYP, "Soft Channel")
  field(SDIS, "$(P)$(SLIT)xp.PACT  NPP MS")
  field(OUT, "$(P)$(SLIT)xp.VAL  PP MS")
  field(FLNK, "$(P)$(SLIT)xpWasPassive")
}
# If xpWasPassive processes, xp didn't cause the move
record(bo, "$(P)$(SLIT)xpWasPassive") {
	field(DOL, "1")
	field(OUT, "$(P)$(SLIT)spectator.A PP")
}

record(ao, "$(P)$(SLIT)xnBPut") {
  field(DTYP, "Soft Channel")
  field(SDIS, "$(P)$(SLIT)xn.PACT  NPP MS")
  field(OUT, "$(P)$(SLIT)xn.VAL  PP MS")
  field(FLNK, "$(P)$(SLIT)xnWasPassive")
}
record(bo, "$(P)$(SLIT)xnWasPassive") {
	field(DOL, "1")
	field(OUT, "$(P)$(SLIT)spectator.B PP")
}

record(ao, "$(P)$(SLIT)sizeBPut") {
  field(DTYP, "Soft Channel")
  field(SDIS, "$(P)$(SLIT)size.PACT  NPP MS")
  field(OUT, "$(P)$(SLIT)size.VAL  PP MS")
  field(FLNK, "$(P)$(SLIT)sizeWasPassive")
}
record(bo, "$(P)$(SLIT)sizeWasPassive") {
	field(DOL, "1")
	field(OUT, "$(P)$(SLIT)spectator.C PP")
}

record(ao, "$(P)$(SLIT)centerBPut") {
  field(DTYP, "Soft Channel")
  field(SDIS, "$(P)$(SLIT)center.PACT  NPP MS")
  field(OUT, "$(P)$(SLIT)center.VAL  PP MS")
  field(FLNK, "$(P)$(SLIT)centerWasPassive")
}
record(bo, "$(P)$(SLIT)centerWasPassive") {
	field(DOL, "1")
	field(OUT, "$(P)$(SLIT)spectator.D PP")
}

record(ao, "$(P)$(SLIT)mXnPut") {
  field(DTYP, "Soft Channel")
  field(OUT, "$(P)$(mXn).VAL  PP MS")
}

record(ao, "$(P)$(SLIT)mXpPut") {
  field(DTYP, "Soft Channel")
  field(OUT, "$(P)$(mXp).VAL  PP MS")
}

record(calcout, "$(P)$(SLIT)closeGate") {
  field(SDIS, "$(P)$(SLIT)gate.VAL  NPP MS")
  field(DISV, "0")
  field(INPA, "$(P)$(mXn).DMOV  CP ")
  field(CALC, "!a")
  field(OUT, "$(P)$(SLIT)gate.VAL  PP MS")
}

record(bo, "$(P)$(SLIT)gate") {
  field(DTYP, "Soft Channel")
  field(OUT, "$(P)$(SLIT)setSoftMove PP")
  field(ZNAM, "Closed")
  field(ONAM, "Open")
}

record(bo, "$(P)$(SLIT)gatePut") {
  field(DTYP, "Soft Channel")
  field(OUT, "$(P)$(SLIT)gate.VAL  PP MS")
}

record(scalcout, "$(P)$(SLIT)mXn_nameCalc") {
  field(CALC, "aa[0,'.']")
  field(INAA, "$(P)$(SLIT)mXnPut.OUT CPP")
}

record(scalcout, "$(P)$(SLIT)mXp_nameCalc") {
  field(CALC, "aa[0,'.']")
  field(INAA, "$(P)$(SLIT)mXpPut.OUT CPP")
}

record(transform, "$(P)$(SLIT)tFwd") {
  field(DESC, "xp(a),xn(b)->size(c),center")
  field(CLCA, "d+c/2")
  field(CLCB, "d-c/2")
  field(CLCC, "a-b")
  field(CLCD, "(a+b)/2")
  field(CLCF, "a")
  field(CLCG, "b")
  field(INPE, "1")
  field(OUTA, "$(P)$(SLIT)xpBPut.VAL  PP MS")
  field(OUTB, "$(P)$(SLIT)xnBPut.VAL  PP MS")
  field(OUTC, "$(P)$(SLIT)sizeBPut.VAL  PP MS")
  field(OUTD, "$(P)$(SLIT)centerBPut.VAL  PP MS")
  field(OUTE, "$(P)$(SLIT)gatePut.VAL  PP MS")
  field(OUTF, "$(P)$(SLIT)writeMotors.PROC PP MS")
  field(PREC, "3")
  field(CMTA, "X+ slit")
  field(CMTB, "X- slit")
  field(CMTC, "size")
  field(CMTD, "center")
  field(CMTE, "gate")
  field(CMTF, "send X+ to motor")
  field(CMTG, "send X- to motor")
  field(OUTH, "$(P)$(SLIT)latchSpectator.PROC PP")
  field(I, "1")
  field(OUTI, "$(P)$(SLIT)newMove PP")
}
record(bo, "$(P)$(SLIT)newMove") {
  field(DTYP, "Soft Channel")
}

record(bo, "$(P)$(SLIT)setSoftMove") {
	field(SDIS, "$(P)$(SLIT)gate")
	field(DISV, "0")
	field(OUT, "$(P)$(SLIT)isSoftMove PP")
}

record(bo, "$(P)$(SLIT)clearSoftMove") {
  field(OUT, "$(P)$(SLIT)isSoftMove PP")
}
record(dfanout, "$(P)$(SLIT)isSoftMove") {
  field(OUTA, "$(P)$(SLIT)xp.LOCK")
  field(OUTB, "$(P)$(SLIT)xn.LOCK")
  field(OUTC, "$(P)$(SLIT)size.LOCK")
  field(OUTD, "$(P)$(SLIT)center.LOCK")
}

record(calcout, "$(P)$(SLIT)calcDone") {
  field(CALC, "b&&c&&!a")
  field(INPA, "$(P)$(SLIT)gate.VAL CP")
  field(INPB, "$(P)$(mXp).DMOV CP")
  field(INPC, "$(P)$(mXn).DMOV CP")
  field(OUT, "$(P)$(SLIT)doDoneStuff.PROC PP")
  field(OOPT, "Transition To Non-zero")
}

record(seq, "$(P)$(SLIT)doDoneStuff") {
	# leave instructions to do a sync when everything is done
	field(DOL1, "$(P)$(SLIT)weSaidStop")
	field(LNK1, "$(P)$(SLIT)maybeSync.A NPP")
	# clean up after move
	field(DOL2, "0")
	field(LNK2, "$(P)$(SLIT)weSaidStop PP")
	field(LNK3, "$(P)$(SLIT)clearSoftMove.PROC PP")
	# maybe sync to hard motor commanded positions, but only after soft motors
	# have responded to calcDone.  CA link should be enough to get this
	# ordering right.
	field(DLY4, "0")
	field(LNK4, "$(P)$(SLIT)maybeSync.PROC CA")
	field(DOL5, "0")
	field(LNK5, "$(P)$(SLIT)newMove PP")
	field(DOL6, "0")
	field(LNK6, "$(P)$(SLIT)spectator.A PP")

	field(DOL7, "0")
	field(LNK7, "$(P)$(SLIT)spectator.B PP")

	field(DOL8, "0")
	field(LNK8, "$(P)$(SLIT)spectator.C PP")

	field(DOL9, "0")
	field(LNK9, "$(P)$(SLIT)spectator.D PP")
}

### initialization
record(calcout, "$(P)$(SLIT)mXpPosted") {
	#field(TPRO, "1")
	field(INPA, "$(P)$(mXp) CP")
	field(CALC, "1")
	field(OUT, "$(P)$(SLIT)initAfterMotorRbv.A PP")
}
record(calcout, "$(P)$(SLIT)mXnPosted") {
	#field(TPRO, "1")
	field(INPA, "$(P)$(mXn) CP")
	field(CALC, "1")
	field(OUT, "$(P)$(SLIT)initAfterMotorRbv.B PP")
}
record(calcout, "$(P)$(SLIT)initAfterMotorRbv") {
	field(SDIS, "$(P)$(SLIT)initialized")
	field(DISV, "1")
	field(CALC, "a&&b")
	field(OOPT, "When Non-zero")
	field(OUT, "$(P)$(SLIT)doInit PP")
}
record(seq, "$(P)$(SLIT)doInit") {
	field(LNK1, "$(P)$(SLIT)tSync.PROC PP")
	field(DOL2, "1")
	field(LNK2, "$(P)$(SLIT)initialized PP")
}
record(bo, "$(P)$(SLIT)initialized") {
}

### sync
record(calcout, "$(P)$(SLIT)syncOrInit") {
	field(INPA, "$(P)$(SLIT)doSync")
	field(INPB, "$(P)$(SLIT)doInit")
	field(CALC, "a||b")
}
# manual sync to hard motor commanded positions
# Maybe this can be automated for cases the soft motors don't handle well.
record(calcout, "$(P)$(SLIT)maybeSync") {
	field(CALC, "A")
	field(OOPT, "When Non-zero")
	field(OUT, "$(P)$(SLIT)doSync PP")
}
record(bo, "$(P)$(SLIT)doSync") {
	field(OUT, "$(P)$(SLIT)doSyncPut PP")
}
# only process sync command, not reset from that command
record(bo, "$(P)$(SLIT)doSyncPut") {
	field(SDIS, "$(P)$(SLIT)doSync")
	field(DISV, "0")
	field(OUT, "$(P)$(SLIT)tSyncCalc.PROC PP")
}
# if center was moved and stopped, calc new positions for (xn,xp) so that
# size will be preserved, move hard motors to those positions, and sync.
# if size was moved and stopped, calc new positions for (xn,xp) so that
# center will be preserved, move hard motors to those positions, and sync.
# if xn or xp was moved, just sync.
record(transform, "$(P)$(SLIT)tSyncCalc") {
	field(SDIS, "$(P)$(SLIT)doSync")
	field(DISV, "0")
	field(EGU, "mm")
	field(PREC, "5")

	# who caused move?
	field(CMTA, "size didn't cause move")
	field(INPA, "$(P)$(SLIT)latchSpectator.C")
	field(CMTB, "center didn't cause move")
	field(INPB, "$(P)$(SLIT)latchSpectator.D")
	# commanded size, center
	field(CMTC, "commanded size")
	field(INPC, "$(P)$(SLIT)tFwd.C")
	field(CMTD, "commanded center")
	field(INPD, "$(P)$(SLIT)tFwd.D")
	# current mXp, mXn
	field(INPE, "$(P)$(mXp)")
	field(INPF, "$(P)$(mXn)")
	# calc mXp for corrective move
	# if size caused move, center + current_size/2, else
	# if center caused move, current_center + size/2,
	# else current mXp
	field(CMTG, "mXp for corrective move")
	field(CLCG, "(a==0)?(d+(e-f)/2):((b==0)?((e+f+c)/2):e)") 
	# calc mXn for corrective move
	# if size caused move, center - current_size/2, else
	# if center caused move, current_center - size/2,
	# else current mXn
	field(CMTH, "mXn for corrective move")
	field(CLCH, "(a==0)?(d-(e-f)/2):((b==0)?((e+f-c)/2):f)")
	field(FLNK, "$(P)$(SLIT)adjustMotors")
}
record(sseq, "$(P)$(SLIT)adjustMotors") {
	field(SDIS, "$(P)$(SLIT)doSync")
	field(DISV, "0")

	field(DOL1, "$(P)$(SLIT)tSyncCalc.G")
	field(LNK1, "$(P)$(mXp) CA")
	field(WAIT1, "After2")

	field(DOL2, "$(P)$(SLIT)tSyncCalc.H")
	field(LNK2, "$(P)$(mXn) CA")
	field(WAIT2, "After2")

	field(LNK3, "$(P)$(SLIT)tSync.PROC PP")
}
record(transform, "$(P)$(SLIT)tSync") {
	field(DESC, "xp(a), xn(b)->siz(c),cntr(d)")
	field(SDIS, "$(P)$(SLIT)syncOrInit PP")
	field(DISV, "0")
	field(EGU, "mm")
	field(PREC, "5")

	field(CMTA, "X+ slit")
	field(INPA, "$(P)$(mXp)")
	field(OUTA, "$(P)$(SLIT)tFwd.A NPP")

	field(CMTB, "X- slit")
	field(INPB, "$(P)$(mXn)")
	field(OUTB, "$(P)$(SLIT)tFwd.B NPP")

	field(CMTC, "Size")
	field(CLCC, "a-b")
	field(OUTC, "$(P)$(SLIT)tFwd.C NPP")

	field(CMTD, "Center")
	field(CLCD, "(a+b)/2")
	field(OUTD, "$(P)$(SLIT)tFwd.D NPP")

	field(CMTE, "process tFwd")
	field(CLCE, "0")
	field(OUTE, "$(P)$(SLIT)tFwd.PROC PP")

	field(CMTF, "close gate")
	field(CLCF, "0")
	field(OUTF, "$(P)$(SLIT)gate PP")

	field(CMTM, "clear doSync")
	field(M, "0")
	field(OUTM, "$(P)$(SLIT)doSync NPP")

	field(CMTL, "clear doInit")
	field(L, "0")
	field(OUTL, "$(P)$(SLIT)doInit NPP")
}

record(transform, "$(P)$(SLIT)tRev") {
  field(DESC, "xp(a), xn(b)->siz(c),cntr(d)")
  field(CLCC, "a-b")
  field(CLCD, "(a+b)/2")
  field(INPA, "$(P)$(mXp).RBV  CP MS")
  field(INPB, "$(P)$(mXn).RBV  CP MS")
  field(EGU, "mm")
  field(PREC, "5")
  field(CMTA, "X+ slit")
  field(CMTB, "X- slit")
  field(CMTC, "Size")
  field(CMTD, "Center")
}

record(transform, "$(P)$(SLIT)tLimits") {
  field(PHAS, "0")
  field(CLCE, "a-d")
  field(CLCF, "b-c")
  field(CLCG, "(a+c)/2")
  field(CLCH, "(b+d)/2")
  field(INPA, "$(P)$(mXp).LLM  CP NMS")
  field(INPB, "$(P)$(mXp).HLM  CP NMS")
  field(INPC, "$(P)$(mXn).LLM  CP NMS")
  field(INPD, "$(P)$(mXn).HLM  CP NMS")
  field(OUTA, "$(P)$(SLIT)xp.LLM  NPP MS")
  field(OUTB, "$(P)$(SLIT)xp.HLM  NPP MS")
  field(OUTC, "$(P)$(SLIT)xn.LLM  NPP MS")
  field(OUTD, "$(P)$(SLIT)xn.HLM  NPP MS")
  field(OUTE, "$(P)$(SLIT)size.LLM  NPP MS")
  field(OUTF, "$(P)$(SLIT)size.HLM  NPP MS")
  field(OUTG, "$(P)$(SLIT)center.LLM  NPP MS")
  field(OUTH, "$(P)$(SLIT)center.HLM  NPP MS")
  field(PREC, "3")
}

record(sseq, "$(P)$(SLIT)writeMotors") {
	field(SDIS, "$(P)$(SLIT)syncOrInit PP")
	field(DISV, "1")
  field(DLY1, ".02")
  field(DOL1, "$(P)$(SLIT)tFwd.F")
  field(LNK1, "$(P)$(SLIT)mXpPut PP")
  field(DOL2, "$(P)$(SLIT)tFwd.G")
  field(LNK2, "$(P)$(SLIT)mXnPut PP")
}

#! Further lines contain data used by VisualDCT
#! View(507,640,0.8)
#! Record("$(P)$(SLIT)set1",1980,539,0,1,"$(P)$(SLIT)set1")
#! Field("$(P)$(SLIT)set1.DOL",16777215,0,"$(P)$(SLIT)set1.DOL")
#! Link("$(P)$(SLIT)set1.DOL","$(P)$(SLIT)set.VAL")
#! Field("$(P)$(SLIT)set1.OUT",16777215,1,"$(P)$(SLIT)set1.OUT")
#! Record("$(P)$(SLIT)set",1980,413,0,0,"$(P)$(SLIT)set")
#! Field("$(P)$(SLIT)set.OUT",16777215,1,"$(P)$(SLIT)set.OUT")
#! Link("$(P)$(SLIT)set.OUT","$(P)$(SLIT)set/OUT")
#! Field("$(P)$(SLIT)set.VAL",16777215,0,"$(P)$(SLIT)set.VAL")
#! Field("$(P)$(SLIT)set.FLNK",16777215,1,"$(P)$(SLIT)set.FLNK")
#! Link("$(P)$(SLIT)set.FLNK","$(P)$(SLIT)set/FLNK")
#! Connector("$(P)$(SLIT)set/FLNK","$(P)$(SLIT)set1",2200,599,16777215,"",0)
#! Connector("$(P)$(SLIT)set/OUT",null,2200,560,16777215,"",2)
#! Record("$(P)$(SLIT)stop",440,273,0,0,"$(P)$(SLIT)stop")
#! Field("$(P)$(SLIT)stop.OUTA",16711680,1,"$(P)$(SLIT)stop.OUTA")
#! Link("$(P)$(SLIT)stop.OUTA","$(P)$(SLIT)xp.STOP")
#! Field("$(P)$(SLIT)stop.OUTB",16711680,1,"$(P)$(SLIT)stop.OUTB")
#! Link("$(P)$(SLIT)stop.OUTB","$(P)$(SLIT)xn.STOP")
#! Field("$(P)$(SLIT)stop.OUTC",16711680,1,"$(P)$(SLIT)stop.OUTC")
#! Link("$(P)$(SLIT)stop.OUTC","$(P)$(SLIT)size.STOP")
#! Field("$(P)$(SLIT)stop.OUTD",16711680,1,"$(P)$(SLIT)stop.OUTD")
#! Link("$(P)$(SLIT)stop.OUTD","$(P)$(SLIT)center.STOP")
#! Record("$(P)$(SLIT)xp",840,374,0,0,"$(P)$(SLIT)xp")
#! Field("$(P)$(SLIT)xp.PACT",16777215,1,"$(P)$(SLIT)xp.PACT")
#! Field("$(P)$(SLIT)xp.VAL",16777215,0,"$(P)$(SLIT)xp.VAL")
#! Field("$(P)$(SLIT)xp.STOP",16711680,0,"$(P)$(SLIT)xp.STOP")
#! Field("$(P)$(SLIT)xp.HLM",52224,0,"$(P)$(SLIT)xp.HLM")
#! Field("$(P)$(SLIT)xp.LLM",52224,0,"$(P)$(SLIT)xp.LLM")
#! Field("$(P)$(SLIT)xp.OUT",16777215,1,"$(P)$(SLIT)xp.OUT")
#! Link("$(P)$(SLIT)xp.OUT","$(P)$(SLIT)xp/OUT")
#! Field("$(P)$(SLIT)xp.RDBL",16777215,0,"$(P)$(SLIT)xp.RDBL")
#! Link("$(P)$(SLIT)xp.RDBL","$(P)$(SLIT)xp/RDBL")
#! Field("$(P)$(SLIT)xp.DINP",16750848,0,"$(P)$(SLIT)xp.DINP")
#! Link("$(P)$(SLIT)xp.DINP","$(P)$(SLIT)xp/DINP")
#! Field("$(P)$(SLIT)xp.LOCK",65484,0,"$(P)$(SLIT)xp.LOCK")
#! Connector("$(P)$(SLIT)xp/DINP","$(P)$(SLIT)calcDone.VAL",740,1300,16750848,"",0)
#! Connector("$(P)$(SLIT)xp/RDBL","$(P)$(SLIT)tRev.A",680,930,16777215,"",0)
#! Connector("$(P)$(SLIT)xp/OUT","$(P)$(SLIT)tFwd.A",1360,750,16777215,"",0)
#! Record("$(P)$(SLIT)xpBPut",1100,502,0,0,"$(P)$(SLIT)xpBPut")
#! Field("$(P)$(SLIT)xpBPut.SDIS",16777215,0,"$(P)$(SLIT)xpBPut.SDIS")
#! Link("$(P)$(SLIT)xpBPut.SDIS","$(P)$(SLIT)xp.PACT")
#! Field("$(P)$(SLIT)xpBPut.OUT",16777215,0,"$(P)$(SLIT)xpBPut.OUT")
#! Link("$(P)$(SLIT)xpBPut.OUT","$(P)$(SLIT)xp.VAL")
#! Field("$(P)$(SLIT)xpBPut.VAL",16777215,1,"$(P)$(SLIT)xpBPut.VAL")
#! Record("$(P)$(SLIT)xn",840,654,0,0,"$(P)$(SLIT)xn")
#! Field("$(P)$(SLIT)xn.PACT",16777215,1,"$(P)$(SLIT)xn.PACT")
#! Field("$(P)$(SLIT)xn.VAL",16777215,0,"$(P)$(SLIT)xn.VAL")
#! Field("$(P)$(SLIT)xn.STOP",16711680,0,"$(P)$(SLIT)xn.STOP")
#! Field("$(P)$(SLIT)xn.HLM",52224,0,"$(P)$(SLIT)xn.HLM")
#! Field("$(P)$(SLIT)xn.LLM",52224,0,"$(P)$(SLIT)xn.LLM")
#! Field("$(P)$(SLIT)xn.OUT",16777215,1,"$(P)$(SLIT)xn.OUT")
#! Link("$(P)$(SLIT)xn.OUT","$(P)$(SLIT)xn/OUT")
#! Field("$(P)$(SLIT)xn.RDBL",16777215,0,"$(P)$(SLIT)xn.RDBL")
#! Link("$(P)$(SLIT)xn.RDBL","$(P)$(SLIT)xn/RDBL")
#! Field("$(P)$(SLIT)xn.DINP",16750848,0,"$(P)$(SLIT)xn.DINP")
#! Link("$(P)$(SLIT)xn.DINP","$(P)$(SLIT)xn/DINP")
#! Field("$(P)$(SLIT)xn.LOCK",65484,0,"$(P)$(SLIT)xn.LOCK")
#! Connector("$(P)$(SLIT)xn/OUT","$(P)$(SLIT)tFwd.B",1360,900,16777215,"",0)
#! Connector("$(P)$(SLIT)xn/DINP","$(P)$(SLIT)calcDone.VAL",740,1440,16750848,"",0)
#! Connector("$(P)$(SLIT)xn/RDBL","$(P)$(SLIT)tRev.B",700,1080,16777215,"",0)
#! Record("$(P)$(SLIT)size",840,934,0,0,"$(P)$(SLIT)size")
#! Field("$(P)$(SLIT)size.PACT",16777215,1,"$(P)$(SLIT)size.PACT")
#! Field("$(P)$(SLIT)size.VAL",16777215,0,"$(P)$(SLIT)size.VAL")
#! Field("$(P)$(SLIT)size.STOP",16711680,0,"$(P)$(SLIT)size.STOP")
#! Field("$(P)$(SLIT)size.HLM",52224,0,"$(P)$(SLIT)size.HLM")
#! Field("$(P)$(SLIT)size.LLM",52224,0,"$(P)$(SLIT)size.LLM")
#! Field("$(P)$(SLIT)size.OUT",16777215,1,"$(P)$(SLIT)size.OUT")
#! Link("$(P)$(SLIT)size.OUT","$(P)$(SLIT)size/OUT")
#! Field("$(P)$(SLIT)size.RDBL",16777215,0,"$(P)$(SLIT)size.RDBL")
#! Link("$(P)$(SLIT)size.RDBL","$(P)$(SLIT)size/RDBL")
#! Field("$(P)$(SLIT)size.DINP",16750848,0,"$(P)$(SLIT)size.DINP")
#! Link("$(P)$(SLIT)size.DINP","$(P)$(SLIT)size/DINP")
#! Field("$(P)$(SLIT)size.LOCK",65484,0,"$(P)$(SLIT)size.LOCK")
#! Connector("$(P)$(SLIT)size/DINP","$(P)$(SLIT)calcDone.VAL",740,1580,16750848,"",0)
#! Connector("$(P)$(SLIT)size/RDBL","$(P)$(SLIT)tRev.C",700,1230,16777215,"",0)
#! Connector("$(P)$(SLIT)size/OUT","$(P)$(SLIT)tFwd.C",1440,1050,16777215,"",0)
#! Record("$(P)$(SLIT)center",840,1214,0,0,"$(P)$(SLIT)center")
#! Field("$(P)$(SLIT)center.PACT",16777215,1,"$(P)$(SLIT)center.PACT")
#! Field("$(P)$(SLIT)center.VAL",16777215,0,"$(P)$(SLIT)center.VAL")
#! Field("$(P)$(SLIT)center.STOP",16711680,0,"$(P)$(SLIT)center.STOP")
#! Field("$(P)$(SLIT)center.HLM",52224,0,"$(P)$(SLIT)center.HLM")
#! Field("$(P)$(SLIT)center.LLM",52224,0,"$(P)$(SLIT)center.LLM")
#! Field("$(P)$(SLIT)center.OUT",16777215,1,"$(P)$(SLIT)center.OUT")
#! Link("$(P)$(SLIT)center.OUT","$(P)$(SLIT)center/OUT")
#! Field("$(P)$(SLIT)center.RDBL",16777215,0,"$(P)$(SLIT)center.RDBL")
#! Link("$(P)$(SLIT)center.RDBL","$(P)$(SLIT)tRev.D")
#! Field("$(P)$(SLIT)center.DINP",16750848,1,"$(P)$(SLIT)center.DINP")
#! Link("$(P)$(SLIT)center.DINP","$(P)$(SLIT)calcDone.VAL")
#! Field("$(P)$(SLIT)center.LOCK",65484,0,"$(P)$(SLIT)center.LOCK")
#! Connector("$(P)$(SLIT)center/OUT","$(P)$(SLIT)tFwd.D",1460,1200,16777215,"",0)
#! Record("$(P)$(SLIT)xnBPut",1100,782,0,0,"$(P)$(SLIT)xnBPut")
#! Field("$(P)$(SLIT)xnBPut.SDIS",16777215,0,"$(P)$(SLIT)xnBPut.SDIS")
#! Link("$(P)$(SLIT)xnBPut.SDIS","$(P)$(SLIT)xn.PACT")
#! Field("$(P)$(SLIT)xnBPut.OUT",16777215,0,"$(P)$(SLIT)xnBPut.OUT")
#! Link("$(P)$(SLIT)xnBPut.OUT","$(P)$(SLIT)xn.VAL")
#! Field("$(P)$(SLIT)xnBPut.VAL",16777215,1,"$(P)$(SLIT)xnBPut.VAL")
#! Record("$(P)$(SLIT)sizeBPut",1100,1062,0,0,"$(P)$(SLIT)sizeBPut")
#! Field("$(P)$(SLIT)sizeBPut.SDIS",16777215,0,"$(P)$(SLIT)sizeBPut.SDIS")
#! Link("$(P)$(SLIT)sizeBPut.SDIS","$(P)$(SLIT)size.PACT")
#! Field("$(P)$(SLIT)sizeBPut.OUT",16777215,0,"$(P)$(SLIT)sizeBPut.OUT")
#! Link("$(P)$(SLIT)sizeBPut.OUT","$(P)$(SLIT)size.VAL")
#! Field("$(P)$(SLIT)sizeBPut.VAL",16777215,1,"$(P)$(SLIT)sizeBPut.VAL")
#! Record("$(P)$(SLIT)centerBPut",1100,1342,0,0,"$(P)$(SLIT)centerBPut")
#! Field("$(P)$(SLIT)centerBPut.SDIS",16777215,0,"$(P)$(SLIT)centerBPut.SDIS")
#! Link("$(P)$(SLIT)centerBPut.SDIS","$(P)$(SLIT)center.PACT")
#! Field("$(P)$(SLIT)centerBPut.OUT",16777215,0,"$(P)$(SLIT)centerBPut.OUT")
#! Link("$(P)$(SLIT)centerBPut.OUT","$(P)$(SLIT)center.VAL")
#! Field("$(P)$(SLIT)centerBPut.VAL",16777215,1,"$(P)$(SLIT)centerBPut.VAL")
#! Record("$(P)$(SLIT)mXnPut",2200,1315,0,0,"$(P)$(SLIT)mXnPut")
#! Field("$(P)$(SLIT)mXnPut.VAL",16777215,0,"$(P)$(SLIT)mXnPut.VAL")
#! Field("$(P)$(SLIT)mXnPut.OUT",16777215,0,"$(P)$(SLIT)mXnPut.OUT")
#! Record("$(P)$(SLIT)mXpPut",2200,1095,0,0,"$(P)$(SLIT)mXpPut")
#! Field("$(P)$(SLIT)mXpPut.VAL",16777215,0,"$(P)$(SLIT)mXpPut.VAL")
#! Field("$(P)$(SLIT)mXpPut.OUT",16777215,0,"$(P)$(SLIT)mXpPut.OUT")
#! Record("$(P)$(SLIT)closeGate",2420,765,0,0,"$(P)$(SLIT)closeGate")
#! Field("$(P)$(SLIT)closeGate.DOL",16777215,0,"$(P)$(SLIT)closeGate.DOL")
#! Field("$(P)$(SLIT)closeGate.OUT",16777215,1,"$(P)$(SLIT)closeGate.OUT")
#! Link("$(P)$(SLIT)closeGate.OUT","$(P)$(SLIT)gate.VAL")
#! Field("$(P)$(SLIT)closeGate.SDIS",16777215,1,"$(P)$(SLIT)closeGate.SDIS")
#! Link("$(P)$(SLIT)closeGate.SDIS","$(P)$(SLIT)gate.VAL")
#! Visibility("$(P)$(SLIT)closeGate.DISV",1)
#! Record("$(P)$(SLIT)gate",2440,967,0,0,"$(P)$(SLIT)gate")
#! Field("$(P)$(SLIT)gate.VAL",16777215,1,"$(P)$(SLIT)gate.VAL")
#! Field("$(P)$(SLIT)gate.OUT",16777215,1,"$(P)$(SLIT)gate.OUT")
#! Link("$(P)$(SLIT)gate.OUT","$(P)$(SLIT)gate/OUT")
#! Connector("$(P)$(SLIT)gate/OUT","$(P)$(SLIT)isSoftMove.VAL",2700,1500,16777215,"",0)
#! Record("$(P)$(SLIT)gatePut",2160,935,0,0,"$(P)$(SLIT)gatePut")
#! Field("$(P)$(SLIT)gatePut.OUT",16777215,1,"$(P)$(SLIT)gatePut.OUT")
#! Link("$(P)$(SLIT)gatePut.OUT","$(P)$(SLIT)gate.VAL")
#! Field("$(P)$(SLIT)gatePut.VAL",16777215,0,"$(P)$(SLIT)gatePut.VAL")
#! Record("$(P)$(SLIT)mXn_nameCalc",2200,1435,0,0,"$(P)$(SLIT)mXn_nameCalc")
#! Field("$(P)$(SLIT)mXn_nameCalc.INAA",16777215,0,"$(P)$(SLIT)mXn_nameCalc.INAA")
#! Link("$(P)$(SLIT)mXn_nameCalc.INAA","$(P)$(SLIT)mXnPut.OUT")
#! Record("$(P)$(SLIT)mXp_nameCalc",2200,1215,0,0,"$(P)$(SLIT)mXp_nameCalc")
#! Field("$(P)$(SLIT)mXp_nameCalc.INAA",16777215,0,"$(P)$(SLIT)mXp_nameCalc.INAA")
#! Link("$(P)$(SLIT)mXp_nameCalc.INAA","$(P)$(SLIT)mXpPut.OUT")
#! Record("$(P)$(SLIT)tFwd",1540,414,0,0,"$(P)$(SLIT)tFwd")
#! Field("$(P)$(SLIT)tFwd.A",16777215,0,"$(P)$(SLIT)tFwd.A")
#! Field("$(P)$(SLIT)tFwd.B",16777215,0,"$(P)$(SLIT)tFwd.B")
#! Field("$(P)$(SLIT)tFwd.C",16777215,0,"$(P)$(SLIT)tFwd.C")
#! Field("$(P)$(SLIT)tFwd.D",16777215,0,"$(P)$(SLIT)tFwd.D")
#! Field("$(P)$(SLIT)tFwd.OUTE",16777215,1,"$(P)$(SLIT)tFwd.OUTE")
#! Link("$(P)$(SLIT)tFwd.OUTE","$(P)$(SLIT)gatePut.VAL")
#! Field("$(P)$(SLIT)tFwd.OUTF",16777215,1,"$(P)$(SLIT)tFwd.OUTF")
#! Link("$(P)$(SLIT)tFwd.OUTF","$(P)$(SLIT)tFwd/OUTF")
#! Field("$(P)$(SLIT)tFwd.G",16777215,1,"$(P)$(SLIT)tFwd.G")
#! Field("$(P)$(SLIT)tFwd.F",16777215,1,"$(P)$(SLIT)tFwd.F")
#! Field("$(P)$(SLIT)tFwd.OUTA",16777215,0,"$(P)$(SLIT)tFwd.OUTA")
#! Link("$(P)$(SLIT)tFwd.OUTA","$(P)$(SLIT)tFwd/OUTA")
#! Field("$(P)$(SLIT)tFwd.OUTB",16777215,0,"$(P)$(SLIT)tFwd.OUTB")
#! Link("$(P)$(SLIT)tFwd.OUTB","$(P)$(SLIT)tFwd/OUTB")
#! Field("$(P)$(SLIT)tFwd.OUTC",16777215,0,"$(P)$(SLIT)tFwd.OUTC")
#! Link("$(P)$(SLIT)tFwd.OUTC","$(P)$(SLIT)tFwd/OUTC")
#! Field("$(P)$(SLIT)tFwd.OUTD",16777215,0,"$(P)$(SLIT)tFwd.OUTD")
#! Link("$(P)$(SLIT)tFwd.OUTD","$(P)$(SLIT)tFwd/OUTD")
#! Connector("$(P)$(SLIT)tFwd/OUTF","$(P)$(SLIT)writeMotors.PROC",1820,1020,16777215,"",0)
#! Connector("$(P)$(SLIT)tFwd/OUTD","$(P)$(SLIT)centerBPut.VAL",1420,1250,16777215,"",0)
#! Connector("$(P)$(SLIT)tFwd/OUTC","$(P)$(SLIT)sizeBPut.VAL",1400,1100,16777215,"",0)
#! Connector("$(P)$(SLIT)tFwd/OUTB","$(P)$(SLIT)xnBPut.VAL",1400,950,16777215,"",0)
#! Connector("$(P)$(SLIT)tFwd/OUTA","$(P)$(SLIT)xpBPut.VAL",1420,800,16777215,"",0)
#! Record("$(P)$(SLIT)clearSoftMove",1340,1789,0,1,"$(P)$(SLIT)clearSoftMove")
#! Field("$(P)$(SLIT)clearSoftMove.PROC",16777215,1,"$(P)$(SLIT)clearSoftMove.PROC")
#! Field("$(P)$(SLIT)clearSoftMove.OUT",16777215,1,"$(P)$(SLIT)clearSoftMove.OUT")
#! Link("$(P)$(SLIT)clearSoftMove.OUT","$(P)$(SLIT)isSoftMove.VAL")
#! Record("$(P)$(SLIT)isSoftMove",1600,1767,0,1,"$(P)$(SLIT)isSoftMove")
#! Field("$(P)$(SLIT)isSoftMove.VAL",16777215,1,"$(P)$(SLIT)isSoftMove.VAL")
#! Field("$(P)$(SLIT)isSoftMove.OUTA",65484,0,"$(P)$(SLIT)isSoftMove.OUTA")
#! Link("$(P)$(SLIT)isSoftMove.OUTA","$(P)$(SLIT)isSoftMove/OUTA")
#! Field("$(P)$(SLIT)isSoftMove.OUTB",65484,0,"$(P)$(SLIT)isSoftMove.OUTB")
#! Link("$(P)$(SLIT)isSoftMove.OUTB","$(P)$(SLIT)isSoftMove/OUTB")
#! Field("$(P)$(SLIT)isSoftMove.OUTC",65484,0,"$(P)$(SLIT)isSoftMove.OUTC")
#! Link("$(P)$(SLIT)isSoftMove.OUTC","$(P)$(SLIT)isSoftMove/OUTC")
#! Field("$(P)$(SLIT)isSoftMove.OUTD",65484,0,"$(P)$(SLIT)isSoftMove.OUTD")
#! Link("$(P)$(SLIT)isSoftMove.OUTD","$(P)$(SLIT)isSoftMove/OUTD")
#! Connector("$(P)$(SLIT)isSoftMove/OUTD","$(P)$(SLIT)center.LOCK",720,1790,65484,"",0)
#! Connector("$(P)$(SLIT)isSoftMove/OUTC","$(P)$(SLIT)size.LOCK",720,1640,65484,"",0)
#! Connector("$(P)$(SLIT)isSoftMove/OUTB","$(P)$(SLIT)xn.LOCK",720,1490,65484,"",0)
#! Connector("$(P)$(SLIT)isSoftMove/OUTA","$(P)$(SLIT)xp.LOCK",720,1340,65484,"",0)
#! Record("$(P)$(SLIT)calcDone",1080,1639,0,1,"$(P)$(SLIT)calcDone")
#! Field("$(P)$(SLIT)calcDone.INPA",16777215,1,"$(P)$(SLIT)calcDone.INPA")
#! Link("$(P)$(SLIT)calcDone.INPA","$(P)$(SLIT)gate.VAL")
#! Field("$(P)$(SLIT)calcDone.INPB",16777215,0,"$(P)$(SLIT)calcDone.INPB")
#! Link("$(P)$(SLIT)calcDone.INPB","$(P)$(SLIT)calcDone/INPB")
#! Field("$(P)$(SLIT)calcDone.INPC",16777215,0,"$(P)$(SLIT)calcDone.INPC")
#! Link("$(P)$(SLIT)calcDone.INPC","$(P)$(SLIT)calcDone/INPC")
#! Field("$(P)$(SLIT)calcDone.VAL",16750848,1,"$(P)$(SLIT)calcDone.VAL")
#! Field("$(P)$(SLIT)calcDone.OUT",16777215,1,"$(P)$(SLIT)calcDone.OUT")
#! Link("$(P)$(SLIT)calcDone.OUT","$(P)$(SLIT)clearSoftMove.PROC")
#! Connector("$(P)$(SLIT)calcDone/INPC",null,1020,1820,16777215,"",3)
#! Connector("$(P)$(SLIT)calcDone/INPB",null,1020,1800,16777215,"",3)
#! Visibility("$(P)$(SLIT)calcDone.OOPT",1)
#! Record("$(P)$(SLIT)tRev",420,869,0,0,"$(P)$(SLIT)tRev")
#! Field("$(P)$(SLIT)tRev.INPA",16777215,0,"$(P)$(SLIT)tRev.INPA")
#! Link("$(P)$(SLIT)tRev.INPA","$(P)$(SLIT)tRev/INPA")
#! Field("$(P)$(SLIT)tRev.INPB",16777215,0,"$(P)$(SLIT)tRev.INPB")
#! Link("$(P)$(SLIT)tRev.INPB","$(P)$(SLIT)tRev/INPB")
#! Field("$(P)$(SLIT)tRev.A",16777215,1,"$(P)$(SLIT)tRev.A")
#! Field("$(P)$(SLIT)tRev.B",16777215,1,"$(P)$(SLIT)tRev.B")
#! Field("$(P)$(SLIT)tRev.C",16777215,1,"$(P)$(SLIT)tRev.C")
#! Field("$(P)$(SLIT)tRev.D",16777215,1,"$(P)$(SLIT)tRev.D")
#! Connector("$(P)$(SLIT)tRev/INPB",null,340,1220,16777215,"",3)
#! Connector("$(P)$(SLIT)tRev/INPA",null,340,1200,16777215,"",3)
#! Record("$(P)$(SLIT)tLimits",440,110,0,0,"$(P)$(SLIT)tLimits")
#! Field("$(P)$(SLIT)tLimits.INPA",16777215,0,"$(P)$(SLIT)tLimits.INPA")
#! Link("$(P)$(SLIT)tLimits.INPA","$(P)$(SLIT)tLimits/INPA")
#! Field("$(P)$(SLIT)tLimits.INPB",16777215,0,"$(P)$(SLIT)tLimits.INPB")
#! Link("$(P)$(SLIT)tLimits.INPB","$(P)$(SLIT)tLimits/INPB")
#! Field("$(P)$(SLIT)tLimits.INPC",16777215,0,"$(P)$(SLIT)tLimits.INPC")
#! Link("$(P)$(SLIT)tLimits.INPC","$(P)$(SLIT)tLimits/INPC")
#! Field("$(P)$(SLIT)tLimits.INPD",16777215,0,"$(P)$(SLIT)tLimits.INPD")
#! Link("$(P)$(SLIT)tLimits.INPD","$(P)$(SLIT)tLimits/INPD")
#! Field("$(P)$(SLIT)tLimits.OUTA",52224,1,"$(P)$(SLIT)tLimits.OUTA")
#! Link("$(P)$(SLIT)tLimits.OUTA","$(P)$(SLIT)tLimits/OUTA")
#! Field("$(P)$(SLIT)tLimits.OUTB",52224,1,"$(P)$(SLIT)tLimits.OUTB")
#! Link("$(P)$(SLIT)tLimits.OUTB","$(P)$(SLIT)tLimits/OUTB")
#! Field("$(P)$(SLIT)tLimits.OUTC",52224,1,"$(P)$(SLIT)tLimits.OUTC")
#! Link("$(P)$(SLIT)tLimits.OUTC","$(P)$(SLIT)tLimits/OUTC")
#! Field("$(P)$(SLIT)tLimits.OUTD",52224,1,"$(P)$(SLIT)tLimits.OUTD")
#! Link("$(P)$(SLIT)tLimits.OUTD","$(P)$(SLIT)tLimits/OUTD")
#! Field("$(P)$(SLIT)tLimits.OUTE",52224,1,"$(P)$(SLIT)tLimits.OUTE")
#! Link("$(P)$(SLIT)tLimits.OUTE","$(P)$(SLIT)tLimits/OUTE")
#! Field("$(P)$(SLIT)tLimits.OUTF",52224,1,"$(P)$(SLIT)tLimits.OUTF")
#! Link("$(P)$(SLIT)tLimits.OUTF","$(P)$(SLIT)tLimits/OUTF")
#! Field("$(P)$(SLIT)tLimits.OUTG",52224,1,"$(P)$(SLIT)tLimits.OUTG")
#! Link("$(P)$(SLIT)tLimits.OUTG","$(P)$(SLIT)tLimits/OUTG")
#! Field("$(P)$(SLIT)tLimits.OUTH",52224,1,"$(P)$(SLIT)tLimits.OUTH")
#! Link("$(P)$(SLIT)tLimits.OUTH","$(P)$(SLIT)tLimits/OUTH")
#! Connector("$(P)$(SLIT)tLimits/INPD",null,360,660,16777215,"",3)
#! Connector("$(P)$(SLIT)tLimits/INPC",null,360,640,16777215,"",3)
#! Connector("$(P)$(SLIT)tLimits/INPB",null,360,620,16777215,"",3)
#! Connector("$(P)$(SLIT)tLimits/INPA",null,360,600,16777215,"",3)
#! Connector("$(P)$(SLIT)tLimits/OUTH","$(P)$(SLIT)center.HLM",760,1080,52224,"",0)
#! Connector("$(P)$(SLIT)tLimits/OUTG","$(P)$(SLIT)center.LLM",760,1080,52224,"",0)
#! Connector("$(P)$(SLIT)tLimits/OUTF","$(P)$(SLIT)size.HLM",760,920,52224,"",0)
#! Connector("$(P)$(SLIT)tLimits/OUTE","$(P)$(SLIT)size.LLM",760,920,52224,"",0)
#! Connector("$(P)$(SLIT)tLimits/OUTD","$(P)$(SLIT)xn.HLM",760,760,52224,"",0)
#! Connector("$(P)$(SLIT)tLimits/OUTC","$(P)$(SLIT)xn.LLM",760,760,52224,"",0)
#! Connector("$(P)$(SLIT)tLimits/OUTB","$(P)$(SLIT)xp.HLM",760,600,52224,"",0)
#! Connector("$(P)$(SLIT)tLimits/OUTA","$(P)$(SLIT)xp.LLM",760,600,52224,"",0)
#! Record("$(P)$(SLIT)writeMotors",1880,1013,0,1,"$(P)$(SLIT)writeMotors")
#! Field("$(P)$(SLIT)writeMotors.PROC",16777215,0,"$(P)$(SLIT)writeMotors.PROC")
#! Field("$(P)$(SLIT)writeMotors.DOL1",16777215,0,"$(P)$(SLIT)writeMotors.DOL1")
#! Link("$(P)$(SLIT)writeMotors.DOL1","$(P)$(SLIT)tFwd.F")
#! Field("$(P)$(SLIT)writeMotors.LNK1",16777215,1,"$(P)$(SLIT)writeMotors.LNK1")
#! Link("$(P)$(SLIT)writeMotors.LNK1","$(P)$(SLIT)mXpPut.VAL")
#! Field("$(P)$(SLIT)writeMotors.DOL2",16777215,0,"$(P)$(SLIT)writeMotors.DOL2")
#! Link("$(P)$(SLIT)writeMotors.DOL2","$(P)$(SLIT)tFwd.G")
#! Field("$(P)$(SLIT)writeMotors.LNK2",16777215,1,"$(P)$(SLIT)writeMotors.LNK2")
#! Link("$(P)$(SLIT)writeMotors.LNK2","$(P)$(SLIT)writeMotors/LNK2")
#! Connector("$(P)$(SLIT)writeMotors/LNK2","$(P)$(SLIT)mXnPut.VAL",2120,1320,16777215,"",0)
#! Visibility("$(P)$(SLIT)writeMotors.DLY1",1)
