Syringe Pump
Recorded Data
The Syringe Pump records the following attributes during operation:
status
: The status of the syringe pump. It is represented as a u8 value and can have one of the following values:0
: Stopped1
: Infusing2
: Withdrawing3
: Paused
mode
: The operational mode of the syringe pump. It is represented as a u8 value and can have one of the following values:0
: Continuous1
: Finite
ul_min
: The current infusion or withdrawal rate of the pump in microliters per minute (uL/min). The value is always positive.finite_value
: The target volume to dispense or withdraw when operating in Finite mode. The value is always positive.finite_units
: The units of the target volume to dispense or withdraw when operating in Finite mode. It is represented as a u8 value.finite_ul_target
: The target volume in microliters (uL) to dispense or withdraw when operating in Finite mode.finite_ul_infused
: The volume in microliters (uL) infused so far when operating in Finite mode.finite_ul_withdrawn
: The volume in microliters (uL) withdrawn so far when operating in Finite mode.position
: The plunger position of the syringe pump, ranging from 0 to 1. A value of 0 indicates the fully infused position, and a value of 1 indicates the fully withdrawn position.position_target
: The plunger target position of the syringe pump, ranging from 0 to 1. A value of 0 indicates the fully infused position, and a value of 1 indicates the fully withdrawn position.valve_position
: The valve position of the syringe pump. The mapping of the position to a port depends on the valve configuration.plunger_mode
: The plunger positioning mode of the syringe pump. Not all configurations utilize this field. It is represented as a u8 value.
Python API
The Syringe Pump can be controlled using the Aqueduct Python API. The Python code for interacting with the syringe pump can be found in the aqueduct-py repository.
The syringe.py
module provides functions and classes to control the syringe pump. You can use this API to set the infusion rate, target volume, and operational mode. The API allows you to integrate the syringe pump into your Python applications and automation scripts.
To use the Python API, you can import the SyringePump
class from the syringe.py
module and create an instance of the pump. Then, you can call the available methods to control and monitor the pump's operation.
"""SyringePump demo.
This demo program initializes a SyringePump device, sets
the pump to run continuously at increasing flow rates,
and then reverses the direction of each pump input one by
one as it reaches 0 flow rate. The program continuously
checks the flow rates of each pump input and sends new start
commands to reverse the direction if the flow rate
reaches 0.
"""
# import necessary modules
import time
from typing import List
from aqueduct.core.aq import Aqueduct
from aqueduct.core.aq import InitParams
from aqueduct.devices.pump.syringe import Status
from aqueduct.devices.pump.syringe import SyringePump
# get initialization parameters
params = InitParams.parse()
# create an instance of the Aqueduct API with the given user_id, ip_address and port
aq = Aqueduct(params.user_id, params.ip_address, params.port)
# initialize the pump
aq.initialize(params.init)
# set a delay between sending commands to the pump
aq.set_command_delay(0.05)
# get the SyringePump device
pump: SyringePump = aq.devices.get("syringe_pump_000001")
# create a list to store the last direction used for each pump
last_directions: List[Status] = []
commands = pump.make_commands()
# create start commands for each pump at increasing rates
for i in range(0, pump.len):
# create a command to set the pump to continuous mode, with a rate of i+1 ml/min, infusing
c = pump.make_start_command(
mode=pump.MODE.Finite,
rate_units=pump.RATE_UNITS.MlMin,
rate_value=i + 1,
direction=pump.STATUS.Infusing,
finite_units=pump.FINITE_UNITS.Ml,
finite_value=1.0,
)
# store the direction used for this command
last_directions.append(pump.STATUS.Infusing)
# set the command for this pump
pump.set_command(commands, i, c)
# start the pumps
pump.start(commands)
while True:
# get the flow rates for each pump
ul_min = pump.get_ul_min()
# create a new list of commands for each pump
commands = pump.make_commands()
# check if any pumps have a flow rate of 0, and if so, reverse their direction
for i, s in enumerate(ul_min):
if ul_min[i] == 0:
# reverse the direction of this pump
d = last_directions[i].reverse()
# create a new command with the reversed direction
c = pump.make_start_command(
mode=pump.MODE.Continuous,
rate_units=pump.RATE_UNITS.MlMin,
rate_value=i + 1,
direction=d,
finite_units=pump.FINITE_UNITS.Ml,
finite_value=1.0,
)
# update the last direction used for this pump
last_directions[i] = d
# set the new command for this pump
pump.set_command(commands, i, c)
# start the pumps with the new commands
pump.start(commands)
# wait for a short time before checking again
time.sleep(0.05)
Please refer to the aqueduct-py repository for more details on how to use the Python API with the Syringe Pump.
E-Stop Behavior
In the Aqueduct system, pressing the E-Stop button has a specific behavior for syringe pumps:
- When the Aqueduct E-Stop button is pressed, all syringe pumps will immediately stop their operation.
- Upon resumption, the operator will have the option to manually resume the pump's operation by selecting the appropriate control settings.
Supported Hardware
- with the 2x Can + 2x RS485 device node, supports control of up to 16 TriContinent C(X) series syringe pumps