7 Commits

Author SHA1 Message Date
179bd6aa22 Use ecmc 11.0 2025-10-13 11:54:03 +02:00
377a28c95f Adapt to ecmc v11 2025-09-10 13:44:56 +02:00
8d4ea1e87c epics 7.0.9 2025-04-22 12:14:17 +02:00
5ec740b3b0 Update makefile 2025-03-28 09:23:06 +01:00
104875d532 Fix makefile for deb12 2025-03-21 10:47:05 +01:00
69fcd4da36 Default to PLUGIN_ID=0 2025-03-03 15:17:46 +01:00
653d4aac02 Default to PLUGIN_ID=0 2025-03-03 15:17:18 +01:00
7 changed files with 41 additions and 50 deletions

2
.gitignore vendored
View File

@@ -20,3 +20,5 @@ tools/bin
tools/lib tools/lib
tools/lib64 tools/lib64
tools/pyvenv.cfg tools/pyvenv.cfg
tools/.*

View File

@@ -5,7 +5,7 @@ MODULE = ecmc_plugin_motion
USR_CFLAGS +=-DECMC_PLUGIN_MODULE_NAME=${MODULE} USR_CFLAGS +=-DECMC_PLUGIN_MODULE_NAME=${MODULE}
BUILDCLASSES = Linux BUILDCLASSES = Linux
ARCH_FILTER = deb10% ARCH_FILTER = deb10% deb12%
# Run 7.0.6 for now # Run 7.0.6 for now
EXCLUDE_VERSIONS+=3 7.0.5 7.0.6 7.0.7 EXCLUDE_VERSIONS+=3 7.0.5 7.0.6 7.0.7
@@ -17,19 +17,28 @@ USR_CXXFLAGS += -std=c++17
OPT_CXXFLAGS_YES = -O3 OPT_CXXFLAGS_YES = -O3
# dependencies # dependencies
ECmasterECMC_VERSION = v1.1.0 ecmc_VERSION = 11.0
ecmc_VERSION = 10.0
################################################################################ # ethercat
# THIS RELATES TO THE EtherCAT MASTER LIBRARY # debian 12
# IT IS OF PARAMOUNT IMPORTANCE TO LOAD THE PROPER KERNEL MODULE EC_MASTER_VER = 1.6.3
# ################################################################################ EC_BASE_PATH = /ioc/NeedfulThings/EtherCAT/4epics/${EC_MASTER_VER}/
USR_LDFLAGS += -lethercat USR_CXXFLAGS_deb12-x86_64 += -I${EC_BASE_PATH}${T_A}/include/
USR_CXXFLAGS_deb12-x86_64 += -L${EC_BASE_PATH}${T_A}/lib/
EC_MASTER_LIB = ${EPICS_MODULES}/ECmasterECMC/${ECmasterECMC_VERSION}/R${EPICSVERSION}/lib/${T_A} LIB_SYS_LIBS += ethercat
USR_LDFLAGS += -Wl,-rpath=${EC_MASTER_LIB} USR_LDFLAGS_deb12-x86_64 += -Wl,-rpath=${EC_BASE_PATH}${T_A}/lib/
USR_LDFLAGS += -L ${EC_MASTER_LIB} USR_LDFLAGS_deb12-x86_64 += -L ${EC_BASE_PATH}${T_A}/lib/
# debian 10
# note: EC_MASTER LIB does not depend on epics version hence use the 7.0.8 build..
USR_LDFLAGS_deb10-x86_64 += -lethercat
EC_MASTER_LIB = /ioc/NeedfulThings/EtherCAT/4epics/v1.1.0/R7.0.8/
USR_LDFLAGS_deb10-x86_64 += -Wl,-rpath=${EC_MASTER_LIB}lib/${T_A}
USR_LDFLAGS_deb10-x86_64 += -L ${EC_MASTER_LIB}lib/${T_A}
USR_CXXFLAGS_deb10-x86_64 += -I${EC_MASTER_LIB}/include/
OPT_CXXFLAGS_YES = -O3
BASE_DIR = . BASE_DIR = .
SRC_DIR = $(BASE_DIR)/src SRC_DIR = $(BASE_DIR)/src
DB_DIR = $(BASE_DIR)/Db DB_DIR = $(BASE_DIR)/Db

View File

