Skip to main content

Asynchronous scale driver

Project description

ScalesDriverAsync

About

Электронные весы получили широкое распространение на производственных предприятиях, в логистике, торговле, медицине и в других областях. Несмотря на широкое распространение программное взаимодействие с весами не стандартизировано. Электронные весы имеют разнообразные интерфейсы для подключения и протоколы для обмена данными. Наиболее распространены весы с интерфейсами RS-232, Ethernet и Wi-Fi. Некоторые модели имеют более одного интерфейса. Многие производители реализуют широко известные протоколы обмена данными в своих устройствах, например протокол CAS и его разновидности, другие же реализуют собственные открытые протоколы.

ScalesDriverAsync - это асинхронный драйвер электронных весов. ScalesDriverAsync предоставляет единый интерфейс независимо ни от физического интерфейса, ни от протокола.

Класс Connector модуля connector предоставляет высокоуровневый интерфейс для отправки и получения данных. Кроме того он предоставляет логику для простой обработки ошибок передачи данных и восстановления соединения после сбоев.

Модуль drivers предоставляет реализации протоколов обмена данными. Пока реализовано только два протокола CAS type 6 (class CASType6) и проприетарный протокол Масса-К 1С (class MassK1C).

Requirements

Usage

pip install scales-driver-async

import asyncio

from scales_driver_async.drivers import CASType6, ScalesDriver


async def main():
    scales = CASType6(
            name='Bench scales',
            connection_type='serial',
            transfer_timeout=1,
            url='/dev/ttyUSB0',
            baudrate=9600,
            bytesize=8,
            parity='N',
            stopbits=1
    )
    print(await scales.get_weight(ScalesDriver.UNIT_KG))

asyncio.run(main())

Расширенный пример смотрите в example.py.

Class connector.Connector

Connector предоставляет высокоуровневый API для получения и отправки данных. Работает поверх asyncio.StreamReader и asyncio.StreamWriter. Конструктор принимает параметры connection_type, transfer_timout и другие ключевые параметры (kwargs). Параметр connection_typeможет иметь значение 'socket' или 'serial'. Параметр transfer_timout - число, время ожидание отправки и получения данных в секундах. Kwargs должны иметь значения параметров соединения передаваемых в функцию asyncio.open_connection(**kwargs) или serial_asyncio.open_serial_connection(**kwargs).

async def main():
    connector = Connector(Connector.SOCKET_CONN, 1.5, host='localhost', port=8080)
    await connector.write('Hello!'.encode())
    print(connector.read(6))

Вам обычно ненужно создавать объект этого класса напрямую.

coroutine read(data_len)

Открывает соединение, если оно не было открыто. Читает data_len байт из потока. Если данные небыли получены по истечении таймаута, будет поднято исключение ConnectorError. При возникновении других ошибок соединение будет закрыто и также будет поднято исключение.

coroutine write(data)

Открывает соединение, если оно не было открыто. Записывает данные. Ждет завершения передачи. Если данные небыли записаны по истечении таймаута, будет поднято исключение ConnectorError. При возникновении других ошибок соединение будет закрыто и также будет поднято исключение.

Exceptions

Connector может поднимать два типа исключений: ConfigurationError и ConnectorError. Исключение ConfigurationError будет поднято, если были переданы неверные параметры при инстанцировании. Исключение ConnectorError будет поднято при возникновении ошибок передачи данных. Это исключение может быть перехвачено и обработано, а работа приложения продолжена без каких-либо дополнительных действий. Соединение будет восстановлено автоматически.

Class drivers.ScalesDriver

ScalesDriver - абстрактный класс предоставляющий высокоуровневый API весов. Классы модуля drivers наследуются от ScalesDriver и реализуют протоколы весов. Любой протокол может работать через сокет или последовательный порт. Пока реализовано два протокола CASType6 (CAS type #6) и MassK1C (Масса-К 1С). Протокол CAS type #6 поддерживают многие весы разных брендов. Масса-К 1С - протокол АО "МАССА-К" .

async def main():
    scales = CASType6(
        name='Bench scales',
        connection_type='serial',
        transfer_timeout=1,
        url='/dev/ttyUSB0',
        baudrate=9600,
        bytesize=8,
        parity='N',
        stopbits=1
    )
    print(await scales.get_weight(ScalesDriver.UNIT_KG))

Exceptions

Исключение ScalesError будет поднято, если были получены неверные данные от весов.

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

scales_driver_async-0.0.10.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

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

scales_driver_async-0.0.10-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file scales_driver_async-0.0.10.tar.gz.

File metadata

  • Download URL: scales_driver_async-0.0.10.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for scales_driver_async-0.0.10.tar.gz
Algorithm Hash digest
SHA256 759bdf410b12cb876f21da330eae54b881713e9567f754f32c397347603b0dbd
MD5 dd83cc673e59ea68975f32233829634f
BLAKE2b-256 2783500e05d92f7af8ded52f030d1f7a0749f054beb49d37d9362402058c680f

See more details on using hashes here.

File details

Details for the file scales_driver_async-0.0.10-py3-none-any.whl.

File metadata

File hashes

Hashes for scales_driver_async-0.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 92325cb87ac5d5f06e98628edb379535e509c7e64d13de71702aca113353a64a
MD5 b98b84a3624363d522bb5dacabc88402
BLAKE2b-256 1373b8393f6813fee3db1b0cb3a0a9875afd356ce9e5b453cbb559720ca0fe6a

See more details on using hashes here.

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