spec

Software for Diffraction

changes

highlights of modifications for spec release 5.08

June 3, 2010 - RELEASE 5.08.06-6

Fix For Repeated "Lost Connection" Messages

A problem where a spec client would occasionally print a stream of "Lost Connection" error messages has been addressed. Only one message per event should appear now.

Support For EPICS Motor Record Update

The spec support for the EPICS motor record has been adapted to follow the elimination of the RES process variable in release R6-5.

May 20, 2010 - RELEASE 5.08.06-5

Fix For Crash On epics_put() Syntax Error

A bug dating from the original EPICS implementation in spec, where using only one argument with the epics_put() function could cause a crash, has been fixed. Such use is now properly flagged as a syntax error.

Fix For Crash On epics_get() When Forcing String Type

A bug, where spec could crash when using epics_get() with the optional "string" argument to read a process variable of array type that was longer than 40 bytes (the maximum length of an EPICS string) but was not DBF_STRING type, has been fixed.

Fixes For Returning EPICS Arrays As Strings

When forcing a "string" type with epics_get(), spec now properly formats the returned values as ASCII strings for all supported EPICS data types. For native types other than DBF_CHAR, arrays will be returned as a spec string data array consisting of 40-byte rows, with as many rows as elements in the EPICS array. For DBF_CHAR data, the return value will be a single-row string data array with as many columns as elements in the EPICS array. See the epics help file for more information.

Fix For Writing to EPICS Character Arrays

When sending values to a process variable which is an array of DBF_CHAR type using epics_put(), non-array values will now be transferred as a string, filling as many elements of the array as the string is long. Previously, the number value of the argument would be assigned to only the first element of the process variable array.

May 19, 2010 - RELEASE 5.08.06-4

Baud Rate Setting Now Working on Mac OS X

A bug in Mac OS X version of spec, where serial lines only worked at 9600 baud, has been fixed. Note, spec only changes baud rates on serial lines on a Mac when using USB-to-serial converters, as the Mac hardware that spec supports doesn't include built-in serial ports. For serial ports accessed via Ethernet-to-serial devices, spec doesn't set the baud rate.

Fix For Limit Message On Micos Pollux Controllers

A problem associated with recent updates to the Micos motor controller support, where hitting a limit switch with the Pollux models would stop the associated motor but not generate a limit message in spec, has been fixed.

Fix For Move-To-Limit Operation On Trinamic Controllers

Previously, if a move-to-limit search was the first move performed with a Trinamic motor controller, the motor speed used for the move was undefined. spec now programs the move speed before doing a limit search.

April 15, 2010 - RELEASE 5.08.06-3

Can Now Check Active Status Of Calculational Pseudomotors

The command motor_par(mne, "active") will now return a zero or one to indicate whether any of the real motors associated with the calculational pseudomotor mne are busy. Previously, the command only worked with real motors.

New "nodelay" Option For TCP Sockets

Is now possible to disable or enable the TCP_NODELAY socket option via a "nodelay" option to sock_par(). See the sockets help file for details.

New "fast_hdw_checks" Option For Server Mode

An experimental "fast_hdw_checks" option is now available via spec_par() to enable clients to get a faster notification of changes in hardware status. See the spec_par help file for details. Is used, please report any issues to CSS to allow further tuning of the code.

Fixes For Sigmatech FC501-A Motor Controller

This release includes a couple of fixes for the recently added support for the Sigmatech FC501-A motor controller.

Fixed Crash With Unresponsive OMS PC48

A bug, introduced in spec release 5.07.04-1, where spec would crash when configured for an OMS ISA PC48 motor controller and no such controller was detected, has been fixed.

Fixed Parameter Issue With Attocube Controller

A bug, introduced in spec release 5.08.03-8, which disabled the ability to set values for non-standard optional motor parameters from the config file for the Attocube ANC350 motor controllers, has been fixed.

March 25, 2010 - RELEASE 5.08.06-2

Support For Oregon Micro Systems MAXnet

The OMS MAXnet motor controller is now supported over both RS-232C (serial) and Ethernet interfaces. See the oms help file for configuration details.

March 22, 2010 - RELEASE 5.08.06-1

Support For Dectris Mythen 1K MCA

This spec release includes a first version of support for the Dectris Mythen 1K MCA over the Ethernet interface. See the mythen help for complete details.

Support For Sigmatech FC501-A Motor Controller

This spec release supports the Sigmatech FC501-A motor controller over GPIB and RS-232C interfaces. See the sigmatech help file for complete details.

Fix and Additions For fmt_read() Programming Functions

The fmt_read() and fmt_write() functions allow specific binary data formats to be supported in spec. The source code to the functions included in the standard spec distribution serves as documentation for the feature. This spec release includes a new C function, ff_adjust_byte_order(), which can be called in the read function to adjust the byte order of the binary data if it differs from that of the current platform. Also, the existing function ff_put_head_item(), which can be called in the read routine to transfer header items to the spec user level, now works properly. Finally, the specification of the format name in the spec user-level function calls is now case insensitive.

Enhancement For the ESRF Format For fmt_read()

The fmt_read() implementation for the ESRF data format will now correct data for byte order if the data in the file is different from that of the host. In addition, a fmt_read() call will now properly fill the optional associative array argument with all values from the data file header.

Update to spec Shared Memory Header For Frames

The spec_shm.h file contains an updated header for the spec shared memory structure with new elements called frame_size and latest_frame, and a new flag definition SHM_IS_FRAMES. The intended usage is to communicate to auxiliary programs that 2D data consists of a series of frames, where the frame_size element will contain the number of rows per frame, and the latest_frame element will contain the most recently updated frame number. The version number of the structure has been incremented from 4 to 5.

New array_op() Options For Frames

It is now possible to tag shared data arrays as a "frames" type, which means the data in a 2D array can be described as a series of acquisitions. A "frame_size" parameter is the number of rows per frame. A value of one would be appropriate for a series of MCA acquisitions. A "latest_frame" parameter can be assigned the frame number of the most recently added frame. The values can be set and retrieved using the array_op() function. In addition, certain hardware support may set the frame parameters (see the mythen help file). See the arrays help file for more information on frames.

Fix For Counters-Only Configuration Of Tsuji Counter/Timers

A bug, where a Tsuji counter/timer configured as "counters only" was not started correctly, has been fixed.

