StateTick Docs Home →
StateTick
TwinTick Studio
Fault injection

A machine that always works proves nothing.

A twin that runs perfectly every time only ever tests the happy path. The sequence that matters is the one that runs when a gripper drops the part, a belt slips, or an encoder keeps counting after the motor has stopped.

TwinTick can make the machine misbehave on demand — seize, slip, drift, over-travel, or report something other than what is happening. Your controller drives it exactly as before, and you find out whether it notices.

01

The rule every fault follows

A fault is only worth having if the controller can detect it through the I/O it already reads.

This is the line between a demo and a test rig, and every fault in TwinTick is built to stay on the right side of it.

If the twin raised a flag saying “I am broken”, nothing would have been tested — the logic would just be reading a flag that does not exist on a real machine. So it does not do that. The twin quietly stops turning while the encoder keeps counting, and your sequence has to work that out on its own, from the same signals it will have on site.

Everything below is detected the way a real controller detects it: a position that stops changing, an interlock that never makes, a count that drifts, a discrepancy timer that expires because commanded and actual stopped agreeing.

Nothing announces itself. A faulted part looks exactly like a healthy one in the viewport and on the bus. That is the point — the only thing that can tell you something is wrong is your own logic.

02

Three classes, and why the middle one matters most

Each fault is classified by what it attacks.

PhysicalThe machine stops obeying. Feedback stays honest, so a well-written sequence should catch it. The easy case, and still worth testing.
LyingThe machine moves correctly but reports something else — or reports correctly while doing something else. Attacks the logic's trust in its own sensors.
DegradedStill works, just worse. The nastiest in production, because nothing alarms until a timeout somewhere downstream finally expires.

The lying faults are the ones that earn their keep. Every alarm your sequence relies on is telling the truth right up until it is not, and a controller cannot catch that by reading a flag — it has to catch it by cross-checking one signal against another, or against time.

The degraded ones are the most realistic. Belts slip, gearboxes wear, air pressure sags, lenses get dirty. None of it trips anything, and the line just quietly stops making rate.

03

Rotary motion

Index tables, star wheels, spindles.

FaultClassWhat the machine doesWhat the controller seesSetting
SeizephysicalStops turning while still commanded to run.Angle frozen, in-position never arrives. A timeout should catch it.On / off
Fails to startphysicalIgnores the first run command; needs re-commanding. A contactor drop-out.Nothing moves and nothing alarms. Tests whether the sequence checks that it actually started.On / off
Coast after stopphysicalKeeps turning a few degrees after the run command drops. A failed brake.Overshoots the index station — pockets stop short of the transfer.Degrees
BacklashdegradedLoses a little motion every time direction reverses. A worn gearbox.Position error accumulates on any shuttling move, and nothing alarms.Degrees
Speed droopdegradedTurns at a fraction of commanded speed.Index takes longer; downstream timing slips out from under the recipe.Percent of commanded
Overshoot and huntdegradedPasses the target, then oscillates around it.The in-position signal chatters. Tests debounce on the interlock.Degrees
Encoder freezelyingKeeps turning normally. The published angle stops.Looks exactly like a stall that is not one. Does the recovery routine make it worse?On / off
Encoder driftlyingTurns correctly; the reported angle drifts a little every revolution.Everything reads fine while the pockets progressively miss the transfer.Degrees per revolution
False in-positionlyingTurns normally. In-position asserts before it arrives.Downstream releases product into a pocket that is not there yet.On / off
04

Linear motion

Sliding lifts, transfers, pushers.

FaultClassWhat the machine doesWhat the controller seesSetting
JamphysicalStops dead mid-travel and stays there.Position frozen short of target. The discrepancy timer should trip.On / off
Short strokephysicalStops a few millimetres before the commanded end, every time.In-position never sets, and product is handed off slightly out of place.Millimetres
StictiondegradedSits still for a moment before breaking free and moving.Late arrival. Attacks anything that assumes motion starts on command.Milliseconds
Gravity creepdegradedDrifts back toward the low end while idle. A leaking valve on a vertical axis.Position wanders with no command. Does the hold logic notice?mm per second
Slow traveldegradedMoves at a fraction of commanded speed.Cycle time stretches; downstream starves.Percent of commanded
Position offsetlyingMoves correctly; reports a constant offset from where it really is.Every commanded position lands wrong by the same amount, silently.Millimetres
Alarm suppressedlyingTravels past a soft limit; the alarm never publishes.The safety reading the sequence depends on simply is not there.On / off
05

Conveyors and transfers

Belts and driven surfaces.

FaultClassWhat the machine doesWhat the controller seesSetting
Belt slipdegradedProduct moves slower than the belt surface. The conveyor failure.Everything reads healthy. Destroys any logic that infers position from speed × time.Percent slip
Motor stallphysicalBelt stops while commanded to run.Product stops arriving. Does the downstream sensor time out cleanly?On / off
RunawayphysicalIgnores the stop command and keeps running.Tests whether the stop path is real or decorative.On / off
Ramp failuredegradedAccelerates but never reaches commanded speed.At-speed never sets — or sets wrongly, if paired with the next one.Percent of commanded
False at-speedlyingStalled or slipping; reports at-speed anyway.The interlock that gates product release is lying.On / off
06

Pneumatics

Cylinders, pushers, stops.

FaultClassWhat the machine doesWhat the controller seesSetting
Valve stuckphysicalFreezes in place regardless of command.Neither end switch makes. The discrepancy timer trips.On / off
Low airdegradedExtends and retracts far more slowly than rated.Cycle stretches; end switches arrive late.Percent of commanded
Short strokephysicalStops before the end of travel.The end switch never sets, although the rod clearly moved.Millimetres
Seal leakdegradedCreeps back from the held end while still commanded.End switch makes, then drops out with no command change.mm per second
Reed switch stucklyingRod moves normally; the end switch is welded on, or dead.Reports extended with the rod home. Extremely common in the field.Which end
07

