I see some overlap in commands with CONEX controller
(https://www.newport.com/mam/celum/celum_assets/resources/CONEX-CC_-_Command_Interface_Manual.pdf?1).
That is not the correct manual for the CONEX to compare. That describes the DLL interface. You just want the ASCII command interface which is this manual: https://www.newport.com/mam/celum/celum_assets/resources/CONEX-CC_-_Controller_Documentation.pdf?1
For second, the command interface for DL controller
(https://www.newport.com/mam/celum/celum_assets/resources/DL_Controller_-_Command_Interface_Manual.pdf?1)
has about 200 commands.
I see only 64 commands, of which the driver needs to support only a small fraction.
These are the command that are actually used in the CONEX driver that appear to be identical in the DL driver:
Read controller version: "VE"
Read stage type: "ID"
Home: "OR"
Move absolute: "PA"
Acceleration: "AC"
Velocity: "VA"
Move relative: "PR"
Move absolute: "PA"
Stop: "ST"
Reset controller: "RS"
Read current position: "TP"
Read status: "TS"
Software limits: "SL" and "SR"
PID parameters: "KP", "KI", "KD"
Closed loop: "MM"
These are the commands that the CONEX driver uses that the DL does not support:
Read encoder increment: "SU"
Read interpolation factor: "IF"
Read microsteps: "FRM"
Read full step size: "FRS"
Home type: "HT"
However, those commands are all done within conditional statements depending on the controller type like this:
// Read the encoder increment (CC and AGP only)
if ((conexModel_ == ModelConexAGP) || (conexModel_ == ModelConexCC)) {
sprintf(pC_->outString_, "%dSU?", pC->controllerID_);
pC_->writeReadController();
encoderIncrement_ = atof(&pC_->inString_[3]);
} else {
encoderIncrement_ = 1.;
}
I am now convinced that modifying the AG_CONEX.cpp driver to also support the DL controller is pretty trivial.
The CONEX driver currently supports 3 models:
typedef enum {
ModelConexAGP,
ModelConexCC,
ModelConexPP
} ConexModel_t;
All you need to do is add a ModelDL to the above list and change a few conditionals so that the driver never sends unsupported commands for the DL model.
Mark
________________________________
From: Igor Kriznar <Igor.Kriznar at partner.kit.edu>
Sent: Wednesday, April 1, 2020 5:22 AM
To: Mark Rivers
Subject: Re: Newport DL325
Hi Mark,
thanks for the tip.
my plan was to check, if motor record supports my device. And if not, to
implement that few commands that will be actually used trough StreamDevice.
For first, I have no experience with motor record development. For
second, the command interface for DL controller
(https://www.newport.com/mam/celum/celum_assets/resources/DL_Controller_-_Command_Interface_Manual.pdf?1)
has about 200 commands.
I see utility in having motor record, but I am not sure how much more
effort the driver will it take in comparison to StreamDevice. I see some
overlap in commands with CONEX controller
(https://www.newport.com/mam/celum/celum_assets/resources/CONEX-CC_-_Command_Interface_Manual.pdf?1).
If you have any advice on this, I would appreciate .
Stay well,
Igor
On 31.03.20 20:01, Mark Rivers wrote:
Hi Igor,
It looks like they are only supporting the DL Single-Axis Motion Controller for those stages.
The User Manual documents the command syntax: https://www.newport.com/mam/celum/celum_assets/resources/DL_-_Controller_Users_Manual.pdf?1
The command syntax is very similar to the Newport AG_CONEX controllers, for which there is an EPICS driver.
https://github.com/epics-motor/motorNewport/blob/master/newportApp/src/AG_CONEX.cpp
You may be able to use the AG_CONEX driver, or you may have to write a new driver starting with that one but modifying the commands and syntax a bit.
Mark
________________________________
From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of Igor Kriznar via Tech-talk <tech-talk at aps.anl.gov>
Sent: Tuesday, March 31, 2020 8:27 AM
To: tech-talk at aps.anl.gov
Subject: Newport DL325
Hi,
is motor record working with Newport DL325 (a Delay Line Stage) with DL
Controller?
Thanks!
Best regards, Igor