EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage
From: Tonia Batten <[email protected]>
To: Mark Rivers <[email protected]>, "Pearson, Matthew R." <[email protected]>
Cc: "[email protected]" <[email protected]>
Date: Mon, 4 Nov 2013 12:16:46 -0600
Hi Mark,

I added in some additional commenting in devMotorAsyn and the reason that the commands are coming out scrambled is because of the order of the enum definitions in asynMotorDriver.h and motor.h.  I have adjusted the order of the enums in motor.h  so that SET_VELOCITY comes before SET_VEL_BASE and this has resolved the problem with the commands being scrambled.  Can you confirm that SET_VELOCITY should be 5 and SET_VEL_BASE should be 6, as it appears that the configuration is backwards in a number of places (eg. NewportSrc/devMM4000.c).   I am just waiting for an IP address to be assigned to our controller so that I can test the linux-x86_64 build.  I am in the process of recompiling the newest version of all of the modules.  I will follow up when I am able to provide additional information.

Thanks, Tonia

devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag SET_VEL_BASE command=5, motorVelBase=6, dvalve=1000.000000
devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag SET_VELOCITY command=6, motorVelocity=5, dvalve=10000.000000

asynMotorDriver.h
protected:
    int motorMoveRel;
    #define FIRST_MOTOR_PARAM motorMoveRel
    int motorMoveAbs;
    int motorMoveVel;
    int motorHome;
    int motorStop;
    int motorVelocity;
    int motorVelBase;
    int motorAccel;
    int motorPosition;
    int motorEncoderPosition;
    int motorDeferMoves;
    int motorResolution;
    int motorEncRatio;
    int motorPgain;
    int motorIgain;
    int motorDgain;
    int motorHighLim;
    int motorLowLim;
    int motorSetClosedLoop;
    int motorStatus;
    int motorUpdateStatus;
    int motorStatusDirection;
    int motorStatusDone;
    int motorStatusHighLimit;
    int motorStatusAtHome;
    int motorStatusSlip;
    int motorStatusPowerOn;
    int motorStatusFollowingError;
    int motorStatusHome;
    int motorStatusHasEncoder;
    int motorStatusProblem;
    int motorStatusMoving;
    int motorStatusGainSupport;
    int motorStatusCommsError;
    int motorStatusLowLimit;
    int motorStatusHomed;
    #define LAST_MOTOR_PARAM motorStatusHomed

motor.h
typedef enum  {
        MOVE_ABS,       /* Absolute Move. */
        MOVE_REL,       /* Relative Move. */
        HOME_FOR,       /* Home Forward. */
        HOME_REV,       /* Home Reverse. */
        LOAD_POS,       /* Load Position. */
        SET_VEL_BASE,   /* Set Minimum Velocity. */
        SET_VELOCITY,   /* Set Jog and Trajectory Velocity. */
        SET_ACCEL,      /* Set Acceleration. */
        GO,             /* Start previously programmed move. */
        SET_ENC_RATIO,  /* Set Encoder Ratio. */
        GET_INFO,       /* Update Motor Status. */
        STOP_AXIS,      /* Stop Axis Motion. */
        JOG,            /* Momentary Jog. */
        SET_PGAIN,      /* Set Proportional Gain. */
        SET_IGAIN,      /* Set Integral Gain. */
        SET_DGAIN,      /* Set Derivative Gain. */
        ENABLE_TORQUE,  /* Enable Servo Closed-Loop Control. */
        DISABL_TORQUE,  /* Disable Servo Closed-Loop Control. */
        PRIMITIVE,      /* Primitive Controller command. */
        SET_HIGH_LIMIT, /* Set High Travel Limit. */
        SET_LOW_LIMIT,  /* Set Low Travel Limit. */
        JOG_VELOCITY,   /* Change Jog velocity. */
        SET_RESOLUTION  /* Set resolution */
} motor_cmnd;

-----Original Message-----
From: Mark Rivers [mailto:[email protected]]
Sent: November-04-13 10:08 AM
To: Tonia Batten; Pearson, Matthew R.
Cc: [email protected]
Subject: RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage

