Skip to content

Ribbon Handling

Web handling is continuous material: a single endless strip of paper, film, foil, textile or sheet coil that is paid out by one roll, runs over a set of rollers, and is taken up by another. It is what a slitter, a rewinder, a coater or a laminator does, and it is the one kind of material flow that is not a sequence of discrete parts.

The components are called Ribbon Roller, Ribbon Winder, Ribbon Dancer and Ribbon Path. The word web stays the industry term for the material in this page, but the Web* prefix is reserved for the browser-HMI marker components (WebSensor, WebError, …), so the material-handling components carry Ribbon* instead.

Three components describe it, and all three are geometric rather than procedural — you place rollers, name them in running order, and the viewer works out the rest:

  • Ribbon Roller — a roller the web runs over. Give it a rotational drive and it pulls the web; without one it spins at the speed the web imposes on it, so a small idler visibly turns faster than a large one.
  • Ribbon Winder — a roller whose diameter changes: the unwinder shrinks as the web leaves it, the rewinder grows as the web arrives. It reports diameter, wound length, empty and full back to the PLC.
  • Ribbon Dancer — a roller that travels on a guide and stores web, so two drives on one machine can run at slightly different speeds without the web going slack or tearing.
  • Ribbon Path — the web itself: the ordered list of rollers it runs over, and its width.

Two things follow from that and are worth knowing before you look for controls:

  • The path is computed, not authored. The straight runs between rollers and the wrap arcs around them are worked out from where the rollers are and how big they are. Move a roller and the web follows it; nothing about the shape is stored in the file.
  • The web is taut. There is no sag and no tension control. The web lies exactly on the tangents and the wrap arcs, which is how an industrial web actually runs — and it is why no physics solver is involved and the result is the same every run.
  • Only rollers move the web. There is no line drive to point the path at: a roller with a rotational drive on it pulls the web at the surface speed of that drive, and every other roller follows. That is how a real converting line is built, and it is what makes two drives at slightly different speeds — and therefore a dancer — possible at all.

A roller is driven when a rotational drive sits on the same object as the roller, turning about the roller’s own axis. Its surface speed — turning rate times radius — is the web speed. Everything else is a follower and simply turns with the web.

That single rule covers every case the old line drive did, and several it did not:

  • A nip or pull roll with a drive at a fixed speed sets the line speed.
  • A centre-driven winder with a drive turns at a constant rate, so its surface speed rises as its roll grows — exactly what a real centre winder does, and the reason a dancer is needed downstream of it.
  • Two rewinders on one slitter may run at different rates. They are no longer a modelling error; the dancer between each of them and the nip takes up the difference.

Put the drive on the roller object itself, not on a parent, and give it a rotation direction about the same axis the roller turns about. A linear drive, or one turning about a different axis, is reported in the console and ignored — the roller stays a follower.

