130 likes | 283 Views
Motor Support. Kay Kasemir ORNL/SNS kasemirk@ornl.gov Feb. 2013. ‘ motor ’ Record. Bigger building block than usual records. About 100 Fields: Current Position, desired Position Raw ticks, physical coordinates Assumed position vs. encoder position Acceleration, Speed
E N D
Motor Support Kay Kasemir ORNL/SNS kasemirk@ornl.gov Feb. 2013
‘motor’ Record Bigger building block than usual records. About 100 Fields: • Current Position, desired Position • Raw ticks, physical coordinates • Assumed position vs. encoder position • Acceleration, Speed • Backlash compensation • Retries • Limit switches, software limits • De-Energize when idle • …
Supported Motors Quite a few .. sites around the world contribute drivers Your mileage may vary It does what they needed at the time Simulation Oregon Micro Systems, Inc. (OMS) models; VME8, VME44, VME58, VS4, VX2, MAXv, PC68 and PC78. Highland Technologies model V540. Newport models MM3000, MM4000/5/6, PM500, ESP300/301/100 and XPSC8. Intelligent Motion Systems, Inc. (IMS) models IM483 and MDrive. Advanced Control Systems, Corp. model MCB-4B. Mclennan models PM304 and PM600. PhysikInstrumente (PI) GmbH & Co. model C-630, C-844, C-848, C-862, E-662, E-710 and E-816. MicroMo model MVP 2001 B02. Micos model MoCo dc controller. Delta Tau PMAC2-VME controller. Faulhaber MCDC2805 servo controller. Parker Hannifin, Compumotor Division, 6K Series controllers. New Focus, models; 8750 and 8752. ACS Motion Control, SPiiPlus model. Spectra-Physics, Encoder Mike Controller, Model 18011. Thorlabs, Piezo Controller, Model MDT695. Animatics Corporation SmartMotor. piezosystemjena GmbH EDS data interface module. Kohzu SC-200, SC-400, SC-800 stepper motor controllers. attocube systems AG ANC150 Piezo Step Controller. Aerotech Ensemble digital servo controller.
Full Example: Adding motor to IOC • configure/RELEASE:SUPPORT=/home/controls/epics/R3.14.12.2/supportASYN=$(SUPPORT)/asynMOTOR=$(SUPPORT)/motor • demoApp/src/Makefiledemo_DBD += asyn.dbddemo_DBD += drvAsynIPPort.dbddemo_DBD += motorSupport.dbddemo_DBD += motorSimSupport.dbddemo_DBD += devPC6K.dbddemo_LIBS += asyndemo_LIBS += motordemo_LIBS += motorSimSupportdemo_LIBS += Parker • Details depend on specific motor
Database: Simulated motor • demoApp/Db/sim_motor.db:record(motor,"$(S):mot1”){ field(DTYP, "asynMotor”) field(VELO, "1") field(VBAS, ".1") field(ACCL, ".2") field(OUT, "@asyn(motorSim1,0)") field(MRES, "0.01") field(PREC, "5") field(EGU, "mm") field(DHLM, "100") field(DLLM, "0")} • demoApp/src/MakefileDB += sim_motor.db
IOC Startup file • iocBoot/iocdemo/st.cmd:# Create simulated motors:# (card, axis, low limit, high limit, home, # cards, # axes)motorSimCreate(0, 0, 0, 36000, 0, 1, 4)# Setup the Asyn layer# (portname, low-level driver drvet name, card, number of axes on card)drvAsynMotorConfigure("motorSim1", "motorSim", 0, 4) • record(dbLoadRecords "db/sim_motor.db", "S=ky9")
Database: Parker 6K • record(motor,"$(S):controller0motor0"){… field(DTYP, "PC6K") field(OUT, "#C0 S0")…}
IOC Startup file # Setup the Asyn layerdrvAsynIPPortConfigure ("pc6k8","192.168.62.10:4001")asynOctetSetInputEos("pc6k8",0,">")asynOctetSetOutputEos("pc6k8",0,"\r")# Test direct communication within IOC shellasynOctetConnect("pc6k8", "pc6k8")asynOctetWriteRead("pc6k8", "TPC")# Maybe send init. commandsasynOctetWriteRead("pc6k8", "DRIVE00000000")# Log basic in/out textsasynSetTraceMask("pc6k8", 0, 0x2)asynSetTraceIOMask("pc6k8", 0, 2)# Parker/Compumotor# (1) maximum number of controllers in system# (2) motor task polling rate (min=1Hz, max=60Hz)PC6KSetup(1, 60)# (1) controller being configured# (2) asyn port name (string)PC6KConfig(0, "pc6k8") dbLoadRecords("db/pc6kmotor.db", "S=CG1D")
Parker 6K https://trac.sns.gov/slowcontrols/wiki/Parker6K : • Relationship between • Raw motor commands “1V46;1D1000;1GO;…” • Motor record • Spreadsheet
More • Pre/post move commands • Example: Energize, de-energize motor • ‘DMOV’ to check if motor is ‘done’ • …
‘Asyn’-Based motor support Original: Motor Record • Abstraction, common denominator for many different types of motor hardware • Fixed number of fields • How to support controllers that allow trajectory? Now: Asyn-based • Can add per-function records • Waveform: download trajectory points • BO: Start tracing trajectory • …
Summary • Motor record has many fields • Fundamentally • Write desired position to record • Monitor DMOV, maybe RBV • Details vary.Need to spend time w/ specific motor hardware