Hi Tonia,

OK, there are a number of strange things here:

Note that we queued the messages in the order command=5 then command=6.  For command=5 pmsg=0x8f4fc, and command=6 pmsg=0x95384.

2013/11/04 09:04:20.347 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=5, pact=1, value=1000.000000
devAsynMotor::build_trans, calling queueRequest, pmsg=0x8f4fc, command=6, interface=1, dvalue=1000.000000
2013/11/04 09:04:20.351 XPS1 addr 0 queueRequest priority 0 not lockHolder

2013/11/04 09:04:20.356 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=6, pact=1, value=10000.000000
devAsynMotor::build_trans, calling queueRequest, pmsg=0x95384, command=5, interface=1, dvalue=10000.000001
2013/11/04 09:04:20.360 XPS1 addr 0 queueRequest priority 0 not lockHolder


But in the asynCallback function we received the messages in the opposite order, first 6 then 5.  Moreover the pmsg pointers are now reversed, but the pmsg->command values are correct!

2013/11/04 09:04:20.372 asynManager::portThread port=XPS1 callback
2013/11/04 09:04:20.372 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=6, ivalue=0, dvalue=0.000000
devAsynMotor::asynCallback, entry, pmsg=0x8f4fc, command=6, interface=1, dvalue=0.000000

2013/11/04 09:04:20.390 asynManager::portThread port=XPS1 callback
2013/11/04 09:04:20.392 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=5, ivalue=0, dvalue=0.000000
devAsynMotor::asynCallback, entry, pmsg=0x95384, command=5, interface=1, dvalue=0.000000


This makes no sense at all to me.

In my experience there are 2 things that can cause this type of strange behavior.

1) You have not rebuilt everything with the current version of all modules.  Please make sure you have done that.  Rebuild everything that your application depends on (base, asyn, motor, etc.)

2) There is a compiler bug.  Sometimes this can be proven by compiling everything with a lower value of optimization.  For example, if it is compiling with -O3, try adding

USR_CFLAGS += -O0

to reduce the optimization.

Since you are running on the ARM architecture, I would also recommend doing the following.  Using exactly the same source code you are using now, compile for a Linux Intel X86 architecture (e.g. linux-x86) and run on that architecture.  If it works then we know the problem is somehow specific to the ARM.  If it fails we know it is something about your site, because I am quite sure motor R6-5 worked on the XPS on our linux-x86 hosts.

Mark




-----Original Message-----
From: Tonia Batten [mailto:[email protected]]
Sent: Monday, November 04, 2013 9:14 AM
To: Mark Rivers; Pearson, Matthew R.
Cc: [email protected]
Subject: RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage

Hi Mark,

Thanks again for your feedback.

Here is the output after adding in the addition printf statements.  It does appear that devMotorAsyn::build_trans   is queuing the correct information but somehow the dvalue is lost before or when asynCallback retrieves the motorAsynMessage.

Regards, Tonia

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: 0x90bd8       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: 0x90bf0       DRBV: 6
DSET: 0x4010b688    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: 0x911d8       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 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: 0x65140       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: 0x4010b490    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
2013/11/04 09:04:14.495 XPSPoller: S.Pos axisStatus=11

