Source code for msl.equipment.resources.optronic_laboratories.ol756ocx_64

"""
Load the 32-bit ``OL756SDKActiveXCtrl`` library using :ref:`msl-loadlib-welcome`.
"""
from __future__ import annotations

import os
import re

from msl.loadlib import Client64
from msl.loadlib import ConnectionTimeoutError
from msl.loadlib import Server32Error

from msl.equipment.connection import Connection
from msl.equipment.exceptions import OptronicLaboratoriesError
from msl.equipment.resources import register


[docs] @register(manufacturer=r'Optronic', model=r'(OL)?\s*756', flags=re.IGNORECASE) class OL756(Connection): def __init__(self, record=None): """A wrapper around the ``OL756SDKActiveXCtrl`` library. .. attention:: See the :class:`.ol756ocx_32.OL756` class for all available methods. This class can be used with either a 32- or 64-bit Python interpreter to call the 32-bit functions in the ``OL756SDKActiveXCtrl`` library. The :attr:`~msl.equipment.record_types.ConnectionRecord.properties` for an OL756 connection supports the following key-value pairs in the :ref:`connections-database`:: 'mode': int, connection mode (0=RS232, 1=USB) [default: 1] 'com_port': int, the COM port number (RS232 mode only) [default: 1] Do not instantiate this class directly. Use the :meth:`~.EquipmentRecord.connect` method to connect to the equipment. Parameters ---------- record : :class:`~.EquipmentRecord` A record from an :ref:`equipment-database`. """ super(OL756, self).__init__(record) self.set_exception_class(OptronicLaboratoriesError) self._client = None error = None try: self._client = Client64( os.path.join(os.path.dirname(__file__), 'ol756ocx_32.py'), prog_id=record.connection.address[5:], mode=record.connection.properties.get('mode', 1), com_port=record.connection.properties.get('com_port', 1), ) except ConnectionTimeoutError as e: error = e.reason if error: self.raise_exception('Cannot initialize the OL756 SDK.\n{}'.format(error)) self._request32 = self._client.request32 if self._request32('mode') == -1: self.disconnect() self.raise_exception( 'Cannot connect to the OL756 spectroradiometer. ' 'Is it turned on and connected to the computer?' ) self.log_debug('Connected to %s', record.connection) def __getattr__(self, attr): def send(*args, **kwargs): try: self.log_debug('%s.%s(%s, %s)', self.__class__.__name__, attr, args, kwargs) return self._request32(attr, *args, **kwargs) except Server32Error as e: error = e self.raise_exception(error) return send
[docs] def disconnect(self): """Disconnect from the OL756 spectroradiometer.""" if not self._client: return try: self._request32('connect_to_ol756', -1) except: pass try: stdout, stderr = self._client.shutdown_server32() stdout.close() stderr.close() except: pass self._client = None self.log_debug('Disconnected from %s', self.equipment_record.connection)