← Zinan Yang · lab
Unofficial notes · Siemens application library · Entry ID 109782462 · LProdReg V3.2 · 04/2026

Library
Product Register

LProdReg keeps one central register of every product and container moving through a line. Sensors report what they see, conveyors report where their belts are, and the library matches the two into tracked object positions that a kinematics can pick from. Everything is built from flow objects — one function block per real machine part — talking to a single database manager over a request/response channel.

S7‑1500T · FW 3.0 or higher TIA Portal V20 13 flow‑object blocks · one register Conveyor tracking · cross‑PLC · SKI plugin

Personal study notes — not a Siemens publication. The manuals on Siemens Industry Online Support are authoritative.

1.1–1.2 · Introduction & mode of operation

What LProdReg does, and how it is wired

A central product register for process chains: it watches products and containers arrive on running conveyors, keeps their position current while they travel, and hands the right one to a handling device or a sequence of processing stations at the right moment.

What it is

LProdReg is the central product register for a process chain. Products and containers are detected as they arrive — randomly — on running conveyors, tracked and updated as they move, prioritised or sorted by position or by a user-defined rule, and handed to actuators as position data for picking. Objects can also be deleted, manually or automatically through defined zones. A separate, static station-based mode shifts objects through a chain of processing stations on the FIFO principle instead of a conveyor. The typical field of application is a “pick and place” task combined with the system function conveyor tracking.

What it's used for

  • Detecting randomly incoming products/containers via a camera or a light switch
  • Tracking and updating them as they travel along the line
  • Position-based or user-defined prioritising and sorting
  • Providing position data to handling devices (kinematics)
  • Deleting objects manually, or automatically via defined zones
  • Shifting objects through processing stations in station-based mode

The library's main tasks

Object recognition via sensors Sensor activation via output cam / measuring input / digital input Matching reference data to object data Inserting detected objects into the register Duplicate detection Minimum-gap-violation detection Prioritisation & sorting Position tracking along the line Provision of object data to an actuator Automatic / manual deletion Successive shifting through stations

Architecture: a client/server core behind every moving part

Every real machine part — a conveyor belt, a sensor, an actuator — is modelled as a configurable function block called a flow object (FO). FOs never touch the data directly: they send a REQUEST to the core FB LProdReg_ProductDataBaseManager and get back a RESPONSE, over the global DB LProdReg_DataExchange — a client/server architecture. Only the core FB may read or write the global DB LProdReg_ProductDataBase (the “register”), which is exactly what keeps every FO's access conflict-free. Above all of it sits the wrapper FB LProdReg_RegisterManager, which configures, calls, manages and diagnoses the library blocks beneath it — the recommended, streamlined alternative to wiring the manager and every FO by hand.

LProdReg_RegisterManager configures · calls · manages · diagnoses — recommended wrapper FO-Conveyor Belt · StaticStorage FO-Source Source · SourceStation FO-Sensor Camera · LightSwitch · Zone FO-Actuator Kinematic FO-Station Station FO-Sink Product · Container LProdReg_DataExchange global DB · request / response channel REQUEST requestID · flowObjectID · parameters(1..n) RESPONSE responseID · flowObjectID · parameters(1..n) LProdReg_ ProductDataBaseManager the core · processes every FO's requests, sends responses one instance per application sole accessor LProdReg_ ProductDataBase the register product + container data, plus FO-specific data written only by the core FB
How a request becomes a register update: every flow object exchanges typed REQUEST / RESPONSE messages with the core FB LProdReg_ProductDataBaseManager over the global DB LProdReg_DataExchange; only that core FB may touch the register LProdReg_ProductDataBase itself, which is what keeps access conflict-free. LProdReg_RegisterManager (dashed, top) is the optional wrapper that configures, calls and diagnoses the blocks beneath it instead of the user wiring them by hand.
NoteThe FB LProdReg_RegisterManager serves as a standalone solution for integrating the LProdReg blocks seamlessly into PLCs. It's an alternative to the modular configuration of the FB LProdReg_ProductDataBaseManager and the FOs, presenting users with a more streamlined and integrated solution — user interaction then occurs exclusively via the FB's own interface.

The FO naming schema

Every FO's block name spells out its type, so it can be recognised on sight. The six FO types are Conveyors, Sources, Sensors, Actuators, Stations and Sinks.

LProdReg_library prefix
+
Foflow object
+
SensorFO type
+
CameraFO name
=
LProdReg_FoSensorCamerathe block

Two shapes of automation task

