Skip to content

Verified: Coming from Codesys

Each claim the Coming from Codesys page makes, with the tests that prove it in the last green CI run: 5 of 15 verified, 1 with no test yet. The claims live in docs/claims/codesys.yaml.

Last green CI run 16 Oct 2026, 14:48 UTC on c7618d3 · all runtime claims

CCS-001 partly verified

The same POU (PROGRAM, FUNCTION_BLOCK, FUNCTION) written in `.st`, `.ld`, `.fbd` or `.sfc` runs with the same behaviour.

where the docs say so · Cross-language parity is checked per conformance feature; SFC runs only the features written for it.

CCS-002 partly verified

Identifiers are case-insensitive: any casing names the one declaration, shown as declared.

where the docs say so · Resolution is tested; "shown as declared" is not tested outside FBD call spelling.

  • pass TestConformance/st-case-insensitive in lang/conformance (3 of 3 passed)
  • pass TestLowerCaseInsensitiveIdentifiers in lang/st

CCS-003 partly verified

Tags in `nautilus.yaml` or `tags/*.yaml` are in scope in every program without a declaration (`VAR_EXTERNAL` stays legal), and a function block names the ones it uses in its own `VAR_EXTERNAL`.

where the docs say so · Only tags declared in nautilus.yaml are shown to be in scope without a declaration; a tag from tags/*.yaml is not. That VAR_EXTERNAL stays legal for a manifest tag is not asserted by these tests (the block side is).

CCS-004 partly verified

A `gvl.st` with a file-level `VAR_GLOBAL` block declares globals for every program; one the manifest does not declare is a `state` tag starting at zero. An initial value goes in the manifest's `init:`.

where the docs say so · Composition into every program and the zero start are asserted. That the global is a `state` tag, and that the manifest's `init:` sets its initial value, are not.

CCS-005 partly verified

`VAR_GLOBAL CONSTANT` in a `lib/` file is seen by every POU and folded at compile time; the constants are not tags.

where the docs say so · Read from PROGRAMs in all four languages, including as an array bound (which needs a compile-time value); a FUNCTION_BLOCK or FUNCTION reading one is not exercised, and "not tags" is not asserted.

CCS-006 partly verified

Enumerations (`TYPE E : (A, B, C)` and `(A := 1, ...)`) work as in Codesys: `E#A` or plain `A` in comparisons and `CASE` labels, `TO_INT` / `TO_E`, and live values show the member name.

where the docs say so · `TO_E` conversion from an integer is not tested.

CCS-007 verified

`VAR_TEMP` is reset on every call.

where the docs say so

CCS-008 verified

`CASE` on named constants runs the clause of the matching constant.

where the docs say so

CCS-009 partly verified

`VAR_IN_OUT` works as in Codesys: the block reads and writes the caller's variable by reference.

where the docs say so · Struct by-reference is tested through ladder; scalar and array VAR_IN_OUT are not separately asserted.

  • pass TestLadderFunctionBlockInOutStructPin in lang/ld

CCS-010 verified

`Step.X` and `Step.T` work as in Codesys: `Step.X` is TRUE while the step is active and `Step.T` is the elapsed `TIME` in the step, usable in a condition such as `ChargeA.T >= T#5M`.

where the docs say so

CCS-011 verified

Action qualifiers `N`, `S`, `R` and `P` work as in Codesys, plus `P1` and `P0`: N while the step is active, S sets once, R clears, P and P1 fire one scan wide on entry, P0 on exit.

where the docs say so

CCS-012 verified

Alternative branch priority is declaration order, first highest, and a lower branch fires when the higher ones are false.

where the docs say so

CCS-013 partly verified

A transition is evaluated once per scan from a snapshot, with divergence activating every target in the same scan and convergence waiting for every source.

where the docs say so · The page defers to the SFC page for these semantics; they are claimed here only by reference.

CCS-014 no test yet

Numeric transition priority, transition conditions in LD/FBD/IL and action bodies in LD/FBD/IL are not supported: transitions are ST expressions and action bodies are ST.

where the docs say so · No test asserts the refusal of a non-ST transition or action body.

CCS-015 partly verified

Library manager and `.library` files are not available: reusable blocks live in `lib/` and are shared by copying or vendoring.

where the docs say so · Only that `lib/` works; the absence of library-manager support is not tested (and not testable as such).