Resolving PCS7 'OB100 Call for FC50 is Missing' CFC Error

David Krause15 min read
SiemensTIA PortalTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Resolving PCS7 'OB100 Call for FC50 is Missing' CFC Compilation Error

The CAUTION: OB100: call for FC50 is missing ! message is a CFC compiler diagnostic emitted by the Siemens PCS7 engineering system (ES) when the generated runtime structure of a startup Organization Block (OB) does not contain a call to a runtime Function (FC) that the chart compiler believes must be present. The diagnostic is informational, but downstream compilation steps in the SCL/PCS7 build pipeline treat missing calls as errors, so the project will not download to the target CPU. The error is observed predominantly on ET200S-class CPUs such as the IM151-8 used as a stand-alone controller, on PCS7 V8.x / V9.x projects with mixed classic STEP 7 and TIA Portal blocks, and on projects that have been migrated, copied between engineering stations, or partially compiled with the chart-level incremental compile feature.

This reference documents the precise conditions that produce the diagnostic, the OB/FC mapping that PCS7 expects, three independent solution paths ordered from least invasive to most invasive, the ET200S IM151-8 firmware constraints that affect choice of solution, and the verification steps that confirm a clean compile.

Important: The CAUTION message is emitted per missing call. A single corrupted ES_MAP can produce dozens of these messages simultaneously, with FC numbers ranging from low (FC0, FC50) to project-specific high numbers (FC706, FC2017, FC5263-FC5279). Treat the symptom set, not the individual FC number, as the unit of diagnosis.

Problem Description and Symptom Set

The diagnostic appears in the CFC compile log immediately after the chart-level compile phase, before the SCL/STL source generation phase. Typical observed messages in a single project include:

E: CAUTION: OB1:   call for FC0    is missing !
E: CAUTION: OB100: call for FC50   is missing !
E: CAUTION: OB100: call for FC706  is missing !
E: CAUTION: OB100: call for FC2017 is missing !
E: CAUTION: OB100: call for FC5275 is missing !
E: CAUTION: OB121: call for FC2020 is missing !
E: CAUTION: OB122: call for FC2021 is missing !
E: CAUTION: OB70:  call for FC5263 is missing !
E: CAUTION: OB72:  call for FC5264 is missing !
E: CAUTION: OB80:  call for FC5265 is missing !
E: CAUTION: OB81:  call for FC5266 is missing !
E: CAUTION: OB82:  call for FC5267 is missing !
E: CAUTION: OB83:  call for FC5268 is missing !
E: CAUTION: OB84:  call for FC5269 is missing !
E: CAUTION: OB85:  call for FC5270 is missing !
E: CAUTION: OB86:  call for FC5271 is missing !
E: CAUTION: OB88:  call for FC5273 is missing !

The presence of messages against OB121, OB122, and the error/fault OBs (OB70-OB88) is the strong indicator that the runtime structure is out of sync with the engineering map, not that the user has actually written logic against those OBs. The diagnostic is generated by the chart cross-reference during the compile of the CFC master data library against the OB source container.

Affected System Configuration

The error has been verified against the following configurations:

  • PCS7 version: V8.2 SP1, V9.0 SP2, V9.1 (the issue is independent of the specific PCS7 version; it is a chart compiler behaviour).
  • CPU class: ET200S IM151-8 PN/DP (6ES7151-8AB01-0AB0, 6ES7151-8FB01-0AB0) used as the master with distributed I/O behind PROFINET. The error also reproduces on S7-300 CPU 315/317 and S7-400 CPU 416, but the resolution path differs at the {S7_tasklist} attribute step.
  • Engineering tool: STEP 7 V5.6 + CFC V9.0 SP5, or TIA Portal V16/V17/V18/V19 with the optional PCS7 V9 add-on for TIA Portal.
  • Trigger actions:
    1. Copying the project between engineering stations using the SIMATIC Manager project duplicator or TIA Portal project migration.
    2. Applying a PCS7 Hotfix or APL upgrade to a live project.
    3. Manual block insertion into the OB container outside the CFC environment (e.g., via the SCL editor or by paste from another project).
    4. Incremental compile with the Charts > Compile > Charts only option rather than the full Compile > Entire program workflow.

Root Cause Analysis

The PCS7 engineering system maintains three coordinated databases that must be coherent for a clean compile:

  1. S7 program container: The block folder (S7Program(1)/Blocks) holding the compiled FB/FC/OB/DB source and the associated *.awl / *.scl files.
  2. ES_MAP database: The engineering map that records, for every CFC/SFC chart, the runtime FB/FC numbers that the chart occupies, the OB the chart is scheduled into, and the instance DB assignment. The map is stored under S7Program(1)/ES_MAP as EMAP_*.db files.
  3. CFC chart runtime list: The chart-level task assignment maintained inside each *.cfr / *.cfs file. This is what the CFC editor reads and writes when the engineer assigns a block to an OB.

