[Mx-mailing-list] MX 1.5.4 is available
lavender at agni.phys.iit.edu
Tue May 10 22:39:23 CDT 2011
Versions 1.5.4 of MX, Mp, MpCa, MpWx, Mxca_server, MxTcl, and Mxtclnet
are now available at the MX web site from the download page
More information about the MX data acquisition and control system can
be found at
The biggest changes in MX 1.5.4 are dynamically loadable device drivers,
new area detector support, and support for the Delta Tau Power PMAC motor
controller. As usual, here are the change logs.
**************** Changelog for MX version 1.5.4 ****************
Version 1.5.4 (05/10/11):
Although the development leading up to this release called itself
MX 1.5.3, the stable release will be called MX 1.5.4. The new
policy is that development releases will always end in odd numbers
while stable releases will end in even numbers. This will make it
easier to distinguish stable releases from development versions
in the future.
Dynamically Loadable Module support:
MX now has support for dynamically loading extension modules
at runtime. For MX 1.5.4, these modules can only contain sets
of device drivers, but in future releases it will be possible
to dynamically load extensions containing software packages
that are not drivers, such as Python interpreters, specialized
numerical processing packages, and so forth. Modules are loaded
using the new mx_load_module() function.
The ultimate plan is to move all optionally compiled drivers
that are currently selected using the libMx/mxconfig.h file
into the new dynamically loaded modules and do away with the
MX 1.5.4 comes with four modules. Two of these are currently
being used in the testing of new area detectors, while the
other two are at earlier stages of development.
Area detector-related modules:
pleora_iport - This Windows C++ module contains a series of
drivers for the Pleora iPORT family of streaming video
capture devices. The available drivers include:
pleora_iport - Interface driver for communicating with
the iPORT software libraries.
pleora_iport_vinput - MX video input driver for capturing
frames from an iPORT IP engine.
pleora_iport_dinput - MX digital input driver for reading
the A0 through A3 inputs of an iPORT PLC.
pleora_iport_doutput - MX digital output driver for
writing to the Q outputs of an iPORT PLC.
radicon_helios - This Windows C++ module contains drivers
for controlling the Helios series of Rad-icon X-ray
detectors which make use of the Pleora iPORT. The
available drivers include:
radicon_helios - MX area detector driver for a Helios
detector. This detector is either triggered by an
external trigger or by the 'radicon_helios_trigger'
driver described below.
radicon_helios_trigger - This makes use of parts of
the Pleora iPORT PLC that are not used by the
'radicon_helios' to implement a self-contained
triggering system for the 'radicon_helios' so
that it can work without external triggering.
Work in progress modules:
daqmx_base - This C-based module provides interfaces to the
National Instruments DAQmx Base data acquisition libraries.
On Linux, the analog output and digital I/O drivers work
with a USB-6009 module, but the analog input driver does
not seem to detect supplied input voltages (for an unknown
reason). On Windows, the analog input driver sometimes
can cause the MX server to hang.
Work on the 'daqmx_base' module was put on hold for now,
since it was holding up the release of MX 1.5.4. It will
be completed at a later date.
Unfortunately, National Instruments only supports DAQmx
Base on Linux for OpenSuse and Red Hat Enterprise Linux.
I have not yet been able to get installation to work on
Debian-based distributions. In addition, due to the way
that National Instruments has implemented DAQmx Base, it
is necessary on Linux to prefix the command that starts
your MX server with this
Otherwise, the DAQmx Base library does not work correctly.
In addition, startup and shutdown of the 'daqmx_base'
drivers is _very_ slow, since National Instruments's
DAQmx Base is actually firing up a copy of the LabVIEW
runtime in the background.
Nevertheless, the available drivers and their status are:
daqmx_base - Interface driver for communicating with the
DAQmx Base libraries. (works)
daqmx_base_ainput - Analog input driver, which does not
work on the USB-6009 as mentioned above.
daqmx_base_aoutput - Analog output driver. (works)
daqmx_base_dinput - Digital input driver. (works)
daqmx_base_doutput - Digital output driver. (works)
daqmx_base_thermocouple - Analog input driver for use
with thermocouples. Not tested, since the USB-6009
does not support thermocouple inputs.
bnc725_lib - Windows C++ module for the BNC725 digital delay
generator from Berkeley Nucleonics Corporation. This is
intended to provide MX pulse generator drivers as well
as other drivers. However, the work has not yet
progressed far enough for this module to be useful.
New Device Driver Support:
digital_output_pulser - This is a driver that uses an MX digital
output as a "pulse generator" using operating system timers
to control the timing of the pulses. You should only use
this driver in cases where the precise timing of the pulses
is not important.
energy_mcs_qscan - This is an MX quick scan driver that is
optimized for use with MX energy pseudomotors. Restricting
this driver to only work with energy pseudomotors allows
this scan to run faster than the 'mcs_qscan' driver.
epics_area_detector - This is an MX area detector driver for
communicating with the IOC-based EPICS Area Detector record.
file_dinput - This driver uses values read from a file to
simulate a digital input.
keyboard_dinput - This driver uses keypresses on a keyboard
to simulate a digital input.
I404 - Drivers for the Pyramid Technical Consultants I404
digital electrometer. The individual drivers are:
i404 - Controller driver.
i404_amp - Amplifier driver to control gain, offset, etc.
i404_mcai - Multichannel analog input driver. This driver
reads the values from all 4 channels of the I404 as
a single operation.
limited_move - This is an MX pseudomotor driver that limits
the magnitude of relative moves.
Linkam T9x - Drivers for the Linkam T92, T93, T94, and T95 series
of temperature controllers. The individual drivers are:
linkam_t9x - Controller driver.
linkam_t9x_motor - This is a motor driver for controlling
the motion control part of the T9x controllers.
linkam_t9x_pump - Analog output driver for controlling
the pump speed.
linkam_t9x_temp - This is a motor driver for controlling
the temperature setpoint.
Molecular Biology Consortium (Beamline 4.2.2 at the ALS) -
This is a series of drivers written to control beamline
specific components of the ALS 4.2.2 beamline. The
individual drivers are:
mbc_noir - MX area detector driver for controlling
the MBC NOIR 1 detector.
mbc_noir_trigger - Pulse generator driver that controls
the beamline trigger signal through the MBC:NOIR:
mbc_gsc_trigger - Pulse generator driver that controls
the beamline trigger signal directly through the
MBC:gsc: EPICS PVs of the MBC GonioSync Controller.
network_mcai - MX multichannel analog input driver for an MCAI
controlled by a remote MX server.
Power PMAC - This is a set of drivers for controlling the new
Delta Tau Power PMAC series of motion controllers. The
Power PMAC controller, as delivered, is based on a
PowerPC-based Linux computer running the Debian Lenny (5.0)
distribution with Xenomai patches.
The installed copy of Lenny comes complete with GCC, Make,
and other development tools. This makes it straightforward
to build the MX server to run directly on the Power PMAC
controller itself, linking to the vendor-provided motion
The individual drivers are:
powerpmac - Controller driver.
powerpmac_motor - Motor driver for controlling an
individual Power PMAC motor.
powerpmac_dinput, powerpmac_doutput - Drivers for
controlling Power PMAC variables as if they were
analog or digital I/O devices (which in some cases,
powerpmac_long, powerpmac_ulong, powerpmac_double -
MX variable drivers for directly reading and writing
Power PMAC internal variables.
SIM900 - A set of drivers for controlling modules installed in
a Stanford Research Systems SIM900 mainframe. The currently
available drivers are:
sim900 - Mainframe controller driver.
sim900_port - MX RS-232 driver for communicating with
individual modules in the SIM900 mainframe.
sim960 - MX motor driver for the SIM960 Analog PID
sim980 - MX analog input driver for the SIM980 summing
sim983 - MX amplifier driver for the SIM983 scaling
telnet - This is an RS-232 driver for communicating with
Telnet-based terminal servers. The primary difference
between the 'tcp232' driver and the 'telnet' driver is
that the 'telnet' driver knows how to handle Telnet
MX now supports the 'win32' build target on Windows 7. Note that
Windows Vista is _not_ supported, since I do not have access to
a Vista machine, but it will probably work anyway.
MX can now be built for the 'win32' build target using the Microsoft
Visual C++ 2010 Express compiler or using the Windows 7 SDK compilers.
Visual C++ 2010 Express does not include a compiler capable of
creating 64-bit binaries, so you must use the Windows 7 SDK for that
or else use the full version of Visual Studio 2010. Please note that
you use the 'win32' build target in the MX makefiles even if you are
building a 64-bit version of the code, since the Windows API is
actually essentially the same on 64-bit systems.
MX support for EPICS on Windows 7 has been tested using EPICS 3.14.12.
On Linux platforms, 'make install' now copies scripts/mxsetup.sh
to /opt/mx/bin. This is to make the example startup script easier
to find by new users.
Added new mx_rs232_get_configuration(), mx_rs232_set_configuration(),
and mx_rs232_send_break() functions for MX RS-232 drivers. The
get and set configuration functions affect the speed, word size,
parity, stop bits, flow control, read terminators, and write
terminators for the port. At present, these features are supported
by the 'network_rs232', 'tty', and 'win32_com' drivers.
Changed the area detector code to use the term 'duration' mode
rather than 'bulb' mode for exposures whose length depends on the
duration of an external trigger signal. Although 'bulb' mode is
the term used in digital photography and by the PVCAM library,
I found that I was always having to explain what I meant by the
term. Hopefully, 'duration' mode will be a more obvious description
of what the area detector mode is doing.
Added 'exposure_mode' infrastructure to area detector support do
distinguish (when necessary) between the following exposure types:
still, dark, and expose(oscillation). This is currently only
being used by MBC detectors.
Added the MXF_AD_SAVE_CORRECTION_FRAME_AFTER_ACQUISITION flag (0x8000)
to the 'area_detector_flags' field of area detectors. If this flag
is set, mx_area_detector_default_datafile_management_handler() will
automatically save a copy of any newly acquired correction images
to disk. The frames are saved as part of the normal numbering
sequence for saved images. This feature is intended primarily
for debugging the acquisition of correction frames.
The 'pccd_16080' driver for the Aviex PCCD-16080 detector at BioCAT
now can use binning of up to 128 in the horizontal direction and up
to 8 in the vertical direction.
The 'pccd_16080' driver now supports strobe mode sequences, where
the acquisition of each frame is started by an external trigger.
Updated the 'epics_mca' driver so that it can automatically compensate
for whether or not the version of dxp support is dxp3-0 or newer.
Added the MXF_EPICS_MCA_WAIT_ON_START bit (0x8) to 'epics_mca_flags'
to wait for a notification that the EPICS MCA record has started
counting. This used to be the default behavior, but now is not
in order to speed up scanning.
The 'motor' program can now directly create and run area detector
scans of type 'wedge_scan'. The 'wedge_scan' driver is designed
to emulate the behavior of Blu-Ice when acquiring CCD data. The
underlying scanning code has existed for several years, but this
now provides a user interface for the feature.
The 'pmac_mce' driver can now directly modify the slaving of the
slave motor axis without needing to run a PLC program. If you
specify a negative number for the 'plc_program_number' parameter,
the driver uses the absolute value of that as the slave motor
EPICS support in libMx/Makehead.linux now contains examples of how
ot configure the makefile to use the NSLS-II EPICS Debian packages
at http://epics.nsls2.bnl.gov/debian/ instead of the IIT EPICS
Debian packages at http://debian-xray.iit.edu/. The behavior of
EPICS is essentially identical, regardless of which set of EPICS
Debian packages you use.
Tested linux-ppc EPICS support using a Power PMAC system as the
Minor 'win32' makefile changes for compatibility with very recent
versions of Gnu make from Cygwin.
Minor 'solaris' makefile changes for compatibility with the
SunStudio 12.1 development system.
Minor change to the 'linux_parport' series of drivers so that by
default they do _not_ shift the bits read from the parallel port
status ports. This provides better compatibility with the pinout
descriptions on the Internet for PC-style parallel ports.
'linux_parport_flags' in the 'linux_parport' driver now has
two new flag bits:
MXF_LINUX_PARPORT_PERIPHERAL_DRIVES_DATA_LINES (0x2) tells
Linux to not have the parallel port itself drive the
MXF_LINUX_PARPORT_STATUS_PORT_SHIFT_BITS_DOWN (0x4) shifts
the status bits down by 3 bits to recover the old
behavior before this release, as described in the
Changes have been made to the interactions between the motor
'position', 'status', and 'extended_status' to more reliably
send value changed updates when necessary.
Changes have been made to the interactions between the area
detector 'last_frame_number', 'total_num_frames', 'status', and
'extended_status' to more reliably send value changed updates
Modified the order in which SMV headers are written to disk files
for better compatibility with Fit2d.
Added new motor fields:
'busy_start_interval' MXFT_DOUBLE (in seconds)
'last_start_time' MXFT_DOUBLE (in seconds)
If 'busy_start_interval_enabled' is set to a non-zero value,
then just after a move is commanded, motor drivers will
unconditionally report the motor as moving for a period equal
to 'busy_start_interval', regardless of what the motor controller
itself says. This is to work around motor controllers that have
the misfeature of reporting that the motor is not moving for
a short time after a motor move is commanded. At present,
the 'pmac_motor' and 'powerpmac_motor' drivers set the busy
start interval to 0.01 seconds.
The 'pmac' driver now supports 5 different port connection types:
rs232 - Connect using an MX RS-232 port.
tcp - Connect using the PMAC Ethernet Protocol described
in the manual for the Delta Tau Accessory 54E UMAC
module for Ethernet/USB communication.
gpascii - Telnet to a Power PMAC, login, and then run the
vendor-provided 'gpascii' program.
gplib - When running on a Power PMAC CPU, use the vendor
-provided gplib library.
epics_ect - Connect using the StrCmd and StrRsp PVs of an
Argonne ECT-style EPICS database for VME-based
PMAC controllers. Not recommended.
For Power PMAC controllers, you are better off using the
'powerpmac' series of MX drivers instead.
Added Linux support for the 'pmc_mcapi' series of drivers used by
Precision MicroControl motor controllers that use the MCAPI library.
Added better XMAP support for the XIA Handel drivers.
Added the new MXF_ISOBUS_RESYNCHRONIZE_DURING_OPEN (0x4) flag
to the 'isobus' driver.
High resolution timers should now work correctly on x86_64-based
Added support for briefer and more understandable network debugging
messages for MX clients. For the 'motor' program, this can be
accessed by adding the '-a' command line argument when you start it.
The interface class 'generic' has been renamed to 'controller'
to more accurately reflect its purpose. For the forseeable
future, the old name of 'generic' will still work.
**************** Changelog for Mp version 1.5.4 ****************
Version 1.5.4 (05/10/11):
New class added:
Mp.MCAI - This supports reading out MX multichannel analog
input devices. It has one method called read().
New methods added:
These get and set the area detector exposure mode
which currently can be Mp.MXT_AD_STILL_MODE,
Mp.MXT_AD_DARK_MODE, or Mp.MXT_AD_EXPOSE_MODE.
clear() - Clears any latched value in the digital input.
set_duration_mode() replaces set_bulb_mode()
New values added:
Mp.MXT_IMAGE_FILE_PNM - NetPBM PNM format images.
Mp.MXT_IMAGE_FILE_RAW - Raw images without a header.
Mp.MXT_SQ_DURATION replaces Mp.MXT_SQ_BULB
These are exposure types for area detectors.
Added the MP_BUILD_PYC makefile macro and the libMp/mp_build_pyc.bat
script for Windows. With this change, Mp will build successfully on
Windows from a Cygwin bash shell, __IF__ and only if all of the DLLs
linked to libMx are in the path. If this is not the case, then the
build of the *.pyc files will fail with a DLL load failure.
Added true 'make depend' support for win32.
Added a new example program 'examples/mpscript/mp_ad_take_image'
that demonstrates acquiring and saving an image from an area detector.
**************** Changelog for MpCa version 1.5.4 ****************
Version 1.5.4 (05/10/11):
Added support for building on Windows.
mx_epics_initialize() is now invoked in MpCaPrivate_init_cmd(),
since if the first PV connect is made with an invalid PV name,
the MpCA code can get confused about whether or not EPICS has
**************** Changelog for MpWx version 1.5.4 ****************
Version 1.5.4 (05/10/11):
Added support for Windows. Tested on Windows XP.
**************** Changelog for Mpad version 1.5.4 ****************
Version 1.5.4 (05/10/11):
Added support for Windows. It mostly works on Windows, but there
are some outstanding issues. The primary issue is that at startup
time, the ImageWindow widget gets hung at some point and does not
pay attention to events. A simple workaround for now is to iconize
the GUI window and then deiconize it again. In addition, a few of
the GUI widgets are not getting fully initialized at startup time.
Renamed area detector 'bulb' mode to 'duration' mode.
If an area detector name is not specified on the Mpad command line,
Mpad new searches through the MX database for the first area detector
record that it can find.
Other minor fixes.
**************** Changelog for Mxca_server version 1.5.4 ****************
Version 1.5.4 (05/10/11):
Added support for implicit .VAL fields and for the .ACOF and .VCOF
motor fields for acceleration and velocity feedforward.
Successfully moved a motor from EPICS Medm using a Power PMAC-hosted
copy of mxca_server.
Added command line options '-p' (show permission tests) and
'-s' (scan period) arguments for the mxca_server command line.
Added configuration file support for the NSLS-II Debian packages.
**************** Changelog for MxTcl version 1.5.4 ****************
Version 1.5.4 (05/10/11):
Updated Solaris makefiles for compatibility with SunStudio 12.1
and Solaris 10 10/09.
**************** Changelog for Mxtclnet version 1.5.4 ****************
Version 1.5.4 (05/10/11):
MxNet::blocking_read() now has a timeout for failed reads.
Updated the list of MX error codes.
More information about the Mx-mailing-list