Skip to content

    Event Engine®/For plant operations

    The middleware that watches itself.

    Configured in a browser, not written in code. Every event timed, traced and judged against its own history — so the one that is slowly going wrong tells you weeks before it stops the line, and the one that just failed tells you exactly where.

    Fully functional · 30 days · no credit card · no sales call — Requires Windows, SQL Server or Oracle, and a PLC or OPC server

    Configured, not coded

    The person who maintains it in three years is not the person who built it

    That is the real test of plant-floor software, and custom code fails it every time.

    Everything in Event Engine® is built, changed and monitored through the browser interface: processors, tags, structures, triggers and events. No programming, no scripting language to learn, no compiled assembly that only its author understands, and no source file living on somebody's laptop.

    The consequence is the one that matters at two in the morning. A change is a form, not a deployment. The engineer who did not build the system can still read it, because what is on the screen is the configuration itself rather than a representation of code somewhere else.

    • Changes go in live. Add and edit events without restarting the service or disturbing the rest of the operations.
    • Access is controlled by role. Mapped to Windows or Active Directory groups — a general role that views and operates, an admin role that configures.
    • Nothing to install to use it. Any browser on the plant network. No engineering workstation client, no VPN session to look at an event.
    • The configuration is portable. Export items as JSON, back the whole thing up as a ZIP, restore it onto a new host.
    • It reads in three languages. English, Spanish (es-MX) and German (de-DE), remembered per Windows user.

    A change is a form, not a deployment.

    Diagnostics

    When it fails at 2 a.m., find out why at 2:01

    The hard part of a middleware fault has never been fixing it. It is finding out what happened, hours later, from a system that recorded only that things finished.

    Event Engine® records what was attempted, what the controller returned, what the database returned, and where in the sequence it stopped — per event, with status, timing and search. Nothing has to be reproduced in order to be studied, which matters because the conditions that produced it are usually gone.

    Three phases, timed separately

    Every execution is broken into the parts that can actually be slow, and each is measured on its own: tag collection — reading the controller; work — the database call, the print job, the message; and write-back — returning results and the completion code to the PLC.

    This is the difference between "the data collection is slow" and knowing which of the middleware, the database or the network is responsible. Event Engine® will not fix a database that is genuinely the problem — but it will stop the argument about whose problem it is, in the first minute rather than the second week.

    Alongside it: a system dashboard with run state, total event calls, events and errors in the last hour, and a rolling error list; per-event success rate with minimum, maximum, last and average durations; and manual trigger and counter reset for commissioning. Statistics, status and errors stream to the open page as they happen — no refreshing to see whether something changed.

    The Event History page: one row per execution with dispatch, duration, tag collection, work and write-back times in milliseconds, and an expanded row showing the trigger, connection, stored procedure, command timeout, tags read and written, slowest device read and write, database connect and database execute times.
    Every execution, timed in the open. The columns are the phases — dispatch, tag collection, work, write-back — and expanding a row gives the rest: which trigger fired and with what value, which procedure ran, what its command timeout was, how many tags were read and written and which device was slowest, and the database connect and execute times separated from each other. Note the connect: 0.03 ms. That is a warm connection being handed over, not a login being negotiated — the difference that decides what happens to the next burst.

    Event Health

    The warning arrives before the failure does

    Diagnostics answer what happened. Event Health answers a different question: has anything changed about the way your events are running?

    An event whose stored procedure has slowed from 40 milliseconds to 900 over three weeks is still succeeding. It appears on no error list and in no log, because nothing went wrong — right up to the day it crosses its command timeout and stops the line. Event Health watches for exactly that, and tells you while there is still time to act.

    Every execution is sampled: tag collection, database connect, database execute, write-back, dispatch and total duration. Each sample is judged against a rolling baseline built from that event's own history rather than a global threshold someone guessed at — so an event that normally completes in 40 milliseconds and one that normally takes three seconds are each measured against themselves.

    Timeout headroom is the signal that matters

    The measure that predicts that failure is how much of its configured command timeout an event spends on database work, at the 95th percentile. That is the margin between working and faulting.

    An event that has quietly gone from using 22% of its timeout to 61% has not failed yet. But it will, on the first shift busy enough to close the gap — and that is the shift where parts get scrapped with no assignable cause.

    You get the warning weeks before the surge that would have used it up.

    What it watches for

    • Timeout headroom“Uses 61% of its command timeout, against a baseline of 22%.”
    • Step change — a median that jumped rather than crept: “Db execute median rose from 45 ms to 310 ms.”
    • Drift“Duration is climbing steadily across the recorded history.”
    • Failure rate — the share of recent runs failing, measured against that event's own baseline rather than an absolute number
    • Chronic failure“Has failed 14 of its last 200 executions.” The one that finds an event that has been failing since the day it was configured: it never got worse, so no comparison would ever have mentioned it
    • Write-back divergence — runs that succeeded but could not write completion back to the controller. Silent by nature: the database has the record and the PLC does not know it landed
    • Contention bursts — clusters of lock timeouts, command timeouts, connection-pool exhaustion, or connection failures

    Judged in executions, not in hours

    Recent behaviour is compared against earlier behaviour using windows counted in executions — the last 200 runs against the 2,000 before them. Production schedules change, shifts get added and dropped, product mix varies; a window measured in time would report a quiet shift as an improvement and a busy one as a regression. The baseline also stops where the recent window starts, so a slow drift can never drag its own reference along behind it.

    Every central figure is a median rather than an average, because one run that waited 26 seconds on a lock moves an average substantially and a median not at all. An average has you chasing a single bad night.

    Nominal, Watch, Degrading, Critical

    Every event carries a state, and the health page filters straight to the ones that need attention. Until an event has enough history to judge honestly it reads No baseline rather than reporting itself healthy — the system doesn't raise findings it can't support, and it doesn't reassure you on the strength of thirty samples. Findings are deliberately slow to appear and slow to clear: one must hold for two consecutive checks before it opens, and clear for two before it resolves, so nothing near a threshold flips state every few minutes.

    Notification is off, immediate, or a digest on an interval you choose, with recipients assigned per event — so the engineer who owns a line hears about that line, and nobody learns to ignore the mail.

    It costs the event nothing

    The observer sits on no part of the event path. It reads the telemetry files the system already writes, after the fact, so it cannot slow an event down no matter what it finds or how much history it is working through. It survives restarts, it keeps far more history than anything reading memory could, and on first run it reads back through the history you already have. There is nothing to configure — it is on, and it needs no thresholds set.

    Throughput

    Built for the peaks, not the average

    Events don’t arrive at a steady rate. They arrive the way production does — in bursts.

    A cell finishes its cycle, a pallet indexes, a batch completes, an operator clears a fault and the queue behind it releases all at once. The average tells you almost nothing: a line averaging five events a second can swing between none and thirty-five concurrent, and it is the thirty-five that decides whether you scrap parts. Size for the average and you have guaranteed a failure at the peak.

    Most middleware is sized for the average, because it treats database connections as disposable — opened, used, dropped, re-authenticated. Under normal load nobody notices the cost. When twenty events fire at once, reconnection overhead stacks up behind them and the PLC’s timeout window closes first. The event faults. The part gets scrapped. And nothing kept a record of why.

    Event Engine® holds warm connections ready and manages the concurrency itself, so a burst runs at the speed of your database rather than the speed of a login. The peak is absorbed rather than queued through — and the quiet stretch between peaks costs nothing to stay ready for.

    Proof

    An hour of lost production a day, recovered

    An automotive components manufacturer averaged five events per second — but the process swung between none and thirty-five concurrent.

    The peaks were enough to fault events with no assignable cause: dropped records, scrapped parts, missed cycles, and roughly an hour of lost production every day. Months of troubleshooting found nothing — not because nobody looked, but because nothing in the stack had recorded anything to find. The faults happened during the surge and the surge was over by the time anyone opened a log.

    Switching to Event Engine® eliminated the issue by absorbing the bursts that had been paralysing their system. It also let them consolidate several separate middleware instances onto a single Event Engine® instance — which still used a fraction of the system resources required by any one instance of the platform it replaced.

    Before
    Faulted events with no assignable cause; roughly one hour of lost production per day.
    After
    Bursts handled without fault; multiple middleware instances consolidated onto one.
    Load
    5 events per second average, swinging between 0 and 35 concurrent.

    Run it beside what you have

    Thirty days, fully functional. Point it at one line, let it build a baseline, and see what it says about events you were told were fine.

    Reliability

    No hidden queue

    Store-and-forward solves two different problems, and conflates them.

    Load spikes that outrun the system, and outages that take it away entirely. The spikes are by far the common case — and Event Engine® solves those at the source rather than queueing through them. Buffering manages the symptom; warm connections and modern algorithms remove the cause.

    A queued record is a promise, not a record

    Buffering is a historian pattern. A historian collects values for later analysis — nobody is waiting on them, so backfilling an hour of data an hour late costs nothing. A transactional record is different. A quality result, a genealogy record, a serial number assignment participates in the process; something downstream is waiting to act on it.

    So production keeps running, and the truth about a part lives somewhere else — in a queue, on another machine, under a clock nobody reconciles. Downstream logic has to keep processing, so the equipment marks the part good on its own assessment, with no database record behind it. The next station then treats what arrives as good, on the assumption it would have been rejected otherwise. Two problems, not one: the assumption of good product, and the inability to verify it afterward. Closed-loop control is a further casualty — a setpoint derived from an upstream measurement cannot be derived from a measurement that is still in a queue.

    A window is not a containment

    Vendors will tell you they log when the outage started and ended, so at least you know the window. That doesn't tell you which parts were built inside it, which were cleared against records that weren't there, or where those parts are now. Someone still walks it back by hand, under pressure — which is exactly the work traceability was bought to eliminate.

    The premise has moved

    Store-and-forward was designed when middleware ran on an industrial PC in a control cabinet at the end of a fragile plant network. Your database now runs on a managed server in a data center, with failover and an uptime target in writing. If it genuinely isn't reliable, that is the thing to fix — buffering only makes the unreliability harder to see.

    The machine never runs on the assumption that a record landed.

    Event Engine® works in real time. Every event is acknowledged back to the controller — completed or failed, with a status code and a timestamp. If the database can't be reached, the PLC knows immediately, and your logic decides what happens next: retry, alarm, hold the line, or divert the part.

    Operations

    What you are actually agreeing to run

    On the host
    One Windows service that hosts its own web interface. No separate web server, no SCADA platform underneath it, no OPC server unless a controller needs one.
    Where it runs
    Windows Server or Windows 10/11, on-premises or in your own cloud. No vendor cloud service, and no outbound dependency for it to keep working.
    Backup
    Configuration is JSON files on disk. Back up the data folder, or export the whole configuration as a ZIP and restore it onto another host.
    Access
    Role-based, mapped to your existing Windows or Active Directory groups. Nothing new to administer.
    Monitoring
    Event Health is on after install and needs nothing configured. Findings can email a digest, or the critical ones immediately.
    Support
    Perpetual or subscription licensing, with an annual maintenance agreement available on perpetual licences.

    Downloads

    Read it before you run it

    The installer, and the documentation that says what every option does to a running system — including the licence and maintenance terms, up front.

    Requires Windows, SQL Server or Oracle, and a PLC or OPC server.

    Also worth reading

    Before it is yours to run, somebody builds it

    If an integrator is standing this up for you, the configuration page is the one that tells you what they are quoting — and what it will cost to change later.

    Let it tell you what you don't know yet

    Point the trial at one line and let it build a baseline. Thirty days is enough for Event Health to have an opinion about events nobody has flagged.

    Fully functional. No credit card. No sales call unless you want one.

    Questions about licensing? Activate or manage a license →
    Event Engine® is developed by Factory Data Systems — a team with deep experience in manufacturing execution, plant-floor integration, and industrial data systems.