hvl-ccb


Namehvl-ccb JSON
Version 0.14.4 PyPI version JSON
download
home_page
SummaryPython common code base to control devices high voltage research devices, in particular, as used in Christian Franck's High Voltage Lab (HVL), D-ITET, ETH
upload_time2023-12-22 17:55:19
maintainer
docs_urlNone
authorMikołaj Rybiński, David Graber, Henrik Menne, Alise Chachereau, Henning Janssen, David Taylor, Joseph Engelbrecht, Chi-Ching Hsu
requires_python<3.11,>=3.9
licenseGNU General Public License v3
keywords hvl_ccb
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            =======
History
=======
0.14.4 (2023-12-22)
-------------------

* Hot-fix to be compatible with the newly released version :code:`23.12.0` of :code:`black`
* Switch to src-layout
* In :code:`tiepie`:
    * implementation property :code:`generator_is_running` to check, whether the generator is running
    * properties :code:`probe_offset` and :code:`probe_gain` are not implemented and raise NotImplementedError


0.14.3 (2023-11-17)
-------------------

* Fix Heinzinger conversion from mA to A and fix wrong docstrings
* Hot-fix to be compatible with the newly released version :code:`23.11.0` of :code:`black`
* Fix :code:`bumpver` tag messages
* Implementation of Technix to fulfil :code:`protocols.Source`


0.14.2 (2023-09-07)
-------------------

* Change dependency to :code:`libtiepie` with linux binaries using forked version :code:`python-libtiepie-bi`
* Adapt :code:`makefile` after removing :code:`setup.py`
* Fix commit messages and tag with :code:`bumpver`
* Hot-fix to be compatible with the newly released version :code:`3.5.0` of :code:`pymodbus`


0.14.1 (2023-08-21)
-------------------

* Remove :code:`setup.cfg`, :code:`setup.py`, :code:`mypy.ini`, :code:`pytest.ini`, :code:`requirements_dev.txt` and change to :code:`pyproject.toml`
* Replace :code:`bump2version` with :code:`bumpver`
* Change dependency to :code:`libtiepie` with linux binaries
* Hot-fix to be compatible with the newly released version :code:`6.1.0` of :code:`flake8`


0.14.0 (2023-07-28)
-------------------

* Rework of Heinzinger high voltage source control
    * validation of input values (e.g. :code:`voltage`-property)
    * merge :code:`HeinzingerPNC` and :code:`HeinzingerDI` to :code:`Heinzinger`
    * always return values as V for voltage and A for current
    * RangeEnum for :code:`number_of_recordings`
    * fulfil :code:`protocols.Source`
    * raise Error for getter and setter (e.g. set_current, get_current ...), use property instead
* Hot-fix to be compatible with the newly released version :code:`23.7.0` of :code:`black`
* Hot-fix to be compatible with the newly released version :code:`3.4.0` of :code:`pymodbus`
* Hot-fix to be compatible with the newly released version :code:`1.1.6` of :code:`libtiepie`
    * drop support for I2C
* Remove default import from :code:`hvl_ccb.comm` and :code:`hvl_ccb.dev` for specific communication protocols and devices


0.13.3 (2023-03-31)
-------------------

* Introduce common protocol for voltage and current sources :code:`hvl_ccb.dev.protocols.sources`
* Update code style to :code:`black` 23.3.0 and :code:`isort` 5.12.0
* An :code:`_EarthingStick` of :code:`BaseCube` is implemented as a :code:`_Switch`
* Code improvements for device :code:`Heinzinger`
    * use property-based instead of getter and setter
    * DeprecationWarning for getter and setter (e.g. set_current, get_current ...)


0.13.2 (2023-03-17)
-------------------

* Hot-fix to be compatible with the newly released version :code:`3.0.0` of :code:`typeguard`

0.13.1 (2023-03-03)
-------------------

* Repository maintenance
    * add the option to manually set :code:`n_attempts_max` and :code:`attempt_interval_sec` in :code:`query` of the :code:`SyncCommunicationProtocol`
    * fix links in description for :code:`Heinzinger` digital interface and universal high voltage power supplies
    * keep copyright year information only in :code:`docs/conf.py` and :code:`README.rst`
    * remove copyright year information from the files
    * fix readthedocs build failed issue
    * update code style to :code:`black` 23.1.0

0.13.0 (2023-01-27)
-------------------

* Drop support for Python 3.7 and 3.8:
    * remove version dependent implementations
    * changed typing acc. to PEP 585
* Un-freeze version number of dependencies and upgrade to most recent versions

0.12.3 (2022-12-27)
-------------------

* Code improvements for device :code:`cube`:
    * split :code:`alarms` from :code:`constants`
    * split :code:`errors` from :code:`constants`
    * split :code:`earthing_stick` from :code:`constants`
    * split :code:`support` from :code:`constants`
* Update code style to :code:`black` 22.12.0
* Smaller change of device :code:`tiepie`:
    * change hard coded trigger time out value for no time out/infinite (-1) to :code:`ltp.const.TO_INFINITY`

0.12.2 (2022-11-29)
-------------------

* Move the device modules into packages
* Bugfix in :code:`validate_number` to check the order of the limits
* Repository maintenance:
    * imports are sorted with :code:`isort`
    * some :code:`mypy` fixing and additional typing

0.12.1 (2022-10-31)
-------------------

* Fix :code:`numpy` version requirement problem
    * for Python 3.7: 1.21.6
    * for Python 3.8 and onwards: 1.23.4

0.12.0 (2022-10-17)
-------------------

* Last release for Python 3.7 and 3.8
* Repository maintenance
    * update Labjack LJM software installer link in the pipeline
    * fix dependencies to the fixed version
    * fix :code:`asyncua` to 0.9.95 and :code:`pymodbus` to 2.5.3 (newer versions break the code)
    * fix PICube checker for slope as it is always positive

0.11.1 (2022-09-15)
-------------------

* Repository maintenance
    * fix issue with :code:`mypy` and Python 3.10.7
    * update code style to :code:`black` 22.8.0
    * project configurations merged into :code:`setup.cfg`
    * fix coverage indicator

0.11.0 (2022-06-22)
-------------------

* New device: Fluke 884X Bench 6.5 Digit Precision Multimeter
* :code:`RangeEnum` is a new enum for e.g. measurement ranges which also finds a suitable range object
* smaller changes of device :code:`tiepie`:
    * introduce status method :code:`is_measurement_running()` to check if the device is armed
    * introduce :code:`stop_measurement()` to disarm the trigger of the device
    * fix bug with docs due to change of :code:`libtiepie`
* :code:`NameEnum` and inherited enums can only have unique entries

0.10.3 (2022-03-21)
-------------------

* fix bug in the Labjack pulse feature that occurred when the start time was set to 0s
* new conversion utility to map two ranges on each other
* update CONTRIBUTING.RST
* update makefile and make.sh
* improve the mockup telnet test server

0.10.2 (2022-02-28)
-------------------

* introduction of :code:`black` as code formatter
* increase the required version of the package :code:`aenum`
* remove device :code:`supercube2015` - as it is no longer used
* remove unused package :code:`openpyxl` requirement
* fix bug in highland logging
* improve handling for communication error with picotech

0.10.1 (2022-01-24)
-------------------

* several improvements and fixes for device :code:`cube`:
    * privatize :code:`Alarms` and :code:`AlarmsOverview`
    * fix list of cube alarms
    * improve docs
    * fix bugs with earthing sticks
    * fix bug in config dataclass of cube
* introduction of BoolEnum
* introduction of RangeEnum
* bumpversion -> bump2version

0.10.0 (2022-01-17)
-------------------

* Reimplementation of the Cube (before known as Supercube)
* new names:
    * Supercube Typ B -> BaseCube
    * Supercube Typ A -> PICube (power inverter Cube)
* new import:
    * :code:`from hvl_ccb.dev.supercube import SupercubeB` ->
      :code:`from hvl_ccb.dev.cube import BaseCube`
* new programming style:
    * getter / setter methods -> properties
    * e.g. get: :code:`cube.get_support_output(port=1, contact=1)` ->
      :code:`cube.support_1.output_1`
    * e.g. set: :code:`cube.get_support_output(port=1, contact=1,
      state=True)` -> :code:`cube.support_1.output_1 = True`
* unify Exceptions of Cube
* implement Fast Switch-Off of Cube
* remove method :code:`support_output_impulse`
* all active alarms can now be queried :code:`cube.active_alarms()`
* alarms will now result in different logging levels depending on the
  seriousness of the alarm.
