solutions / machine data integration
Plant · IIoT · BASF
The layer that teaches the line to talk.
The hardware bridge under BASF's plant systems - polling PLC registers over Modbus TCP and turning wire signals into records software can use.
Where this started
Everything the plant's software knows begins as a number in a controller. Before the andon system or the dashboards could exist, someone had to get those numbers out - reliably, continuously, and translated into something a business application can reason about. This is that layer.
Decision 01
Poll the registers, own the protocol.
The bridge reads PLC holding registers continuously over Modbus TCP - one block for station signals, one for request codes. Raw wire values become typed states: 100 is idle, 300 is a call, 400 an acknowledgement, 500 a block. An active-call stack deduplicates, so one held button never becomes ten records.
Decision 02
Configuration over code.
Stations and devices are data, not hardcoded wiring. Each station maps to its register; respondent consoles and touch panels are registered with a type and a description. Adding a station to the line is an admin screen, not an integration project.
Decision 03
One bridge, many consumers.
The layer writes each event once - a cycle with its full transition history in PostgreSQL - and everything above consumes it: the andon call flow, the MTBF/MTTR analytics, the running-status wall. New consumers cost nothing at the integration level.
The result
The bridge is the least visible thing we built for BASF and the reason everything else works. Signals leave the controllers in milliseconds, arrive as clean typed records, and two production systems run on top without ever speaking Modbus themselves.
Wire codes become typed records
Register values translated to call states with deduplication - written once with full history.
The plant is configuration
Stations map to registers and devices carry types - changes happen in admin screens, not code.
Two systems on one bridge
Andon calls and operations analytics both run on the same event stream.
Under the hoodNode.js · modbus-serial · Modbus TCP · PostgreSQL
Bring us the problem↗