.

Release Note
MPI Library Version 03.01.01

Release Type
MPI Version
Release Date
Patch Release
03.01.01
20Sept2004
Production Release
03.01.00
30July2004

 

  Table of Contents
    Notes
      System Requirements
Software Installation Instructions
Important Things to Know - This section highlights the most important changes in this release.
     
    New Features
     

Version 03.01.01
     Support for AMC Drive DQ111RE - MPI1480

Version 03.01.00
     Support for AMC Drive DQ113EE - MPI1392
     Probe Support for Kollmorgen CD Drive - MPI1391
     Probe Support for the RMB-10V2 - MPI1355
     meiCanCommand supports NMT Protocol - MPI1354
     Addition of Configurable Axis Frame Buffers - MPI1353
     Support for auto-detect bit rate feature on CANopen nodes - MPI1351
     Version.exe reports CAN node version information - MPI1326
     Addition of CAN Node Version calls to the MPI - MPI1323
     Mapable Secondary Encoder Programming Interface - MPI1319
     Camming Support - MPI1300
     Manufacturer and User Fields added to the EEPROM - MPI1311
     Replacement of MEIControlVersion with MEIControlInfoX structures - MPI1294
     New Compensator object - MPI1287
     Encoder Filter Enable/Disable has been added to MEIMotorConfig - MPI1269
     An AmpWarning event has been added to MPIMotorConfig/Status - MPI1230
     ZMP Software Support - MPI1197

    General Changes
     

Version 03.01.00
     MoveID and ElementID changed to 16-bit resolution - MPI1434
     Changed meiSqNodeAnalogIn(...) to meiSqNodeAnalogInput(...) - MPI1428
     Changes to meiObject[Flash]ConfigGet and meiObject[Flash]ConfigSet - MPI1368
     New MPI Version Numbering - MPI1358
     Deletion of MEIXmpIOFrame - MPI1349
     MEI SLICE I/O using CANopen Interface reads digital I/O - MPI1325
     Allow MPI to set RESUME any time a STOP is in progress or finished - MPI1320
     MPIMotorEventTrigger.encoder should be MPIMotorEncoderFault - MPI1314
     Phase Reversal moved to MEIMotorEncoder - MPI1289
     Feedforward for PTF and PVTF improvements - MPI1286
     Reordered the Capture Source Enum - MPI1249
     Use zero velocity to generate a DONE status/event - MPI1202

    Fixed Bugs
     

Version 03.01.01
    mpiAxisCommandPositionSet(...) returns MPIAxisMessageCOMMAND_NOT_SET - MPI1488
    VM3 does not work '-load' option - MPI1476
    Multi-point moves with appends get unexpected error state - MPI1473
    Step pulse width does not work for ZMP - MPI1471
    Multi-point motion bug with axisFrameCount <> 128 - MPI1470
    The presence of the CAN Hardware is falsely reported - MPI1464

Version 03.01.00
    Motor resource boundary check - MPI1441
    Capture Edge Trigger not configured correctly - MPI1440
    Path Motion has incorrect deceleration - MPI1431
    mpiEventMgrService(...) gets stuck in an infinite loop if CAN firmware not loaded - MPI1430
    Trust RMB Hall inputs don't show up in dedicated inputs - MPI1426
    Position jump during the motion modify of a velocity frame - MPI1425
    PT/PVT motion stuck in MOVING state - MPI1423
    Certain path motion moves cause friction feedforward noise - MPI1418
    Fixed meiSqNodeDriveMonitor(...) - MPI1412
    meiFilterConfigSet does not write MEIFilterConfig.PostFilterForm - MPI1397
    MPI recognizes a wider range of post filter settings - MPI1394
    New error messages to replace MPIMessageFATAL_ERROR - MPI1393
    After topology is saved, the motor input bits are potentially not returned to host - MPI1380
    Non Motion Actions after a Profile Not Supported is returned from a Motion - MPI1376
    Change INVALID enumerations to use some other defintion for -1 - MPI1372
    Moves using MEIMotionTypeFRAME do not start - MPI1350
    Topology Save fails with Trust Automation RMB - MPI1348
    Incorrect return value when using a CANopen analog input  - MPI1327
    XCVR D, E, F for RMB-10V2, 10V - MPI1322
    Recovery Mode was not being saved - MPI1316
    BSOD with multiple eventMgrs - MPI1312
    All XMP addresses should be host addresses - MPI1303
    Encoder type is checked before allowing the user to invert the feedback - MPI1301
    AMC node has busy timeout during initialization - MPI1295
    SynqNet topology saved status not updated properly in Motion Console - MPI1293
    Unnecessary "Save network topology to flash memory now?" popup window - MPI1292
    Brake toggles on/off during controller reset after topology is saved - MPI1291
    No firmware found message not returned - MPI1290
    mpiControlValidate causes unhandled exception - MPI1288
    Filter and Axis object deadlock in firmware - MPI1280
    Commanding a move with a disabled motor - MPI1273
    The order of arguments passed to sqCmd.exe is important - MPI1270
    Accessibility of Board Information - MPI1212
    Some capture objects default to not enabled - MPI1171
    Accessing unsupported drive parameters returns a non-descriptive error code - MPI1159

    Open Issues
      Existing Bugs
     Currently, there are no known bugs.
      Limitations
    Linux port of meiPlatformProcessId(...) uses the getpid() - MPI1362
    Motion Action RESET should be called before enabling motor - MPI1285
         

