Removed ACRSrc; Added motorACR submodule

This commit is contained in:
kpetersn
2019-04-11 13:44:28 -05:00
parent b8eec1e23f
commit bf083f5d43
25 changed files with 5 additions and 24434 deletions
+3
View File
@@ -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
-245
View File
@@ -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"}
}
-43
View File
@@ -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")
+1
View File
@@ -5,6 +5,7 @@ include $(TOP)/configure/CONFIG
#SUBMODULES += motorVendor
SUBMODULES += motorOms
SUBMODULES += motorNewport
SUBMODULES += motorACR
SUBMODULES += motorAcs
SUBMODULES += motorAcsTech80
SUBMODULES += motorAerotech
+1
Submodule modules/motorACR added at 8c3ad0120b
-507
View File
@@ -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);
}
-87
View File
@@ -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
View File
@@ -1 +0,0 @@
registrar(ACRMotorRegister)
-27
View File
@@ -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
-5
View File
@@ -1,5 +0,0 @@
asyn model 3 driver
-------------------
ACRMotorDriver.cpp
ACRMotorDriver.h
ACRMotorSupport.dbd
-10
View File
@@ -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")
}
-8
View File
@@ -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")
}
-7
View File
@@ -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")
}
-8
View File
@@ -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")
}
-6
View File
@@ -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)")
}
-7
View File
@@ -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)")
}
-6
View File
@@ -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
-3
View File
@@ -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
-137
View File
@@ -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
-170
View File
@@ -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
-104
View File
@@ -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>
-2
View File
@@ -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