forked from epics_driver_modules/motorBase
Removed ACRSrc; Added motorACR submodule
This commit is contained in:
@@ -73,3 +73,6 @@
|
||||
[submodule "modules/motorScriptMotor"]
|
||||
path = modules/motorScriptMotor
|
||||
url = https://github.com/epics-motor/motorScriptMotor.git
|
||||
[submodule "modules/motorACR"]
|
||||
path = modules/motorACR
|
||||
url = https://github.com/epics-motor/motorACR.git
|
||||
|
||||
@@ -1,245 +0,0 @@
|
||||
file "$(TOP)/db/basic_asyn_motor.db"
|
||||
{
|
||||
pattern
|
||||
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
|
||||
{IOC:, 1, "m$(N)", "asynMotor", ACR1, 0, "motor $(N)", mm, Pos, .05, .01, .5, 0, 1, .2, 1.25e-7, 5, 200, -2, ""}
|
||||
{IOC:, 2, "m$(N)", "asynMotor", ACR2, 0, "motor $(N)", mm, Pos, .05, .01, .5, 0, 1, .2, 1.25e-7, 5, 200, -2, ""}
|
||||
}
|
||||
|
||||
file "$(TOP)/db/ACRAux.template"
|
||||
{
|
||||
pattern
|
||||
{P, R, PORT, ADDR}
|
||||
{IOC:, m1:, ACR1, 0}
|
||||
{IOC:, m2:, ACR2, 0}
|
||||
}
|
||||
|
||||
file "$(TOP)/db/ACRAuxLi.template"
|
||||
{
|
||||
pattern
|
||||
{P, R, PORT, SCAN}
|
||||
{IOC:ACR1:, li, ACR1, "I/O Intr"}
|
||||
{IOC:ACR2:, li, ACR2, "I/O Intr"}
|
||||
}
|
||||
|
||||
file "$(TOP)/db/ACRAuxRead.template"
|
||||
{
|
||||
pattern
|
||||
{P, R, PORT, SCAN}
|
||||
{IOC:ACR1:, Read, ACR1, "1 second"}
|
||||
{IOC:ACR2:, Read, ACR2, "1 second"}
|
||||
}
|
||||
|
||||
file "$(TOP)/db/ACRAuxBi.template"
|
||||
{
|
||||
pattern
|
||||
{P, R, PORT, MASK, SCAN}
|
||||
{IOC:ACR1:, bi0, ACR1, 0x00000001, "I/O Intr"}
|
||||
{IOC:ACR1:, bi1, ACR1, 0x00000002, "I/O Intr"}
|
||||
{IOC:ACR1:, bi2, ACR1, 0x00000004, "I/O Intr"}
|
||||
{IOC:ACR1:, bi3, ACR1, 0x00000008, "I/O Intr"}
|
||||
{IOC:ACR1:, bi4, ACR1, 0x00000010, "I/O Intr"}
|
||||
{IOC:ACR1:, bi5, ACR1, 0x00000020, "I/O Intr"}
|
||||
{IOC:ACR1:, bi6, ACR1, 0x00000040, "I/O Intr"}
|
||||
{IOC:ACR1:, bi7, ACR1, 0x00000080, "I/O Intr"}
|
||||
{IOC:ACR1:, bi8, ACR1, 0x00000100, "I/O Intr"}
|
||||
{IOC:ACR1:, bi9, ACR1, 0x00000200, "I/O Intr"}
|
||||
{IOC:ACR1:, bi10, ACR1, 0x00000400, "I/O Intr"}
|
||||
{IOC:ACR1:, bi11, ACR1, 0x00000800, "I/O Intr"}
|
||||
{IOC:ACR1:, bi12, ACR1, 0x00001000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi13, ACR1, 0x00002000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi14, ACR1, 0x00004000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi15, ACR1, 0x00008000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi16, ACR1, 0x00010000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi17, ACR1, 0x00020000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi18, ACR1, 0x00040000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi19, ACR1, 0x00080000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi20, ACR1, 0x00100000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi21, ACR1, 0x00200000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi22, ACR1, 0x00400000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi23, ACR1, 0x00800000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi24, ACR1, 0x01000000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi25, ACR1, 0x02000000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi26, ACR1, 0x04000000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi27, ACR1, 0x08000000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi28, ACR1, 0x10000000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi29, ACR1, 0x20000000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi30, ACR1, 0x40000000, "I/O Intr"}
|
||||
{IOC:ACR1:, bi31, ACR1, 0x80000000, "I/O Intr"}
|
||||
#
|
||||
{IOC:ACR2:, bi0, ACR2, 0x00000001, "I/O Intr"}
|
||||
{IOC:ACR2:, bi1, ACR2, 0x00000002, "I/O Intr"}
|
||||
{IOC:ACR2:, bi2, ACR2, 0x00000004, "I/O Intr"}
|
||||
{IOC:ACR2:, bi3, ACR2, 0x00000008, "I/O Intr"}
|
||||
{IOC:ACR2:, bi4, ACR2, 0x00000010, "I/O Intr"}
|
||||
{IOC:ACR2:, bi5, ACR2, 0x00000020, "I/O Intr"}
|
||||
{IOC:ACR2:, bi6, ACR2, 0x00000040, "I/O Intr"}
|
||||
{IOC:ACR2:, bi7, ACR2, 0x00000080, "I/O Intr"}
|
||||
{IOC:ACR2:, bi8, ACR2, 0x00000100, "I/O Intr"}
|
||||
{IOC:ACR2:, bi9, ACR2, 0x00000200, "I/O Intr"}
|
||||
{IOC:ACR2:, bi10, ACR2, 0x00000400, "I/O Intr"}
|
||||
{IOC:ACR2:, bi11, ACR2, 0x00000800, "I/O Intr"}
|
||||
{IOC:ACR2:, bi12, ACR2, 0x00001000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi13, ACR2, 0x00002000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi14, ACR2, 0x00004000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi15, ACR2, 0x00008000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi16, ACR2, 0x00010000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi17, ACR2, 0x00020000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi18, ACR2, 0x00040000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi19, ACR2, 0x00080000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi20, ACR2, 0x00100000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi21, ACR2, 0x00200000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi22, ACR2, 0x00400000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi23, ACR2, 0x00800000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi24, ACR2, 0x01000000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi25, ACR2, 0x02000000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi26, ACR2, 0x04000000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi27, ACR2, 0x08000000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi28, ACR2, 0x10000000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi29, ACR2, 0x20000000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi30, ACR2, 0x40000000, "I/O Intr"}
|
||||
{IOC:ACR2:, bi31, ACR2, 0x80000000, "I/O Intr"}
|
||||
}
|
||||
|
||||
file "$(TOP)/db/ACRAuxBo.template"
|
||||
{
|
||||
pattern
|
||||
{P, R, PORT, MASK}
|
||||
{IOC:ACR1:, bo0, ACR1, 0x00000001}
|
||||
{IOC:ACR1:, bo1, ACR1, 0x00000002}
|
||||
{IOC:ACR1:, bo2, ACR1, 0x00000004}
|
||||
{IOC:ACR1:, bo3, ACR1, 0x00000008}
|
||||
{IOC:ACR1:, bo4, ACR1, 0x00000010}
|
||||
{IOC:ACR1:, bo5, ACR1, 0x00000020}
|
||||
{IOC:ACR1:, bo6, ACR1, 0x00000040}
|
||||
{IOC:ACR1:, bo7, ACR1, 0x00000080}
|
||||
{IOC:ACR1:, bo8, ACR1, 0x00000100}
|
||||
{IOC:ACR1:, bo9, ACR1, 0x00000200}
|
||||
{IOC:ACR1:, bo10, ACR1, 0x00000400}
|
||||
{IOC:ACR1:, bo11, ACR1, 0x00000800}
|
||||
{IOC:ACR1:, bo12, ACR1, 0x00001000}
|
||||
{IOC:ACR1:, bo13, ACR1, 0x00002000}
|
||||
{IOC:ACR1:, bo14, ACR1, 0x00004000}
|
||||
{IOC:ACR1:, bo15, ACR1, 0x00008000}
|
||||
{IOC:ACR1:, bo16, ACR1, 0x00010000}
|
||||
{IOC:ACR1:, bo17, ACR1, 0x00020000}
|
||||
{IOC:ACR1:, bo18, ACR1, 0x00040000}
|
||||
{IOC:ACR1:, bo19, ACR1, 0x00080000}
|
||||
{IOC:ACR1:, bo20, ACR1, 0x00100000}
|
||||
{IOC:ACR1:, bo21, ACR1, 0x00200000}
|
||||
{IOC:ACR1:, bo22, ACR1, 0x00400000}
|
||||
{IOC:ACR1:, bo23, ACR1, 0x00800000}
|
||||
{IOC:ACR1:, bo24, ACR1, 0x01000000}
|
||||
{IOC:ACR1:, bo25, ACR1, 0x02000000}
|
||||
{IOC:ACR1:, bo26, ACR1, 0x04000000}
|
||||
{IOC:ACR1:, bo27, ACR1, 0x08000000}
|
||||
{IOC:ACR1:, bo28, ACR1, 0x10000000}
|
||||
{IOC:ACR1:, bo29, ACR1, 0x20000000}
|
||||
{IOC:ACR1:, bo30, ACR1, 0x40000000}
|
||||
{IOC:ACR1:, bo31, ACR1, 0x80000000}
|
||||
#
|
||||
{IOC:ACR2:, bo0, ACR2, 0x00000001}
|
||||
{IOC:ACR2:, bo1, ACR2, 0x00000002}
|
||||
{IOC:ACR2:, bo2, ACR2, 0x00000004}
|
||||
{IOC:ACR2:, bo3, ACR2, 0x00000008}
|
||||
{IOC:ACR2:, bo4, ACR2, 0x00000010}
|
||||
{IOC:ACR2:, bo5, ACR2, 0x00000020}
|
||||
{IOC:ACR2:, bo6, ACR2, 0x00000040}
|
||||
{IOC:ACR2:, bo7, ACR2, 0x00000080}
|
||||
{IOC:ACR2:, bo8, ACR2, 0x00000100}
|
||||
{IOC:ACR2:, bo9, ACR2, 0x00000200}
|
||||
{IOC:ACR2:, bo10, ACR2, 0x00000400}
|
||||
{IOC:ACR2:, bo11, ACR2, 0x00000800}
|
||||
{IOC:ACR2:, bo12, ACR2, 0x00001000}
|
||||
{IOC:ACR2:, bo13, ACR2, 0x00002000}
|
||||
{IOC:ACR2:, bo14, ACR2, 0x00004000}
|
||||
{IOC:ACR2:, bo15, ACR2, 0x00008000}
|
||||
{IOC:ACR2:, bo16, ACR2, 0x00010000}
|
||||
{IOC:ACR2:, bo17, ACR2, 0x00020000}
|
||||
{IOC:ACR2:, bo18, ACR2, 0x00040000}
|
||||
{IOC:ACR2:, bo19, ACR2, 0x00080000}
|
||||
{IOC:ACR2:, bo20, ACR2, 0x00100000}
|
||||
{IOC:ACR2:, bo21, ACR2, 0x00200000}
|
||||
{IOC:ACR2:, bo22, ACR2, 0x00400000}
|
||||
{IOC:ACR2:, bo23, ACR2, 0x00800000}
|
||||
{IOC:ACR2:, bo24, ACR2, 0x01000000}
|
||||
{IOC:ACR2:, bo25, ACR2, 0x02000000}
|
||||
{IOC:ACR2:, bo26, ACR2, 0x04000000}
|
||||
{IOC:ACR2:, bo27, ACR2, 0x08000000}
|
||||
{IOC:ACR2:, bo28, ACR2, 0x10000000}
|
||||
{IOC:ACR2:, bo29, ACR2, 0x20000000}
|
||||
{IOC:ACR2:, bo30, ACR2, 0x40000000}
|
||||
{IOC:ACR2:, bo31, ACR2, 0x80000000}
|
||||
}
|
||||
|
||||
file "$(TOP)/db/ACRAuxBoRBV.template"
|
||||
{
|
||||
pattern
|
||||
{P, R, PORT, MASK, SCAN}
|
||||
{IOC:ACR1:, boRBV0, ACR1, 0x00000001, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV1, ACR1, 0x00000002, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV2, ACR1, 0x00000004, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV3, ACR1, 0x00000008, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV4, ACR1, 0x00000010, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV5, ACR1, 0x00000020, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV6, ACR1, 0x00000040, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV7, ACR1, 0x00000080, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV8, ACR1, 0x00000100, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV9, ACR1, 0x00000200, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV10, ACR1, 0x00000400, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV11, ACR1, 0x00000800, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV12, ACR1, 0x00001000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV13, ACR1, 0x00002000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV14, ACR1, 0x00004000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV15, ACR1, 0x00008000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV16, ACR1, 0x00010000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV17, ACR1, 0x00020000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV18, ACR1, 0x00040000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV19, ACR1, 0x00080000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV20, ACR1, 0x00100000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV21, ACR1, 0x00200000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV22, ACR1, 0x00400000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV23, ACR1, 0x00800000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV24, ACR1, 0x01000000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV25, ACR1, 0x02000000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV26, ACR1, 0x04000000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV27, ACR1, 0x08000000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV28, ACR1, 0x10000000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV29, ACR1, 0x20000000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV30, ACR1, 0x40000000, "I/O Intr"}
|
||||
{IOC:ACR1:, boRBV31, ACR1, 0x80000000, "I/O Intr"}
|
||||
#
|
||||
{IOC:ACR2:, boRBV0, ACR2, 0x00000001, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV1, ACR2, 0x00000002, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV2, ACR2, 0x00000004, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV3, ACR2, 0x00000008, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV4, ACR2, 0x00000010, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV5, ACR2, 0x00000020, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV6, ACR2, 0x00000040, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV7, ACR2, 0x00000080, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV8, ACR2, 0x00000100, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV9, ACR2, 0x00000200, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV10, ACR2, 0x00000400, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV11, ACR2, 0x00000800, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV12, ACR2, 0x00001000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV13, ACR2, 0x00002000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV14, ACR2, 0x00004000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV15, ACR2, 0x00008000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV16, ACR2, 0x00010000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV17, ACR2, 0x00020000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV18, ACR2, 0x00040000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV19, ACR2, 0x00080000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV20, ACR2, 0x00100000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV21, ACR2, 0x00200000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV22, ACR2, 0x00400000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV23, ACR2, 0x00800000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV24, ACR2, 0x01000000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV25, ACR2, 0x02000000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV26, ACR2, 0x04000000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV27, ACR2, 0x08000000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV28, ACR2, 0x10000000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV29, ACR2, 0x20000000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV30, ACR2, 0x40000000, "I/O Intr"}
|
||||
{IOC:ACR2:, boRBV31, ACR2, 0x80000000, "I/O Intr"}
|
||||
}
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
#errlogInit(5000)
|
||||
< envPaths
|
||||
# Tell EPICS all about the record types, device-support modules, drivers,
|
||||
# etc. in this build from CARS
|
||||
dbLoadDatabase("../../dbd/WithAsyn.dbd")
|
||||
WithAsyn_registerRecordDeviceDriver(pdbbase)
|
||||
|
||||
### Motors
|
||||
dbLoadTemplate "motor.substitutions.acr"
|
||||
|
||||
drvAsynIPPortConfigure("ARIES1", "gse-aries1:5002", 0, 0, 0)
|
||||
#asynSetTraceMask("ARIES1", 0, 3)
|
||||
asynSetTraceIOMask("ARIES1", 0, 2)
|
||||
asynOctetSetInputEos("ARIES1",0,"\r")
|
||||
asynOctetSetOutputEos("ARIES1",0,"\r")
|
||||
|
||||
drvAsynIPPortConfigure("ARIES2", "gse-aries2:5002", 0, 0, 0)
|
||||
#asynSetTraceMask("ARIES2", 0, 3)
|
||||
asynSetTraceIOMask("ARIES2", 0, 2)
|
||||
asynOctetSetInputEos("ARIES2",0,"\r")
|
||||
asynOctetSetOutputEos("ARIES2",0,"\r")
|
||||
|
||||
dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=IOC:, R=asyn1, PORT=ARIES1, ADDR=0, OMAX=256, IMAX=256")
|
||||
dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=IOC:, R=asyn2, PORT=ARIES1, ADDR=0, OMAX=256, IMAX=256")
|
||||
|
||||
# PORT, ACR_PORT, number of axes, active poll period (ms), idle poll period (ms)
|
||||
ACRCreateController("ACR1", "ARIES1", 1, 20, 1000)
|
||||
ACRCreateController("ACR2", "ARIES2", 1, 20, 1000)
|
||||
|
||||
#asynSetTraceMask("ACR1", 0, 255)
|
||||
asynSetTraceIOMask("ACR1", 0, 2)
|
||||
#asynSetTraceMask("ACR2", 0, 255)
|
||||
asynSetTraceIOMask("ACR2", 0, 2)
|
||||
|
||||
iocInit
|
||||
|
||||
# This IOC does not use save/restore, so set values of some PVs
|
||||
dbpf("IOC:m1.RTRY", "0")
|
||||
dbpf("IOC:m1.TWV", "0.1")
|
||||
dbpf("IOC:m2.RTRY", "0")
|
||||
dbpf("IOC:m2.TWV", "0.1")
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ include $(TOP)/configure/CONFIG
|
||||
#SUBMODULES += motorVendor
|
||||
SUBMODULES += motorOms
|
||||
SUBMODULES += motorNewport
|
||||
SUBMODULES += motorACR
|
||||
SUBMODULES += motorAcs
|
||||
SUBMODULES += motorAcsTech80
|
||||
SUBMODULES += motorAerotech
|
||||
|
||||
Submodule
+1
Submodule modules/motorACR added at 8c3ad0120b
@@ -1,507 +0,0 @@
|
||||
/*
|
||||
FILENAME... ACRMotorDriver.cpp
|
||||
USAGE... Motor driver support for the Parker ACR series of controllers, including the Aries.
|
||||
|
||||
Mark Rivers
|
||||
March 4, 2011
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <iocsh.h>
|
||||
#include <epicsThread.h>
|
||||
|
||||
#include <asynOctetSyncIO.h>
|
||||
|
||||
#include "asynMotorController.h"
|
||||
#include "asynMotorAxis.h"
|
||||
|
||||
#include <epicsExport.h>
|
||||
#include "ACRMotorDriver.h"
|
||||
|
||||
#define CtlY 25
|
||||
|
||||
static const char *driverName = "ACRMotorDriver";
|
||||
|
||||
/** Creates a new ACRController object.
|
||||
* \param[in] portName The name of the asyn port that will be created for this driver
|
||||
* \param[in] ACRPortName The name of the drvAsynIPPPort that was created previously to connect to the ACR controller
|
||||
* \param[in] numAxes The number of axes that this controller supports
|
||||
* \param[in] movingPollPeriod The time between polls when any axis is moving
|
||||
* \param[in] idlePollPeriod The time between polls when no axis is moving
|
||||
*/
|
||||
ACRController::ACRController(const char *portName, const char *ACRPortName, int numAxes,
|
||||
double movingPollPeriod, double idlePollPeriod)
|
||||
: asynMotorController(portName, numAxes, NUM_ACR_PARAMS,
|
||||
asynUInt32DigitalMask,
|
||||
asynUInt32DigitalMask,
|
||||
ASYN_CANBLOCK | ASYN_MULTIDEVICE,
|
||||
1, // autoconnect
|
||||
0, 0) // Default priority and stack size
|
||||
{
|
||||
int axis;
|
||||
asynStatus status;
|
||||
static const char *functionName = "ACRController";
|
||||
|
||||
binaryInReg_ = 4096;
|
||||
binaryOutReg_ = 4097;
|
||||
|
||||
// Create controller-specific parameters
|
||||
createParam(ACRJerkString, asynParamFloat64, &ACRJerk_);
|
||||
createParam(ACRReadBinaryIOString, asynParamInt32, &ACRReadBinaryIO_);
|
||||
createParam(ACRBinaryInString, asynParamUInt32Digital, &ACRBinaryIn_);
|
||||
createParam(ACRBinaryOutString, asynParamUInt32Digital, &ACRBinaryOut_);
|
||||
createParam(ACRBinaryOutRBVString, asynParamUInt32Digital, &ACRBinaryOutRBV_);
|
||||
|
||||
/* Connect to ACR controller */
|
||||
status = pasynOctetSyncIO->connect(ACRPortName, 0, &pasynUserController_, NULL);
|
||||
if (status) {
|
||||
asynPrint(this->pasynUserSelf, ASYN_TRACE_ERROR,
|
||||
"%s:%s: cannot connect to ACR controller\n",
|
||||
driverName, functionName);
|
||||
}
|
||||
// Turn off command echoing
|
||||
sprintf(outString_, "ECHO 4");
|
||||
writeController();
|
||||
// Wait a short while so that any responses to the above commands have time to arrive so we can flush
|
||||
// them in the next writeReadController()
|
||||
epicsThreadSleep(0.5);
|
||||
// Read the binary I/O registers once
|
||||
readBinaryIO();
|
||||
// Set the output=output readback so bi records reflect current state
|
||||
setUIntDigitalParam(0, ACRBinaryOut_, binaryOutRBV_, 0xFFFFFFFF);
|
||||
// Create the axis objects
|
||||
for (axis=0; axis<numAxes; axis++) {
|
||||
new ACRAxis(this, axis);
|
||||
}
|
||||
|
||||
startPoller(movingPollPeriod, idlePollPeriod, 2);
|
||||
}
|
||||
|
||||
|
||||
/** Creates a new ACRController object.
|
||||
* Configuration command, called directly or from iocsh
|
||||
* \param[in] portName The name of the asyn port that will be created for this driver
|
||||
* \param[in] ACRPortName The name of the drvAsynIPPPort that was created previously to connect to the ACR controller
|
||||
* \param[in] numAxes The number of axes that this controller supports
|
||||
* \param[in] movingPollPeriod The time in ms between polls when any axis is moving
|
||||
* \param[in] idlePollPeriod The time in ms between polls when no axis is moving
|
||||
*/
|
||||
extern "C" int ACRCreateController(const char *portName, const char *ACRPortName, int numAxes,
|
||||
int movingPollPeriod, int idlePollPeriod)
|
||||
{
|
||||
new ACRController(portName, ACRPortName, numAxes, movingPollPeriod/1000., idlePollPeriod/1000.);
|
||||
return(asynSuccess);
|
||||
}
|
||||
|
||||
/** Reports on status of the driver
|
||||
* \param[in] fp The file pointer on which report information will be written
|
||||
* \param[in] level The level of report detail desired
|
||||
*
|
||||
* If details > 0 then information is printed about each axis.
|
||||
* After printing controller-specific information calls asynMotorController::report()
|
||||
*/
|
||||
void ACRController::report(FILE *fp, int level)
|
||||
{
|
||||
fprintf(fp, "ACR motor driver %s, numAxes=%d, moving poll period=%f, idle poll period=%f\n",
|
||||
this->portName, numAxes_, movingPollPeriod_, idlePollPeriod_);
|
||||
|
||||
if (level > 0) {
|
||||
fprintf(fp, " binary input = 0x%x\n", binaryIn_);
|
||||
fprintf(fp, " binary output readback = 0x%x\n", binaryOutRBV_);
|
||||
}
|
||||
|
||||
|
||||
// Call the base class method
|
||||
asynMotorController::report(fp, level);
|
||||
}
|
||||
|
||||
/** Returns a pointer to an ACRMotorAxis object.
|
||||
* Returns NULL if the axis number encoded in pasynUser is invalid.
|
||||
* \param[in] pasynUser asynUser structure that encodes the axis index number. */
|
||||
ACRAxis* ACRController::getAxis(asynUser *pasynUser)
|
||||
{
|
||||
return static_cast<ACRAxis*>(asynMotorController::getAxis(pasynUser));
|
||||
}
|
||||
|
||||
/** Returns a pointer to an ACRMotorAxis object.
|
||||
* Returns NULL if the axis number encoded in pasynUser is invalid.
|
||||
* \param[in] axisNo Axis index number. */
|
||||
ACRAxis* ACRController::getAxis(int axisNo)
|
||||
{
|
||||
return static_cast<ACRAxis*>(asynMotorController::getAxis(axisNo));
|
||||
}
|
||||
|
||||
|
||||
/** Called when asyn clients call pasynInt32->write().
|
||||
* Extracts the function and axis number from pasynUser.
|
||||
* Sets the value in the parameter library.
|
||||
* If the function is motorSetClosedLoop_ then it turns the drive power on or off.
|
||||
* If the function is ACRReadBinaryIO_ then it reads the binary I/O registers on the controller.
|
||||
* For all other functions it calls asynMotorController::writeInt32.
|
||||
* Calls any registered callbacks for this pasynUser->reason and address.
|
||||
* \param[in] pasynUser asynUser structure that encodes the reason and address.
|
||||
* \param[in] value Value to write. */
|
||||
asynStatus ACRController::writeInt32(asynUser *pasynUser, epicsInt32 value)
|
||||
{
|
||||
int function = pasynUser->reason;
|
||||
asynStatus status = asynSuccess;
|
||||
ACRAxis *pAxis = getAxis(pasynUser);
|
||||
static const char *functionName = "writeInt32";
|
||||
|
||||
/* Set the parameter and readback in the parameter library. This may be overwritten when we read back the
|
||||
* status at the end, but that's OK */
|
||||
status = setIntegerParam(pAxis->axisNo_, function, value);
|
||||
|
||||
if (function == ACRReadBinaryIO_)
|
||||
{
|
||||
readBinaryIO();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Call base class method */
|
||||
status = asynMotorController::writeInt32(pasynUser, value);
|
||||
}
|
||||
|
||||
/* Do callbacks so higher layers see any changes */
|
||||
callParamCallbacks(pAxis->axisNo_);
|
||||
if (status)
|
||||
asynPrint(pasynUser, ASYN_TRACE_ERROR,
|
||||
"%s:%s: error, status=%d function=%d, value=%d\n",
|
||||
driverName, functionName, status, function, value);
|
||||
else
|
||||
asynPrint(pasynUser, ASYN_TRACEIO_DRIVER,
|
||||
"%s:%s: function=%d, value=%d\n",
|
||||
driverName, functionName, function, value);
|
||||
return status;
|
||||
}
|
||||
|
||||
/** Called when asyn clients call pasynFloat64->write().
|
||||
* Extracts the function and axis number from pasynUser.
|
||||
* Sets the value in the parameter library.
|
||||
* If the function is ACRJerk_ it sets the jerk value in the controller.
|
||||
* Calls any registered callbacks for this pasynUser->reason and address.
|
||||
* For all other functions it calls asynMotorController::writeFloat64.
|
||||
* \param[in] pasynUser asynUser structure that encodes the reason and address.
|
||||
* \param[in] value Value to write. */
|
||||
asynStatus ACRController::writeFloat64(asynUser *pasynUser, epicsFloat64 value)
|
||||
{
|
||||
int function = pasynUser->reason;
|
||||
asynStatus status = asynSuccess;
|
||||
ACRAxis *pAxis = getAxis(pasynUser);
|
||||
static const char *functionName = "writeFloat64";
|
||||
|
||||
|
||||
/* Set the parameter and readback in the parameter library. */
|
||||
status = setDoubleParam(pAxis->axisNo_, function, value);
|
||||
|
||||
if (function == ACRJerk_)
|
||||
{
|
||||
sprintf(outString_, "%s JOG JRK %f", pAxis->axisName_, value);
|
||||
status = writeController();
|
||||
|
||||
} else {
|
||||
/* Call base class method */
|
||||
status = asynMotorController::writeFloat64(pasynUser, value);
|
||||
}
|
||||
|
||||
/* Do callbacks so higher layers see any changes */
|
||||
pAxis->callParamCallbacks();
|
||||
if (status)
|
||||
asynPrint(pasynUser, ASYN_TRACE_ERROR,
|
||||
"%s:%s: error, status=%d function=%d, value=%f\n",
|
||||
driverName, functionName, status, function, value);
|
||||
else
|
||||
asynPrint(pasynUser, ASYN_TRACEIO_DRIVER,
|
||||
"%s:%s: function=%d, value=%f\n",
|
||||
driverName, functionName, function, value);
|
||||
return status;
|
||||
}
|
||||
|
||||
/** Called when asyn clients call pasynUInt32Digital->write().
|
||||
* Writes a single bit to one of the ACR binary output registers.
|
||||
* This function is limited to writing a single bit, because we use the BIT command.
|
||||
* It writes to least significant bit that is set in the mask.
|
||||
* \param[in] pasynUser pasynUser structure that encodes the reason and address.
|
||||
* \param[in] value Value to write.
|
||||
* \param[in] mask Mask value to use when writinging the value. */
|
||||
asynStatus ACRController::writeUInt32Digital(asynUser *pasynUser, epicsUInt32 value, epicsUInt32 mask)
|
||||
{
|
||||
int bit, tmask=0x1;
|
||||
asynStatus status;
|
||||
//static const char *functionName = "writeUInt32Digital";
|
||||
|
||||
for (bit=0; bit<32; bit++) {
|
||||
if (mask & tmask) break;
|
||||
tmask = tmask << 1;
|
||||
}
|
||||
sprintf(outString_, "BIT %d=%d", 32+bit, value);
|
||||
status = writeController();
|
||||
// Read the I/O back
|
||||
readBinaryIO();
|
||||
|
||||
return(status);
|
||||
}
|
||||
|
||||
/** Reads the binary input and binary output registers on the ACR.
|
||||
* Sets the values in the parameter library.
|
||||
* Keeps track of which bits have changed.
|
||||
* Calls any registered callbacks for this pasynUser->reason and address. */
|
||||
asynStatus ACRController::readBinaryIO()
|
||||
{
|
||||
asynStatus status;
|
||||
|
||||
// Read the binary inputs
|
||||
sprintf(outString_, "?P%d", binaryInReg_);
|
||||
status = writeReadController();
|
||||
if (!status) {
|
||||
binaryIn_ = atoi(inString_);
|
||||
setUIntDigitalParam(0, ACRBinaryIn_, binaryIn_, 0xFFFFFFFF);
|
||||
}
|
||||
|
||||
// Read the binary outputs
|
||||
sprintf(outString_, "?P%d", binaryOutReg_);
|
||||
status = writeReadController();
|
||||
if (!status) {
|
||||
binaryOutRBV_ = atoi(inString_);
|
||||
setUIntDigitalParam(0, ACRBinaryOutRBV_, binaryOutRBV_, 0xFFFFFFFF);
|
||||
}
|
||||
callParamCallbacks(0);
|
||||
return status;
|
||||
}
|
||||
|
||||
// These are the ACRAxis methods
|
||||
|
||||
/** Creates a new ACRAxis object.
|
||||
* \param[in] pC Pointer to the ACRController to which this axis belongs.
|
||||
* \param[in] axisNo Index number of this axis, range 0 to pC->numAxes_-1.
|
||||
*
|
||||
* Initializes register numbers, etc.
|
||||
*/
|
||||
ACRAxis::ACRAxis(ACRController *pC, int axisNo)
|
||||
: asynMotorAxis(pC, axisNo),
|
||||
pC_(pC)
|
||||
{
|
||||
asynStatus status;
|
||||
|
||||
sprintf(axisName_, "AXIS%d", axisNo);
|
||||
encoderPositionReg_ = 12290 + 256*axisNo;
|
||||
theoryPositionReg_ = 12294 + 256*axisNo;
|
||||
limitsReg_ = 4600 + axisNo;
|
||||
flagsReg_ = 4120 + axisNo;
|
||||
// Get the number of pulses per unit on this axis
|
||||
sprintf(pC->outString_, "%s PPU", axisName_);
|
||||
status = pC->writeReadController();
|
||||
if (status) {
|
||||
setIntegerParam(pC->motorStatusProblem_, 1);
|
||||
} else {
|
||||
pulsesPerUnit_ = atof(pC->inString_);
|
||||
// We assume servo motor with encoder for now
|
||||
setIntegerParam(pC->motorStatusGainSupport_, 1);
|
||||
setIntegerParam(pC->motorStatusHasEncoder_, 1);
|
||||
}
|
||||
callParamCallbacks();
|
||||
}
|
||||
|
||||
/** Reports on status of the driver
|
||||
* \param[in] fp The file pointer on which report information will be written
|
||||
* \param[in] level The level of report detail desired
|
||||
*
|
||||
* If details > 0 then information is printed about each axis.
|
||||
* After printing controller-specific information calls asynMotorController::report()
|
||||
*/
|
||||
void ACRAxis::report(FILE *fp, int level)
|
||||
{
|
||||
if (level > 0) {
|
||||
fprintf(fp, " axis %d\n"
|
||||
" pulsesPerUnit_ = %f\n"
|
||||
" encoder position=%f\n"
|
||||
" theory position=%f\n"
|
||||
" limits=0x%x\n"
|
||||
" flags=0x%x\n",
|
||||
axisNo_, pulsesPerUnit_,
|
||||
encoderPosition_, theoryPosition_,
|
||||
currentLimits_, currentFlags_);
|
||||
}
|
||||
|
||||
// Call the base class method
|
||||
asynMotorAxis::report(fp, level);
|
||||
}
|
||||
|
||||
|
||||
asynStatus ACRAxis::move(double position, int relative, double minVelocity, double maxVelocity, double acceleration)
|
||||
{
|
||||
asynStatus status;
|
||||
// static const char *functionName = "moveAxis";
|
||||
|
||||
sprintf(pC_->outString_, "%s JOG ACC %f", axisName_, acceleration/pulsesPerUnit_);
|
||||
status = pC_->writeController();
|
||||
sprintf(pC_->outString_, "%s JOG VEL %f", axisName_, maxVelocity/pulsesPerUnit_);
|
||||
status = pC_->writeController();
|
||||
// Note, the CtlY being send below clears the kill for all axes, in case they had hit a limit, etc.
|
||||
if (relative) {
|
||||
sprintf(pC_->outString_, "%c:%s JOG INC %f", CtlY, axisName_, position/pulsesPerUnit_);
|
||||
status = pC_->writeController();
|
||||
} else {
|
||||
sprintf(pC_->outString_, "%c:%s JOG ABS %f", CtlY, axisName_, position/pulsesPerUnit_);
|
||||
status = pC_->writeController();
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
asynStatus ACRAxis::home(double minVelocity, double maxVelocity, double acceleration, int forwards)
|
||||
{
|
||||
asynStatus status;
|
||||
// static const char *functionName = "homeAxis";
|
||||
|
||||
sprintf(pC_->outString_, "%s JOG ACC %f", axisName_, acceleration/pulsesPerUnit_);
|
||||
status = pC_->writeController();
|
||||
sprintf(pC_->outString_, "%s JOG VEL %f", axisName_, maxVelocity/pulsesPerUnit_);
|
||||
status = pC_->writeController();
|
||||
sprintf(pC_->outString_, "%c:%s JOG HOME %d", CtlY, axisName_, forwards ? 1 : -1);
|
||||
status = pC_->writeController();
|
||||
return status;
|
||||
}
|
||||
|
||||
asynStatus ACRAxis::moveVelocity(double minVelocity, double maxVelocity, double acceleration)
|
||||
{
|
||||
asynStatus status;
|
||||
double speed=maxVelocity;
|
||||
int forwards=1;
|
||||
// static const char *functionName = "moveVelocityAxis";
|
||||
|
||||
if (speed < 0) {
|
||||
speed = -speed;
|
||||
forwards = 0;
|
||||
}
|
||||
sprintf(pC_->outString_, "%s JOG ACC %f", axisName_, acceleration/pulsesPerUnit_);
|
||||
status = pC_->writeController();
|
||||
sprintf(pC_->outString_, "%s JOG VEL %f", axisName_, speed/pulsesPerUnit_);
|
||||
status = pC_->writeController();
|
||||
sprintf(pC_->outString_, "%c:%s JOG %s", CtlY, axisName_, forwards ? "FWD" : "REV");
|
||||
status = pC_->writeController();
|
||||
return status;
|
||||
}
|
||||
|
||||
asynStatus ACRAxis::stop(double acceleration )
|
||||
{
|
||||
asynStatus status;
|
||||
//static const char *functionName = "stopAxis";
|
||||
|
||||
sprintf(pC_->outString_, "%s JOG OFF", axisName_);
|
||||
status = pC_->writeController();
|
||||
return status;
|
||||
}
|
||||
|
||||
asynStatus ACRAxis::setPosition(double position)
|
||||
{
|
||||
asynStatus status;
|
||||
|
||||
sprintf(pC_->outString_, "%s RES %f", axisName_, position/pulsesPerUnit_);
|
||||
status = pC_->writeController();
|
||||
sprintf(pC_->outString_, "%s JOG REN", axisName_);
|
||||
status = pC_->writeController();
|
||||
return status;
|
||||
}
|
||||
|
||||
asynStatus ACRAxis::setClosedLoop(bool closedLoop)
|
||||
{
|
||||
asynStatus status;
|
||||
|
||||
sprintf(pC_->outString_, "DRIVE %s %s", closedLoop ? "ON":"OFF", axisName_);
|
||||
status = pC_->writeController();
|
||||
return status;
|
||||
}
|
||||
|
||||
/** Polls the axis.
|
||||
* This function reads the controller position, encoder position, the limit status, the moving status,
|
||||
* and the drive power-on status. It does not current detect following error, etc. but this could be
|
||||
* added.
|
||||
* It calls setIntegerParam() and setDoubleParam() for each item that it polls,
|
||||
* and then calls callParamCallbacks() at the end.
|
||||
* \param[out] moving A flag that is set indicating that the axis is moving (1) or done (0). */
|
||||
asynStatus ACRAxis::poll(bool *moving)
|
||||
{
|
||||
int done;
|
||||
int driveOn;
|
||||
int limit;
|
||||
asynStatus comStatus;
|
||||
|
||||
// Read the current encoder position
|
||||
sprintf(pC_->outString_, "?P%d", encoderPositionReg_);
|
||||
comStatus = pC_->writeReadController();
|
||||
if (comStatus) goto skip;
|
||||
encoderPosition_ = atof(pC_->inString_);
|
||||
setDoubleParam(pC_->motorEncoderPosition_,encoderPosition_);
|
||||
|
||||
// Read the current theoretical position
|
||||
sprintf(pC_->outString_, "?P%d", theoryPositionReg_);
|
||||
comStatus = pC_->writeReadController();
|
||||
if (comStatus) goto skip;
|
||||
theoryPosition_ = atof(pC_->inString_);
|
||||
setDoubleParam(pC_->motorPosition_, theoryPosition_);
|
||||
|
||||
// Read the current flags
|
||||
sprintf(pC_->outString_, "?P%d", flagsReg_);
|
||||
comStatus = pC_->writeReadController();
|
||||
if (comStatus) goto skip;
|
||||
currentFlags_ = atoi(pC_->inString_);
|
||||
done = (currentFlags_ & 0x1000000)?0:1;
|
||||
setIntegerParam(pC_->motorStatusDone_, done);
|
||||
*moving = done ? false:true;
|
||||
|
||||
// Read the current limit status
|
||||
sprintf(pC_->outString_, "?P%d", limitsReg_);
|
||||
comStatus = pC_->writeReadController();
|
||||
if (comStatus) goto skip;
|
||||
currentLimits_ = atoi(pC_->inString_);
|
||||
limit = (currentLimits_ & 0x1)?1:0;
|
||||
setIntegerParam(pC_->motorStatusHighLimit_, limit);
|
||||
limit = (currentLimits_ & 0x2)?1:0;
|
||||
setIntegerParam(pC_->motorStatusLowLimit_, limit);
|
||||
limit = (currentLimits_ & 0x4)?1:0;
|
||||
setIntegerParam(pC_->motorStatusAtHome_, limit);
|
||||
|
||||
// Read the drive power on status
|
||||
sprintf(pC_->outString_, "DRIVE %s", axisName_);
|
||||
comStatus = pC_->writeReadController();
|
||||
if (comStatus) goto skip;
|
||||
driveOn = strstr(pC_->inString_, "ON") ? 1:0;
|
||||
setIntegerParam(pC_->motorStatusPowerOn_, driveOn);
|
||||
setIntegerParam(pC_->motorStatusProblem_, 0);
|
||||
|
||||
skip:
|
||||
setIntegerParam(pC_->motorStatusProblem_, comStatus ? 1:0);
|
||||
callParamCallbacks();
|
||||
return comStatus ? asynError : asynSuccess;
|
||||
}
|
||||
|
||||
/** Code for iocsh registration */
|
||||
static const iocshArg ACRCreateControllerArg0 = {"Port name", iocshArgString};
|
||||
static const iocshArg ACRCreateControllerArg1 = {"ACR port name", iocshArgString};
|
||||
static const iocshArg ACRCreateControllerArg2 = {"Number of axes", iocshArgInt};
|
||||
static const iocshArg ACRCreateControllerArg3 = {"Moving poll period (ms)", iocshArgInt};
|
||||
static const iocshArg ACRCreateControllerArg4 = {"Idle poll period (ms)", iocshArgInt};
|
||||
static const iocshArg * const ACRCreateControllerArgs[] = {&ACRCreateControllerArg0,
|
||||
&ACRCreateControllerArg1,
|
||||
&ACRCreateControllerArg2,
|
||||
&ACRCreateControllerArg3,
|
||||
&ACRCreateControllerArg4};
|
||||
static const iocshFuncDef ACRCreateControllerDef = {"ACRCreateController", 5, ACRCreateControllerArgs};
|
||||
static void ACRCreateContollerCallFunc(const iocshArgBuf *args)
|
||||
{
|
||||
ACRCreateController(args[0].sval, args[1].sval, args[2].ival, args[3].ival, args[4].ival);
|
||||
}
|
||||
|
||||
static void ACRMotorRegister(void)
|
||||
{
|
||||
iocshRegister(&ACRCreateControllerDef, ACRCreateContollerCallFunc);
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
epicsExportRegistrar(ACRMotorRegister);
|
||||
}
|
||||
@@ -1,87 +0,0 @@
|
||||
/*
|
||||
FILENAME... ACRMotorDriver.h
|
||||
USAGE... Motor driver support for the Parker ACR series of controllers, including the Aries.
|
||||
|
||||
Mark Rivers
|
||||
March 28, 2011
|
||||
|
||||
*/
|
||||
|
||||
#include "asynMotorController.h"
|
||||
#include "asynMotorAxis.h"
|
||||
|
||||
/** drvInfo strings for extra parameters that the ACR controller supports */
|
||||
#define ACRJerkString "ACR_JERK"
|
||||
#define ACRReadBinaryIOString "ACR_READ_BINARY_IO"
|
||||
#define ACRBinaryInString "ACR_BINARY_IN"
|
||||
#define ACRBinaryOutString "ACR_BINARY_OUT"
|
||||
#define ACRBinaryOutRBVString "ACR_BINARY_OUT_RBV"
|
||||
|
||||
class epicsShareClass ACRAxis : public asynMotorAxis
|
||||
{
|
||||
public:
|
||||
/* These are the methods we override from the base class */
|
||||
ACRAxis(class ACRController *pC, int axis);
|
||||
void report(FILE *fp, int level);
|
||||
asynStatus move(double position, int relative, double min_velocity, double max_velocity, double acceleration);
|
||||
asynStatus moveVelocity(double min_velocity, double max_velocity, double acceleration);
|
||||
asynStatus home(double min_velocity, double max_velocity, double acceleration, int forwards);
|
||||
asynStatus stop(double acceleration);
|
||||
asynStatus poll(bool *moving);
|
||||
asynStatus setPosition(double position);
|
||||
asynStatus setClosedLoop(bool closedLoop);
|
||||
|
||||
private:
|
||||
ACRController *pC_; /**< Pointer to the asynMotorController to which this axis belongs.
|
||||
* Abbreviated because it is used very frequently */
|
||||
char axisName_[10]; /**< Name of each axis, used in commands to ACR controller */
|
||||
double pulsesPerUnit_; /**< Pulses per engineering unit, which is what ACR controller uses */
|
||||
int flagsReg_; /**< Address of the flags register */
|
||||
int limitsReg_; /**< Address of the limits register */
|
||||
int encoderPositionReg_; /**< Address of the encoder position register */
|
||||
int theoryPositionReg_; /**< Address of the theoretical position register */
|
||||
double encoderPosition_; /**< Cached copy of the encoder position */
|
||||
double theoryPosition_; /**< Cached copy of the theoretical position */
|
||||
int currentFlags_; /**< Cached copy of the current flags */
|
||||
int currentLimits_; /**< Cached copy of the current limits */
|
||||
|
||||
friend class ACRController;
|
||||
};
|
||||
|
||||
class epicsShareClass ACRController : public asynMotorController {
|
||||
public:
|
||||
ACRController(const char *portName, const char *ACRPortName, int numAxes, double movingPollPeriod, double idlePollPeriod);
|
||||
|
||||
/* These are the methods that we override from asynPortDriver */
|
||||
asynStatus writeUInt32Digital(asynUser *pasynUser, epicsUInt32 value, epicsUInt32 mask);
|
||||
|
||||
/* These are the methods that we override from asynMotorDriver */
|
||||
asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
|
||||
asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
|
||||
void report(FILE *fp, int level);
|
||||
ACRAxis* getAxis(asynUser *pasynUser);
|
||||
ACRAxis* getAxis(int axisNo);
|
||||
|
||||
|
||||
/* These are the methods that are new to this class */
|
||||
asynStatus readBinaryIO();
|
||||
|
||||
protected:
|
||||
int ACRJerk_; /**< Jerk time parameter index */
|
||||
#define FIRST_ACR_PARAM ACRJerk_
|
||||
int ACRReadBinaryIO_; /**< Read binary I/O parameter index */
|
||||
int ACRBinaryIn_; /**< Binary input parameter index */
|
||||
int ACRBinaryOut_; /**< Binary output parameter index */
|
||||
int ACRBinaryOutRBV_; /**< Binary output readback parameter index */
|
||||
#define LAST_ACR_PARAM ACRBinaryOutRBV_
|
||||
|
||||
#define NUM_ACR_PARAMS (&LAST_ACR_PARAM - &FIRST_ACR_PARAM + 1)
|
||||
|
||||
private:
|
||||
int binaryIn_;
|
||||
int binaryOutRBV_;
|
||||
int binaryInReg_;
|
||||
int binaryOutReg_;
|
||||
|
||||
friend class ACRAxis;
|
||||
};
|
||||
@@ -1 +0,0 @@
|
||||
registrar(ACRMotorRegister)
|
||||
@@ -1,27 +0,0 @@
|
||||
TOP=../..
|
||||
|
||||
include $(TOP)/configure/CONFIG
|
||||
#----------------------------------------
|
||||
# ADD MACRO DEFINITIONS AFTER THIS LINE
|
||||
#=============================
|
||||
|
||||
#==================================================
|
||||
# Build an IOC support library
|
||||
|
||||
LIBRARY_IOC += ACRMotor
|
||||
|
||||
# motorRecord.h will be created from motorRecord.dbd
|
||||
# install devMotorSoft.dbd into <top>/dbd
|
||||
DBD += ACRMotorSupport.dbd
|
||||
|
||||
# The following are compiled and added to the Support library
|
||||
ACRMotor_SRCS += ACRMotorDriver.cpp
|
||||
|
||||
ACRMotor_LIBS += motor
|
||||
ACRMotor_LIBS += asyn
|
||||
ACRMotor_LIBS += $(EPICS_BASE_IOC_LIBS)
|
||||
|
||||
include $(TOP)/configure/RULES
|
||||
#----------------------------------------
|
||||
# ADD RULES AFTER THIS LINE
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
asyn model 3 driver
|
||||
-------------------
|
||||
ACRMotorDriver.cpp
|
||||
ACRMotorDriver.h
|
||||
ACRMotorSupport.dbd
|
||||
@@ -1,10 +0,0 @@
|
||||
# Database for extra PVs for Parker ACR controllers
|
||||
|
||||
record(ao,"$(P)$(R)Jerk") {
|
||||
field(DESC,"Jerk parameter")
|
||||
field(PINI, "1")
|
||||
field(PREC,"3")
|
||||
field(VAL,".01")
|
||||
field(DTYP, "asynFloat64")
|
||||
field(OUT,"@asyn($(PORT),$(ADDR))ACR_JERK")
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
record(bi,"$(P)$(R)") {
|
||||
field(PINI, "YES")
|
||||
field(DTYP,"asynUInt32Digital")
|
||||
field(INP,"@asynMask($(PORT) 0 $(MASK))ACR_BINARY_IN")
|
||||
field(SCAN, "$(SCAN)")
|
||||
field(ZNAM, "Low")
|
||||
field(ONAM, "High")
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
record(bo,"$(P)$(R)") {
|
||||
field(DTYP,"asynUInt32Digital")
|
||||
field(OUT,"@asynMask($(PORT) 0 $(MASK))ACR_BINARY_OUT")
|
||||
field(VAL, "1")
|
||||
field(ZNAM, "Low")
|
||||
field(ONAM, "High")
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
record(bi,"$(P)$(R)") {
|
||||
field(PINI, "YES")
|
||||
field(DTYP,"asynUInt32Digital")
|
||||
field(INP,"@asynMask($(PORT) 0 $(MASK))ACR_BINARY_OUT_RBV")
|
||||
field(SCAN, "$(SCAN)")
|
||||
field(ZNAM, "Low")
|
||||
field(ONAM, "High")
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
record(longin,"$(P)$(R)") {
|
||||
field(PINI, "YES")
|
||||
field(DTYP,"asynUInt32Digital")
|
||||
field(INP,"@asynMask($(PORT) 0 0xffffffff)ACR_BINARY_IN")
|
||||
field(SCAN, "$(SCAN)")
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
record(bo,"$(P)$(R)") {
|
||||
field(DTYP,"asynInt32")
|
||||
field(OUT,"@asyn($(PORT) 0)ACR_READ_BINARY_IO")
|
||||
field(ZNAM, "Done")
|
||||
field(ONAM, "Read")
|
||||
field(SCAN, "$(SCAN)")
|
||||
}
|
||||
@@ -18,12 +18,6 @@ include $(TOP)/configure/CONFIG
|
||||
DB += motor.db
|
||||
DB += basic_motor.db
|
||||
DB += basic_asyn_motor.db
|
||||
DB += ACRAux.template
|
||||
DB += ACRAuxRead.template
|
||||
DB += ACRAuxLi.template
|
||||
DB += ACRAuxBi.template
|
||||
DB += ACRAuxBo.template
|
||||
DB += ACRAuxBoRBV.template
|
||||
DB += TransPos.db
|
||||
DB += motorUtil.db
|
||||
DB += asyn_motor.db
|
||||
|
||||
@@ -24,9 +24,6 @@ PIGCS2Src_DEPEND_DIRS = MotorSrc
|
||||
DIRS += PC6KSrc
|
||||
PC6KSrc_DEPEND_DIRS = MotorSrc
|
||||
|
||||
DIRS += ACRSrc
|
||||
ACRSrc_DEPEND_DIRS = MotorSrc
|
||||
|
||||
DIRS += SmarActMCSSrc
|
||||
SmarActMCSSrc_DEPEND_DIRS = MotorSrc
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,137 +0,0 @@
|
||||
|
||||
file {
|
||||
name="/home/epics/devel/motor/motorApp/op/adl/ACRTop.adl"
|
||||
version=030102
|
||||
}
|
||||
display {
|
||||
object {
|
||||
x=115
|
||||
y=148
|
||||
width=275
|
||||
height=75
|
||||
}
|
||||
clr=14
|
||||
bclr=4
|
||||
cmap=""
|
||||
gridSpacing=5
|
||||
gridOn=0
|
||||
snapToGrid=0
|
||||
}
|
||||
"color map" {
|
||||
ncolors=65
|
||||
colors {
|
||||
ffffff,
|
||||
ececec,
|
||||
dadada,
|
||||
c8c8c8,
|
||||
bbbbbb,
|
||||
aeaeae,
|
||||
9e9e9e,
|
||||
919191,
|
||||
858585,
|
||||
787878,
|
||||
696969,
|
||||
5a5a5a,
|
||||
464646,
|
||||
2d2d2d,
|
||||
000000,
|
||||
00d800,
|
||||
1ebb00,
|
||||
339900,
|
||||
2d7f00,
|
||||
216c00,
|
||||
fd0000,
|
||||
de1309,
|
||||
be190b,
|
||||
a01207,
|
||||
820400,
|
||||
5893ff,
|
||||
597ee1,
|
||||
4b6ec7,
|
||||
3a5eab,
|
||||
27548d,
|
||||
fbf34a,
|
||||
f9da3c,
|
||||
eeb62b,
|
||||
e19015,
|
||||
cd6100,
|
||||
ffb0ff,
|
||||
d67fe2,
|
||||
ae4ebc,
|
||||
8b1a96,
|
||||
610a75,
|
||||
a4aaff,
|
||||
8793e2,
|
||||
6a73c1,
|
||||
4d52a4,
|
||||
343386,
|
||||
c7bb6d,
|
||||
b79d5c,
|
||||
a47e3c,
|
||||
7d5627,
|
||||
58340f,
|
||||
99ffff,
|
||||
73dfff,
|
||||
4ea5f9,
|
||||
2a63e4,
|
||||
0a00b8,
|
||||
ebf1b5,
|
||||
d4db9d,
|
||||
bbc187,
|
||||
a6a462,
|
||||
8b8239,
|
||||
73ff6b,
|
||||
52da3b,
|
||||
3cb420,
|
||||
289315,
|
||||
1a7309,
|
||||
}
|
||||
}
|
||||
"related display" {
|
||||
object {
|
||||
x=91
|
||||
y=40
|
||||
width=93
|
||||
height=23
|
||||
}
|
||||
display[0] {
|
||||
label="Motor #1"
|
||||
name="motorx_all.adl"
|
||||
args="P=IOC:, M=m1"
|
||||
}
|
||||
display[1] {
|
||||
label="Motor #2"
|
||||
name="motorx_all.adl"
|
||||
args="P=IOC:, M=m2"
|
||||
}
|
||||
display[2] {
|
||||
label="Auxillary params"
|
||||
name="ACRAux.adl"
|
||||
args="P=IOC:, R=ACR1:, M1=m1:"
|
||||
}
|
||||
display[3] {
|
||||
label="asyn record #1"
|
||||
name="asynRecord.adl"
|
||||
args="P=IOC:, R=asyn1"
|
||||
}
|
||||
display[4] {
|
||||
label="asyn record #2"
|
||||
name="asynRecord.adl"
|
||||
args="P=IOC:, R=asyn2"
|
||||
}
|
||||
clr=14
|
||||
bclr=51
|
||||
label="More"
|
||||
}
|
||||
text {
|
||||
object {
|
||||
x=17
|
||||
y=5
|
||||
width=240
|
||||
height=25
|
||||
}
|
||||
"basic attribute" {
|
||||
clr=14
|
||||
}
|
||||
textix="Parker ACR Top-level"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,170 +0,0 @@
|
||||
<display typeId="org.csstudio.opibuilder.Display" version="1.0">
|
||||
<auto_zoom_to_fit_all>false</auto_zoom_to_fit_all>
|
||||
<macros>
|
||||
<include_parent_macros>true</include_parent_macros>
|
||||
</macros>
|
||||
<wuid>39872d87:13e14015f61:-34e6</wuid>
|
||||
<boy_version>3.1.2.20120830</boy_version>
|
||||
<scripts />
|
||||
<show_ruler>true</show_ruler>
|
||||
<height>75</height>
|
||||
<name>ACRTop</name>
|
||||
<snap_to_geometry>false</snap_to_geometry>
|
||||
<show_grid>false</show_grid>
|
||||
<background_color>
|
||||
<color name="Gray_4" red="187" green="187" blue="187" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color name="Gray_14" red="0" green="0" blue="0" />
|
||||
</foreground_color>
|
||||
<widget_type>Display</widget_type>
|
||||
<show_close_button>true</show_close_button>
|
||||
<width>275</width>
|
||||
<rules />
|
||||
<show_edit_range>true</show_edit_range>
|
||||
<grid_space>5</grid_space>
|
||||
<auto_scale_widgets>
|
||||
<auto_scale_widgets>false</auto_scale_widgets>
|
||||
<min_width>-1</min_width>
|
||||
<min_height>-1</min_height>
|
||||
</auto_scale_widgets>
|
||||
<actions hook="false" hook_all="false" />
|
||||
<y>148</y>
|
||||
<x>115</x>
|
||||
<widget typeId="org.csstudio.opibuilder.widgets.MenuButton" version="1.0">
|
||||
<border_alarm_sensitive>false</border_alarm_sensitive>
|
||||
<visible>true</visible>
|
||||
<actions_from_pv>false</actions_from_pv>
|
||||
<wuid>39872d87:13e14015f61:-34e5</wuid>
|
||||
<scripts />
|
||||
<height>23</height>
|
||||
<name>Menu Button</name>
|
||||
<forecolor_alarm_sensitive>false</forecolor_alarm_sensitive>
|
||||
<scale_options>
|
||||
<width_scalable>true</width_scalable>
|
||||
<height_scalable>true</height_scalable>
|
||||
<keep_wh_ratio>false</keep_wh_ratio>
|
||||
</scale_options>
|
||||
<transparent>false</transparent>
|
||||
<pv_name></pv_name>
|
||||
<background_color>
|
||||
<color name="ioc_write_bg" red="115" green="223" blue="255" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color name="Gray_14" red="0" green="0" blue="0" />
|
||||
</foreground_color>
|
||||
<widget_type>Menu Button</widget_type>
|
||||
<enabled>true</enabled>
|
||||
<backcolor_alarm_sensitive>false</backcolor_alarm_sensitive>
|
||||
<font>
|
||||
<opifont.name fontName="Sans" height="10" style="0">Default</opifont.name>
|
||||
</font>
|
||||
<width>93</width>
|
||||
<border_style>6</border_style>
|
||||
<label>More</label>
|
||||
<rules />
|
||||
<pv_value />
|
||||
<border_width>1</border_width>
|
||||
<border_color>
|
||||
<color red="0" green="128" blue="255" />
|
||||
</border_color>
|
||||
<y>40</y>
|
||||
<actions hook="false" hook_all="false">
|
||||
<action type="OPEN_DISPLAY">
|
||||
<path>motorx_all.opi</path>
|
||||
<macros>
|
||||
<include_parent_macros>true</include_parent_macros>
|
||||
<P>IOC:</P>
|
||||
<M>m1</M>
|
||||
</macros>
|
||||
<replace>0</replace>
|
||||
<description>Motor #1</description>
|
||||
</action>
|
||||
<action type="OPEN_DISPLAY">
|
||||
<path>motorx_all.opi</path>
|
||||
<macros>
|
||||
<include_parent_macros>true</include_parent_macros>
|
||||
<P>IOC:</P>
|
||||
<M>m2</M>
|
||||
</macros>
|
||||
<replace>0</replace>
|
||||
<description>Motor #2</description>
|
||||
</action>
|
||||
<action type="OPEN_DISPLAY">
|
||||
<path>ACRAux.opi</path>
|
||||
<macros>
|
||||
<include_parent_macros>true</include_parent_macros>
|
||||
<P>IOC:</P>
|
||||
<R>ACR1:</R>
|
||||
<M1>m1:</M1>
|
||||
</macros>
|
||||
<replace>0</replace>
|
||||
<description>Auxillary params</description>
|
||||
</action>
|
||||
<action type="OPEN_DISPLAY">
|
||||
<path>asynRecord.opi</path>
|
||||
<macros>
|
||||
<include_parent_macros>true</include_parent_macros>
|
||||
<P>IOC:</P>
|
||||
<R>asyn1</R>
|
||||
</macros>
|
||||
<replace>0</replace>
|
||||
<description>asyn record #1</description>
|
||||
</action>
|
||||
<action type="OPEN_DISPLAY">
|
||||
<path>asynRecord.opi</path>
|
||||
<macros>
|
||||
<include_parent_macros>true</include_parent_macros>
|
||||
<P>IOC:</P>
|
||||
<R>asyn2</R>
|
||||
</macros>
|
||||
<replace>0</replace>
|
||||
<description>asyn record #2</description>
|
||||
</action>
|
||||
</actions>
|
||||
<tooltip>$(pv_name)
|
||||
$(pv_value)</tooltip>
|
||||
<x>91</x>
|
||||
</widget>
|
||||
<widget typeId="org.csstudio.opibuilder.widgets.Label" version="1.0">
|
||||
<visible>true</visible>
|
||||
<vertical_alignment>1</vertical_alignment>
|
||||
<wuid>39872d87:13e14015f61:-34e4</wuid>
|
||||
<auto_size>false</auto_size>
|
||||
<scripts />
|
||||
<height>25</height>
|
||||
<name>Label</name>
|
||||
<scale_options>
|
||||
<width_scalable>true</width_scalable>
|
||||
<height_scalable>true</height_scalable>
|
||||
<keep_wh_ratio>false</keep_wh_ratio>
|
||||
</scale_options>
|
||||
<transparent>true</transparent>
|
||||
<show_scrollbar>false</show_scrollbar>
|
||||
<background_color>
|
||||
<color red="255" green="255" blue="255" />
|
||||
</background_color>
|
||||
<foreground_color>
|
||||
<color name="Gray_14" red="0" green="0" blue="0" />
|
||||
</foreground_color>
|
||||
<widget_type>Label</widget_type>
|
||||
<enabled>true</enabled>
|
||||
<text>Parker ACR Top-level</text>
|
||||
<font>
|
||||
<fontdata fontName="Sans" height="15" style="0" />
|
||||
</font>
|
||||
<width>240</width>
|
||||
<border_style>0</border_style>
|
||||
<rules />
|
||||
<border_width>1</border_width>
|
||||
<border_color>
|
||||
<color red="0" green="128" blue="255" />
|
||||
</border_color>
|
||||
<horizontal_alignment>0</horizontal_alignment>
|
||||
<actions hook="false" hook_all="false" />
|
||||
<y>5</y>
|
||||
<wrap_words>true</wrap_words>
|
||||
<tooltip></tooltip>
|
||||
<x>17</x>
|
||||
</widget>
|
||||
</display>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,104 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>115</x>
|
||||
<y>148</y>
|
||||
<width>275</width>
|
||||
<height>75</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string>
|
||||
|
||||
QWidget#centralWidget {background: rgba(187, 187, 187, 255);}
|
||||
QPushButton::menu-indicator {image: url(none.png); width: 0}
|
||||
|
||||
</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralWidget">
|
||||
<widget class="caRelatedDisplay" name="caRelatedDisplay_0">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>91</x>
|
||||
<y>40</y>
|
||||
<width>93</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="foreground">
|
||||
<color alpha="255">
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color alpha="255">
|
||||
<red>115</red>
|
||||
<green>223</green>
|
||||
<blue>255</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string>More</string>
|
||||
</property>
|
||||
<property name="stackingMode">
|
||||
<enum>Menu</enum>
|
||||
</property>
|
||||
<property name="labels">
|
||||
<string>Motor #1;Motor #2;Auxillary params;asyn record #1;asyn record #2</string>
|
||||
</property>
|
||||
<property name="files">
|
||||
<string>motorx_all.adl;motorx_all.adl;ACRAux.adl;asynRecord.adl;asynRecord.adl</string>
|
||||
</property>
|
||||
<property name="args">
|
||||
<string>P=IOC:, M=m1;P=IOC:, M=m2;P=IOC:, R=ACR1:, M1=m1:;P=IOC:, R=asyn1;P=IOC:, R=asyn2</string>
|
||||
</property>
|
||||
<property name="removeParent">
|
||||
<string>false;false;false;false;false</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="caLabel_0">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="foreground">
|
||||
<color alpha="255">
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color alpha="0">
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Parker ACR Top-level</string>
|
||||
</property>
|
||||
<property name="fontScaleMode">
|
||||
<enum>ESimpleLabel::WidthAndHeight</enum>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>17</x>
|
||||
<y>5</y>
|
||||
<width>300</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignAbsolute|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<zorder>caLabel_0</zorder>
|
||||
<zorder>caRelatedDisplay_0</zorder>
|
||||
</widget>
|
||||
</widget>
|
||||
</ui>
|
||||
@@ -16,7 +16,6 @@ COMMONDBDS += devImsMotor.dbd
|
||||
COMMONDBDS += devPIMotor.dbd
|
||||
COMMONDBDS += devSoftMotor.dbd
|
||||
COMMONDBDS += motorSimSupport.dbd
|
||||
COMMONDBDS += ACRMotorSupport.dbd
|
||||
COMMONDBDS += asyn.dbd
|
||||
COMMONDBDS += drvAsynSerialPort.dbd
|
||||
COMMONDBDS += drvAsynIPPort.dbd
|
||||
@@ -55,7 +54,6 @@ COMMONLIBS += PI
|
||||
COMMONLIBS += Ims
|
||||
COMMONLIBS += softMotor
|
||||
COMMONLIBS += motorSimSupport
|
||||
COMMONLIBS += ACRMotor
|
||||
COMMONLIBS += PI_GCS2Support
|
||||
COMMONLIBS += motor
|
||||
|
||||
|
||||
Reference in New Issue
Block a user