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('socket', 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 может поднимать два типа исключений: ValueError и ConnectorError. Исключение ValueError будет поднято, если были переданы неверные параметры при инстанцировании. Исключение 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))

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.8.tar.gz (11.2 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.8-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for scales_driver_async-0.0.8.tar.gz
Algorithm Hash digest
SHA256 f2aea8d973359fd235ec69f67ec02eb18504f799b7da4f008eb29ce1db150f28
MD5 9683bff721403e51936aaa02be198392
BLAKE2b-256 9e2896daf95c2c28ef5d20e6417679dca21a05e36b8e1a2b11a91c2d5209b283

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for scales_driver_async-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 9391afff2176ce0fd7162c6ad1e7807a27b91ec58398fa7d9e010ecc11a706d8
MD5 56ced190cccdf5e96cbec5fef7625218
BLAKE2b-256 8dba0dd5664ba0b52553dc889993e17a5afac1bf2585f7508f52ffecdb20c2cf

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