forked from epics_driver_modules/motorBase
Out of date.
This commit is contained in:
@@ -1,152 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
|
||||
<meta name="Author" content="sluiter">
|
||||
|
||||
<meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; U; SunOS 5.6 sun4u) [Netscape]">
|
||||
<title>Procedure for new motor record device drivers</title>
|
||||
<meta name="author" content="Ron Sluiter">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h1> Procedures for adding new motor controller support to motor record</h1>
|
||||
</center>
|
||||
|
||||
<ol>
|
||||
<li> Select a supported controller that most closely matches the characteristics
|
||||
of the new controller. If the new controller is simply a different model
|
||||
of a supported controller family (e.g. Oregon Micro Systems or Newport's Motion
|
||||
Master), then, of course, chose a model from the controller family that most
|
||||
closely matches the characteristics of the new controller. Otherwise,
|
||||
select a supported controller based on other characteristics, such as; communication
|
||||
interface (i.e., VME, RS232, GPIB), controller features (e.g., encoder support,
|
||||
DC servo support, etc.), etc. In what follows this will be called the
|
||||
<i>source</i> controller or <i>source</i> device driver.</li>
|
||||
|
||||
<ul>
|
||||
<li> When I added MM3000 device support I selected the MM4000 because it
|
||||
is simply a different Newport model.</li>
|
||||
<li> When I added IM483 device support I selected the MM4000 because it
|
||||
has a serial communication option.</li>
|
||||
|
||||
</ul>
|
||||
<li> Chose an appropriate device name for the new controller. Copy
|
||||
the <i>relevant </i>files from the selected source controller, to the new,
|
||||
<i>destination,</i> controller, giving the new files appropriate names
|
||||
using the new device name. (See motor_files.html for a list of all
|
||||
motor record source code files.)</li>
|
||||
|
||||
<ul>
|
||||
<li> When I added MM3000 device support I copied the following files:</li>
|
||||
|
||||
<ul>
|
||||
<li> devMM4000.c -> devMM3000.c</li>
|
||||
<li> drvMM4000.h -> drvMMCom.h</li>
|
||||
<li> drvMM4000.c -> drvMM3000.c</li>
|
||||
|
||||
</ul>
|
||||
<li> When I added IM483 device support I copied the following files:</li>
|
||||
|
||||
<ul>
|
||||
<li> devMM4000.c -> devIM483.c</li>
|
||||
<li> drvMMCom.h -> drvIM483.h</li>
|
||||
<li> drvMM4000.c -> drvIM483.c</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
<li> Modify all the new files by cleaning up the obvious header information
|
||||
(e.g. filename, usage, etc.). Delete the old <i>Modification Log </i>
|
||||
entries and add a single new entry that notes which source file you copied
|
||||
to start this file.</li>
|
||||
<li> Modify the new driver include file (e.g., drvOms.h, drvMMCom.h, drvIM483.h,
|
||||
etc.) first.</li>
|
||||
|
||||
<ul>
|
||||
<li> Fix the multiple inclusion protection; i.e.,</li>
|
||||
|
||||
<ul>
|
||||
<li> #ifndef INC<i>filename</i>h</li>
|
||||
<li> #define INC<i>filename</i>h 1</li>
|
||||
<li> #endif /* INC<i>filename</i>h */</li>
|
||||
|
||||
</ul>
|
||||
<li> Delete everything in the driver include file that is specific to the
|
||||
old controller. If a device specific data area is needed for this controller,
|
||||
then that structure definition should appear in this file (see the MMcontroller
|
||||
structure in drvMMCom.h or IM483controller structure in drvIM483.h).</li>
|
||||
|
||||
</ul>
|
||||
<li> Modify the device source code file (e.g., devOms.c, devMM4000.c, devIM483.c,
|
||||
etc.) next.</li>
|
||||
|
||||
<ul>
|
||||
<li> Do a global <i>find and replace</i> on the file; replacing the source
|
||||
root name with the destination root name; e.g., MM4000 to IM483.</li>
|
||||
<li> Find the <device>_build_trans() function. Unless the source
|
||||
controller you chose was from the same family of controllers, the command
|
||||
primitives for the new controller will not match those of the source controller.
|
||||
Hence, each of the <i>switch case </i>statements in <device>_build_trans()
|
||||
will have to be;</li>
|
||||
|
||||
<ol>
|
||||
<li> Evaluated, as to be whether or not the new controller can support the
|
||||
associated motor command.</li>
|
||||
<li> If the new controller supports the motor command, find the command
|
||||
primitive for the motor command and modify the <i>switch case </i>code to
|
||||
output the correct command primitive.</li>
|
||||
|
||||
</ol>
|
||||
<li> Check that the command line terminator function argument located
|
||||
in the <device>_end_trans() function is correct.</li>
|
||||
<li>Determine whether or not the destination motor controller supports
|
||||
multiple commands on the same command line. For example, the Oregon
|
||||
Micro Systems (OMS) motor controllers allow the velocity base, slew velocity,
|
||||
acceleration and target position all on the same command line (e.g.,
|
||||
AX VB200 VL4000 AC4444 MA-38866 GD ID). The Newport Motion Master
|
||||
(i.e, MM3000, MM4000, MM4005) and PM500 controllers also support multiple
|
||||
commands. On the other hand, multiple commands are not supported by
|
||||
the Intelligent Motion Systems (IMS) IM483 motor controller.</li>
|
||||
<ol>
|
||||
<ul>
|
||||
<li>If multiple commands on the same command line <b>is</b> supported,
|
||||
then the functions <device>_start_trans(), <device>_end_trans()
|
||||
and <device>_build_trans() in the destination device code should look
|
||||
like those found in any of the Newport device files; i.e., devPM500.c, devMM4000.c
|
||||
or devMM3000.c. In addition, determine the command seperation ASCII
|
||||
character for the destination motor controller and append this ASCII character
|
||||
to the end of each command primitive.</li>
|
||||
<li>If multiple commands on the same command line <b>is</b> <b>not
|
||||
</b>supported, then the functions <device>_start_trans(),
|
||||
<device>_end_trans() and <device>_build_trans() in the should
|
||||
look like those found in any of the IMS device files; i.e., devIM483SM.c
|
||||
or devIM483PL.c.</li>
|
||||
</ul>
|
||||
|
||||
</ol>
|
||||
|
||||
</ul>
|
||||
<li> Modify the driver source code file (e.g., drvOms.c, drvMM4000.c, drvIM483.c,
|
||||
etc.) next.</li>
|
||||
|
||||
<ul>
|
||||
<li> Do a global <i>find and replace</i> on the file; replacing the source
|
||||
root name with the destination root name; e.g., MM4000 to IM483.</li>
|
||||
<li> Locate each call to send_mess() that passes a string constant argument,
|
||||
either explicitly or through a preprocessor macro name. Modify either
|
||||
the string constant or the macro definition for the new controller.</li>
|
||||
<li>Determine whether or not the destination motor controller echos commands
|
||||
and whether or not this feature can be disabled. If echoing cannot
|
||||
be disabled, then set the brdptr->cmnd_response = ON in motor_init().<br>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ol>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user