Serial driver and command line tool for Alicat mass flow controllers.
If you are using Analyt-MTC flow controllers, go to this repository for more info.
- 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.
- Cables routed through a TCP device server (
tcp://192.168.1.100:4000
, requires python >3.4).- Good in conjunction with PLCs for professional-looking control boxes.
- Multiple cables connected to one port via a splitter and Alicat's addressing (
A
-Z
).- Good when number of ports is limited.
pip install alicat
If you don't like pip, you can also install from source:
git clone https://github.com/numat/alicat.git
cd alicat
python setup.py install
For basic tasks, this driver includes a command-line interface. Read the help for more.
alicat --help
For more complex projects, use python to automate your workflow.
from alicat import FlowController
flow_controller = FlowController(port='/dev/ttyUSB0')
print(flow_controller.get())
If the flow controller is communicating on the specified port, this should return a dictionary of the form:
{
'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)
}
You can also set the gas type and flow rate / pressure.
flow_controller.set_gas('N2')
flow_controller.set_flow_rate(1.0)
flow_controller.set_pressure(20)
You can have multiple controllers on the same port by using Alicat's A
-D
addresses
and an RS-232 splitter.
flow_controller_1 = FlowController(address='A')
flow_controller_2 = FlowController(address='B')
flow_controller_1.set_flow_rate(1.0)
flow_controller_2.set_flow_rate(0.5)
flow_controller_1.close() #/dev/ttyUSB0 is still open!
flow_controller_2.close()
Some people wire their RS-232 devices through an ethernet proxy server (example), enabling network access. This is supported through asyncio (python >3.4) and python's built-in asynchronous syntax.
import asyncio
from alicat.tcp import FlowController
flow_controller = FlowController('192.168.1.100', 4000)
async def print_state():
print(await flow_controller.get())
ioloop = asyncio.get_event_loop()
ioloop.run_until_complete(print_state())
ioloop.close()