114 lines
3.6 KiB
Plaintext
Executable File
114 lines
3.6 KiB
Plaintext
Executable File
record(motor,"$(P)$(M)")
|
|
{
|
|
field(DESC,"$(DESC)")
|
|
field(DTYP,"asynMotor")
|
|
field(DIR,"$(DIR)")
|
|
field(OUT,"@asyn($(CONTROLLER),$(AXIS))")
|
|
field(MRES,"$(MRES)")
|
|
field(EGU,"$(EGU)")
|
|
field(INIT,"")
|
|
field(PINI, "NO")
|
|
field(TWV,"1")
|
|
field(RTRY, "0")
|
|
}
|
|
|
|
# The message text
|
|
record(waveform, "$(P)$(M)-MsgTxt") {
|
|
field(DTYP, "asynOctetRead")
|
|
field(INP, "@asyn($(CONTROLLER),$(AXIS),1) MOTOR_MESSAGE_TEXT")
|
|
field(FTVL, "CHAR")
|
|
field(NELM, "$(MsgTxtSize=200)") # Should be the same as MAXBUF in the driver code
|
|
field(SCAN, "I/O Intr")
|
|
}
|
|
|
|
# Encoder type
|
|
record(waveform, "$(P)$(M):Encoder_Type") {
|
|
field(DTYP, "asynOctetRead")
|
|
field(INP, "@asyn($(CONTROLLER),$(AXIS),1) ENCODER_TYPE")
|
|
field(FTVL, "CHAR")
|
|
field(NELM, "80")
|
|
field(SCAN, "I/O Intr")
|
|
}
|
|
|
|
# enable axis
|
|
record(longout, "$(P)$(M):Enable") {
|
|
field(DTYP, "asynInt32")
|
|
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) ENABLE_AXIS")
|
|
field(PINI, "NO")
|
|
}
|
|
|
|
# enable axis
|
|
record(longin, "$(P)$(M):Enable_RBV") {
|
|
field(DTYP, "asynInt32")
|
|
field(INP, "@asyn($(CONTROLLER),$(AXIS),1) AXIS_ENABLED")
|
|
field(PINI, "YES")
|
|
}
|
|
|
|
# reread encoder
|
|
record(longout, "$(P)$(M):Reread_Encoder") {
|
|
field(DTYP, "asynInt32")
|
|
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) REREAD_ENCODER_POSITION")
|
|
field(PINI, "NO")
|
|
}
|
|
|
|
# reread encoder
|
|
record(longin, "$(P)$(M):Reread_Encoder_RBV") {
|
|
field(DTYP, "asynInt32")
|
|
field(INP, "@asyn($(CONTROLLER),$(AXIS),1) REREAD_ENCODER_POSITION_RBV")
|
|
field(PINI, "YES")
|
|
}
|
|
|
|
# reread encoder
|
|
record(longout, "$(P)$(M):Read_Config") {
|
|
field(DTYP, "asynInt32")
|
|
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) READ_CONFIG")
|
|
field(PINI, "NO")
|
|
}
|
|
|
|
# Provides the motor resolution MRES via an additional PV as explained here:
|
|
# https://epics.anl.gov/tech-talk/2020/msg00378.php
|
|
record(ao,"$(P)$(M):Resolution") {
|
|
field(DESC, "$(M) resolution")
|
|
field(DOL, "$(P)$(M).MRES CP MS")
|
|
field(OMSL, "closed_loop")
|
|
field(DTYP, "asynFloat64")
|
|
field(OUT, "@asyn($(CONTROLLER),$(AXIS)) MOTOR_REC_RESOLUTION")
|
|
}
|
|
|
|
# ===================================================================
|
|
# The following records read the high / low limits from the parameter
|
|
# library and copy those values into the corresponding fields of the main motor record.
|
|
# This strategy is described here: https://epics.anl.gov/tech-talk/2022/msg00464.php
|
|
|
|
# Helper record for the high limit which is filled in by the driver
|
|
record(ai, "$(P)$(M):MOTOR_HIGH_LIMIT-RBV")
|
|
{
|
|
field(DTYP, "asynFloat64")
|
|
field(INP, "@asyn($(CONTROLLER),$(AXIS)) MOTOR_HIGH_LIMIT_FROM_DRIVER")
|
|
field(SCAN, "I/O Intr")
|
|
field(FLNK, "$(P)$(M):PUSH_DHLM_TO_FIELD")
|
|
}
|
|
|
|
# Push the value into the field of the main motor record
|
|
record(ao, "$(P)$(M):PUSH_DHLM_TO_FIELD") {
|
|
field(DOL, "$(P)$(M):MOTOR_HIGH_LIMIT-RBV CP")
|
|
field(OUT, "$(P)$(M).DHLM")
|
|
field(OMSL, "closed_loop") # This configuration keeps the input value $(P)$(M):HLM_ADD_OFFSET and the output field $(P)$(M).DHLM in sync
|
|
}
|
|
|
|
# Helper record for the low limit which is filled in by the driver
|
|
record(ai, "$(P)$(M):MOTOR_LOW_LIMIT-RBV")
|
|
{
|
|
field(DTYP, "asynFloat64")
|
|
field(INP, "@asyn($(CONTROLLER),$(AXIS)) MOTOR_LOW_LIMIT_FROM_DRIVER")
|
|
field(SCAN, "I/O Intr")
|
|
field(FLNK, "$(P)$(M):PUSH_DLLM_TO_FIELD")
|
|
}
|
|
|
|
# Push the value into the field of the main motor record
|
|
record(ao, "$(P)$(M):PUSH_DLLM_TO_FIELD") {
|
|
field(DOL, "$(P)$(M):MOTOR_LOW_LIMIT-RBV CP")
|
|
field(OUT, "$(P)$(M).DLLM")
|
|
field(OMSL, "closed_loop") # This configuration keeps the input value $(P)$(M):LLM_ADD_OFFSET and the output field $(P)$(M).DLLM in sync
|
|
}
|