Motor Test 3: Now it should work

This commit is contained in:
boccioli_m
2015-10-19 15:29:09 +02:00
parent 07d7f7cd3e
commit eb2afd0221
3 changed files with 73 additions and 48 deletions

View File

@@ -1,5 +1,5 @@
#TestingList for pshell: configuration properties
#Fri Oct 16 15:40:43 CEST 2015
customPanel=
#Mon Oct 19 15:22:19 CEST 2015
customPanel=Kollimators
showEnabledTestsOnly=true
listFilter=parallelizeOneTest
listFilter=LabTests2

View File

@@ -53,7 +53,7 @@ def startTest(testName, DEVICE, params):
idInkr = Channel(DEVICE + ':INKR:2' , type = 'd') # move relative distance (positive means towards R2) [mm]
idInkrRb = Channel(DEVICE + ':INKRRB:2' , type = 'd') # readback of move relative distance (positive means towards R2) [mm]
idDiameter = Channel(DEVICE + ':DIAM:2' , type = 'd') # collimator diameter [mm]
idCom = Channel(DEVICE + ':COM:2' , type = 'd') # current position as from motor step counter [mm]
idCom = Channel(DEVICE + ':COM:2' , type = 'd') # motor commands [0=Stop; 1=Calibrate; 2=gotoR1; 3=gotoR2]
idMotorPosition = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
idPotiPosFromBeam = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
idPotiPosition = Channel(DEVICE + ':IST2:1' , type = 'd') # current position as from potentiometer [mm]

View File