1.2.2 Conveyor-based

  1. 1Products or containers arrive, in no fixed order, on one or more running conveyor belts.
  2. 2A FO-Sensor (camera or light switch) detects them — triggered via TO_OutputCam or TO_MeasuringInput for precision, or a plain digital input, which is less precise.
  3. 3On trigger, the sensor's FO saves the belt's actual position as reference data, ready to be matched with the detected object's position and characteristics (object data) once it arrives.
  4. 4A FO-Source, fed directly by the sensor's outputs (or driven manually), sends the matched object to the core FB, which inserts it into the register — each FO-Source instance inserts only one array element per trigger.
  5. 5Before insertion the object is prioritised per that conveyor's configured priority mode, then insertion-sorted into its storage array.
  6. 6From there it is tracked continuously: the FO-Conveyor cyclically updates every object's position in the register as the belt moves.
  7. 7A FO-Zone can mark a rectangular area on the belt; objects entering it are tagged with that zone's ID — used by a FO-Sink to delete objects automatically (e.g. at the belt's end), or by a FO-Actuator as a working zone.
  8. 8When an object enters a FO-Actuator's working zone, the actuator selects the highest-priority object and provides its position — optionally with MC_TrackConveyorBelt for time-optimised picking while the belt keeps running, plus an optional user picking strategy layered on top.
  9. 9The user drives the pick-and-place sequence via control signals, from picking the object to placing it in a container or onto another conveyor.

1.2.3 Station-based

  1. 1Products or containers pass through a series of processing stations of any kind; each station is a FO-Station with its own FIFO storage area in the register.
  2. 2A FO-SourceStation inserts an object into a station; objects are arranged there strictly on the FIFO principle.
  3. 3As soon as an object has been inserted, its information (object ID, name, characteristics) is output and it becomes available for processing under the station's selected mode.
  4. 4Products: Mode 1 shifts the object to the next station, Mode 2 places it on a conveyor belt, or Mode 3 places it in a pocket of a container held in the same station.
  5. 5Containers: Mode 1 shifts the object to the next station, or Mode 2 places it on a conveyor belt.
  6. 6When processing is triggered, the object's characteristics can be overridden — e.g. to save the process parameters that station just applied, into the object itself.
NoteFO-SourceStation and FO-Station are not configurable or manageable via LProdReg_RegisterManager. They must be inserted and called separately in the TIA project, alongside it.

Benefits

Chapter 5 · Description of modular library blocks

The flow-object catalogue

Eleven flow objects, grouped into the six FO types, plus the core manager, the wrapper and the HMI faceplate that sit around them. Pick a block below to see what it models, how it works, and what it costs to run.

Library footprint

All fourteen blocks shipped with V3.2, in code work-memory and load memory on an S7-1500T CPU. Each column shares one scale across every block, so the gap between the core manager and the smallest flow object is the real gap.

Code work-memory (kB)

  • Core & wrapper
  • LProdReg_ProductDataBaseManager75.6
  • LProdReg_RegisterManagerconfig.
  • Conveyors
  • FoConveyorBelt8.26
  • FoConveyorStaticStorage1.62
  • Sources
  • FoSource2.98
  • FoSourceStation2.31
  • Sensors
  • FoSensorLightSwitch5.80
  • FoSensorZone2.27
  • FoSensorCamera17.0
  • Actuators
  • FoActuatorKinematic26.1
  • Stations
  • FoStation6.42
  • Sinks
  • FoSinkProduct2.49
  • FoSinkContainer2.51
  • HMI
  • LProdReg_Hmi_Main20.8

Load memory (kB)

  • Core & wrapper
  • LProdReg_ProductDataBaseManager1096
  • LProdReg_RegisterManagerconfig.
  • Conveyors
  • FoConveyorBelt85.3
  • FoConveyorStaticStorage41.1
  • Sources
  • FoSource69.2
  • FoSourceStation54.5
  • Sensors
  • FoSensorLightSwitch98.0
  • FoSensorZone54.7
  • FoSensorCamera232
  • Actuators
  • FoActuatorKinematic498
  • Stations
  • FoStation125
  • Sinks
  • FoSinkProduct63.2
  • FoSinkContainer64.0
  • HMI
  • LProdReg_Hmi_Main376

LProdReg_RegisterManager has no fixed size (hatched bar): it wraps and calls only the blocks a given application configures, so its footprint is whatever the sum of those blocks comes to.

Every flow object, by type

Conveyors
Sources
Sensors
Actuators
Stations
Sinks
LProdReg_FoConveyorBeltFB 35752Conveyors

Models a single physical conveyor belt.

Principle of operation

One instance per real belt, connected to a TO_PositioningAxis, TO_SynchronousAxis or TO_ExternalEncoder at its conveyorTO input, plus an individual coordinate frame defined at the main FB and referenced via coordSystemIndex. Once enabled it cyclically sends requests to the core FB to keep every product's and container's position on that belt current in the register, every call cycle. At the main FB it is assigned as a “product-conveyor” and/or a “container-conveyor”, depending on what it carries.

Supported functionalities

  • Definable position-tolerance window between the FO's and the register's saved position, to catch a setpoint jump
  • Choice of setpoint or actual axis position for tracking (actual is recommended for conveyor tracking)
  • Lead-screw conversion for rotatory axes
  • Transfer-data mode, when the connected TO axis runs on a secondary PLC

Memory cost

Code work-memory8.26 kB
Load memory85.3 kB

Beyond the flow objects: LProdReg_ProductDataBaseManager is the core — not an FO — that processes every FO's requests and alone owns the register (see Architecture, above). LProdReg_RegisterManager wraps and calls whichever of these blocks an application configures, which is why its own footprint has no fixed size. LProdReg_Hmi_Main is the HMI faceplate for categorised visualisation of the register's content, with delete and filter functions.

Chapter 5.1 · Flow objects at work

Watch the register fill and empty

A running model of the scenario in Figure 1‑3: products and containers arrive on two conveyors, a camera and a light switch detect them, an FoActuatorKinematic packs products into container pockets, and every object’s life — from first detection to deletion — plays out as a row in LProdReg_ProductDataBase on the right.

70 mm/s
45 mm/s
avg. 1.3 s apart

Camera FoSensorCamera_1 matches colour/shape object data against the product belt’s reference position the instant it triggers; light switch FoSensorLightSwitch_1 does the same for containers. The actuator tracks the still-moving belt via the system function MC_TrackConveyorBelt while it picks and places.

Actuator · idle Sim time · 0.0 s
detected / prioritised registered reserved / picked placed deleted min-gap / duplicate flag

LProdReg_ProductDataBase · live register

One row per checked-in object; position updates every tick and state follows the flow object that last touched it. Register order here uses the library’s standard modes (X‑highest on the product conveyor, call order on the container conveyor) — a user-defined rule via LProdReg_UserDefinedObjectConveyorPrioritization could replace either.

#ObjectCharacteristicsPositionStateFlagsLast FO
0Products registered
0Products picked
0Products placed
0Products deleted
0Containers registered
0Containers filled

LProdReg_DataExchange · request / response traffic

