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 2025 | 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 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Newport XPS-Q8 and Motor Record - RV120HAHL stage |
From: | Tonia Batten <[email protected]> |
To: | "[email protected]" <[email protected]> |
Date: | Fri, 1 Nov 2013 15:13:18 -0600 |
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) 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 |