Skip to main content

Elektro-Automatik Series PS 2000 Python Controller

Project description

EA-PS 2042-20B

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.1.tar.gz (5.0 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.1-py3-none-any.whl (10.5 kB view details)

    Uploaded Python 3

    File details

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

    File metadata

    • Download URL: eaps2000-1.2.1.tar.gz
    • Upload date:
    • Size: 5.0 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.1.tar.gz
    Algorithm Hash digest
    SHA256 6ef35773ebe263cd9fe09609a029080654f16289bcb14da1b17bb5a7e544ff77
    MD5 c1196ff21309d05424bfe034830949ef
    BLAKE2b-256 7338d805740efbf307af56722cb2249333dcdb8733921347d81669c146df192e

    See more details on using hashes here.

    Provenance

    The following attestation bundles were made for eaps2000-1.2.1.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.1-py3-none-any.whl.

    File metadata

    • Download URL: eaps2000-1.2.1-py3-none-any.whl
    • Upload date:
    • Size: 10.5 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.1-py3-none-any.whl
    Algorithm Hash digest
    SHA256 d5eed74b30808b626384515650c98dd49bf63957efb2a258d0990f8afd13a4de
    MD5 b028b3f89aaab4b1ac7af5af32fa2d77
    BLAKE2b-256 40943e34aad3771224ff726cd8b0907dbc3565d2d2a3d94610c648b5704e47eb

    See more details on using hashes here.

    Provenance

    The following attestation bundles were made for eaps2000-1.2.1-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