Upload files to "ThorLabs_ELL_motors/IOC"
This commit is contained in:
@@ -0,0 +1,520 @@
|
||||
|
||||
|
||||
#-------- G E T T H E V E R S I O N / I D N / D E S C ---------------
|
||||
|
||||
record(stringin, "$(SYSTEM):NAME") {
|
||||
field(DESC, "$(DESC)")
|
||||
field(VAL, "$(DESC)")
|
||||
}
|
||||
|
||||
record(stringin, "$(SYSTEM):UNIT") {
|
||||
field(DESC, "$(DESC)")
|
||||
field(VAL, "$(UNIT)")
|
||||
}
|
||||
# read the IDN from the device
|
||||
record(stringin, "$(SYSTEM):GET_IDN") {
|
||||
field(DESC, "$(DESC)")
|
||||
field(DTYP, "stream")
|
||||
field(INP, "@$(SDNC) GET_ID($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
# model number
|
||||
record(ai, "$(SYSTEM):ID_MODEL") {
|
||||
field(DESC, "Model number")
|
||||
}
|
||||
# serial number
|
||||
record(stringin, "$(SYSTEM):ID_SN") {
|
||||
field(DESC, "Serial number")
|
||||
}
|
||||
# year and fw
|
||||
record(stringin, "$(SYSTEM):ID_YEARFW") {
|
||||
field(DESC, "Year and FW in one")
|
||||
}
|
||||
# year and fw
|
||||
record(ai, "$(SYSTEM):ID_TRAVEL") {
|
||||
field(DESC, "Travel range")
|
||||
}
|
||||
# pulses per
|
||||
record(ai, "$(SYSTEM):ID_PULSEPP") {
|
||||
field(DESC, "pulse per position")
|
||||
}
|
||||
|
||||
|
||||
#---- S T A T U S
|
||||
record(ai, "$(SYSTEM):GET_STATUS") {
|
||||
field(SCAN, "Passive")
|
||||
field(INP, "@$(SDNC) GET_STATUS($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(mbbi, "$(SYSTEM):STATUS"){ #
|
||||
field(DESC, "scan range")
|
||||
field(SCAN, "Passive")
|
||||
field(NOBT, "14")
|
||||
field(ZRVL, "0")
|
||||
field(ONVL, "1")
|
||||
field(TWVL, "2")
|
||||
field(THVL, "3")
|
||||
field(FRVL, "4")
|
||||
field(FVVL, "5")
|
||||
field(SXVL, "6")
|
||||
field(SVVL, "7")
|
||||
field(EIVL, "8")
|
||||
field(NIVL, "9")
|
||||
field(TEVL, "10")
|
||||
field(ELVL, "11")
|
||||
field(TVVL, "12")
|
||||
field(TTVL, "13")
|
||||
|
||||
field(ZRST, "OK - No Error")
|
||||
field(ONST, "Comms time out")
|
||||
field(TWST, "Mechanical time out")
|
||||
field(THST, "Command error")
|
||||
field(FRST, "Value out of range")
|
||||
field(FVST, "Module isolated")
|
||||
field(SXST, "Module out of isolation")
|
||||
field(SVST, "Init error")
|
||||
|
||||
field(EIST, "Thermal error")
|
||||
field(NIST, "Busy")
|
||||
field(TEST, "Sensor error")
|
||||
field(ELST, "Motor error")
|
||||
field(TVST, "Out of range")
|
||||
field(TTST, "Over current error")
|
||||
|
||||
}
|
||||
|
||||
#---- C H A N G E A D D R E S S
|
||||
record(ai, "$(SYSTEM):NEW_ADDRESS") { #hold here so that isn't set automatically
|
||||
field(DESC, "address to set")
|
||||
}
|
||||
|
||||
record(ai, "$(SYSTEM):CHANGE_ADDRESS") {
|
||||
field(DESC, "change unit address")
|
||||
field(INP, "@$(SDNC) CHANGE_ADDR($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
|
||||
#---- M O T O R I N F O --- M O T O R 1
|
||||
record(ai, "$(SYSTEM):M1_GET_INFO") {
|
||||
field(SCAN, "Passive")
|
||||
field(INP, "@$(SDNC) GET_INFO_M1($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ai, "$(SYSTEM):M1_LOOP_ON") {
|
||||
field(DESC, "Loop ON")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M1_WORKING") {
|
||||
field(DESC, "Motor working")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M1_CURRENT") {
|
||||
field(DESC, "Motor current")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M1_RAMP_UP") {
|
||||
field(DESC, "ramp up")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M1_RAMP_DOWN") {
|
||||
field(DESC, "ramp down")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M1_FWD_PERIOD") {
|
||||
field(DESC, "forward period")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M1_BWD_PERIOD") {
|
||||
field(DESC, "backward period")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):M1_SET_FWD_PERIOD") {
|
||||
field(DESC, "set forward period")
|
||||
field(SCAN, "Passive")
|
||||
field(OUT, "@$(SDNC) SET_FWD_PER_M1($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):M1_SET_BWD_PERIOD") {
|
||||
field(DESC, "set backward period")
|
||||
field(SCAN, "Passive")
|
||||
field(OUT, "@$(SDNC) SET_BWD_PER_M1($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):M1_SEARCH_FREQ") {
|
||||
field(DESC, "search freq")
|
||||
field(SCAN, "Passive")
|
||||
field(OUT, "@$(SDNC) SEARCH_FREQ_M1($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):M1_SCAN_CURRENT") {
|
||||
field(DESC, "scan current curve")
|
||||
field(SCAN, "Passive")
|
||||
field(OUT, "@$(SDNC) SCAN_CURR_M1($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
|
||||
|
||||
#---- M O T O R I N F O --- M O T O R 2
|
||||
record(ai, "$(SYSTEM):M2_GET_INFO") {
|
||||
field(SCAN, "Passive")
|
||||
field(INP, "@$(SDNC) GET_INFO_M2($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ai, "$(SYSTEM):M2_LOOP_ON") {
|
||||
field(DESC, "Loop ON")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M2_WORKING") {
|
||||
field(DESC, "Motor working")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M2_CURRENT") {
|
||||
field(DESC, "Motor current")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M2_RAMP_UP") {
|
||||
field(DESC, "ramp up")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M2_RAMP_DOWN") {
|
||||
field(DESC, "ramp down")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M2_FWD_PERIOD") {
|
||||
field(DESC, "forward period")
|
||||
}
|
||||
record(ai, "$(SYSTEM):M2_BWD_PERIOD") {
|
||||
field(DESC, "backward period")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):M2_SET_FWD_PERIOD") {
|
||||
field(DESC, "set forward period")
|
||||
field(SCAN, "Passive")
|
||||
field(OUT, "@$(SDNC) SET_FWD_PER_M2($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):M2_SET_BWD_PERIOD") {
|
||||
field(DESC, "set backward period")
|
||||
field(SCAN, "Passive")
|
||||
field(OUT, "@$(SDNC) SET_BWD_PER_M2($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):M2_SEARCH_FREQ") {
|
||||
field(DESC, "search freq")
|
||||
field(SCAN, "Passive")
|
||||
field(OUT, "@$(SDNC) SEARCH_FREQ_M2($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):M2_SCAN_CURRENT") {
|
||||
field(DESC, "scan current curve")
|
||||
field(SCAN, "Passive")
|
||||
field(OUT, "@$(SDNC) SCAN_CURR_M2($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#---- H O M I N G - try and use same names as smaract
|
||||
record(ao, "$(SYSTEM):FRM_BACK") {
|
||||
field(DESC, "Home backwards")
|
||||
field(OUT, "@$(SDNC) HOME_BWD($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):FRM_FORW") {
|
||||
field(DESC, "Home forwards")
|
||||
field(OUT, "@$(SDNC) HOME_FWD($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
|
||||
record(ao, "$(SYSTEM):AUTO_HOME_ON") {
|
||||
field(DESC, "Home on startup")
|
||||
field(OUT, "@$(SDNC) AUTO_HOME_ON($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):AUTO_HOME_OFF") {
|
||||
field(DESC, "Home on startup")
|
||||
field(OUT, "@$(SDNC) AUTO_HOME_OFF($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
#---- M O V I N G
|
||||
|
||||
#---- D R I V E - A B S
|
||||
|
||||
|
||||
record(ao, "$(SYSTEM):DRIVE") {
|
||||
field(DESC, "move absolute")
|
||||
field(FLNK, "$(SYSTEM):DRIVE_LIM_CALC")
|
||||
field(PREC, "2")
|
||||
#field(FLNK, "$(SYSTEM):POS_2_COMP")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):HLM") {
|
||||
field(DESC, "High limit")
|
||||
field(VAL, "$(HLM=0)")
|
||||
field(PREC, "2")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):LLM") {
|
||||
field(DESC, "low limit")
|
||||
field(VAL, "$(LLM=0)")
|
||||
field(PREC, "2")
|
||||
}
|
||||
|
||||
|
||||
record(calcout, "$(SYSTEM):DRIVE_LIM_CALC"){ #4byte hex =
|
||||
field(DESC, "check limits")
|
||||
field(INPA, "$(SYSTEM):DRIVE") #-m...+m
|
||||
field(INPB, "$(SYSTEM):LLM") #half range
|
||||
field(INPC, "$(SYSTEM):HLM") #2^32 = 4294967296
|
||||
field(INPD, "$(SYSTEM):MRES") #deg to steps conv
|
||||
field(CALC, "B=C?A/D:A>C?C/D:A<B?B/D:A/D") #divide by MRES
|
||||
field(FLNK, "$(SYSTEM):POS_2_COMP")
|
||||
field(PREC, "2")
|
||||
}
|
||||
|
||||
#Bits Unsigned value Signed value
|
||||
#(Two's complement)
|
||||
#0000 0000 0 0
|
||||
#0000 0001 1 1
|
||||
#0000 0010 2 2
|
||||
#0111 1110 126 126
|
||||
#0111 1111 127 127
|
||||
#1000 0000 128 −128
|
||||
#1000 0001 129 −127
|
||||
#1000 0010 130 −126
|
||||
#1111 1110 254 −2
|
||||
#1111 1111 255 −1
|
||||
|
||||
record(calcout, "$(SYSTEM):POS_2_COMP"){ #4byte hex =
|
||||
field(DESC, "position to 2s compliment")
|
||||
field(INPA, "$(SYSTEM):DRIVE_LIM_CALC") #-m...+m
|
||||
field(INPB, "2147483648") #half range
|
||||
field(INPC, "4294967296") #2^32 = 4294967296
|
||||
field(CALC, "A>=0?A:C+A")
|
||||
field(OUT, "$(SYSTEM):ABS_POS_OUT PP")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):ABS_POS_OUT") {
|
||||
field(DESC, "send out abs pos")
|
||||
field(OUT, "@$(SDNC) MOVE_ABS($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
#---- D R I V E - T W E A K /// J O G
|
||||
|
||||
record(ai, "$(SYSTEM):TWV") {
|
||||
field(DESC, "tweak distance")
|
||||
field(FLNK, "$(SYSTEM):TWV_2_COMP")
|
||||
field(PREC, "2")
|
||||
field(VAL, "1")
|
||||
}
|
||||
|
||||
record(calcout, "$(SYSTEM):TWV_2_COMP"){ #4byte hex =
|
||||
field(DESC, "position to 2s compliment")
|
||||
field(INPA, "$(SYSTEM):TWV") #-m...+m
|
||||
field(INPB, "2147483648") #half range
|
||||
field(INPC, "4294967296") #2^32 = 4294967296
|
||||
field(INPD, "$(MRES)") #deg to steps conv
|
||||
field(CALC, "A>=0?A/D:0") #limit to pos... else field(CALC, "A>=0?A:C+A")
|
||||
field(OUT, "$(SYSTEM):TWV_POS_OUT PP")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):TWV_POS_OUT") {
|
||||
field(DESC, "send out tweak pos")
|
||||
field(OUT, "@$(SDNC) SET_JOG($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):GET_JOG") {
|
||||
field(DESC, "tweak forward")
|
||||
field(OUT, "@$(SDNC) GET_JOG($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):TWV_RB") {
|
||||
field(DESC, "readback of tweak value")
|
||||
field(PREC, "2")
|
||||
}
|
||||
|
||||
#--- T W E A K F W D
|
||||
record(calcout, "$(SYSTEM):TWF"){ #4byte hex =
|
||||
field(DESC, "tweak forward")
|
||||
field(INPA, "$(SYSTEM):MOTRBV") #-m...+m
|
||||
field(INPD, "$(SYSTEM):TWV")
|
||||
field(OOPT, "When Non-zero")
|
||||
field(CALC, "A+D") #limit to pos... else field(CALC, "A>=0?A:C+A")
|
||||
field(OUT, "$(SYSTEM):DRIVE PP")
|
||||
field(PREC, "2")
|
||||
}
|
||||
|
||||
record(calcout, "$(SYSTEM):TWR"){ #4byte hex =
|
||||
field(DESC, "tweak forward")
|
||||
field(INPA, "$(SYSTEM):MOTRBV") #-m...+m
|
||||
field(INPD, "$(SYSTEM):TWV")
|
||||
field(OOPT, "When Non-zero")
|
||||
field(CALC, "A-D") #limit to pos... else field(CALC, "A>=0?A:C+A")
|
||||
field(OUT, "$(SYSTEM):DRIVE PP")
|
||||
field(PREC, "2")
|
||||
}
|
||||
|
||||
#the prober jog cannot cope with going negative... therefore will use abs move instead
|
||||
#record(calcout, "$(SYSTEM):TWF"){ #4byte hex =
|
||||
# field(DESC, "tweak forward")
|
||||
# field(INPA, "$(SYSTEM):MOTRBV") #-m...+m
|
||||
# field(INPB, "$(SYSTEM):LLM") #half range
|
||||
# field(INPC, "$(SYSTEM):HLM") #2^32 = 4294967296
|
||||
# field(INPD, "$(SYSTEM):TWV_RB")
|
||||
# field(OOPT, "When Non-zero")
|
||||
# field(CALC, "B=C?1:(A+D)>C?0:1") #limit to pos... else field(CALC, "A>=0?A:C+A")
|
||||
# field(OUT, "$(SYSTEM):TWF_GO.PROC PP")
|
||||
#}
|
||||
|
||||
#record(ao, "$(SYSTEM):TWF_GO") {
|
||||
# field(DESC, "tweak forward")
|
||||
# field(OUT, "@$(SDNC) JOG_FWD($(UNIT),$(SYSTEM)) $(IP)")
|
||||
# field(DTYP, "stream")
|
||||
#}
|
||||
|
||||
#--- T W E A K B W D
|
||||
#record(calcout, "$(SYSTEM):TWR"){ #4byte hex =
|
||||
# field(DESC, "tweak forward")
|
||||
# field(INPA, "$(SYSTEM):MOTRBV") #-m...+m
|
||||
# field(INPB, "$(SYSTEM):LLM") #half range
|
||||
# field(INPC, "$(SYSTEM):HLM") #2^32 = 4294967296
|
||||
# field(INPD, "$(SYSTEM):TWV_RB")
|
||||
# field(OOPT, "When Non-zero")
|
||||
# field(CALC, "B=C?1:(A-D)<B?0:1") #limit to pos... else field(CALC, "A>=0?A:C+A")
|
||||
# field(OUT, "$(SYSTEM):TWR_GO.PROC PP")
|
||||
#}
|
||||
|
||||
#record(ao, "$(SYSTEM):TWR_GO") {
|
||||
# field(DESC, "tweak forward")
|
||||
# field(OUT, "@$(SDNC) JOG_BWD($(UNIT),$(SYSTEM)) $(IP)")
|
||||
# field(DTYP, "stream")
|
||||
#}
|
||||
|
||||
#---- V E L O C I T Y
|
||||
|
||||
record(ao, "$(SYSTEM):SET_VEL") {
|
||||
field(DESC, "set velocity")
|
||||
field(OUT, "@$(SDNC) SET_VEL($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
field(FLNK, "$(SYSTEM):VEL_RB")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):VEL_RB") {
|
||||
field(DESC, "readback of velocity value")
|
||||
field(OUT, "@$(SDNC) GET_VEL($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
#---- S T O P
|
||||
|
||||
record(ao, "$(SYSTEM):STOP") {
|
||||
field(DESC, "Stop movement")
|
||||
field(OUT, "@$(SDNC) STOP($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
record(ao, "$(SYSTEM):GET_POS") {
|
||||
field(DESC, "Read current Pos")
|
||||
field(SCAN, "5 second")
|
||||
field(OUT, "@$(SDNC) GET_POS($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
field(FLNK, "$(SYSTEM):GET_STATUS")
|
||||
}
|
||||
|
||||
record(ai, "$(SYSTEM):POS") { #Raw pos
|
||||
field(DESC, "raw pos - convert with 2s compliment")
|
||||
}
|
||||
|
||||
|
||||
record(ao, "$(SYSTEM):OPTIMIZE") {
|
||||
field(DESC, "optimize motors")
|
||||
field(OUT, "@$(SDNC) OPTIMIZE($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
record(ao, "$(SYSTEM):CLEAN") {
|
||||
field(DESC, "run cleaning seq")
|
||||
field(OUT, "@$(SDNC) CLEAN_MOTOR($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
record(ao, "$(SYSTEM):MRES") {
|
||||
field(DESC, "calibration")
|
||||
field(VAL, "$(MRES=0.002511161)")
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
record(calcout, "$(SYSTEM):MOTRBV"){ #4byte hex =
|
||||
field(DESC, "2s compliment to pos")
|
||||
field(INPA, "$(SYSTEM):POS CP") #
|
||||
field(INPB, "2147483648") #half range
|
||||
field(INPC, "4294967296") #2^32 = 4294967296
|
||||
field(INPD, "$(SYSTEM):MRES") #deg to steps conv
|
||||
field(CALC, "A<B?A*D:(A-C)*D")
|
||||
field(EGU, "$(EGU)")
|
||||
field(PREC, "2")
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
record(stringout, "$(SYSTEM):SEND_STRING") {
|
||||
field(DESC, "send a string for diags")
|
||||
field(OUT, "@$(SDNC) SEND_STRING($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
|
||||
record(stringin, "$(SYSTEM):REPLY") {
|
||||
field(DESC, "reply holder for send a string")
|
||||
|
||||
}
|
||||
|
||||
|
||||
record(stringout, "$(SYSTEM):SEND_STRING2") {
|
||||
field(DESC, "send a string no unit")
|
||||
field(OUT, "@$(SDNC) SEND_STRING2($(UNIT),$(SYSTEM)) $(IP)")
|
||||
field(DTYP, "stream")
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
#
|
||||
# Commands to communicate with
|
||||
#
|
||||
# ThorLabs EL motors
|
||||
#
|
||||
# 9600 baud 8N1 XT-nano username:admin pw:XT (or xt?)
|
||||
|
||||
#08.02.2024 11:12:09 - Tx: 0in
|
||||
#08.02.2024 11:12:09 - Rx: 0IN0E1140002520241801016800023000 0IN 0E 11400025 2024 18 01 0168 00023000
|
||||
|
||||
|
||||
|
||||
ReplyTimeout = 500;
|
||||
ReadTimeout = 400;
|
||||
WriteTimeout = 400;
|
||||
#Separator = "@";
|
||||
#Terminator = CR LF;
|
||||
InTerminator = CR LF;
|
||||
OutTerminator= CR LF;
|
||||
#ExtraInput = Ignore;
|
||||
|
||||
|
||||
GET_ID {out "\$1in";in "\$1IN%(\$2:ID_MODEL)2X%(\$2:ID_SN)8s%(\$2:ID_YEARFW)8s%(\$2:ID_TRAVEL)4X%(\$2:ID_PULSEPP)8X"} #0IN 0E 11400025 2024 18 01 0168 00023000
|
||||
|
||||
GET_STATUS {out "\$1gs";in "\$1GS%(\$2:STATUS)2X"} #0x0..0x... error code 0=OK
|
||||
|
||||
SAVE_USER_DATA {out "\$1us";in "\$1GS%(\$2:STATUS)2X"} #save parameters - returns status
|
||||
|
||||
CHANGE_ADDR {out "\$1ca%(\$2:NEW_ADDRESS)1X";in "\$1GS%(\$2:STATUS)2X"} #change the address [0..F] - returns status
|
||||
|
||||
|
||||
|
||||
GET_INFO_M1 {out "\$1i1";in "\$1I1%(\$2:M1_LOOP_ON)1X%(\$2:M1_WORKING)1X%(\$2:M1_CURRENT)4X%(\$2:M1_RAMP_UP)4X%(\$2:M1_RAMP_DOWN)4X%(\$2:M1_FWD_PERIOD)4X%(\$2:M1_BWD_PERIOD)4X"} #0I1 1 0 0000 FFFF FFFF 00BB 0090
|
||||
|
||||
SET_FWD_PER_M1 {out "\$1f1%4X";in "\$1GS%(\$2:STATUS)2X"} #set FWD period - motor 1
|
||||
|
||||
SET_BWD_PER_M1 {out "\$1b1%4X";in "\$1GS%(\$2:STATUS)2X"} #set BWD period - motor 1
|
||||
|
||||
SEARCH_FREQ_M1 {out "\$1s1";in "\$1GS%(\$2:STATUS)2X"} #search frequencies - for ELL14,17,18 and 20 devices
|
||||
|
||||
SCAN_CURR_M1 {out "\$1c1";in "\$1GS%(\$2:STATUS)2X"} #scan current curve
|
||||
|
||||
|
||||
|
||||
GET_INFO_M2 {out "\$1i2";in "\$1I2%(\$2:M2_LOOP_ON)1X%(\$2:M2_WORKING)1X%(\$2:M2_CURRENT)4X%(\$2:M2_RAMP_UP)4X%(\$2:M2_RAMP_DOWN)4X%(\$2:M2_FWD_PERIOD)4X%(\$2:M2_BWD_PERIOD)4X"} #0I1 1 0 0000 FFFF FFFF 00BB 0090
|
||||
|
||||
SET_FWD_PER_M2 {out "\$1f2%4X";in "\$1GS%(\$2:STATUS)2X"} #set FWD period - motor 2
|
||||
|
||||
SET_BWD_PER_M2 {out "\$1b2%4X";in "\$1GS%(\$2:STATUS)2X"} #set BWD period - motor 2
|
||||
|
||||
SEARCH_FREQ_M2 {out "\$1s2";in "\$1GS%(\$2:STATUS)2X"} #search frequencies - for ELL14,17,18 and 20 devices
|
||||
|
||||
SCAN_CURR_M2 {out "\$1c2";in "\$1GS%(\$2:STATUS)2X"} #scan current curve
|
||||
|
||||
|
||||
|
||||
HOME_FWD {out "\$1ho0";in "\$1PO%(\$2:POS)8X"; @mismatch {in "\$1GS%(\$2:STATUS)2X"}} #2's compliment
|
||||
HOME_BWD {out "\$1ho1";in "\$1PO%(\$2:POS)8X"; @mismatch {in "\$1GS%(\$2:STATUS)2X"}} #2's compliment
|
||||
|
||||
AUTO_HOME_ON {out "\$1ah1";in "\$1GS%(\$2:STATUS)2X"} #auto home at start up
|
||||
AUTO_HOME_OFF {out "\$1ah0";in "\$1GS%(\$2:STATUS)2X"} #auto home at start up
|
||||
|
||||
|
||||
MOVE_ABS {out "\$1ma%08X";in "\$1PO%(\$2:POS)8X"; @mismatch {in "\$1GS%(\$2:STATUS)2X"}} #set pos... 2's compliment
|
||||
MOVE_REL {out "\$1mr%08X";in "\$1PO%(\$2:POS)8X"; @mismatch {in "\$1GS%(\$2:STATUS)2X"}}
|
||||
|
||||
|
||||
SET_VEL {out "\$1sv%02X";in "\$1GS%(\$2:STATUS)2X"} #velocity \$1GV%(\$2:VEL_RB)8X
|
||||
GET_VEL {out "\$1gv"; in "\$1GV%(\$2:VEL_RB)2X"}
|
||||
|
||||
SET_JOG {out "\$1sj%08X";in "\$1GS%(\$2:STATUS)2X"} #Jog distance \$1GJ%(\$2:TWV_RB)8X
|
||||
JOG_FWD {out "\$1fw"; in "\$1PO%(\$2:POS)8X"; @mismatch {in "\$1GS%(\$2:STATUS)2X"}} #Jog +
|
||||
JOG_BWD {out "\$1bw"; in "\$1PO%(\$2:POS)8X"; @mismatch {in "\$1GS%(\$2:STATUS)2X"}} #Jog -
|
||||
GET_JOG {out "\$1gj"; in "\$1GJ%(\$2:TWV_RB)8X"}
|
||||
|
||||
STOP {out "\$1st";in "\$1GS%(\$2:STATUS)2X"} #STOP!
|
||||
|
||||
GET_POS {out "\$1gp";in "\$1PO%(\$2:POS)8X"; @mismatch {in "\$1GS%(\$2:STATUS)2X"}} #Jog -
|
||||
|
||||
OPTIMIZE {out "\$1om";in "\$1GS%(\$2:STATUS)2X"} #optimize motors
|
||||
|
||||
CLEAN_MOTOR {out "\$1cm";in "\$1GS%(\$2:STATUS)2X"} #optimize motors
|
||||
|
||||
SEND_STRING {out "\$1%s";in "%(\$2:REPLY)s"} #send a string
|
||||
|
||||
SEND_STRING2 {out "%s";in "%(\$2:REPLY)s"}
|
||||
|
||||
|
||||
#Bits Unsigned value Signed value
|
||||
#(Two's complement)
|
||||
#0000 0000 0 0
|
||||
#0000 0001 1 1
|
||||
#0000 0010 2 2
|
||||
#0111 1110 126 126
|
||||
#0111 1111 127 127
|
||||
#1000 0000 128 −128
|
||||
#1000 0001 129 −127
|
||||
#1000 0010 130 −126
|
||||
#1111 1110 254 −2
|
||||
#1111 1111 255 −1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
|
||||
|
||||
#caqtdm -macro C=SLAAR1-LMOT-ELL1,A="" SLG-L-ELL-BASIC-TEMPLATE.ui&
|
||||
#caqtdm -macro C=SLAAR1-LMOT-ELL2,A="" SLG-L-ELL-BASIC-TEMPLATE.ui&
|
||||
|
||||
#SPR = Steps/rev.... For ELL14 then calibration is 143360 steps/rev => MRES=143360/360 => 0.002511161
|
||||
|
||||
#SDNC Command file to use
|
||||
#IP IP address to use NB. one IP address can have upto 16 motors [0..F]
|
||||
#UNIT Unit address for this stage [0..F]
|
||||
#SYSTEM PV base name
|
||||
#Desc Description to show on Panel
|
||||
#EGU Units
|
||||
#MRES Calipration steps to EGU
|
||||
#LLM HLM Limits (0,0 to ignore, but rotator has built in -360 to 360 deg range)
|
||||
|
||||
file ELL_MOTOR.template {
|
||||
{ SDNC = "ELL_cmd",
|
||||
IP = "ELL1",
|
||||
UNIT = "1",
|
||||
SYSTEM = "SLAAT-LMOT-ELL1",
|
||||
DESC = "ThorLabs WavePlate",
|
||||
EGU = "Deg",
|
||||
MRES = 0.002511161
|
||||
LLM = -360
|
||||
HLM = 360
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#file ELL_MOTOR.template {
|
||||
# { SDNC = "ELL_cmd",
|
||||
# IP = "ELL1",
|
||||
# UNIT = "1",
|
||||
# SYSTEM = "SLAAR21-LMOT-ELL2",
|
||||
# DESC = "ThorLabs Rot Plate",
|
||||
# EGU = "Deg",
|
||||
# MRES = 0.002511161
|
||||
# LLM = -360
|
||||
# HLM = 360
|
||||
# }
|
||||
#}
|
||||
@@ -0,0 +1,11 @@
|
||||
# The following lines were generated by "ioc install"
|
||||
# Generated at: 2024-03-05 16:48:36.821777
|
||||
|
||||
epicsEnvSet IOC SLAAT-CPCL-LELL01
|
||||
epicsEnvSet ENGINEER divall_e
|
||||
< /ioc/startup/startup.script_linux
|
||||
|
||||
# ---- ioc/system specific startup script(s)
|
||||
< startup.script_SLAAT-CPCL-LELL01
|
||||
|
||||
iocInit
|
||||
@@ -0,0 +1,21 @@
|
||||
require "stream"
|
||||
require "array"
|
||||
|
||||
epicsEnvSet STREAM_PROTOCOL_PATH :protocols:./cfg
|
||||
|
||||
addScan 60
|
||||
|
||||
|
||||
var streamError 1
|
||||
|
||||
#first system - Xt-nano user:admin pw:XT or xt?
|
||||
#drvAsynIPPortConfigure ("ELL1", "FINSS-L-SHT21A:1002")
|
||||
drvAsynIPPortConfigure ("ELL1", "172.26.114.232:1002")
|
||||
|
||||
|
||||
|
||||
# The following lines were generated by "ioc install"
|
||||
# Generated at: 2024-03-05 16:48:36.816675
|
||||
|
||||
cd "/ioc/SLAAT-CPCL-LELL01"
|
||||
dbLoadTemplate("SLAAT-CPCL-LELL01_ELL.subs")
|
||||
Reference in New Issue
Block a user