1. Overview: The PCS 7 Single-Channel, Multi-Consumer Problem
SIMATIC PCS 7 enforces a strict "PCS 7 way" of structuring automation logic through the Advanced Process Library (APL). Each Process Tag Type in the Master Data Library bundles a channel driver (e.g., FbAnIn, FbAnOu, FbDiIn) with one or more function blocks such as MonAnL, PidConL, MotSpdL, or VlvAnL. The channel driver owns the I/O signal coming from the distributed I/O (ET 200M, ET 200SP, ET 200iSP, ET 200PA) and exposes conditioned values to the rest of the chart.
A recurring engineering question is: "Can one PA / 4–20 mA / HART input be consumed by two separate Process Tag Types—one for protection monitoring, one for PID control—without duplicating the channel driver?" The short answer is yes, but only with a defined signal-sharing pattern. Duplicating the FbAnIn on the same physical address creates an inconsistent maintenance release state, doubles the HART/PROFIBUS-PA communication load, and breaks the single-source-of-truth principle that the PCS 7 Maintenance Station relies on.
This article documents the three field-proven patterns for sharing one analog input between a MonAnL (limit / protection monitor) and a PidConL (PID controller, lean variant) in PCS 7 V8.0 SP2 through V9.1, including how to handle the MS_Release signal, how to derive a custom Process Tag Type, and how to set block execution order so that the Operator Station, Maintenance Station, and SIMATIC BATCH all see a coherent picture.
2. Prerequisites
- PCS 7 Engineering Station with SIMATIC Manager or PCS 7 V9.0+ with the PCS 7 Plant Automation Accelerator (PAA) add-on installed.
- AS Runtime license sufficient for the planned PO count. Each
FbAnIninstance counts one PO; the shared-output pattern keeps PO count to one per physical channel. - Master Data Library (MDL) populated with the APL version that matches the OS Runtime:
APL_V8_0,APL_V8_1,APL_V8_2, orAPL_V9_0/APL_V9_1for the current generation of PCS 7 Advanced Process Library (APL) blocks documentation. - HW Config completed: ET 200M/SP/PA station, PROFIBUS-DP or PROFINET subnet, signal modules (SM) with proper slot assignment, and
Symbolic I/Onaming activated (default in PCS 7 projects). - CFC/SFC editor rights on the S7 Program container of the target AS.
- For Maintenance Station functionality: the
MS_xxxlicense on the OS server and the Maintenance Station plug-in (e.g.,PCS 7 Maintenance Station V9.0) installed on the engineering station.
3. The Channel Driver Architecture in PCS 7
The APL FbAnIn block is a standard S7 FB that performs signal conditioning, scaling, range checking, simulation, and Out-of-Service (OOS) handling for a single analog input. The block is the only authorized place where the raw peripheral word (PIW) is read. Other blocks must consume the block's conditioned outputs, not the raw I/O.
| Pin | Type | Purpose |
|---|---|---|
| PV | REAL (IO) | Raw process value after channel-error handling; not scaled. |
| PV_Li | REAL (O) | Linearized, scaled process value in engineering units. Primary signal for downstream blocks. |
| PV_LiUnit | STRING(8) (O) | Engineering unit string (e.g., 'bar', '°C'). |
| ScaleOut | REAL (O) | Scaled value normalized to 0–100 % (useful for faceplate bar graphs). |
| Bad | BOOL (O) | TRUE if the channel is faulty, broken-wire, or out of range. |
| OosAct | BOOL (O) | TRUE when the operator has taken the channel Out-of-Service from the faceplate. |
| MS_Release | BOOL (I/O) | Maintenance release status. TRUE = maintenance is allowed on the field device; the FbAnIn drives its output to the configured substitute value. |
| SubstVal | REAL (I) | Substitute value used during MS_Release or OOS. |
| MsgLock | BOOL (I) | Suppresses alarm generation at the consumer (set by the higher-level block). |
For a typical pressure or flow loop, the canonical PCS 7 signal flow is:
Field Transmitter (PA / 4-20 mA)
|
v
ET 200M SM 331 / ET 200SP AI 4xU/I 2-wire (e.g. 6ES7131-6FD01-0BB1)
|
v
FbAnIn (peripheral driver - one instance per channel)
|
+---> MonAnL (limit & protection monitoring)
| |
| +---> OS faceplate (bar, alarm, archive)
|
+---> PidConL (PID controller, lean variant)
| |
| +---> FbAnOu (analog output to valve / damper)
4. Solution Pattern A: Single FbAnIn, Multi-Consumer CFC (Recommended)
The recommended PCS 7 way is to place a single FbAnIn in its own CFC (e.g., @PA_PT_101_PV) and route the PV_Li, PV_LiUnit, ScaleOut, Bad, and OosAct outputs to the inputs of every consuming block. CFC interconnections are always point-to-point: any output may drive an unlimited number of input pins in the same chart, the same S7 program, or cross-chart via the same AS.
4.1 Build the driver CFC
- In the plant view, navigate to the unit's S7 Program → Charts.
- Insert a new CFC; rename to
@PA_PT_101(the leading@is the PCS 7 convention for driver-only charts and prevents the OS from generating a faceplate for them). - Drop
FbAnInfrom the APL into Sheet 1. Assign its symbolic I/O address (e.g.,I0.0 / IW 512orPA slot 3, channel 0). - Set the channel parameters:
SignalType = 4..20 mA,ScaleHigh = 10.0,ScaleLow = 0.0,Unit = 'bar',SubstVal = 0.0,SubstituteStrategy = Use SubstVal.
4.2 Wire the protection CFC
- Open the existing
MonAnLCFC. From the APL catalogue, placeMonAnLin Sheet 1. - From the @ driver CFC, drag
FbAnIn.PV_LiontoMonAnL.PV_In. The S7 compiler creates a unidirectional interconnection. The connection remains valid even when the consumer CFC is on a different sheet or chart within the same AS program. - Drag
FbAnIn.BadontoMonAnL.Bad; dragFbAnIn.OosActontoMonAnL.OosAct. These propagation links ensure that alarms are suppressed while the channel is out of service or faulty. - Configure the limit values:
AH_Limit = 8.0,WH_Limit = 7.5,WL_Limit = 0.5,AL_Limit = 0.2. Each limit generates a configurable PCS 7 message class on the OS.
4.3 Wire the PID CFC
- Insert a CFC containing the
PIDControl_Lean_FbProcess Tag Type (right-click the chart → Insert Process Tag Type → APL → PID →PIDControl_Lean_Fb). - By default, the inserted Process Tag Type contains its own
FbAnIn. Delete the embeddedFbAnIninstance—do not leave it connected to the same PIW. ThePIDControl_Lean_Fbcontainer will fall back to using external pins. - From the @ driver CFC, drag
PV_LiontoPIDControl_Lean_Fb.ProcessTag.PV_In,PV_LiUnitontoPV_InUnit,ScaleOutontoPV_OutScl,BadontoBadPV, andOosActontoOosActPV. - Configure controller:
SP_Ext = FALSEfor internal setpoint,SP = 5.0 bar,Gain = 1.2,TI = 30 s,TD = 0 s,MV_HiLim = 100,MV_LoLim = 0.
At this point a single FbAnIn drives both consumers, MS_Release is unambiguous (it lives in exactly one place), and the Maintenance Station faceplate shows one consistent state.
5. Solution Pattern B: Custom Process Tag Type (For Repeated Plant Units)
If the project contains ten or more identical loops (e.g., ten reactor pressure controllers), it is faster to derive a custom Process Tag Type in the Master Data Library. The MDL is the PCS 7 mechanism for reusable, type-instance CFCs that propagate block attributes, alarms, and OS picture assignments automatically when instances are dropped into plant charts.
5.1 Create the custom type in the MDL
- Open the Master Data Library project on the ES.
- Insert a new CFC named
PT_PressureCtrlSharedin theProcessTagTypescontainer of the plant hierarchy. - Place one
FbAnInand onePidConLin the same chart. Add aMonAnLas well. - Wire the chart internally:
FbAnIn.PV_Li→MonAnL.PV_In,FbAnIn.PV_Li→PidConL.PV_In, with the propagation pins (Bad,OosAct) fanned out identically. - Compile the MDL. The type is now available in every unit of the plant view under the APL catalogue.
5.2 Instantiate the custom type
- In the target unit, right-click Charts → Insert Process Tag Type → Master Data Library →
PT_PressureCtrlShared. - The instance is created with its own I/O address, alarm class assignments, and OS area. The single
FbAnInremains the only peripheral reader.
For a complete reference on Process Tag Type mechanics, see the SIMATIC PCS 7 Advanced Process Library (V8.0 SP2) manual, section 6.3 ("Process Tag Types"). The same mechanics apply to V8.1, V8.2, V9.0, and V9.1 with no semantic change.
6. Block Execution Order (BEO)
PCS 7 CFCs are compiled into OB 35 (default 1000 ms) or OB 1 with a runtime group priority. The compiler automatically orders blocks to satisfy data dependencies: an output pin that feeds an input pin forces the source to run before the sink. With a single FbAnIn driving two consumers, the order is:
- Run-time group 1 (highest priority, runs first):
FbAnIn@ driver CFC. - Run-time group 5:
MonAnL(limit processing + alarm generation). - Run-time group 9:
PidConL(controller step + MV output). - Run-time group 12:
FbAnOu(analog output to valve).
To verify or modify BEO: CFC editor → Options → Block Execution Order. Always place the driver group in a higher-priority (lower-number) group than its consumers. The PCS 7 OS Runtime expects a deterministic order so that faceplate PV and SP values are sampled at the same tick boundary; violating this can cause one-second "flickering" between the protection alarm window and the PID faceplate during high-rate transients.
7. MS_Release and the Maintenance Station
The MS_Release signal is the input the Maintenance Station uses to take a field device out of normal control. When set TRUE by the operator, the FbAnIn drives its output to the configured SubstVal and OosAct becomes TRUE. The Maintenance Station faceplate displays a yellow maintenance banner for the tag.
If the project does not include a Maintenance Station, the MS_Release input can be left unconnected; the bit is persistent across reboots because it is stored in the AS work memory, but its only consumer is the Maintenance Station. In a single-station OS, the maintenance function is handled by the standard OOS button on the FbAnIn faceplate.
7.1 Routing MS_Release from two consumers
If a future Maintenance Station needs to release the channel from either the protection CFC or the PID CFC, route both MS_Release outputs through an APL_Or block (or a simple OR instance) and connect the result to the FbAnIn.MS_Release input. The OR block's own Bad and OosAct outputs should be wired to the consumers in turn so that a maintenance event propagates back to both faceplates.
MonAnL.MS_ReleaseOut ─┐
├─> APL_Or.Out ──> FbAnIn.MS_Release
PidConL.MS_ReleaseOut ─┘
7.2 License implications
The MS_Release interlock and the Maintenance Station plug-in are separately licensed. If the Maintenance Station is out of scope (as in the original scenario), the MS_Release pin of the FbAnIn may be left unconnected. The block will still raise alarms, but the operator has no maintenance UI to release the field device from the OS.
8. Handling HART and PROFIBUS-PA Variables
For a PROFIBUS-PA device, the FbAnIn only reads the primary variable (PV). Secondary variables (e.g., device temperature, sensor health) are read acyclically via the FbPa / FbPaEx blocks in the APL. The acyclic channel is independent of the FbAnIn and can be placed in a dedicated @PA_xxx_Diag CFC. Sharing the primary variable does not share the acyclic diagnostic channel; they are separate functional units.
| Module | Order Number | Channels | Notes |
|---|---|---|---|
| ET 200SP AI 4xI 2-wire 4..20 mA HART | 6ES7134-6TD00-0CA1 | 4 | Standard 4–20 mA / HART input; base unit 6ES7193-6BP00-0DA0. |
| ET 200SP AI 4xU/I 4-wire | 6ES7134-6HD00-0CA1 | 4 | Voltage / 4-wire current input, no HART. |
| ET 200M SM 331 AI 8x12-bit | 6ES7331-7KF02-0AB0 | 8 | Classic module for retrofit projects. |
| ET 200PA SMART | 6DL1 153-... | 8 (PA) | Direct PROFIBUS-PA integration; coupler IM 153-2 (6ES7153-2BA10). |
| ET 200iSP AI 4xHART | 6ES7134-7TD00-0AB0 | 4 | Intrinsically safe, Ex zone 1. |
For SIMOCODE pro, SINAMICS, or SIPROCESS variables that share a field device with a hard-wired signal, the I/O sharing rules are identical: one driver block, many consumers.
9. Verification Procedure
- Compile check. CFC → Charts → Compile → Program. The S7 compiler must report zero errors and zero warnings. A warning such as "Output pin PV_Li has no consumer" indicates a missed wiring link.
- Download. Download the program to the AS. Use the "Download to target AS — Changes only" option to preserve online values.
-
Online monitor. Open the @ driver CFC online. Confirm
FbAnIn.PV_Litracks the live transmitter value. Right-click the pin → "Force" → "Do not force" (default) to verify the link is not forced. -
Monitor consumer faceplates. Open the OS Runtime. The
MonAnLfaceplate bar and thePidConLfaceplate PV must display the identical value to one decimal place. A persistent offset indicates a wiring mismatch (e.g., scaled vs. raw). Investigate if the units string differs from the consumer's configured unit. -
Trip test. Inject a test pressure above
AH_Limit. Verify that (a) theMonAnLAH alarm is raised within 1 s, (b) thePidConLcontroller responds (MV moves) within 2 s, and (c) no spurious OOS alarm is generated. -
MS_Release test (if licensed). From the
FbAnInfaceplate, set OOS = TRUE. BothMonAnLandPidConLfaceplates must show the channel as "Out of Service" within one OS refresh cycle (~1 s). Reset and verify the same behaviour. -
Maintenance Station test (if licensed). Issue a maintenance release from each of the three faceplates in turn. The
FbAnInoutput must go toSubstVal, and the other two faceplates must show "Maintenance".
10. Troubleshooting Matrix
| Symptom | Likely Cause | Remedy |
|---|---|---|
| PV_Li link not creatable between CFCs | Drag-and-drop released over a write-only input or the wrong pin direction. | Use the connection editor: CFC → View → I/O Connections. Confirm both CFCs are in the same S7 program. Re-create with the source-output to sink-input semantic. |
| MS_Release conflicting between two CFCs | Two blocks each trying to write the MS_Release input of the same FbAnIn. |
Route both MS_Release outputs through an APL_Or block as described in section 7.1. |
| Faceplate shows different PV in protection and PID views | One consumer is reading PV (raw) and the other is reading PV_Li (scaled). |
Standardize on PV_Li for both consumers; PV should be reserved for raw diagnostic displays. |
| Alarm flood on startup | FbAnIn runs after consumers; PV_Li is read before the first valid sample. | Place the driver CFC in a higher-priority run-time group (lower group number) than the consumers. Re-check BEO after any edit. |
| HART acyclic variables not visible | FbAnIn only handles the primary variable; acyclic data needs FbPa / FbPaEx. | Add a separate FbPa block in a diagnostic CFC; do not couple its PV to the protection / control path. |
| Maintenance Station shows "Unknown state" | MS_Release was not connected or the license is missing. | Verify the Maintenance Station license, route the OR-ed MS_Release to FbAnIn, recompile and download. |
| Output to FbAnOu drops to 0 unexpectedly | MS_Release fired due to a wiring short or faceplate click. | Check OosAct on the FbAnIn faceplate; reset MS_Release from the Maintenance Station. |
| PIW address conflict at compile time | Two FbAnIn instances both bound to the same PIW. | Remove the duplicate; consolidate on the @-prefixed driver CFC. PCS 7 does not warn at HW Config level—only at CFC compile. |
11. Common Field-Engineering Caveats
- Never interconnect through a global DB. PCS 7 CFCs do not need and should not use global DBs for inter-chart signal exchange. Using a global DB breaks the APL signal tracking, alarm generation, and OS faceplate linking.
-
Always propagate
BadandOosAct. Skipping these pins causes the consumer to evaluate stale values when the channel is degraded, leading to nuisance trips or unwanted MV moves. -
Watch the chart-size limit. The OS picture-tree generator in PCS 7 V8.0+ allows up to 32 children per block by default. If you fan out to more than 32 consumers, either split the consumer list or wrap with an
APL_Splitterhelper. -
Re-compile the OS after structural changes. Adding or removing
FbAnIninstances requires an OS re-compile (WinCC Explorer → Variables → Update). The PCS 7 V8.0 SP2 APL manual describes the dependency between CFC compile and OS compile in section 5. - Use distinct alarm classes. Protection (MonAnL) alarms are typically class "Warning high" or "Alarm high" with acknowledgement. PID loop alarms are class "Tolerance" or "Control deviation". Mixing them produces a noisy alarm log.
12. Migration Notes for Older PCS 7 Versions
Projects upgraded from PCS 7 V6.x to V7.x often contain legacy CTRL_PID and MEAS_MON blocks from the older "PCS 7 standard library". The migration tool ("PCS 7 Migration Tool" / "TypeTranslator") replaces these with APL blocks while preserving the interconnection topology. The shared-input pattern is identical: migrate the driver first, then the consumers. The TypeTranslator will keep a single FbAnIn and route the new PidConL / MonAnL outputs to the same peripheral driver.
For V9.0 / V9.1 designs, the new PCS 7 Engineering Efficiency features in the SIMATIC PCS 7 product line introduce "I/O type sharing" as a first-class concept in the APL: a single signal can be declared as a "shared input" in the Master Data Library, and the type system enforces single-FbAnIn at instantiation. The patterns above remain valid; the new functionality just makes them the default.
13. Related Standards and Documentation
- IEC 61131-3 — Programmable controllers, Part 3: Programming languages. Reference for the FBD/LD semantics underlying CFC charts.
- IEC 61784 — Digital data communications for measurement and control. Defines the PROFIBUS and PROFINET communication profiles used by ET 200 stations.
- NE 105 — NAMUR recommendation on "Status of field instruments". Aligns with the
Bad/OosActpropagation philosophy used in PCS 7.
Can a single FbAnIn drive both a MonAnL and a PidConL in PCS 7?
Yes. Use a dedicated @-prefixed driver CFC containing one FbAnIn, then interconnect PV_Li, PV_LiUnit, ScaleOut, Bad, and OosAct to the PV_In, PV_InUnit, PV_OutScl, BadPV, and OosActPV inputs of the MonAnL and PidConL. Do not duplicate the FbAnIn on the same PIW; doing so breaks the Maintenance Station's single-source-of-truth.
What block execution order do I need for the shared FbAnIn?
Place the FbAnIn in the highest-priority runtime group (lowest number) within the chart, and the MonAnL and PidConL in lower-priority groups. The PCS 7 compiler will additionally order blocks to satisfy data-flow dependencies, but a manual group assignment is required for OS Runtime to display consistent faceplate values.
How do I handle MS_Release when both MonAnL and PidConL can release the channel?
Route both MS_Release outputs through an APL_Or block and connect the result to FbAnIn.MS_Release. Without a Maintenance Station license, leave MS_Release unconnected; the operator can still use the OOS button on the FbAnIn faceplate to take the channel out of service.
Should I create a custom Process Tag Type or instance the blocks per unit?
Use a custom Process Tag Type in the Master Data Library if the same loop topology (analog in + MonAnL + PidConL) is repeated in three or more units. For one-off loops, instance the blocks directly in the unit CFCs; the type-system overhead is not worth the effort at low replication counts.
Does the shared-input pattern change the number of POs or licensing cost?
No. PO (Process Object) count is per channel driver instance and per OS-relevant block. Sharing PV_Li from one FbAnIn to N consumers still costs one PO for the FbAnIn plus one PO per consumer faceplate. The pattern does not increase PO cost over the standard "single driver + multiple consumers" arrangement.
Can the shared FbAnIn be on a PROFIBUS-PA or HART device?
Yes. The PV_Li output of FbAnIn is the cyclic primary variable. For acyclic HART variables (device status, secondary PV), add a separate FbPa or FbPaEx block in a dedicated diagnostic CFC; acyclic data is not propagated through PV_Li.