This repository contains the Python controller for the Oxford CryoSystems 800 Series CryoStream, a device designed to facilitate precise temperature control in scientific experiments. The controller is written in Python2.7 and offers a range of functionalities specific to the CryoStream 800 series.
- John Taylor, Berkeley Center for Structural Biology, Berkeley National Laboratory (jrtaylor_at_lbl.gov)
- Gabriel Gazolla, Berkeley Center for Structural Biology, Berkeley National Laboratory (gabrielgazolla_at_lbl.gov)
- Python 2.7.
- Network connection to the CryoStream device.
- Cryostream 800's IP.
-
Clone the Repository
Clone this repository to your local machine. -
Configure IP Address
Edit the IP address in thecryostream800-main.py
file to match the address of your CryoStream device. -
XML Configuration Files (Optional)
Ensure that you have the latest versions ofCryostream.xml
andOxcryoProperties.xml
. These can be downloaded directly from the provided links.
Execute the controller script using Python 2.7:
python2.7 cryostream800-main.py
An inline function is implemented to avoid reading configuration files each time the software loads. If you prefer to use the external configuration:
- Uncomment the relevant functions along the code, and comment the inline functions.
- Update the path to the XML files.
- Refer to comments in the
__init__
constructor for additional guidance.
The CryoStream 800 lacks a built-in annealing function (stopping flow temporarily) unlike the CryoStream 1000 series. We have attempted to implement this feature through software. Detailed instructions are provided in the script.
The code is structured modularly for ease of expansion and customization. Users can add or modify features as needed.
The CryoStream device sends updates about its status over the network at one-second intervals. Therefore, it is not practical to retrieve status packets more frequently than once per second.
The CryoStream device operates as a state machine. It is essential to ensure that the device is in a 'ready' state before issuing a COOL
command. The device must be properly initialized and prepared to respond to this command effectively.
Due to the inherent characteristics of the CryoStream device, there are instances where commands sent to the device might not execute as expected. The exact cause of this issue it is not entirely clear, but to address this, we have implemented functions with confirmation. This process involves:
- Sending a command to the device.
- Waiting for the command to execute.
- Retrieving new status data from the device to confirm the command's execution.
- If the command is not executed, the system automatically retries a few times.
This approach ensures reliability in command execution, as it verifies whether the intended action has been performed and attempts to rectify the situation if it has not.
While this code is primarily designed for Python 2.7, porting it to other Python versions should be relatively straightforward. It may involve modifying only a few lines of code. However, it's important to note that for this specific project, the use of Python 2.7 was a required condition.
Thanks to James Holton (LBL), Scott Classen (LBL), and George Meigs (LBL) for their assistance in understanding protocol details of the devices with practical examples.
Contributions are welcome. Please email us.
This project is licensed under GNU GPL3.