Experimental Physics and Industrial Control System
Hi Mark,
I made the changes your suggested to provide additional debugging information from within motorRecord.cc and devMotorAsyn.c. I have also added some comments to NewportSrc/drvXPSAsyn.c to try and determine why the high and low limits are not being passed back to the controller correctly. I have also adjusted the application so I am now using Asyn 4-16, instead of 4-13. I have confirmed that the step size is set correctly to 0.0001. It looks to me like the correct values are being written to the queue, but for some reason when the message is pulled off the queue in devMotorAsyn::asynCallback the value is always zero?? I have included what I think is relevant information below. If you have any additional suggestions on things you think I should test/research I would appreciate any insight you can provide.
Thanks, Tonia
2013/11/03 13:32:46.148 drvMotorAsyn::readMotorStatus, [0000080a,60000.000000,60000.000000,0.000000]
2013/11/03 13:32:46.153 devMotorAsyn::init_controller, SMTR1608-9-B20-05:brag setting of position not required, position=60000.000000, mres=0.000100, dval=0.000000, rdbd=0.000100
2013/11/03 13:32:46.158 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=1
2013/11/03 13:32:46.164 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=19, pact=0, value=590000.000000
2013/11/03 13:32:46.170 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/03 13:32:46.176 asynManager::portThread port=XPS1 callback
2013/11/03 13:32:46.176 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=14, ivalue=0, dvalue=0.000000
2013/11/03 13:32:46.177 drvMotorAsyn::writeFloat64, reason=4, pasynUser=0x90ca8 pAxis=0x852e8
2013/11/03 13:32:46.181 motorAxisSetDouble[0,0]: error performing PositionerUserTravelLimitsSet for high limit=0.000000, status=-17
2013/11/03 13:32:46.182 drvMotorAsyn::writeFloat64, reason=4, value=0.000000, status=-1
2013/11/03 13:32:46.183 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag pasyn{Float64,Int32}->write returned
2013/11/03 13:32:46.188 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=20, pact=0, value=10000.000000
2013/11/03 13:32:46.193 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/03 13:32:46.198 asynManager::portThread port=XPS1 callback
2013/11/03 13:32:46.199 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=15, ivalue=0, dvalue=0.000000
2013/11/03 13:32:46.199 drvMotorAsyn::writeFloat64, reason=3, pasynUser=0x91038 pAxis=0x852e8
2013/11/03 13:32:46.205 motorAxisSetDouble[0,0]: error performing PositionerUserTravelLimitsSet for low limit=0.000000, status=-17
2013/11/03 13:32:46.205 drvMotorAsyn::writeFloat64, reason=3, value=0.000000, status=-1
Line:7492013/11/03 13:32:46.206 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag pasyn{Float64,Int32}->write returned
2013/11/03 13:32:46.214 XPSPoller: S.Pos axisStatus=11
2013/11/03 13:32:46.218 SMTR1608-9-B20-05:brag:READBACK devAsynFloat64::getIoIntInfo registering interrupt
2013/11/03 13:32:46.227 SMTR1608-9-B20-05:brag:READBACK devAsynFloat64::getIoIntInfo created ring buffer, size=10
2013/11/03 13:32:46.232 XPS1 0 registerInterruptUser
2013/11/03 13:32:46.241 XPSPoller: S.Pos axisStatus=11
2013/11/03 13:32:46.246 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getIoIntInfo registering interrupt
2013/11/03 13:32:46.253 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getIoIntInfo created ring buffer, size=10
2013/11/03 13:32:46.258 XPS1 0 registerInterruptUser
2013/11/03 13:32:46.268 XPSPoller: S.Pos axisStatus=11
2013/11/03 13:32:46.786 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/03 13:32:46.787 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/03 13:32:46.789 asynManager::portThread port=XPS1 callback
2013/11/03 13:32:46.790 drvMotorAsyn::readFloat64, reason=0, value=60000.000000
2013/11/03 13:32:46.791 SMTR1608-9-B20-05:brag:READBACK devAsynFloat64 process value=60000.000000
2013/11/03 13:32:46.792 asynManager::portThread port=XPS1 callback
2013/11/03 13:32:46.793 drvMotorAsyn::readInt32, reason=28, value=11
2013/11/03 13:32:46.793 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32 process value=11
drvXPSAsyn:motorAxisSetDouble::motorAxisHighLimit value=0.000000, stepSize=0.000100, deviceValue=0.000000
drvXPSAsyn:motorAxisSetDouble::motorAxisLowLimit value=0.000000, stepSize=0.000100, deviceValue=0.000000
2013/11/03 13:32:51.416 XPSPoller: S.Pos axisStatus=11
epics> dbl
SMTR1608-9-B20-05:brag:READBACK
SMTR1608-9-B20-05:brag:XPS_STATUS
SMTR1608-9-B20-05:brag:MAX_JERK_TIME
SMTR1608-9-B20-05:brag:MIN_JERK_TIME
SMTR1608-9-B20-05:alldone
SMTR1608-9-B20-05:allstop
SMTR1608-9-B20-05:alldoneBlink
SMTR1608-9-B20-05:moving
SMTR1608-9-B20-05:brag
epics> dbpr SMTR1608-9-B20-05:brag 10
ACCL: 0.2 ACKS: NO_ALARM ACKT: YES ADEL: 0
ALST: 0 ASG: ASP: (nil) ATHM: 1
BACC: 0.2 BDST: 0 BKPT: 00 BVEL: 1
CARD: -1 CBAK: 0x90980 CDIR: 0 CNEN: Disable
DCOF: 0 DESC: Mono Brag DHLM: 59 DIFF: 0
DINP:CONSTANT DIR: Pos DISA: 0 DISP: 0
DISS: NO_ALARM DISV: 1 DLLM: 1 DLY: 0
DMOV: 1 DOL:CONSTANT DPVT: 0x90998 DRBV: 6
DSET: 0x4010add8 DTYP: asynMotor DVAL: 6 EGU: degrees
ERES: 1.0e-04 EVNT: 0 FLNK:CONSTANT 0 FOF: 0
FOFF: Variable FRAC: 1 HHSV: NO_ALARM HIGH: 0
HIHI: 0 HLM: 59 HLS: 0 HLSV: NO_ALARM
HOMF: 0 HOMR: 0 HOPR: 0 HSV: NO_ALARM
HVEL: 0.1 ICOF: 0 INIT: JAR: 5
JOGF: 0 JOGR: 0 JVEL: 1 LCNT: 0
LDVL: 6 LLM: 1 LLS: 0 LLSV: NO_ALARM
LOCK: NO LOLO: 0 LOPR: 0 LOW: 0
LRLV: 0 LRVL: 60000 LSET: 0x911f8 LSPG: Go
LSV: NO_ALARM LVAL: 6 LVIO: 0 MDEL: 0
MIP: 0 MISS: 0
MLIS: 00 00 00 00 00 00 00 00 00 00 00 00 MLOK: 00 08 f2 a0
MLST: 0 MMAP: 0 MOVN: 0 MRES: 1.0e-04
MSTA: 2058 NAME: SMTR1608-9-B20-05:brag NMAP: 0
NSEV: NO_ALARM NSTA: NO_ALARM NTM: YES NTMF: 2
OFF: 0 OMSL: supervisory OUT:INST_IO @asyn(XPS1,0)
PACT: 0 PCOF: 0 PHAS: 0 PINI: NO
POST: PP: 0 PPN: (nil) PPNR: (nil)
PREC: 5 PREM: PRIO: LOW PROC: 0
PUTF: 0 RBV: 6 RCNT: 0 RDBD: 1.0e-04
RDBL:CONSTANT RDES: 0x651c0 RDIF: 0 REP: 60000
RHLS: 0 RINP:CONSTANT RLLS: 0 RLNK:CONSTANT
RLV: 0 RMOD: Default RMP: 60000 RPRO: 0
RRBV: 60000 RRES: 0 RSET: 0x4010abe0 RTRY: 0
RVAL: 60000 RVEL: 0 S: 50 SBAK: 50
SBAS: 5 SCAN: Passive SDIS:CONSTANT SET: Use
SEVR: NO_ALARM SMAX: 1600 SPMG: Go SPVT: (nil)
SREV: 200 SSET: 0 STAT: NO_ALARM STOO:CONSTANT
STOP: 0 STUP: OFF SUSE: 0 SYNC: 0
TDIR: 0 TIME: <undefined> TPRO: 0 TSE: 0
TSEL:CONSTANT TWF: 0 TWR: 0 TWV: 1
UDF: 0 UEIP: No UREV: 0.02 URIP: No
VAL: 6 VBAS: 0.1 VELO: 1 VERS: 6.5
VMAX: 32 VOF: 0
epics> dbpf SMTR1608-9-B20-05:brag 8
2013/11/03 13:34:35.258 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=0
motorRecord.cc do_work line 2125, rbvpos = 60000.000000, currpos = 60000.000000, newpos = 80000.000000, vbase = 1000.000000, vel = 10000.000000, acc = 45000.000000
motorRecord.cc do_work line 2126, pmr->mres = 0.000100, pmr->drbv = 6.000000, pmr->ldvl = 6.000000, pmr->dval = 8.000000, pmr->vbas = 0.100000, pmr->velo = 1.000000, pmr->accl = 0.200000
motorRecord.cc do_work line 2245, rbvpos = 60000.000000, currpos = 60000.000000, newpos = 80000.000000, vbase = 1000.000000, vel = 10000.000000, acc = 45000.000000
motorRecord.cc do_work line 2260, rbvpos = 60000.000000, currpos = 60000.000000, newpos = 80000.000000, vbase = 1000.000000, vel = 10000.000000, acc = 45000.000000
2013/11/03 13:34:35.267 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=5, pact=1, value=1000.000000
2013/11/03 13:34:35.268 XPS1 addr 0 queueRequest priority 0 not lockHolder
motorRecord.cc do_work line 2305 - vbase = 1000.000000
2013/11/03 13:34:35.269 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=6, pact=1, value=10000.000000
2013/11/03 13:34:35.269 XPS1 addr 0 queueRequest priority 0 not lockHolder
motorRecord.cc do_work line 2308 - velocity = 10000.000000
2013/11/03 13:34:35.270 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=7, pact=1, value=45000.000000
2013/11/03 13:34:35.271 XPS1 addr 0 queueRequest priority 0 not lockHolder
motorRecord.cc do_work line 2312 - accel = 45000.000000
2013/11/03 13:34:35.272 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=0, pact=1, value=80000.000000
motorRecord.cc do_work line 2322 - position = 80000.000000
2013/11/03 13:34:35.272 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=8, pact=1, value=0.000000
2013/11/03 13:34:35.273 XPS1 addr 0 queueRequest priority 0 not lockHolder
DBR_DOUBLE: 8
epics> 2013/11/03 13:34:35.279 asynManager::portThread port=XPS1 callback
2013/11/03 13:34:35.281 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=6, ivalue=0, dvalue=0.000000
2013/11/03 13:34:35.283 drvMotorAsyn::writeFloat64, reason=101, pasynUser=0x408005e0 pAxis=0x852e8
2013/11/03 13:34:35.286 drvMotorAsyn::writeFloat64, reason=101, value=0.000000, status=0
Line:7492013/11/03 13:34:35.292 asynManager::portThread port=XPS1 callback
2013/11/03 13:34:35.294 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=5, ivalue=0, dvalue=0.000000
2013/11/03 13:34:35.298 drvMotorAsyn::writeFloat64, reason=100, pasynUser=0x40800858 pAxis=0x852e8
2013/11/03 13:34:35.303 drvMotorAsyn::writeFloat64, reason=100, value=0.000000, status=0
Line:7492013/11/03 13:34:35.307 asynManager::portThread port=XPS1 callback
2013/11/03 13:34:35.309 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=7, ivalue=0, dvalue=0.000000
2013/11/03 13:34:35.311 drvMotorAsyn::writeFloat64, reason=102, pasynUser=0x95270 pAxis=0x852e8
2013/11/03 13:34:35.313 drvMotorAsyn::writeFloat64, reason=102, value=0.000000, status=0
Line:7492013/11/03 13:34:35.315 asynManager::portThread port=XPS1 callback
2013/11/03 13:34:35.316 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=0, ivalue=0, dvalue=0.000000
2013/11/03 13:34:35.317 drvMotorAsyn::writeFloat64, reason=104, pasynUser=0xa98c8 pAxis=0x852e8
2013/11/03 13:34:35.318 Set card 0, axis 0 move to 0.000000, min vel=0.000000, max_vel=0.000000, accel=0.000000
2013/11/03 13:34:35.327 SendAndReceive unexpected response =-17,GroupMoveAbsolute (S.Pos,1.256816198112e-312),EndOfAPI
2013/11/03 13:34:35.332 SMTR1608-9-B20-05:brag devMotorAsyn::statusCallback new value=[p:60000.000000,e:60000.000000,s:808] P
2013/11/03 13:34:35.338 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::interruptCallbackInput new value=11
2013/11/03 13:34:35.340 drvMotorAsyn::writeFloat64, reason=104, value=0.000000, status=0
Line:7492013/11/03 13:34:35.342 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=1
2013/11/03 13:34:35.345 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getCallbackValue from ringBuffer value=11
2013/11/03 13:34:35.355 XPSPoller: S.Pos axisStatus=11
2013/11/03 13:34:35.365 SMTR1608-9-B20-05:brag devMotorAsyn::statusCallback new value=[p:60000.000000,e:60000.000000,s:80a]
2013/11/03 13:34:35.368 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=1
2013/11/03 13:34:35.370 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::interruptCallbackInput new value=11
2013/11/03 13:34:35.373 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getCallbackValue from ringBuffer value=11
2013/11/03 13:34:35.388 XPSPoller: S.Pos axisStatus=11
epics> dbpr SMTR1608-9-B20-05:brag 10
ACCL: 0.2 ACKS: NO_ALARM ACKT: YES ADEL: 0
ALST: 0 ASG: ASP: (nil) ATHM: 1
BACC: 0.2 BDST: 0 BKPT: 00 BVEL: 1
CARD: -1 CBAK: 0x90980 CDIR: 1 CNEN: Disable
DCOF: 0 DESC: Mono Brag DHLM: 59 DIFF: 2
DINP:CONSTANT DIR: Pos DISA: 0 DISP: 0
DISS: NO_ALARM DISV: 1 DLLM: 1 DLY: 0
DMOV: 1 DOL:CONSTANT DPVT: 0x90998 DRBV: 6
DSET: 0x4010add8 DTYP: asynMotor DVAL: 8 EGU: degrees
ERES: 1.0e-04 EVNT: 0 FLNK:CONSTANT 0 FOF: 0
FOFF: Variable FRAC: 1 HHSV: NO_ALARM HIGH: 0
HIHI: 0 HLM: 59 HLS: 0 HLSV: NO_ALARM
HOMF: 0 HOMR: 0 HOPR: 0 HSV: NO_ALARM
HVEL: 0.1 ICOF: 0 INIT: JAR: 5
JOGF: 0 JOGR: 0 JVEL: 1 LCNT: 0
LDVL: 8 LLM: 1 LLS: 0 LLSV: NO_ALARM
LOCK: NO LOLO: 0 LOPR: 0 LOW: 0
LRLV: 0 LRVL: 80000 LSET: 0x911f8 LSPG: Go
LSV: NO_ALARM LVAL: 8 LVIO: 0 MDEL: 0
MIP: 0 MISS: 0
MLIS: 00 00 00 00 00 00 00 00 00 00 00 00 MLOK: 00 08 f2 a0
MLST: 0 MMAP: 0 MOVN: 0 MRES: 1.0e-04
MSTA: 2058 NAME: SMTR1608-9-B20-05:brag NMAP: 0
NSEV: NO_ALARM NSTA: NO_ALARM NTM: YES NTMF: 2
OFF: 0 OMSL: supervisory OUT:INST_IO @asyn(XPS1,0)
PACT: 0 PCOF: 0 PHAS: 0 PINI: NO
POST: PP: 0 PPN: (nil) PPNR: (nil)
PREC: 5 PREM: PRIO: LOW PROC: 0
PUTF: 0 RBV: 6 RCNT: 0 RDBD: 1.0e-04
RDBL:CONSTANT RDES: 0x651c0 RDIF: 20000 REP: 60000
RHLS: 0 RINP:CONSTANT RLLS: 0 RLNK:CONSTANT
RLV: 0 RMOD: Default RMP: 60000 RPRO: 0
RRBV: 60000 RRES: 0 RSET: 0x4010abe0 RTRY: 0
RVAL: 80000 RVEL: 0 S: 50 SBAK: 50
SBAS: 5 SCAN: Passive SDIS:CONSTANT SET: Use
SEVR: NO_ALARM SMAX: 1600 SPMG: Go SPVT: (nil)
SREV: 200 SSET: 0 STAT: NO_ALARM STOO:CONSTANT
STOP: 0 STUP: OFF SUSE: 0 SYNC: 0
TDIR: 0 TIME: 2013-11-03 13:34:35.370230000 TPRO: 0
TSE: 0 TSEL:CONSTANT TWF: 0 TWR: 0
TWV: 1 UDF: 0 UEIP: No UREV: 0.02
URIP: No VAL: 8 VBAS: 0.1 VELO: 1
VERS: 6.5 VMAX: 32 VOF: 0
-----Original Message-----
From: Mark Rivers [mailto:[email protected]]
Sent: November-02-13 4:51 PM
To: Tonia Batten; Pearson, Matthew R.
Cc: [email protected]
Subject: RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage
Hi Tonia,
This is very strange. It does seem that the motor record is indeed passing 0 for the velocity, acceleration, and position.
The velocity command for example is command number 5.
This is when device support gets called with the velocity command. devMotorAsyn calls pasynManager->queueRequest to queue a request to send the command to the driver. This debugging output does not print out the value.
2013/11/02 14:19:06.874 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=5, pact=1
2013/11/02 14:19:06.876 XPS1 addr 0 queueRequest priority 0 not lockHolder
asynManager then calls devMotorAsyn::asynCallback in the port thread. The debugging output there does print both the integer and floating values because it does not know what type of value it has been passed. Velocity is in fact a double, and the value is 0.
2013/11/02 14:19:06.917 XPS1 callback
2013/11/02 14:19:06.919 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=5, ivalue=0, dvalue=0.000000
The callback function calls the motor driver, which prints the following debugging information. reason=100 is indeed the velocity command. So the value is 0.
2013/11/02 14:19:06.924 drvMotorAsyn::writeFloat64, reason=100, pasynUser=0x90ab0 pAxis=0x84ec8
2013/11/02 14:19:06.928 drvMotorAsyn::writeFloat64, reason=100, value=0.000000
I think to make further progress we need to get some debugging output from the motor record. The motor record is pretty complicated to follow the logic in, but I think that lines 2292 to 2302 are where the commands to device support are being generated for these moves in R6-5 of motorRecord.cc:
pmr->cdir = (pmr->rdif < 0.0) ? 0 : 1;
WRITE_MSG(SET_VEL_BASE, &vbase);
WRITE_MSG(SET_VELOCITY, &velocity);
if (accel > 0.0) /* Don't SET_ACCEL = 0.0 */
WRITE_MSG(SET_ACCEL, &accel);
if (use_rel == true)
WRITE_MSG(MOVE_REL, &position);
else
WRITE_MSG(MOVE_ABS, &position);
WRITE_MSG(GO, NULL);
SEND_MSG();
You should add some printf() statements in there to see that the value of velocity, vbase, accel, and position are. If those are the lines that are indeed calling device support, we need to know if the values are zero or non-zero there.
You should probably also change this code at line 416 in devMotorAsyn.c so that it prints the value of the parameter:
asynPrint(pasynUser, ASYN_TRACE_FLOW,
"devMotorAsyn::send_msg: %s command=%d, pact=%d\n",
pmr->name, command, pmr->pact);
Change to:
asynPrint(pasynUser, ASYN_TRACE_FLOW,
"devMotorAsyn::send_msg: %s command=%d, pact=%d, value=%f\n",
pmr->name, command, pmr->pact, param ? *param : 0.0);
Mark
________________________________________
From: Tonia Batten [[email protected]]
Sent: Saturday, November 02, 2013 3:38 PM
To: Mark Rivers; Pearson, Matthew R.
Cc: [email protected]
Subject: RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage
Hi Mark,
I have removed all of the higher level PV's so that only the following PV's are loaded.
epics> dbl
SMTR1608-9-B20-05:brag:READBACK
SMTR1608-9-B20-05:brag:XPS_STATUS
SMTR1608-9-B20-05:brag:MAX_JERK_TIME
SMTR1608-9-B20-05:brag:MIN_JERK_TIME
SMTR1608-9-B20-05:alldone
SMTR1608-9-B20-05:allstop
SMTR1608-9-B20-05:alldoneBlink
SMTR1608-9-B20-05:moving
SMTR1608-9-B20-05:brag
record(motor,"SMTR1608-9-B20-05:brag")
{
field(DESC,"Mono Brag")
field(DTYP,"asynMotor")
field(DIR,"Pos")
field(VELO,"1")
field(VBAS,"0")
field(ACCL,".2")
field(BDST,"0")
field(BVEL,"1")
field(BACC,".2")
field(OUT,"@asyn(XPS1,0)")
field(MRES,"0.0001")
field(PREC,"5")
field(EGU,"degrees")
field(DHLM,"59")
field(DLLM,"1")
field(INIT,"")
field(RTRY,"0")
field(TWV,"1")
}
# Database for Newport XPS
grecord(ao,"SMTR1608-9-B20-05:brag:MIN_JERK_TIME") { field(DESC,"Min jerk time")
field(PREC,"3")
field(VAL,".01")
field(DTYP, "asynFloat64")
field(OUT,"@asyn(XPS1,0)MIN_JERK_TIME")
}
grecord(ao,"SMTR1608-9-B20-05:brag:MAX_JERK_TIME") { field(DESC,"Max jerk time")
field(PREC,"3")
field(VAL,".03")
field(DTYP, "asynFloat64")
field(OUT,"@asyn(XPS1,0)MAX_JERK_TIME")
}
grecord(ai,"SMTR1608-9-B20-05:brag:READBACK") {
field(DESC,"Readback")
field(PREC,"4")
field(PINI, "1")
field(DTYP, "asynFloat64")
field(SCAN, "I/O Intr")
field(INP,"@asyn(XPS1,0)MOTOR_POSITION")
}
/ motor-6-5/db/motorUtil.db
# Setting VAL to "stop", stops ALL motorRecord's in this IOC.
# SMTR1608-9-B20-05:allstop.VAL is monitored by motorUtil.
record(bo, " SMTR1608-9-B20-05:allstop") { field(ZNAM, "release") field(ONAM, "stop") field(DESC, "Stop All IOC motors.") } # Indicates if all motors in this IOC are done moving.
# Set by motorUtil when SMTR1608-9-B20-05:moving.VAL == 0.
record(bi, " SMTR1608-9-B20-05:alldone") { field(ZNAM, "moving") field(ONAM, "done") field(INP, "1") field(DESC, "All IOC motors done moving.") } # The number of motors moving in this IOC.
# SMTR1608-9-B20-05:moving.VAL is set by motorUtil.
record(longout, " SMTR1608-9-B20-05:moving") { field(DESC, "Motors moving count.") } # Used by xxx.adl to blink "Moving" indicator.
record(calc, " SMTR1608-9-B20-05:alldoneBlink") { field(SCAN, ".5 second") field(CALC, "A?0:!B") field(INPA, " SMTR1608-9-B20-05:alldone") field(INPB, " SMTR1608-9-B20-05:alldoneBlink") }
Here is the output for the motor record before I move the stage. The stage is homed at 6 degrees before starting up the application. Below I have included the output from asyn when I try an move the motor to 10 degrees and then also an output of the motor record to show the state after the intended move.
epics> dbpr SMTR1608-9-B20-05:brag 10
ACCL: 0.2 ACKS: NO_ALARM ACKT: YES ADEL: 0
ALST: 0 ASG: ASP: (nil) ATHM: 1
BACC: 0.2 BDST: 0 BKPT: 00 BVEL: 1
CARD: -1 CBAK: 0x90478 CDIR: 0 CNEN: Disable
DCOF: 0 DESC: Mono Brag DHLM: 59 DIFF: 0 DINP:CONSTANT DIR: Pos DISA: 0 DISP: 0
DISS: NO_ALARM DISV: 1 DLLM: 1 DLY: 0
DMOV: 1 DOL:CONSTANT DPVT: 0x90490 DRBV: 6
DSET: 0x40109680 DTYP: asynMotor DVAL: 6 EGU: degrees
ERES: 1.0e-04 EVNT: 0 FLNK:CONSTANT 0 FOF: 0
FOFF: Variable FRAC: 1 HHSV: NO_ALARM HIGH: 0
HIHI: 0 HLM: 59 HLS: 0 HLSV: NO_ALARM
HOMF: 0 HOMR: 0 HOPR: 0 HSV: NO_ALARM
HVEL: 0 ICOF: 0 INIT: JAR: 5
JOGF: 0 JOGR: 0 JVEL: 1 LCNT: 0
LDVL: 6 LLM: 1 LLS: 0 LLSV: NO_ALARM
LOCK: NO LOLO: 0 LOPR: 0 LOW: 0
LRLV: 0 LRVL: 60000 LSET: 0x90da0 LSPG: Go
LSV: NO_ALARM LVAL: 6 LVIO: 0 MDEL: 0
MIP: 0 MISS: 0
MLIS: 00 0c 75 e8 00 0c 75 e8 00 00 00 01 MLOK: 00 08 ee 80
MLST: 0 MMAP: 0 MOVN: 0 MRES: 1.0e-04
MSTA: 2058 NAME: SMTR1608-9-B20-05:brag NMAP: 0
NSEV: NO_ALARM NSTA: NO_ALARM NTM: YES NTMF: 2
OFF: 0 OMSL: supervisory OUT:INST_IO @asyn(XPS1,0)
PACT: 0 PCOF: 0 PHAS: 0 PINI: NO
POST: PP: 0 PPN: (nil) PPNR: (nil)
PREC: 5 PREM: PRIO: LOW PROC: 0
PUTF: 0 RBV: 6 RCNT: 0 RDBD: 1.0e-04
RDBL:CONSTANT RDES: 0x651d0 RDIF: 0 REP: 60000
RHLS: 0 RINP:CONSTANT RLLS: 0 RLNK:CONSTANT
RLV: 0 RMOD: Default RMP: 60000 RPRO: 0
RRBV: 60000 RRES: 0 RSET: 0x40109488 RTRY: 0
RVAL: 60000 RVEL: 0 S: 50 SBAK: 50
SBAS: 0 SCAN: Passive SDIS:CONSTANT SET: Use
SEVR: NO_ALARM SMAX: 0 SPMG: Go SPVT: (nil)
SREV: 200 SSET: 0 STAT: NO_ALARM STOO:CONSTANT
STOP: 0 STUP: OFF SUSE: 0 SYNC: 0
TDIR: 0 TIME: <undefined> TPRO: 0 TSE: 0 TSEL:CONSTANT TWF: 0 TWR: 0 TWV: 1
UDF: 0 UEIP: No UREV: 0.02 URIP: No
VAL: 6 VBAS: 0 VELO: 1 VERS: 6.5
VMAX: 0 VOF: 0
epics> dbpf SMTR1608-9-B20-05:brag.VAL 10
2013/11/02 14:19:06.293 XPSPoller: S.Pos axisStatus=11
2013/11/02 14:19:06.870 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=0
2013/11/02 14:19:06.874 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=5, pact=1
2013/11/02 14:19:06.876 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/02 14:19:06.878 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=6, pact=1
2013/11/02 14:19:06.880 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/02 14:19:06.887 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=7, pact=1
2013/11/02 14:19:06.893 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/02 14:19:06.895 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=0, pact=1
2013/11/02 14:19:06.897 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=8, pact=1
2013/11/02 14:19:06.899 XPS1 addr 0 queueRequest priority 0 not lockHolder
DBR_DOUBLE: 10
2013/11/02 14:19:06.904 XPS1 callback
2013/11/02 14:19:06.911 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=6, ivalue=0, dvalue=0.000000
2013/11/02 14:19:06.913 drvMotorAsyn::writeFloat64, reason=101, pasynUser=0x90910 pAxis=0x84ec8
2013/11/02 14:19:06.915 drvMotorAsyn::writeFloat64, reason=101, value=0.000000
2013/11/02 14:19:06.917 XPS1 callback
2013/11/02 14:19:06.919 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=5, ivalue=0, dvalue=0.000000
2013/11/02 14:19:06.924 drvMotorAsyn::writeFloat64, reason=100, pasynUser=0x90ab0 pAxis=0x84ec8
2013/11/02 14:19:06.928 drvMotorAsyn::writeFloat64, reason=100, value=0.000000
2013/11/02 14:19:06.933 XPS1 callback
2013/11/02 14:19:06.934 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=7, ivalue=0, dvalue=0.000000
2013/11/02 14:19:06.936 drvMotorAsyn::writeFloat64, reason=102, pasynUser=0xc7928 pAxis=0x84ec8
2013/11/02 14:19:06.938 drvMotorAsyn::writeFloat64, reason=102, value=0.000000
2013/11/02 14:19:06.940 XPS1 callback
2013/11/02 14:19:06.941 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=0, ivalue=0, dvalue=0.000000
2013/11/02 14:19:06.942 drvMotorAsyn::writeFloat64, reason=104, pasynUser=0xc7a40 pAxis=0x84ec8
2013/11/02 14:19:06.942 Set card 0, axis 0 move to 0.000000, min vel=0.000000, max_vel=0.000000, accel=0.000000
2013/11/02 14:19:06.950 SendAndReceive unexpected response =-17,GroupMoveAbsolute (S.Pos,1.254083067532e-312),EndOfAPI
2013/11/02 14:19:06.950 SMTR1608-9-B20-05:brag devMotorAsyn::statusCallback new value=[p:60000.000000,e:60000.000000,s:808] P
2013/11/02 14:19:06.958 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::interruptCallbackInput new value=11
2013/11/02 14:19:06.965 drvMotorAsyn::writeFloat64, reason=104, value=0.000000
2013/11/02 14:19:06.970 XPSPoller: S.Pos axisStatus=11
2013/11/02 14:19:06.974 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=1
2013/11/02 14:19:06.976 SMTR1608-9-B20-05:brag devMotorAsyn::statusCallback new value=[p:60000.000000,e:60000.000000,s:80a]
2013/11/02 14:19:06.977 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=1
2013/11/02 14:19:06.978 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::interruptCallbackInput new value=11
2013/11/02 14:19:06.979 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getCallbackValue from ringBuffer value=11
2013/11/02 14:19:06.980 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getCallbackValue from ringBuffer value=11
2013/11/02 14:19:06.993 XPSPoller: S.Pos axisStatus=11
epics> dbpr SMTR1608-9-B20-05:brag 10
ACCL: 0.2 ACKS: NO_ALARM ACKT: YES ADEL: 0
ALST: 0 ASG: ASP: (nil) ATHM: 1
BACC: 0.2 BDST: 0 BKPT: 00 BVEL: 1
CARD: -1 CBAK: 0x90478 CDIR: 1 CNEN: Disable
DCOF: 0 DESC: Mono Brag DHLM: 59 DIFF: 4 DINP:CONSTANT DIR: Pos DISA: 0 DISP: 0
DISS: NO_ALARM DISV: 1 DLLM: 1 DLY: 0
DMOV: 1 DOL:CONSTANT DPVT: 0x90490 DRBV: 6
DSET: 0x40109680 DTYP: asynMotor DVAL: 10 EGU: degrees
ERES: 1.0e-04 EVNT: 0 FLNK:CONSTANT 0 FOF: 0
FOFF: Variable FRAC: 1 HHSV: NO_ALARM HIGH: 0
HIHI: 0 HLM: 59 HLS: 0 HLSV: NO_ALARM
HOMF: 0 HOMR: 0 HOPR: 0 HSV: NO_ALARM
HVEL: 0 ICOF: 0 INIT: JAR: 5
JOGF: 0 JOGR: 0 JVEL: 1 LCNT: 0
LDVL: 10 LLM: 1 LLS: 0 LLSV: NO_ALARM
LOCK: NO LOLO: 0 LOPR: 0 LOW: 0
LRLV: 0 LRVL: 100000 LSET: 0x90da0 LSPG: Go
LSV: NO_ALARM LVAL: 10 LVIO: 0 MDEL: 0
MIP: 0 MISS: 0
MLIS: 00 0c 75 e8 00 0c 75 e8 00 00 00 01 MLOK: 00 08 ee 80
MLST: 0 MMAP: 0 MOVN: 0 MRES: 1.0e-04
MSTA: 2058 NAME: SMTR1608-9-B20-05:brag NMAP: 0
NSEV: NO_ALARM NSTA: NO_ALARM NTM: YES NTMF: 2
OFF: 0 OMSL: supervisory OUT:INST_IO @asyn(XPS1,0)
PACT: 0 PCOF: 0 PHAS: 0 PINI: NO
POST: PP: 0 PPN: (nil) PPNR: (nil)
PREC: 5 PREM: PRIO: LOW PROC: 0
PUTF: 0 RBV: 6 RCNT: 0 RDBD: 1.0e-04
RDBL:CONSTANT RDES: 0x651d0 RDIF: 40000 REP: 60000
RHLS: 0 RINP:CONSTANT RLLS: 0 RLNK:CONSTANT
RLV: 0 RMOD: Default RMP: 60000 RPRO: 0
RRBV: 60000 RRES: 0 RSET: 0x40109488 RTRY: 0
RVAL: 100000 RVEL: 0 S: 50 SBAK: 50
SBAS: 0 SCAN: Passive SDIS:CONSTANT SET: Use
SEVR: NO_ALARM SMAX: 0 SPMG: Go SPVT: (nil)
SREV: 200 SSET: 0 STAT: NO_ALARM STOO:CONSTANT
STOP: 0 STUP: OFF SUSE: 0 SYNC: 0
TDIR: 0 TIME: 2013-11-02 14:19:06.977845000 TPRO: 0
TSE: 0 TSEL:CONSTANT TWF: 0 TWR: 0
TWV: 1 UDF: 0 UEIP: No UREV: 0.02
URIP: No VAL: 10 VBAS: 0 VELO: 1
VERS: 6.5 VMAX: 0 VOF: 0
I ran into some problems getting upgraded to asyn-4-14 or higher. I am going to upgrade a number of the drivers so that I can see if this resolves the problem. If you can see why the motor record is passing in a value of zero for the position, velocity and acceleration I would appreciate any insight you can provide.
Thanks, Tonia
-----Original Message-----
From: Mark Rivers [mailto:[email protected]]
Sent: November-01-13 9:46 PM
To: Tonia Batten; Pearson, Matthew R.
Cc: [email protected]
Subject: RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage
Hi Tonia,
I don't think the problem should be the architecture. All communications with the XPS is in ASCII, not binary, so floating point formats or endianness should not matter.
Please send the output of:
dbpr SMTR1608-9-B20-05:brag 10
This will show us all fields of the motor record.
Then send the output of the driver when you try to move it to a different position.
Mark
________________________________
From: Tonia Batten [[email protected]]
Sent: Friday, November 01, 2013 6:28 PM
To: Pearson, Matthew R.; Mark Rivers
Cc: [email protected]
Subject: RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage
Hi Mark/Matthew,
Thanks for your feedback.
I tried running the application with more complete debugging information and I am wondering if the problem is associated with the fact that I am running on linux-armv5teb architecture. It looks to me like the hardware might being having problems reading Float values?? (asynFloat64SyncIO read: 2.122058e-314). That being said, the motor record is definitely passing in the wrong position (Set card 0, axis 0 move to 0.000000, min vel=0.000000, max_vel=0.000000, accel=0.000000). I have also tried to adjusted the VBAS value to 0 and this did not seem to have any effect. I am going to try running the software on a different architecture (linux-x86_64) to see if that changes any of the results I am seeing. If not, I will try and upgrade the version of the Asyn and Motor drivers I am using to see if this helps.
I have included the output from running 'asynReport 10 XPS1' below, I don't see the stepSize the driver is using. I am wondering if that information was added in a later version?
If you guys have any other ideas I am completely open to suggestions. I will follow up again once I have completed the additional testing I described above.
Thanks and have a wonderful weekend!
Regards, Tonia
#!./bin/linux-armv5teb/ideasMonoMtr
## You may have to change ideasMonoMtr to something else ## everywhere it appears in this file #< envPaths ## Register all support components
dbLoadDatabase("./dbd/ideasMonoMtr.dbd",0,0)
ideasMonoMtr_registerRecordDeviceDriver(pdbbase)
## Load record instances
dbLoadRecords("./db/IDEAS_MonoMtr.db")
dbLoadRecords("./db/IDEAS_MonoPseudoMtr.db")
dbLoadRecords("/home/epics/src/R3.14.12/modules/support/motor-6-5//db/motorUtil.db", "P=SMTR1608-9-B20-05:") # cards (total controllers)
XPSSetup(1)
# card, IP, PORT, number of axes, active poll period (ms), idle poll period (ms) XPSConfig(0, "192.168.0.254", 5001, 1, 10, 5000) # asyn port, driverType, box number, number of axes) drvAsynMotorConfigure("XPS1", "motorXPS", 0, 1)
XPSInterpose("XPS1")
# Turns off the ability of the motor record to change an actuator's position without moving it.
XPSEnableSetPosition(0)
# card, axis, postioner name, steps per unit
XPSConfigAxis(0,0,"S.Pos",10000)
#asynSetTraceMask("XPS1",0,0x9)
asynSetTraceMask("XPS1",0,0xFF)
asynSetTraceIOMask("XPS1",0,0x2)
#asynSetTraceIOMask("XPS1",0,2)
iocInit()
Starting iocInit
############################################################################
## EPICS R3.14.12 $Date: Wed 2010-11-24 14:50:38 -0600$ ## EPICS Base built Apr 21 2011 ############################################################################
2013/11/01 16:53:40.717 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:40.749 XPSInterpose::drvUserCreate, drvInfo=MOTOR_POSITION, pptypeName=(nil), psize=(nil), pasynUser=0x937a8
2013/11/01 16:53:40.757 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_POSITION, pptypeName=(nil), psize=(nil), pasynUser=0x937a8
2013/11/01 16:53:40.766 drvMotorAsyn::drvUserCreate, command=MOTOR_POSITION
2013/11/01 16:53:40.775 XPSInterpose::drvUserCreate, drvInfo=MOTOR_POSITION, pptypeName=(nil), psize=(nil), pasynUser=0x9f858
2013/11/01 16:53:40.784 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_POSITION, pptypeName=(nil), psize=(nil), pasynUser=0x9f858
2013/11/01 16:53:40.792 drvMotorAsyn::drvUserCreate, command=MOTOR_POSITION
2013/11/01 16:53:40.801 XPSInterpose::drvUserCreate, drvInfo=XPS_STATUS, pptypeName=(nil), psize=(nil), pasynUser=0x9fc50
2013/11/01 16:53:40.816 XPSInterpose::drvUserCreate, command=XPS_STATUS
2013/11/01 16:53:40.825 XPSInterpose::drvUserCreate, drvInfo=XPS_STATUS, pptypeName=(nil), psize=(nil), pasynUser=0xa0080
2013/11/01 16:53:40.833 XPSInterpose::drvUserCreate, command=XPS_STATUS
2013/11/01 16:53:40.843 XPS1 lockPort
2013/11/01 16:53:40.851 drvMotorAsyn::getBounds,low=0, high=65535
2013/11/01 16:53:40.860 asynInt32SyncIO getBounds: status=0 low 0 high 65535
2013/11/01 16:53:40.868 XPS1 unlockPort
2013/11/01 16:53:40.876 XPSInterpose::drvUserCreate, drvInfo=MAX_JERK_TIME, pptypeName=(nil), psize=(nil), pasynUser=0xa0268
2013/11/01 16:53:40.886 XPSInterpose::drvUserCreate, command=MAX_JERK_TIME
2013/11/01 16:53:40.895 XPSInterpose::drvUserCreate, drvInfo=MAX_JERK_TIME, pptypeName=(nil), psize=(nil), pasynUser=0xa04a0
2013/11/01 16:53:40.903 XPSInterpose::drvUserCreate, command=MAX_JERK_TIME
2013/11/01 16:53:40.915 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:40.921 XPS1 lockPort
2013/11/01 16:53:40.930 drvMotorAsyn::readFloat64, reason=27, value=0.000000
2013/11/01 16:53:40.940 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:40.947 asynFloat64SyncIO read: 2.122058e-314
2013/11/01 16:53:40.955 XPS1 unlockPort
2013/11/01 16:53:40.963 drvMotorAsyn::drvUserDestroy, drvPvt=0x92690, pasynUser=0xa04a0
2013/11/01 16:53:40.972 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:40.979 XPSInterpose::drvUserCreate, drvInfo=MIN_JERK_TIME, pptypeName=(nil), psize=(nil), pasynUser=0xa04a0
2013/11/01 16:53:40.988 XPSInterpose::drvUserCreate, command=MIN_JERK_TIME
2013/11/01 16:53:40.996 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:41.004 XPSInterpose::drvUserCreate, drvInfo=MIN_JERK_TIME, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.012 XPSInterpose::drvUserCreate, command=MIN_JERK_TIME
2013/11/01 16:53:41.021 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:41.028 XPS1 lockPort
2013/11/01 16:53:41.037 drvMotorAsyn::readFloat64, reason=26, value=0.000000
2013/11/01 16:53:41.048 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:41.055 asynFloat64SyncIO read: 2.122058e-314
2013/11/01 16:53:41.063 XPS1 unlockPort
2013/11/01 16:53:41.073 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:41.079 drvMotorAsyn::drvUserDestroy, drvPvt=0x92690, pasynUser=0xa0a38
2013/11/01 16:53:41.092 XPSInterpose::drvUserCreate, drvInfo=MOTOR_MOVE_REL, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.100 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_MOVE_REL, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.110 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:41.117 drvMotorAsyn::drvUserCreate, command=MOTOR_MOVE_REL
2013/11/01 16:53:41.126 XPSInterpose::drvUserCreate, drvInfo=MOTOR_MOVE_ABS, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.135 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_MOVE_ABS, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.143 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:41.149 drvMotorAsyn::drvUserCreate, command=MOTOR_MOVE_ABS
2013/11/01 16:53:41.158 XPSInterpose::drvUserCreate, drvInfo=MOTOR_MOVE_VEL, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.168 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:41.175 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_MOVE_VEL, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.182 drvMotorAsyn::drvUserCreate, command=MOTOR_MOVE_VEL
2013/11/01 16:53:41.192 XPSInterpose::drvUserCreate, drvInfo=MOTOR_HOME, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.201 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_HOME, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.210 drvMotorAsyn::drvUserCreate, command=MOTOR_HOME
2013/11/01 16:53:41.222 XPSInterpose::drvUserCreate, drvInfo=MOTOR_STOP_AXIS, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.229 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_STOP_AXIS, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.238 drvMotorAsyn::drvUserCreate, command=MOTOR_STOP_AXIS
2013/11/01 16:53:41.247 XPSInterpose::drvUserCreate, drvInfo=MOTOR_VELOCITY, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.256 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_VELOCITY, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.265 drvMotorAsyn::drvUserCreate, command=MOTOR_VELOCITY
2013/11/01 16:53:41.272 XPSInterpose::drvUserCreate, drvInfo=MOTOR_VEL_BASE, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.281 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_VEL_BASE, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.290 drvMotorAsyn::drvUserCreate, command=MOTOR_VEL_BASE
2013/11/01 16:53:41.299 XPSInterpose::drvUserCreate, drvInfo=MOTOR_ACCEL, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.309 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_ACCEL, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.319 drvMotorAsyn::drvUserCreate, command=MOTOR_ACCEL
2013/11/01 16:53:41.328 XPSInterpose::drvUserCreate, drvInfo=MOTOR_POSITION, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.338 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_POSITION, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.350 drvMotorAsyn::drvUserCreate, command=MOTOR_POSITION
2013/11/01 16:53:41.359 XPSInterpose::drvUserCreate, drvInfo=MOTOR_RESOLUTION, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.370 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_RESOLUTION, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.379 drvMotorAsyn::drvUserCreate, command=MOTOR_RESOLUTION
2013/11/01 16:53:41.387 XPSInterpose::drvUserCreate, drvInfo=MOTOR_ENC_RATIO, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.397 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_ENC_RATIO, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.406 drvMotorAsyn::drvUserCreate, command=MOTOR_ENC_RATIO
2013/11/01 16:53:41.415 XPSInterpose::drvUserCreate, drvInfo=MOTOR_PGAIN, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.422 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_PGAIN, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.431 drvMotorAsyn::drvUserCreate, command=MOTOR_PGAIN
2013/11/01 16:53:41.439 XPSInterpose::drvUserCreate, drvInfo=MOTOR_IGAIN, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.448 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_IGAIN, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.456 drvMotorAsyn::drvUserCreate, command=MOTOR_IGAIN
2013/11/01 16:53:41.465 XPSInterpose::drvUserCreate, drvInfo=MOTOR_DGAIN, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.473 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_DGAIN, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.483 drvMotorAsyn::drvUserCreate, command=MOTOR_DGAIN
2013/11/01 16:53:41.492 XPSInterpose::drvUserCreate, drvInfo=MOTOR_HIGH_LIMIT, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.500 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_HIGH_LIMIT, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.509 drvMotorAsyn::drvUserCreate, command=MOTOR_HIGH_LIMIT
2013/11/01 16:53:41.517 XPSInterpose::drvUserCreate, drvInfo=MOTOR_LOW_LIMIT, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.526 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_LOW_LIMIT, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.535 drvMotorAsyn::drvUserCreate, command=MOTOR_LOW_LIMIT
2013/11/01 16:53:41.544 XPSInterpose::drvUserCreate, drvInfo=MOTOR_SET_CLOSED_LOOP, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.552 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_SET_CLOSED_LOOP, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.561 drvMotorAsyn::drvUserCreate, command=MOTOR_SET_CLOSED_LOOP
2013/11/01 16:53:41.571 XPSInterpose::drvUserCreate, drvInfo=MOTOR_STATUS, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.581 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_STATUS, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.592 drvMotorAsyn::drvUserCreate, command=MOTOR_STATUS
2013/11/01 16:53:41.601 XPSInterpose::drvUserCreate, drvInfo=MOTOR_UPDATE_STATUS, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.617 drvMotorAsyn::drvUserCreate, drvInfo=MOTOR_UPDATE_STATUS, pptypeName=(nil), psize=(nil), pasynUser=0xa0a38
2013/11/01 16:53:41.626 drvMotorAsyn::drvUserCreate, command=MOTOR_UPDATE_STATUS
2013/11/01 16:53:41.639 XPS1 0 registerInterruptUser
2013/11/01 16:53:41.647 drvMotorAsyn::readMotorStatus, [0000080a,60004.000000,60004.000000,0.000000]
2013/11/01 16:53:41.656 devMotorAsyn::init_controller, SMTR1608-9-B20-05:brag setting of position not required, position=60004.000000, mres=0.000100, dval=0.000000, rdbd=0.000100
2013/11/01 16:53:41.665 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=1
2013/11/01 16:53:41.674 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=19, pact=0
2013/11/01 16:53:41.683 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/01 16:53:41.692 XPS1 0 autoConnect
2013/11/01 16:53:41.697 drvMotorAsyn::connect, pasynUser=0x929a8
2013/11/01 16:53:41.698 XPS1 callback
2013/11/01 16:53:41.698 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=14, ivalue=0, dvalue=0.000000
2013/11/01 16:53:41.699 drvMotorAsyn::writeFloat64, reason=4, pasynUser=0xa1240 pAxis=0x930a8
2013/11/01 16:53:41.706 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=20, pact=0
2013/11/01 16:53:41.715 motorAxisSetDouble[0,0]: error performing PositionerUserTravelLimitsSet for high limit=0.000000, status=-17
2013/11/01 16:53:41.716 drvMotorAsyn::writeFloat64, reason=4, value=0.000000
2013/11/01 16:53:41.717 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag pasyn{Float64,Int32}->write returned
2013/11/01 16:53:41.721 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/01 16:53:41.730 XPS1 callback
2013/11/01 16:53:41.731 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=15, ivalue=0, dvalue=0.000000
2013/11/01 16:53:41.732 drvMotorAsyn::writeFloat64, reason=3, pasynUser=0xa1240 pAxis=0x930a8
2013/11/01 16:53:41.739 motorAxisSetDouble[0,0]: error performing PositionerUserTravelLimitsSet for low limit=0.000000, status=-17
2013/11/01 16:53:41.740 drvMotorAsyn::writeFloat64, reason=3, value=0.000000
2013/11/01 16:53:41.741 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag pasyn{Float64,Int32}->write returned
2013/11/01 16:53:41.754 SMTR1608-9-B20-05:brag:READBACK devAsynFloat64::getIoIntInfo registering interrupt
2013/11/01 16:53:41.762 SMTR1608-9-B20-05:brag:READBACK devAsynFloat64::getIoIntInfo created ring buffer, size=10
2013/11/01 16:53:41.770 XPS1 0 registerInterruptUser
2013/11/01 16:53:41.779 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getIoIntInfo registering interrupt
2013/11/01 16:53:41.788 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getIoIntInfo created ring buffer, size=10
2013/11/01 16:53:41.796 XPS1 0 registerInterruptUser
2013/11/01 16:53:42.315 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/01 16:53:42.316 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/01 16:53:42.319 XPS1 callback
2013/11/01 16:53:42.320 drvMotorAsyn::readFloat64, reason=0, value=60004.000000
2013/11/01 16:53:42.321 SMTR1608-9-B20-05:brag:READBACK devAsynFloat64 process value=60004.000000
2013/11/01 16:53:42.322 XPS1 callback
2013/11/01 16:53:42.323 drvMotorAsyn::readInt32, reason=28, value=11
2013/11/01 16:53:42.323 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32 process value=11 cas warning: Configured TCP port was unavailable.
cas warning: Using dynamically assigned TCP port 1081, cas warning: but now two or more servers share the same UDP port.
cas warning: Depending on your IP kernel this server may not be cas warning: reachable with UDP unicast (a host's IP in EPICS_CA_ADDR_LIST)
iocRun: All initialization complete
2013/11/01 16:53:42.405 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=0
epics> 2013/11/01 16:53:46.176 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:46.183 SMTR1608-9-B20-05:brag:READBACK devAsynFloat64::interruptCallbackInput new value=60009.000000
2013/11/01 16:53:46.186 SMTR1608-9-B20-05:brag devMotorAsyn::statusCallback new value=[p:60009.000000,e:60009.000000,s:80a]
2013/11/01 16:53:46.189 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=1
2013/11/01 16:53:46.192 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::interruptCallbackInput new value=11
2013/11/01 16:53:46.195 SMTR1608-9-B20-05:brag:READBACK devAsynFloat64::getCallbackValue from ringBuffer value=60009.000000
2013/11/01 16:53:46.201 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getCallbackValue from ringBuffer value=11
2013/11/01 16:53:47.508 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=0
2013/11/01 16:53:47.511 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=5, pact=1
2013/11/01 16:53:47.515 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/01 16:53:47.517 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=6, pact=1
2013/11/01 16:53:47.520 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/01 16:53:47.522 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=7, pact=1
2013/11/01 16:53:47.525 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/01 16:53:47.528 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=0, pact=1
2013/11/01 16:53:47.529 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=8, pact=1
2013/11/01 16:53:47.531 XPS1 addr 0 queueRequest priority 0 not lockHolder
2013/11/01 16:53:47.541 XPS1 callback
2013/11/01 16:53:47.547 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=6, ivalue=0, dvalue=0.000000
2013/11/01 16:53:47.549 drvMotorAsyn::writeFloat64, reason=101, pasynUser=0xf2568 pAxis=0x930a8
2013/11/01 16:53:47.551 drvMotorAsyn::writeFloat64, reason=101, value=0.000000
2013/11/01 16:53:47.557 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=0
2013/11/01 16:53:47.559 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=0
2013/11/01 16:53:47.562 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=0
2013/11/01 16:53:47.569 XPS1 callback
2013/11/01 16:53:47.571 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=5, ivalue=0, dvalue=0.000000
2013/11/01 16:53:47.573 drvMotorAsyn::writeFloat64, reason=100, pasynUser=0xf26d8 pAxis=0x930a8
2013/11/01 16:53:47.576 drvMotorAsyn::writeFloat64, reason=100, value=0.000000
2013/11/01 16:53:47.578 XPS1 callback
2013/11/01 16:53:47.580 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=7, ivalue=0, dvalue=0.000000
2013/11/01 16:53:47.582 drvMotorAsyn::writeFloat64, reason=102, pasynUser=0xf2878 pAxis=0x930a8
2013/11/01 16:53:47.586 drvMotorAsyn::writeFloat64, reason=102, value=0.000000
2013/11/01 16:53:47.587 XPS1 callback
2013/11/01 16:53:47.588 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=0, ivalue=0, dvalue=0.000000
2013/11/01 16:53:47.589 drvMotorAsyn::writeFloat64, reason=104, pasynUser=0xf2a18 pAxis=0x930a8
2013/11/01 16:53:47.589 Set card 0, axis 0 move to 0.000000, min vel=0.000000, max_vel=0.000000, accel=0.000000
2013/11/01 16:53:47.597 SendAndReceive unexpected response =-17,GroupMoveAbsolute (S.Pos,1.398141117789e-312),EndOfAPI
2013/11/01 16:53:47.602 SMTR1608-9-B20-05:brag devMotorAsyn::statusCallback new value=[p:60009.000000,e:60009.000000,s:808] P
2013/11/01 16:53:47.603 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::interruptCallbackInput new value=11
2013/11/01 16:53:47.608 drvMotorAsyn::writeFloat64, reason=104, value=0.000000
2013/11/01 16:53:47.610 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=1
2013/11/01 16:53:47.618 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getCallbackValue from ringBuffer value=11
2013/11/01 16:53:47.622 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:47.638 SMTR1608-9-B20-05:brag devMotorAsyn::statusCallback new value=[p:60009.000000,e:60009.000000,s:80a]
2013/11/01 16:53:47.640 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=1
2013/11/01 16:53:47.643 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::interruptCallbackInput new value=11
2013/11/01 16:53:47.652 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getCallbackValue from ringBuffer value=11
2013/11/01 16:53:47.666 XPSPoller: S.Pos axisStatus=11
2013/11/01 16:53:47.695 XPSPoller: S.Pos axisStatus=11
Output from > asynReport 10 XPS1
XPS1 multiDevice:Yes canBlock:Yes autoConnect:Yes enabled:Yes connected:Yes numberConnects 1 nDevices 1 nQueued 0 blocked:No asynManagerLock:No synchronousLock:No exceptionActive:No exceptionUsers 0 exceptionNotifys 0 interposeInterfaceList asynDrvUser pinterface 0x400c0a84 drvPvt 0x934d0 interfaceList asynCommon pinterface 0x40109614 drvPvt 0x92690
asynInt32 pinterface 0x40109620 drvPvt 0x92690 asynUInt32Digital pinterface 0x40109634 drvPvt 0x92690
asynFloat64 pinterface 0x40109650 drvPvt 0x92690 asynFloat64Array pinterface 0x4010986c drvPvt 0x92690 asynGenericPointer pinterface 0x40109660 drvPvt 0x92690 asynDrvUser pinterface 0x40109670 drvPvt 0x92690 addr 0 autoConnect Yes enabled Yes connected Yes exceptionActive No exceptionActive No exceptionUsers 0 exceptionNotifys 0 blocked No
Port: XPS1
messages sent OK=0; send failed (queue full)=0
int32 callback client address=0x40168e48, addr=0, reason=28
float64 callback client address=0x401712f0, addr=0, reason=0 motorStatus callback client address=0x400fb33c, reason=108
-----Original Message-----
From: Pearson, Matthew R. [mailto:[email protected]]
Sent: November-01-13 4:55 PM
To: Mark Rivers
Cc: Tonia Batten; [email protected]
Subject: Re: Newport XPS-Q8 and Motor Record - RV120HAHL stage
Hi Tonia,
I've had problems in the past setting VBAS to non zero values. I seem to remember it caused the acceleration to be set too high for the XPS, although it may not be causing this issue.
Also, I see you're using Asyn 4-13. It's probably worth upgrading from that version since there were locking problems in that version (fixed in Asyn 4-14).
Cheers,
Matt
On Nov 1, 2013, at 5:53 PM, Mark Rivers <[email protected]<mailto:[email protected]>> wrote:
> Hi Tonia,
>
> It looks to me like the conversion from steps to XPS engineering units may be incorrect. The steps per unit you are passing in XPSConfigAxis looks OK, since it is 10000, which is the reciprocal of MRES (0.0001). The driver converts "steps per units" to "stepSize" = 1./"steps per unit", and it multiplies all velocity and position values from the motor record by this value.
>
> You can determine what value of stepSize the driver is acutall using by typing the following command:
>
> asynReport 10 XPS1
>
> You can also get more complete debugging output by changing this line:
>
> asynSetTraceMask("XPS1",0,0x9)
>
> to this:
> asynSetTraceMask("XPS1",0,0xFF)
>
> That should enable this output in motorAxisMove:
>
> PRINT(pAxis->logParam, FLOW, "Set card %d, axis %d move to %f, min
> vel=%f, max_vel=%f, accel=%f\n",
> pAxis->card, pAxis->axis, position, min_velocity,
> max_velocity, acceleration);
>
> That will show you the target position (in "steps") and velocity (in "steps" per second) the motor record is requesting.
>
>
> motorAxisMove then sets the velocity and acceleration as follows:
>
> status = PositionerSGammaParametersSet(pAxis->pollSocket,
> pAxis->positionerName,
> max_velocity*pAxis->stepSize,
> acceleration*pAxis->stepSize,
> pAxis->minJerkTime,
> pAxis->maxJerkTime);
>
> It then moves the motor as follows:
>
> deviceUnits = position * pAxis->stepSize; ..
> status = GroupMoveAbsolute(pAxis->moveSocket,
> pAxis->positionerName,
> 1,
> &deviceUnits);
>
> Cheers,
> Mark
>
>
>
> From:
> [email protected]<mailto:[email protected]>
> [mailto:[email protected]] On Behalf Of Tonia Batten
> Sent: Friday, November 01, 2013 4:13 PM
> To: [email protected]<mailto:[email protected]>
> Subject: Newport XPS-Q8 and Motor Record - RV120HAHL stage
>
> Good Afternoon,
>
> I am using EPICS R3.14.12, MOTOR 6-5 and ASYN 4-13 with a Newport XPS-Q8 controller with an XPS-DRV03 card to try and move a RV120HAHL stage. Because the RV120HAHL stage is not supported by the Newport Controller I have configured the RV120CCHL and adjusted the following parameters and then auto tuned the configuration for the stage.
>
> EncoderResolution = 0.0001 ;--- units
> MaximumVelocity = 8 ;--- units / s
> MaximumAcceleration = 32 ;--- units / s² HomeSearchMaximumVelocity = 4
> ;--- units / s HomeSearchMaximumAcceleration = 16 ;--- units / s²
> MinimumTargetPosition=1;--- units
> MaximumTargetPosition=59;--- units
> HomePreset=6;--- units
>
> Here is the information from the .ini file for the stage I have configured.
>
> ;RV@RV160CCHL@XPS-DRV03
> ;--- Unit = deg
> ;--- Configuration_Comment =
> ;--- Smart stage name
> SmartStageName=
> ;--- Motor driver model parameters
> DriverName=XPS-DRV03
> DriverMaximumRMSCurrent=1.98;--- A
> DriverRMSIntegrationTime=3;--- s
> ;--- Driver command interface parameters
> MotorDriverInterface=AnalogVoltage
> ScalingCurrent=5;--- A
> CurrentLimit=3.96;--- A
> ScalingVoltage=48;--- V
> VoltageLimit=45.56;--- V
> ;--- Position encoder interface parameters EncoderType=AquadB
> EncoderResolution=0.0001;--- units
> LinearEncoderCorrection=0;--- ppm
> Backlash=0;--- units
> CurrentVelocityCutOffFrequency=100;--- Hz
> CurrentAccelerationCutOffFrequency=100;--- Hz
> PositionerMappingFileName= PositionerMappingLineNumber=
> PositionerMappingMaxPositionError=;--- units
> EncoderIndexOffset=0;--- units
> ;--- Limit sensor input plug parameters
> ServitudesType=StandardEORDriverPlug
> MinimumTargetPosition=1;--- units
> MaximumTargetPosition=59;--- units
> HomePreset=6;--- units
> MaximumVelocity=8;--- units / s
> MaximumAcceleration=32;--- units / s2
> EmergencyDecelerationMultiplier=4
> MinimumJerkTime=0.005;--- s
> MaximumJerkTime=0.05;--- s
> TrackingCutOffFrequency=25;--- Hz
> ;--- Home search process parameters
> HomeSearchSequenceType=MechanicalZeroAndIndexHomeSearch
> HomeSearchMaximumVelocity=4;--- units / s
> HomeSearchMaximumAcceleration=16;--- units / s2
> HomeSearchTimeOut=86;--- s
> HomingSensorOffset=0;--- units
> ;--- Position servo loop type parameters
> CorrectorType=PIDDualFFVoltage ClosedLoopStatus=Closed
> FatalFollowingError=1;--- units
> KP=36
> KI=650
> KD=0.279
> KS=0.8
> GKP=0
> GKD=0
> GKI=0
> KForm=0;--- units
> IntegrationTime=1E+99;--- s
> DerivativeFilterCutOffFrequency=4000;--- Hz
> DeadBandThreshold=0;--- units
> KFeedForwardVelocity=1.815
> KFeedForwardAcceleration=0.0010378
> KFeedForwardVelocityOpenLoop=1.815
> Friction=0;--- V
> NotchFrequency1=0;--- Hz
> NotchBandwidth1=0;--- Hz
> NotchGain1=0
> NotchFrequency2=0;--- Hz
> NotchBandwidth2=0;--- Hz
> NotchGain2=0
> ;--- Motion done condition mode parameters MotionDoneMode=Theoretical
>
> After rebooting the controller I am able to successfully use the Newport web interface to initialize, home and move the stage. However when I try and move the stage with the Motor record I am seeing strange behaviour.
>
> Here is my st.cmd file.
>
> #!./bin/linux-armv5teb/ideasMonoMtr
>
> ## You may have to change ideasMonoMtr to something else ## everywhere
> it appears in this file
>
> #< envPaths
>
> ## Register all support components
> dbLoadDatabase("./dbd/ideasMonoMtr.dbd",0,0)
> ideasMonoMtr_registerRecordDeviceDriver(pdbbase)
>
> ## Load record instances
> dbLoadRecords("./db/IDEAS_MonoMtr.db")
> dbLoadRecords("./db/IDEAS_MonoPseudoMtr.db")
> dbLoadRecords("$(MOTOR)/db/motorUtil.db", "P=SMTR1608-9-B20-05:")
>
> # cards (total controllers)
> XPSSetup(1)
>
> # card, IP, PORT, number of axes, active poll period (ms), idle poll
> period (ms) XPSConfig(0, "192.168.0.254", 5001, 1, 10, 5000)
>
> # asyn port, driverType, box number, number of axes)
> drvAsynMotorConfigure("XPS1", "motorXPS", 0, 1)
> XPSInterpose("XPS1")
>
> # Turns off the ability of the motor record to change an actuator's position without moving it.
> XPSEnableSetPosition(0)
>
> # card, axis, postioner name, steps per unit
> XPSConfigAxis(0,0,"S.Pos",10000)
>
> asynSetTraceMask("XPS1",0,0x9)
> #asynSetTraceMask("XPS1",0,255)
> asynSetTraceIOMask("XPS1",0,0x2)
> #asynSetTraceIOMask("XPS1",0,2)
>
> iocInit()
>
> Here is how my motor record and the XPS_extra records are defined. In addition I have some additional PV's defined to calculate the ultimate position of the motor.
>
> record(motor,"SMTR1608-9-B20-05:brag")
> {
> field(DESC,"Mono Brag")
> field(DTYP,"asynMotor")
> field(DIR,"Pos")
> field(VELO,"1")
> field(VBAS,".1")
> field(ACCL,".2")
> field(BDST,"0")
> field(BVEL,"1")
> field(BACC,".2")
> field(OUT,"@asyn(XPS1,0)")
> field(MRES,"0.0001")
> field(PREC,"5")
> field(EGU,"degrees")
> field(DHLM,"59")
> field(DLLM,"1")
> field(INIT,"")
> field(RTRY,"0")
> field(TWV,"1")
> }
>
> # Database for Newport XPS
>
> grecord(ao,"SMTR1608-9-B20-05:brag:MIN_JERK_TIME") { field(DESC,"Min
> jerk time")
> field(PREC,"3")
> field(VAL,".01")
> field(DTYP, "asynFloat64")
> field(OUT,"@asyn(XPS1,0)MIN_JERK_TIME")
> }
> grecord(ao,"SMTR1608-9-B20-05:brag:MAX_JERK_TIME") { field(DESC,"Max
> jerk time")
> field(PREC,"3")
> field(VAL,".03")
> field(DTYP, "asynFloat64")
> field(OUT,"@asyn(XPS1,0)MAX_JERK_TIME")
> }
> grecord(ai,"SMTR1608-9-B20-05:brag:READBACK") {
> field(DESC,"Readback")
> field(PREC,"4")
> field(PINI, "1")
> field(DTYP, "asynFloat64")
> field(SCAN, "I/O Intr")
> field(INP,"@asyn(XPS1,0)MOTOR_POSITION")
> }
> grecord(ai,"SMTR1608-9-B20-05:brag:XPS_STATUS") { field(DESC,"XPS
> Group Status") field(DTYP, "asynInt32") field(PINI, "1")
> field(PREC,"0")
> field(SCAN, "I/O Intr")
> field(INP,"@asyn(XPS1,0)XPS_STATUS")
> }
>
> I did an asyn trace and after starting up the motor records appears to be passing in the wrong values for the limits.
>
> 2013/11/01 14:03:31.880 motorAxisSetDouble[0,0]: error performing
> PositionerUserTravelLimitsSet for high limit=0.000000, status=-17
> 2013/11/01 14:03:31.888 drvMotorAsyn::writeFloat64, reason=4,
> value=0.000000
> 2013/11/01 14:03:31.895 devMotorAsyn::asynCallback:
> SMTR1608-9-B20-05:brag pasyn{Float64,Int32}->write returned
> 2013/11/01 14:03:31.904 motorAxisSetDouble[0,0]: error performing
> PositionerUserTravelLimitsSet for low limit=0.000000, status=-17
>
> Upon initialization I am pushing in a movement from the home position of 6.000 to 8.54439294393059, however the motor is passing in a value below the low limit for an absolute move and is therefore not moving.
>
> 2013/11/01 14:03:36.041 SendAndReceive unexpected response
> =-17,GroupMoveAbsolute (S.Pos,1.398175069718e-312),EndOfAPI
>
> epics> dbpr SMTR1608-9-B20-05:brag 10
> ACCL: 0.2 ACKS: NO_ALARM ACKT: YES ADEL: 0
> ALST: 0 ASG: ASP: (nil) ATHM: 0
> BACC: 0.2 BDST: 0 BKPT: 00 BVEL: 1
> CARD: -1 CBAK: 0xa0db8 CDIR: 1 CNEN: Disable
> DCOF: 0 DESC: Mono Brag DHLM: 59
> DIFF: 2.54329294393059 DINP:CONSTANT DIR: Pos
> DISA: 0 DISP: 0 DISS: NO_ALARM DISV: 1
> DLLM: 1 DLY: 0 DMOV: 1 DOL:CONSTANT
> DPVT: 0xa0dd0 DRBV: 6.0011 DSET: 0x40109680 DTYP: asynMotor
> DVAL: 8.54439294393059 EGU: degrees ERES: 1.0e-04
> EVNT: 0 FLNK:CONSTANT 0 FOF: 0 FOFF: Variable
> FRAC: 1 HHSV: NO_ALARM HIGH: 0 HIHI: 0
> HLM: 59 HLS: 0 HLSV: NO_ALARM HOMF: 0
> HOMR: 0 HOPR: 0 HSV: NO_ALARM HVEL: 0.1
> ICOF: 0 INIT: JAR: 5 JOGF: 0
> JOGR: 0 JVEL: 1 LCNT: 0
> LDVL: 8.54439294393059 LLM: 1 LLS: 0
> LLSV: NO_ALARM LOCK: NO LOLO: 0 LOPR: 0
> LOW: 0 LRLV: 0 LRVL: 85444 LSET: 0xa18f8
> LSPG: Go LSV: NO_ALARM LVAL: 8.54439294393059
> LVIO: 0 MDEL: 0 MIP: 0 MISS: 0
> MLIS: 00 0d 84 38 00 0d 82 f8 00 00 00 04 MLOK: 00 09 e1 10
> MLST: 0 MMAP: 0 MOVN: 0 MRES: 1.0e-04
> MSTA: 2050 NAME: SMTR1608-9-B20-05:brag NMAP: 0
> NSEV: NO_ALARM NSTA: NO_ALARM NTM: YES NTMF: 2
> OFF: 0 OMSL: supervisory OUT:INST_IO @asyn(XPS1,0)
> PACT: 0 PCOF: 0 PHAS: 0 PINI: NO
> POST: PP: 0 PPN: (nil) PPNR: (nil)
> PREC: 5 PREM: PRIO: LOW PROC: 0
> PUTF: 0 RBV: 6.0011 RCNT: 0 RDBD: 1.0e-04 RDBL:CONSTANT RDES: 0x651d0
> RDIF: 25433 REP: 60011
> RHLS: 0 RINP:CONSTANT RLLS: 0 RLNK:CONSTANT
> RLV: 0 RMOD: Default RMP: 60011 RPRO: 0
> RRBV: 60011 RRES: 0 RSET: 0x40109488 RTRY: 0
> RVAL: 85444 RVEL: 0 S: 50 SBAK: 50
> SBAS: 5 SCAN: Passive SDIS:CONSTANT SET: Use
> SEVR: NO_ALARM SMAX: 0 SPMG: Go SPVT: (nil)
> SREV: 200 SSET: 0 STAT: NO_ALARM STOO:CONSTANT
> STOP: 0 STUP: OFF SUSE: 0 SYNC: 0
> TDIR: 0 TIME: 2013-11-01 14:04:06.363958000 TPRO: 0
> TSE: 0 TSEL:CONSTANT TWF: 0 TWR: 0
> TWV: 1 UDF: 0 UEIP: No UREV: 0.02
> URIP: No VAL: 8.54439294393059 VBAS: 0.1
> VELO: 1 VERS: 6.5 VMAX: 0 VOF: 0
>
> What is even stranger is that the velocity and acceleration are then
> set to values much smaller than then should be (e-312)
>
> <image001.jpg>
>
> I am sure I must have something configured incorrectly. At this point it appears that the problem is associated with something configured incorrectly with the motor record. I would greatly appreciate any feedback or insight anyone can provide.
>
> Thanks,
>
> Tonia Batten, P.Eng
> Control System Analyst
> Canadian Light Source
> 44 Innovation Blvd.
> Saskatoon, SK S7N 2V3
> Tel: 306-657-3865
> Email: [email protected]<mailto:[email protected]>
>
>
>
>
- Replies:
- RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage Mark Rivers
- References:
- Newport XPS-Q8 and Motor Record - RV120HAHL stage Tonia Batten
- RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage Mark Rivers
- Re: Newport XPS-Q8 and Motor Record - RV120HAHL stage Pearson, Matthew R.
- RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage Tonia Batten
- RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage Mark Rivers
- RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage Tonia Batten
- RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage Mark Rivers
- Navigate by Date:
- Prev:
RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage Mark Rivers
- Next:
RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage Mark Rivers
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
<2013>
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage Mark Rivers
- Next:
RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage Mark Rivers
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
<2013>
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024