Nameless Edge Box
Design partners
Turn a PLC into a REST API.
Edge Box sits in the control cabinet next to your PLC. Your code sends named, typed values over REST or WebSocket. Edge Box checks each value against a tag map we write with you, and writes the registers in the PLC's own protocol. If your code, Typed guardrails or the box itself goes quiet, the PLC stops the outputs it controls.
01
Your code
Python, JSON, any HTTP client. Values have names like conveyor.speed_mm_s, not register numbers.
02
Edge Box
Checks the value against the tag's type, range and conditions, then translates it. Anything not on the tag map is refused.
03
Your PLC
Receives an ordinary register write in its own protocol. The only change to the PLC program is one watchdog rung, which we add with you.
What your code sees
GET /plc/line-3/tags
→ every tag with its type, range and whether it can be writtenThe tag map is the API. Nothing else is reachable.
POST /plc/line-3/conveyor
{ "speed_mm_s": 120, "dir": "fwd" }Write. Success means the PLC accepted it, not that the machine moved.
GET /plc/line-3/conveyor
→ { "speed_mm_s": 120, "dir": "fwd", "running": true }Read the current values.
WS /plc/line-3/stream
→ tag changes as they happenSubscribe instead of polling.
POST /plc/line-3/heartbeatYour code or Typed guardrails says it is alive, every 100 ms.
POST /plc/line-3/conveyor
{ "speed_mm_s": 400 }
→ 422 { "reason": "out_of_range", "range": [0, 300] }Refused with a reason. Out-of-range values are never clipped.
The tag map
Our engineers go through your I/O list and PLC program with you and write this file. Each tag has a name, an address, a type, a range and whether it can be written. A new version goes on the box only after both our engineer and your engineer approve it.
plc: line-3
protocol: modbus-tcp
host: 192.168.10.20 # control network port
cycle_ms: 50
heartbeat: { expect_every_ms: 100, timeout_ms: 300 }
watchdog: { addr: HR 40100, every_ms: 100 } # the PLC rung watches this
tags:
conveyor.speed_mm_s:
addr: HR 40001
type: uint16
range: [0, 300]
max_step: 50 # largest change in one write
write: true
requires: [cell.door_closed] # writable only while this is true
conveyor.dir: { addr: HR 40002, type: enum, values: { fwd: 1, rev: 2 }, write: true }
conveyor.running: { addr: DI 10001, type: bool, write: false }
cell.door_closed: { addr: DI 10005, type: bool, write: false }
safe_state:
conveyor.speed_mm_s: 0Addresses that belong to emergency stops, safety PLCs, safety scanners or muting cannot be put in a tag map. The validator refuses them.
Every write goes through the same checks
In this order. The first check that fails refuses the write, and nothing is sent to the PLC.
- 01Write keyThe key switch on the box is set to write. Turn it to read-only and every write is refused, whatever the software says.
- 02Not stoppedThe box has not fallen to its safe state since the last operator reset.
- 03Known tagThe tag is in the tag map and marked writable.
- 04Typeuint16 gets an integer, enum gets one of its names, bool gets true or false.
- 05RangeInside the tag's range. Outside is refused, not clipped.
- 06StepThe change from the current value is within max_step, so nothing jumps.
- 07ConditionsEvery tag in requires is true, read from the PLC on the latest cycle. A stale reading counts as false.
- 08One writerEach tag has one writer at a time. A second client cannot fight the first.
How it stops
A box that can only stop the machine itself is not enough: if the box freezes, nothing stops. So the PLC watches the box. Edge Box increments a watchdog register every 100 ms; one rung in the PLC stops the outputs that Edge Box can command if that value stops changing.
| What goes quiet | Who notices | What happens |
|---|---|---|
| Your code or Typed guardrails | Edge Box: heartbeat missing for 300 ms | Writes the safe state, stops the watchdog, refuses new writes. The PLC rung then stops the outputs too. |
| Edge Box itself | The PLC: watchdog value has not changed | The PLC rung stops the outputs Edge Box can command. Existing run and e-stop circuits are untouched. |
| The link to the PLC | Both sides | Same as above. The API answers 503. |
| Someone turns the key to read-only | Edge Box | All writes refused. Reading and monitoring continue. |
Restart is always by a person: the key set to write, then an operator reset. Edge Box never resumes on its own. It sits on top of emergency stops, safety PLCs and other certified safety functions; it does not replace them.
What's in the box
Pilot units are built from off-the-shelf industrial parts. We will pick the exact model with our first design partners.
| Part | Plan | Why |
|---|---|---|
| Computer | Fanless DIN-rail industrial PC, Intel N100 class, 8 GB RAM, TPM 2.0 | Fits the cabinet, no moving parts, keys stored in hardware |
| Power | 24 V DC from the cabinet supply | Control cabinets rarely have a mains socket |
| Network | Two separate Ethernet ports: one for the control network, one for yours. No Wi-Fi | The box never routes between the two networks |
| Write key | Physical key switch: read-only or write | People on the floor can cut AI writes without a laptop |
| Status lights | Power, PLC link, writes enabled | Anyone at the cabinet can see whether AI can write right now |
| Software | Debian, read-only root, signed A/B updates | A failed update rolls back by itself |
Security
- The control network port and your network port are never bridged, routed or NATed inside the box.
- The API listens only on your network port, over TLS, with a token per client. Each token can be limited to certain tags.
- Nothing on the internet can open a connection to the box. Remote support uses a tunnel the box opens outward, only when you allow it.
- Every write and every refusal is logged with the time, the client, the tag and the value. Kept on the box for 30 days and exportable.
PLCs and protocols
We start with Modbus TCP, which most PLCs can be set to speak. Native protocols come next, in the order our design partners need them.
| Order | Protocol | Typical controllers |
|---|---|---|
| 1 | Modbus TCP | Most PLCs, once enabled |
| 2 | SLMP (MC protocol) | Mitsubishi iQ-R, iQ-F |
| 3 | EtherNet/IP (CIP) | Omron NX/NJ, Rockwell |
| 4 | S7 and OPC UA | Siemens S7-1200, S7-1500 |
Edge Box talks to the PLC, not to field devices. It does not join fieldbuses such as PROFINET or EtherCAT directly.
Getting the first box running
- 01Read the I/O togetherRemotely, with your I/O list and PLC program. We write the tag map.
- 02RehearseRun your code against a PLC simulator, or against real equipment in PAI-Ground, using the same tag map.
- 03InstallDIN rail, 24 V, two network cables. We add the watchdog rung to the PLC with your engineer.
- 04Start read-onlyRun read-only for a few days and check the values match. Then enable writes one tag at a time.
What Edge Box does not do
- Replace emergency stops, safety PLCs or safety laser scanners.
- Write or generate ladder logic, apart from the watchdog rung.
- Plan motion. Trajectories and cycle times stay in your code or the existing PLC program.
- Depend on the cloud. Writing and stopping work with only the box and the PLC.
Build it with us
We are looking for a small number of teams with a real line or cell to connect. Design partners decide which PLCs and protocols come first, and get our engineers for the I/O mapping.
Become a design partner