The question behind every gateway purchase: should the device be polled, or should it publish?
| Modbus TCP | MQTT / Sparkplug B | |
|---|---|---|
| Specification | Modicon Modbus, TCP encapsulation (Modbus-TCP) | OASIS MQTT 3.1.1 / 5.0, Eclipse Sparkplug B |
| First published | 1979 (serial), 1999 (TCP) | 1999 (MQTT), 2016 (Sparkplug B) |
| Transport | TCP, port 502 | TCP 1883, TLS 8883, via a broker |
| Data model | Flat 16-bit registers and single-bit coils. No types, no names, no metadata: a register is a number at an address. | MQTT itself carries opaque bytes on a topic. Sparkplug B adds a protobuf payload, a topic namespace, and birth/death certificates so state is knowable. |
| Discovery | None. You need the vendor's register map, usually a PDF. | Sparkplug B birth certificates announce metrics on connect. Plain MQTT: none. |
| Security | None in the base specification. Whatever the network gives you. | TLS plus broker-level authentication and topic ACLs. |
| Polling or subscription | Polling only. The client asks; the device answers. | Publish/subscribe, report-by-exception. The device pushes when a value changes. |
| Implementation complexity | Lowest of any protocol here. A working client is ~200 lines. | Low to implement, moderate to operate: the broker becomes infrastructure you own. |
| Typical industries | Everything. Drives, meters, inverters, sensors, PLCs, BESS. | IIoT gateways, distributed and remote assets, energy, anything behind a cellular link. |
| Forge support | Adapter shipped. 19 verticals mapped. | Adapter shipped. 19 verticals mapped. |
Strength. Universal, trivial to implement, works on hardware from 1985.
What it costs you. Carries no semantics whatsoever. Scaling, byte order and register meaning all live outside the protocol.
Modbus TCP adapter →Strength. Report-by-exception over an expensive or unreliable link. One broker fans out to many consumers.
What it costs you. Plain MQTT has no schema at all: the payload is whatever the publisher decided that day.
MQTT / Sparkplug B adapter →Polling is a choice you make once and pay for continuously; publish/subscribe is a choice you make once and operate forever. Modbus over a LAN with a hundred devices is fine. Modbus over a cellular link to a hundred remote sites is a bandwidth bill and a latency problem, and that is where Sparkplug B earns its keep.
Forge is not an argument for a protocol. It is the layer that makes the choice stop mattering downstream: 2,086 curated mappings across 13 protocol adapters, resolving to 985 canonical fields defined with enforced units and physics bounds.
Two devices, two protocols, two vendors, two entirely different tag names, and one canonical field out. Both of these are real mappings from the corpus, not illustrations.
Same field: part_count. Same unit contract, same physics
bounds, same shape. Your query does not need to know which protocol the reading
arrived on.