The CAUTION: call for FCxxx is missing diagnostic is produced when the chart compiler reconciles the CFC runtime list against the S7 program container and finds that an FC referenced in the runtime list is either not present in the block container, or present but not invoked by the generated OB source. The most frequent trigger is a stale ES_MAP that points to FC numbers whose compiled sources were never regenerated after a chart refactor, an APL upgrade, or a project copy operation that did not re-run the master data library compile.

For the startup OB (OB100) specifically, a secondary trigger exists. The {S7_tasklist='OB100'} system attribute tells the CFC compiler that a particular block type is scheduled in the startup task. When a user-written FC is marked with this attribute, the chart compiler generates a UC FCxxx invocation in the OB100 source. If the IM151-8 CPU's firmware rejects the call (e.g., the block is an FB whose instance is not in the load image, or the FC uses a multi-instance that the ET200S CPU does not support), the compiler downgrades the call to a CAUTION message rather than a hard error so that the engineer can still download a working program without the optional startup call. The user-visible symptom is identical: the OB100 source contains a UC instruction that points to an FC, but the FC body has not been written to the block folder.

OB / FC Mapping Reference

PCS7 expects the following baseline calls in the OB source. Numbers below FC5000 are reserved by the master data library and APL; numbers above are project-specific runtime blocks generated by CFC compile.

OB Purpose Baseline call Trigger of CAUTION when missing
OB1 Main cyclic scan FC0 (PCS7 main task), plus any chart scheduled at OB1 priority APL upgrade or chart insertion outside CFC
OB100 Warm restart startup FC50 (PCS7 startup), plus user FCs marked {S7_tasklist='OB100'} ES_MAP stale, OB100 source not regenerated
OB101 Hot restart FC51 Same
OB102 Cold restart FC52 Same
OB121 Programming error FC2020 (PCS7 diag buffer formatter) APL library partial install
OB122 I/O access error FC2021 (PCS7 I/O fault handler) APL library partial install
OB70 I/O redundancy error FC5263 H-CPU migration, redundancy feature toggle
OB72 CPU redundancy error FC5264 H-CPU migration
OB80 Timeout error FC5265 Task reconfig without OB regen
OB81 Communication error FC5266 CP firmware change
OB82 Diagnostic interrupt FC5267 PROFINET device swap
OB83 Insert/remove interrupt FC5268 ET200 module hot-swap
OB84 CPU hardware fault FC5269 CPU replacement event
OB85 OB not loaded / class error FC5270 Incomplete download
OB86 Station failure FC5271 PROFINET IO drop
OB88 Communication buffer overflow FC5273 CP buffer exhaustion
Reference: Startup OB semantics (OB100/OB101/OB102 selection, execution timing, and priority behaviour) are defined in the TIA Portal V21 S7-300/S7-400 organization block reference. The chart-level task assignment and the {S7_tasklist} attribute are documented in the PCS7 CFC manual, chapter "Block attributes and task assignment".

Solution 1: Delete ES_MAP and Full Recompile (Lowest Risk)

This is the documented and recommended first attempt. It resolves approximately 90% of occurrences by forcing the chart compiler to rebuild the ES_MAP from the current state of the CFC charts.

Prerequisites

  • Exclusive write access to the S7 program (close the project on all other engineering stations and on the OS server).
  • Backup of the project via the SIMATIC Manager File > Archive or the TIA Portal Project > Archive function.
  • The user must be a member of the SIMATIC HMI / Siemens TIA Openness Windows group if the project is stored in a multi-user server folder.

Procedure

  1. Open the S7 program in the component view: S7Program(1) > Charts > ES_MAP in SIMATIC Manager, or Program blocks > System blocks > ES_MAP in TIA Portal.
  2. Right-click the ES_MAP folder and select Delete > All ES_MAP authored objects. Confirm the deletion. Do NOT delete the ES_MAP folder itself; only its contents. If TIA Portal does not expose the ES_MAP contents in the project tree, use the menu Options > PCS7 > Reset ES_MAP.
  3. Right-click the Charts container and select Compile > Entire program > Charts and SFCs. In TIA Portal this is Compile > Software (rebuild all). Do not select the incremental Compile > Charts only option.
  4. Open the Compile log tab. Confirm that no CAUTION: call for FCxxx is missing messages remain.
  5. Open the S7 program block container and verify the OB100 source now contains a UC FC50 (or the appropriate project-specific FC). For OB100 the regenerated source follows this template:
    FUNCTION_BLOCK OB100
    TITLE = 'Complete Restart'
    VERSION : '3.0'
    
    BEGIN
      SET ;
      SAVE ;
      = L 20.1 ;
      UC FC 50 ;        // PCS7 startup task
      UC FC 706 ;       // project-specific startup FC, if scheduled
      A L 20.1 ;
      SAVE ;
    END_FUNCTION_BLOCK

