- Added Makefile.RHEL8 for RHEL8

- Added a interMessagePeriod to SINQController, pmacController and MasterMACSController. Also a iocsh command to modify this at runtime
This commit is contained in:
2024-02-23 11:30:46 +01:00
parent b4e201ae86
commit 235e403fb3
6 changed files with 101 additions and 3 deletions

40
Makefile.RHEL8 Normal file
View File

@ -0,0 +1,40 @@
# This build the sinq extensions for the PSI EPICS setup
include /ioc/tools/driver.makefile
MODULE=sinq
BUILDCLASSES=Linux
EPICS_VERSIONS=7.0.7
ARCH_FILTER=RHEL%
# additional module dependencies
REQUIRED+=SynApps
REQUIRED+=stream
REQUIRED+=scaler
REQUIRED+=asynMotor
# using a test version
#scaler_VERSION=2024
LIBVERSION=2024
TEMPLATES += sinqEPICSApp/Db/dimetix.db
TEMPLATES += sinqEPICSApp/Db/slsvme.db
TEMPLATES += sinqEPICSApp/Db/spsamor.db
DBDS += sinqEPICSApp/src/sinq.dbd
# What we need at SINQ
SOURCES += sinqEPICSApp/src/devScalerEL737.c
SOURCES += sinqEPICSApp/src/SINQController.cpp
SOURCES += sinqEPICSApp/src/SINQAxis.cpp
SOURCES += sinqEPICSApp/src/EL734Driver.cpp
SOURCES += sinqEPICSApp/src/NanotecDriver.cpp
SOURCES += sinqEPICSApp/src/stptok.cpp
SOURCES += sinqEPICSApp/src/PhytronDriver.cpp
SOURCES += sinqEPICSApp/src/EuroMoveDriver.cpp
SOURCES += sinqEPICSApp/src/pmacAsynIPPort.c
SOURCES += sinqEPICSApp/src/pmacAxis.cpp
SOURCES += sinqEPICSApp/src/pmacController.cpp
SOURCES += sinqEPICSApp/src/drvAsynMasterMACSPort.c
SOURCES += sinqEPICSApp/src/MasterMACSDriver.cpp
# MISCS would be the place to keep the stream device template files

View File

@ -150,7 +150,7 @@ asynStatus
/* read with a short timeout in order to remove duplicate messages /* read with a short timeout in order to remove duplicate messages
* from the line. This also serves to slow down communication * from the line. This also serves to slow down communication
*/ */
pasynOctetSyncIO->read(pasynUserController_, mmacsResponse, 35, .05, &in, &reason); pasynOctetSyncIO->read(pasynUserController_, mmacsResponse, 35, interMessageSleep/1000., &in, &reason);
/* pack data for MasterMACS */ /* pack data for MasterMACS */
len = strlen(command) + 6; len = strlen(command) + 6;

View File

@ -5,10 +5,16 @@
Code lifted from Torsten Boegershausen ESS code. Code lifted from Torsten Boegershausen ESS code.
Mark Koennecke, March 2017 Mark Koennecke, March 2017
Added code to manage an interMessageSleep
Mark Koennecke, February 2024
*/ */
#include "SINQController.h" #include "SINQController.h"
#include "asynMotorController.h" #include "asynMotorController.h"
#include "epicsExport.h"
#include "iocsh.h"
SINQController::SINQController(const char *portName, const char *SINQPortName, int numAxes, const int& extraParams) SINQController::SINQController(const char *portName, const char *SINQPortName, int numAxes, const int& extraParams)
: asynMotorController(portName, numAxes+1, NUM_MOTOR_DRIVER_PARAMS+extraParams, : asynMotorController(portName, numAxes+1, NUM_MOTOR_DRIVER_PARAMS+extraParams,
@ -20,6 +26,53 @@ SINQController::SINQController(const char *portName, const char *SINQPortName, i
{ {
createParam(motorMessageIsFromDriverString, asynParamInt32, &motorMessageIsFromDriver_); createParam(motorMessageIsFromDriverString, asynParamInt32, &motorMessageIsFromDriver_);
createParam(motorMessageTextString, asynParamOctet, &motorMessageText_); createParam(motorMessageTextString, asynParamOctet, &motorMessageText_);
interMessageSleep=20;
}
/** Set the interMessageSleep at runtime */
asynStatus SINQController::setInterMessageSleep(int messageSleep)
{
lock();
interMessageSleep = messageSleep;
unlock();
return asynSuccess;
}
extern "C" {
asynStatus setInterMessageSleep(const char *portName, int messageSleep)
{
SINQController *pC;
static const char *functionName = "setIntermessageSleep";
pC = (SINQController*) findAsynPortDriver(portName);
if (!pC) {
printf("%s:%s: Error port %s not found\n", "SINQController", functionName, portName);
return asynError;
}
return pC->setInterMessageSleep(messageSleep);
} }
/* setInterMessageSleep */
static const iocshArg setInterMessageSleepArg0 = {"Controller port name", iocshArgString};
static const iocshArg setInterMessageSleepArg1 = {"inter message sleep time", iocshArgInt};
static const iocshArg * const setInterMessageSleepArgs[] = {&setInterMessageSleepArg0,
&setInterMessageSleepArg1};
static const iocshFuncDef setInterMessageSleepDef = {"setInterMessageSleep", 2, setInterMessageSleepArgs};
static void setInterMessageSleepCallFunc(const iocshArgBuf *args)
{
setInterMessageSleep(args[0].sval, args[1].ival);
}
static void SINQControllerRegister(void)
{
iocshRegister(&setInterMessageSleepDef, setInterMessageSleepCallFunc);
}
epicsExportRegistrar(SINQControllerRegister);
} // extern C

View File

@ -18,11 +18,15 @@ class epicsShareClass SINQController : public asynMotorController
{ {
public: public:
SINQController(const char *portName, const char *SINQPortName, int numAxes, const int& extraParams=2); SINQController(const char *portName, const char *SINQPortName, int numAxes, const int& extraParams=2);
asynStatus setInterMessageSleep(int messageSleep);
friend class SINQAxis; friend class SINQAxis;
protected: protected:
int motorMessageIsFromDriver_; int motorMessageIsFromDriver_;
int motorMessageText_; int motorMessageText_;
int interMessageSleep; // minimum time between message to the controller in microseconds
// for slowing down communication to weak controllers.....
}; };

View File

@ -300,7 +300,7 @@ setIntegerParam(this->motorStatusCommsError_, 0);
} }
} }
usleep(20); // slow down communication somewhat usleep(interMessageSleep); // slow down communication somewhat
asynPrint(lowLevelPortUser_, ASYN_TRACEIO_DRIVER, "%s: response: %s\n", functionName, response); asynPrint(lowLevelPortUser_, ASYN_TRACEIO_DRIVER, "%s: response: %s\n", functionName, response);
debugFlow("Received: "); debugFlow("Received: ");

View File

@ -9,6 +9,7 @@ registrar(pmacControllerRegister)
registrar(pmacAsynIPPortRegister) registrar(pmacAsynIPPortRegister)
registrar(drvAsynMMACSPortRegisterCommands) registrar(drvAsynMMACSPortRegisterCommands)
registrar(MasterMACSRegister) registrar(MasterMACSRegister)
registrar(SINQControllerRegister)
#-------------------------------------------------------- #--------------------------------------------------------
# With the PSI module build system, including these items actually # With the PSI module build system, including these items actually