Package: alicat
alicatTCP/Serial driver and command line tool forAlicat mass flow controllers.If you are using Analyt-MTC flow controllers, go tothis repositoryfor more info.Example ConnectionsTypeUsageThe standardDB9 cableconnected 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 aUSB converter(unix:/dev/ttyUSB0, windows:COM1).Good for newer computers and maker boards such as Raspberry Pis.Multiple cables connected to one port via asplitterand Alicat's addressing (A-Z).Good when number of ports is limited.Cables routed through aTCP device server(192.168.1.100:23).Installationpip install alicatUsageCommand LineFor basic tasks, this driver includes a command-line interface. Read the help
for more.alicat --helpPythonThis uses Python ≥3.5's async/await syntax to asynchronously communicate with an Alicat. For example:importasynciofromalicatimportFlowControllerasyncdefget():asyncwithFlowController('ip-address:port')asflow_controller:print(awaitflow_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,# 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)}On flow controllers, you can set the flow or pressure setpoints.awaitflow_controller.set_flow_rate(1.0)awaitflow_controller.set_pressure(20)Gas TypeYou 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.awaitflow_controller.set_gas('N2')awaitflow_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.awaitflow_controller.create_mix(mix_no=236,name="Mix1",gases={'N2':50,'O2':30,'CO2':20})awaitflow_controller.set_gas(236)awaitflow_controller.delete_mix(236)PID ParametersFor flow controllers, read and write PID loop settings for device tuning.awaitflow_controller.set_pid(p=4000,i=4000,d=10,loop_type='PD2I')print(awaitflow_controller.get_pid()){'loop_type':'PD2I','P':'4000','I':'4000','D':'10',}Other FeaturesAdditional features include override commands to increase device functionality.awaitflow_controller.lock()# Lock the front display.awaitflow_controller.unlock()# Unlock the front display.awaitflow_controller.hold()# Hold the valve in its current position.awaitflow_controller.cancel_hold()# Cancel the valve hold.awaitflow_controller.tare_volumetric()# Tare volumetric flow.awaitflow_controller.tare_pressure()# Tare pressure.awaitflow_controller.reset_totalizer()# Reset totalizer, if totalizer functionality included.AddressingYou can have multiple controllers on the same port by using Alicat'sA-Zaddresses
and anRS-232 splitter.flow_controller_1=FlowController(address='A')flow_controller_2=FlowController(address='B')awaitflow_controller_1.set_flow_rate(1.0)awaitflow_controller_2.set_flow_rate(0.5)awaitflow_controller_1.close()# /dev/ttyUSB0 is still open!awaitflow_controller_2.close()Breaking changes0.5.0Support onlyasyncio.  The last version with synchronous code was0.4.1.Renameaddress/-atounit/-uto match Alicat's documentationRename-uto-ul(for--unlock)0.4.1Remove TCP support.  Usepip install alicat==0.3.1if needed