Clamps and grippers

The richest of the set — the most signals to lie about.

FaultClassWhat the machine doesWhat the controller seesSetting
ObstructedphysicalStops a few degrees short of closed — something is in the way.Closed never sets. The honest, easy case.Degrees
Will not openphysicalStays shut on the open command.Product never released; the next station starves.On / off
One jaw stuckphysicalOnly one jaw moves, so the grip closes off-centre.Jaws-touching never sets although the clamp reports closed.Which jaw
SlipdegradedGrips, then loses the product while still commanded shut.Gripping drops with no command change. Does the transfer notice mid-move?Milliseconds
Slow actuationdegradedOpens and closes at a fraction of rated speed.Grip completes after the robot has already started moving.Percent of commanded
Limit switch lieslyingJaws open; the closed signal reports true.The interlock that authorises the move is wrong. Product dropped in transit.On / off
Phantom griplyingHolding nothing; gripping and product-present both report true.The line believes it is carrying a part that fell out three stations ago.On / off
08

Sensors

Presence and distance — a small surface with a high return.

FaultClassWhat the machine doesWhat the controller seesSetting
DeadphysicalNever detects anything.Product passes uncounted. A starvation timeout is the only defence.On / off
Stuck onlyingReports permanent detection with nothing in the beam.Blocked-lane logic fires forever, or the line refuses to index.On / off
DropoutdegradedRandomly misses a fraction of detections. A dirty lens.Counts drift low over a shift. Only statistics reveal it.Percent missed
Ghost triggerlyingFires occasionally with nothing present.Counts drift high. Tests any logic that trusts a single edge.Events per minute
Reading offsetlyingDistance is consistently wrong by a fixed amount.Measurement-based decisions are all wrong, confidently.Millimetres
NoisedegradedDistance jitters around the true value.Threshold comparisons chatter. Tests filtering.± millimetres
09

Process equipment

Vessels and cutting tools — where being wrong gets expensive.

Tanks and vessels

FaultClassWhat the machine doesWhat the controller seesSetting
Valve stuckphysicalInlet or outlet valve ignores the command.Neither end position makes; the discrepancy timer trips.On / off
LeakdegradedLevel falls with both valves shut.Mass balance stops adding up. Tests any inventory logic.Units per second
Blocked outletphysicalOutlet valve opens; nothing drains.Valve says open, level says full. Two honest signals, one bad conclusion.On / off
Level sensor stucklyingVessel fills and empties; the reading holds.Overfills past high-high with no alarm, because the alarm reads the same sensor.On / off
Level driftlyingReading slowly diverges from the true level.Set points quietly move. The classic slow-poison instrument fault.Units per minute

Saws and cutting tools

FaultClassWhat the machine doesWhat the controller seesSetting
Will not spinphysicalRun commanded, blade static, nothing cuts.Cut count stops advancing while product keeps feeding.On / off
Slew jamphysicalA blade will not move to its commanded gap.Blade position parks short. Every subsequent cut is the wrong width.Which blade
Blade breakphysicalOne blade stops cutting mid-run; the rest continue.Piece count drops by one. Does the recipe check what it got back?Which blade
Position lieslyingBlade sits at a different gap than reported; published dimensions still claim nominal.Nothing at all. Every piece is out of spec and the data says it is fine.Millimetres

That last one is the whole argument. No alarm, no timeout, no operator notices — and every part made that shift is scrap. It is the kind of failure a twin can hand you on a Tuesday afternoon instead of a customer handing it to you a month after handover.

10

How faults are set up

Opt-in, per instance, and repeatable.

Off unless you ask

  • Faults are a section you enable, not a mode you enter
  • A model with no faults configured behaves exactly as it did before
  • Nothing is baked in — a clean model ships clean

Per placement, not per model

  • The same machine placed twice can have one healthy and one faulty
  • Faults belong to the instance in the line, alongside its other overrides
  • Useful for “lane 2 is the bad one” scenarios

Driven from your logic, or by hand

  • Each fault is a bindable input — a toggle, a percentage, or a magnitude in the device's own unit
  • Trigger it from a panel, from a test case, or from the sequence itself
  • A fault state is published, so a test can assert on it

Repeatable when it needs to be

  • Random faults — dropout, ghost triggers, slip — take a seed per motion
  • A run that failed can be replayed exactly
  • Everything else is deterministic by construction

Because a fault is an input like any other, it composes with everything else you already have. A test case in Test Manager can enable a belt slip, run the sequence, and assert that the machine reached a safe state rather than carrying on regardless — which turns “we should test the failure paths” into a test that runs on every change.

11

What this is for

The failure paths are the ones nobody gets to rehearse.

Every machine ships with recovery logic that has never run. The jam handler, the re-home routine, the branch that fires when a sensor disagrees with a position — written from imagination, reviewed on paper, and first executed in front of a customer.

Fault injection is how that code gets exercised before anyone is watching. Not by simulating the fault in the logic, which only tests the simulation, but by making the machine genuinely misbehave underneath a controller that has no idea anything is different.

The controller you break is the controller you ship.

Same sequence, same timers, same conditions. The only thing that changed is that the machine stopped cooperating — which, on the day, is exactly what happens.

Also worth reading

TwinTick — Digital Twin — building the twin the faults run on.

The Test Manager — turning a fault scenario into a test that runs on every change.

Monitoring & Logs — watching what the logic did while the machine lied to it.