* introduction of limits for slope and safety limit for RedReady
* during the startup the CCB will update the time of the cube.
* verification of inputs
* polarity of DC voltage
* Switch from :code:`python-opcua` to :code:`opcua-asyncio`
  (former package is no longer maintained)

0.9.0 (2022-01-07)
------------------

* New device: Highland T560 digital delay and pulse generator over Telnet.
* Rework of the Technix Capacitor Charger.
    * Moved into a separate sub-package
    * NEW import over :code:`import hvl_ccb.dev.technix as XXX`
    * Slightly adapted behaviour
* Add :code:`validate_tcp_port` to validate port number.
* Add :code:`validate_and_resolve_host` to validate and resolve host names and IPs.
    * Remove requirement :code:`IPy`
* Add a unified CCB Exception schema for all devices and communication protocols.
* Add data conversion functions to README.
* Update CI and devel images from Debian 10 buster to Debian 11 bullseye.
* Fix typing due to numpy update.
* Fix incorrect overloading of :code:`clean_values()` in classes of
  type :code:`XCommunicationConfig`.

0.8.5 (2021-11-05)
------------------

* Added arbitrary waveform for TiePie signal generation, configurable via
  :code:`dev.tiepie.generator.TiePieGeneratorConfig.waveform` property.
* In :code:`utils.conversion_sensor`: improvements for class constants; removed SciPy
  dependency.
* Added Python 3.10 support.

0.8.4 (2021-10-22)
------------------

* :code:`utils.validation.validate_number` extension to handle NumPy arrays and
  array-like objects.
* :code:`utils.conversion_unit` utility classes handle correctly :code:`NamedTuple`
  instances.
* :code:`utils.conversion_sensor` and :code:`utils.conversion_unit` code
  simplification (no :code:`transfer_function_order` attribute) and cleanups.
* Fixed incorrect error logging in :code:`configuration.configdataclass`.
* :code:`comm.telnet.TelnetCommunication` tests fixes for local run errors.

0.8.3 (2021-09-27)
------------------

* New data conversion functions in :code:`utils.conversion_sensor` and
  :code:`utils.conversion_unit` modules. Note: to use these functions you must install
  :code:`hvl_ccb` with extra requirement, either :code:`hvl_ccb[conversion]` or
  :code:`hvl_ccb[all]`.
* Improved documentation with respect to installation of external libraries.

0.8.2 (2021-08-27)
------------------

* New functionality in :code:`dev.labjack.LabJack`:
    * configure clock and send timed pulse sequences
    * set DAC/analog output voltage
* Bugfix: ignore random bits sent by to :code:`dev.newport.NewportSMC100PP`
  controller during start-up/powering-up.

0.8.1 (2021-08-13)
------------------

* Add Python version check (min version error; max version warning).
* Daily checks for upstream dependencies compatibility and devel environment
  improvements.

0.8.0 (2021-07-02)
------------------

* TCP communication protocol.
* Lauda PRO RP 245 E circulation thermostat device over TCP.
* Pico Technology PT-104 Platinum Resistance Data Logger device as a wrapper of the
  Python bindings for the PicoSDK.
* In :code:`com.visa.VisaCommunication`: periodic status polling when VISA/TCP keep
  alive connection is not supported by a host.

0.7.1 (2021-06-04)
------------------

* New :code:`utils.validation` submodule with :code:`validate_bool` and
  :code:`validate_number` utilities extracted from internal use within a
  :code:`dev.tiepie` subpackage.
* In :code:`comm.serial.SerialCommunication`:
     * strict encoding errors handling strategy for subclasses,
     * user warning for a low communication timeout value.

0.7.0 (2021-05-25)
------------------

* The :code:`dev.tiepie` module was splitted into a subpackage with, in particular,
  submodules for each of the device types -- :code:`oscilloscope`, :code:`generator`,
  and :code:`i2c` -- and with backward-incompatible direct imports from the submodules.
* In :code:`dev.technix`:
      * fixed communication crash on nested status byte query;
      * added enums for GET and SET register commands.
* Further minor logging improvements: added missing module level logger and removed some
  error logs in :code:`except` blocks used for a flow control.
* In :code:`examples/` folder renamed consistently all the examples.
* In API documentation: fix incorrect links mapping on inheritance diagrams.

0.6.1 (2021-05-08)
------------------

* In :code:`dev.tiepie`:
      * dynamically set oscilloscope's channel limits in
        :code:`OscilloscopeChannelParameterLimits`: :code:`input_range` and
        :code:`trigger_level_abs`, incl. update of latter on each change of
        :code:`input_range` value of a :code:`TiePieOscilloscopeChannelConfig`
        instances;
      * quick fix for opening of combined instruments by disabling
        :code:`OscilloscopeParameterLimits.trigger_delay` (an advanced feature);
      * enable automatic devices detection to be able to find network devices with
        :code:`TiePieOscilloscope.list_devices()`.
* Fix :code:`examples/example_labjack.py`.
* Improved logging: consistently use module level loggers, and always log exception
  tracebacks.
* Improve API documentation: separate pages per modules, each with an inheritance
  diagram as an overview.

0.6.0 (2021-04-23)
------------------

* Technix capacitor charger using either serial connection or Telnet protocol.
* Extensions, improvements and fixes in existing devices:
   * In :code:`dev.tiepie.TiePieOscilloscope`:
       * redesigned measurement start and data collection API, incl. time out
         argument, with no/infinite time out option;
       * trigger allows now a no/infinite time out;
       * record length and trigger level were fixed to accept, respectively, floating
         point and integer numbers;
       * fixed resolution validation bug;
   * :code:`dev.heinzinger.HeinzingerDI` and `dev.rs_rto1024.RTO1024` instances are now
     resilient to multiple :code:`stop()` calls.
   * In :code:`dev.crylas.CryLasLaser`: default configuration timeout and
     polling period were adjusted;
   * Fixed PSI9080 example script.
* Package and source code improvements:
   * Update to backward-incompatible :code:`pyvisa-py>=0.5.2`. Developers, do update
     your local development environments!
   * External libraries, like LibTiePie SDK or LJM Library, are now not installed by
     default; they are now extra installation options.
   * Added Python 3.9 support.
   * Improved number formatting in logs.
   * Typing improvements and fixes for :code:`mypy>=0.800`.

0.5.0 (2020-11-11)
------------------

* TiePie USB oscilloscope, generator and I2C host devices, as a wrapper of the Python
  bindings for the LibTiePie SDK.
* a FuG Elektronik Power Supply (e.g. Capacitor Charger HCK) using the built-in ADDAT
  controller with the Probus V protocol over a serial connection
* All devices poling status or measurements use now a :code:`dev.utils.Poller` utility
  class.
* Extensions and improvements in existing devices:
    * In :code:`dev.rs_rto1024.RTO1024`: added Channel state, scale, range,
      position and offset accessors, and measurements activation and read methods.
    * In :code:`dev.sst_luminox.Luminox`: added querying for all measurements
      in polling mode, and made output mode activation more robust.
    * In :code:`dev.newport.NewportSMC100PP`: an error-prone
      :code:`wait_until_move_finished` method of replaced by a fixed waiting time,
      device operations are now robust to a power supply cut, and device restart is not
      required to apply a start configuration.
* Other minor improvements:
    * Single failure-safe starting and stopping of devices sequenced via
      :code:`dev.base.DeviceSequenceMixin`.
    * Moved :code:`read_text_nonempty` up to :code:`comm.serial.SerialCommunication`.
    * Added development Dockerfile.
    * Updated package and development dependencies: :code:`pymodbus`,
      :code:`pytest-mock`.

0.4.0 (2020-07-16)
------------------

* Significantly improved new Supercube device controller:
    - more robust error-handling,
    - status polling with generic :code:`Poller` helper,
    - messages and status boards.
    - tested with a physical device,
* Improved OPC UA client wrapper, with better error handling, incl. re-tries on
  :code:`concurrent.futures.TimeoutError`.
* SST Luminox Oxygen sensor device controller.
* Backward-incompatible changes:
    - :code:`CommunicationProtocol.access_lock` has changed type from
      :code:`threading.Lock` to :code:`threading.RLock`.
    - :code:`ILS2T.relative_step` and :code:`ILS2T.absolute_position` are now called,
      respectively, :code:`ILS2T.write_relative_step` and
      :code:`ILS2T.write_absolute_position`.
* Minor bugfixes and improvements:
    - fix use of max resolution in :code:`Labjack.set_ain_resolution()`,
    - resolve ILS2T devices relative and absolute position setters race condition,
    - added acoustic horn function in the 2015 Supercube.
* Toolchain changes:
    - add Python 3.8 support,
    - drop pytest-runner support,
    - ensure compatibility with :code:`labjack_ljm` 2019 version library.

0.3.5 (2020-02-18)
------------------

* Fix issue with reading integers from LabJack LJM Library (device's product ID, serial
  number etc.)
* Fix development requirements specification (tox version).

0.3.4 (2019-12-20)
------------------

* New devices using serial connection:
    * Heinzinger Digital Interface I/II and a Heinzinger PNC power supply
    * Q-switched Pulsed Laser and a laser attenuator from CryLas
    * Newport SMC100PP single axis motion controller for 2-phase stepper motors
    * Pfeiffer TPG controller (TPG 25x, TPG 26x and TPG 36x) for Compact pressure Gauges
* PEP 561 compatibility and related corrections for static type checking (now in CI)
* Refactorings:
    * Protected non-thread safe read and write in communication protocols
    * Device sequence mixin: start/stop, add/rm and lookup
    * `.format()` to f-strings
    * more enumerations and a quite some improvements of existing code
* Improved error docstrings (:code:`:raises:` annotations) and extended tests for
  errors.

0.3.3 (2019-05-08)
------------------

* Use PyPI labjack-ljm (no external dependencies)


0.3.2 (2019-05-08)
------------------

* INSTALLATION.rst with LJMPython prerequisite info


0.3.1 (2019-05-02)
------------------

* readthedocs.org support

0.3 (2019-05-02)
----------------

* Prevent an automatic close of VISA connection when not used.
* Rhode & Schwarz RTO 1024 oscilloscope using VISA interface over TCP::INSTR.
* Extended tests incl. messages sent to devices.
* Added Supercube device using an OPC UA client
* Added Supercube 2015 device using an OPC UA client (for interfacing with old system
  version)

0.2.1 (2019-04-01)
------------------

* Fix issue with LJMPython not being installed automatically with setuptools.

0.2.0 (2019-03-31)
------------------

* LabJack LJM Library communication wrapper and LabJack device.
* Modbus TCP communication protocol.
* Schneider Electric ILS2T stepper motor drive device.
* Elektro-Automatik PSI9000 current source device and VISA communication wrapper.
* Separate configuration classes for communication protocols and devices.
* Simple experiment manager class.

0.1.0 (2019-02-06)
------------------

* Communication protocol base and serial communication implementation.
* Device base and MBW973 implementation.

============
Installation
============


Stable release
--------------

To install HVL Common Code Base, run this command in your terminal:

.. code-block:: console

    $ pip install hvl_ccb

To install HVL Common Code Base with optional Python libraries that require manual
installations of additional system libraries, you need to specify on installation
extra requirements corresponding to these controllers. For instance, to install
Python requirements for LabJack and TiePie devices, run:

.. code-block:: console

    $ pip install "hvl_ccb[tiepie,labjack]"

See below for the info about additional system libraries and the corresponding extra
requirements.

To install all extra requirements run:

.. code-block:: console

    $ pip install "hvl_ccb[all]"

This is the preferred method to install HVL Common Code Base, as it will always install
the most recent stable release.

If you don't have `pip`_ installed, this `Python installation guide`_ can guide
you through the process.

.. _pip: https://pip.pypa.io
.. _Python installation guide: http://docs.python-guide.org/en/latest/starting/installation/


From sources
------------

The sources for HVL Common Code Base can be downloaded from the `GitLab repo`_.

You can either clone the repository:

.. code-block:: console

    $ git clone git@gitlab.com:ethz_hvl/hvl_ccb.git

Or download the `tarball`_:

.. code-block:: console

    $ curl  -OL https://gitlab.com/ethz_hvl/hvl_ccb/-/archive/master/hvl_ccb.tar.gz

Once you have a copy of the source, you can install it with:

.. code-block:: console

    $ pip install .


.. _GitLab repo: https://gitlab.com/ethz_hvl/hvl_ccb
.. _tarball: https://gitlab.com/ethz_hvl/hvl_ccb/-/archive/master/hvl_ccb.tar.gz


Additional system libraries
---------------------------

If you have installed `hvl_ccb` with any of the extra features corresponding to
device controllers, you must additionally install respective system library; these are:

+-------------------------+------------------------------------------------------------+
| Extra feature           | Additional system library                                  |
+=========================+============================================================+
| :code:`labjack`         | `LJM Library`_                                             |
+-------------------------+------------------------------------------------------------+
| :code:`picotech`        | `PicoSDK`_ (Windows) / `libusbpt104`_ (Ubuntu/Debian)      |
+-------------------------+------------------------------------------------------------+

For more details on installation of the libraries see docstrings of the corresponding
:code:`hvl_ccb` modules.

.. _`libusbpt104`: https://labs.picotech.com/debian/pool/main/libu/libusbpt104/
.. _`LJM Library`: https://labjack.com/ljm
.. _`PicoSDK`: https://www.picotech.com/downloads

====================
HVL Common Code Base
====================

.. image:: https://img.shields.io/pypi/v/hvl_ccb?logo=PyPi
   :target: https://pypi.org/project/hvl_ccb/
   :alt: PyPI version

.. image:: https://img.shields.io/pypi/pyversions/hvl_ccb?logo=Python
   :target: https://pypi.org/project/hvl_ccb/
   :alt: Supported Python versions

.. image:: https://img.shields.io/gitlab/pipeline/ethz_hvl/hvl_ccb/master?logo=gitlab
    :target: https://gitlab.com/ethz_hvl/hvl_ccb/-/tree/master
    :alt: Pipeline status

.. image:: https://img.shields.io/gitlab/coverage/ethz_hvl/hvl_ccb/master?logo=gitlab
    :target: https://gitlab.com/ethz_hvl/hvl_ccb/commits/master
    :alt: Coverage report

.. image:: https://img.shields.io/readthedocs/hvl_ccb?logo=read-the-docs
    :target: https://hvl-ccb.readthedocs.io/en/stable/
    :alt: Documentation Status

.. image:: https://img.shields.io/gitlab/pipeline/ethz_hvl/hvl_ccb/devel?label=devel&logo=gitlab
    :target: https://gitlab.com/ethz_hvl/hvl_ccb/-/tree/devel
    :alt: Development pipeline status

.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
    :target: https://github.com/psf/black

.. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336
    :target: https://pycqa.github.io/isort/

Python common code base (CCB) to control devices, which are used in high-voltage
research. All implemented devices are used and tested in the High Voltage Laboratory
(`HVL`_) of the Federal Institute of Technology Zurich (ETH Zurich).

* Free software: GNU General Public License v3
* Copyright (c) 2019-2023 ETH Zurich, SIS ID and HVL D-ITET

.. _`HVL`: https://hvl.ee.ethz.ch/

Features
--------

For managing multi-device experiments instantiate the :code:`ExperimentManager`
utility class.

Devices
~~~~~~~

The device wrappers in :code:`hvl_ccb` provide a standardised API with configuration
dataclasses, various settings and options, as well as start/stop methods.
Currently wrappers are available to control the following devices:

+-------------------------+------------------------------------------------------------+
| Function/Type           | Devices                                                    |
+=========================+============================================================+
| Bench Multimeter        | | Fluke 8845A and 8846A                                    |
|                         | | 6.5 Digit Precision Multimeter                           |
+-------------------------+------------------------------------------------------------+
| Data acquisition        | | LabJack (T4, T7, T7-PRO; requires `LJM Library`_)        |
|                         | | Pico Technology PT-104 Platinum Resistance Data Logger   |
|                         |   (requires `PicoSDK`_/`libusbpt104`_)                     |
+-------------------------+------------------------------------------------------------+
| Digital Delay Generator | | Highland T560                                            |
+-------------------------+------------------------------------------------------------+
| Digital IO              | | LabJack (T4, T7, T7-PRO; requires `LJM Library`_)        |
+-------------------------+------------------------------------------------------------+
| Experiment control      | | HVL Cube with and without Power Inverter                 |
+-------------------------+------------------------------------------------------------+
| Gas Analyser            | | MBW 973-SF6 gas dew point mirror analyzer                |
|                         | | Pfeiffer Vacuum TPG (25x, 26x and 36x) controller for    |
|                         |   compact pressure gauges                                  |
|                         | | SST Luminox oxygen sensor                                |
+-------------------------+------------------------------------------------------------+
| Laser                   | | CryLaS pulsed laser                                      |
|                         | | CryLaS laser attenuator                                  |
+-------------------------+------------------------------------------------------------+
| Oscilloscope            | | Rhode & Schwarz RTO 1024                                 |
|                         | | TiePie (HS5, HS6, WS5)                                   |
+-------------------------+------------------------------------------------------------+
| Power supply            | | Elektro-Automatik PSI9000                                |
|                         | | FuG Elektronik                                           |
|                         | | Heinzinger PNC                                           |
|                         | | Technix capacitor charger                                |
+-------------------------+------------------------------------------------------------+
| Stepper motor drive     | | Newport SMC100PP                                         |
|                         | | Schneider Electric ILS2T                                 |
+-------------------------+------------------------------------------------------------+
| Temperature control     | | Lauda PRO RP 245 E circulation thermostat                |
+-------------------------+------------------------------------------------------------+
| Waveform generator      | | TiePie (HS5, WS5)                                        |
+-------------------------+------------------------------------------------------------+

Each device uses at least one standardised communication protocol wrapper.

Communication protocols
~~~~~~~~~~~~~~~~~~~~~~~

In :code:`hvl_ccb` by "communication protocol" we mean different levels of
communication standards, from the low level actual communication protocols like
serial communication to application level interfaces like VISA TCP standard. There
are also devices in :code:`hvl_ccb` that use a dummy communication protocol;
this is because these devices are build on proprietary manufacturer libraries that
communicate with the corresponding devices, as in the case of TiePie or LabJack devices.

The communication protocol wrappers in :code:`hvl_ccb` provide a standardised API with
configuration dataclasses, as well as open/close and read/write/query methods.
Currently, wrappers for the following communication protocols are available:

+------------------------+-------------------------------------------------------------+
| Communication protocol | Devices using                                               |
+========================+=============================================================+
| Modbus TCP             | | Schneider Electric ILS2T stepper motor drive              |
+------------------------+-------------------------------------------------------------+
| OPC UA                 | | HVL Cube with and without Power Inverter                  |
+------------------------+-------------------------------------------------------------+
| Serial                 | | CryLaS pulsed laser and laser attenuator                  |
|                        | | FuG Elektronik power supply (e.g. capacitor charger HCK)  |
|                        |   using the Probus V protocol                               |
|                        | | Heinzinger PNC power supply                               |
|                        |   using Heinzinger Digital Interface I/II                   |
|                        | | SST Luminox oxygen sensor                                 |
|                        | | MBW 973-SF6 gas dew point mirror analyzer                 |
|                        | | Newport SMC100PP single axis driver for 2-phase stepper   |
|                        |   motors                                                    |
|                        | | Pfeiffer Vacuum TPG (25x, 26x and 36x) controller for     |
|                        |   compact pressure gauges                                   |
|                        | | Technix capacitor charger                                 |
+------------------------+-------------------------------------------------------------+
| TCP                    | | Lauda PRO RP 245 E circulation thermostat                 |
+------------------------+-------------------------------------------------------------+
| Telnet                 | | Technix capacitor charger                                 |
|                        | | Fluke 8845A and 8846                                      |
+------------------------+-------------------------------------------------------------+
| VISA TCP               | | Elektro-Automatik PSI9000 DC power supply                 |
|                        | | Rhode & Schwarz RTO 1024 oscilloscope                     |
+------------------------+-------------------------------------------------------------+
| *propriety*            | | LabJack (T4, T7, T7-PRO) devices, which communicate via   |
|                        |   `LJM Library`_                                            |
|                        | | Pico Technology PT-104 Platinum Resistance Data Logger,   |
|                        |   which communicate via `PicoSDK`_/`libusbpt104`_           |
|                        | | TiePie (HS5, HS6, WS5) oscilloscopes and generators,      |
|                        |   which communicate via `LibTiePie SDK`_                    |
+------------------------+-------------------------------------------------------------+

.. _`LibTiePie SDK`: https://www.tiepie.com/en/libtiepie-sdk
.. _`libusbpt104`: https://labs.picotech.com/debian/pool/main/libu/libusbpt104/
.. _`LJM Library`: https://labjack.com/ljm
.. _`PicoSDK`: https://www.picotech.com/downloads

Sensor and Unit Conversion Utility
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The Conversion Utility is a submodule that allows on the one hand a
unified implementation of hardware-sensors and on the other hand provides a unified
way to convert units. Furthermore it is possible to map two ranges on to each other.
This can be useful to convert between for example and 4 - 20 mA and 0 - 10 V, both
of them are common as sensor out- or input. Moreover, a subclass allows the mapping
of a bit-range to any other range. For example a 12 bit number (0-4095) to 0 - 10.
All utilities can be used with single numbers (:code:`int`,
:code:`float`) as well as array-like structures containing single numbers
(:code:`np.array()`, :code:`list`, :code:`dict`, :code:`tuple`).

Currently the following sensors are implemented:

- LEM LT 4000S
- LMT 70A

The following unit conversion classes are implemented:

- Temperature (Kelvin, Celsius, Fahrenheit)
- Pressure (Pascal, Bar, Atmosphere, Psi, Torr, Millimeter Mercury)


Documentation
-------------

Note: if you're planning to contribute to the :code:`hvl_ccb` project read
the **Contributing** section in the HVL CCB documentation.

Do either:

* read `HVL CCB documentation at RTD`_,

or

* build and read HVL CCB documentation locally; install first `Graphviz`_ (make sure
  to have the :code:`dot` command in the executable search path) and the Python
  build requirements for documentation::

    $ pip install docs/requirements.txt

  and then either on Windows in Git BASH run::

    $ ./make.sh docs

  or from any other shell with GNU Make installed run::

    $ make docs

  The target index HTML (:code:`"docs/_build/html/index.html"`) should open
  automatically in your Web browser.

.. _`Graphviz`: https://graphviz.org/
.. _`HVL CCB documentation at RTD`: https://readthedocs.org/projects/hvl-ccb/

Credits
-------

This package was created with Cookiecutter_ and the
`audreyr/cookiecutter-pypackage`_ project template.

