Skip to main content

alicat

TCP/Serial driver and command line tool for Alicat Laminar DP and BASIS mass flow devices.

If you are using Analyt-MTC flow controllers, go to this repository for more info. This driver does not currently support CODA devices.

Example Connections

Type Usage
The standard DB9 cable connected directly to a computer (unix: /dev/ttyS0, windows: COM1). Good with older computers that still have the connector.
The cable connected to a computer through a USB converter (unix: /dev/ttyUSB0, windows: COM1). Good for newer computers and maker boards such as Raspberry Pis.
Multiple cables connected to one port via a splitter and Alicat's addressing (A-Z). Good when number of ports is limited.
Cables routed through a TCP device server (192.168.1.100:23).

Installation

pip install alicat

Usage

Command Line

For basic tasks, this driver includes a command-line interface. Read the help for more.

alicat --help

Python

This uses Python ≥3.5's async/await syntax to asynchronously communicate with an Alicat. For example:

import asyncio
from alicat import FlowController

async def get():
    async with FlowController(address = "com_port", unit = "unit_id") as flow_controller:
        print(await flow_controller.get())

asyncio.run(get())
#  If there is already an event loop (e.g. Jupyter), replace the above line with:
#  sawait get()

A similar format can be used to communicate with a BASIS device.

import asyncio
from alicat.basis import BasisController

async def get():
    async with BasisController(address = "com_port", unit = "unit_id") as basis_controller:
        print(await basis_controller.get())

asyncio.run(get())

If the flow controller is communicating on the specified port, this should return a dictionary of the form:

## Standard Devices
{
  'setpoint': 0.0,         # Setpoint, either mass flow rate or pressure
  'control_point': 'flow', # Either 'flow' or 'pressure'
  'gas': 'Air',            # Can be any option in `flow_controller.gases`
  'mass_flow': 0.0,        # Mass flow (in units specified at time of purchase)
  'pressure': 25.46,       # Pressure (normally in psia)
  'temperature': 23.62,    # Temperature (normally in C)
  'total_flow': 0.0,       # Optional. If totalizer function purchased, will be included
  'volumetric_flow': 0.0   # Volumetric flow (in units specified at time of purchase)
}

## BASIS Devices
{
  'setpoint': 0.0,         # Mass Flow Setpoint
  'gas': 'Air',            # Can be Air, Ar, CO2, N2, O2, N2O, H2, He, CH4
  'mass_flow': 0.0,        # Mass flow (in SCCM or SLPM)
  'temperature': 23.62,    # Temperature (normally in C)
  'volumetric_flow': 0.0   # Volumetric flow (in CCM or LPM)
}

On flow controllers, you can set the flow or pressure setpoints.

await flow_controller.set_flow_rate(1.0)
await flow_controller.set_pressure(20)

Gas Type

You can set the gas type by name or by index. For more on setting by index, see the gas table in your Alicat's manual.

await flow_controller.set_gas('N2')
await flow_controller.set_gas(8)

For firmware 5v and greater, you can create and set gas mixes. Mixes can contain up to five gases and are stored in gas indices 236-255.

await flow_controller.create_mix(mix_no=236, name="Mix1", gases={'N2': 50, 'O2': 30, 'CO2': 20})
await flow_controller.set_gas(236)
await flow_controller.delete_mix(236)

PID Parameters

For flow controllers, read and write PID loop settings for device tuning.

await flow_controller.set_pid(p=4000, i=4000, d=10, loop_type='PD2I')
print(await flow_controller.get_pid())
{
    'loop_type': 'PD2I',
    'P': '4000',
    'I': '4000',
    'D': '10',
}

Other Features

Additional features include override commands to increase device functionality.

await flow_controller.lock()            # Lock the front display.
await flow_controller.unlock()          # Unlock the front display.
await flow_controller.hold()            # Hold the valve in its current position.
await flow_controller.cancel_hold()     # Cancel the valve hold.
await flow_controller.tare_volumetric() # Tare volumetric flow.
await flow_controller.tare_pressure()   # Tare pressure.
await flow_controller.reset_totalizer() # Reset totalizer, if totalizer functionality included.

Addressing

You can have multiple controllers on the same port by using Alicat's A-Z addresses and an RS-232 splitter.

flow_controller_1 = FlowController(address='A')
flow_controller_2 = FlowController(address='B')

await flow_controller_1.set_flow_rate(1.0)
await flow_controller_2.set_flow_rate(0.5)

await flow_controller_1.close() # /dev/ttyUSB0 is still open!
await flow_controller_2.close()

Breaking changes

0.5.0

  • Support only asyncio. The last version with synchronous code was 0.4.1.
  • Rename address/-a to unit/-u to match Alicat's documentation
  • Rename -u to -ul (for --unlock)

0.4.1 Remove TCP support. Use pip install alicat==0.3.1 if needed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

alicat-0.9.0.tar.gz (27.2 kB view details)

Uploaded Source

Built Distribution

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

alicat-0.9.0-py3-none-any.whl (26.6 kB view details)

Uploaded Python 3

File details

Details for the file alicat-0.9.0.tar.gz.

File metadata

  • Download URL: alicat-0.9.0.tar.gz
  • Upload date:
  • Size: 27.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for alicat-0.9.0.tar.gz
Algorithm Hash digest
SHA256 40c109df0cc19e9a623048cffd2c38d598434315f1d35f60892057357e79f1ec
MD5 008d45ccb3b3e6ee83c967da75b78563
BLAKE2b-256 3716de9e867cad27a1802d2b7d99be865026500d85467654b7a0f9a3bc061440

See more details on using hashes here.

File details

Details for the file alicat-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: alicat-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 26.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for alicat-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a0769cb1c3289572078e4899abe39561ca3ca730b071b9cf89d6bbe87d353f80
MD5 55b9763c8b0fdc2690152f87da70fbba
BLAKE2b-256 256878adb2d1e9e14689da6caedee78b2b713c6290832cfe7919fdd5404cb09d

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.9.0 This release

2 files

0.8.0

2 files

0.7.0

2 files

0.6.4

2 files

0.6.3

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.1

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.1

2 files

0.3.0

2 files

0.2.10

2 files

0.2.9

2 files

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.29

2 files

0.1.28

2 files

0.1.27

2 files

0.1.26

2 files

0.1.25

2 files

0.1.24

2 files

0.1.23

2 files

0.1.22

2 files

0.1.21

2 files

0.1.20

2 files

0.1.19

2 files

0.1.18

2 files

0.1.17

2 files

0.1.16

2 files

0.1.15

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page