ip330 Release Notes
Release 2-4 Sept. 5, 2006
Release 2-3 March 23, 2005
Major re-write:
- Converted from MPF to ASYN.
- Converted from specialized device support to generic device support from ASYN, MCA and STD.
- Converted from C++ to C
Release 2-2 March 4, 2004
Minor changes:
- Documentation updated, renamed, and moved to documentation directory.
- Added new medm .adl files
Release 2-1 November 3, 2003
Major re-write:
- Converted to EPICS 3.14.
- Removed vxWorks dependencies, converted to OSI
- Added iocsh configuration commands
- Configuration routine registers server name, no longer return class pointer
Release 1-7 April 25, 2003
Release 1-6 March 31, 2003
- Changed the way averaging is done in the ip330Scan
class. Previously there was a single averaging time for all input
channels, that was set at boot time with the milliSecondsToAverage parameter
in the call to initIp330Scan(). This was not the best way to do it,
since if an ai record was set to process every 2 seconds, but
milliSecondsToAverage was 100 msec, then the ai record would just be
sampling every 20'th average. A much better way to do it is to have
the averaging time be equal to the scan time of the record, so that if the
scan time is 2 seconds then the averaging is done for 2 seconds, greatly
improving signal to noise. This has now been implemented by making the
averaging time be independent for each input channel, and passing the scan
time in the "extra" field of the message from device support to
the server. Note that there is a limitation in the way this is
presently implemented: it only works if the "standard" EPICS
scan times of 10, 5, 2, 1, .5, .2 and .1 seconds are used. If a site
changes these scan times it will not work correctly, because there is no API
available to determine the actual scan time of a record.
Release 1-5 July 31, 2002 (Carl Lionberger and Eric Snow at SNS)
- Moved interrupt enable to end of config. It was
generating lots of interrupts before being fully configured.
- Properly masked mode control bits in setScanMode, was not working in modes
other than burstContinuous
- Adjusted mailBoxOffset for uniformSingle and burstSingle scan modes in intFunc.
Release 1-4 October 12, 2001
- Added code to handle soft reboots.
Release 1-3 August 28, 2001
- Removed calls to intClear and intDisable.
These were not necessary and did not work on dumb IP carrier.
Release 1-2 January 16, 2001
- Fixed a bug which caused the IOC to crash if the external trigger line
was asserted during a hardware reboot.
- Fixed bugs which caused the IOC to crash if the IP330 hardware was not
installed but server configuration commands were present in the startup file.
Release 1-1 November 1, 2000 (Marty Kraimer)
- Added the configuration server.
- Added a lock that protects adj_slope and adj_offset
from being changed while corrected values are computed.
- Force two data acquisition cycles during calibration.
This is necessary to allow ADC to settle.
- After calibration set mailBoxOffset=16. Caused a bad reading.
- If secondsBetween Calibrate<0 then return raw value.
Release 1-02 September 10, 2000
Changed ip330SweepServer.cc, removed Ip330SweepServer.h, and
replaced devMcaIp330.cc with a device-independent layer, devMcaMpf.cc. devMcaMpf.cc is part of
mcaApp, not part of Ip330,
since it is no longer specific to the Ip330. The messages
accepted by Ip330SweepServer have been changed to accommodate the
new device-independent layer.
Changes to the PID algorithm in ip330PID.cc to improve its
operation. See the comments in ip330PID.cc for details.
Release 1-01 April 20, 2000
Changed the timing logic. See the discussion in Restrictions on Scan Timing.
Release 1-0 November 15, 1999
This support replaces the previous ip330ScanApp. That support
did the following:
- Digitized channels 0 to 15 in differential mode, or 0 to
31 in single-ended mode
- Took a complete set of readings every millisecond.
Actually the complete set of readings was taken every
1.240 milliseconds in diffential mode and every 1.480
milliseconds in single ended mode, because the 15
microseconds to convert each channel was not taken into
account when programming the interval timer.
- Averaged 200 samples for each channel. However, there was
a bug in the software when running in differential mode.
The data were always read from the lower mailbox
registers (0-15) rather than alternating the reads
between the lower and upper mailbox registers. Thus, only
100 unique values were being averaged in this mode,
rather than 200.
- Returned the average value to device support, thus every
0.2 seconds a 200 sample average was supposed to be
available.
- Once a minute calibration was done automatically.
The new support can be configured to function exactly as the
previous support was intended to function with commands like the
following in the MPF server startup file:
pIp330 = initIp330("c-Ip330",carrier,"IP_c","D","-5to5",0,15,10,120)
configIp330(pIp330,3,"Input",1000,60)
initIp330Scan(pIp330,"c-Ip330Scan",0,15,200,20)
The initIp330 command creates a task called
"c-Ip330", with the following settings:
- differential mode
- -5 to 5 volt range
- convert channels 0 to 15,
- 10 clients (Ip330 application-specific servers) maximum
- interrupt vector = 120
The configIp330 command configures Ip330 with the following
settings:
- scanMode = 3 = Burst Continuous
- external trigger = input
- 1000 microseconds = 1 millisecond per scan
- 60 seconds between calibrations
The initIp330Scan command creates a server called
"c-Ip330Scan" with the following settings:
- connected to the Ip330 object created by the initIp330
command
- convert channels 0 to 15
- average readings for 200 milliseconds
- create an output queue for 20 MPF messages
Suggestions and Comments to:
Mark Rivers :
(rivers@cars.uchicago.edu)
Last modified: March 23, 2005