alicat
TCP/Serial driver and command line tool for
Alicat Laminar DP mass flow controllers.
If you are using Analyt-MTC flow controllers, go to this repository for more info.
This driver does not currently support CODA or BASIS controllers.
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('ip-address:port') as flow_controller:
print(await flow_controller.get())
asyncio.run(get())
If the flow controller is communicating on the specified port, this should
return a dictionary of the form:
{
'setpoint': 0.0,
'control_point': 'flow',
'gas': 'Air',
'mass_flow': 0.0,
'pressure': 25.46,
'temperature': 23.62,
'total_flow': 0.0,
'volumetric_flow': 0.0
}
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()
await flow_controller.unlock()
await flow_controller.hold()
await flow_controller.cancel_hold()
await flow_controller.tare_volumetric()
await flow_controller.tare_pressure()
await flow_controller.reset_totalizer()
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()
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