New Features

Version 03.01.01

  Support for AMC Drive DQ111RE
    Reference Number: MPI 1480
    Type: New Feature
    MPI Version: 03.01.01
   

Description:
Support has been added for the AMC Drive DQ111RE. Changes were made to the amc_digiflex.c drive module.

   

How do I use this feature?
For more information about the AMC Drive DQ111RE, please contact Advanced Motion Controls.

 

Version 03.01.00

  Support for AMC Drive DQ113EE
    Reference Number: MPI 1392
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
Support has been added for the AMC Drive DQ113EE. This drive is similar to the rest of the DQ-series family with the exception of its I/O (4 outputs, 12 inputs). Changes were made to the amc_digiflex.c drive module.

   

How do I use this feature?
For more information about the AMC Drive DQ113EE, please contact Advanced Motion Controls.


  Probe Support for Kollmorgen CD Drive
    Reference Number: MPI 1391
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
The Kollmorgen CD Drive now has Probe support.

   

How do I use this feature?
Please see the Probe object.


  Probe Support for the RMB-10V2
    Reference Number: MPI 1355
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
The RMB-10V2 now has Probe support. In order to use Probe with the RMB-10V2, you must download the C0FE0033 FPGA. In order to have enough space for the Probe feature, Pulse support was removed from the C0FE0033 FPGA.

   

How do I use this feature?
Please see the Probe object.


  meiCanCommand supports NMT Protocol
    Reference Number: MPI 1354
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
The following new Can commands have been added to meiCanCommandType.     
     MEICanCommandTypeNMT_ENTER_PRE_OPERATIONAL
     MEICanCommandTypeNMT_START_REMOTE_NODE
     MEICanCommandTypeNMT_STOP_REMOTE_NODE
     MEICanCommandTypeNMT_RESET_NODE
     MEICanCommandTypeNMT_RESET_COMMUNICATION

These new Can commands allow each of the CANOpen protocols NMT commands to be issued from the host. These replace the original MEICanCommandTypeNMT_STOP and MEICanCommandTypeNMT_START commands.

    Code Interface:


can.h


OLD
typedef enum {
     MEICanCommandTypeSDO_READ,
     MEICanCommandTypeSDO_WRITE,
     MEICanCommandTypeCLEAR_STATUS_BITS,
     MEICanCommandTypeBUS_START,
     MEICanCommandTypeBUS_STOP,
     MEICanCommandTypeNMT_STOP,
     MEICanCommandTypeNMT_START

} MEICanCommandType;

NEW
typedef enum {
     MEICanCommandTypeSDO_READ,
     MEICanCommandTypeSDO_WRITE,
     MEICanCommandTypeCLEAR_STATUS_BITS,
     MEICanCommandTypeBUS_START,
     MEICanCommandTypeBUS_STOP,
     MEICanCommandTypeNMT_ENTER_PRE_OPERATIONAL,      MEICanCommandTypeNMT_START_REMOTE_NODE,      MEICanCommandTypeNMT_STOP_REMOTE_NODE,      MEICanCommandTypeNMT_RESET_NODE,      MEICanCommandTypeNMT_RESET_COMMUNICATION,
} MEICanCommandType;

For more information, see MEICanCommandType.

 


   

How do I use this feature?
The new NMT_ENTER_PRE_OPERATIONAL and NMT_START_REMOTE_NODE commands are used in the same way as the original NMT START and NMT_STOP commands.


  Addition of Configurable Axis Frame Buffers
    Reference Number: MPI 1353
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
The controller's axis frame buffers are now configurable on a per axis basis.

This feature is useful when frame buffers greater than the default 128 frames are required, such as when the axis Camming feature is used.

    Code Interface:


control.h

NEW
#define MPIControlMAX_AXES (32)

