Skip to main content

Elektro-Automatik Series PS 2000 Python Controller

Project description

eaps2000 - PS 2000B Series PSU Python Control Unit

The eaps2000 is a Python module for Elektro-Automatik PS 2000B Series PSU control.

This software implements the following functionality:

  • Reading out device information (serial number, model etc.)
  • Setting over-voltage and over-current protection
  • Setting voltage and current for an output
  • Controlling the output stage on/off
  • Acknowledging alarms

Installing the package

Install the project from PyPi or build it first.

pip install eaps2000

Getting Started

Setup Linux Host

Check permissions on /dev/ttyACM0

ls -l /dev/ttyACM0

Add user to dialout group:

sudo usermod -aG dialout $USER
# if your distro uses uucp instead:
# sudo usermod -aG uucp $USER

Verify your groups:

groups

Make sure dialout (or uucp) is listed.

Close all other programs using /dev/ttyACM0:

lsof /dev/ttyACM0

Reboot your machine.

Using the CLI Interface

# Showing help
eaps2000 --help

# Show device info and current state (use /dev/ttyACM0 for Linux-based systems)
eaps2000 -p COM123 --info

# Set output voltage to 3.3V, current to 1.3A, output off:
eaps2000 -p COM123 -V 3.5 -I 1.3 --off

# Set output voltage to 3.3V, current to 1.3A, output on:
# CAUTION: This command will apply power to the output!
eaps2000 -p COM123 -V 3.5 -I 1.3 --on

NOTE: On Linux, use a device path such as /dev/ttyACM0 instead of COM123.

Using Python interface:

from eaps2000 import eaps2k

port = 'COM123'  # use /dev/ttyACM0 for Linux-based systems
with eaps2k(port) as ps:
    # Prepare config:
    cfg = eaps2k.get_config_template()
    cfg['ACK'] = True  # acknowledge alarms if any
    cfg['OVP'] = 5.0   # over-voltage-protection value
    cfg['OCP'] = 0.5   # over-current-protection value
    cfg['Iset'] = 0.1  # current to be set
    cfg['Vset'] = 3.3  # voltage to be set

    # Turn off the output stage:
    ps.set_output_state(False)

    # Apply configuration:
    ps.configure(cfg)

    # Turn on the output stage:
    # ATTENTION: The power will be applied to your probe here!
    # ps.set_output_state(True)

    # Show information:
    ps.print_info()

Running Tests

Install development dependencies first:

pip install -e ".[dev]"

Run unit tests:

pytest

Run tests together with flake8 checks (same mode as CI):

pytest --flake8

Run hardware tests (requires a connected PSU):

EAPS2000_RUN_HW_TESTS=1 \
EAPS2000_TEST_PORT=/dev/ttyACM0 \
pytest -m hardware

Run interactive hardware tests:

EAPS2000_RUN_HW_TESTS=1 \
EAPS2000_TEST_PORT=/dev/ttyACM0 \
EAPS2000_HW_INTERACTIVE_CONFIRM=1 \
pytest -m hardware_interactive -s

Building the Project

The project is built with hatchling

pip install hatchling && flake8 . -v && hatchling build && pytest --flake8

Installing a freshly built project can be done by running:

pip install ./dist/eaps2000-*.whl --upgrade --force-reinstall

Documentation from the Manufacturer

The manufacturer EA ELEKTRO-AUTOMATIK GMBH & CO. KG provides an overview of all available PS 2000 B Series models in the shop Serie PS 2000 B 100 bis 332 W on its German web page.

The Programming_Guide_PS2000B_TFT gives an overview of the protocol implemented. It also describes voltage/current conversions necessary for the communication.

Object List

Additional document object_list_ps2000b_de_en.pdf mentioned in Programming_Guide_PS2000B_TFT (or here and here) gives an overview of control commands. Each object in the list is basically a get/set command to control the PSU.

The table below lists objects in one place:

