Architecture
How this system is put together, and why. Everything on this page is implemented in the repository this console ships with — the diagrams describe running code, not a proposal.
Principles
Six rules that decide every other question
01Decide locally, learn centrally
The camera-to-PLC path runs entirely on the edge PC with a frozen model bundle. Nothing on that path depends on a network, a cloud service or a person. Training, labelling, monitoring and release management live on the central platform.
02The vision system decides; the PLC acts
Reject and divert are executed by the PLC on a hard-wired signal with a watchdog. The AI never drives an actuator directly, and the watchdog acts on the absence of a heartbeat rather than on anything the station has to remember to send.
03No silent PASS
A part is passed automatically only when the evidence is valid — correct recipe, usable views, healthy models, on-time result — and the frozen policy says PASS. Every other case is a HOLD, and a person sees it.
04Everything that affects a decision is versioned together
Model, pre-processing, class map, thresholds, policy and camera recipe ship as one signed bundle with one hash. Each station records which bundle made each decision, so a decision can be reproduced rather than merely remembered.
05Evidence before actuation is complete
The image, the scores, the action and the PLC acknowledgment are written to a durable local buffer before the transaction is considered complete. Upload is asynchronous, and a station that cannot upload keeps inspecting.
06Secure by zone
IEC 62443-style zoning. The cell initiates every connection outbound; there are no inbound ports, no plant credentials on the edge, and only signed artefacts are ever loaded.
One station
What is on the synchronous path, and what is beside it
Zones and conduits
Which way connections are opened
Storage and bandwidth
The sizing model, live. Move the assumptions and the answer follows
The platform is not answering; the calculator runs there.
Coded reasons
Every decision carries one. Exactly one of them permits an automatic pass — that is the no-silent-PASS rule, made checkable
| Code | What it means | Kind | Default | May pass? |
|---|---|---|---|---|
| 0 | Part passed inspection. | pass | PASS | yes |
| 101 | Image is out of focus. Check focus and vibration. | evidence | HOLD | — |
| 102 | Image is over- or under-exposed. | evidence | HOLD | — |
| 103 | Reflection covers part of the inspected area. | evidence | HOLD | — |
| 104 | No part found in the inspection area. | evidence | HOLD | — |
| 105 | Part is outside the region of interest. | evidence | HOLD | — |
| 106 | Not every required view was captured. | evidence | HOLD | — |
| 107 | Could not align the part to the template. | evidence | HOLD | — |
| 108 | Frame was dropped; previous part still in flight. | evidence | HOLD | — |
| 109 | Camera did not deliver a frame in time. | evidence | HOLD | — |
| 110 | Lighting is outside the recipe limits. | evidence | HOLD | — |
| 111 | Image is too noisy to judge. Check gain and sensor temperature. | evidence | HOLD | — |
| 201 | Known defect detected with high confidence. | defect | REJECT | — |
| 202 | Result is not confident enough to decide automatically. | defect | HOLD | — |
| 203 | Score sits on the decision threshold. | defect | HOLD | — |
| 204 | Classifier and anomaly model disagree. | defect | HOLD | — |
| 205 | Mark found but smaller than the size limit for its class. | defect | HOLD | — |
| 206 | Rejected by a rule specific to this part number. | defect | REJECT | — |
| 301 | Part does not look like anything the model has seen. | novelty | HOLD | — |
| 302 | Anomaly score is high but no known defect class matches. | novelty | HOLD | — |
| 303 | Appearance has drifted away from the reference set. | novelty | HOLD | — |
| 401 | Result arrived after the divert deadline. | timing | HOLD | — |
| 402 | Result belonged to an earlier part and was discarded. | timing | HOLD | — |
| 403 | PLC did not confirm the decision. | timing | HOLD | — |
| 404 | A result for this part was already delivered. | timing | HOLD | — |
| 501 | Inference is not healthy. Part held. | health | HOLD | — |
| 502 | Station is running degraded. Part held. | health | HOLD | — |
| 503 | Active model does not cover the selected part number. | health | HOLD | — |
| 504 | Policy version does not match the model bundle. | health | HOLD | — |
| 505 | Evidence storage is full. Part held. | health | HOLD | — |
| 506 | Golden-image self-test failed. | health | HOLD | — |
| 507 | Station is in maintenance. Part not inspected. | health | HOLD | — |
| 508 | Station is in shadow mode. Result recorded, not actuated. | health | HOLD | — |
| 509 | Station produced no result for this part. | health | HOLD | — |
| 601 | Passed by an operator after review. | disposition | PASS | — |
| 602 | Rejected by an operator after review. | disposition | REJECT | — |
| 603 | Passed by a quality engineer after review. | disposition | PASS | — |
| 604 | Rejected by a quality engineer after review. | disposition | REJECT | — |
| 605 | Defect confirmed downstream on a passed part. | disposition | REJECT | — |