typedef struct MPIControlConfig {
    ...
    long axisFrameCount[MPIControlMAX_AXES];
    ...
}MPIControlConfig;

For more information, see MPIControlConfig.

 


   

How do I use this feature?
The number of frames allocated for any one axis MUST be a power of 2 (128, 256, 512, etc...)

WARNING!

Due to the nature of dynamic allocation and the clearing of external memory buffers, mpiControlConfigSet(...) should ONLY be called at the time of motion application initialization and NOT during an motion.


  Support for auto-detect bit rate feature on MEI CANopen nodes
    Reference Number: MPI 1351
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
To simplify the setup and initialization process, the CANOpen I/O nodes from MEI support an auto-detect bit rate feature that automatically detects and sets the appropriate bit rate for the CAN Network Adapter. For more information, please see the SLICE I/O Quick-Start Guide: CANopen.

To support CANOpen nodes that support auto-bit rate detection, CAN firmware versions from 2B1 and onwards now work with nodes that support auto-bit rate detection.

   

How do I use this feature?
The auto-detect bit rate feature is only supported with CAN firmware CAN002B1 and later.


  Version.exe reports CAN node version information
    Reference Number: MPI 1326
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
Version.exe now reports the vendor ID, product code, version number and serial number of all the nodes on the CANopen network. You can use version.exe to quickly identify the type of node on the CAN network and what version of CAN firmware is being run on the CANopen node.

   

How do I use this feature?


C:\>version
MPI: version 03.01.00
MPI firmware: version 525 option 0
XMP firmware: version 525 revision B sub-revision 4 option 0
              branchId 0

Driver: version 3.00
PLD : version 0x0011 option 0x2192
Rincon: version 0x0218 package 0x9201
XMP : T014-0001 Serial Number 440060

CAN
Bootloader Version: 2
CAN Firmware: version 2 revision B sub-revision 1

CAN Node[4]
Type : 401 (IO Node)
Vendor ID : 0x014F (MEI)
Product Code : 0x0204
Version Number : 0x10030
Serial Number : 0x1234

CAN Node[5]
Type : 401 (IO Node)

NOTE: Node 4 is an MEI Slice I/O node and Node 5 is a CANOpen I/O node from a supplier that does not support reporting the vendor ID information.

 


  Addition of CAN Node Version calls to the MPI
    Reference Number: MPI 1323
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
CAN Node Version calls have been added to the MPI. The addition of these fields will allow you to quickly identify the type of node on the CAN network and what version of CAN firmware is being run on the CANopen node.

    Code Interface:


can.h


NEW
typedef struct MEICanNodeInfo {
     MEICanNodeType      type;
     unsigned long       digitalInputCount;
     unsigned long       digitalOutputCount;
     unsigned long       analogInputCount;
     unsigned long       analogOutputCount;
     MEICanHealthType    healthType;
     unsigned long       vendorID;
     unsigned long       productCode;
     unsigned long       versionNumber;
     unsigned long       serialNumber;

} MEICanNodeInfo;

For more information, see MEICanNodeInfo.


   

How do I use this feature?
Please see the documentation for the MEICanNodeInfo method.


  Mapable Secondary Encoder Programming Interface
    Reference Number: MPI 1319
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
Support has been added for re-mapping secondary encoders to different motors on the same node. Please see the documentation for the meiSqNodeConfigSet(...) method.

    Code Interface:


sqNode.h


typedef struct MEISqNodeFeedbackSecondary {
    long   motorIndex;
} MEISqNodeFeedbackSecondary;

typedef struct MEISqNodeConfig {
    MEISqNodeConfigAlarm         nodeAlarm;
    MEISqNodeConfigIoAbort       ioAbort;
    MEISqNodeConfigPacketError   upStreamError;
    MEISqNodeConfigPacketError   downStreamError;
    MEISqNodeConfigUserFault     userFault;
    MEISqNodeFeedbackSecondary   feedbackSecondary
                                    [MEISqNodeMaxFEEDBACK_SECONDARY];

} MEISqNodeConfig;

For more information, see MEISqNodeFeedbackSecondary and MEISqNodeConfig.

 


   

How do I use this feature?
Please see the documentation for the meiSqNodeConfigSet method.


  Manufacturer and User Fields added to the EEPROM
    Reference Number: MPI 1311
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
Manufacturer and User Fields added to the EEPROM as specified in the Node ID specification. This feature should be used for reading and writing both manufacturer and user information to the node EEPROM.

    Code Interface:


sqNode.h


NEW
typedef struct MEISqNodeUserData {
     char   data[MEISqNodeUserDATA_CHAR_MAX];
}MEISqNodeUserData

For more information, see MEISqNodeUserData.

 

typedef struct MEISqNodeInfoId {
     unsigned   long nodeType;   /* product/mfg code */
     char            *nodeName;  /* product/mfg string */
     unsigned   long option;     /* product option code*/
     unsigned   long switchId;   /* rotary switch id */
     unsigned   long unique;     /* unique id code */

     long            exactMatch; /* TRUE/FALSE */

     char            serialNumber[MEISqNodeID_CHAR_MAX];
     char            modelNumber[MEISqNodeID_CHAR_MAX];
     char            manufacturerData
                          [MEISqNodeManufacturerDATA_CHAR_MAX];

} MEISqNodeInfoId;

For more information, see MEISqNodeInfoId.

 


   

How do I use this feature?
This feature should be used to store vendor and user specific information on the node.


  Camming Support
    Reference Number: MPI 1300
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
For more information, please see the following pages:
Camming: Master-Slave Concept
Camming: General Information
Camming: Correctional Moves

   

How do I use this feature?
Refer to the links above.


  Replacement of MEIControlVersion with MEIControlInfoX structures
    Reference Number: MPI 1294
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
The lengthy MEIControlVersion structure was divided into several MEIControlInfoX structures.

    Code Interface:


stdmei.h


OLD - Deleted
typedef struct MEIControlVersion {
    struct { /* control.c */
        char *version; /* MEIControlVersionMPI (YYYYMMDD) */
    struct { /* xmp.h */
        long version; /* MEIXmpVERSION */
        long option; /* MEIXmpOPTION */ }
    firmware;
    } mpi;
    struct {
        long version; /* hardware version */
        struct { /* MEIXmpData.SystemData{} */
            long version; /* MEIXmpVERSION_EXTRACT(SoftwareID) */
            char revision; /* ('A' - 1) + MEIXmpREVISION_EXTRACT(SoftwareID) */
            long subRevision; /* MEIXmpSUB_REV_EXTRACT(Option) */
            long developmentId; /* MEIXmpDEVELOPMENT_ID_EXTRACT(Option) */
            long option; /* MEIXmpOPTION_EXTRACT(Option) */
            long userVersion;
            long branchId;
        } firmware;
        
        struct {
            struct {
                long version;
                long option;
            } PLD;
            struct {
                char number[10];
                char rev[5];
            } model;
            struct {
                long version;
            } FPGA;
        } board;
    } xmp;
    struct {
        char version[10]; }
    driver;
} MEIControlVersion;

typedef struct MEIControlInfo {
    char tNumberMEIControlSTRING_MAX;
    char serialNumber[MEIControlSTRING_MAX];
    char boardType[MEIControlSTRING_MAX];
}MEIControlInfo;

NEW - Added
typedef struct MEIControlInfo {
    MEIControlInfoMpi        mpi;
    MEIControlInfoFirmware   firmware;
    MEIControlInfoPld        pld;
    MEIControlInfoRincon     rincon;
    MEIControlInfoHardware   hardware;
    MEIControlInfoDriver     driver;
} MEIControlInfo;

For more information, see MEIControlInfo.

 


   

How do I use this feature?
For more information, see MEIControlInfo.


  New Compensator object
    Reference Number: MPI 1287
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
A new Compensator object has been added to the MPI to handle Axis position compensation based on compenstion values loaded onto the controller.

   

How do I use this feature?
Please see the MPI Software Documentation for more information.


  Encoder Filter Enable/Disable has been added to MEIMotorConfig
    Reference Number: MPI 1269
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
The ability to disable the encoder filter on quadrature encoders has been added to MEIMotorConfig. This feature should be used to enable or disable the quadrature encoder filter.

    Code Interface:

stdmei.h:

NEW
typedef struct MEIMotorEncoder {
    MEIMotorEncoderType          type;
    long                         encoderPhase;
                                 /* 0 => normal, else reversed */
    long                         filterDisable;
                                 /* 0 => quad filter enabled,
                                 else not enabled */

    long                         countsPerRev;
    MEIMotorEncoderRatio         ratio;
    MEIMotorEncoderReverseModulo reverseModulo;
} MEIMotorEncoder;

See MEIMotorConfig and MEIMotorEncoder.

 


   

How do I use this feature?
To disable the filter, set filterDisable to TRUE.


  An AmpWarning event has been added to MPIMotorConfig/Status
    Reference Number: MPI 1230
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
An AmpWarning event has been added to MPIEventType. This feature should be used to trigger motorEvents off of the AmpWarning bit, which is returned by the drive through the Dedicated I/O word.

    Code Interface:


event.h
:

