/Zahner-Remote-Python

Examples to control Zahner power potentiostats (PP2x2, EL1002, XPOT2) of the latest generation with Python.

MIT LicenseMIT

Zahner-Remote-Python

The repository Zahner-Remote-Python contains examples for using the Python package zahner_potentiostat to control the Zahner Potentiostats PP212, PP222, PP242, EL1002 or XPOT2 via USB without a Zennium connected via EPC.

The package was developed to easily integrate external Zahner Potentiostats into Python scripts for more complex measurement tasks and for automation purposes.

The control concept is that there are different primitives which can be combined for different electrochemical measurement methods. These primitives can all be configured differently to match the application. In the API documentation of the respective function all possible configuration setter methods are listed.

Note

For this library, the computer must be connected to the PP212, PP222, PP242, EL1002 or XPOT2 via USB. These devices are then controlled directly via USB, without EPC and without Zennium. AC methods are not available with this library. For AC methods like EIS a Zennium with EPC and the thales_remote library is necessary.

The following primitives are available to compose methods with:

And as an example, the following methods were developed from the primitives:

This repository explains how to use the library with examples. These examples build on each other and you should start with the first one.

📚 Documentation

The complete documentation of the individual functions can be found on the API documentation website.

🔧 Installation

For all examples the package zahner_potentiostat is required.
The package can be installed via pip.

pip install zahner_potentiostat

You can clone the complete repository, or download only single examples.
Each example consists of a Jupyter notebook with detailed documentation and explanations and a .py file containing only the Python source code from the notebook.

The Python source code is automatically extracted at the end of the Jupyter notebook. This source code can then be run with an IDE for easier development.

🔨 Basic Usage

"""
Search the Zahner Potentiostat
"""
deviceSearcher = SCPIDeviceSearcher()
deviceSearcher.searchZahnerDevices()
commandSerial, dataSerial = deviceSearcher.selectDevice("35000")

"""
Connect to the Potentiostat
"""
ZahnerPP2x2 = SCPIDevice(SerialCommandInterface(commandSerial), SerialDataInterface(dataSerial))

"""
Setup measurement
"""
ZahnerPP2x2.setSamplingFrequency(10)
ZahnerPP2x2.setCoupling(COUPLING.POTENTIOSTATIC)
ZahnerPP2x2.setMaximumTimeParameter(15)

"""
Start measurement
"""
ZahnerPP2x2.setVoltageParameter(0)
ZahnerPP2x2.measurePolarization()

📖 Examples

The following examples all build on each other, you should read and understand them in sequence.

If images or text files are saved from the examples, then they are located in the same directory.

  • Search devices automatically
  • Connect to a device
  • Perform measurements
  • Read and plot data
  • Perform offset calibration
  • Set the line frequency
  • Set software current and voltage limits of the potentiostat
  • Configure and use polarization primitive
  • Configure and use the open circuit scan primitive
  • Charge and discharge with the polarization primitive
  • Configure and use the ramps primitive
  • Start a primitive at open circuit voltage
  • Configure and use the staircase primitive
  • Plotting with a logarithmic current axis
  • Example of the composition of primitives for more complex measurement methods, with an arbitrary profile consisting of a sequence of primitives as example
  • Limiting the shunt area
  • Example of the composition of primitives for more complex measurement methods, with PITT and GITT as examples
  • Charging and discharging of a supercab with methods developed from primitives
  • Calculate the charge by integrating the current in Python
  • Display the charge efficiency depending on the current in a table with the corresponding charge and discharge voltage curves in a figure
  • Multichannel operation with several external potentiostats, of the latest generation, type PP2x2, XPOT2 or EL1002
  • Shared Zennium series device for impedance measurements
  • Operation of the power potentiostats standalone without thales with the Python package zahner_potentiostat
  • Switch between Thales/EPC and SCPI/standalone operation of the external potentiostats (PP2x2, XPOT2 or EL1002) without switching off the potentiostat
  • Shared Zennium series device for impedance measurements
  • Operation of the power potentiostats standalone without thales with the Python package zahner_potentiostat

📧 Having a question?

Send an e-mail to our support team.

⁉️ Found a bug or missing a specific feature?

Feel free to create a new issue with a respective title and description on the the Zahner-Remote-Python repository.
If you already found a solution to your problem, we would love to review your pull request!

✅ Requirements

Programming is done with the latest Python version at the time of commit.

The package zahner_potentiostat is required for communication with the device. The packages matplotlib, scipy and numpy are used to display the measurement results. Jupyter is not necessary, since each example is also available as a Python file.