Bioreactor suite
A monoclonal antibody fermentation suite running ISA-88 batches: media charge, bioreactor, harvest, with the cleanroom environment judged across the whole batch. Five devices and 94 tags over Modbus TCP.
Operator view | port 4011 |
|---|---|
Protocol server | port 5021 |
Devices and tags | 5 devices, 94 tags |
Litmus Edge driver | Modbus TCP |
Image | pharma-bioreactor-demo |
Scenarios
- A batch that cannot be released. A critical process parameter leaves its recipe band for long enough to matter. The deviation is recorded against the batch, not against a shift, and it is visible while the batch is still running.
- Right first time. Across a campaign, the proportion of batches that completed without a deviation, which is the number a quality organisation is actually measured on.
- The batch record itself. An electronic record assembled from what Litmus Edge recorded: phases, parameters, deviations and environment, exportable at the end of the batch.
What it creates on Litmus Edge
Five DeviceHub devices covering the reactor, the media charge and harvest vessels, the temperature control unit and the cleanroom, with 94 tags. A Digital Twin model and instance per vessel. Analytics groups behind the deviation, yield and release figures.
Requirements
- Litmus Edge 4.0.x, reachable over HTTPS from the host running the solution
- An API token for that Edge, or a username and password, or a client id and secret
- Docker, and Docker Compose for the compose deployment
- A network path in both directions: the solution reaches the Edge's API, and the Edge reaches this host on the protocol port
Deploy
The solution ships two ways. Use the registry if the host can reach Google Artifact Registry, and the downloaded archive if it cannot.
Option 1: pull from the registry
Requires a read-only registry credential, supplied by Litmus separately.
cat key.json | docker login -u _json_key --password-stdin https://us-docker.pkg.devSave this as docker-compose.yml:
services:
pharma-bioreactor:
image: us-docker.pkg.dev/litmus-customer-facing/litmus-solutions/pharma-bioreactor-demo:0.5.0
container_name: pharma-bioreactor-demo
restart: unless-stopped
ports:
- target: 4011
published: 4011
protocol: tcp
- target: 5021
published: 5021
protocol: tcp
environment:
# Fill these in.
EDGE_URL: "${EDGE_URL:-}"
EDGE_API_TOKEN: "${EDGE_API_TOKEN:-}"
SIM_HOST: "${SIM_HOST:-auto}"
APPLY_ON_START: "${APPLY_ON_START:-1}"
EDGE_VERIFY_TLS: "${EDGE_VERIFY_TLS:-0}"
HTTP_PORT: "4011"
MODBUS_PORT: "5021"
AUTOSTART: "1"
TICK_SECONDS: "0.2"
SEED: "11"
LOG_LEVEL: "INFO"EDGE_URL=https://10.0.0.5
EDGE_API_TOKEN=your-token
SIM_HOST=10.0.0.9docker compose up -dOpen http://localhost:4011.
The page stays on its waiting panel until the Edge carries this solution's devices. That is deliberate: the simulation does not tick and no value is shown until Litmus Edge is verified to hold the devices and poll them, so nothing on screen can be mistaken for data that never made the trip. With APPLY_ON_START at its default of 1 the solution configures the Edge itself on startup, which takes 30 to 60 seconds. If you set it to 0, or the apply failed, press Apply to Edge in the page header.
Option 2: load the downloaded archive
Download pharma-bioreactor-demo-0.5.0-amd64.tar.gz from the solution's page on portal.litmus.io. The archive is the container image, not a source bundle, and needs no registry access.
docker load -i pharma-bioreactor-demo-0.5.0-amd64.tar.gzdocker load prints the image it added:
Loaded image: us-docker.pkg.dev/litmus-customer-facing/litmus-solutions/pharma-bioreactor-demo:0.5.0That reference is the one the compose file above already names, so the same docker-compose.yml and .env now work offline with no docker login:
docker compose up -dTo run it without Compose, pass the same three values on the command line:
docker run -d \
--name pharma-bioreactor-demo \
--restart unless-stopped \
-p 4011:4011 \
-p 5021:5021 \
-e EDGE_URL=https://10.0.0.5 \
-e EDGE_API_TOKEN=your-token \
-e SIM_HOST=10.0.0.9 \
us-docker.pkg.dev/litmus-customer-facing/litmus-solutions/pharma-bioreactor-demo:0.5.0Configuration
Variable | Default | What it does |
|---|---|---|
EDGE_URL | the Docker host | Litmus Edge to configure |
EDGE_API_TOKEN | unset | token for that Edge. Or a username and password, or a client id and secret |
SIM_HOST | auto | address the Edge polls to reach this solution |
APPLY_ON_START | 1 | configure the Edge on startup |
EDGE_VERIFY_TLS | 0 | 1 checks the Edge's certificate |
AUTOSTART | 1 | start a batch on boot |
SEED | 11 | makes a run repeatable |
Operator view
The batch runs through its ISA-88 phases along the top: sterilise in place, charge media, growth, harvest. Below, the vessels fill and drain, the agitator turns, and each critical process parameter is shown against the recipe band it has to stay inside.
The environment section is judged across the whole batch rather than sampled, so a room pressure excursion during growth counts against the batch even if the reading has recovered by harvest.
Preview or export the batch record at any point to see what has been recorded so far.
Faults available include parameter excursions, a jacket temperature fault and a cleanroom pressure loss.
Apply and remove
docker compose downUse Clean up in the Solutions provisioner to remove what it created on the Edge.