Measurement data recording and visualization using various devices, e.g., multimeters, pyrometers, optical or infrared cameras.
The project is developed and maintained by the Model experiments group at the Leibniz-Institute for Crystal Growth (IKZ).
If you use this code in your research, please cite our open-access article:
A. Enders-Seidlitz, J. Pal, and K. Dadzis, Model experiments for Czochralski crystal growth processes using inductive and resistive heating IOP Conference Series: Materials Science and Engineering, 1223 (2022) 012003. https://doi.org/10.1088/1757-899X/1223/1/012003.
Currently, the following devices are supported:
- Keithley DAQ6510 multimeter (RS232)
- Lumasense pyrometers (RS485):
- IGA-6-23
- IGAR-6
- Series-600
- DIAS Pyrometer
- Basler optical cameras (Ethernet)
- Optris IP-640 IR camera (USB)
- Eurotherm controller (RS232)
- IFM flowmeter (Ethernet)
Additional devices may be included in a flexible manner.
multilog is configured by default using the file config.yml in the main directory. Outputs are written to the working directory. A template config_template.yml, including all supported measurement devices, is provided in this repository; please create a copy of this file and adjust it to your needs. Further details are given below.
To run multilog execute the python file multilog.py:
python3 ./multilog.py
Alternatively, multilog can be started with the optional command line arguments -c
and -o
to give an individual config file and output directory.
python3 ./multilog.py -c ./my_config_file.yml -o ../my_output_dir
If everything is configured correctly, the GUI window opens up. Sampling is started immediately for verification purposes, but the measurements are not recorded yet. Once the Start button is clicked, the directory "measdata_date_#XX" is created and samplings are saved to this directory in csv format. A separate file (or folder for images) is created for each measurement device.
multilog is built for continuous sampling. In case of problems, check the log file for errors and warnings!
multilog is configured using the file config.yml in the main directory or a user-defined config-file provided using the -c
argument. A template config_template.yml including all supported measurement devices is provided in this repository; please create a copy of this file and adjust it to your needs.
In the settings section of the config-file the sampling time steps are defined (in ms):
- dt-main: main time step for sampling once the recording is started. Used for all devices except cameras.
- dt-camera: time step for sampling of cameras.
- dt-camera-update: time step for updating camera view. This value should be lower than dt-camera (to get a smooth view) but not lower than exposure + processing time.
- dt-init: time step used for sampling before recording is started.
The logging is configured in the logging section of the config-file. The parameters defined are passed directly to the basicConfig-function of Python's logging module.
The devices section is the heart of multilog's configuration and contains the settings for the measurement devices. You can add any number of supported devices here. Just give them an individual name. A separate tab will be created in the GUI for each device. The device type is defined by the name as given in config-template.yml, e.g. "DAQ-6510", "IFM-flowmeter", or "Optris-IP-640", and must always be contained in this name; extensions are possible (e.g., "DAQ-6510 - temperatures").
For the Keithley DAQ6510 multimeter, the following main settings are available:
- serial-interface: configuration for pyserial
- settings: currently, some channel-specific settings are defined globally. This will be changed in the future.
- channels: flexible configuration of the device's channels for measurement of temperatures with thermocouples / Pt100 / Pt1000 and ac / dc voltages. Conversion of voltages into different units is possible (see "rogowski" in config_template.yml).
The main configurations (IP, ports) should be self-explaining. If the section "flow-balance" is included in the settings, in- and outflows are balanced to check for leakage. This is connected to a discord-bot for automatized notification; the bot configuration is hard-coded in discord_bot.py.
Temperature measurement and control operation points are logged. Configuration of:
- serial-interface: configuration for pyserial
The configuration of the Lumasense pyrometers includes:
- serial-interface: configuration for pyserial
- device-id: RS485 device id (default: '00')
- transmissivity
- emissivity
- t90
The camera is connected using ethernet. Configuration of:
- device number (default: 0)
- exposure time
- framerate
- timeout
- Output File Format (tiff: lossless but 15MB per picture or jpeg: with losses but <1MB per picture.)
A Script to convert the .tiff data to .png data (also lossless but only 5MB per picture) can be found in the postprocessing folder.
If two Cameras are conected the Framerate will only be half of the set Framerate!
Configuration according to settings in FiloCara/pyOptris, including:
- measurement-range
- framerate
- emissivity
- transmissivity
multilog runs with python >= 3.8 on both Linux and Windows (Mac not tested). The main dependencies are the following python packages:
- matplotlib
- numpy
- PyQT5
- pyqtgraph
- pyserial
- PyYAML
Depending on the applied devices multilog needs various additional python packages. A missing device-specific dependency leads to a warning. Always check the log if something is not working as expected!
- requests
For the discord bot there are the following additional dependencies:
- dotenv
- discord
- pypylon
- Pillow
- imagio
- pyoptris and dependencies installed according to https://github.com/nemocrys/pyOptris/blob/dev/README.md
- git (will be called as a subprocess if available)
NOMAD support and the option to upload measurement data to NOMAD is under implementation. Currently, various yaml-files containing a machine-readable description of the measurement data are generated.
To get an overview of the program have a look at multilog's Read the Docs page. It includes a short description of how to implement a new device. In case of questions please open an issue!
This code is available under a GPL v3 License. Parts are copied from FiloCara/pyOptris and available under MIT License.
In case of questions please open an issue!
This project has received funding from the European Research Council (ERC) under the European Union's Horizon 2020 research and innovation programme (grant agreement No 851768).
Any help to improve this code is very welcome!