epics> dbpf SMTR1608-9-B20-05:brag 8
2013/11/04 09:04:20.333 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/04 09:04:20.347 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=5, pact=1, value=1000.000000
devAsynMotor::build_trans, calling queueRequest, pmsg=0x8f4fc, command=6, interface=1, dvalue=1000.000000
2013/11/04 09:04:20.351 XPS1 addr 0 queueRequest priority 0 not lockHolder
motorRecord.cc do_work line 2305 - vbase = 1000.000000
motorRecord.cc do_work line 2306 - velocity = 10000.000000
2013/11/04 09:04:20.356 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=6, pact=1, value=10000.000000
devAsynMotor::build_trans, calling queueRequest, pmsg=0x95384, command=5, interface=1, dvalue=10000.000001
2013/11/04 09:04:20.360 XPS1 addr 0 queueRequest priority 0 not lockHolder
motorRecord.cc do_work line 2308 - velocity = 10000.000000
motorRecord.cc do_work line 2310 - accel = 45000.000000
2013/11/04 09:04:20.364 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=7, pact=1, value=45000.000000
devAsynMotor::build_trans, calling queueRequest, pmsg=0x1915c, command=7, interface=1, dvalue=45000.000001
2013/11/04 09:04:20.365 XPS1 addr 0 queueRequest priority 0 not lockHolder
motorRecord.cc do_work line 2312 - accel = 45000.000000
motorRecord.cc do_work line 2320 - position = 80000.000000
2013/11/04 09:04:20.365 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/04 09:04:20.366 devMotorAsyn::send_msg: SMTR1608-9-B20-05:brag command=8, pact=1, value=0.000000
devAsynMotor::build_trans, calling queueRequest, pmsg=0x1929c, command=0, interface=1, dvalue=0.000000
2013/11/04 09:04:20.367 XPS1 addr 0 queueRequest priority 0 not lockHolder
DBR_DOUBLE:         8
2013/11/04 09:04:20.372 asynManager::portThread port=XPS1 callback
2013/11/04 09:04:20.372 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=6, ivalue=0, dvalue=0.000000
devAsynMotor::asynCallback, entry, pmsg=0x8f4fc, command=6, interface=1, dvalue=0.000000
2013/11/04 09:04:20.384 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=6, ivalue=0, dvalue=0.000000
2013/11/04 09:04:20.386 drvMotorAsyn::writeFloat64, reason=101, pasynUser=0x95170 pAxis=0x852c8
2013/11/04 09:04:20.388 drvMotorAsyn::writeFloat64, reason=101, value=0.000000, status=0
2013/11/04 09:04:20.390 asynManager::portThread port=XPS1 callback
2013/11/04 09:04:20.392 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=5, ivalue=0, dvalue=0.000000
devAsynMotor::asynCallback, entry, pmsg=0x95384, command=5, interface=1, dvalue=0.000000
2013/11/04 09:04:20.402 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=5, ivalue=0, dvalue=0.000000
2013/11/04 09:04:20.407 drvMotorAsyn::writeFloat64, reason=100, pasynUser=0xa9938 pAxis=0x852c8
2013/11/04 09:04:20.412 drvMotorAsyn::writeFloat64, reason=100, value=0.000000, status=0
 Line:7492013/11/04 09:04:20.419 asynManager::portThread port=XPS1 callback
2013/11/04 09:04:20.424 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=7, ivalue=0, dvalue=0.000000
devAsynMotor::asynCallback, entry, pmsg=0x1915c, command=7, interface=1, dvalue=0.000000
2013/11/04 09:04:20.428 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=7, ivalue=0, dvalue=0.000000
2013/11/04 09:04:20.431 drvMotorAsyn::writeFloat64, reason=102, pasynUser=0xa9a50 pAxis=0x852c8
2013/11/04 09:04:20.434 drvMotorAsyn::writeFloat64, reason=102, value=0.000000, status=0
2013/11/04 09:04:20.436 asynManager::portThread port=XPS1 callback
2013/11/04 09:04:20.438 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=0, ivalue=0, dvalue=0.000000
devAsynMotor::asynCallback, entry, pmsg=0x1929c, command=0, interface=1, dvalue=0.000000
2013/11/04 09:04:20.440 devMotorAsyn::asynCallback: SMTR1608-9-B20-05:brag command=0, ivalue=0, dvalue=0.000000
2013/11/04 09:04:20.442 drvMotorAsyn::writeFloat64, reason=104, pasynUser=0xa9b68 pAxis=0x852c8
2013/11/04 09:04:20.452 Set card 0, axis 0 move to 0.000000, min vel=0.000000, max_vel=0.000000, accel=0.000000
2013/11/04 09:04:20.467 SendAndReceive unexpected response =-17,GroupMoveAbsolute (S.Pos,1.258089395588e-312),EndOfAPI
2013/11/04 09:04:20.472 SMTR1608-9-B20-05:brag devMotorAsyn::statusCallback new value=[p:60000.000000,e:60000.000000,s:808]  P
2013/11/04 09:04:20.477 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::interruptCallbackInput new value=11
2013/11/04 09:04:20.482 drvMotorAsyn::writeFloat64, reason=104, value=0.000000, status=0
2013/11/04 09:04:20.489 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=1
2013/11/04 09:04:20.499 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getCallbackValue from ringBuffer value=11
2013/11/04 09:04:20.507 XPSPoller: S.Pos axisStatus=11
2013/11/04 09:04:20.518 SMTR1608-9-B20-05:brag devMotorAsyn::statusCallback new value=[p:60000.000000,e:60000.000000,s:80a]
2013/11/04 09:04:20.524 SMTR1608-9-B20-05:brag devMotorAsyn::update_values, needUpdate=1
2013/11/04 09:04:20.527 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::interruptCallbackInput new value=11
2013/11/04 09:04:20.531 SMTR1608-9-B20-05:brag:XPS_STATUS devAsynInt32::getCallbackValue from ringBuffer value=11
2013/11/04 09:04:20.544 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: 0x90bd8       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: 0x90bf0       DRBV: 6
DSET: 0x4010b688    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: 0x911d8       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 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: 0x65140       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: 0x4010b490    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-04 09:04:20.526891000     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
epics> 2013/11/04 09:04:25.775 XPSPoller: S.Pos axisStatus=11

