Skip to content

EXTERNAL_VAR_IN_FUNCTION

Severity: warn. PLCopen: CP6 — avoid VAR_EXTERNAL inside FUNCTION / FUNCTION_BLOCK / METHOD.

A VAR_EXTERNAL declaration appears inside a FUNCTION, FUNCTION_BLOCK, or METHOD body. PLCopen forbids this because reaching directly into global state from a function-like POU makes it stateful, hard to test in isolation, and brittle when the global is renamed or retyped.

Settings. No check-specific config.

Trigger.

VAR_GLOBAL gFlow : REAL; END_VAR

FUNCTION_BLOCK FB_X
VAR_EXTERNAL
    gFlow : REAL;            (* fires *)
END_VAR
END_FUNCTION_BLOCK

The bot posts.

🟧 warn  EXTERNAL_VAR_IN_FUNCTION
VAR_EXTERNAL gFlow declared inside function_block FB_X (PLCopen CP6)

Fix. Pass the global in via VAR_INPUT or VAR_IN_OUT. If the FB legitimately needs to share state, an instance of a "state holder" FB is usually clearer than a VAR_EXTERNAL.