Injection Molding Cell
A four-machine injection moulding cell on shared utilities, read by one Litmus Edge over two protocols at once: the moulding machines over OPC UA in the EUROMAP 77 shape, and the central dryer, mould temperature control units and chiller over Modbus TCP. Eight devices, 158 tags.
Operator view | port 4022 |
|---|---|
OPC UA, the four machines | port 5032, opc.tcp://<host>:5032/litmus/plastics/ |
Modbus TCP, the four utilities | port 5132 |
Devices and tags | 8 devices, 158 tags |
Litmus Edge drivers | OPC UA Client Advanced, Modbus TCP |
Image | plastics-molding-demo |
Overview
Two Engel victory 150s run eight-cavity polyamide connector tools, an Arburg 570 A runs a four-cavity PBT sensor body, and a Husky HyPET 650 runs a two-cavity polyethylene crate. One central desiccant dryer feeds the three machines on hygroscopic resin, two mould temperature control units hold the tools, and a chilled water plant cools both units.
Device | What it is | Protocol |
|---|---|---|
IMM 01, IMM 02 | Engel victory 150, eight-cavity PA66-GF30 connector tools | OPC UA |
IMM 03 | Arburg 570 A, four-cavity PBT-GF30 sensor body | OPC UA |
IMM 04 | Husky HyPET 650, two-cavity HDPE stacking crate | OPC UA |
Central dryer | Wittmann Drymax 300, feeding IMM 01 to 03 | Modbus TCP |
Mould TCU 01, TCU 02 | Regloplas 150S, TCU 01 on IMM 01 and 02, TCU 02 on IMM 03 and 04 | Modbus TCP |
Chilled water plant | Frigel 3PR, serving both TCUs | Modbus TCP |
It is the first solution in the set on EUROMAP 77, and it splits its protocols by asset, which is how a real moulding shop is wired: the machines carry a modern OPC UA interface, the auxiliaries carry a Modbus register map. The question the cell answers needs both, because a cause in a shared utility only shows when its reading is joined to the machines it feeds.
The simulated clock runs at 8x real time, so a cycle of 16 to 52 seconds is watchable and a dryer losing its dew point plays out over minutes rather than an hour.
Scenarios
Three scenarios ship with the solution. None of them trips an alarm: every shot stays inside its machine's own limits, and the cause shows only in readings Litmus Edge joins.
- Check ring wear on IMM 01. The non-return valve on the screw tip wears, so melt leaks backward past it a different amount every shot. The cushion turns erratic before its average moves, the shot volume is wound up to cover the worst shot, recovery takes longer, and once recovery runs past cooling the cycle stretches past its quoted time. The Edge prices the lost capacity at the machine's hour rate.
- A gate freezing off in cavity 6 of IMM 02. One gate of the eight-cavity tool partly freezes, so that cavity fills last and packs least, and one part in eight comes out light. The machine's shot weight barely moves, because the melt cavity 6 did not take packs into the other seven. Only the cavity pressure sensors see it.
- Dryer regeneration failure. The desiccant beds stop regenerating, the drying air loses its dew point, and the polyamide and PBT leave the hopper carrying water. Wet resin hydrolyses in the barrel, so fill time and peak injection pressure fall on IMM 01 to 03 at the same moment: the parts mould more easily, pass every dimensional check, and are mechanically weaker. IMM 04 runs polyethylene, which is not dried, and stays flat as the control.
The EUROMAP 77 address space
EUROMAP 77 (OPC 40077) is the OPC UA companion specification for injection moulding machines. It gives every machine the same folder structure, so a client finds the cushion, the cycle time or the job counters in the same place whatever the make. Each machine is published under Objects/Machines/<device>/ with:
Folder | Carries |
|---|---|
MachineInformation | manufacturer, model, serial number and machine name, browsed rather than polled |
MachineStatus | machine status and the machine clock |
Jobs/ActiveJobValues | cycle and part counters, cycle time against its setpoint, cavities run, order quantity |
InjectionUnits/InjectionUnit_1 | fill and recovery time, peak and hold pressure, cushion, shot weight and volume, nozzle and barrel zone temperatures |
Moulds/Mould_1 | mould half temperatures, cooling time, and one Cavities/Cavity_<n> folder per cavity pressure sensor |
The register name on the OPC UA driver is the string node id, for example ns=2;s=PI1_IMM01.InjectionUnits.InjectionUnit_1.ActVolCush. The four job counters use their EUROMAP 77 browse names (JobCycleCounter, JobPartsCounter, JobGoodPartsCounter, JobBadPartsCounter); every other variable keeps its EUROMAP 63 name, such as ActVolCush, ActPrsInjPeak, ActTimPlst and ActPrsCav6, which is the vocabulary moulders already use.
The utilities are four Modbus TCP stations behind one port, told apart by unit id: 21 for the dryer, 31 and 32 for the TCUs, 41 for the chiller. Representative registers: DryDewPointC, MoisturePpm, RegenTempC, SupplyTempC, DeltaTempC, CoolingLoadKw, CopRatio.
What it creates on Litmus Edge
Component | Created |
|---|---|
DeviceHub | 4 devices on OPC UA Client Advanced and 4 on Modbus TCP, 158 tags |
Digital Twin | 4 models, 8 instances |
Analytics | 5 groups, 140 processors |
The four moulding machines are four instances of one model, InjectionMouldingMachine, and the two temperature units are two instances of MouldTemperatureUnit. The dryer is ResinDryer and the chiller ChilledWaterPlant.
Analytics group | Computes, on the Edge |
|---|---|
Cushion Stability | cushion against the shot volume's creep over its setting, recovery margin against cooling, cycle over quote and the capacity lost an hour, per machine |
Cavity Balance | every cavity's peak pressure against the tool's mean, the lowest cavity and how light it is packing, per machine |
Resin Moisture | the dryer's dew point, moisture and regeneration temperature joined to each machine's injection pressure and fill time, with the suspect parts priced an hour |
Moulding Performance | machine state, cycle against quote, scrap rate, and resin given away over the design shot weight, per machine |
Cooling Utilities | heat each TCU removes from its tools and how far supply sits off setpoint, and the chiller's coefficient of performance |
Every script returns a verdict rather than throwing when an input has no value, so a device that stops answering reads as "no reading from the device" instead of stalling Analytics. The apply is sent in three parts, DeviceHub, then Digital Twin, then Analytics, so the devices land and poll even if a later part does not complete.
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
- A network path in both directions: the solution reaches the Edge's API, and the Edge reaches this host on ports 5032 and 5132
Deploy
The solution is deployed with a compose file. It publishes three ports, and both protocol ports matter: an Edge that cannot reach 5032 or 5132 configures cleanly and then reads nothing from that half of the cell.
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:
plastics-molding:
image: us-docker.pkg.dev/litmus-customer-facing/litmus-solutions/plastics-molding-demo:0.5.1
container_name: plastics-molding-demo
restart: unless-stopped
ports:
- "4022:4022"
- "5032:5032"
- "5132:5132"
environment:
# Fill these in.
EDGE_URL: "${EDGE_URL:-}"
EDGE_API_TOKEN: "${EDGE_API_TOKEN:-}"
SIM_HOST: "${SIM_HOST:-auto}"
# Or use one of the other Litmus Edge auth schemes instead of a token.
EDGE_CLIENT_ID: "${EDGE_CLIENT_ID:-}"
EDGE_CLIENT_SECRET: "${EDGE_CLIENT_SECRET:-}"
EDGE_USERNAME: "${EDGE_USERNAME:-}"
EDGE_PASSWORD: "${EDGE_PASSWORD:-}"
APPLY_ON_START: "${APPLY_ON_START:-1}"
EDGE_VERIFY_TLS: "${EDGE_VERIFY_TLS:-0}"
HTTP_PORT: "4022"
OPCUA_PORT: "5032"
MODBUS_PORT: "5132"
LOG_LEVEL: "INFO"Put the three values in a .env file beside it:
EDGE_URL=https://10.0.0.5
EDGE_API_TOKEN=your-token
SIM_HOST=10.0.0.9Start it:
docker compose up -dOption 2: load the downloaded archive
Download plastics-molding-demo-0.5.1-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 plastics-molding-demo-0.5.1-amd64.tar.gzdocker load prints the image it added:
Loaded image: us-docker.pkg.dev/litmus-customer-facing/litmus-solutions/plastics-molding-demo:0.5.1That 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 -dOpen http://localhost:4022. Within about a minute the Edge is configured and the page fills in.
The page stays on its waiting panel until the Edge carries all eight devices and is polling them. The simulation does not tick and no value is shown until then, 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.
Configuration
Variable | Default | Purpose |
|---|---|---|
EDGE_URL | unset | Litmus Edge to configure, for example https://10.0.0.5 |
EDGE_API_TOKEN | unset | token for that Edge. Alternatively EDGE_USERNAME and EDGE_PASSWORD, or EDGE_CLIENT_ID and EDGE_CLIENT_SECRET |
SIM_HOST | auto | address the Edge polls to reach both protocol servers |
APPLY_ON_START | 1 | configure the Edge on startup |
EDGE_VERIFY_TLS | 0 | 1 verifies the Edge's certificate |
SIM_HOST requires attention. The one address is written into both halves of the template: the OPC UA server URL of the four machines and the Modbus TCP address of the four utilities. Leave it auto when the solution runs on the Edge itself or with host networking. Otherwise set it to the address of the host running the solution, as the Edge sees it.
An incorrect value fails quietly: the devices are created and no tag ever reads a value. The solution refuses to apply a template whose address is obviously unreachable, and does not open its page until the Edge reports the devices as polling, not just present.
Operator view
The page opens with what you are looking at and the question it answers: is the cell still making good parts at the cycle it was quoted, and when it is not, is the cause one screw, one cavity, or a utility every machine shares?
Five figures follow, each naming the machine it comes from: cushion spread, cavity balance, the dryer's dew point with the resin moisture at the hopper, cycle over quote, and cost per shift.
Below that is an animated mimic of the cell. Each machine cycles at its own pace, clamp closing, screw injecting and recovering, cavities filling with each shot. Clicking any machine or utility opens its Digital Twin instance: the model, its static attributes and every dynamic attribute with its live value and topic.
The rest of the page follows the process: the screw, as the last 25 shots of cushion on each machine against its nominal and the floor where the screw bottoms out; the tool, as peak pressure in every cavity against each tool's mean; and the dryer, as the dew point trend and each resin's moisture against its own limit. A section then shows the last result of every Analytics processor, read back from the Edge, so the verdicts are the Edge's rather than the page's.
Each scenario has a card naming the Analytics group that catches it and the DataHub topics to watch, beside the event log.
Apply and remove
The header carries both controls. Apply to Edge pushes the devices, twins and analytics, and greys out once the solution is on the Edge. Remove from Edge previews first, listing what would be removed and from which Edge, then offers to remove it.
The solution removes only what it created, and records which Edge its apply landed on, so repointing at a different Edge cannot leave a solution stranded on the first one. Clean up in the Solutions provisioner does the same.
Reports
Preview report and Export report produce the shift report as one self-contained HTML file, inline charts and no scripts, so it opens offline, emails and prints. It carries the five figures, what the run cost, a row per machine, cavity pressure, the dryer dew point, the faults injected, what Litmus Edge computed, and the Litmus Edge configuration that produced it.