FoundryNet / Compare / J1939 (CAN) vs OPC UA
Protocol comparison

J1939 (CAN) vs OPC UA

The mixed-fleet question — a company that runs both vehicles and a plant, and wants one data layer over both.

Get an API key All 14 adapters

Side by side

The comparison

J1939 (CAN)OPC UA
SpecificationSAE J1939IEC 62541
First published19942008
TransportCAN 2.0B, 29-bit identifiers, 250 or 500 kbit/sTCP binary on 4840, or HTTPS
Data modelPGNs (parameter group numbers) containing SPNs (suspect parameter numbers) — a fixed, published dictionary of what each bit field means.A full information model: typed nodes, references, objects, methods and historical access. The richest model in industrial automation.
DiscoveryNone needed: the dictionary is the standard. Address claiming identifies nodes.Built in. Browse the address space, read the type definitions.
SecurityNone. It is a vehicle bus.Built in and mandatory to configure: X.509 certificates, signing, encryption, user authentication.
Polling or subscriptionBroadcast at fixed rates. Everything on the bus hears everything.Both. Polled reads and subscriptions with monitored items and dead-banding.
Implementation complexityModerate — bit-level decoding and multi-packet transport, but against a published spec.High. The stack is large, certificate handling is a real operational task, and server implementations vary.
Typical industriesHeavy-duty and off-highway vehicles: trucks, agriculture, construction, gensets.Modern machine tools, robotics, packaging, anything specified after ~2015.
Forge supportAdapter shipped. 11 OEM families mapped.Adapter shipped. 23 OEM families mapped.

Where each one wins

J1939 (CAN)

Strength. Genuinely standardised semantics. SPN 190 is engine speed on every compliant vehicle ever built.

What it costs you. Manufacturer-proprietary PGNs sit alongside the standard ones and are documented nowhere.

J1939 (CAN) adapter →

OPC UA

Strength. Self-describing. You can walk a server you have never seen and learn what it holds.

What it costs you. Self-describing is not the same as standardised — two vendors model the same machine differently, so the names still need mapping.

OPC UA adapter →

These are not alternatives; they never meet on the same wire. The reason to compare them is that a fleet operator and a plant manager inside the same company are each holding a different, incompatible telemetry stack, and someone above both of them wants one number. J1939 has better standardised semantics than OPC UA does — SPN 190 means the same thing on every truck — but it stops at the vehicle.


The Forge angle

Whichever one you pick, the output is the same

Forge is not an argument for a protocol. It is the layer that makes the choice stop mattering downstream: 16,908 curated mappings across 14 protocol adapters, resolving to 366 canonical fields with enforced units and physics bounds.

These two protocols do not carry a canonical field in common in the corpus — they serve different domains, and pretending otherwise would make a better diagram and a worse answer. What they do share is the output schema.

J1939 (CAN) — Caterpillar

{"SPN_100": 1450}
# normalized
{"vehicle.engine.oil_pressure": 1450}

OPC UA — Fanuc

{"Spindle_Speed": 1450}
# normalized
{"spindle_speed_rpm": 1450}

Different fields, different domains, one schema and one query surface across both.

# Try it against both, with no key and no account
docker run -p 8000:8000 ghcr.io/foundrynet/forge-sandbox

Keep reading

The protocol you pick matters less than the schema underneath. The Machine Agent, weekly. Read it →
Get the thesis behind this infrastructure — The Machine Agent, weekly.