@@ -23,8 +23,8 @@ def startTest(testName, DEVICE, params):
try:
test.log("Running test Motor Test 3 with the following parameters:")
test.log(params)
loopTimes = int(test.getParam("repeatTimes"))
direction = int(test.getParam("translation"))
loopTimes = int(test.getParam("repeatTimes")) # C times
translation = int(test.getParam("translation")) # Increment mm
samplePeriod = 0.2 #seconds
except:
test.log("Could not retrieve testing parameters: ", sys.exc_info()[0])
@@ -33,66 +33,81 @@ def startTest(testName, DEVICE, params):
test.sendFeedback(ret, success)
return
scan = ManualScan(['time [1/'+ str(1/samplePeriod) + ' s]'], ['Motor Pos (IST3:2)', 'Poti Position (IST2:1)',
'Motor Status (STA:1)', 'Inkr (INKR:2)', 'InkrRb (INKRRB:2)',
'Diameter (DIAM:2)', 'Logical Position (IST:2)',
'Motor Pos Raw (IST3:1)','Poti Pos From Beam (IST1:2)',
'Poti Raw (POSA:1)', 'Poti Ref1 Position (REF1:1)', 'Poti Ref2 Position (REF2:1)'])
scan = ManualScan(['traslation'], [
'Btvs Poti Position (IST3:2)',
'Mcs Poti Position (IST2:1)',
'Motor Status (STA:1)',
'Inkr (INKR:2)',
'InkrRb (INKRRB:2)',
'Diameter (DIAM:2)',
'Logical Position (IST:2)',
'Btvs Raw (IST3:1)',
'Motor Position (IST1:2)',
'Poti Raw (POSA:1)',
'Poti Ref1 Position (REF1:1)',
'Poti Ref2 Position (REF2:1)'])
scan.setPlotName(plotName)
scan.start()
p1 = plot(None, name = "Poti Pos From Beam - Motor Position", context = plotName + " pos difference")[0]
# Creating channels: dimension 1
p1 = plot(None, name = "Motor Position - Btvs Poti Position", context = plotName + " Motor-Poti difference")[0]
# Creating channels
try:
idMotorStatus = Channel(DEVICE + ':STA:1' , type = 'd') # DSP device_status reg
idLogicalPosition = Channel(DEVICE + ':IST:2' , type = 'd') # Shows current position in logical units as calculated from motor step counter [1..n]
idPotiRaw = Channel(DEVICE + ':POSA:1' , type = 'd') # poti raw data [ADC units]
idMotorPositionRaw = Channel(DEVICE + ':IST3:1' , type = 'd') # shows current position in steps as as obtained from motor step counter [steps]
idMotorStatus = Channel(DEVICE + ':STA:1' , type = 'd') # DSP device_status reg
idLogicalPosition = Channel(DEVICE + ':IST:2' , type = 'd') # Shows current position in logical units as calculated from motor step counter [1..n]
idPotiRaw = Channel(DEVICE + ':POSA:1' , type = 'd') # poti raw data [ADC units]
idBtvsRaw = Channel(DEVICE + ':IST3:1' , type = 'd') # shows current position in steps as as obtained from motor step counter [steps]
idInkr = Channel(DEVICE + ':INKR:2' , type = 'd') # move relative distance (positive means towards R2) [mm]
idInkrRb = Channel(DEVICE + ':INKRRB:2' , type = 'd') # readback of move relative distance (positive means towards R2) [mm]
idDiameter = Channel(DEVICE + ':DIAM:2' , type = 'd') # collimator diameter [mm]
idMotorPosition = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
idPotiPosFromBeam = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
idBtvs = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
idMotorPosition = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
idPotiPosition = Channel(DEVICE + ':IST2:1' , type = 'd') # current position as from potentiometer [mm]
idPotiRef1Position = Channel(DEVICE + ':REF1:1' , type = 'd') # R1 position as from potentiometer [mm]
idPotiRef2Position = Channel(DEVICE + ':REF2:1' , type = 'd') # R2 position as from potentiometer [mm]
idCom = Channel(DEVICE + ':COM:2' , type = 'd') # motor commands [0=Stop; 1=Calibrate; 2=gotoR1; 3=gotoR2]
except:
ret = 'Unable to create channel - ' + traceback.format_exc()
success = False
test.sendFeedback( ret, success)
return
#remove limits
#idLimitH.put(999999.9, timeout=None)
#idLimitL.put(-999999.9, timeout=None)
if direction == 0.0 :
direction = 1.0
startDefault = -100.0
endDefault = 1000.0
end = endDefault
#find position at Low end switch: it will be the starting point of the test
#go to position at Low end switch: it will be the starting point of the test
test.log('Homing')
idInkr.put(-100.0, timeout=10) # TODO: Set appropriate timeout
start = idInkr.get()+direction
idCom.put(2, timeout=10) # go to R1
# wait for motor to get to Ref1
for setpoint1 in range(0, 100):
sleep( 2 ) # Settling time
MotorStatus = idMotorStatus.get()
if bool(int(MotorStatus) & 4): # arrived at Ref1 (low limit)
break
if not bool(int(MotorStatus) & 4): # not arrived at Ref1 (low limit)
ret = 'Could not reach Ref1'
success = False
test.sendFeedback( ret, success)
return
direction = 1.0
countSteps = 0
test.log('Starting testing sequence')
count = 0
for setpoint1 in range(0, (loopTimes*2)):
count = count + 1
sleep( 2 ) # Settling time
# add multi cuve plot
p1.addSeries(LinePlotSeries("Run"+str(count)))
#go to an end reference
for setpoint2 in frange(start, end, direction):
idInkr.put(setpoint2, timeout=10) # TODO: Set appropriate timeout
for setpoint2 in frange(0, 1000000):
idInkr.put(translation*direction, timeout=10)
sleep(samplePeriod) # Settling time
readback2 = idInkr.get()
MotorStatus = idMotorStatus.get()
LogicalPosition = idLogicalPosition.get()
PotiRaw = idPotiRaw.get()
MotorPositionRaw = idMotorPositionRaw.get()
BtvsRaw = idBtvsRaw.get()
Btvs = idBtvs.get()
MotorPosition = idMotorPosition.get()
PotiPosFromBeam = idPotiPosFromBeam.get()
PotiPosition = idPotiPosition.get()
PotiRef1Position = idPotiRef1Position.get()
PotiRef2Position = idPotiRef2Position.get()
@@ -100,11 +115,24 @@ def startTest(testName, DEVICE, params):
Inkr = idInkr.get()
InkrRb = idInkrRb.get()
idDiff01 = PotiPosition-MotorPosition
countSteps = countSteps + 1
scan.append([setpoint2], [setpoint2],
[MotorPosition, PotiPosition, MotorStatus, Inkr, InkrRb, Diameter, LogicalPosition,
MotorPositionRaw, PotiPosFromBeam, PotiRaw, PotiRef1Position, PotiRef2Position])
idDiff01 = MotorPosition-Btvs
countSteps = countSteps + (translation*direction)
# multi plot
scan.append([countSteps], [countSteps],[
Btvs,
PotiPosition,
MotorStatus,
Inkr,
InkrRb,
Diameter,
LogicalPosition,
BtvsRaw,
MotorPosition,
PotiRaw,
PotiRef1Position,
PotiRef2Position])
# draw curve to multi curve plot
p1.getSeries(count).appendData(setpoint2, idDiff01)
#extract Status bits
@@ -114,15 +142,11 @@ def startTest(testName, DEVICE, params):
#check if arrived to R1 or R2
if endH:
#invert direction and swap start with end of translation
end = startDefault
start = readback2 - (10.0*direction)
direction = -1.0
test.log('Reached R2 switch, changing target to R1')
break
elif endL:
#invert direction and swap start with end of translation
end = endDefault
start = readback2 - (10.0*direction)
direction = 1.0
test.log('Reached R1 switch, changing target to R2')
break
@@ -157,15 +181,16 @@ def startTest(testName, DEVICE, params):
idMotorStatus.close()
idLogicalPosition.close()
idPotiRaw.close()
idMotorPositionRaw.close()
idBtvsRaw.close()
idBtvs.close()
idMotorPosition.close()
idPotiPosFromBeam.close()
idPotiPosition.close()
idPotiRef1Position.close()
idPotiRef2Position.close()
idDiameter.close()
idInkr.close()
idInkrRb.close()
idCom.close()
scan.end()
ret = 'Slide moved back and forth (' + str(count) + ' runs)'