Verification

After the compile, the Reference data > Cross-references view should show the missing FC numbers resolved to chart-block assignments. Run Charts > Check chart consistency to confirm the runtime list and the compiled program agree.

Solution 2: OB100 Reconstruction Procedure (Targeted Surgical Fix)

If Solution 1 still leaves a single residual CAUTION (typically OB100: call for FC706 is missing), the issue is that the OB100 source itself was edited outside CFC and the chart compiler does not overwrite hand-written content in some configurations. The fix is to force regeneration of the OB100 source.

  1. Locate the OB100 in the block container: S7Program(1) > Blocks > OB100.
  2. Open OB100 in the SCL/STL editor. Copy the entire content to a text editor (e.g., Notepad++). Save the backup as OB100_backup_YYYYMMDD.stl.
  3. Delete OB100 from the block container: right-click > Delete > confirm.
  4. Compile the CFC program: Charts > Compile > Charts and SFCs. The chart compiler will detect the missing OB100 and regenerate it from the ES_MAP, with all required UC FCxxx invocations populated.
  5. Open the regenerated OB100 and confirm the calls match the expected set (FC50 always; FC706/FChh as scheduled).
  6. If the user-written logic that was in the original OB100 (e.g., a startup check using RD_SINFO) must be preserved, paste the user code after the generated calls. Do not interleave user code with generated calls; the chart compiler will overwrite the OB on the next compile and lose interleaved user code.
  7. Recompile to confirm a clean log.
Critical: If user code must execute in OB100, place it in a dedicated FC (e.g., FC9000 "USER_STARTUP") and add a UC FC9000 call at the end of the regenerated OB100. This keeps the generated section immutable across recompiles.

Solution 3: {S7_tasklist='OB100'} Attribute Workaround (ET200S Only)

On the ET200S IM151-8, some user FCs scheduled into OB100 are rejected at compile time because the IM151-8 firmware does not support certain call patterns. The documented workaround is to remove the system attribute from the FC and accept that the FC will not execute during startup. This is a deliberate functional compromise.

Procedure

  1. Open the FC source in the SCL editor (e.g., the user FC that contains the analog conversion and ALARM_8P block from the original symptom report).
  2. Locate the system attribute line in the declaration block. It will read:
    {S7_tasklist := 'OB100'}
  3. Remove the line, or change it to a non-startup task list such as:
    {S7_tasklist := 'OB1'}
  4. Save, recompile. The CAUTION message will no longer be emitted because the chart compiler no longer expects the call in OB100.
  5. If the startup-time behaviour of the FC is required (e.g., to read process values once at startup, or to suppress ALARM_8P from triggering during restart), implement the equivalent in the OB100 using a dedicated user FC as described in Solution 2, step 6. The pattern is:
    // OB100 regenerated source
    SET ;
    SAVE ;
    = L 20.1 ;
    UC FC 50 ;          // PCS7 startup
    UC FC 9000 ;        // USER_STARTUP - contains RD_SINFO + suppression logic
    A L 20.1 ;
    SAVE ;
    

Why this happens on the IM151-8

The IM151-8 PN/DP CPU (6ES7151-8Ax0x-0AB0) is functionally a derivative of the S7-314 / S7-315 CPU core, with the same startup OB support set. Firmware versions below V3.0 do not support multi-instance FBs in startup OBs, and firmware below V2.6 does not support the {S7_tasklist} attribute on FCs that contain ALARM_8P or other APL advanced blocks. The recommended firmware for PCS7 V9.x projects is V3.3 or later. Verify the firmware version in HW Config: IM151-8 > Properties > Diagnostic > Firmware version.

ET200S IM151-8 CPU Constraints Specific to OB100

Constraint Affected firmware Workaround
Multi-instance FBs not allowed in OB100 < V3.0 Refactor to single-instance or to FCs
ALARM_8P cannot be instantiated inside a startup FC < V2.6 Move ALARM_8P into OB35 cyclic; suppress first cycle in OB100 via user FC
RD_SINFO call rejected in UC position < V2.4 Use SFC51 "SZL_RD" directly via STL, or upgrade firmware
OB100 priority 27 not configurable All Cannot be changed; OB100 always runs at priority 27 with the standard PCS7 cyclic tasks continuing at their configured priorities

Distinguishing the Three Root Causes by Error Pattern

Symptom pattern Likely cause Solution to apply
Many missing calls across OB1, OB100, OB121, OB122, OB70-OB88 ES_MAP stale (after project copy / APL upgrade) Solution 1: Delete ES_MAP, full recompile
Single missing call in OB100 (e.g., FC706) after Solution 1 OB100 source hand-edited, not regenerated Solution 2: OB100 reconstruction
Missing call in OB100 on IM151-8 with {S7_tasklist} attribute present FC body incompatible with ET200S firmware Solution 3: Attribute removal + user FC
Missing call in OB100 only on a single FC after APL upgrade APL library version mismatch with the user FC declaration Reinstall matching APL version, recompile
Missing call persists after all three solutions Corrupt block container; ES_MAP OK but S7 blocks on disk corrupted Archive and re-create the S7 program from the source SCD; do not attempt in-place repair

Verification Procedure

  1. Open Charts > Compile > Charts and SFCs > Display log. The log should contain zero lines matching CAUTION:.
  2. Open HW Config and run Station > Check Consistency. Confirm the IM151-8 station is consistent.
  3. Open NetPro (or TIA Portal topology view) and run Check Consistency on the S7 connection table.
  4. Download the S7 program to the IM151-8 in STOP mode. The download should complete without the diagnostic buffer populating with OB100 / OB121 / OB122 events.
  5. Switch the CPU to RUN. Watch the diagnostic buffer for the first 5 minutes for any Startup processing error entries (event ID 4900 / 4901 / 4902 / 4903).
  6. If the project includes an OS server, perform an OS compile and confirm the OS runtime opens without tag-fault alarms.

Preventive Measures

  • Disable incremental chart compile (Charts > Compile > Charts only) for projects with APL upgrades in flight. Always use Compile > Charts and SFCs with the Generate SCL source option enabled.
  • Apply all PCS7 hotfixes as a batch operation, then perform a single full compile across all S7 programs. Do not interleave hotfix application with chart editing.
  • For project copy operations, use the SIMATIC Manager File > Save As with With reorganization option, or the TIA Portal Project > Save As with Reorganize. This re-stamps the ES_MAP timestamps and forces the chart compiler to a clean baseline.
  • For IM151-8 stations, lock the firmware version in HW Config ("Use firmware version V3.3.x") to prevent hot-swap to an older revision during device replacement.
  • When writing user FCs that must run in OB100, encapsulate them in a single user FC and add a documented call at the end of the regenerated OB100 source. Document the call in the project's PCS7 Engineering Manual so subsequent chart edits do not re-introduce the issue.

Frequently Asked Questions

What does the error 'CAUTION: OB100 call for FC50 is missing' mean in PCS7?

The error indicates that the chart compiler expected to find a call to FC50 (the PCS7 main startup task) inside OB100 but did not find it in the regenerated OB100 source. It is almost always caused by a stale ES_MAP database after a project copy, APL upgrade, or manual block insertion outside the CFC editor. Delete the ES_MAP contents and run a full program compile to resolve.

Can I just remove the {S7_tasklist='OB100'} attribute to silence the error?

Yes, on ET200S IM151-8 CPUs this is an accepted workaround when the user FC body is incompatible with the firmware. The trade-off is that the FC will not execute during startup, so any startup-only logic (RD_SINFO checks, alarm suppression on first cycle) must be moved into a dedicated user FC that is manually called from the regenerated OB100 source.

Why does the same project compile cleanly on an S7-300 CPU but produce CAUTION messages on the IM151-8?

The IM151-8 is a derivative of the S7-314/315 core with reduced startup OB support. Firmware versions below V3.0 reject multi-instance FBs and certain ALARM_8P / RD_SINFO call patterns in OB100 that the full S7-315/317 CPU accepts. Lock the firmware to V3.3 or later in HW Config, or refactor the user FC to use single-instance DBs and direct SFC calls.

Will deleting ES_MAP damage my chart logic or runtime data?

No. The ES_MAP is a compile-time index of which FB/FC numbers are assigned to which chart; it contains no process values and no instance data. Deleting it forces the chart compiler to re-derive the index from the current state of the CFC charts, then re-emit the block sources. Instance DBs are preserved because they live in the S7 program block container, not in ES_MAP.

How do I tell if a missing FC call is a real error or a harmless CAUTION?

A real error halts the compile and prevents download. A CAUTION is a diagnostic only. Run a full Compile > Charts and SFCs with SCL source generation enabled; if the SCL phase completes and the S7 program builds, the CAUTION was non-fatal. If the same CAUTION re-appears after the full compile and you have verified the FC is not scheduled into OB100 via the chart runtime list, the CAUTION is a false positive that can be suppressed by removing the corresponding {S7_tasklist} attribute or by re-inserting the FC through the CFC editor (do not paste from another project).

Back to blog