-
-
Save richardingham/83401127622036c6afd0 to your computer and use it in GitHub Desktop.
Control sequence for multiple hydrogenation experiments
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from octopus.transport.basic import tcp | |
from octopus.manufacturer import vapourtec, thalesnano, mt, knauer, vici | |
from octopus.runtime import * | |
h = thalesnano.HCube(tcp("192.168.15.156", 9004)) | |
v = vici.MultiValve(tcp("192.168.15.153", 9006)) | |
k = knauer.K120(tcp("192.168.15.156", 9002)) | |
ir = mt.ICIR(tcp("192.168.15.242", 8124), stream_names = ["starting_material", "product"]) | |
id("hydrogenation_opt_1") | |
title("Hydrogenation") | |
setup = sequence( | |
log("Preparing..."), | |
set(v.position, 1), | |
set(k.target, 200), | |
set(k.power, "on"), | |
set(h.column_temperature_target, 25), | |
set(h.system_pressure_target, 0), | |
set(h.hydrogen_mode, "full"), | |
call(h.start_hydrogenation) | |
) | |
dead_volume = 3000 # uL | |
current_state = [25, "full", 200] # temp, pressure, rate | |
def reaction (name, pressure, temp, rate, valve_pos): | |
global current_state | |
old_state, current_state = current_state, [temp, pressure, rate] | |
change_t = (old_state[0] != temp) | |
change_p = (old_state[1] != pressure) | |
change_r = (old_state[2] != rate) | |
if change_p: | |
if pressure == "full": | |
change_h2 = sequence( | |
set(h.system_pressure_target, 0), | |
set(h.hydrogen_mode, "full"), | |
) | |
press_wait = (h.state == "running") | |
else: | |
change_h2 = sequence( | |
set(h.hydrogen_mode, "controlled"), | |
set(h.system_pressure_target, pressure), | |
) | |
press_wait = (h.system_pressure >= pressure) | |
change_step = sequence( | |
log("Switch off hydrogen to change pressure"), | |
call(h.stop_keep_hydrogen), | |
log("Change pressure to %s ..." % pressure), | |
change_h2, | |
log("Change temp to %s" % temp), | |
set(h.column_temperature_target, temp), | |
log("Change rate to %s" % rate), | |
set(k.target, rate), | |
log("Starting H-Cube"), | |
parallel( | |
wait(((dead_volume / rate) + 1) * 60), | |
sequence( | |
call(h.start_hydrogenation), | |
do_if(h.state != "running", | |
log("Please check that the H-cube is running OK") | |
), | |
wait_until(press_wait), | |
), | |
), | |
) | |
else: | |
if change_r: | |
a = sequence( | |
log("Change rate to %s" % rate), | |
set(k.target, rate), | |
log("Wait one dead volume"), | |
wait(((dead_volume / rate) + 1) * 60), | |
) | |
else: | |
a = log("Rate not changed") | |
if change_t: | |
if temp > old_state[0]: | |
# Wait to heat up | |
temp_wait = h.column_temperature >= temp | |
else: | |
# Wait to cool down | |
temp_wait = h.column_temperature < temp + 5 | |
b = sequence( | |
log("Change temp to %s" % temp), | |
set(h.column_temperature_target, temp), | |
log("Waiting for temp. stability"), | |
wait_until(temp_wait), | |
) | |
else: | |
b = log("Temp not changed") | |
change_step = parallel(a, b) | |
return sequence( | |
log_output(name), | |
log("Preparing reaction #%s" % name), | |
change_step, | |
log("Starting reaction #%s" % name), | |
wait(((dead_volume / rate) + 1) * 60), | |
log("Taking a sample now"), | |
set(v.position, valve_pos), | |
wait("10m"), | |
log("Collection complete"), | |
set(v.position, 1), | |
) | |
ui( | |
traces = [{ | |
"title": "Pressures", | |
"unit": "", | |
"traces": [h.inlet_pressure, h.system_pressure], | |
"maxtime": 30 * 60 | |
}, { | |
"title": "IR output", | |
"unit": "mAU", | |
"traces": [ir.starting_material, ir.product], | |
"maxtime": 30 * 60 | |
}], | |
properties = [ | |
k.rate, | |
h.hydrogen_mode, | |
h.system_pressure_target, | |
h.system_pressure, | |
h.column_temperature_target, | |
h.column_temperature, | |
h.state, | |
h.message, | |
v.position | |
] | |
) | |
run(sequence( | |
setup, | |
## First Run: | |
reaction(1 , "full", 100, 100, 2), | |
reaction(2 , 20 , 100, 100, 3), | |
reaction(3 , 20 , 40, 200, 4), | |
reaction(4 , "full", 40, 100, 5), | |
reaction(5 , 20 , 40, 200, 6), | |
reaction(6 , 20 , 40, 100, 7), | |
reaction(7 , 20 , 100, 200, 8), | |
reaction(8 , "full", 40, 200, 9), | |
## Second Run: | |
#reaction(9 , 20 , 40, 100, 2), | |
#reaction(10, "full", 100, 100, 3), | |
#reaction(11, "full", 40, 100, 4), | |
#reaction(12, "full", 100, 200, 5), | |
#reaction(13, "full", 100, 200, 6), | |
#reaction(14, 20 , 100, 100, 7), | |
#reaction(15, "full", 40, 200, 8), | |
#reaction(16, 20 , 100, 200, 9), | |
log("Complete, releasing hydrogen"), | |
call(h.stop_release_hydrogen), | |
log("Flushing"), | |
set(k.target, 200), | |
wait("20m"), | |
set(k.power, "off") | |
)) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment