{ "cells": [ { "cell_type": "markdown", "id": "t0q0pzftygm", "metadata": {}, "source": [ "# Inheco SCILA\n", "\n", "The SCILA is an automated CO₂-controlled incubator from Inheco with 4 independently accessible drawers for SBS-format plates. It communicates over Ethernet using the SiLA 2 protocol.\n", "\n", "| Summary | Image |\n", "|------------|--------|\n", "| |
![scila](img/inheco_scila.png)
Inheco SCILA
|" ] }, { "cell_type": "markdown", "id": "qnrt30ol6yc", "metadata": {}, "source": [ "## Setup\n", "\n", "The SCILA communicates over Ethernet using the SiLA 2 protocol. To connect, you need:\n", "1. The IP address of the SCILA on your network.\n", "2. (Optional) The IP address of your client machine -- auto-detected if omitted.\n", "3. (Optional) `gas_mixer_connected=False` if you are operating the SCILA without an external CO₂ gas mixer attached. This silences the non-fatal CO₂-flow warning that the device emits during drawer open/close in that configuration. Defaults to `True`.\n", "\n", "The backend starts a local HTTP server to receive asynchronous responses from the SCILA.\n", "\n", "If you don't know the SCILA's IP, the bundled SiLA discovery tool will find any SiLA 1 device on the local subnet:\n", "\n", "```bash\n", "python -m pylabrobot.io.sila.discovery --interface \n", "```" ] }, { "cell_type": "code", "execution_count": null, "id": "z5fcugljbwk", "metadata": {}, "outputs": [], "source": [ "from pylabrobot.inheco.scila import SCILA\n", "\n", "scila = SCILA(name=\"scila\", scila_ip=\"169.254.1.117\") # replace with your IP\n", "await scila.setup()" ] }, { "cell_type": "markdown", "id": "b5tlrcjqnaw", "metadata": {}, "source": [ "## Status Requests\n", "\n", "Query the overall device status (`\"idle\"`, `\"standBy\"`, `\"inError\"`, `\"startup\"`, ...):" ] }, { "cell_type": "code", "execution_count": null, "id": "41szb6vodyd", "metadata": {}, "outputs": [], "source": [ "await scila.request_status()" ] }, { "cell_type": "markdown", "id": "mubpx1eq1gb", "metadata": {}, "source": [ "Water level in the built-in humidification reservoir (e.g. `\"High\"`, `\"Low\"`, `\"Empty\"`):" ] }, { "cell_type": "code", "execution_count": null, "id": "mropytllj29", "metadata": {}, "outputs": [], "source": [ "await scila.request_liquid_level()" ] }, { "cell_type": "markdown", "id": "ssaxq21iau", "metadata": {}, "source": [ "Drawer status for all 4 drawers, or a single drawer:" ] }, { "cell_type": "code", "execution_count": null, "id": "1c3ph2ocvsy", "metadata": {}, "outputs": [], "source": [ "await scila.request_drawer_statuses()" ] }, { "cell_type": "code", "execution_count": null, "id": "ku94ko4ros", "metadata": {}, "outputs": [], "source": [ "await scila.request_drawer_status(1)" ] }, { "cell_type": "markdown", "id": "p7i6hqwkt1", "metadata": {}, "source": [ "CO₂ and H₂O valve status:" ] }, { "cell_type": "code", "execution_count": null, "id": "akbcybg86xv", "metadata": {}, "outputs": [], "source": [ "await scila.request_valve_status()" ] }, { "cell_type": "markdown", "id": "g6s5bqaxtwc", "metadata": {}, "source": [ "CO₂ flow status:" ] }, { "cell_type": "code", "execution_count": null, "id": "sqo8u77mw5c", "metadata": {}, "outputs": [], "source": [ "await scila.request_co2_flow_status()" ] }, { "cell_type": "markdown", "id": "j4158a7ie6l", "metadata": {}, "source": [ "## Drawer Control\n", "\n", "Only one drawer can be open at a time. Opening a second drawer while one is already open will raise an error." ] }, { "cell_type": "code", "execution_count": null, "id": "7k64plxbq", "metadata": {}, "outputs": [], "source": [ "await scila.drawers[2].open()" ] }, { "cell_type": "code", "execution_count": null, "id": "2z6ayudjc48", "metadata": {}, "outputs": [], "source": [ "await scila.drawers[2].close()" ] }, { "cell_type": "markdown", "id": "eb1yorphqlv", "metadata": {}, "source": [ "## Temperature Control\n", "\n", "The SCILA has a single temperature zone shared across all 4 drawers." ] }, { "cell_type": "code", "execution_count": null, "id": "o3x6m4pn4k", "metadata": {}, "outputs": [], "source": [ "current = await scila.request_current_temperature()\n", "print(f\"{current:.1f} °C\")" ] }, { "cell_type": "code", "execution_count": null, "id": "6wx6jnosfzv", "metadata": {}, "outputs": [], "source": [ "await scila.set_temperature(37.0)" ] }, { "cell_type": "markdown", "id": "4j9wjfu9t2e", "metadata": {}, "source": [ "Stop temperature control:" ] }, { "cell_type": "code", "execution_count": null, "id": "wcmkz8nnt7b", "metadata": {}, "outputs": [], "source": [ "await scila.deactivate()" ] }, { "cell_type": "markdown", "id": "ryrjtlm67v", "metadata": {}, "source": [ "## Teardown" ] }, { "cell_type": "code", "execution_count": null, "id": "ebejgue4wyn", "metadata": {}, "outputs": [], "source": [ "await scila.stop()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.10.0" } }, "nbformat": 4, "nbformat_minor": 5 }