Source code for hvl_ccb.dev.heinzinger.base

#  Copyright (c) ETH Zurich, SIS ID and HVL D-ITET
#
"""
Base classes for Heinzinger Digital Interface I/II and Heinzinger PNC power supply.

The Heinzinger Digital Interface I/II is used for many Heinzinger power units.
Interface Manual:
https://www.heinzinger.com/assets/uploads/downloads/Handbuch_DigitalInterface_2021-12-14-V1.6.pdf

The Heinzinger PNC series is a series of high voltage direct current power supplies.
The class HeinzingerPNC is tested with two PNChp 60000-1neg and a PNChp 1500-1neg.
Check the code carefully before using it with other PNC devices, especially PNC3p
or PNCcap.
Manufacturer homepage:
https://www.heinzinger.com/en/products/pnc-serie
"""


import logging
from typing import Union

from hvl_ccb.comm import SyncCommunicationProtocol
from hvl_ccb.comm.serial import (
    SerialCommunication,
    SerialCommunicationBytesize,
    SerialCommunicationConfig,
    SerialCommunicationParity,
    SerialCommunicationStopbits,
)
from hvl_ccb.configuration import configdataclass
from hvl_ccb.utils.typing import Number

logger = logging.getLogger(__name__)


[docs] @configdataclass class HeinzingerSerialCommunicationConfig(SerialCommunicationConfig): #: Baudrate for Heinzinger power supplies is 9600 baud baudrate: int = 9600 #: Heinzinger does not use parity parity: Union[str, SerialCommunicationParity] = SerialCommunicationParity.NONE #: Heinzinger uses one stop bit stopbits: Union[int, SerialCommunicationStopbits] = SerialCommunicationStopbits.ONE #: One byte is eight bits long bytesize: Union[int, SerialCommunicationBytesize] = ( SerialCommunicationBytesize.EIGHTBITS ) #: The terminator is LF terminator: bytes = b"\n" #: use 3 seconds timeout as default timeout: Number = 3 #: default time to wait between attempts of reading a non-empty text wait_sec_read_text_nonempty: Number = 0.5 #: increased to 40 default number of attempts to read a non-empty text default_n_attempts_read_text_nonempty: int = 40
[docs] class HeinzingerSerialCommunication(SerialCommunication, SyncCommunicationProtocol): """ Specific communication protocol implementation for Heinzinger power supplies. Already predefines device-specific protocol parameters in config. """
[docs] @staticmethod def config_cls(): return HeinzingerSerialCommunicationConfig