NEW
typedef enum {
     ...
     MPIEventTypeAMP_WARNING,   /* 9 */
     ...
} MPIEventType;

See MPIMotorConfig and MPIMotorEventConfig

 


   

How do I use this feature?
The configuration and reporting of the AMP_WARNING event behaves identically to the AMP_Fault event. To configure the event type, use MPIMotorConfig. To check the status of the event type, use mpiMotorStatus.


  ZMP Software Support
    Reference Number: MPI 1197
    Type: New Feature
    MPI Version: 03.01.00
   

Description:
Support has been added for the ZMP-series controllers. The ZMP-series is a new high performance SynqNet controller. It supports the same features as the XMP-series and uses the same MPI Library. There are currently no differences in MPI methods or data structures for the ZMP controllers. The main difference between the XMP and ZMP controllers is performance. In general, ZMP controllers can be operated at sample rates from 4 to 8 times the rates for XMP controllers.

The ZMP can be used in place of XMP controllers for applications with performance requirements that exceed the limits of XMP controllers.

   

How do I use this feature?
The installation of ZMP controllers is identical to that of XMP controllers. Please see the ZMP Hardware Quick-Start Guide for details.

 

General Changes

Version 03.01.00


MoveID and ElementID changed to 16-bit resolution
    Reference Number: MPI 1434
    Type: General Change
    MPI Version: 03.01.00
   

Description:
MoveID and ElementID have been changed to 16-bit resolution. The 16-bit limit on both the MoveID and ElementID was implemented because there was not enough room to support 32 bits for each of the MoveID and ElementID parameters in both the positive and negative frame directions.

For both the MoveID and ElementID, there is now support for 32 bits in both the positive and negative frame directions. For example, in a frame, the lower 16 bits of the MoveID field represent the MoveID for the positive frame direction. The upper 16 bits represent the MoveID for the negative direction.

   

How do I use this feature?
The basic functionality of MoveID and ElementID has not changed. The only change is that the MoveID and ElementID values are limited to 16 bits. The user does not need to change their implementation (other than to choose IDs that are limited to 16 bits). This is a lower lever implementation issue.



Changed meiSqNodeAnalogIn(...) to meiSqNodeAnalogInput(...)
    Reference Number: MPI 1428
    Type: General Change
    MPI Version: 03.01.00
   

Description:
meiSqNodeAnalogIn(...) has been changed to meiSqNodeAnalogInput(...). This method should be used to read analog inputs located on the Node. It is used on an application level to read analog inputs.

    Code Interface:


sqNode.h
:

OLD
long meiSqNodeAnalogIn(MEISqNode    node,
                       long         channel,
                       double       *state);

NEW
long meiSqNodeAnalogInput(MEISqNode    node,
                          long         channel,
                          double       *state);




  Changes to meiObject[Flash]ConfigGet and meiObject[Flash]ConfigSet
    Reference Number: MPI 1368
    Type: General Change
    MPI Version: 03.01.00
   

Description:
The MEI object config method and object flash config method interfaces have been changed to be consistent with the MPI object config and flash config methods.

NOTE: This change breaks backwards compatibility for the effected MEI config methods. Your application may need to be recompiled.

In addition, the meiCanFlashNodeConfigGet/Set methods have been depricated in this release. While these methods are still supported, MEI reserves the right to remove depricated methods. Your application should use the new meiCanNodeFlashConfigGet/Set methods if you plan to upgrade to future versions of the MPI.

 

    Code Interface:


The following specific interface changes were made:

meiMotorDacConfigGet/Set
   removed flash parameter

meiMotorDacFlashConfigGet/Set
   added new methods

meiSynqNetConfigGet/Set
   removed flash parameter

meiSynqNetFlashConfigGet/Set
   reordered config and flash parameters

meiSynqNetPacketConfigSet
   removed flash parameter

meiSqNodeConfigGet/Set
   removed flash parameter

Addition of the following methods:
meiSqNodeFlashConfigGet/Set
meiSynqNetPacketFlashConfigGet/Set
   get routine currently not supported.

Deprecated of the following method:
meiCanFlashNodeConfigGet/Set
While these methods are still supported, MEI reserves the right to remove deprecated methods. Your application should use the new meiCanNodeFlashConfigGet/Set methods if you plan to upgrade to future versions of the MPI.



  New MPI Version Numbering
    Reference Number: MPI 1358
    Type: General Change
    MPI Version: 03.01.00
   

Description:
The MPI version numbering has been updated from date codes (YYYYMMDD) to a more traditional numbering scheme (Major.Minor.Release). Please see MPI Version Numbering for details. The Software Release Types have also been formally defined. Please see MPI Release Types for details.

    Code Interface:


control.h
:
The version defines were expanded and changed to support the new version numbering.

OLD
#define MPI_VERSION "20040330"
#define MPI_INTERFACE_VERSION "20040330"

NEW
#define MPI_VERSION_MAJOR    "02"
#define MPI_VERSION_MINOR    "01"
#define MPI_VERSION_RELEASE  "Dev0"
#define MPI_VERSION MPI_VERSION_MAJOR"."MPI_VERSION_MINOR"."MPI_VERSION_RELEASE
#define MPI_INTERFACE_VERSION MPI_VERSION_MAJOR"."MPI_VERSION_MINOR



  Deletion of MEIXmpIOFrame
    Reference Number: MPI 1349
    Type: General Change
    MPI Version: 03.01.00
   

Description:
In xmp.h, the MEIXmpIOFrame data type was deleted and the MEIXmpHoldFrame data type was created as a replacement. The functionality has not changed and should be used the same way for triggers.

In xmp.h, the MEIXmpOutputFrame data type was created. It is essentially the same as MEIXmpIOFrame, except Mask is now OffMask and Pattern is now OnMask.

As a result of these changes, MEIMotionAttrOutput was modified accordingly.

    Code Interface:


stdmei.h
:

OLD
typedef struct MEIMotionAttrOutput {
    MEIMotionAttrOutputType type;
    union {
        long   *output;
        long   motor;
    } as;
    long   mask;
    long   pattern;
    long   pointIndex; /* MEIMotionAttrMaskOUTPUT for path motion - point index for turning on output - used with point lists */
} MEIMotionAttrOutput;

NEW
typedef struct MEIMotionAttrOutput {
    MEIMotionAttrOutputType type;
    union {
        long   *output;
        long   motor;
    } as;
    long   offMask;
    long   onMask;
    long   pointIndex; /* MEIMotionAttrMaskOUTPUT for path motion - point index for turning on output - used with point lists */
} MEIMotionAttrOutput;

For more information, see MEIMotionAttrOutput.


   

How do I use this feature?
This feature should be used when there is a frame set or to clear an output.

For MEIMotionAttrOutput:

OffMask - any bits that are SET will be turned off.
OnMask - any bits that are SET will be turned on.

The OffMask is applied first: output & = ~OffMask
For Output frames, bits Set in the OffMask are turned OFF and bits Set in the OnMask are turned ON.

The order of operations should be:
     output &= ~OffMask;
     output |= OnMask;

Since the OnMask is applied last, the OnMask has precedence. If a bit is set in both the OffMask AND the OnMask, the result is that the bit is turned ON.


  MEI SLICE I/O using CANopen Interface reads digital I/O
    Reference Number: MPI 1325
    Type: General Change
    MPI Version: 03.01.00
   

Description:
The digitalInputCount and digitalOutputCount fields of the MEICanNodeInfo structure report the number of digital inputs and outputs a node supports. The CANOpen protocol only allows the number of digital inputs and outputs to be interrogated in multiples of eight (i.e. if a node has two digital inputs then digitalInputCount will return eight). For MEI CANOpen Slice nodes, an extension to the CANOpen protocol is supported that allows the exact number of digital inputs to be returned in this field. The CAN firmware on the XMP (versions 2A7 and higher) has been modified to use this field if it is available.

Nodes that don't support this feature (i.e. nodes not made by MEI) are still supported, the only difference is that the number of digital inputs and outputs will still be reported in multiples of eight.

    Code Interface:


can.h
:

typedef struct MEICanNodeInfo {
     MEICanNodeType      type;
     unsigned long       digitalInputCount;
     unsigned long       digitalOutputCount;
     unsigned long       analogInputCount;
     unsigned long       analogOutputCount;
     MEICanHealthType    healthType;
     unsigned long       vendorID;
     unsigned long       productCode;
     unsigned long       versionNumber;
     unsigned long       serialNumber;
} MEICanNodeInfo;

For more information, see MEICanNodeInfo.


   

How do I use this feature?
The digitalInputCount and digitalOutputCount fields of the MEICanNodeInfo structure report the number of digital inputs and outputs a node supports. The CANOpen protocol only allows the number of digital inputs and outputs to be interrogated in multiples of eight, i.e. if a node has two digital inputs then digitalInputCount will return eight.

For MEI CANOpen SLICE I/O nodes, an extension to the CANOpen protocol is supported that allows the exact number of digital inputs to be returned in the digitalInputCount field. The CAN firmware for the XMP has been modified to use this field if it is available. Nodes that do NOT support this feature (i.e. nodes not made by MEI) are still supported, the only differance is that the number of digital inputs and outputs will still be reported in multiples of eight.

