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:
timmmooney
2013-11-12 22:52:21 +00:00
parent 18253335e2
commit 0eb9e5c5b8
+99 -13
View File
@@ -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