Max is multitasking software. It is designed as a Client/Server application. The Server performs the device function calls, takes the data and sends it to the client, which is responsible for the User Interaction. This Interprocess Comunication takes place via sockets, hence client and server can run on different hosts.
The program has been tested on PC's running LINUX with a kernel version 2.0 or higher and the Qt-library ver 1.40 or higher.
Max is distributed under the GNU-public licence. See http://www.gnu.org or write to :
Free Software Foundation, Temple Place - Suite 330,Boston, MA 02111-1307, USA, Voice: +1-617-542-5942 59, Fax: +1-617-542-2652, gnu@gnu.org
Max does not use a scripting mechanism to control the external devices and the program flow. It uses a different approach, which is more suited for standard data acquisition-problems, as they occure in our labs (and probably also in most others).
Max was designed under the assumption that a "standard" measurement always consists out of a cyclic structure of actions. (demonstrated here with the example of a laser scan. In such a scan a certain value is measured as a function of a laser wavelength.) :
Action | Example in the experiment |
Some devices are set to a certain value | Move your laser to the starting wavelength |
Some devices a read out | Readout an ADC or a scope that contains the data just measured |
The data is stored in a certain "channel" | - |
Some parameters are incremented | Move the laser to next wavelength |
The channel number is incremented and it starts all over again until the maximal channel number is reached | You end up with a Spectrum, a signal as a function of the laser-wavelength |
Max basically copies this cycle of device function calls.
Each device-function, that the user has to provide to enable Max to talk to his devices, is a small C-programm. It is very easy to write and easy to understand. Check out the example devices file : laser.cpp.
The user then tells Max which of these functions to call and in which order to do so. The device functions pass their measured data via special functions to Max, which takes care of data handling and storage.
If the users wants, he can select the measured values to be plotted on the screen during the measurement, so he can check wether his measurement is successful. (Most of the time it's not)
At the end of the measurement the data can be saved to disk. The user can also save the device parameters and some personal comments in an extra file for information purposes.
Max handles an internal a "Device Parameter-Database", which contains all parameters, that the device functions need to control the devices in the experiment. The device-parameters are specified by the userin an initfile, which is read by Max at startup. Each device-parameter is uniquely defined by two words, the device-name and the variable name and the variable type (int or double). This way all variables can be acessed very easily. The user has to edit this file when implementing new devices. This data is then accessible online by the user on the screen and by all device functions simultaneously. (Also, while the measurment is running)
A second advantage of this is the fact that the performance of the graphical frontend is not harmed by slow data acquisition processes. The device-polling of the server can take a lot of computing time and can cause the GUI to "hang". This does not happen in this programm.
Now, everything again in compressed form + some additional information :
Main Properties
1. Modular structure : The Devices uses in the experiment are represented in the program as single modules (C-subroutines) with standard headers. An easy implementation of new devices is possible also for beginning C-programmers. Details of the main-program hidden from the user.
2. Strict separation of main-programs, device routines and hardware drivers -> enhanced compatitbility with different operating systems. before the user can start Max in his experiment, he has to link his device drivers for the desired I/O cards to the programm.
3. The device modules can be dynamically combined for different measurement applications
4. Flexible device-module database : Device variables and parameters are accessible online by the user and by all modules during the measurement . Each device parameter dataset is uniquely defined by a device- and a variable name. A data exchange between devices is possible.
5. Flexible data handling : Devices can store different kinds of measured data : int, double, arrays of int (-> scope data) and images with one command.(Images are not implemented in max ver 2.0.0. Max recognizes data types automatically and takes care of appropriate data handling and storage.
6. No limitations in number of modules used, measured datasets, channels and lengths of arrays.
7. Configuration of measurement applications by user-individual initfiles in the same program read at startup or runtime.
8. Data is stored in an "ORIGIN" readable format
9. Graphical user interface under X-Windows for online plotting of measured data (int,double,strings and images)
10. Runs on LINUX-PC's and all other UNIX machines, Windows NT, Windows 95 (with commercial GUI toolkit) and also OS/9 under X-Windows.
11. Via X-Windows remote control and monitoring of measurement possible from office desktop
12. Internal trigger : internal timer can be set in microseconds for defined trigger intervals
13. Interrupt controlled trigger : measurement can be trigered by polling or external interrupt. This feature depends heavily on the hardware and on the operating system used. There are no standard solutions for this problem, the user has to provide a device routine that handles the events from the hardware and then passes the data to Max.
14. Network structure at the MBI allows measured data to be stored under /users/<username> . Hence, the can be read directly with a windoze 95 PC for analysis.