forked from epics_driver_modules/motorBase
Added LINEAR, DRIVEINFO, and data-acquisition commands; make dwell time programmable from client; use absolute position and time; added DOTRAJECTORY pseudo command, to perform trajectory entirely on controller; acknowledge by setting IGLOBAL(cmdVAR) to -(IGLOBAL(cmdVAR)), instead of zero, so client has a better idea of what happened.
This commit is contained in:
@@ -18,6 +18,14 @@ HEADER
|
||||
DEFINE cmdSCOPESTATUS 15
|
||||
DEFINE cmdSCOPETRIG 16
|
||||
DEFINE cmdSCOPETRIGPERIOD 17
|
||||
DEFINE cmdDRIVEINFO 18
|
||||
DEFINE cmdLINEAR 19
|
||||
DEFINE cmdDATAACQ_TRIG 20
|
||||
DEFINE cmdDATAACQ_INP 21
|
||||
DEFINE cmdDATAACQ_ON 22
|
||||
DEFINE cmdDATAACQ_OFF 23
|
||||
DEFINE cmdDATAACQ_READ 24
|
||||
DEFINE cmdDOTRAJECTORY 25
|
||||
|
||||
DEFINE cmdVar 45
|
||||
DEFINE iarg1Var 46
|
||||
@@ -35,6 +43,7 @@ HEADER
|
||||
DEFINE darg9Var 9
|
||||
DEFINE numIArg 44
|
||||
DEFINE numDArg 43
|
||||
DEFINE pvtWaitMSVar 42
|
||||
|
||||
' Numerical values for first arg to scopedata()
|
||||
DEFINE sd_PositionCommand 0
|
||||
@@ -66,12 +75,34 @@ PROGRAM
|
||||
DIM axis4Number AS Integer
|
||||
DIM keepon as Integer
|
||||
DIM iarg as integer
|
||||
DIM pvtWaitMS as integer
|
||||
dim pos as double
|
||||
dim vel as double
|
||||
dim timeval as double
|
||||
dim timeIsAbs as integer
|
||||
dim timeInitialized as integer
|
||||
dim numpoints as integer
|
||||
dim i as integer
|
||||
|
||||
wait mode nowait
|
||||
|
||||
ABS
|
||||
keepon = 1
|
||||
pvtWaitMS = IGLOBAL(pvtWaitMSVar)
|
||||
IF pvtWaitMS < 1 THEN
|
||||
pvtWaitMS = 50
|
||||
END IF
|
||||
WHILE keepon
|
||||
IF IGLOBAL(cmdVar) = cmdVELOCITY_ON THEN
|
||||
IF IGLOBAL(cmdVar) = cmdPVT1 THEN
|
||||
axis1Number = IGLOBAL(iarg1Var)
|
||||
pos = DGLOBAL(darg1Var)
|
||||
vel = DGLOBAL(darg2Var)
|
||||
timeval = DGLOBAL(darg3Var)
|
||||
if timeIsAbs and not timeInitialized then
|
||||
PVT INIT TIME ABS
|
||||
timeInitialized = 1
|
||||
end if
|
||||
PVT @axis1Number pos, vel TIME timeval
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdVELOCITY_ON THEN
|
||||
VELOCITY ON
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdVELOCITY_OFF THEN
|
||||
VELOCITY OFF
|
||||
@@ -79,16 +110,13 @@ PROGRAM
|
||||
HALT
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdSTARTABORT THEN
|
||||
START
|
||||
ABORT @0 @1 @2 @3 @4
|
||||
ABORT @0
|
||||
acknowledgeall
|
||||
enable @0 @1 @2 @3 @4
|
||||
enable @0
|
||||
keepon = 0
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdSTART THEN
|
||||
START
|
||||
keepon = 0
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdPVT1 THEN
|
||||
axis1Number = IGLOBAL(iarg1Var)
|
||||
PVT @axis1Number DGLOBAL(darg1Var), DGLOBAL(darg2Var) TIME DGLOBAL(darg3Var)
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdPVT THEN
|
||||
axis1Number = IGLOBAL(iarg1Var)
|
||||
axis2Number = IGLOBAL(iarg2Var)
|
||||
@@ -104,8 +132,11 @@ PROGRAM
|
||||
PVT @axis1Number DGLOBAL(darg1Var), DGLOBAL(darg2Var) @axis2Number DGLOBAL(darg3Var), DGLOBAL(darg4Var) @axis3Number DGLOBAL(darg5Var), DGLOBAL(darg6Var) @axis4Number DGLOBAL(darg7Var), DGLOBAL(darg8Var) TIME DGLOBAL(darg9Var)
|
||||
end if
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdPVT_INIT_TIME_ABS THEN
|
||||
PVT INIT TIME ABS
|
||||
'PVT INIT TIME ABS
|
||||
timeIsAbs = 1
|
||||
timeInitialized = 0
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdPVT_INIT_TIME_INC THEN
|
||||
timeIsAbs = 0
|
||||
PVT INIT TIME INC
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdABORT THEN
|
||||
axis1Number = IGLOBAL(iarg1Var)
|
||||
@@ -123,7 +154,8 @@ PROGRAM
|
||||
end if
|
||||
keepon = 0
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdSCOPEBUFFER THEN
|
||||
SCOPEBUFFER IGLOBAL(iarg1Var)
|
||||
iarg = IGLOBAL(iarg1Var)
|
||||
SCOPEBUFFER iarg
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdSCOPEDATA THEN
|
||||
iarg = IGLOBAL(iarg1Var)
|
||||
if iarg = sd_PositionCommand then
|
||||
@@ -132,16 +164,70 @@ PROGRAM
|
||||
DGLOBAL(darg1Var) = SCOPEDATA(PositionFeedback, IGLOBAL(iarg2Var))
|
||||
elseif iarg = sd_CurrentFeedback then
|
||||
DGLOBAL(darg1Var) = SCOPEDATA(CurrentFeedback, IGLOBAL(iarg2Var))
|
||||
else
|
||||
DGLOBAL(darg1Var) = -1.2345654321
|
||||
end if
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdSCOPESTATUS THEN
|
||||
IGLOBAL(iarg1Var) = SCOPESTATUS(IGLOBAL(iarg1Var))
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdSCOPETRIG THEN
|
||||
SCOPETRIG
|
||||
if IGLOBAL(iarg1Var) = 1 then
|
||||
SCOPETRIG STOP
|
||||
ELSE
|
||||
SCOPETRIG
|
||||
END IF
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdSCOPETRIGPERIOD THEN
|
||||
SCOPETRIGPERIOD IGLOBAL(iarg1Var)
|
||||
iarg = IGLOBAL(iarg1Var)
|
||||
'SCOPETRIGPERIOD iarg
|
||||
SCOPETRIGPERIOD iarg*1.0
|
||||
' Not until version 4.03
|
||||
' ELSEIF IGLOBAL(cmdVar) = cmdDRIVEINFO THEN
|
||||
' IGLOBAL(iarg1Var) = DRIVEINFO(X, 59)
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdLINEAR THEN
|
||||
axis1Number = IGLOBAL(iarg1Var)
|
||||
LINEAR @axis1Number DGLOBAL(darg1Var) F DGLOBAL(darg2Var)
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdDATAACQ_TRIG THEN
|
||||
axis1Number = IGLOBAL(iarg1Var)
|
||||
DATAACQ @axis1Number TRIGGER IGLOBAL(iarg2Var)
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdDATAACQ_INP THEN
|
||||
axis1Number = IGLOBAL(iarg1Var)
|
||||
DATAACQ @axis1Number INPUT IGLOBAL(iarg2Var)
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdDATAACQ_ON THEN
|
||||
axis1Number = IGLOBAL(iarg1Var)
|
||||
DATAACQ @axis1Number ON IGLOBAL(iarg2Var)
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdDATAACQ_OFF THEN
|
||||
axis1Number = IGLOBAL(iarg1Var)
|
||||
DATAACQ @axis1Number OFF
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdDATAACQ_READ THEN
|
||||
axis1Number = IGLOBAL(iarg1Var)
|
||||
DATAACQ @axis1Number READ IGLOBAL(iarg2Var), IGLOBAL(iarg3Var)
|
||||
ELSEIF IGLOBAL(cmdVar) = cmdDOTRAJECTORY THEN
|
||||
axis1Number = IGLOBAL(iarg1Var)
|
||||
numpoints = IGLOBAL(iarg2Var)
|
||||
VELOCITY ON
|
||||
PVT INIT TIME ABS
|
||||
for i = 0 to numpoints-1 step 1
|
||||
pos = dglobal(3*i)
|
||||
vel = dglobal(3*i+1)
|
||||
timeVal = dglobal(3*i+2)
|
||||
if i = numpoints-2 then
|
||||
VELOCITY OFF
|
||||
end if
|
||||
PVT @axis1Number pos, vel time timeVal
|
||||
dwell pvtWaitMS/1000
|
||||
next i
|
||||
elseif IGLOBAL(cmdVar) = cmdDONE then
|
||||
' do nothing
|
||||
else
|
||||
IGLOBAL(cmdVar) = 1000
|
||||
END IF
|
||||
IGLOBAL(cmdVar) = cmdDONE
|
||||
DWELL 0.01
|
||||
|
||||
IF IGLOBAL(cmdVar) = cmdPVT1 THEN
|
||||
D = pvtWaitMS/1000
|
||||
ELSE
|
||||
D = .001
|
||||
END IF
|
||||
IGLOBAL(cmdVar) = -(IGLOBAL(cmdVar))
|
||||
DWELL D
|
||||
WEND
|
||||
|
||||
END PROGRAM
|
||||
|
||||
Reference in New Issue
Block a user