PropertyDescription
RollersThe rollers the web runs over, in running order. The first and the last entry are the two ends of the web and are normally winders. A Ribbon Dancer in this list splits the web into two sections that may run at different speeds.
Ribbon Width MmWidth of the web, measured across the rollers.
Ribbon Thickness MmThickness of one layer of the material. It lifts the web off the roller surface and, more importantly, it is what makes a roll grow. Give the winders on this path the same value — it is the same material.
Texture Length MmHow much web one repetition of the surface pattern covers. This is what makes a running web look like it is running: the pattern scrolls by the distance the web has travelled. A larger value gives a coarser pattern that appears to move more slowly.
Samples Per MeterHow finely the web strip is subdivided, in points per metre of path. Raise it when a tight wrap looks angular, lower it on a very long run. On a slitter, give every strip the same value — it is what makes them cut at exactly the same place. A very long web has its density reduced automatically, which puts it on a coarser grid than its siblings and moves its cut slightly; the console reports that, and the answer is a lower value for the whole slitter.
MaterialOptional. A node whose material the web copies — a printed pattern, a coloured film. It points at an object in the scene, not at a material on its own: the web takes the first textured material found on that object, including its normal and roughness maps, and gets its own copies of them — the part it was copied from is never changed. Without it the web gets a plain paper-white surface.
PropertyDescription
Radius MmContact radius of the roller. Left at 0 it is measured from the roller’s own geometry, which is usually what you want for imported CAD.
AxisThe axis the roller turns about. Every roller of one web path must be parallel — a web path is a flat problem, and angled web guides or turn bars are outside what it models.
Ribbon SideWhich side of the roller the web runs on. Leave it on Auto — for every normal machine Auto picks the short wrap, the only one a real web can take. Set Left or Right by hand only for an S-wrap or a wrap of more than 180°, where the short wrap is the wrong one. Left and Right are the turning sense seen looking along the +Axis direction: Left counter-clockwise, Right clockwise.
Rotation DirectionEither 1 or -1. Set it to -1 when the roller visibly turns against the web, which happens when an imported CAD axis points the other way. It only changes what you see; it never changes the web speed.
Spin ModeHow the roller shows that it is turning. Transform turns the roller object. Texture leaves it standing still and scrolls the pattern on its barrel instead — indistinguishable at a glance on a textured roller, and free of any per-frame work, which is worth having on a machine with dozens of idlers. Only takes effect on a roller without a drive; a driven roller is always turned by its drive.
Mantle MeshWhich part scrolls in Texture mode — normally the barrel of the roller. Leave it empty and the roller’s own mesh is used, or the largest textured part under it that is not inside a Faces group — so the end discs stay still while the barrel appears to turn.
PropertyDescription
Core Radius MmRadius of the bare core or sleeve the material is wound onto. The default 76.2 mm is the 3 inch core of the converting industry.
Ribbon Thickness MmThickness of one wound layer. Together with the core radius this is what determines how fast the roll grows or shrinks. It must be the same value as on the Ribbon Path — it is the same material.
Initial Wound Length MmHow much material is on the roll at the start and after a reset. -1 (the default) means a full roll exactly as modelled — the length is read off the modelled outer radius, so a full parent reel needs no number typed in. 0 means an empty core, which is what a rewinder starts at. Any other value is the length in millimetres on the roll.
Max Diameter MmThe diameter at which the roll counts as full. Reaching it stops the web and raises the Full signal. 0 means no limit.
Roll MeshWhich part grows and shrinks with the roll. Usually left empty: the winder object is the roll, and it is scaled directly. Model the core as a sibling next to it, never as a child — a child would scale with the paper and the core would visibly grow. Set this field only when the roll is a separate part or the winder object has no geometry of its own; a winder with nothing to scale gets a plain cylinder so it is never invisible.
Diameter Mm / Wound Length Mm / Empty / FullSignals written back to the PLC. Diameter and wound length are written when they actually change; empty and full on the edge.

A dancer is a Ribbon Roller that also travels on a guide. Whatever the roller upstream of it delivers and the roller downstream does not take is stored as web on the carriage — and the carriage position is what the PLC regulates on.

PropertyDescription
Travel AxisThe direction the carriage runs in, given in the frame of whatever the dancer hangs under — the same axis letters as the roller Axis. Place the dancer so that moving along the positive axis lengthens the web path — that is the direction “more material stored” points in.
Travel Min Mm / Travel Max MmThe two mechanical stops, measured from the home position. Min is zero or negative, Max is zero or positive.
Home MmWhere the carriage rests and returns to on reset. 0 means exactly where you modelled it.
StrandsHow many runs of web pass through the carriage. 1 is a single pass over the roller; 2 (the default) is the usual loop that goes down to the carriage and back up again. One millimetre of travel then stores that many millimetres of web.
Position Mm / At Min / At MaxSignals written back to the PLC. The position is the regulated variable of a web tension controller; the two flags are the mechanical stops.

At a stop the dancer does not halt the line. At Travel Max it only stops the store from filling further — the upstream section drops to the downstream speed — and at Travel Min only from emptying. The web keeps running at the slower of the two, and the moment the PLC reverses the difference the carriage comes free again. A dancer that stopped everything would deadlock: with both sides at zero, nothing could ever move it back.

Use one dancer per web path. A second one, or a dancer at either end of the roller list, is ignored and reported. On a slitter, give each strip its own dancer unless the dancer sits before the cutter — a dancer shared by strips that are pulled by different rewinders has no single speed difference to store and is held at its home position.

  1. Model or import the rollers. Give them a common axis, and make sure each one is a separate object.
  2. Add a Ribbon Winder to the roll at each end of the web, and a Ribbon Roller to everything in between. The winder object is the roll itself; put its core next to it as a sibling.
  3. Add a rotational drive to the roller that pulls the web — the nip, or the rewinder on a centre-driven line — turning about the same axis as the roller.
  4. Add a Ribbon Path on its own object. Add the rollers to Rollers in running order, starting at the unwinder.
  5. Set Ribbon Side on each roller so the sides alternate wherever the web changes direction.
  6. Run it. The web moves, the followers turn, the parent roll shrinks and the rewound roll grows.
  7. Where two drives pull the same web at different rates, put a Ribbon Dancer between them in the roller list and set its travel axis and stops.

A slitter cuts one wide web into several narrower strips, each going onto its own rewinder. Model it as one web path per strip, all of them naming the same unwinder and the same rollers up to the cutter in their Rollers list, and set Slit At Roller to the cutter with Full Width set to the width of the uncut web. The viewer then draws one full-width web up to the cutter and each strip in its own lane behind it. Leave Ribbon Side on Auto unless a roll must wind a specific way: Auto always picks the wrap a real web can take.

