Release Note
MPI Library Version 04.03.04
Release Type |
MPI Version |
Release Date |
Production Release |
04.03.04 |
27AUG2013 |
Production Release |
04.03.03 |
23JUL2013 |
Production Release |
04.03.02 |
10May2013 |
Production Release |
04.03.01 |
5Apr2013 |
Production Release |
04.03.00 |
11Mar2013 |
New Features
Version 04.03.00 - 04.03.04
<none>
General Changes
Version 04.03.02 - 04.03.04
<none>
Version 04.03.01
|
Flash.c replaced by flashSample.c |
|
|
Reference Number: MPI 2618 |
|
|
Type: General Change |
|
|
MPI Version: 04.03.01 |
|
|
Description:
A new example program, flashSample.c, is available to demonstrate how to write the firmware into the controller's flash memory. flashSample.c should be used instead of flash.c. The flashSample.c utility is located in ../MPI/examples. |
|
|
Affects to Application Code:
Flash.c will no longer be included in the MPI. Use flashSample.c instead of flash.c to flash the firmware.
|
Version 04.03.00
<none>
Fixed Bugs
Version 04.03.04
|
S200 invalid multi-turn feedback (AUXFB Endat or Mitutoyo) |
|
|
Reference Number: MPI 2630 |
|
|
Type: Fixed Bug |
|
|
MPI Version: 04.03.04 |
|
|
Problem:
The S200 initial absolute position was incorrect for certain feedback values if the primary feedback was selected via the AUXFB (J14) connector. This includes Endat2.1 sin/cos feedback and Mitutoyo feedback. This particular issue did NOT apply to any base unit feedback (J3) such as SFD.
Cause:
At SynqNet discovery, the initial 64-bit feedback requires sign extension from the multi-turn count MSB. For primary feedback on AUXFB, the MPI accidently used the wrong bit (bit 23) to trigger sign extension. So for some feedback values, there was no sign extension and initial position was correct. For other feedback values, sign extension corrupted the multi-turn count.
|
|
|
Fix/Solution:
The MPI code was modified to correct this sign extension.
|
|
|
Affects to Application Code:
The MPI now allows for 12 bits of multi-turn count for primary feedback on AUXFB (36 bits of total absolute resolution).
|
|
MPI reports copy64 error when running MoCon/motion4 sample program at high sample rates |
|
|
Reference Number: MPI 2629 |
|
|
Type: Fixed Bug |
|
|
MPI Version: 04.03.04 |
|
|
Problem:
When running an application like MoCon or motion4 sample program (esp using AKD at high sample rates), occasaionally, this error surfaces. If a customer application sees this, it will likely stop their application. However, it is hard to reproduce.
Cause:
Double comparison checked for 3 consecutive memory reads, which essentially needed to be the same. At high sample rates, and with doubles which change values (because of high-resolution encoders), this is error is likely to happen. It is also more likely in a loaded system.
|
|
|
Fix/Solution:
On modern PCI systems, one read suffices because PCI reads use burst-reads which can read both 32-bit words atomically. Thus, one double read was sufficient, no comparison between successive reads necessary. For older systems which did not support burst 2-word reads, double comparison used 2 consecutive matches which have a much higher probablity of succeeding.
|
|
|
Affects to Application Code:
No copy64 error will result in modern PCI systems, and for older systems, the error will only arise in failure cases (e.g. when the sample rate is too high to be supported by the system).
|
Version 04.03.03
|
S200 absolute multi-turn feedback invalid after mpiMotorConfigSet() |
|
|
Reference Number: MPI 2621 |
|
|
Type: Fixed Bug |
|
|
MPI Version: 04.03.03 |
|
|
Problem/Cause:
With MPI 04.xx.xx, primary feedback selected from the S200 option card connector (Aux connector J14) has an invalid absolute position after the mpiMotorConfigSet() function is called. The absolute feedback will be CORRECT after node initialization (controller reset, or network reset).
The issue has existed since MPI 04.00.00 and still exists as of MPI 04.03.01.
This was an issue with MPI mapping pointers inside the SynqNet controller (not in the S200 drive hardware). |
|
|
Fix/Solution:
A workaround using application code will be investigated. An MPI update is expected for the final solution.
|
|
|
Affects to Application Code:
With either the workaround solution, or the MPI fix, absolute feedback remains valid after mpiMotorConfigSet().
|
|
64-bit driver performance degrades over time. |
|
|
Reference Number: MPI 2626 |
|
|
Type: Fixed Bug |
|
|
MPI Version: 04.03.03 |
|
|
Problem/Cause:
After running MoCon overnight in a system with several nodes, the host computer seemed very sluggish. This behaviour was not seen in 32-bit systems.
The device driver has a list of treads waiting for interrupts. This list contains a unique 64-bit identifier for each thread that is assigned by the driver. The identifier is passed back to the thread and expected to be used but that thread for all interrupt calls (wait, pend, wake). Due to a mistake in the function mpiPlatformOSInterruptWaitPend(), the identifier was truncated to 32 bits by the MPI which caused the driver to allocate a new identifier for each mpiPlatformOSInterruptWaitPend() call. Since each new identifier was added to the list of known identifiers, the list would grow each time the function was called. After an overnight run the list would be large enough (>1,000,000 entries) that searching it in the driver was impacting performance. |
|
|
Fix/Solution:
The truncation of the identifier was removed from the MPI. The search would now correctly find an identifier previously issued so each thread would only have one identifier.
|
|
|
Affects to Application Code:
The performance no longer degrades with time.
|
Version 04.03.02
|
mpiUserLimitConfigSet() returns timeout in multi-threaded application |
|
|
Reference Number: MPI 2619 |
|
|
Type: Fixed Bug |
|
|
MPI Version: 04.03.02 |
|
|
Problem/Cause:
mpiUserLimitConfigSet() times out when called repeatedly from different threads.
Two threads writing into the firmware's limit enable queue would cause occasional missing entries in the queue. In that case, the thread waiting for the enable would time out. |
|
|
Fix/Solution:
A lock was used to control access to the firmware's limit enable queue by different threads.
|
|
|
Affects to Application Code:
The enabling of the limits is assured for all threads.
|
|
Coordinated motion does not set hold values proberly |
|
|
Reference Number: MPI 2622 |
|
|
Type: Fixed Bug |
|
|
MPI Version: 04.03.02 |
|
|
Problem/Cause:
If you do a coordinated motion with hold values set, the hold condition value and timeout value will be word-swapped in axis 1, but OK in axis 0 (assuming a 2-axis motion). |
|
|
Fix/Solution:
Word-swapping was fixed.
|
|
|
Affects to Application Code:
Coordinated motion with holds work correctly for release holds correctly on all axes.
|
Version 04.03.01
<none>
Version 04.03.00
|
mpiUserLimitConfig() hangs |
|
|
Reference Number: MPI 2616 |
|
|
Type: Fixed Bug |
|
|
MPI Version: 04.03.00 |
|
|
Problem/Cause:
Repeated calls to mpiUserLimitConfig() were causing the MPI to go into an infinite loop.
A race condition caused a limit disable call to fail. As a result, a loop in userlimit.c, which waits for the limit to disable, continued looping without an exit. |
|
|
Fix/Solution:
The wait loop was revised to timeout and exit if the limit did not disable.
The race condition causing the disable failure was also removed.
|
|
|
Affects to Application Code:
Repeated mpiUserLimitConfig() calls will execute properly.
|
|
ControlConfigSet() overwrites Axis 2 gear config |
|
|
Reference Number: MPI 2615 |
|
|
Type: Fixed Bug |
|
|
MPI Version: 04.03.00 |
|
|
Problem/Cause:
The Axis 2 gear ratio parameters are corrupted after calling mpiControlConfigSet() to increase the number of allocated Motion Supervisors.
The recent changes in how user limits are enabled (list rather than count) caused limits to be active durning the allocation process. Since the data for the limits was no longer valid, some limits would trigger and their outputs would overwrite the Axis 2 (or other) Gear Config variables. |
|
|
Fix/Solution:
Any limit with a limit number greater than MfwBufferData,SystemConfig.Enabled.UserLimits
is not processed. The MPI sets MfwBufferData,SystemConfig.Enabled.UserLimit to 0 during allocation.
|
|
|
Affects to Application Code:
The user limits are disabled during initialization/reallocation so no data is corrupted by their outputs.
|
|
Dependent Objects Memory Leak |
|
|
Reference Number: D-04233 |
|
|
Type: Fixed Bug |
|
|
MPI Version: 04.03.00 |
|
|
Problem/Cause:
If ControlConfigSet is called after MPI objects are allocated and if those MPI objects are used, it:
- leaks memory for every MPI call using that object
- it prints on the console |
|
|
Fix/Solution:
MPI objects allocated prior to an mpiControlConfigSet call, in which dynamic reallocation is performed, will be considered "obsoleted". The user will have to delete these objects and reallocate them.
|
|
|
Affects to Application Code:
If it is desired to capture the configuration of these objects, the user will have to retrieve the configuration using, say, mpiAxisConfigGet on an MPIAxis object, PRIOR to calling mpiControlConfigSet. The stored configuration can be applied on the newly obtained MPIAxis object AFTER calling mpiControlConfigSet.
If an "obsoleted" object as described above is used in an MPI method, the error returned is:
ERROR 0x631: Control: Object cannot be used after reallocation
|
Open Issues
Existing Bugs
Limitations
|
Multiple Drive Map Files |
|
|
Reference Number: N/A |
|
|
Type: Limitation |
|
|
MPI Version: 04.02.xx |
|
|
Problem:
Multiple *.dm files in the node directory may cause unexpected results when using meiConfig. It is recommended that you only have one file in this directory with the .dm extension per drive type. When multiple drive map files are present, it is possible that meiConfig will use the wrong one or an out of date .dm file.
Cause:
MeiConfig expects a clean directory and doesn’t know about copies and test DM files. MeiConfig reads every file with a .dm extension, and uses the first instance where the CONTENTS of the drive map file match the drive type. |
|
mpiFilterPostfilterSectionGet and mpiFilterPostfilterGet Unable to Identify Postfilter Types |
|
|
Reference Number: MPI 2284 |
|
|
Type: Limitation |
|
|
MPI Version: 04.02.xx |
|
|
Problem:
When postfilters are set to the controller by using mpiFilterPostfilterSectionSet(...) or mpiFilterPostfilterSet(...) and a variable representing a frequency is close to zero or the Nyquist frequency, mpiFilterPostfilterSectionGet, mpiFilterPostfilterGet are unable to identify the postfilter type.
Cause:
This limitation occurs because the postfilter type is not stored on the controller. Instead the MPI attempts to identify the postfilter type. However, when a specified frequency is close to zero or the nyquist frequency, the precision needed to correctly identify the postfilter type exceeds the precision of the variables on the controller resulting in the inability to correctly identify the postfilter type.
Indentification problems occur when a specified frequency is within 0.5% of the Nyquist frequency of zero. For a sample rate of 2 kHz, the Nyquist frequency is 1 kHz resulting in identification problems occurring when specified frequencies are in the range of 0-5 Hz or 995-1000 Hz. |
|
Single Thread Access to Interrupts per MPIControl Object |
|
|
Reference Number: MPI 2363 |
|
|
Type: Limitation |
|
|
MPI Version: 04.02.xx |
|
|
Description:
Two built-in MPI features use interrupts: the event service routine and the SyncInterrupt feature. However, only one thread may access interrupts when accessing a controller over a client-server connection.
The controller event service routine started by mpiControlEventServiceStart(...) uses interrupts when MPIWaitFOREVER is specified for the sleep parameter. Other values for the sleep parameter allows the event service thread to run in polling mode. In order to use the SyncInterrupt feature, the event collection thread must use polling or the SyncInterrupt routine must call mpiControlProcessEvents(...). |
|
sqNodeFlash Returns Timeout Error on eZMP server |
|
|
Reference Number: MPI 2512 |
|
|
Type: Limitation |
|
|
MPI Version: 04.02.xx |
|
|
Description:
While running server.exe on the eZMP with S200, a timeout error occurs when sqNodeFlash.exe is run on the client PC. |
|
SimServer Still Under Development |
|
|
Reference Number: N/A |
|
|
Type: Limitation |
|
|
MPI Version: 04.02.xx |
|
|
Description:
At the time of the release, the development of SimServer had not been completed. This feature is released as a standalone package and is not included in the MPI distributables. SimServer is planned to be completed and supported in the next MPI release (04.02.01). |
|