@@ -31,7 +31,7 @@ epicsEnvSet(ECMC_PLG_MOTION_OBJ_INDEX,${ECMC_PLG_MOTION_OBJ_INDEX=0})
# Might need differet paths for PSI and ESS.. must check # Might need differet paths for PSI and ESS.. must check
epicsEnvSet(ECMC_PLUGIN_FILNAME,"$(ecmc_plugin_motion_DIR)/lib/${EPICS_HOST_ARCH=linux-x86_64}/libecmc_plugin_motion.so") epicsEnvSet(ECMC_PLUGIN_FILNAME,"$(ecmc_plugin_motion_DIR)/lib/${EPICS_HOST_ARCH=linux-x86_64}/libecmc_plugin_motion.so")
epicsEnvSet(ECMC_PLUGIN_CONFIG,"AXIS=${AX};BUFFER_SIZE=${BUFF_SIZE};DBG_PRINT=${DBG=1};ENABLE=${ENA=1};") epicsEnvSet(ECMC_PLUGIN_CONFIG,"AXIS=${AX};BUFFER_SIZE=${BUFF_SIZE};DBG_PRINT=${DBG=1};ENABLE=${ENA=1};")
${SCRIPTEXEC} ${ecmccfg_DIR}loadPlugin.cmd, "PLUGIN_ID=${PLUGIN_ID},FILE=${ECMC_PLUGIN_FILNAME},CONFIG='${ECMC_PLUGIN_CONFIG}', REPORT=${REPORT=1}" ${SCRIPTEXEC} ${ecmccfg_DIR}loadPlugin.cmd, "PLUGIN_ID=${PLUGIN_ID=0},FILE=${ECMC_PLUGIN_FILNAME},CONFIG='${ECMC_PLUGIN_CONFIG}', REPORT=${REPORT=1}"
dbLoadRecords(${ecmc_plugin_motion_TEMPLATES}ecmcPluginMotion.template,"P=$(IOC):,INDEX=${ECMC_PLG_MOTION_OBJ_INDEX=0},NELM=${BUFF_SIZE=1000}") dbLoadRecords(${ecmc_plugin_motion_TEMPLATES}ecmcPluginMotion.template,"P=$(IOC):,INDEX=${ECMC_PLG_MOTION_OBJ_INDEX=0},NELM=${BUFF_SIZE=1000}")

View File