Object Description Access Data type Data length in Bytes Mask for type 'char' Data Example or further description
0 Device type ro string 16 PS2042-06B + EOL (EOL= End of Line 0x00)
1 Device serial no. ro string 16 1034440002 + EOL
2 Nominal voltage ro float 4 Unom = 42.0 (Floating point number IEEE754 Standard)
3 Nominal current ro float 4 Inom = 6.0 (Floating point number IEEE754 Standard)
4 Nominal power ro float 4 Pnom = 100.0 (Floating point number IEEE754 Standard)
6 Device article no. ro string 16 39200112 + EOL
8 Manufacturer ro string 16 Manufacturer's name + EOL
9 Software version ro string 16 V2.01 09.08.06 + EOL
19 Device class ro int 2 0x0010 = PS 2000 B Single, 0x0018 = PS 2000 B Triple
38 OVP threshold rw int 2 Overvoltage set value 0-110% of Unom * 256
39 OCP threshold rw int 2 Overcurrent set value 0-110% of Inom * 256
50 Set value U rw int 2 Set value of voltage 0-100% of Unom * 256
51 Set value I rw int 2 Set value of current 0-100% of Inom * 256
54 Power supply control rw char 2 0x01
0x01
0x0A
0x10
0x10
0xF0
0xF0
0x01
0x00
0x0A
0x10
0x00
0xF0
0xE0
  • Switch power output on
  • Switch power output off
  • Acknowledge alarms
  • Switch to remote control
  • Switch to manual control
  • Tracking on
  • Tracking off
  • 71 Status + Actual values ro int 6
  • Byte 0:
    Bits 1+0:
    Byte 1:
    Bit 0:
  • Bits 2+1:
    Bit 3:
    Bit 4:
    Bit 5:
    Bit 6:
    Bit 7:
  • Word 1:
  • Word 2:
  • Query device state
    00=free access; 01=Remote

    1=Output on
  • Controller state: 00=CV, 10=CC
    1=Tracking active**
    1=OVP active
    1=OCP active
    1=OPP active
    1=OTP active
  • Actual voltage (% of Unom * 256)
  • Actual current (% of Inom * 256)
  • 72 Status + Momentary set values ro int 6
  • Byte 0:
    Bits 1+0:
    Byte 1:
    Bit 0:
  • Bits 2+1:
    Bit 3:
    Bit 4:
    Bit 5:
    Bit 6:
    Bit 7:
  • Word 1:
  • Word 2:
  • Query device state
    00=free access; 01=Remote

    1=Output on
  • Controller state: 00=CV; 10=CC
    1=Tracking active**
    1=OVP active
    1=OCP active
    1=OPP active
    1=OTP active
  • Set value of voltage (% of Unom * 256)
  • Set value of current (% of Inom * 256)
  • ** PS 2000 B Triple only

    Debugging the System

    I very handy CLI option to see messages transfered on the bus is -vvv.

    The command will show all the bytes transfered to and from the device.

    eaps2000 -p /dev/ttyACM0 --info -vvv
    

    Project details


    Download files

    Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

    Source Distribution

    eaps2000-1.2.0.tar.gz (4.9 kB view details)

    Uploaded Source

    Built Distribution

    If you're not sure about the file name format, learn more about wheel file names.

    eaps2000-1.2.0-py3-none-any.whl (10.4 kB view details)

    Uploaded Python 3

    File details

    Details for the file eaps2000-1.2.0.tar.gz.

    File metadata

    • Download URL: eaps2000-1.2.0.tar.gz
    • Upload date:
    • Size: 4.9 kB
    • Tags: Source
    • Uploaded using Trusted Publishing? Yes
    • Uploaded via: twine/6.1.0 CPython/3.13.12

    File hashes

    Hashes for eaps2000-1.2.0.tar.gz
    Algorithm Hash digest
    SHA256 991e2b2c4a3a17ae3c68f0dac1501c56da61b36a40ee01c002ed534f9f13a4fc
    MD5 c3185efa378ffeb2b87ef90e45462ce8
    BLAKE2b-256 aad67cec206f9cf127ee30668a618a6b3dde2095523c3997d71993e4a2814913

    See more details on using hashes here.

    Provenance

    The following attestation bundles were made for eaps2000-1.2.0.tar.gz:

    Publisher: python-package.yml on KozhinovAlexander/eaps2000

    Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

    File details

    Details for the file eaps2000-1.2.0-py3-none-any.whl.

    File metadata

    • Download URL: eaps2000-1.2.0-py3-none-any.whl
    • Upload date:
    • Size: 10.4 kB
    • Tags: Python 3
    • Uploaded using Trusted Publishing? Yes
    • Uploaded via: twine/6.1.0 CPython/3.13.12

    File hashes

    Hashes for eaps2000-1.2.0-py3-none-any.whl
    Algorithm Hash digest
    SHA256 2722b932508ba5e0dcd490445bf04904385d899449404c145a7b51b22ab3e349
    MD5 0eafbdb468b180ae4fec255874a73ac5
    BLAKE2b-256 45b5c299b0a30cbd51e01f5f2a521248df11216e8f226b938b04f40f056b8152

    See more details on using hashes here.

    Provenance

    The following attestation bundles were made for eaps2000-1.2.0-py3-none-any.whl:

    Publisher: python-package.yml on KozhinovAlexander/eaps2000

    Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

    Supported by

    AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page