Skip to content

JasperNode vs. a traditional PLC

If you program PLCs, much of JasperNode will feel familiar — tags, I/O mapping, cyclic logic, an engineering tool. But the underlying model is different in a few load-bearing ways. This page is the honest comparison: what transfers, what changes, and what a PLC still does better today.

  • Tags and I/O mapping. You still bind named values to device registers and organise them into a hierarchy. JasperNode’s factory/line1/temperature is the same idea as a symbolic tag in TIA or a UDT member in Studio 5000.
  • Reading the field, running logic, driving outputs. The job is unchanged: acquire inputs, compute, command outputs, on a cycle.
  • Fieldbuses you know. Modbus (TCP/RTU), EtherCAT, Siemens S7, serial — JasperNode talks the same protocols.
  • An engineering environment. There is a single tool to configure I/O, write logic, watch live values and commission. It happens to run in a browser.

A PLC keeps several separate worlds: the I/O image, data blocks/tags, the program organisation blocks, hardware configuration, and HMI tags — each edited in its own editor and stored its own way.

JasperNode collapses all of that into one live tree of tags. A sensor value is a tag. A setpoint is a tag. A connector’s configuration is a tag (__sys/node/user/connectors/modbus/<id>/config). The operating mode is a tag. System metrics are tags. There is no separate “config store” or “I/O table” to learn — if you can browse and edit tags, you can see and change the entire node. See Everything is a tag.

A classic PLC runs a cyclic scan: every program block executes every scan, top to bottom, whether or not anything changed (Siemens OB1, Rockwell continuous MainTask).

JasperNode’s Logic Cycle is event-driven. A tag script runs only when one of its declared trigger tags actually changes value. If nothing changed, nothing runs. The closest PLC analogy is an interrupt OB (an event task), not OB1. This makes data flow explicit and cheap — you are never burning a scan on logic whose inputs are static.

The trade-off is timing. An event-driven soft cycle is excellent for reactive and supervisory logic but is not hard real-time. A deterministic, time-driven High Performance Cycle (sub- millisecond, compiled) is on the roadmap for continuous control and the safety story; it is not in the current release. For today, treat the Logic Cycle as supervisory/reactive logic, and keep hard, fast, safety-rated loops on dedicated hardware. See Logic & the Logic Cycle.

3. Logic is JavaScript attached to a tag — with one writer per tag

Section titled “3. Logic is JavaScript attached to a tag — with one writer per tag”

Instead of ladder, structured text or function blocks in a vendor IDE, a JasperNode script is a small async JavaScript function that lives on a tag. It declares which tags it reads (triggers and extras) and computes a new value for its own tag only.

That last rule is deliberate and is the biggest mental shift: a script can set only its own tag’s value. To affect another tag, you write your own and let that tag’s subscribers react. Side effects propagate through an explicit, static dependency graph rather than through scattered writes. The benefits are traceability (you can always see what drives a value), safe testing, and clean AI reasoning. The cost is that “write a dozen outputs from one routine” becomes “a dozen tags each owning their own logic”.

This pairs with an atomic-tag-set rule shared with PLC practice: in normal operation each tag has exactly one writer. If an enabled connector owns a tag as an input, scripts cannot also write it — just as you would not have two routines fighting over one output coil.

4. Development is AI-first, with test-before-deploy built in

Section titled “4. Development is AI-first, with test-before-deploy built in”

A PLC change is a manual edit followed by a download. JasperNode adds a built-in AI agent that can explore the tree, write logic and configure connectors through chat — and a runtime Deploy Gate that sits in front of process-affecting changes.

Depending on the node’s mode (development / commissioning / production), a logic change is tested against synthetic or live values — and, in commissioning and production, its downstream effects are re-simulated — before a human signs off and the change flips live atomically. Every transition is written to an audit trail. This is closer to “CI with a sign-off step” than to “download to the PLC”. See The AI agent & Deploy Gate.

5. Connectors are modular and software-defined

Section titled “5. Connectors are modular and software-defined”

PLC I/O is largely tied to the vendor’s hardware catalogue and firmware. JasperNode connectors are software modules you add, configure, enable and remove at runtime — physical buses (Modbus, EtherCAT, S7, serial), network/cloud endpoints (MQTT incl. Sparkplug B, InfluxDB, a Modbus slave server, an HMI server) and built-in services. New connector types can be added without changing the core runtime. See Connectors and the Connector catalog.

Every value supports MQTT-style wildcard subscriptions (factory/+/temperature, factory/#), optional per-tag history, and a traceable dependency graph you can walk in the UI (the Flow Exploration view shows a value’s upstream causes and downstream effects). Data is not locked inside a proprietary runtime — it is one tree, subscribable and exportable.

JasperNode is a single binary (or container) on a standard Linux device — an ARM edge gateway, an industrial PC, or a server — not dedicated PLC hardware. That lowers cost and eases integration with IT systems, at the price of choosing and maintaining the host yourself.

AspectTraditional PLCJasperNode
Data modelSeparate I/O image, data blocks, HW configOne live tag tree; config and state are tags
ExecutionCyclic scan (OB1 / MainTask)Event-driven Logic Cycle (like an interrupt OB); time-driven HPC roadmap
Logic languageLadder / ST / FBD in a vendor IDEAsync JavaScript attached to a tag
Write modelRoutines write many tagsOne writer per tag; a script writes only its own tag
Engineering toolVendor desktop IDEBrowser IDE served by the runtime
Change workflowEdit → downloadAI-assisted edit → test → sign-off → atomic deploy + audit
I/OVendor hardware catalogueSoftware connectors, added/removed at runtime
HardwareProprietary PLCCommodity Linux (edge device to server)
ObservabilityVendor tools, tag tablesWildcard subscriptions, history, dependency-graph views

This is a development release; be clear-eyed about it:

  • Hard real-time determinism. The shipping Logic Cycle is event-driven and soft real-time. The deterministic High Performance Cycle is roadmap. For fast, jitter-sensitive control loops, a PLC (or JasperNode’s future HPC on suitable hardware) is the right tool.
  • Safety certification. JasperNode is not yet safety-certified. It targets IEC 61508 SIL-3 in a later release on certified hardware (the CODESYS Safety / TwinCAT Safety model: certified runtime
    • certified hardware + customer application). Until then it is auditably safer at the supervisory layer — through change control, mode-gated AI, atomic deploy, separation of duties and safety/non-safety segregation — but it does not replace a safety PLC for SIL-rated functions.
  • Ruggedised, certified hardware with vendor support and long lifecycles is a mature ecosystem; a Linux host is your responsibility to select and maintain.

The aim is not to discard the PLC model but to keep what works (tags, I/O mapping, cyclic intent) and remove what slows teams down (siloed data, opaque change control, vendor lock-in), with AI assistance throughout.

You know it as…In JasperNode it’s…
Symbolic tag / UDT memberA tag at a path (factory/line1/temp)
I/O mapping in HW configA connector mapping row (name, space, address, direction, type)
OB1 / continuous MainTask(Roadmap) the time-driven High Performance Cycle
Interrupt / event OBThe event-driven Logic Cycle
Routine / function blockA script attached to a tag
Online edit + downloadEdit → test → sign-off → atomic deploy
Retentive memoryPersisted tags (non-retentive = a memory-only tag)
Forcing an inputDisable the owning connector, then script/UI-write the tag