@@ -839,22 +839,22 @@ void ecmcMotionPlg::executeMotionObject() {
// protect axis_ if axis object id is changed over asyn // protect axis_ if axis object id is changed over asyn
epicsMutexLock(axisMutex_); epicsMutexLock(axisMutex_);
ecmcAxisStatusType *tempAxisStat = axis_->getDebugInfoDataPointer(); ecmcAxisDataStatus *tempAxisStat = axis_->getAxisStatusStruct();
// Fill the buffers // Fill the buffers
actPosBuffer_->addData(tempAxisStat->onChangeData.positionActual); actPosBuffer_->addData(tempAxisStat->currentPositionActual);
setPosBuffer_->addData(tempAxisStat->onChangeData.positionSetpoint); setPosBuffer_->addData(tempAxisStat->currentPositionSetpoint);
diffPosBuffer_->addData(tempAxisStat->onChangeData.positionError); diffPosBuffer_->addData(tempAxisStat->cntrlError);
enableBuffer_->addData(tempAxisStat->onChangeData.statusWd.enable); enableBuffer_->addData(tempAxisStat->statusWord_.enable);
enabledBuffer_->addData(tempAxisStat->onChangeData.statusWd.enabled); enabledBuffer_->addData(tempAxisStat->statusWord_.enabled);
busyBuffer_->addData(tempAxisStat->onChangeData.statusWd.busy); busyBuffer_->addData(tempAxisStat->statusWord_.busy);
executeBuffer_->addData(tempAxisStat->onChangeData.statusWd.execute); executeBuffer_->addData(tempAxisStat->statusWord_.execute);
trajSourceBuffer_->addData(tempAxisStat->onChangeData.statusWd.trajsource); trajSourceBuffer_->addData(tempAxisStat->statusWord_.trajsource);
encSourceBuffer_->addData(tempAxisStat->onChangeData.statusWd.encsource); encSourceBuffer_->addData(tempAxisStat->statusWord_.encsource);
atTargetBuffer_->addData(tempAxisStat->onChangeData.statusWd.attarget); atTargetBuffer_->addData(tempAxisStat->statusWord_.attarget);
errorIdBuffer_->addData(tempAxisStat->onChangeData.error); errorIdBuffer_->addData(tempAxisStat->errorCode);
epicsInt32 *temp=(epicsInt32*)&(tempAxisStat->onChangeData.statusWd); // A bit nasty epicsInt32 *temp=(epicsInt32*)&(tempAxisStat->statusWord_); // A bit nasty
statusWdBuffer_->addData(*temp); statusWdBuffer_->addData(*temp);
xTime_+=xdt_; xTime_+=xdt_;
@@ -870,24 +870,6 @@ void ecmcMotionPlg::executeMotionObject() {
epicsMutexUnlock(axisMutex_); epicsMutexUnlock(axisMutex_);
} }
//void ecmcMotionPlg::setModeFFT(FFT_MODE mode) {
// cfgMode_ = mode;
// setIntegerParam(asynFFTModeId_,(epicsInt32)mode);
//}
//
//FFT_STATUS ecmcMotionPlg::getStatusFFT() {
// return status_;
//}
//void ecmcMotionPlg::updateStatus(FFT_STATUS status) {
// status_ = status;
// setIntegerParam(asynFFTStatId_,(epicsInt32) status);
//
// setIntegerParam(asynElementsInBuffer_, (epicsInt32)elementsInBuffer_);
//
// callParamCallbacks();
//}
asynStatus ecmcMotionPlg::writeInt32(asynUser *pasynUser, epicsInt32 value) { asynStatus ecmcMotionPlg::writeInt32(asynUser *pasynUser, epicsInt32 value) {
int function = pasynUser->reason; int function = pasynUser->reason;
if( function == asynEnableId_ ) { if( function == asynEnableId_ ) {

View File

@@ -10,10 +10,8 @@
#-############################################################################### #-###############################################################################
#- #-
#- Arguments #- Arguments
#- [mandatory]
#- PLUGIN_ID = Plugin instansiation index, must be unique for each call
#-
#- [optional] #- [optional]
#- PLUGIN_ID = Plugin instansiation index, must be unique for each call defaults to 0
#- AX = Axis id, default 1 #- AX = Axis id, default 1
#- BUFF_SIZE = Buffer size, default 1000 #- BUFF_SIZE = Buffer size, default 1000
#- DBG = Debug mode, default 1 #- DBG = Debug mode, default 1
@@ -27,6 +25,6 @@
# Only allow call startup.cmd once. if more objects are needed then use addMotionObj.cmd directlly. # Only allow call startup.cmd once. if more objects are needed then use addMotionObj.cmd directlly.
#- add One motion plugin object, only run startup once #- add One motion plugin object, only run startup once
${ECMC_PLG_MOTION_INIT=""}${SCRIPTEXEC} $(ecmc_plugin_motion_DIR)addMotionObj.cmd "PLUGIN_ID=${PLUGIN_ID},AX=${AX=1},BUFF_SIZE=${BUFF_SIZE=1000},DBG=${DBG=1},ENA=${ENA=1},REPORT=${REPORT=1}" ${ECMC_PLG_MOTION_INIT=""}${SCRIPTEXEC} $(ecmc_plugin_motion_DIR)addMotionObj.cmd "PLUGIN_ID=${PLUGIN_ID=0},AX=${AX=1},BUFF_SIZE=${BUFF_SIZE=1000},DBG=${DBG=1},ENA=${ENA=1},REPORT=${REPORT=1}"
epicsEnvSet("ECMC_PLG_MOTION_INIT" ,"#") epicsEnvSet("ECMC_PLG_MOTION_INIT" ,"#")

View File

@@ -579,7 +579,7 @@ class ecmcMtnMainGui(QtWidgets.QDialog):
axId = axIdPV.get() axId = axIdPV.get()
if axId > 0: if axId > 0:
self.cmbBxSelectAxis.addItem(str(int(ax))) self.cmbBxSelectAxis.addItem(str(int(axId)))
def changeAxisIndex(self,xxx): def changeAxisIndex(self,xxx):
if self.cmbBxSelectAxis.currentData() is not None: if self.cmbBxSelectAxis.currentData() is not None:

View File

@@ -19,4 +19,4 @@ fi
echo "Prefix=${P=c6025a-04}" echo "Prefix=${P=c6025a-04}"
echo "plugin id=${ID=0}" echo "plugin id=${ID=0}"
python ecmcMotionMainPyQtGraph.py ${P=c6025a-04} ${ID=0} python3 ecmcMotionMainPyQtGraph.py ${P=c6025a-04} ${ID=0}