Illustrative traffic between flow objects and LProdReg_ProductDataBaseManager over the client‑server channel — not a byte-accurate protocol trace. Newest entry at the bottom.

    Model, not the library Everything above runs in the browser and reconstructs LProdReg’s documented behaviour — flow objects, request/response traffic, prioritisation and deletion rules — from the V3.2 manual (entry 109782462). Belt speeds, distances, zone sizes and timings are illustrative; they are not the library’s real-time performance.
    Chapter 2.1–2.6

    FB LProdReg_RegisterManager

    The register itself is FB LProdReg_ProductDataBaseManager plus a set of flow objects, but almost nobody wires those by hand. LProdReg_RegisterManager is the streamlined, single‑block alternative: one FB that configures, calls and diagnoses the whole application. This is the block you actually call.

    RegisterManager owns the flow objects it needs — conveyors, cameras, light switches, actuators, sinks and zones — and initialises them from one configuration structure. What you connect from your own program is sensor data in, actuator interaction out.

    Block interface

    chapter 2.2.1

    In Inputs

    NameData typePurpose
    enableBoolEnables the manager and, in turn, every flow object it owns.
    useRetainedValuesBoolTRUE resumes from whatever is already in the retentive ProductDataBase DB after a stop/restart; FALSE clears it on enable.
    lightSwitchTriggerArray of BoolOne rising edge per configured light switch, for manual/digital triggering.
    lightSwitchObjectDataArray of typeObjectDataEntryThe object (position + characteristics) each light switch spawns when it fires.
    lightSwitchDisableArray of BoolTemporarily disables one light switch sensor during operation.
    cameraTriggerArray of BoolManual reference‑data trigger per camera; only used in triggerMode 1.
    cameraDataArray of typeSensorCameraDataIncoming object list from the vision system for each camera.
    cameraDisableArray of BoolTemporarily disables one camera sensor.
    actuatorRuntimeConfigArray of typeConfigActuatorRuntimePer‑actuator runtime changes: disable, mode, and pick/place zone re‑assignment with optional property overwrite.
    transferDataProductConveyorArray of typeTransferDataFoConveyorBeltCross‑PLC position feed for product conveyors with useTransferData = TRUE.
    transferDataContainerConveyorArray of typeTransferDataFoConveyorBeltSame, for container conveyors.
    configtypeConfigManagerThe entire configuration — see below.

    Out Outputs

    NameData typePurpose
    validBoolA valid set of outputs is available.
    busyBoolStill processing; more output values will follow.
    errorBoolAn error occurred — see Errors.
    statusWord16#0000–16#7FFF status, 16#8000–16#FFFF error identifier.
    diagnosticstypeManagerDiagnosticsProduct/container counts per conveyor, state of every internally called flow object, and — on ERR_IN_FLOW_OBJECT — the name and status of the first faulted one via foInError.
    transferDataActuatorArray of typeTransferDataFoActuatorCross‑PLC feed when an actuator’s kinematics control logic runs on a secondary PLC.

    diagnostics.numberOfFlowObjects tells you exactly how many flow objects the manager checked in — read it after first enable and use it to size LPRODREG_NO_OF_ACTIVE_FLOW_OBJECTS and the request/response buffer (plus any externally called blocks).

    InOut InOut

    NameData typePurpose
    actuatorInterfaceArray of typeActuatorInterfaceThe full pick/place interface per actuator — this is what your kinematics‑control program connects to (see Engineering 3.7).
    dataExchangetypeDataExchangeThe request/response channel between flow objects and the database manager, exposed so externally called flow objects (e.g. FO‑Station) can join it — see 3.8.
    productDatabasetypeProductDataBaseThe register itself, exposed so LProdReg_Hmi_Main can be called externally.

    Configuration

    chapter 2.2.2config : typeConfigManager

    One structure, six parts. This is the part you will keep coming back to while commissioning.

    1Product conveyor(s)

    One entry per real belt or static storage that carries products. Sizes at LPRODREG_NO_OF_PRODUCT_CONVEYORS.

    • isAvailable / ID — initialise the FO and give it the ID used to assign it to actuators.
    • coordSystemIndex — which coordinate frame this conveyor's positions are expressed in.
    • staticStorage — TRUE gives FO‑ConveyorStaticStorage instead of FO‑ConveyorBelt.
    • priority — standard prioritisation mode 0–6 (table below) or a user‑defined index ≥7.
    • useTransferData / useSetPointValues / leadScrew / positionWindow — cross‑PLC feed, setpoint vs. actual, rotary‑axis conversion, position tolerance.
    • camera — optional FO‑SensorCamera: isAvailable, triggerMode 1–4, coordSystemIndex, multipleObjectToleranceLength, minObjectGap.
    • lightSwitch — optional FO‑SensorLightSwitch: isAvailable, triggerMode 0–2, coordSystemIndex. Mutually exclusive with camera on the same conveyor.
    • sinkZone — optional FO‑Sink + FO‑Zone pair for automatic deletion of missed objects, defined by zonePosition / zoneDimension.
    • toReference — the TO_PositioningAxis / TO_SynchronousAxis / TO_ExternalEncoder driving the belt.
    #PrioritisationUser tag
    0No prioritisationLPRODREG_PRIO_NO_PRIO
    1Highest X (conveyor CS)LPRODREG_PRIO_X_HIGHEST
    2Smallest XLPRODREG_PRIO_X_SMALLEST
    3Smallest YLPRODREG_PRIO_Y_SMALLEST
    4Highest YLPRODREG_PRIO_Y_HIGHEST
    5Smallest ZLPRODREG_PRIO_Z_SMALLEST
    6Highest ZLPRODREG_PRIO_Z_HIGHEST
    ≥7User‑defined (see below)
    2Container conveyor(s)

    Same shape as a product conveyor, for belts that carry containers. Sizes at LPRODREG_NO_OF_CONTAINER_CONVEYORS.

    • Every field above applies unchanged — isAvailable, ID, coordSystemIndex, staticStorage, priority, transfer‑data trio, camera/lightSwitch, sinkZone, toReference.
    • Camera and light switch here also carry numberOfContainerPockets — this is what actually sizes the container group created for this conveyor.
    • A conveyor can be both product and container conveyor at once — count it in both tags if so.
    NoteLPRODREG_NO_OF_DIFFERENT_CONTAINER_GROUPS must equal LPRODREG_NO_OF_CONTAINER_CONVEYORS — one container group is auto‑assigned per container conveyor.
    3Actuator(s)

    The interconnection between the register and one kinematics. Sizes at LPRODREG_NO_OF_ACTUATORS — every configured actuator must be used, or the manager errors.

    • isAvailable / mode — see the six operating modes below.
    • objectPickPriority — which object wins when several sit in the pick zone at once (0–6 or user‑defined).
    • waitForContainer — for mode 2/5, hold the pick until a valid place container is present.
    • maxPicksPerCycle — multi‑pick before placement (default 1 = disabled), capped by LPRODREG_NO_OF_MAX_PICKS_PER_CYCLE.
    • pickZone[] / placeZone[] — one or more non‑overlapping zones per side (conveyorID, zonePosition, zoneDimension, zoneApproach, zoneExtension); the first of each is the default, others are switched in at runtime via actuatorRuntimeConfig.
    #Pick fromPlace to
    1ConveyorConveyor
    2ConveyorContainer pocket
    3ConveyorStation
    4Container pocketConveyor
    5Container pocketContainer pocket
    6Container pocketStation
    4Coordinate system(s)

    An array of frames, each referenced to the world coordinate system, used to place conveyors, cameras and light switches relative to one another. Sizes at LPRODREG_NO_OF_COORD_SYSTEMS — you need one frame per conveyor and one per sensor (unless they coincide).

    5Stations

    An array of station FO‑IDs. FO‑Station cannot be configured from inside the RegisterManager — it is always called externally (3.8) — this array just tells the manager which IDs to expect, so it can be sized and referenced consistently.

    6Data base

    Parameters passed straight through to the core FB ProductDataBaseManager:

    • multipleProductToleranceLength — global duplicate detection across all conveyors.
    • minProductGap — global minimum‑gap check, which also switches on gap checking in every actuator handling products.
    • numberOfContainerPockets — only used when containers are inserted by an externally called flow object; when a conveyor's own camera/light switch already sets it, that value wins.

    DB LProdReg_ProductDataBase

    chapter 2.1

    The register's actual storage. Every detected product and container lives here, and the size of every array is entirely a function of the configuration tags above.

    Per‑product / per‑container storage

    • Conveyor‑array productOnConveyor / containerOnConveyor — 2D: [conveyor index][order on belt].
    • Pocket‑array productInPocket / containerInPocket — 1D; a container's pocketOccupiedByIndex points into it. Positions here are offsets from the parent container's position.
    • Station‑array productInStation / containerInStation — 2D: [station index][FIFO order].

    typeProduct fields

    • User‑set iD, actPosition, characteristics, name
    • Core‑managed priority, assignedZone, minGapViolated, assignedFlowObject, blocked, restrictedForFO, assignedContainer

    typeContainer — adds

    • containerFull all pockets occupied
    • groupIndex which container group
    • occupiedPocketsBitmask per‑pocket occupancy
    • pocketsOccupiedByProduct pockets hold products (TRUE) or containers (FALSE)
    • pocketOccupiedByIndex[] index into the pocket‑array per pocket

    Flow‑object storage & retention

    • flowObjects[] sized by LPRODREG_NO_OF_ACTIVE_FLOW_OBJECTS (+2 with the HMI block)
    • retainedValues internal state kept when the whole DB is set retentive and useRetainedValues = TRUE

    User‑definable functions

    chapter 2.3

    Four hooks, all already called internally — you extend them, you never call them yourself.

    FB LProdReg_UserDefinedActuatorPrioritization

    Extends the standard pick‑order modes 0–6 for a FO‑Actuator's picking zone. Position and user‑defined characteristics can both drive the choice — e.g. pick only blue products. Three example strategies ship pre‑written; add more at any index ≥7.

    Configured via config.actuator[…].objectPickPriority

    FB LProdReg_UserDefinedObjectConveyorPrioritization

    Extends modes 0–6 for how newly inserted products/containers are ordered in the register on a conveyor, again by position or characteristics. One example strategy (by colour) ships pre‑written.

    Configured via config.productConveyor[…].priority / containerConveyor[…].priority

    FC LProdReg_UserDefinedDeleteProductsByCharacteristics

    Lets an FO‑Sink delete products by a user‑added characteristic. Set configSinkProduct.deletionByCharacteristics and the target value, then trigger digitalTriggerInput on the sink.

    Not reachable from the RegisterManager — needs its own, externally instantiated FO‑Sink (3.8).

    FC LProdReg_UserDefinedDeleteContainerByCharacteristics

    The same mechanism for containers — identical principle, its own FO‑Sink.

    Configured via configSinkContainer.deletionByCharacteristics

    PLC tags that size everything

    chapter 2.5

    Two tag tables ship with the library: LProdReg_InternalTags (leave alone) and LProdReg_ConfigurationTags (yours to set). The manager's own memory footprint is a direct function of these.

    TagDefaultSizes…
    LPRODREG_NO_OF_PRODUCT_CONVEYORS1Product conveyor array
    LPRODREG_NO_OF_CONTAINER_CONVEYORS1Container conveyor array
    LPRODREG_NO_OF_MAX_PRODUCTS_PER_CONVEYOR10Product storage per product conveyor
    LPRODREG_NO_OF_MAX_CONTAINERS_PER_CONVEYOR10Container storage per container conveyor
    LPRODREG_NO_ACTUATORS2Actuator array
    LPRODREG_NO_OF_CAMERAS1Camera sensor array
    LPRODREG_NO_OF_LIGHTSWITCHES2Light switch sensor array
    LPRODREG_NO_OF_COORD_SYSTEMS4Coordinate‑frame array
    LPRODREG_NO_OF_STATIONS1Station ID array
    LPRODREG_NO_OF_DIFFERENT_CONTAINER_GROUPS1Container groups — must match container conveyor count
    LPRODREG_LENGTH_OF_PRODUCT_POCKET_ARRAY10Products stored in container pockets
    LPRODREG_LENGTH_OF_CONTAINER_POCKET_ARRAY10Containers stored in container pockets
    LPRODREG_NO_OF_ACTIVE_FLOW_OBJECTS16Flow‑object array (+2 with Hmi_Main)
    LPRODREG_NO_OF_REQUEST_RESPONSE_BUFFER_ELEMENTS16Request/response buffer — must equal active‑FO count
    LPRODREG_NO_OF_MAX_PICKS_PER_CYCLE1Multi‑pick ceiling per actuator

    PLC types worth knowing by name

    chapter 2.6
    LProdReg_type_ProductDataBaseThe whole register: products, containers, flow objects, retained values.
    LProdReg_typeProduct / typeContainerOne storage entry each — see the DB card above.
    LProdReg_typeObjectDataEntryPosition + characteristics for one incoming object.
    LProdReg_typeObjectCharacteristicsName + user‑defined properties.
    LProdReg_typeObjectUserDefinedPropertiesWhere you add your own characteristics (colour, shape, …).
    LProdReg_typeFrameA coordinate‑system frame entry.
    LProdReg_typeConfigManagerThe manager's whole configuration structure.
    LProdReg_typeConfigManagerConveyor / Camera / LightSwitch / SinkZone / ActuatorThe per‑part configuration sub‑structures behind the six config cards above.
    LProdReg_typeSensorCameraDataVision‑system object list shape at input cameraData.
    LProdReg_typeActuatorInterface (+ In / Out)The full pick/place interface exposed per actuator.
    LProdReg_typeManagerDiagnosticsCounts, FO states, and foInError.
    Chapter 2.7 & 3

    Bringing it into a project

    The manual's own path from an empty TIA project to a running register, in order. Each step expands with the concrete detail — and the machine used as the running example throughout is the same three‑conveyor, two‑picker setup as Scenario 2.

    Requirements2.7.1

    A base TIA Portal V20 project. Nothing library‑specific yet — just the usual axis groundwork:

    NoteBefore any axis motion command, the axis must be enabled and referenced with MC_Power and MC_Home. Errors reset via MC_Reset.
    Import the library2.7.2
    1. Drag LProdReg_Tags into the PLC's PLC tags.
    2. Drag LProdReg_Types into PLC data types.
    3. Drag LProdReg_Blocks into Program blocks.
    4. The blocks can now be configured and called.

    For the HMI faceplate specifically: update the project library's Types from the global library, drag LProdReg_Faceplate onto a screen, connect its Interface tab to the matching PLC variable, then compile and download.

    Parametrise the configuration tags3.1

    Work through LProdReg_ConfigurationTags by answering these questions for the application:

    • How many product conveyors, how many container conveyors?
    • Maximum simultaneous products / containers on any one conveyor?
    • Maximum products / containers held in container pockets?
    • How many container groups — must equal the container‑conveyor count?
    • Maximum container pockets across all groups?
    • How many stations, and max products/containers per station?
    • Maximum objects per camera picture, and required reference/object data buffer sizes?
    • How many coordinate frames — one per conveyor, one per sensor?
    • Maximum used flow objects, and the matching request/response buffer size (+2 if LProdReg_Hmi_Main is used)?
    NoteThe exact number of internally called flow objects is only known for certain by reading diagnostics.numberOfFlowObjects after the first enable — use it to true up the buffer constants.
    Add user‑definable object characteristics3.2

    Add fields (colour, shape, …) to LProdReg_typeObjectUserDefinedProperties if the application needs them. They then become available to: prioritisation/sorting in the register, custom picking strategies at the FO‑Actuator, and deletion by characteristic at an FO‑Sink.

    Define coordinate systems3.3

    One frame per conveyor and per sensor (camera / light switch), all referenced to the world coordinate system.

    Example machine
    • WCS Picker 1's own position
    • 3 frames Conveyor_1 / 2 / 3, matching the digital twin
    • Picker 2's KCS parametrised relative to picker 1
    Configure the RegisterManager3.4

    Done in the shipped DB LProdReg_RegisterManagerConfig. The manual walks it through the example machine — a product conveyor, two container conveyors and two delta pickers:

    Product conveyor
    • ID 1 coordSystemIndex 1 (Conveyor_1); camera assigned to the same frame; sink zone at the belt's end; TO_PositioningAxis referenced.
    Container conveyor 1
    • ID 2 coordSystemIndex 2 (Conveyor_2); light switch on the same frame; sink zone; TO_PositioningAxis referenced.
    Container conveyor 2
    • ID 3 coordSystemIndex 3 (Conveyor_3); light switch; sink zone; TO_PositioningAxis referenced.
    Actuator 1 (picker 1)
    • mode 2 pick products, place in container; objectPickPriority = LPRODREG_EXAMPLE_USER_DEFINED_ACTUATOR_PRIORITY_CASE_2; pick conveyor ID 1; place conveyor ID 2.
    Actuator 2 (picker 2)
    • mode 2 pick whole containers, place in container; objectPickPriority = LPRODREG_PRIO_NO_PRIO (entry order); pick conveyor ID 2; place conveyor ID 3.
    Call the FB in the project3.5

    Instantiate in Main OB or a Pre‑Servo OB, depending on timing needs, and interconnect with the library's own LProdReg_DataExchange, LProdReg_ProductDataBase, LProdReg_ActuatorInterface and LProdReg_RegisterManagerConfig DBs. From there, hook ActuatorInterface to whatever controls the pickers.

    Provide object data to it3.6

    Feed the sensor inputs described in the block interface above: light switch triggers from digital signals plus a prepared object‑data DB per conveyor, and camera triggers plus incoming object count/data from the vision interface.

    Interconnect with a FB controlling kinematics3.7

    Wire the manager's actuatorInterface InOut to whatever FB drives the picker. If that FB is built on the LKinCtrl library, its MC_TrackConveyorBelt input conveyorBeltOrigin must be configured to match — positions from the RegisterManager are already in the world coordinate system, so X/Y/Z stay at 0.0 and only orientation A (if the conveyor is rotated against the WCS) matters.

    CautionThe orientation set here must match the RegisterManager's own conveyor coordinate system exactly, or conveyor tracking drifts. Link the two values directly rather than entering them twice.
    Interconnect externally called flow objects3.8

    Some flow objects are never called from inside the RegisterManager and must be placed and wired by hand into the shared dataExchange DB:

    • LProdReg_FoStation — stations always live outside the manager.
    • LProdReg_Hmi_Main — the HMI faceplate's backing block.
    • Additional FO‑Sinks — e.g. for deletion by user‑defined characteristic.
    Chapter 2.4 & 3.9

    The HMI faceplate

    LProdReg_Hmi_Main is the backing block; LProdReg_Faceplate is what the operator actually sees — a categorised, filterable window into the live register, with delete functions built in.

    LProdReg_Hmi_Main

    Manages data exchange between the HMI and the product database, and lets the operator delete objects or search by filter characteristics. Called externally (3.8), so its dataExchange and productDatabase InOuts join the same DBs the RegisterManager uses.

    NoteUsing this block adds two internally called flow objects — a FO‑SinkProduct and FO‑SinkContainer, fixed at IDs 98 and 99. Increase LPRODREG_NO_OF_ACTIVE_FLOW_OBJECTS and the request/response buffer size by 2 to match.
    • Categorised view of the database by conveyor, station and pocket
    • Filtering by object parameter or characteristic
    • Configurable displayed parameters and column width, per category
    • Object detail view (parameters and characteristics)
    • Multi‑select deletion via checkboxes
    • Delete‑all for one category (conveyor or station)

    Categories on screen

    Product on conveyorContainer on conveyor Product in pocketContainer in pocket Product in stationContainer in station

    Pick a category, then a conveyor or station number, to narrow the table.

    CautionObjects sitting in a container pocket (“Product/Container in pocket”) cannot be deleted from the faceplate at all.

    Operating the faceplate

    chapter 3.9
    1. 1
      Categorised display

      Choose a category (the six chips above) and, where relevant, the conveyor or station number.

    2. 2
      Filter the list

      Pick the parameter to filter on and enter its value.

    3. 3
      Configure the display

      Open the configuration icon for a category; set a priority (1, 2, 3…) per parameter to control column order — priority 0 hides it — and pick a gap width for the board.

    4. 4
      Object details & single delete

      Select an object to see its full parameters and characteristics; the delete icon removes just that one.

    5. 5
      Delete several via checkboxes

      Tick objects (the top checkbox selects all shown), press delete, choose “Delete selected”, confirm twice.

      A ticked row that shifts position when the list refreshes is automatically un‑ticked.

    6. 6
      Delete a whole category

      With a category and number selected, press delete, choose “Delete category” instead, and confirm twice.

    Chapter 4

    The three example scenarios

    One example project, three projected PLCs, each demonstrating a different shape of application — from the simplest possible register to full conveyor tracking to the purely stationary mode.

    A single conveyor belt with a light switch. Products spawn, get detected, are tracked along the register while the belt runs, and are deleted once they reach the end — the smallest possible register application, and the one to read first.

    LProdReg_Scenario_11 conveyor1 light switchno actuator

    Line & principle of operation

    The light switch trigger is simulated as a rising edge every 50 mm of belt travel: a product is inserted every 50 mm, each rotated 60° and offset 20 mm in Y from the last, cycling every 6 products. An externally called FO‑Sink lets the operator manually delete by product ID, source conveyor ID, name, or a characteristic (e.g. colour = blue).

    Structure — Main OB

    AxesReset, power, home Belt_1
    MotionMC_MoveVelocity
    BlocksLProdReg_RegisterManager (1×), LProdReg_FoSinkProduct (1×, external)

    Running it — watch table LProdReg_Watchtable

    1. 1Enable, reset and home Belt_1 (Controls.Enable/Reset/Home_Belt).
    2. 2Enable the RegisterManager — status switches to 16#7003 on success.
    3. 3Execute Belt_1 (Controls.Execute_Belt1); optionally change Controls.Belt_Velocity.
    4. 4Monitor products in DB LProdReg_ProductDataBase; optionally trigger the FO‑Sink via Controls.Trigger_Sink after setting a deletionBy… input.
    Chapter 6

    Cross‑PLC operation

    When one PLC's motion‑control resources can't cover every conveyor and kinematic in the line, LProdReg keeps running on a “main PLC” and hands the real axes to a “secondary PLC” — exchanging only the mandatory I/O of the affected flow objects.

    MAIN PLC LProdReg_RegisterManager FO_ConveyorBelt FO_Actuator Runs the register & every flow object SECONDARY PLC TO_Axis (belt) TO_Kinematics FB TrackConv (optional) Holds the real axes & the kinematics logic typeTransferDataFoConveyor · 22 B main → secondary, conveyor position typeTransferDataFoActuator · 126 B typeTransferDataTrackConv · 50 B object & pick/place data, both directions
    Both transfer directions ride on the same mechanism — a typed I/O tag on each side, cyclically exchanged. Direction of the arrow above is the data's origin; the underlying PROFINET relation is always bidirectional.

    Setting it up

    chapter 6.2 – 6.3

    Two independent approaches, both built on the same transfer‑area mechanism. Integrate every transfer type and transfer block of the library into the secondary PLC — nothing else from LProdReg is needed there.

    Direct data exchange (IRT)

    Preferred whenever possible
    • High‑precision, deterministic, PROFINET IO with IRT
    • Only when every PLC is in the same TIA project
    • No PROFINET alarms

    Requirements STEP 7 V16+, firmware V2.8+, IRT‑capable devices, one sync domain with a sync master/slave pair, IRT ports interconnected.

    Setup create the comm. relation on the main PLC's PROFINET interface → add one transfer area per I/O tag pair, matching lengths exactly → assign each area to MC‑Servo (or an isochronous OB) and a process image partition.

    I‑Device (RT / IRT)

    For separate projects, or when direct exchange isn't possible
    • Unlinks the projects — secondary PLC is exported as a GSD file and imported into the main project
    • Deterministic PROFINET RT (can use IRT on the higher‑level controller, but not IRT and RT simultaneously on both sides)
    • Works even inside one shared project

    Setup set the secondary interface's operating mode to I‑device → assign the IO controller → tick “parameter assignment by higher‑level IO controller” for IRT on the main side → export/import the GSD file → create and edit transfer areas exactly as for direct exchange.

    Comm. methodMax. transfer areaMax. areas
    Direct data exchange3075 Byte128 sender / 512 receiver (≤64 CPUs)
    I‑Device1440 Byte64
    Flow objectRequired transfer length
    FO_ConveyorBelt22 Byte (data in)
    FO_Actuator152 Byte — 126 B out + 50 B in

    Maximum data length for a single transfer area is 1024 Byte either way.

    Synchronous operation for conveyor tracking

    chapter 6.4.2

    When the conveyor belt is on the main PLC but the kinematic tracking it is on a secondary PLC (or vice versa), a 1:1 gearing must run cross‑PLC: the real belt's leading value goes over to a “leading axis proxy” technology object on the other side, which is then geared 1:1 to a virtual representative TO_Axis — and that virtual axis, once its delay time is configured correctly, is what conveyor tracking actually follows.

    CautionCross‑PLC synchronous operation is not possible over I‑Device communication — conveyor tracking across PLCs needs direct data exchange.
    Chapter 3.10.1 & 3.10.2

    Error & warning identifiers

    Every identifier the RegisterManager and its flow objects can raise, reconstructed from the manual's own tables. Errors set status to 16#8000–16#FFFF; warnings sit in 16#7004–16#7FFF and don't stop operation.

    IdentifierValueMeaning & remedy
    Field notes

    What bites people first

    Drawn from the manual's own NOTE / NOTICE / CAUTION boxes and from how the mechanism actually works.

    Built as a reading aid from the LProdReg V3.2 manual (Siemens Industry Online Support, entry 109782462, 04/2026) and the LProdReg_V3_2_0_TiaPrj_V20 example project. It is not a substitute for the manual — always check the current entry on Siemens Industry Online Support before commissioning.