Fix For Crash With -p Flag On Startup

A situation where spec could crash when started with the deprecated -p flag directly from the shell has been fixed.

February 5, 2010 - RELEASE 5.08.05-6

Support For Revised Amptek MCA 8000A Firmware

spec now supports the new firmware included with the Amptek MCA 8000A with serial numbers 3660 and higher. The new firmware can be used with USB-to-serial adapters on Linux. See the amptek help file for details.

Fine Tuning Of New Micos VENUS-3 Support

This spec release contains a minor update to the Micos motor controller support added in the previous release to better handle error responses from the controller.

January 12, 2010 - RELEASE 5.08.05-5

Can Now Assign PCI Bus and Slot Numbers For NI 6601/2 Cards

It is now possible to specify the PCI bus and slot numbers of National Instruments 6601/2 timer/counters cards in the spec configuration editor, so that a particular card can be selected when more than one is installed in the same PC. See the ni660x help file for details.

Files Opened For array_dump() Will Close Automatically

If an unopened output file is used as the optional first argument for the array_dump() (or data_dump()) functions, spec will now automatically close the file when the function finishes. Previously, such files remained open and an explicit close() call to remove the file from spec's list of open output files was required. If the file is already open when the function is called, it will stay open and on the list of open files.

Updates To the New Micos VENUS-3 Support

This release includes a couple of updates to the support for the Micos VENUS-3 protocol as used with the new Hydra models introduced in spec release 5.08.05-1. The new setorgconfig command included with Hydra firmware 2.034 is used so that the spec set_dial command will work as expected. Also, the error stack is now cleared when an error is detected, preventing spurious error messages on subsequent commands.

Fix For Recent Bug Concerning EPICS Motor Numbering

A bug introduced in spec release 5.08.04-3 which prevented an EPICS motor with channel number one from being used has been fixed.

December 3, 2009 - RELEASE 5.08.05-4

Fix For Macro Hardware Parameters

A bug introduced in spec release 5.08.05-1 that removed the unit number from the argument list in calls to the prefix_cmd() macro-hardware macro function has been fixed. In addition, an issue where the value of the prefix_ADDR and prefix_CONPAR parameters would be cleared if the prefix_par() macro function was called from the prefix_cmd() macro function has been partially addressed. With this release, the above parameters are not available in prefix_par() although the value of prefix_ADDR can be retrieved using the counter_par() or motor_par() "address" argument.

November 25, 2009 - RELEASE 5.08.05-3

New Write-Only I/O Port Configuration Option

Due to issues with certain PC cards freezing a Linux system when a write-only I/O port is accessed for reading, spec now supports write-only I/O port configuration on the Interfaces screen of the hardware configuration editor.

Fix and Additional Support For Measurement Computing PCI-DDA Cards

