Shop-floor software that survives a shift change, not just a steering committee.
MES, SCADA/PLC, and ERP integration done by engineers who've debugged OPC UA at 2 a.m. SAP S/4HANA migrations, Ignition and Wonderware extensions, and OT/IT seams that don't take down the line.
Most manufacturing software projects fail at the OT/IT seam — and the consultancy can't tell you why.
You've seen this movie. A six-figure MES rollout that doesn't reconcile with SAP. An Ignition or Wonderware historian feeding three different versions of OEE to three different dashboards. A S/4HANA migration where the production-order interface still runs on a 2008 IDoc the original integrator can't explain. Generalist consultancies show up with PowerPoint reference architectures and offshore teams who've never touched a PLC. The deck looks great. Then a line goes down because someone pushed an MQTT change without understanding Sparkplug B birth/death certificates, and nobody on the project can read a ladder logic diagram.
- ▸ ERP and MES disagree on what was actually produced — finance reconciliations eat 20+ hours per plant per month.
- ▸ OPC UA and Modbus integrations built without proper namespace governance break every time a controls engineer adds a tag.
- ▸ Cloud-first architectures push real-time control data over WAN links, then fail the first time a plant loses connectivity.
- ▸ Legacy SAP ECC customizations — Z-tables, custom IDocs, ABAP user-exits — block S/4HANA migration with no documented owner.
Treat the shop floor like a real distributed system, not a slideware diagram
- STEP-01
Map signals, not org charts
We walk the line with your controls engineers and tag every PLC, historian (PI, Ignition, Wonderware), MES table, and ERP IDoc that actually moves. Output is a signal inventory — what's authoritative, what's derived, what lies. That document kills 80% of integration arguments before code starts.
- STEP-02
Build a thin OT/IT seam
We isolate OT with a Purdue-aligned DMZ — typically MQTT Sparkplug B or OPC UA over a broker like HiveMQ or Kepware, then Kafka or EventHubs on the IT side. No direct PLC reads from corporate apps. Ever. That single rule prevents most production outages we see.
- STEP-03
Modernize ERP in slices
SAP ECC to S/4HANA or Oracle EBS to Fusion is not a big bang. We strangle modules — start with shop-floor confirmations, MIGO postings, or production orders — behind an API gateway. Legacy keeps running. New services own one bounded context at a time until the old system is dark.
- STEP-04
Instrument OEE before optimizing it
Most MES rollouts fail because nobody trusts the numbers. We wire availability, performance, and quality from raw PLC tags with documented math, then reconcile against operator logs for two weeks before anyone sees a dashboard. Trust first, optimization second.
- STEP-05
Hand off with runbooks, not hope
Your controls team and IT ops get written runbooks for every integration: failure modes, replay procedures, tag-mapping spreadsheets, and on-call escalation. We pair with your engineers through two production cutovers before we leave. No black boxes, no consultant lock-in.
# Sparkplug B → Kafka bridge: the seam between OT and IT
# Runs in the DMZ. PLCs publish to MQTT; corporate systems consume from Kafka.
import json
import paho.mqtt.client as mqtt
from confluent_kafka import Producer
from sparkplug_b import sparkplug_b_pb2
producer = Producer({"bootstrap.servers": "kafka.it.internal:9092",
"compression.type": "zstd",
"acks": "all"})
def on_message(client, _userdata, msg):
# Topic: spBv1.0/{group}/{msgtype}/{edge_node}/{device}
_, _, msgtype, edge, device = msg.topic.split("/", 4)
payload = sparkplug_b_pb2.Payload()
payload.ParseFromString(msg.payload)
for metric in payload.metrics:
event = {
"site": edge,
"asset": device,
"tag": metric.name,
"ts_ms": metric.timestamp,
"value": getattr(metric, metric.WhichOneof("value")),
"quality": "GOOD" if not metric.is_null else "BAD",
}
# One Kafka topic per asset class, keyed by asset for ordering
producer.produce(f"shopfloor.{device.split('-')[0]}",
key=device, value=json.dumps(event))
producer.poll(0)
client = mqtt.Client(client_id="otit-bridge-01", clean_session=False)
client.tls_set(ca_certs="/etc/ssl/ot-ca.pem")
client.on_message = on_message
client.connect("mqtt.ot.dmz", 8883, keepalive=30)
client.subscribe("spBv1.0/+/DDATA/+/+", qos=1)
client.loop_forever() This is the boring, correct pattern: PLCs never talk to ERP directly. A DMZ bridge translates Sparkplug B into Kafka events keyed by asset, so MES, ERP, and analytics all consume the same ordered stream.
Field FAQ.
→ Do you replace our MES, or work with what we have (Ignition, Rockwell FTPS, Wonderware, SAP ME)?
We work with what you have, almost always. Ripping out a working MES is a multi-year project with negative ROI in most plants. We extend it — add a modern API layer, fix the broken ERP handshake, build the dashboards your existing MES can't. If your MES is genuinely end-of-life or unsupported, we'll say so directly and scope a phased replacement, but that's the exception.
→ How do you handle SAP ECC to S/4HANA migration without freezing production?
Strangler pattern, module by module. We put an API gateway in front of ECC, route specific transactions (production confirmations, goods movements, batch records) to new S/4 services as they're ready, and keep ECC authoritative for everything else. Cutovers happen on weekends per module, not in one terrifying big-bang weekend. Typical engagement runs 9-18 months depending on customizations and number of plants.
→ Are you SDVOSB certified, and can you work on DoD manufacturing programs?
Yes. VooStack is SDVOSB-certified and veteran-owned, eligible for set-aside contracts under FAR 19.14. We've worked on programs touching CMMC 2.0 Level 2 environments, ITAR-controlled technical data, and DFARS 7012 requirements. For defense industrial base manufacturers, we can operate inside your enclave or stand up a compliant dev environment. Bring your contracting officer into the first call and we'll confirm vehicle eligibility.
→ What's your position on cloud vs on-prem for shop-floor systems?
Control loops stay on-prem. Period. Anything with sub-second timing requirements or safety implications runs at the edge. Historians, MES analytics, ERP, quality systems, and ML workloads belong in the cloud or a regional data center. The seam is the DMZ broker. We've seen too many consultancies push full-cloud architectures that fall over the first time a plant loses WAN connectivity for 20 minutes.
→ Can AI actually do anything useful on a shop floor, or is it hype?
Both. Predictive maintenance on rotating equipment with good vibration data works and pays back. Vision-based quality inspection on well-lit, repeatable parts works. LLMs are useful for operator-facing knowledge retrieval — pulling the right SOP, summarizing shift handoffs, querying historians in natural language. What doesn't work yet: autonomous scheduling on complex multi-constraint lines, or any LLM making safety-critical decisions. We'll tell you which bucket your use case falls into.
→ How do you handle OT cybersecurity during integration work?
We follow IEC 62443 zone-and-conduit principles and align to NIST 800-82. New connections cross a documented conduit through the DMZ — no flat networks, no direct corporate-to-PLC paths, no jump boxes with shared passwords. We coordinate with your OT security team or, if you don't have one, your IT security team plus the controls integrator. Every change goes through a documented MOC process. We've never caused an unplanned production stop from a security misconfiguration, and we intend to keep it that way.
→ What does a typical engagement look like in terms of team size and timeline?
Discovery and signal inventory: 3-5 weeks with one senior architect and a controls SME from your side. Build phase: 2-4 senior engineers for 4-9 months depending on scope. We don't staff with junior offshore teams — every engineer on a manufacturing engagement has shipped industrial software before. Most clients see first production value (a working integration, a real dashboard, a migrated module) within 8-12 weeks of contract signing.
→ We have 14 plants on different systems. How do you avoid building 14 one-off integrations?
Canonical event model first. We define what a 'production confirmation' or 'downtime event' looks like in your enterprise — once — then build site-specific adapters that translate local PLC tags, MES schemas, and ERP plant codes into that canonical shape. Adapters are small and per-site; everything downstream (analytics, ERP postings, executive dashboards) consumes the canonical stream. New plants take weeks to onboard, not quarters.
→ Do you do staff augmentation, or only fixed-scope projects?
Both. For manufacturers with internal platform teams, we embed senior engineers — typically 2-6 — under your tech lead on a time-and-materials basis. For clients who want an outcome delivered, we scope fixed-bid milestones with clear acceptance criteria. Most engagements blend the two: fixed-scope discovery and architecture, then T&M build with named engineers. We don't do body-shop staffing with rotating resumes.
Continue recon.
Integration Services
MES, ERP, SCADA, and AI integration scoped by senior engineers.
REL-02Manufacturing Case Studies
How we approach OT/IT, ERP modernization, and plant rollouts.
REL-03Engagement Packages
Fixed-scope discovery, architecture sprints, and embedded build teams.
REL-04Talk To An Engineer
First call is with a senior architect, not a sales rep.
Bring us your shop floor, your SAP instance, and your worst integration. We'll tell you what's actually fixable.
Talk to a VooStack operator. We respond within one business day.