forked from epics_driver_modules/motorBase
Added reading of coordinate-system definitions to Newport HXP support.
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
record(bo,"$(P)$(R)READ_CS") {
|
||||
field(DESC,"Read Coord Systems")
|
||||
field(DTYP,"asynInt32")
|
||||
field(ZNAM,"Done")
|
||||
field(ONAM,"Read")
|
||||
field(OUT, "@asyn($(PORT),0)HXP_COORD_SYS_READ_ALL")
|
||||
field(VAL, "1")
|
||||
field(PINI,"YES")
|
||||
}
|
||||
|
||||
# TOOL CS readbacks
|
||||
record(ai,"$(P)$(R)TOOL:X") {
|
||||
field(DESC,"TOOL coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_TOOL_X")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)TOOL:Y") {
|
||||
field(DESC,"TOOL coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_TOOL_Y")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)TOOL:Z") {
|
||||
field(DESC,"TOOL coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_TOOL_Z")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)TOOL:U") {
|
||||
field(DESC,"TOOL coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_TOOL_U")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)TOOL:V") {
|
||||
field(DESC,"TOOL coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_TOOL_V")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)TOOL:W") {
|
||||
field(DESC,"TOOL coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_TOOL_W")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
# WORK CS readbacks
|
||||
record(ai,"$(P)$(R)WORK:X") {
|
||||
field(DESC,"WORK coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_WORK_X")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)WORK:Y") {
|
||||
field(DESC,"WORK coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_WORK_Y")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)WORK:Z") {
|
||||
field(DESC,"WORK coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_WORK_Z")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)WORK:U") {
|
||||
field(DESC,"WORK coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_WORK_U")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)WORK:V") {
|
||||
field(DESC,"WORK coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_WORK_V")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)WORK:W") {
|
||||
field(DESC,"WORK coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_WORK_W")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
# BASE CS readbacks
|
||||
record(ai,"$(P)$(R)BASE:X") {
|
||||
field(DESC,"BASE coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_BASE_X")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)BASE:Y") {
|
||||
field(DESC,"BASE coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_BASE_Y")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)BASE:Z") {
|
||||
field(DESC,"BASE coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_BASE_Z")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)BASE:U") {
|
||||
field(DESC,"BASE coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_BASE_U")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)BASE:V") {
|
||||
field(DESC,"BASE coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_BASE_V")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
record(ai,"$(P)$(R)BASE:W") {
|
||||
field(DESC,"BASE coordSys def")
|
||||
field(DTYP,"asynFloat64")
|
||||
field(SCAN,"I/O Intr")
|
||||
field(INP, "@asyn($(PORT),0)HXP_COORD_SYS_BASE_W")
|
||||
field(PREC,"5")
|
||||
}
|
||||
|
||||
@@ -65,6 +65,25 @@ HXPController::HXPController(const char *portName, const char *IPAddress, int IP
|
||||
createParam(HXPMoveAllTargetUString, asynParamFloat64, &HXPMoveAllTargetU_);
|
||||
createParam(HXPMoveAllTargetVString, asynParamFloat64, &HXPMoveAllTargetV_);
|
||||
createParam(HXPMoveAllTargetWString, asynParamFloat64, &HXPMoveAllTargetW_);
|
||||
createParam(HXPCoordSysReadAllString, asynParamInt32, &HXPCoordSysReadAll_);
|
||||
createParam(HXPCoordSysToolXString, asynParamFloat64, &HXPCoordSysToolX_);
|
||||
createParam(HXPCoordSysToolYString, asynParamFloat64, &HXPCoordSysToolY_);
|
||||
createParam(HXPCoordSysToolZString, asynParamFloat64, &HXPCoordSysToolZ_);
|
||||
createParam(HXPCoordSysToolUString, asynParamFloat64, &HXPCoordSysToolU_);
|
||||
createParam(HXPCoordSysToolVString, asynParamFloat64, &HXPCoordSysToolV_);
|
||||
createParam(HXPCoordSysToolWString, asynParamFloat64, &HXPCoordSysToolW_);
|
||||
createParam(HXPCoordSysWorkXString, asynParamFloat64, &HXPCoordSysWorkX_);
|
||||
createParam(HXPCoordSysWorkYString, asynParamFloat64, &HXPCoordSysWorkY_);
|
||||
createParam(HXPCoordSysWorkZString, asynParamFloat64, &HXPCoordSysWorkZ_);
|
||||
createParam(HXPCoordSysWorkUString, asynParamFloat64, &HXPCoordSysWorkU_);
|
||||
createParam(HXPCoordSysWorkVString, asynParamFloat64, &HXPCoordSysWorkV_);
|
||||
createParam(HXPCoordSysWorkWString, asynParamFloat64, &HXPCoordSysWorkW_);
|
||||
createParam(HXPCoordSysBaseXString, asynParamFloat64, &HXPCoordSysBaseX_);
|
||||
createParam(HXPCoordSysBaseYString, asynParamFloat64, &HXPCoordSysBaseY_);
|
||||
createParam(HXPCoordSysBaseZString, asynParamFloat64, &HXPCoordSysBaseZ_);
|
||||
createParam(HXPCoordSysBaseUString, asynParamFloat64, &HXPCoordSysBaseU_);
|
||||
createParam(HXPCoordSysBaseVString, asynParamFloat64, &HXPCoordSysBaseV_);
|
||||
createParam(HXPCoordSysBaseWString, asynParamFloat64, &HXPCoordSysBaseW_);
|
||||
|
||||
// This socket is used for polling by the controller and all axes
|
||||
pollSocket_ = HXPTCP_ConnectToServer((char *)IPAddress, IPPort, HXP_POLL_TIMEOUT);
|
||||
@@ -166,6 +185,13 @@ asynStatus HXPController::writeInt32(asynUser *pasynUser, epicsInt32 value)
|
||||
moveAll(pAxis);
|
||||
}
|
||||
}
|
||||
else if (function == HXPCoordSysReadAll_)
|
||||
{
|
||||
if (value == 1)
|
||||
{
|
||||
readAllCS(pAxis);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Call base class method */
|
||||
@@ -203,6 +229,61 @@ int HXPController::moveAll(HXPAxis *pAxis)
|
||||
|
||||
status = HXPHexapodMoveAbsolute(pAxis->moveSocket_, GROUP, "Work", x, y, z, u, v, w);
|
||||
|
||||
postError(pAxis, status);
|
||||
|
||||
/* callParamCallback() is called from postError, so it isn't needed here */
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the Tool, Work, and Base coordinate-system definitions
|
||||
*/
|
||||
int HXPController::readAllCS(HXPAxis *pAxis)
|
||||
{
|
||||
int status;
|
||||
double x, y, z, u, v, w;
|
||||
|
||||
status = HXPHexapodCoordinateSystemGet(pAxis->moveSocket_, GROUP, "Tool", &x, &y , &z, &u, &v, &w);
|
||||
|
||||
setDoubleParam(0, HXPCoordSysToolX_, x);
|
||||
setDoubleParam(0, HXPCoordSysToolY_, y);
|
||||
setDoubleParam(0, HXPCoordSysToolZ_, z);
|
||||
setDoubleParam(0, HXPCoordSysToolU_, u);
|
||||
setDoubleParam(0, HXPCoordSysToolV_, v);
|
||||
setDoubleParam(0, HXPCoordSysToolW_, w);
|
||||
|
||||
postError(pAxis, status);
|
||||
|
||||
status = HXPHexapodCoordinateSystemGet(pAxis->moveSocket_, GROUP, "Work", &x, &y , &z, &u, &v, &w);
|
||||
|
||||
setDoubleParam(0, HXPCoordSysWorkX_, x);
|
||||
setDoubleParam(0, HXPCoordSysWorkY_, y);
|
||||
setDoubleParam(0, HXPCoordSysWorkZ_, z);
|
||||
setDoubleParam(0, HXPCoordSysWorkU_, u);
|
||||
setDoubleParam(0, HXPCoordSysWorkV_, v);
|
||||
setDoubleParam(0, HXPCoordSysWorkW_, w);
|
||||
|
||||
postError(pAxis, status);
|
||||
|
||||
status = HXPHexapodCoordinateSystemGet(pAxis->moveSocket_, GROUP, "Base", &x, &y , &z, &u, &v, &w);
|
||||
|
||||
setDoubleParam(0, HXPCoordSysBaseX_, x);
|
||||
setDoubleParam(0, HXPCoordSysBaseY_, y);
|
||||
setDoubleParam(0, HXPCoordSysBaseZ_, z);
|
||||
setDoubleParam(0, HXPCoordSysBaseU_, u);
|
||||
setDoubleParam(0, HXPCoordSysBaseV_, v);
|
||||
setDoubleParam(0, HXPCoordSysBaseW_, w);
|
||||
|
||||
postError(pAxis, status);
|
||||
|
||||
/* callParamCallback() is called from postError, so it isn't needed here */
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
void HXPController::postError(HXPAxis *pAxis, int status)
|
||||
{
|
||||
/* This is similar to what is done in HXPAxis::move() */
|
||||
if (status < 0)
|
||||
{
|
||||
@@ -224,17 +305,12 @@ int HXPController::moveAll(HXPAxis *pAxis)
|
||||
/* Clear the error */
|
||||
setIntegerParam(HXPError_, 0);
|
||||
setStringParam(HXPErrorDesc_, "");
|
||||
|
||||
/* If there was a way to force the motor record to switch to the move poll rate,
|
||||
this would be the place to do it. */
|
||||
}
|
||||
callParamCallbacks();
|
||||
|
||||
|
||||
return status;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// These are the HXPAxis methods
|
||||
|
||||
/** Creates a new HXPAxis object.
|
||||
|
||||
@@ -23,6 +23,25 @@ USAGE... Motor driver support for the Newport Hexapod controller.
|
||||
#define HXPMoveAllTargetUString "HXP_MOVE_ALL_TARGET_U"
|
||||
#define HXPMoveAllTargetVString "HXP_MOVE_ALL_TARGET_V"
|
||||
#define HXPMoveAllTargetWString "HXP_MOVE_ALL_TARGET_W"
|
||||
#define HXPCoordSysReadAllString "HXP_COORD_SYS_READ_ALL"
|
||||
#define HXPCoordSysToolXString "HXP_COORD_SYS_TOOL_X"
|
||||
#define HXPCoordSysToolYString "HXP_COORD_SYS_TOOL_Y"
|
||||
#define HXPCoordSysToolZString "HXP_COORD_SYS_TOOL_Z"
|
||||
#define HXPCoordSysToolUString "HXP_COORD_SYS_TOOL_U"
|
||||
#define HXPCoordSysToolVString "HXP_COORD_SYS_TOOL_V"
|
||||
#define HXPCoordSysToolWString "HXP_COORD_SYS_TOOL_W"
|
||||
#define HXPCoordSysWorkXString "HXP_COORD_SYS_WORK_X"
|
||||
#define HXPCoordSysWorkYString "HXP_COORD_SYS_WORK_Y"
|
||||
#define HXPCoordSysWorkZString "HXP_COORD_SYS_WORK_Z"
|
||||
#define HXPCoordSysWorkUString "HXP_COORD_SYS_WORK_U"
|
||||
#define HXPCoordSysWorkVString "HXP_COORD_SYS_WORK_V"
|
||||
#define HXPCoordSysWorkWString "HXP_COORD_SYS_WORK_W"
|
||||
#define HXPCoordSysBaseXString "HXP_COORD_SYS_BASE_X"
|
||||
#define HXPCoordSysBaseYString "HXP_COORD_SYS_BASE_Y"
|
||||
#define HXPCoordSysBaseZString "HXP_COORD_SYS_BASE_Z"
|
||||
#define HXPCoordSysBaseUString "HXP_COORD_SYS_BASE_U"
|
||||
#define HXPCoordSysBaseVString "HXP_COORD_SYS_BASE_V"
|
||||
#define HXPCoordSysBaseWString "HXP_COORD_SYS_BASE_W"
|
||||
|
||||
class HXPAxis : public asynMotorAxis
|
||||
{
|
||||
@@ -66,6 +85,8 @@ public:
|
||||
|
||||
/* These are the methods that are new to this class */
|
||||
int moveAll(HXPAxis* pAxis);
|
||||
int readAllCS(HXPAxis* pAxis);
|
||||
void postError(HXPAxis* pAxis, int status);
|
||||
|
||||
protected:
|
||||
#define FIRST_HXP_PARAM HXPMoveCoordSys_
|
||||
@@ -80,7 +101,26 @@ protected:
|
||||
int HXPMoveAllTargetU_;
|
||||
int HXPMoveAllTargetV_;
|
||||
int HXPMoveAllTargetW_;
|
||||
#define LAST_HXP_PARAM HXPMoveAllTargetW_
|
||||
int HXPCoordSysReadAll_;
|
||||
int HXPCoordSysToolX_;
|
||||
int HXPCoordSysToolY_;
|
||||
int HXPCoordSysToolZ_;
|
||||
int HXPCoordSysToolU_;
|
||||
int HXPCoordSysToolV_;
|
||||
int HXPCoordSysToolW_;
|
||||
int HXPCoordSysWorkX_;
|
||||
int HXPCoordSysWorkY_;
|
||||
int HXPCoordSysWorkZ_;
|
||||
int HXPCoordSysWorkU_;
|
||||
int HXPCoordSysWorkV_;
|
||||
int HXPCoordSysWorkW_;
|
||||
int HXPCoordSysBaseX_;
|
||||
int HXPCoordSysBaseY_;
|
||||
int HXPCoordSysBaseZ_;
|
||||
int HXPCoordSysBaseU_;
|
||||
int HXPCoordSysBaseV_;
|
||||
int HXPCoordSysBaseW_;
|
||||
#define LAST_HXP_PARAM HXPCoordSysBaseW_
|
||||
|
||||
#define NUM_HXP_PARAMS ((int) (&LAST_HXP_PARAM - &FIRST_HXP_PARAM + 1))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user