[Mx-mailing-list] MX 1.5.4 is available

Bill Lavender 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
	    mxconfig.h file.

	    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
		control libraries.

		The individual drivers are:

		    powerpmac       - Controller driver.

	    	    powerpmac_motor - Motor driver for controlling an
			individual Power PMAC motor.

		    powerpmac_ainput, powerpmac_aoutput,
		    powerpmac_dinput, powerpmac_doutput - Drivers for
			controlling Power PMAC variables as if they were
			analog or digital I/O devices (which in some cases,
			they are).

		    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
		option negotiation.

	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.

	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
	axis number.

	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
	development platform.

	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:

		Linux to not have the parallel port itself drive the
		data lins.
		the status bits down by 3 bits to recover the old
		behavior before this release, as described in the 
		previous paragraph.

	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
	when necessary.

	Modified the order in which SMV headers are written to disk files
	for better compatibility with Fit2d.

	Added new motor fields:

	    'busy_start_interval_enabled'   MXFT_BOOL
	    '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.

	to the 'isobus' driver.

	High resolution timers should now work correctly on x86_64-based
	Linux platforms.

	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,

		clear() - Clears any latched value in the digital input.

	Modified methods:

	        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.


		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
	been initialized.

**************** 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 mailing list