The cut is where the web meets the cutter, not where it leaves it — that is where a real blade sits. It matters because two strips wrap the cutter differently on their way to their own rewinders: cut where the web leaves the roller, the full-width web and one of the strips would both be drawn on part of that roller and would flicker against each other.

Up to the cut the strips are one web, so they must wrap every shared roller on the same side, and normally they do. If the rollers after the cutter are placed so that one strip turns left there and the other right, Auto resolves a shared roller differently for the two strips; the console reports that once, naming both webs and the roller. The web keeps running — move the roller that causes the opposite turn, or set Ribbon Side explicitly on the shared rollers.

Paths that share a roller are treated as one machine. The shared roll is consumed once rather than once per strip, and when it runs empty — or when any rewinder reaches its maximum diameter — every strip stops at the same moment. The strips do not have to run at the same speed: each one reads the roller that pulls it, so two rewinders at different rates are a normal machine, and the dancer between each of them and the cutter takes up the difference.

The internal demo document DemoRibbonSlitter (Development project) shows this: one parent roll, four idlers, a driven nip, a dancer per strip and two driven rewinders on 3 mm material. The rewinders turn at a fixed rate, so they start slower than the nip, fill their dancers to the upper stop, and overtake it as their rolls grow — the whole reason a dancer is there, visible in a couple of minutes.

Since realvirtual 6.3 the same four components exist in realvirtual for Unity (Professional), with the same names, the same fields and the same units. A converting machine is therefore authored once: you build it in Unity, export the GLB, and the browser runs it — there is no ribbon-specific export step and nothing to re-wire afterwards.

Two design decisions make that hold rather than merely intend it:

  • Unity computes in the glTF coordinate frame. Axis letters, Ribbon Side, Rotation Direction and Travel Axis mean the same thing on both sides, so nothing has to be flipped by hand after an export. (Unity mirrors X on export and maps RotationY to glTF -Y; a port that ignored that would run a machine built about the Y axis backwards.)
  • Nothing about the path geometry is exported. The tangents, the wrap arcs and the band are solved from the roller poses and radii, identically on both sides. Only the authored configuration travels in the document; the runtime state does not.

The roundtrip is a test, not a promise. Unity builds the demo slitter in two variants — about the X axis, and the same machine turned onto the Y axis with Travel Axis X — runs each for two seconds of simulation and records every roller angle, surface speed, wound length, dancer position, path length, cut point and wrap side. The browser then loads both exported documents, steps its own simulation with the same timestep and tick count, and must reproduce those numbers to within 0.5 % with the signs exact.

SymptomCause
The web runs backwards (rewinders pay out from an empty core, everything stops)The drive turns the wrong way for its roller axis. Set Reverse Direction on the drive. This is the usual finding after rebuilding a machine about a different axis.
A roller does not turn although it has a driveThe drive is linear, or its axis is not parallel to the roller axis. The console names the roller and the deviation.
A field you set in Unity has no effect in the browserIt is not part of the Open Digital Twin Format for that component. Runtime status values are deliberately not exported — the browser recomputes them.
What you seeWhat it means
The web is shaped correctly but nothing movesNo roller of the path has a rotational drive on it, or the drive is not running. The console names the path.
A roller with a drive does not pull the webThe drive is linear, or it turns about a different axis than the roller. The console names the roller.
The dancer sits at a stop and does not come backThe two sides are running at the same speed, so nothing moves it. The line keeps running; reverse the difference to bring it back.
A shared dancer stays at its home positionIt is shared by strips whose rollers are pulled by different drives. Give each strip its own dancer, or move it before the cutter.
The web is missing and the console names a rollerOne entry of Rollers does not resolve. The rollers themselves stay where they are.
The console says a winder is in the middleA winder is an end of a web. Move it to the first or the last position, or make it a web roller.
The console says a roller deviates by some degreesThe rollers of one path must be parallel within 2°. Check the axis of the roller named in the message.
The console says there is no tangent between two rollersTwo rollers overlap, or one is inside the other. Move them apart, or check their radii.
Everything stops and Empty is setThe unwinder is down to its bare core. Reset the simulation or set a larger Initial Wound Length Mm.
Everything stops and Full is setA rewinder reached Max Diameter Mm.
  • Chain conveyors — the other kind of continuous transport: many identical carriers on one curve
  • Documents — the GLB that carries the rollers and their configuration
  • Open Digital Twin Format — the RibbonRoller, RibbonWinder, RibbonDancer and RibbonPath field reference