Newer revisions of the Measurement Computing PCI-DDA DAC cards (supported via spec's DAC motor facility) appear to freeze a Linux PC if write-only ports are accessed for reading or if ports associated with channels not present on the card are accessed at all. The presence test for the cards now no longer attempts a read of the write-only ports. Also, spec now determines the maximum number of channels for PCI DACs automatically and will overrule a misconfigured value from the config file. In addition, spec now supports Measurement Computing models PCI-DDA02/12, PCI-DDA04/12, PCI-DDA08/12, PCI-DDA02/16 in addition to the PCI-DDA04/16 and PCI-DDA08/16 models previously supported. See the dac help file for more details.

Fix For PI Motor Controller Crash

A bug introduced in release 5.08.05-1, where spec would crash during hardware configuration if the device associated with a Physik Instrumente motor controller channel couldn't be opened, has been fixed.

Fix For Mclennan PM595 Delays On Exit

Previously, when quitting spec, each Mclennan PM595 motor controller configured would add a delay of one second to the time it took for the spec process to exit. Those delays are now gone.

Fix For unix() Return Value

A very old bug, where the return value of the unix() function when used with more than one argument was not the return status of the executed command, has been fixed.

November 16, 2009 - RELEASE 5.08.05-2

Fix For Broken Macro Hardware prefix_ADDR

A bug introduced in the previous release that broke the availability of the prefix_ADDR variable inside macro-hardware macro functions has been fixed.

October 30, 2009 - RELEASE 5.08.05-1

New Support For Controller Parameter Configuration

It is now possible to access the nonstandard optional controller parameters available from the configuration editor Devices screen. These parameters are entered and modified by typing the p command and appear in the config file prefixed with CONPAR. Values can now be accessed from the spec user level using the motor_par() and counter_par() functions. The parameter will be associated with the controller used by the motor or counter mnemonic given as the first argument. In addition, the parameters are accessible from within macro hardware functions as elements of the associative array prefix_CONPAR[] where the array elements are indexed by the parameter name and prefix is the macro function prefix.

Fix For Disabled Calculational Macro Motors

Previously, if the motor_par() "disable" command was used to disable a calculational macro-hardware pseudomotor, a move command for that motor would generate an error message that the motor was disabled, but spec would still send move commands to the associated real motors. That problem is fixed in this release. spec will no longer make mode=1 calls to the prefix_calc() function when the pseudomotor is in a disabled state. The associated real motors are not disabled, but will not move as a result of a move command to the pseudomotor.

A ^C Will Now Override "keep_going" Mode

The spec_par() "keep_going" option (introduced in spec release 4.05.01), which tells spec to keep reading and executing commands from a command file no matter what errors occur, will now return to command level if there is a ^C abort entered at the keyboard.

Shared Arrays Now Working on Mac OS X

A long-standing issue with the experimental spec support on the Mac OS X platform with respect to shared data arrays not working properly has been resolved.

Powder-mode Macro Update

The waitmove call in the _pcount macro associated with the powder-mode macros has been replaced by the new _pcount_em macro which adds calls of user_precount and user_postcount before and after the move_cnt command.

Fix For Position Resolution For Huber H9000

The support for the Huber H9000 motor controller will now send up to nine significant figures to specify the target position in move commands. Previously, only up to six significant figures were used.

Fix For OMS PC48 Issue

Recent updates to the spec support for OMS motor controllers resulted in a bizarre problem with the ISA bus PC48 model OMS motor controller on at least one platform, where the modified initialization sequences sent to all the OMS controllers resulted in a Linux crash. Although the exact mechanism of this crash is unknown, it has been suppressed by adding a couple of ten millisecond delays around the new commands.

Fix For PA In OMS "init_sequence"

The OMS support now correctly recognizes and requires a parameter of 0 or 1 for the PA (power automatic) command when included as part of an "init_sequence" nonstandard optional motor parameter.

New OMS Position Maintenance Details

By default, spec will now turn off position maintenance on OMS_P configured motors on exit. This default behavior can be disabled by setting the nonstandard optional parameter "keep_pos_maint" to a non-zero value. The parameter can be a controller parameter which will set values for all motors on the controller, or a motor parameter which will only set values for the individual motor (and override a controller parameter setting). In addition, spec now turns on position maintenance for OMS_P on start up rather than on the first move command. See the oms help file for details.

Preliminary Support For Micos VENUS-3 and Hydra Model

Support for the latest revision of the Micos firmware, called VENUS-3, as implemented in the Hydra model of their motor controller, is included in this spec release. The support is for both serial and Ethernet interfaces.

Preliminary Support For Physik Instrumente Model C-863 Motor Controller

This spec releases includes support for the Physik Instrumente (PI) model C-863 single-axis DC-motor controller.

Preliminary Support For Korean HMT HCC1 Motor Controller

This spec release includes preliminary support for the Korean-made HMT HCC1 motor controller over a serial interface. See the company's site (www.e-hmt.kr) for a product description.

September 10, 2009 - RELEASE 5.08.04-4

Fix For Crash When Using CAMAC RTC-018

A bug, where configuring an RTC-018 module could sometimes lead to a program crash, introduced when spec was updated over four years ago to support multiple CAMAC crates (release 5.06.02-1), has been fixed.

September 9, 2009 - RELEASE 5.08.04-3

New remote_par() Command For spec Clients

For spec clients communicating with a spec server, a new remote_par() command is available, currently with the following options: "connect" to open a connection to a remote server, "close" to close a connection, "abort" to send a ^C-type event to the remote server and "timeout" to set a timeout for remote_eval() calls. See the server help file for additional details.

A ^C During a remote_eval() Now Passed To Server

If a call to remote_eval() from a spec client is interrupted by a ^C from the keyboard, the client will send the spec server an SV_ABORT event, to which the server will respond as if a ^C had been typed at its keyboard. In addition, any pending commands in the server queue from that client will be flushed from the queue.

Cleanup Macros Now Called From Commands Sent To Server

If a command sent to a spec server encounters an error or is otherwise interrupted, the server will now run the standard cleanup macros, cleanup_once and cleanup_always (and the deprecated cleanup and cleanup1), if any such macros are defined.

Preliminary Support For the Newport Agilis Piezo Actuators

This spec release contains preliminary support for Newport's Agilis Model AG-UC2 controller over a USB interface. Each controller supports two piezo actuators. To distinguish multiple AG-UC2 modules, configure the device serial number in the address field of the configuration editor.

libedit Command Completion For Directory Names Restored

From time to time, the version of the libedit command-line editing library included with the spec distribution is updated to track changes at the upstream source repository. A recent change in the upstream sources, which was included in spec release 5.08.03-5 and subsequent releases, eliminated the feature where command completion for directory names appended a / rather than a space character. The prior behavior is now restored in the patched version distributed with spec. See the editline help file for details on spec's command-line editing library support.

August 9, 2009 - RELEASE 5.08.04-2

Fix For Recently Created OMS Bug

A bug created in the previous release, where OMS motor channels were not necessarily marked as unusable when the associated controller was unresponsive, has been fixed. It was possible for spec to crash in some instances due to this bug.

August 1, 2009 - RELEASE 5.08.04-1

Fix For Server Position/Count Update Throttling

The update in release 5.08.03-1 which limited the rate at which a spec server sends position and count updates to clients inadvertently blocked sending position updates for more than one motor when more than one motor was active. That issue has been corrected. Note, the problem only affected the updates during motion. The final position at the end of the move was always sent correctly for all motors.

Support For Struck PCI Express SIS1100E VME Card

This spec release supports the Struck model SIS1100E PCI Express to VME interface.

Updates For OMS Motor Controllers

Slip detection for OMS motor controllers configured with stepper motors and encoders is now supported. Also, additional OMS commands are permitted in the init_sequence optional parameter introduced in spec release 5.08.03-8. See the oms help file for details.

Encoder Update For Huber 9300 Motor Controller

When moving a motor configured with an encoder on the Huber 9300 motor controller, spec now sends a relative-move command rather than an absolute-move command. Relative moves make it more likely the position after a small move will match the commanded position.

July 17, 2009 - RELEASE 5.08.03-13

Additional Serial Baud Rates Supported

Serial devices can now be configured for 7200, 14400 and 28800 baud. Those rates were not previously supported by spec.

Fix For Canberra Multiport II Support

A bug in the support for the Canberra Multiport II MCA devices for configurations with less than the full complement of six MCA modules, where certain spec commands such as mca_sel("?") would cause spec to crash, has been fixed.

July 9, 2009 - RELEASE 5.08.03-12

New d2ps Geometry Variation

A variation on the standard psic geometry for the ERSF BM02 (D2AM) beamline is now included. The diffractometer differs in that the sample circles are stacked as eta, chi, mu, phi rather than eta, mu, chi, phi as in the standard psic. Currently only the "d1 d2 s1" modes are implemented and only for the eta sample circle fixed at zero. The configuration should be installed as geometry psic with name d2ps. The motor mnemonics and macros are otherwise the same as for psic.

Fix For ESRF/TACO Serial Device Configuration

A bug, introduced in spec release 5.08.03-4, where the spec configuration editor, edconf, did not properly read in serial devices configured to use the ESRF or TACO interface type, has been fixed. With the bug, the configuration editor would display the initial TACO: from the config file as part of the device name and not show the interface type as TACO.

Fix For Using ^C Around TANGO Calls

A problem, where a ^C keyboard interrupt during the TANGO user-level calls of tango_io(), tango_get() and tango_put() could cause memory corruption leading to a subsequent segmentation fault crash, has been fixed.

July 1, 2009 - RELEASE 5.08.03-11

Fix For Out-Of-Bounds Array Bug

A bug, introduced in spec release 5.08.01-9, where repeated access to out-of-bounds data array elements would lead to the message "Out of temporary cells" and made spec unusable, has been fixed.

June 30, 2009 - RELEASE 5.08.03-10

Support For the National Instruments VME-GPIB Module

spec now includes built-in support for the National Instruments VME-GPIB module. See the nigpib help file for more details.

June 20, 2009 - RELEASE 5.08.03-9

Improved GPIB Error Messages

The more frequent GPIB error messages, such as "GPIB timeout", now show the associated GPIB controller number (for other than controller zero) and device address, which may be useful in diagnosing hardware problems when many GPIB devices are involved. This update is only for the National Instrument GPIB controllers, but covers both the built-in and the external driver (or library) support.

Fix To Accommodate Old OMS Cards

Some of the recent updates to the OMS support had made very old OMS controllers (particularly ISA bus models) unusable. That issue is fixed in this release, and the older cards are again usable.

June 18, 2009 - RELEASE 5.08.03-8

Fixed Missing Shared Array Update In array_pipe()

When the array_pipe() function obtains new array data, it now updates the shared-array update flag used by other processes to detect changes in the shared array data.

Minor Fix For Reading Optional Motor Parameters

A small issue, where spec would send a command to certain models of motor controller to set the current value of an optional motor parameter when a motor_par() command was used to read the value, has been fixed. This fix simply eliminates an unnecessary hardware access. The parameter value returned by the command is as before.

Update To Attocube ANC350 Support

The code for the Attocube ANC350 will now update the current values (values returned by motor_par()) for non-standard optional motor parameters included in the config file to the values contained in a .aps file sent to the controller using the motor_par() "load" option.

An Initialization Sequence Can Now Be Configured For OMS Motors

If a non-standard optional motor parameter named "init_sequence" is created for an OMS motor controller motor, the string value of the parameter wil be sent to the controller by spec during hardware configuration as an initialization sequence. Only certain commands, such as those for configuring limits and the general purpose I/O pins, are allowed in the string. See the oms help file for complete details.

June 15, 2009 - RELEASE 5.08.03-7

New TIFF Support With fmt_write(), fmt_read()

spec now includes basic support to save two-dimensional array data to TIFF output files using the fmt_write() function. Code for reading TIFF files using fmt_read() is included, but is disabled by default, as it requires linking with libtiff.a, which is not part of the spec distribution. See the fmt_tiff.c file in the spec distribution for implementation details and how to enable the TIFF read functionality.

Fixed Delimiter Issues With array_dump() From Previous Release

A couple of problems when using the "D=" option introduced for array_dump() in the previous release have been fixed.

Update To Attocube ANC350 Support

The support for the Attocube ANC350 will now track changes to the "sensorunit" parameter made by loading .aps files, by reading the config file or directly through motor_par(). Previously, the parameter's value was read from the controller during hardware configuration and that value was used to label units displayed with the motor_par() "dump" option.

June 11, 2009 - RELEASE 5.08.03-6

New array_dump() Options

Additional options are now available to the array_dump() function. In particular, additional printf()-style format options are available for integer data types, one can now specify an arbitrary delimiter character, and one can now control the number of data elements printed per line when outputting two-dimensional arrays. See the array_dump() entry in the arrays help file for complete details.

Improved Support For UDP Sockets

The user-level socket support for UDP socket connections has been updated to provide more robust functionality. Previously, reading from UDP sockets did not work well.

Improved sock_par() "queue" Option

The "queue" option to the sock_par() command has previously returned the number of available bytes that have been read from the socket into spec, but have not yet been retrieved using sock_get(). (Data could remain in the queue due to a previous sock_get() call only reading up to an end-of-string match or a specific number of bytes.) In this release, if there are leftover bytes remaining in the queue from the prior sock_get() call, that number will still be returned. However, if there are no leftover bytes, spec will now query the underlying kernel driver to see if there is data available and will return that value.

Fix For ser_par() "queue" Option

The "queue" option to the ser_par() function has been long documented to return the number of bytes in the input queue, but has instead returned a fixed value of one if there were one or more bytes available (for UNIX-type serial devices). The function now returns the number of bytes available.

Fix For array_pipe() With 2D Data Arrays

A bug, where the array_pipe() (or data_pipe()) function would only fill the first row of a returned two-dimensional array, has been fixed,

Fix For array_pipe() With Big Shared Arrays

A bug, where the array_pipe() (or data_pipe()) function would generate a spurious error about a too large array when trying to read into a shared array larger than half a megabyte, has been fixed.

May 28, 2009 - RELEASE 5.08.03-5

Fix For Struck SIS1100 Driverless Support

A small timing problem with the Struck SIS1100 PCI cards using spec's recently added driverless support, where the card could become unresponsive to spec after repeated initializations, has been fixed.

New Emergency Stop Feature For OMS MAXv Controllers

For Oregon Microsystems MAXv VME motor controllers, if both limits are found active at the same time, spec will treat that as an emergency stop signal. The effect is very similar to what happens when a single hard limit, in that spec will stop all active motors and reset to command level. The difference is that a different message will be displayed on the screen, and if using spec in server mode, an "emergency_stop" event will be sent to clients. Note, with most models of OMS controllers, it is not possible to detect when both limits are set.

Fix For EPICS Encoder Motor Initial Value

An issue dealing with the initial value displayed for EPICS motors after spec release 5.08.01-4 (and partially fixed in spec release 5.08.02-3), has been fixed for motors where the UEIP (use encoder if present) process variable is nonzero. The order of events produced by the standard EPICS motor record caused spec to report the initial motor position based on the RRBV (raw read back value) process variable without correcting for the encoder resolution. spec will now recalculate the motor position whenever a UEIP event is received.

May 21, 2009 - RELEASE 5.08.03-4

New Polled Macro-Hardware Counter Type

A new polled macro-hardware counter type is available. These counters will be polled using the standard wait() function. Counting won't end until both the master timer and all polled macro-hardware counters have finished. See the mac_hdw file for details.

Support For Attocube ANC350 Piezo Controller

This spec release contains preliminary support for the Attocube ANC350 piezo controller over an Ethernet connection. See the attocube help file for implementation details. The controllers should have current firmware (later than 0.0.2.1) in order for spec's limit sensing to work properly.

New ser_par() Options for DTR, RTS, DSR

The ser_par() function can now be used to set values for the modem control Data Terminal Ready (DTR) and Request To Send (RTS) signals on standard serial interfaces. Also, the Data Set Read (DSR) signal can be read. See the serial help file for details.

Parameter Settings Can Be Combined With ser_par()

Multiple serial interface parameters can now be set with one call of ser_par() using a comma-delimited string of assignments. See the serial help file for details.

Configuration Editor Now Uses TACO For Serial Device Type

The serial interface device type used in the hardware configuration file and configuration editor that was formerly named ESRF is now called TACO. Both spec and the configuration editor will continue to recognize the old name, but the configuration editor will use TACO when writing out updated config files. spec binaries since release 5.01.01 will recognize both names. Previous releases of the configuration editor will not.

May 11, 2009 - RELEASE 5.08.03-3

Final Fix For Local Variables in Recursive Macro Functions

A remaining problem with the fixes in the two previous releases for local variables in macro functions, where a macro function could no longer return an associative array local variable, has been fixed.

May 5, 2009 - RELEASE 5.08.03-2

Tweak Of Fix For Local Variables In Recursive Macro Functions

A bug, introduced in the previous release and associated with the fix for macro function local variables used in recursive calls, where a local declaration of a variable as an associative array within a macro function was broken, has been fixed. Also, a second introduced bug, where using a local associative array within a macro function as an argument to a call of another macro function caused a segmentation fault when running spec in server mode, has been fixed.

March 16, 2009 - RELEASE 5.08.03-1

Install Script Simplified

Questions related to obsolete or little-used hardware options asked by the Install script have been eliminated. Specifically, questions for the cib, cvxi, ksc_scsi and sicl parameters are gone. Note, though, if the associated object files or libraries are still needed, they should be entered as values for the site_obj or site_lib parameters, as appropriate. The updated Install script will automatically convert old install_data files to the new format. Also, the Install script no longer asks whether to include CAMAC or VME support. Such support will be included for all standard installations. (As before, it is still possible to prevent linking in hardware support by manually editing the u_hdw.c file, although there is little reason to go to that trouble.)

Local Variables Now Behave Well In Recursive Macro Functions

Previously, local variables used in a macro function would be reset to zero on return from a recursive call to the same macro function. Now, local variables behave as expected.

spec Server Position/Counts Update Frequency Throttled

Position update events while moving and counter update events while counting sent by a spec server to its clients will now be limited to a rate no higher than four times per second.

spec_par("?") Now Shows Default Values

When the current value differs from the default value, the spec_par("?") command now displays the default value in parenthesis.

New spec_par("set_defaults") Option

A new spec_par("set_defaults") command will now set all the spec_par() parameters to their default values.

New spec_par() Option For Enabling a Motor Warning Message

A new spec_par() option "warn_not_at_pos" enables printing of a warning message whenever a motor doesn't reach its final position. Previously, the warning message was not optional, but was only available when spec was linked with TACO libraries.

Fix For plot_cntl("kill") With Multiple Windows

An ancient bug, where using the plot_cntl("kill") command with multiple plot windows open would make reopening some of the windows impossible, has been fixed.

February 26, 2009 - RELEASE 5.08.02-7

Fix For Recently Broken OMS Encoder Support

The support added in spec release 5.08.02-4 for position maintenance mode with Oregon Micro Systems motor controllers (OMS_P controller type) inadvertently broke the basic encoder support (OMS_E controller type). That problem is fixed in this release.

Fix For Keyboard Generated Stop Signal Issue

The keyboard generated stop signal (usually associated with ^Z) has always been purposely ignored by spec. However, when running a subprocess via the unix() command, such as with unix("vi somefile"), a ^Z would stop the subprocess and spec would hang (although recovery was possible by sending a kill signal to the subprocess via another terminal window). This spec release fixes that problem by allowing spec to receive the stop signal while such a subprocess is running. Thus, both the subprocess and spec are stopped (and both can be resumed with the shell fg command). Note, spec still ignores the keyboard stop signal at all other times.

February 24, 2009 - RELEASE 5.08.02-6

New strdef() Built-In Function

The new strdef() function returns a string containing the definition of the macro name given as an argument. If there is no such defined macro, the function returns its argument.

New Optional "Units" Argument To getval()

The getval() built-in function now takes an optional third argument. If present, it will be appended to the current value displayed in parenthesis after the first argument prompt string:

SPEC.1> p getval("Sample to detector", 100, " mm")
Sample to detector (100 mm)?

New "lisa" surf Geometry

A new liquid surface diffractometer geometry for the LISA instrument at Petra III is included in this spec release.

Support For Additional Physik Instrumente Motor Controllers

The Physik Instrumente (PI) model C-663, C-862 and C-863 motor controllers are now supported by spec. In addition, spec now supports the "home_method" standard optional motor parameter for PI motor controllers. If set, its value will be used as the argument to the controller's FE (find edge) command.

February 20, 2009 - RELEASE 5.08.02-5

Fix For AI Solutions DAQ Modules

A bug introduced with the recent updates to the support for the AI Solutions DAQ (formerly called HANARO KISIM) USB modules, where the elapsed counts, elapsed time, external triggers and count events could sometimes have preposterous incorrect values, both when displayed by mca_par("dump") and when returned by the associated mca_par() option, has been fixed.

February 18, 2009 - RELEASE 5.08.02-4

Server/Client Now Maintains Associative Elements As Strings

The spec server/client protocol transfers associative array index and value elements as strings. Previously, strings containing numbers would be converted to numbers when received. That would cause strings such as "090105" or "0123" to be converted to 0 and 81 respectively, as both would be treated as octal values (the first contains an invalid octal digit so becomes zero). spec now maintains the received values as strings. Note, conversion to numbers will be automatic when the values are used in a number context, just as with any locally generated value.

The local Help File Now Displayed On Start Up

A long documented but never implemented feature, where an optional file named local in the spec help directory would automatically be displayed on start up, is now available.

Fix For OMS Position Maintenance With Steppers

A problem associated with the position-maintenance support added for OMS stepper motor controllers in release 5.08.02-1 has been fixed. The problem was that a motor would run away under certain conditions associated with changing the position registers (as with the spec chg_dial() function).

Fix For XIA DXP Elapsed Time Value

The spec code for the XIA DXP modules now reads the clock rate from the module when it is available rather than using compiled-in values (20 or 40 MHz, depending on model). The clock rate is only used with two mca_par() parameters: elapsed real time as returned by "real" and dead time as returned by "dead".

January 28, 2009 - RELEASE 5.08.02-3

New tlog Log File Type

A new type of log file is available. If the name of an output file begins with the characters "tlog" or ends with the characters ".tlog", all output sent to the "tty" device (the screen) will be written to that file, but unlike regular log files, output sent to other files or devices will not be saved to a tlog file. As with all types of log files, output is not turned off on errors or ^C interrupts, and output generated by functions that "paint" the screen, such as tty_fmt(), tty_move(), plot_move(), show_help() and data_plot(), isn't written to the file.

Log File Carriage Returns Translated

spec now translates carriage return characters to newline characters in log file output. This change will make log files that contain output from updated moves and counts easier to handle with editors and other file handling utilities.

Debugging Now Available For TANGO Functions

The tango_io(), tango_get() and tango_put() functions can now display debugging information. Set the DEBUG level to 128 to see the debugging output.

Extra TANGO Attribute Information Available With tango_get()

Additional information associated with data obtained using tango_get() is available by passing an associative array as an optional third argument. Elements of the array will be assigned the data quality factor, time stamp and other attribute information. See the tango help file for details.

Fix For EPICS Motors

An issue, where spec would display the wrong motor position for an EPICS motor under certain conditions, has been fixed. The problem would only occur if the first event sent to spec for the motor's RRBV process variable had a value of zero while the corresponding dial position from the spec settings file was nonzero. This problem has only been an issue since spec's 5.08.01-4 release, which began using only event notifications for keeping track of EPICS motor positions.

January 22, 2009 - RELEASE 5.08.02-2

Fixes For Image Device Support

A buffer size limitation in image_par() that caused problems with the Frelon cameras has been fixed. A bug, where region-of-interest parameters used with the

image_par(sel, "roi", beg_row, end_row, beg_col, end_col)

invocation couldn't be greater than 128, has been fixed.

Updates For AI Solutions DAQ Modules

The support for the AI Solutions DAQ (formerly HANARO KISIM) USB modules has been updated to enable readout of the 256x256 preview images returned when the device is acquiring data. Also, the restriction on the absolute value of the offset_x and offset_y parameters to the current resolution has been removed. See the updated kisim or aisolutions help file for more information.

January 13, 2009 - RELEASE 5.08.02-1

Updates To spec Code

The majority of the spec package source code has been updated from traditional (or K&R) C to ANSI/ISO Standard C. Although spec is still distributed as a 32-bit application, the code updates also include changes to allow 64-bit distributions in the future. Most of the C files that are included in the distribution will reflect the updates, mainly in terms of function declarations. The software should behave the same as before, although with changes to many thousands of lines of code, it is possible for a new bug to have slipped past the quality control checks. As always, if you note any anomalous behavior in this spec release, please promptly inform CSS.

Position Maintenance Support For OMS Steppers

spec now includes support for the position-maintenance feature for stepper motors with encoders as is available with most OMS motor controllers. See the spec oms help file for details.

Removed Sixteen Motor Limit On Huber 9300

The configuration restriction on the number of motors allowed for the Huber 9300 motor controller has been removed to accommodate new versions of the controller that support more than sixteen channels.

USB Reset Added For XIA DXP

The support for the USB interface on the XIA DXP devices now includes sending an initial USB reset, which fixes a problem that appeared with USB 2.0 versions of the device, where spec could only connect once without cycling the power to the device.

Fix For GPIB-ENET Big Reads

A bug, where spec's built-in support for the National Instruments GPIB-ENET device left gaps in the returned data when reading large blocks of data, has been fixed.

Fix For PCI DAC Motors

A bug, where spec did not enable I/O port access when the Measurement Computing DDA04 or DDA08 (or compatible) PCI analog output boards were used, has been fixed. Note, if other I/O port devices were configured, access would be enabled anyway, and no problems would be observed. If not, spec would crash.

Improved Formatting For TANGO Queries

The output for the "?" and "??" options to tango_io(), tango_get() and tango_put() are now better formatted, particularly with respect to columns lining up properly.

Improved Axis Scaling For timescan Macro

The code for the automatic rescaling of the x-axis (time) in the standard timescan macro has been improved to work better with certain scan parameters, particularly with long sleep times and counting to long monitor times.

November 30, 2008 - RELEASE 5.08.01-13

Update For Tsuji CT16-02/NCT08-01/NCT08-02 Counter/Timers

spec now supports the socket interface available on the Tsuji CT16-02, NCT08-01 and NCT08-02 counter/timers. In addition, the NCT08 support has been updated to use commands that allow count times and monitor presets to be specified to higher precision than with the CT16 (microseconds versus milliseconds for time and to multiples of eight versus 1000 for monitor presets).

October 29, 2008 - RELEASE 5.08.01-12

Fix For Recent Data Array State File Bug

A serious bug introduced in spec release 5.08.01-9, where data array sizes would not be restored properly from the saved state file, has been fixed. Please obtain a updated spec release from CSS if affected.

Compumotor SX Updates

The support for the Compumotor model SX motor controller has been updated to work with more than one controller at a time using separate serial device nodes. Previously, multiple controllers were supported only via daisy-chaining over a single serial node. In addition, the "read" motor_par() command pass-through option will now return the string received by the motor controller. Previously, it didn't.

October 22, 2008 - RELEASE 5.08.01-11

Fix For psic Sectors Limit Check

A bug in the enhanced psic sector search introduced in spec release 5.06.04-1 where possible sectors in the exhaustive search would fail the motor-limit test if the sign (of user*dial) parameter for a geometry motor was negative has been fixed.

Improved EPICS Monitor Support

spec's recently added support for EPICS monitors has been updated to insure pending callbacks for monitored values are evaluated prior to an epics_get(). Previously, a "monitor_check" epics_par() call, some form of a wait() call, calls to the built-in EPICS motor, counter, etc. support or a return to the main prompt was necessary.

Update For Ortec 974/995 Counter/Timer

The default "alarm mode" disabled setting added for the Ortec 974/995 counter/timers for the GPIB configuration in spec release 4.03.10 to accommodate modified Ortec firmware has now also been made the default for the serial interface.

September 25, 2008 - RELEASE 5.08.01-10

Fix For Recently Broken State-File Name Behavior

An error made during a recent code cleanup that resulted in the user-name part of the spec state file names truncated to six characters is corrected in this release. Files in the userfiles directories created using spec releases 5.08.01-8 or 5.08.01-9 can be manually renamed to preserve that state file content.

Command Completion Fix

An old bug, where the command-line editing command-completion feature would produce completions for EPICS, TACO or TANGO functions when the functions were not part of the installation configuration, has been fixed.

September 9, 2008 - RELEASE 5.08.01-9

Fix For spec Client Connecting To Many spec Servers

A problem, where some connection attempts failed when a spec client tried to connect to more than two spec servers by spec name (rather than explicit port number), has been fixed.

Fix For config_mac On spec Server

A bug, where a spec server's config_mac macro wouldn't get called for a reconfig command typed at the spec server keyboard immediately after a client sent a remote command, has been fixed. Note, normally, if a macro named config_mac exists, it will be run automatically after spec reads the hardware config file, both on start up and on the reconfig command (included in the standard config macro).

Fix For Error On Out-Of-Bounds Array Assignment

An attempt to access a data array element beyond the array's size is supposed to generate an error message, but not be treated as a fatal error. A bug, where using an out-of-bounds array element on the left side of an assignment expression would produce the spurious error message "Trying to assign to an immutable" and generate a fatal error, has been fixed.

Fix For MDrive Motor Controllers

An issue with spec's initialization of the IMS MDrive motor controllers which caused problems in recognizing all the configured MDrive channels under some conditions has been fixed. Previously, spec would send an EE=0 command to disable encoders if the channel was configured as MDRIVE and send an EE=1 to enable encoders for an MDRIVE_E configuration. For some models that didn't have an encoder capability, the command would generate an unexpected error, which would be associated with the next command spec issued. With this release, spec no longer sends EE=0 for channels configured as MDRIVE, but will send EE=1 for MDRIVE_E channels. Also, spec's MDrive support has been updated so that unexpected error responses should no longer throw off the command-response synchronization.

August 23, 2008 - RELEASE 5.08.01-8

Updated epics_home Syntax

The epics_home parameter used in the spec Install script can now contain the complete path name to the directory that holds the EPICS channel access libraries. The prior behavior, where epics_home contained the path to either the base directory or the lib directory, continues to be supported.

Preliminary Support For Solaris 10 (x86) Platform

Installation of spec on the Solaris 10 (x86) platform is now possible, although such support is still in the preliminary stage and contains no support for direct access to PCI cards, as is available for Linux on x86 platforms.

Updates To Preliminary Support For the Canberra Lynx (DSA-3000) MCA

Several updates to the preliminary support for the Canberra Lynx (DSA-3000) have been made. Specifically, the command mca_par("device_id") is fixed and no longer causes a segmentation fault, the command mca_par("group_size") has been added as a synonym for mca_par("npts") and the command mca_par("select_group") has been added as a synonym for mca_par("group").

July 14, 2008 - RELEASE 5.08.01-7

Support For Siemens D5000 Diffractometer

This spec release includes support for the Siemens D5000 X-Ray Diffractometer, including both motor moving and counting functions. The connection is over a serial interface.

Fix For Obscure spec Client Error

A spurious instance of the "Not allowed to connect to self" error that occurred when a spec client had configured server resources using the "localhost" host name but where the client was also invoked in server mode with the -S flag has been fixed.

Tweak Macro Tweaked

A minor error of ten-year vintage in the definition of the tw tweak macro for motors has been fixed. Previously, when the option for displaying counts was active, the macro would display the counts associated with S[det] rather than S[DET].

July 2, 2008 - RELEASE 5.08.01-6

Fix For remote_async()/remote_poll()

A problem, where the remote_poll() function could fail to detect a spec server-generated event from a prior remote_async() call, has been fixed. See the server help file for updated details on using the remote_async() and remote_poll() spec client functions.

June 25, 2008 - RELEASE 5.08.01-5

New motor_par() Option To Return "sign"

The "sign" motor parameter, which is +1 or -1 indicating the rotation sense of user angles versus dial angles, can now be read via the motor_par() function.

Fix For GPIB Problems After a Serial-Poll Timeout

An old problem with most of the GPIB controller support in spec, where a GPIB serial poll that timed out could cause subsequent GPIB accesses to fail, has been fixed.

Fix For OMS MAXv Used With Struck SIS3150 USB-VME Module

A problem has been fixed with the recent support for the Struck SIS3150 USB-VME module that caused spec to crash when configured with an OMS MAXv motor controller VME module.

New Configuration Option For Struck SIS1100 PCI Card

It is now possible to configure bus:slot numbers in the ADDR field of the configuration editor to distinguish among identical Struck SIS1100 PCI cards configured to use spec's built-in support. If the ADDR is set to zero, spec will behave as before, with multiple identical PCI cards assigned to VME units in the order in which they are discovered by spec.

Fix For TANGO Support

A problem with the implementation of the built-in symbol TANGO_ERR in the new TANGO C-binding support has been fixed.

June 6, 2008 - RELEASE 5.08.01-4

Fix For EPICS "Monitors"

A problem in the implementation of EPICS monitors in spec release 5.07.02-10 that could result in unexpected timeouts on subsequent epics_get() calls has been fixed. In addition, values for EPICS ENUM types for which monitors have been created are now returned as strings rather than integers.

New EPICS "connect" Option For epics_par()

It is now possible to bundle many initial channel-access PV connections into a single network access by using the new epics_par() "connect" option. Such a call will perform the channel access call to create the connection, but will not force the channel access code to broadcast the request to the network. Thus many such requests can be put into a single broadcast. See the epics help file.

More Efficient EPICS Motor Support

An unnecessary channel access read for motor positions has been eliminated from the spec code, as the current motor position for any EPICS motor is already available via callback events.

May 29, 2008 - RELEASE 5.08.01-3

Fix For Reconnecting To spec Server Motors

A problem introduced in spec release 5.06.03-10, where spec clients might not reconnect to spec server motors after a server exits and restarts, has been fixed.

Fix For Extra "move_done" Events From spec Server Motors

A problem, where "move_done" events would be sent by a spec server before the backlash correction had been performed, has been fixed.

Minor Fix For Canberra Multiport

A bug, where an unrecognized mca_par() parameter sent to the Canberra Multiport MCA code might cause a segmentation fault, has been fixed.

May 19, 2008 - RELEASE 5.08.01-2

Support for Struck SIS3150 USB-VME Controller

spec now includes support for the Struck SIS3150 USB-VME controller.

May 9, 2008 - RELEASE 5.08.01-1

ENHANCEMENTS

Data-Group Data-Type Install Option Eliminated

The option to choose float or double for the data-group data-type configuration has been eliminated from spec's installation script. The type now is fixed at double. (In ancient times, the megabyte of virtual memory and disk storage space that could be saved by choosing float sometimes mattered.) Note, the data-group feature hasn't been used by the standard macros since the release of spec 5 (Feb 1, 2001). Eliminating this configuration option should also eliminate the confusion over whether the storage size applied to anything else in spec beyond the data groups (it didn't).

Attempted Move of "Unresponsive" Motors Now Fatal Error

Attempts to move an unresponsive motor will now cause a fatal error. That is, spec will jump out of any executing statement blocks and return to the highest level prompt. Previously, spec would issue an error message but continue. Most motors are marked as unresponsive during hardware initialization when a presence test fails, although several controllers will mark motors unresponsive after certain communication failures. The EPICS and spec-server support can mark motors unresponsive on disconnect events and responsive again automatically if the connection is restored.

New motor_par() Option To Return "offset"

The "offset" motor parameter, which is the difference between the user and dial motor positions, can now be read via the motor_par() function.

New motor_par() Option To Return "writable" Status

The new motor_par() "writable" option returns a value indicating the permission status of a motor, as set in the hardware config file. If bit 1 is set in the return value, the motor can be moved. If bit 2 is set, the limits can be changed. A fully protected motor will return zero. A fully open motor will return 3.

New Output Options For array_dump

The array_dump() function (and data_dump()) now accept an x (or X) format identifier in the printf()-style optional argument, in addition to the e, g and f formats already recognized. If the "%x" format is used, double values will be converted to integers. In addition, initial characters may be included in the format string, for example, "0x%08x" is valid.

Server Interactive Screen Re-prompts After Client-Generated Output

When a client to a spec server produces output on the server's interactive screen by way of remote commands, the server will now refresh the prompt and any text an interactive user may have typed. Note, though, this feature is only implemented when spec is linked with one of the optional command-line editing libraries (libedit or readline).

New "Scan-Active" Bit In Standard Macro Status Variable _stype

Bit 0x80 in the _stype global variable is now set and cleared by the standard scan macros. The bit is set in the standard _head and resume macros and cleared by the standard _tail and _scanabort macros.

Floating Values Saved With Greater Precision In Configuration Editor

The edconf configuration editor now writes all floating-point values to the config file with twelve digits of precision. Previously the steps-per-degree parameter was written with that precision, but other floating values were written with the default six significant digits.

New Monochromator Configuration Supported

A new two-monochromator configuration is contained in the energy.mac macros. The presence of the motor mnemonics mono and monp selects the new configuration.

New EPICS_ERR, EPICS_ERR_MSG Built-In Variables

The new EPICS_ERR built-in variable (present only when spec is linked with EPICS libraries) will assigned the return value of the channel access calls associated with the spec user-level functions epics_get(), epics_put() and epics_par(). If the channel access return value is ECA_NORMAL, EPICS_ERR will be assigned a value of zero. If there is a non-EPICS error, such as no connection available, EPICS_ERR will be assigned a vale of -1. The new EPICS_ERR_MSG built-in variables is assigned the string message associated with the error.

New TACO_ERR, TACO_ERR_MSG Built-In Variables

New built-in variables TACO_ERR and TACO_ERR_MSG are now included when spec is linked with TACO libraries. The previous global variables ESRF_ERR and ESRF_ERR_MSG are still recognized for compatibility. See the taco help file for more details.

Following Error Generates Fault For Delta-Tau PMAC/PMAC2 Controllers

A fatal following error status will now generate a motor fault with Delta-Tau PMAC/PMAC2 motor controllers, which will have the same effect as hitting a limit, in that any other moving motors will be stopped and spec will reset to command level.

FIXES

Fix For Unresponsive Macro-Hardware Controllers

A bug with the macro-hardware implementation, where a motor channel would be marked unresponsive if the _config() function returned ".error." when called with "mot" argument but not when called with the "ctrl" argument, has been fixed. Now, if the _config() function returns ".error." when called with the "ctrl" argument, not only will all associated channels be marked unresponsive, but also the _config() function won't even be called with the "mot" argument for the associated channels.

Fix For Rare External Shared Array Problem

A bug, where connecting to an external shared memory array could lead to a segmentation fault in spec, has been fixed. The problem could occur if the process that created the shared array was replaced with another process with a shared array of the same name but owned by another user.

Fix For Hardware Parameters Saved In State File

A editing error in spec release 5.07.03-4 that disabled the saving of some miscellaneous parameters associated with hardware and with some of the spec_par() options has been corrected.

Fix For EPICS_M1 Motors With Initial Limit

A problem, where spec didn't flag a limit switch that was active when first connecting to an EPICS_M1 type motor, has been fixed. The symptom would be no limit error message when trying to move the motor in the direction of the limit. (EPICS_M1 motors take initial parameter values from the spec hardware config file while EPICS_M2 motors take initial parameter values from the EPICS database.)

NEW HARDWARE SUPPORT

Support For XIA DXP USB 2.0 Interface

This spec release supports the USB 2.0 interface on the newer XIA Saturn DXP device.

Driverless Support For Struck SIS1100/3100

spec now includes "driverless" support for the Struck SIS1100/3100 PCI-VME bus adapter. With the driverless support, no additional software needs to be installed. Previously, this hardware could only be used with a vendor-supplied Linux kernel driver. Note, the driverless support does not use DMA. If large data blocks are to be transferred, the vendor driver mode may provide better performance.

Preliminary Support For the Newport SMC100CC Motor Controller

This spec release includes preliminary support for the Newport SMC100CC motor controllers over a serial interface.

Preliminary Support For the Canberra Lynx (DSA-3000) MCA

This spec release includes preliminary support for the Lynx (DSA-3000) MCA over an Ethernet interface.

Preliminary Support For the TANGO C-Binding Library

This spec release includes preliminary support for the new TANGO C-binding library, as developed at ESRF. New built-in functions to support the TANGO interface include tango_io(), tango_put() and tango_get(). See the new tango help file for preliminary details.