forked from epics_driver_modules/motorBase
68 lines
1.4 KiB
Lua
68 lines
1.4 KiB
Lua
IdlePollPeriod = 1.00
|
|
MovingPollPeriod = 0.25
|
|
|
|
lastPos = 0
|
|
targetPos = 0
|
|
|
|
function move(position, relative, minVel, maxVel, accel)
|
|
local MRES = asyn.getDoubleParam( DRIVER, AXIS, "MOTOR_REC_RESOLUTION")
|
|
|
|
if (relative) then
|
|
local prev = asyn.getDoubleParam( DRIVER, AXIS, "MOTOR_POSITION")
|
|
targetPos = prev + (position * MRES)
|
|
else
|
|
targetPos = (position * MRES)
|
|
end
|
|
|
|
epics.put(DRIVE_PV, targetPos)
|
|
|
|
if (position > 0) then
|
|
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_DIRECTION", 1)
|
|
else
|
|
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_DIRECTION", 0)
|
|
end
|
|
|
|
asyn.callParamCallbacks(DRIVER, AXIS)
|
|
end
|
|
|
|
|
|
function poll()
|
|
local MRES = asyn.getDoubleParam( DRIVER, AXIS, "MOTOR_REC_RESOLUTION")
|
|
|
|
if (MRES == 0.0) then
|
|
return true
|
|
end
|
|
|
|
local curr = epics.get(READBACK_PV)
|
|
|
|
asyn.setDoubleParam( DRIVER, AXIS, "MOTOR_POSITION", curr / MRES)
|
|
|
|
local done = 0
|
|
local moving = 1
|
|
|
|
if (curr == targetPos) then
|
|
done = 1
|
|
moving = 0
|
|
elseif (math.abs(curr - targetPos) <= MRES and lastPos == curr) then
|
|
done = 1
|
|
moving = 0
|
|
end
|
|
|
|
lastPos = curr
|
|
|
|
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_DONE", done)
|
|
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_MOVING", moving)
|
|
|
|
asyn.callParamCallbacks(DRIVER, AXIS)
|
|
|
|
return (done ~= 1)
|
|
end
|
|
|
|
|
|
function stop(acceleration)
|
|
local curr = asyn.getDoubleParam( DRIVER, AXIS, "MOTOR_POSITION")
|
|
|
|
epics.put(DRIVE_PV, curr)
|
|
targetPos = curr
|
|
end
|