-----Original Message-----
From: Mark Rivers [mailto:[email protected]]
Sent: November-03-13 6:49 PM
To: Tonia Batten; Pearson, Matthew R.
Cc: [email protected]
Subject: RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage

Hi Tonia,

I think the problem with the high and low limits is the same as the problem with the velocity, acceleration, and target position.  The values getting to devMotorAsyn::asynCallback are always 0.  We need to figure out why.

Device support devMotorAsyn::build_trans  allocates a motorAsynMessage structure and sets the .command, .interface and .dvalue fields of that structure.  It then sets pasynUser->userData to point to this structure and queues a request to asynManager.  When the queue element is run on the asyn port thread it calls devMotorAsyn::asynCallback.  asynCallback retrieves the motorAsynMessage from pasynUser, and prints the .command and .dvalue fields.  It appears that .command is correct, and .dvalue is not correct, it is always 0.  This is very strange.

I think you should dump out the contents of the motorAsynMessage structure just before the call to queueRequest, and upon entry into asynCallback.

in devMotorAsyn::build_trans add the following 2 lines:

printf("devAsynMotor::build_trans, calling queueRequest, pmsg=%p, command=%d, interface=%d, dvalue=%f\n",
pmsg, pmsg->command, pmsg->interface, pmsg->value);

    /* Queue asyn request, so we get a callback when driver is ready */
    pasynUser->reason = pPvt->driverReasons[pmsg->command];


In asynCallback add the following 2 lines:

printf("devAsynMotor::asynCallback, entry, pmsg=%p, command=%d, interface=%d, dvalue=%f\n",
pmsg, pmsg->command, pmsg->interface, pmsg->value);

    asynPrint(pasynUser, ASYN_TRACE_FLOW,
              "devMotorAsyn::asynCallback: %s command=%d, ivalue=%d, dvalue=%f\n",
              pmr->name, pmsg->command, pmsg->ivalue, pmsg->dvalue);
    pasynUser->reason = pPvt->driverReasons[pmsg->command];


Mark


________________________________________
From: Tonia Batten [[email protected]]
Sent: Sunday, November 03, 2013 2:10 PM
To: Mark Rivers; Pearson, Matthew R.
Cc: [email protected]
Subject: RE: Newport XPS-Q8 and Motor Record - RV120HAHL stage

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^2 HomeSearchMaximumVelocity = 4
> ;--- units / s HomeSearchMaximumAcceleration = 16 ;--- units / s^2
> 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
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: Device support for Agilent 34401A Zenon Szalata
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  <20132014  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  <20132014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 20 Apr 2015 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·