For more information, see MEICanNodeInfo.

 


  Allow MPI to set RESUME any time a STOP is in progress or finished
    Reference Number: MPI 1320
    Type: General Change
    MPI Version: 03.01.00
   

Description:
Allow MPI to set RESUME anytime a STOP is in progress or finished. MPI does not allow RESUME while STOPPING, only when STOPPED. This feature is helpful for an immediate RESUME after a STOP has been commanded without having to wait for a STOP to complete.

   

How do I use this feature?
Use mpiMotionAction() as normal for an immediate RESUME after a STOP has been commanded without having to wait for STOP to complete.

 


  MPIMotorEventTrigger.encoder should be MPIMotorEncoderFault
    Reference Number: MPI 1314
    Type: General Change
    MPI Version: 03.01.00
   

Description:
MPIMotorEventTrigger.encoder changed from "long" to MPIMotorEncoderFault.

    Code Interface:


motor.h
:

OLD

typedef union {
   long     polarity; /* 0 => active low, else active high */
   long     position; /* MPIEventTypeLIMIT_SW_[POS|NEG] */
   float    error;    /* MPIEventTypeLIMIT_ERROR */
   long     encoder;  /* MPIEventTypeENCODER_FAULT */
} MPIMotorEventTrigger;

NEW
typedef union {
   long                 polarity; /* 0 => active low,
                                  else active high */
   long                 position; /* MPIEventTypeLIMIT_SW_[POS|NEG] */
   float                error;    /* MPIEventTypeLIMIT_ERROR */
   MPIMotorEncoderFault encoder;  /* MPIEventTypeENCODER_FAULT */
} MPIMotorEventTrigger;


   

How do I use this feature?
For more information, see MPIMotorEventTrigger.

 


  Phase Reversal moved to MEIMotorEncoder
    Reference Number: MPI 1289
    Type: General Change
    MPI Version: 03.01.00
   

Description:
Encoder "phaseReversal" was moved from MPIMotorConfig to MEIMotorEncoder, thereby allowing the user to loop through the array of encoder configurations. This change cleans up the design considerably and was necessary because the encoder phase is dependent on the encoder type. Therefore, encoder phase and encoder type needed to be grouped together. Currently, phase reversal is only applicable to quadrature feedback.

    Code Interface:


motor.h
:

OLD

typedef struct MPIMotorConfig {
    MPIMotorType         type; /* Event configuration,
                            ordered by MPIEventType */
    MPIMotorEventConfig  event[MPIEventTypeMOTOR_LAST];
    long                 encoderPhase; /* 0 => normal,
                                        else reversed */
    long                 secondaryEncoderPhase; /* 0 => normal,
                                                else reversed */

    float                abortDelay;
    float                enableDelay;
    MPIMotorBrake        brake;    
    MPIObjectMap         filterMap;
} MPIMotorConfig;

NEW
typedef struct MEIMotorEncoder {
    MEIMotorEncoderType          type;
    long                         encoderPhase; /* 0 => normal,
                                        else reversed */

    long                         filterDisable; /* 0 => quad filter                                         enabled, else not enabled */
    long                         countsPerRev;
    MEIMotorEncoderRatio         ratio;
    MEIMotorEncoderReverseModulo reverseModulo;
} MEIMotorEncoder;

For more information, see MPIMotorConfig and MEIMotorEncoder.


mpiMotorConfigGet/Set

 


   

How do I use this feature?
For more information, see mpiMotorConfigGet/Set.


  Feedforward for PTF and PVTF improvements
    Reference Number: MPI 1286
    Type: General Change
    MPI Version: 03.01.00
   

Description:
In previous versions, feedforward values were passed to the controller with each point for PTF and PVTF motion. These values were constant during the interval between points. Improvements have been made so that the values can now be interpolated linearly over the interval. The motion types MPIMotionTypePTF and MPIMotionTypePVTF, support user-specified feedforward values for each point. The following improvements have been made to the PTF and PVTF motion types.

  • The feedforward values are interpolated linearly over the PT or PVT time intervals. The feedfoward values correspond to the P or PV values. (i.e. When the motion reaches a specified position (PTF) or position and velocity (PVTF), the interpolated feedforward value will be equal to what is specified in the motion parameters.)

  • The feedforward values are not set to 0 at the beginning of the move; they retain the last value that is specified in the PTF or PVTF motion parameters.

  • The feedforward values are not changed by non-PTF or PVTF moves. Previous versions of the firmware would set the feedforward value to zero for any move that was not a PTF or PVTF move (i.e. PT, PVT, Spline, S-Curve, etc.).
    Code Interface:

motion.h:

NEW
typedef struct MPIMotionPTF {
    long           pointCount;
    double         *position;
    double         *feedForward;
    double         *time;
    MPIMotionPoint point;
} MPIMotionPTF;

typedef struct MPIMotionPVTF {
    long           pointCount;
    double         *position;
    double         *velocity;
    double         *feedForward;
    double         *time;
    MPIMotionPoint point;
} MPIMotionPVTF;

See MPIMotionPTF and MPIMotionPVTF

 


   

How do I use this feature?
See MPIMotionPTF and MPIMotionPVTF.


  Reordered the Capture Source Enum
    Reference Number: MPI 1249
    Type: General Change
    MPI Version: 03.01.00
   

Description:
The Capture source enum (MPICaptureSource) used to specify triggers sources for the capture engine.

The enumeration for the capture sources has been reordered so that the I/O sources are listed first. As a result, the value for MPICaptureSourceMOTOR_IO_0 will correspond with the value for MEIMotorIoConfigIndex0. In the future, we will improve the way I/O labels, masks, and sources are presented to the user. I/O capture sources will also be modified.

    Code Interface:


capture.h
:

OLD

typedef enum MPICaptureSource {
   MPICaptureSourceINVALID = -1,

   MPICaptureSourceHOME,
   MPICaptureSourceINDEX,
   MPICaptureSourceLIMIT_HW_NEG,
   MPICaptureSourceLIMIT_HW_POS,
   MPICaptureSourceGLOBAL,
   MPICaptureSourceMOTOR_IO_0,
   MPICaptureSourceMOTOR_IO_1,
   MPICaptureSourceMOTOR_IO_2,
   MPICaptureSourceMOTOR_IO_3,
   MPICaptureSourceMOTOR_IO_4,
   MPICaptureSourceMOTOR_IO_5,
   MPICaptureSourceMOTOR_IO_6,
   MPICaptureSourceMOTOR_IO_7,
   MPICaptureSourceINDEX_SECONDARY,

   MPICaptureSourceLAST,
   MPICaptureSourceFIRST = MPICaptureSourceINVALID + 1,

   MPICaptureSourceCOUNT = MPICaptureSourceLAST,
} MPICaptureSource;

NEW
typedef enum MPICaptureSource {
   MPICaptureSourceINVALID = -1,

   MPICaptureSourceMOTOR_IO_0,
   MPICaptureSourceMOTOR_IO_1,
   MPICaptureSourceMOTOR_IO_2,
   MPICaptureSourceMOTOR_IO_3,
   MPICaptureSourceMOTOR_IO_4,
   MPICaptureSourceMOTOR_IO_5,
   MPICaptureSourceMOTOR_IO_6,
   MPICaptureSourceMOTOR_IO_7,

   MPICaptureSourceHOME,
   MPICaptureSourceINDEX,
   MPICaptureSourceLIMIT_HW_NEG,
   MPICaptureSourceLIMIT_HW_POS,
   MPICaptureSourceGLOBAL,
   MPICaptureSourceINDEX_SECONDARY,

   MPICaptureSourceLAST,
   MPICaptureSourceFIRST = MPICaptureSourceINVALID + 1,

   MPICaptureSourceCOUNT = MPICaptureSourceLAST,
} MPICaptureSource;

See MPICaptureSource.

 


   

How do I use this feature?
This feature should be used to configure the capture engine. For more information, see MPICaptureSource.

 


  Use zero velocity to generate a DONE status/event
    Reference Number: MPI 1202
    Type: General Change
    MPI Version: 03.01.00
   

Description:
In previous versions, velocity moves to zero velocity would cause the motion supervisor to remain in the MOVING state. The MPI library has been modified so velocity moves to zero velocity will cause the motion supervisor to go to the IDLE state (when the settling criteria has been met).

    Code Interface:


event.h
:

NEW
typedef enum {
     ...
     MPIEventTypeMOTION_DONE,        /* 10 */
     MPIEventTypeMOTION_AT_VELOCITY, /* 11 */
     ...
} MPIEventType;

See mpiMotionStart and mpiMotionModify


   

How do I use this feature?
This feature affects velocity move calls to mpiMotionStart() and mpiMotionModify().

Velocity moves to zero velocity will now result in an MPIStateIDLE state rather than MPIStateMOVING state at the end of motion. As a result, an MPIEventTypeMOTION_DONE will be generated now instead of an MPIEventTypeMOTION_AT_VELOCITY event.

The state and events generated when velocity moves of zero velocity are specified are different. You may have to modify how an application waits for these velocity moves to be completed.