.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "hvl-ccb",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "<3.11,>=3.9",
    "maintainer_email": "Chi-Ching Hsu <contact-project+ethz-hvl-hvl-ccb-15975897-issue-@incoming.gitlab.com>, Henning Janssen <contact-project+ethz-hvl-hvl-ccb-15975897-issue-@incoming.gitlab.com>",
    "keywords": "hvl_ccb",
    "author": "Miko\u0142aj Rybi\u0144ski, David Graber, Henrik Menne, Alise Chachereau, Henning Janssen, David Taylor, Joseph Engelbrecht, Chi-Ching Hsu",
    "author_email": "",
    "download_url": "https://files.pythonhosted.org/packages/09/2f/ce25f9f502a9e8686337a08cf71846bda389d57aaf0a063fc2a6ba6aba59/hvl_ccb-0.14.4.tar.gz",
    "platform": null,
    "description": "=======\nHistory\n=======\n0.14.4 (2023-12-22)\n-------------------\n\n* Hot-fix to be compatible with the newly released version :code:`23.12.0` of :code:`black`\n* Switch to src-layout\n* In :code:`tiepie`:\n    * implementation property :code:`generator_is_running` to check, whether the generator is running\n    * properties :code:`probe_offset` and :code:`probe_gain` are not implemented and raise NotImplementedError\n\n\n0.14.3 (2023-11-17)\n-------------------\n\n* Fix Heinzinger conversion from mA to A and fix wrong docstrings\n* Hot-fix to be compatible with the newly released version :code:`23.11.0` of :code:`black`\n* Fix :code:`bumpver` tag messages\n* Implementation of Technix to fulfil :code:`protocols.Source`\n\n\n0.14.2 (2023-09-07)\n-------------------\n\n* Change dependency to :code:`libtiepie` with linux binaries using forked version :code:`python-libtiepie-bi`\n* Adapt :code:`makefile` after removing :code:`setup.py`\n* Fix commit messages and tag with :code:`bumpver`\n* Hot-fix to be compatible with the newly released version :code:`3.5.0` of :code:`pymodbus`\n\n\n0.14.1 (2023-08-21)\n-------------------\n\n* Remove :code:`setup.cfg`, :code:`setup.py`, :code:`mypy.ini`, :code:`pytest.ini`, :code:`requirements_dev.txt` and change to :code:`pyproject.toml`\n* Replace :code:`bump2version` with :code:`bumpver`\n* Change dependency to :code:`libtiepie` with linux binaries\n* Hot-fix to be compatible with the newly released version :code:`6.1.0` of :code:`flake8`\n\n\n0.14.0 (2023-07-28)\n-------------------\n\n* Rework of Heinzinger high voltage source control\n    * validation of input values (e.g. :code:`voltage`-property)\n    * merge :code:`HeinzingerPNC` and :code:`HeinzingerDI` to :code:`Heinzinger`\n    * always return values as V for voltage and A for current\n    * RangeEnum for :code:`number_of_recordings`\n    * fulfil :code:`protocols.Source`\n    * raise Error for getter and setter (e.g. set_current, get_current ...), use property instead\n* Hot-fix to be compatible with the newly released version :code:`23.7.0` of :code:`black`\n* Hot-fix to be compatible with the newly released version :code:`3.4.0` of :code:`pymodbus`\n* Hot-fix to be compatible with the newly released version :code:`1.1.6` of :code:`libtiepie`\n    * drop support for I2C\n* Remove default import from :code:`hvl_ccb.comm` and :code:`hvl_ccb.dev` for specific communication protocols and devices\n\n\n0.13.3 (2023-03-31)\n-------------------\n\n* Introduce common protocol for voltage and current sources :code:`hvl_ccb.dev.protocols.sources`\n* Update code style to :code:`black` 23.3.0 and :code:`isort` 5.12.0\n* An :code:`_EarthingStick` of :code:`BaseCube` is implemented as a :code:`_Switch`\n* Code improvements for device :code:`Heinzinger`\n    * use property-based instead of getter and setter\n    * DeprecationWarning for getter and setter (e.g. set_current, get_current ...)\n\n\n0.13.2 (2023-03-17)\n-------------------\n\n* Hot-fix to be compatible with the newly released version :code:`3.0.0` of :code:`typeguard`\n\n0.13.1 (2023-03-03)\n-------------------\n\n* Repository maintenance\n    * add the option to manually set :code:`n_attempts_max` and :code:`attempt_interval_sec` in :code:`query` of the :code:`SyncCommunicationProtocol`\n    * fix links in description for :code:`Heinzinger` digital interface and universal high voltage power supplies\n    * keep copyright year information only in :code:`docs/conf.py` and :code:`README.rst`\n    * remove copyright year information from the files\n    * fix readthedocs build failed issue\n    * update code style to :code:`black` 23.1.0\n\n0.13.0 (2023-01-27)\n-------------------\n\n* Drop support for Python 3.7 and 3.8:\n    * remove version dependent implementations\n    * changed typing acc. to PEP 585\n* Un-freeze version number of dependencies and upgrade to most recent versions\n\n0.12.3 (2022-12-27)\n-------------------\n\n* Code improvements for device :code:`cube`:\n    * split :code:`alarms` from :code:`constants`\n    * split :code:`errors` from :code:`constants`\n    * split :code:`earthing_stick` from :code:`constants`\n    * split :code:`support` from :code:`constants`\n* Update code style to :code:`black` 22.12.0\n* Smaller change of device :code:`tiepie`:\n    * change hard coded trigger time out value for no time out/infinite (-1) to :code:`ltp.const.TO_INFINITY`\n\n0.12.2 (2022-11-29)\n-------------------\n\n* Move the device modules into packages\n* Bugfix in :code:`validate_number` to check the order of the limits\n* Repository maintenance:\n    * imports are sorted with :code:`isort`\n    * some :code:`mypy` fixing and additional typing\n\n0.12.1 (2022-10-31)\n-------------------\n\n* Fix :code:`numpy` version requirement problem\n    * for Python 3.7: 1.21.6\n    * for Python 3.8 and onwards: 1.23.4\n\n0.12.0 (2022-10-17)\n-------------------\n\n* Last release for Python 3.7 and 3.8\n* Repository maintenance\n    * update Labjack LJM software installer link in the pipeline\n    * fix dependencies to the fixed version\n    * fix :code:`asyncua` to 0.9.95 and :code:`pymodbus` to 2.5.3 (newer versions break the code)\n    * fix PICube checker for slope as it is always positive\n\n0.11.1 (2022-09-15)\n-------------------\n\n* Repository maintenance\n    * fix issue with :code:`mypy` and Python 3.10.7\n    * update code style to :code:`black` 22.8.0\n    * project configurations merged into :code:`setup.cfg`\n    * fix coverage indicator\n\n0.11.0 (2022-06-22)\n-------------------\n\n* New device: Fluke 884X Bench 6.5 Digit Precision Multimeter\n* :code:`RangeEnum` is a new enum for e.g. measurement ranges which also finds a suitable range object\n* smaller changes of device :code:`tiepie`:\n    * introduce status method :code:`is_measurement_running()` to check if the device is armed\n    * introduce :code:`stop_measurement()` to disarm the trigger of the device\n    * fix bug with docs due to change of :code:`libtiepie`\n* :code:`NameEnum` and inherited enums can only have unique entries\n\n0.10.3 (2022-03-21)\n-------------------\n\n* fix bug in the Labjack pulse feature that occurred when the start time was set to 0s\n* new conversion utility to map two ranges on each other\n* update CONTRIBUTING.RST\n* update makefile and make.sh\n* improve the mockup telnet test server\n\n0.10.2 (2022-02-28)\n-------------------\n\n* introduction of :code:`black` as code formatter\n* increase the required version of the package :code:`aenum`\n* remove device :code:`supercube2015` - as it is no longer used\n* remove unused package :code:`openpyxl` requirement\n* fix bug in highland logging\n* improve handling for communication error with picotech\n\n0.10.1 (2022-01-24)\n-------------------\n\n* several improvements and fixes for device :code:`cube`:\n    * privatize :code:`Alarms` and :code:`AlarmsOverview`\n    * fix list of cube alarms\n    * improve docs\n    * fix bugs with earthing sticks\n    * fix bug in config dataclass of cube\n* introduction of BoolEnum\n* introduction of RangeEnum\n* bumpversion -> bump2version\n\n0.10.0 (2022-01-17)\n-------------------\n\n* Reimplementation of the Cube (before known as Supercube)\n* new names:\n    * Supercube Typ B -> BaseCube\n    * Supercube Typ A -> PICube (power inverter Cube)\n* new import:\n    * :code:`from hvl_ccb.dev.supercube import SupercubeB` ->\n      :code:`from hvl_ccb.dev.cube import BaseCube`\n* new programming style:\n    * getter / setter methods -> properties\n    * e.g. get: :code:`cube.get_support_output(port=1, contact=1)` ->\n      :code:`cube.support_1.output_1`\n    * e.g. set: :code:`cube.get_support_output(port=1, contact=1,\n      state=True)` -> :code:`cube.support_1.output_1 = True`\n* unify Exceptions of Cube\n* implement Fast Switch-Off of Cube\n* remove method :code:`support_output_impulse`\n* all active alarms can now be queried :code:`cube.active_alarms()`\n* alarms will now result in different logging levels depending on the\n  seriousness of the alarm.\n* introduction of limits for slope and safety limit for RedReady\n* during the startup the CCB will update the time of the cube.\n* verification of inputs\n* polarity of DC voltage\n* Switch from :code:`python-opcua` to :code:`opcua-asyncio`\n  (former package is no longer maintained)\n\n0.9.0 (2022-01-07)\n------------------\n\n* New device: Highland T560 digital delay and pulse generator over Telnet.\n* Rework of the Technix Capacitor Charger.\n    * Moved into a separate sub-package\n    * NEW import over :code:`import hvl_ccb.dev.technix as XXX`\n    * Slightly adapted behaviour\n* Add :code:`validate_tcp_port` to validate port number.\n* Add :code:`validate_and_resolve_host` to validate and resolve host names and IPs.\n    * Remove requirement :code:`IPy`\n* Add a unified CCB Exception schema for all devices and communication protocols.\n* Add data conversion functions to README.\n* Update CI and devel images from Debian 10 buster to Debian 11 bullseye.\n* Fix typing due to numpy update.\n* Fix incorrect overloading of :code:`clean_values()` in classes of\n  type :code:`XCommunicationConfig`.\n\n0.8.5 (2021-11-05)\n------------------\n\n* Added arbitrary waveform for TiePie signal generation, configurable via\n  :code:`dev.tiepie.generator.TiePieGeneratorConfig.waveform` property.\n* In :code:`utils.conversion_sensor`: improvements for class constants; removed SciPy\n  dependency.\n* Added Python 3.10 support.\n\n0.8.4 (2021-10-22)\n------------------\n\n* :code:`utils.validation.validate_number` extension to handle NumPy arrays and\n  array-like objects.\n* :code:`utils.conversion_unit` utility classes handle correctly :code:`NamedTuple`\n  instances.\n* :code:`utils.conversion_sensor` and :code:`utils.conversion_unit` code\n  simplification (no :code:`transfer_function_order` attribute) and cleanups.\n* Fixed incorrect error logging in :code:`configuration.configdataclass`.\n* :code:`comm.telnet.TelnetCommunication` tests fixes for local run errors.\n\n0.8.3 (2021-09-27)\n------------------\n\n* New data conversion functions in :code:`utils.conversion_sensor` and\n  :code:`utils.conversion_unit` modules. Note: to use these functions you must install\n  :code:`hvl_ccb` with extra requirement, either :code:`hvl_ccb[conversion]` or\n  :code:`hvl_ccb[all]`.\n* Improved documentation with respect to installation of external libraries.\n\n0.8.2 (2021-08-27)\n------------------\n\n* New functionality in :code:`dev.labjack.LabJack`:\n    * configure clock and send timed pulse sequences\n    * set DAC/analog output voltage\n* Bugfix: ignore random bits sent by to :code:`dev.newport.NewportSMC100PP`\n  controller during start-up/powering-up.\n\n0.8.1 (2021-08-13)\n------------------\n\n* Add Python version check (min version error; max version warning).\n* Daily checks for upstream dependencies compatibility and devel environment\n  improvements.\n\n0.8.0 (2021-07-02)\n------------------\n\n* TCP communication protocol.\n* Lauda PRO RP 245 E circulation thermostat device over TCP.\n* Pico Technology PT-104 Platinum Resistance Data Logger device as a wrapper of the\n  Python bindings for the PicoSDK.\n* In :code:`com.visa.VisaCommunication`: periodic status polling when VISA/TCP keep\n  alive connection is not supported by a host.\n\n0.7.1 (2021-06-04)\n------------------\n\n* New :code:`utils.validation` submodule with :code:`validate_bool` and\n  :code:`validate_number` utilities extracted from internal use within a\n  :code:`dev.tiepie` subpackage.\n* In :code:`comm.serial.SerialCommunication`:\n     * strict encoding errors handling strategy for subclasses,\n     * user warning for a low communication timeout value.\n\n0.7.0 (2021-05-25)\n------------------\n\n* The :code:`dev.tiepie` module was splitted into a subpackage with, in particular,\n  submodules for each of the device types -- :code:`oscilloscope`, :code:`generator`,\n  and :code:`i2c` -- and with backward-incompatible direct imports from the submodules.\n* In :code:`dev.technix`:\n      * fixed communication crash on nested status byte query;\n      * added enums for GET and SET register commands.\n* Further minor logging improvements: added missing module level logger and removed some\n  error logs in :code:`except` blocks used for a flow control.\n* In :code:`examples/` folder renamed consistently all the examples.\n* In API documentation: fix incorrect links mapping on inheritance diagrams.\n\n0.6.1 (2021-05-08)\n------------------\n\n* In :code:`dev.tiepie`:\n      * dynamically set oscilloscope's channel limits in\n        :code:`OscilloscopeChannelParameterLimits`: :code:`input_range` and\n        :code:`trigger_level_abs`, incl. update of latter on each change of\n        :code:`input_range` value of a :code:`TiePieOscilloscopeChannelConfig`\n        instances;\n      * quick fix for opening of combined instruments by disabling\n        :code:`OscilloscopeParameterLimits.trigger_delay` (an advanced feature);\n      * enable automatic devices detection to be able to find network devices with\n        :code:`TiePieOscilloscope.list_devices()`.\n* Fix :code:`examples/example_labjack.py`.\n* Improved logging: consistently use module level loggers, and always log exception\n  tracebacks.\n* Improve API documentation: separate pages per modules, each with an inheritance\n  diagram as an overview.\n\n0.6.0 (2021-04-23)\n------------------\n\n* Technix capacitor charger using either serial connection or Telnet protocol.\n* Extensions, improvements and fixes in existing devices:\n   * In :code:`dev.tiepie.TiePieOscilloscope`:\n       * redesigned measurement start and data collection API, incl. time out\n         argument, with no/infinite time out option;\n       * trigger allows now a no/infinite time out;\n       * record length and trigger level were fixed to accept, respectively, floating\n         point and integer numbers;\n       * fixed resolution validation bug;\n   * :code:`dev.heinzinger.HeinzingerDI` and `dev.rs_rto1024.RTO1024` instances are now\n     resilient to multiple :code:`stop()` calls.\n   * In :code:`dev.crylas.CryLasLaser`: default configuration timeout and\n     polling period were adjusted;\n   * Fixed PSI9080 example script.\n* Package and source code improvements:\n   * Update to backward-incompatible :code:`pyvisa-py>=0.5.2`. Developers, do update\n     your local development environments!\n   * External libraries, like LibTiePie SDK or LJM Library, are now not installed by\n     default; they are now extra installation options.\n   * Added Python 3.9 support.\n   * Improved number formatting in logs.\n   * Typing improvements and fixes for :code:`mypy>=0.800`.\n\n0.5.0 (2020-11-11)\n------------------\n\n* TiePie USB oscilloscope, generator and I2C host devices, as a wrapper of the Python\n  bindings for the LibTiePie SDK.\n* a FuG Elektronik Power Supply (e.g. Capacitor Charger HCK) using the built-in ADDAT\n  controller with the Probus V protocol over a serial connection\n* All devices poling status or measurements use now a :code:`dev.utils.Poller` utility\n  class.\n* Extensions and improvements in existing devices:\n    * In :code:`dev.rs_rto1024.RTO1024`: added Channel state, scale, range,\n      position and offset accessors, and measurements activation and read methods.\n    * In :code:`dev.sst_luminox.Luminox`: added querying for all measurements\n      in polling mode, and made output mode activation more robust.\n    * In :code:`dev.newport.NewportSMC100PP`: an error-prone\n      :code:`wait_until_move_finished` method of replaced by a fixed waiting time,\n      device operations are now robust to a power supply cut, and device restart is not\n      required to apply a start configuration.\n* Other minor improvements:\n    * Single failure-safe starting and stopping of devices sequenced via\n      :code:`dev.base.DeviceSequenceMixin`.\n    * Moved :code:`read_text_nonempty` up to :code:`comm.serial.SerialCommunication`.\n    * Added development Dockerfile.\n    * Updated package and development dependencies: :code:`pymodbus`,\n      :code:`pytest-mock`.\n\n0.4.0 (2020-07-16)\n------------------\n\n* Significantly improved new Supercube device controller:\n    - more robust error-handling,\n    - status polling with generic :code:`Poller` helper,\n    - messages and status boards.\n    - tested with a physical device,\n* Improved OPC UA client wrapper, with better error handling, incl. re-tries on\n  :code:`concurrent.futures.TimeoutError`.\n* SST Luminox Oxygen sensor device controller.\n* Backward-incompatible changes:\n    - :code:`CommunicationProtocol.access_lock` has changed type from\n      :code:`threading.Lock` to :code:`threading.RLock`.\n    - :code:`ILS2T.relative_step` and :code:`ILS2T.absolute_position` are now called,\n      respectively, :code:`ILS2T.write_relative_step` and\n      :code:`ILS2T.write_absolute_position`.\n* Minor bugfixes and improvements:\n    - fix use of max resolution in :code:`Labjack.set_ain_resolution()`,\n    - resolve ILS2T devices relative and absolute position setters race condition,\n    - added acoustic horn function in the 2015 Supercube.\n* Toolchain changes:\n    - add Python 3.8 support,\n    - drop pytest-runner support,\n    - ensure compatibility with :code:`labjack_ljm` 2019 version library.\n\n0.3.5 (2020-02-18)\n------------------\n\n* Fix issue with reading integers from LabJack LJM Library (device's product ID, serial\n  number etc.)\n* Fix development requirements specification (tox version).\n\n0.3.4 (2019-12-20)\n------------------\n\n* New devices using serial connection:\n    * Heinzinger Digital Interface I/II and a Heinzinger PNC power supply\n    * Q-switched Pulsed Laser and a laser attenuator from CryLas\n    * Newport SMC100PP single axis motion controller for 2-phase stepper motors\n    * Pfeiffer TPG controller (TPG 25x, TPG 26x and TPG 36x) for Compact pressure Gauges\n* PEP 561 compatibility and related corrections for static type checking (now in CI)\n* Refactorings:\n    * Protected non-thread safe read and write in communication protocols\n    * Device sequence mixin: start/stop, add/rm and lookup\n    * `.format()` to f-strings\n    * more enumerations and a quite some improvements of existing code\n* Improved error docstrings (:code:`:raises:` annotations) and extended tests for\n  errors.\n\n0.3.3 (2019-05-08)\n------------------\n\n* Use PyPI labjack-ljm (no external dependencies)\n\n\n0.3.2 (2019-05-08)\n------------------\n\n* INSTALLATION.rst with LJMPython prerequisite info\n\n\n0.3.1 (2019-05-02)\n------------------\n\n* readthedocs.org support\n\n0.3 (2019-05-02)\n----------------\n\n* Prevent an automatic close of VISA connection when not used.\n* Rhode & Schwarz RTO 1024 oscilloscope using VISA interface over TCP::INSTR.\n* Extended tests incl. messages sent to devices.\n* Added Supercube device using an OPC UA client\n* Added Supercube 2015 device using an OPC UA client (for interfacing with old system\n  version)\n\n0.2.1 (2019-04-01)\n------------------\n\n* Fix issue with LJMPython not being installed automatically with setuptools.\n\n0.2.0 (2019-03-31)\n------------------\n\n* LabJack LJM Library communication wrapper and LabJack device.\n* Modbus TCP communication protocol.\n* Schneider Electric ILS2T stepper motor drive device.\n* Elektro-Automatik PSI9000 current source device and VISA communication wrapper.\n* Separate configuration classes for communication protocols and devices.\n* Simple experiment manager class.\n\n0.1.0 (2019-02-06)\n------------------\n\n* Communication protocol base and serial communication implementation.\n* Device base and MBW973 implementation.\n\n============\nInstallation\n============\n\n\nStable release\n--------------\n\nTo install HVL Common Code Base, run this command in your terminal:\n\n.. code-block:: console\n\n    $ pip install hvl_ccb\n\nTo install HVL Common Code Base with optional Python libraries that require manual\ninstallations of additional system libraries, you need to specify on installation\nextra requirements corresponding to these controllers. For instance, to install\nPython requirements for LabJack and TiePie devices, run:\n\n.. code-block:: console\n\n    $ pip install \"hvl_ccb[tiepie,labjack]\"\n\nSee below for the info about additional system libraries and the corresponding extra\nrequirements.\n\nTo install all extra requirements run:\n\n.. code-block:: console\n\n    $ pip install \"hvl_ccb[all]\"\n\nThis is the preferred method to install HVL Common Code Base, as it will always install\nthe most recent stable release.\n\nIf you don't have `pip`_ installed, this `Python installation guide`_ can guide\nyou through the process.\n\n.. _pip: https://pip.pypa.io\n.. _Python installation guide: http://docs.python-guide.org/en/latest/starting/installation/\n\n\nFrom sources\n------------\n\nThe sources for HVL Common Code Base can be downloaded from the `GitLab repo`_.\n\nYou can either clone the repository:\n\n.. code-block:: console\n\n    $ git clone git@gitlab.com:ethz_hvl/hvl_ccb.git\n\nOr download the `tarball`_:\n\n.. code-block:: console\n\n    $ curl  -OL https://gitlab.com/ethz_hvl/hvl_ccb/-/archive/master/hvl_ccb.tar.gz\n\nOnce you have a copy of the source, you can install it with:\n\n.. code-block:: console\n\n    $ pip install .\n\n\n.. _GitLab repo: https://gitlab.com/ethz_hvl/hvl_ccb\n.. _tarball: https://gitlab.com/ethz_hvl/hvl_ccb/-/archive/master/hvl_ccb.tar.gz\n\n\nAdditional system libraries\n---------------------------\n\nIf you have installed `hvl_ccb` with any of the extra features corresponding to\ndevice controllers, you must additionally install respective system library; these are:\n\n+-------------------------+------------------------------------------------------------+\n| Extra feature           | Additional system library                                  |\n+=========================+============================================================+\n| :code:`labjack`         | `LJM Library`_                                             |\n+-------------------------+------------------------------------------------------------+\n| :code:`picotech`        | `PicoSDK`_ (Windows) / `libusbpt104`_ (Ubuntu/Debian)      |\n+-------------------------+------------------------------------------------------------+\n\nFor more details on installation of the libraries see docstrings of the corresponding\n:code:`hvl_ccb` modules.\n\n.. _`libusbpt104`: https://labs.picotech.com/debian/pool/main/libu/libusbpt104/\n.. _`LJM Library`: https://labjack.com/ljm\n.. _`PicoSDK`: https://www.picotech.com/downloads\n\n====================\nHVL Common Code Base\n====================\n\n.. image:: https://img.shields.io/pypi/v/hvl_ccb?logo=PyPi\n   :target: https://pypi.org/project/hvl_ccb/\n   :alt: PyPI version\n\n.. image:: https://img.shields.io/pypi/pyversions/hvl_ccb?logo=Python\n   :target: https://pypi.org/project/hvl_ccb/\n   :alt: Supported Python versions\n\n.. image:: https://img.shields.io/gitlab/pipeline/ethz_hvl/hvl_ccb/master?logo=gitlab\n    :target: https://gitlab.com/ethz_hvl/hvl_ccb/-/tree/master\n    :alt: Pipeline status\n\n.. image:: https://img.shields.io/gitlab/coverage/ethz_hvl/hvl_ccb/master?logo=gitlab\n    :target: https://gitlab.com/ethz_hvl/hvl_ccb/commits/master\n    :alt: Coverage report\n\n.. image:: https://img.shields.io/readthedocs/hvl_ccb?logo=read-the-docs\n    :target: https://hvl-ccb.readthedocs.io/en/stable/\n    :alt: Documentation Status\n\n.. image:: https://img.shields.io/gitlab/pipeline/ethz_hvl/hvl_ccb/devel?label=devel&logo=gitlab\n    :target: https://gitlab.com/ethz_hvl/hvl_ccb/-/tree/devel\n    :alt: Development pipeline status\n\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg\n    :target: https://github.com/psf/black\n\n.. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336\n    :target: https://pycqa.github.io/isort/\n\nPython common code base (CCB) to control devices, which are used in high-voltage\nresearch. All implemented devices are used and tested in the High Voltage Laboratory\n(`HVL`_) of the Federal Institute of Technology Zurich (ETH Zurich).\n\n* Free software: GNU General Public License v3\n* Copyright (c) 2019-2023 ETH Zurich, SIS ID and HVL D-ITET\n\n.. _`HVL`: https://hvl.ee.ethz.ch/\n\nFeatures\n--------\n\nFor managing multi-device experiments instantiate the :code:`ExperimentManager`\nutility class.\n\nDevices\n~~~~~~~\n\nThe device wrappers in :code:`hvl_ccb` provide a standardised API with configuration\ndataclasses, various settings and options, as well as start/stop methods.\nCurrently wrappers are available to control the following devices:\n\n+-------------------------+------------------------------------------------------------+\n| Function/Type           | Devices                                                    |\n+=========================+============================================================+\n| Bench Multimeter        | | Fluke 8845A and 8846A                                    |\n|                         | | 6.5 Digit Precision Multimeter                           |\n+-------------------------+------------------------------------------------------------+\n| Data acquisition        | | LabJack (T4, T7, T7-PRO; requires `LJM Library`_)        |\n|                         | | Pico Technology PT-104 Platinum Resistance Data Logger   |\n|                         |   (requires `PicoSDK`_/`libusbpt104`_)                     |\n+-------------------------+------------------------------------------------------------+\n| Digital Delay Generator | | Highland T560                                            |\n+-------------------------+------------------------------------------------------------+\n| Digital IO              | | LabJack (T4, T7, T7-PRO; requires `LJM Library`_)        |\n+-------------------------+------------------------------------------------------------+\n| Experiment control      | | HVL Cube with and without Power Inverter                 |\n+-------------------------+------------------------------------------------------------+\n| Gas Analyser            | | MBW 973-SF6 gas dew point mirror analyzer                |\n|                         | | Pfeiffer Vacuum TPG (25x, 26x and 36x) controller for    |\n|                         |   compact pressure gauges                                  |\n|                         | | SST Luminox oxygen sensor                                |\n+-------------------------+------------------------------------------------------------+\n| Laser                   | | CryLaS pulsed laser                                      |\n|                         | | CryLaS laser attenuator                                  |\n+-------------------------+------------------------------------------------------------+\n| Oscilloscope            | | Rhode & Schwarz RTO 1024                                 |\n|                         | | TiePie (HS5, HS6, WS5)                                   |\n+-------------------------+------------------------------------------------------------+\n| Power supply            | | Elektro-Automatik PSI9000                                |\n|                         | | FuG Elektronik                                           |\n|                         | | Heinzinger PNC                                           |\n|                         | | Technix capacitor charger                                |\n+-------------------------+------------------------------------------------------------+\n| Stepper motor drive     | | Newport SMC100PP                                         |\n|                         | | Schneider Electric ILS2T                                 |\n+-------------------------+------------------------------------------------------------+\n| Temperature control     | | Lauda PRO RP 245 E circulation thermostat                |\n+-------------------------+------------------------------------------------------------+\n| Waveform generator      | | TiePie (HS5, WS5)                                        |\n+-------------------------+------------------------------------------------------------+\n\nEach device uses at least one standardised communication protocol wrapper.\n\nCommunication protocols\n~~~~~~~~~~~~~~~~~~~~~~~\n\nIn :code:`hvl_ccb` by \"communication protocol\" we mean different levels of\ncommunication standards, from the low level actual communication protocols like\nserial communication to application level interfaces like VISA TCP standard. There\nare also devices in :code:`hvl_ccb` that use a dummy communication protocol;\nthis is because these devices are build on proprietary manufacturer libraries that\ncommunicate with the corresponding devices, as in the case of TiePie or LabJack devices.\n\nThe communication protocol wrappers in :code:`hvl_ccb` provide a standardised API with\nconfiguration dataclasses, as well as open/close and read/write/query methods.\nCurrently, wrappers for the following communication protocols are available:\n\n+------------------------+-------------------------------------------------------------+\n| Communication protocol | Devices using                                               |\n+========================+=============================================================+\n| Modbus TCP             | | Schneider Electric ILS2T stepper motor drive              |\n+------------------------+-------------------------------------------------------------+\n| OPC UA                 | | HVL Cube with and without Power Inverter                  |\n+------------------------+-------------------------------------------------------------+\n| Serial                 | | CryLaS pulsed laser and laser attenuator                  |\n|                        | | FuG Elektronik power supply (e.g. capacitor charger HCK)  |\n|                        |   using the Probus V protocol                               |\n|                        | | Heinzinger PNC power supply                               |\n|                        |   using Heinzinger Digital Interface I/II                   |\n|                        | | SST Luminox oxygen sensor                                 |\n|                        | | MBW 973-SF6 gas dew point mirror analyzer                 |\n|                        | | Newport SMC100PP single axis driver for 2-phase stepper   |\n|                        |   motors                                                    |\n|                        | | Pfeiffer Vacuum TPG (25x, 26x and 36x) controller for     |\n|                        |   compact pressure gauges                                   |\n|                        | | Technix capacitor charger                                 |\n+------------------------+-------------------------------------------------------------+\n| TCP                    | | Lauda PRO RP 245 E circulation thermostat                 |\n+------------------------+-------------------------------------------------------------+\n| Telnet                 | | Technix capacitor charger                                 |\n|                        | | Fluke 8845A and 8846                                      |\n+------------------------+-------------------------------------------------------------+\n| VISA TCP               | | Elektro-Automatik PSI9000 DC power supply                 |\n|                        | | Rhode & Schwarz RTO 1024 oscilloscope                     |\n+------------------------+-------------------------------------------------------------+\n| *propriety*            | | LabJack (T4, T7, T7-PRO) devices, which communicate via   |\n|                        |   `LJM Library`_                                            |\n|                        | | Pico Technology PT-104 Platinum Resistance Data Logger,   |\n|                        |   which communicate via `PicoSDK`_/`libusbpt104`_           |\n|                        | | TiePie (HS5, HS6, WS5) oscilloscopes and generators,      |\n|                        |   which communicate via `LibTiePie SDK`_                    |\n+------------------------+-------------------------------------------------------------+\n\n.. _`LibTiePie SDK`: https://www.tiepie.com/en/libtiepie-sdk\n.. _`libusbpt104`: https://labs.picotech.com/debian/pool/main/libu/libusbpt104/\n.. _`LJM Library`: https://labjack.com/ljm\n.. _`PicoSDK`: https://www.picotech.com/downloads\n\nSensor and Unit Conversion Utility\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe Conversion Utility is a submodule that allows on the one hand a\nunified implementation of hardware-sensors and on the other hand provides a unified\nway to convert units. Furthermore it is possible to map two ranges on to each other.\nThis can be useful to convert between for example and 4 - 20 mA and 0 - 10 V, both\nof them are common as sensor out- or input. Moreover, a subclass allows the mapping\nof a bit-range to any other range. For example a 12 bit number (0-4095) to 0 - 10.\nAll utilities can be used with single numbers (:code:`int`,\n:code:`float`) as well as array-like structures containing single numbers\n(:code:`np.array()`, :code:`list`, :code:`dict`, :code:`tuple`).\n\nCurrently the following sensors are implemented:\n\n- LEM LT 4000S\n- LMT 70A\n\nThe following unit conversion classes are implemented:\n\n- Temperature (Kelvin, Celsius, Fahrenheit)\n- Pressure (Pascal, Bar, Atmosphere, Psi, Torr, Millimeter Mercury)\n\n\nDocumentation\n-------------\n\nNote: if you're planning to contribute to the :code:`hvl_ccb` project read\nthe **Contributing** section in the HVL CCB documentation.\n\nDo either:\n\n* read `HVL CCB documentation at RTD`_,\n\nor\n\n* build and read HVL CCB documentation locally; install first `Graphviz`_ (make sure\n  to have the :code:`dot` command in the executable search path) and the Python\n  build requirements for documentation::\n\n    $ pip install docs/requirements.txt\n\n  and then either on Windows in Git BASH run::\n\n    $ ./make.sh docs\n\n  or from any other shell with GNU Make installed run::\n\n    $ make docs\n\n  The target index HTML (:code:`\"docs/_build/html/index.html\"`) should open\n  automatically in your Web browser.\n\n.. _`Graphviz`: https://graphviz.org/\n.. _`HVL CCB documentation at RTD`: https://readthedocs.org/projects/hvl-ccb/\n\nCredits\n-------\n\nThis package was created with Cookiecutter_ and the\n`audreyr/cookiecutter-pypackage`_ project template.\n\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage\n",
    "bugtrack_url": null,
    "license": "GNU General Public License v3",
    "summary": "Python common code base to control devices high voltage research devices, in particular, as used in Christian Franck's High Voltage Lab (HVL), D-ITET, ETH",
    "version": "0.14.4",
    "project_urls": {
        "Changelog": "https://pypi.org/project/hvl-ccb/#history",
        "Documentation": "https://hvl-ccb.readthedocs.io/en/latest/",
        "Homepage": "https://gitlab.com/ethz_hvl/hvl_ccb/",
        "Repository": "https://gitlab.com/ethz_hvl/hvl_ccb/"
    },
    "split_keywords": [
        "hvl_ccb"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6ee90e8dc85fdb2742fc0dbc574152d19e5f01dbcd626713a0bf792df10a20c1",
                "md5": "2b7761996a3ca0cf51239142287b0d26",
                "sha256": "57ff38159c33449d4b2de13dd241c783e82370b0bfedfdf197d5e2b1e4823936"
            },
            "downloads": -1,
            "filename": "hvl_ccb-0.14.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2b7761996a3ca0cf51239142287b0d26",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.11,>=3.9",
            "size": 206850,
            "upload_time": "2023-12-22T17:55:17",
            "upload_time_iso_8601": "2023-12-22T17:55:17.335272Z",
            "url": "https://files.pythonhosted.org/packages/6e/e9/0e8dc85fdb2742fc0dbc574152d19e5f01dbcd626713a0bf792df10a20c1/hvl_ccb-0.14.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "092fce25f9f502a9e8686337a08cf71846bda389d57aaf0a063fc2a6ba6aba59",
                "md5": "dbffbbb99127ae42ed583100cfc15238",
                "sha256": "4bdfe1c20e45877df693b5e219a8a191f1248199a4fd1b0dc44ce7a429f8f51c"
            },
            "downloads": -1,
            "filename": "hvl_ccb-0.14.4.tar.gz",
            "has_sig": false,
            "md5_digest": "dbffbbb99127ae42ed583100cfc15238",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.11,>=3.9",
            "size": 255626,
            "upload_time": "2023-12-22T17:55:19",
            "upload_time_iso_8601": "2023-12-22T17:55:19.669234Z",
            "url": "https://files.pythonhosted.org/packages/09/2f/ce25f9f502a9e8686337a08cf71846bda389d57aaf0a063fc2a6ba6aba59/hvl_ccb-0.14.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-22 17:55:19",
    "github": false,
    "gitlab": true,
    "bitbucket": false,
    "codeberg": false,
    "gitlab_user": "ethz_hvl",
    "gitlab_project": "hvl_ccb",
    "lcname": "hvl-ccb"
}
        
Elapsed time: 0.16329s