Skip to content

Coming from TIA Portal

SCL is Structured Text with Siemens conventions, and TIA’s FBD is the IEC function block diagram with networks. nautilus runs the IEC languages, so most of the body of an SCL program is already valid Structured Text. The differences are in how a project is organised and in a handful of SCL extensions. Every row below says which of three things it is:

  • Today: works on the current release.
  • Planned: pursued in the parity batch, linked to its issue, and not available yet. Do not write projects that depend on it.
  • Declined: not coming, with the alternative.
TIA PortalnautilusStatus
OB1 (cyclic)a task in nautilus.yaml with a scan period, one program file eachToday
FCFUNCTION: no state, returns a valueToday
FBFUNCTION_BLOCK: state per instanceToday
Instance DBthe instance, declared pump : MotorStarter; under VARToday
Multi-instancean instance declared inside another block’s VARToday
Global DBa UDT-typed tag in the manifest (type: Motor), or plain tagsToday
PLC tag tabletags in nautilus.yaml or tags/*.yamlToday
Tag table visible in every blockmanifest tags are in scope in every program without a declaration (VAR_EXTERNAL stays legal). A function block reaches a tag only through its own VAR_EXTERNAL, so it stays self-contained, as a TIA FB with its interface doesToday, #177, #210
Data type column (Int, Bool, Real, Time, a UDT)the tag’s type:: any elementary type, a UDT, or an ARRAY; init: must agree with itToday, #200
UDT with Time members seeded by default valuesinit: seeds a TIME member from T#2s, 2s or milliseconds, and an array member from a listToday, #201
An error in one blockreported once, on its own line; the blocks that use it are not markedToday, #199
Libraryfiles in lib/, composed ahead of every taskToday
Global library, version managementnot available; copy or vendor the lib/ files with gitDeclined for now, #193
SCLnautilusStatus
IF, CASE, FOR, WHILE, REPEATthe sameToday
CASE labels that are named constantsthe same: a VAR CONSTANT (or project constant, or enumeration member) label ends its clause; two labels with one value are an error naming bothToday, #196
Case-insensitive identifiers (MyTag = mytag)the same: any casing names the one declaration, and diagnostics, live values and the API show it as declaredToday, #197
#name for a local variablewrite name. # is rejected everywhere with “the # prefix is Siemens SCL syntax; write the name without it”. It may be accepted later only under dialect: siemensRejected with a clear message, #198
"Tag" quoted global namewrite the tag’s plain nameNot applicable
VAR_TEMPthe same as Temp: starts every call (and every scan of a program) at its initial valueToday, #203
REGION … END_REGIONthe same: groups statements, folds in the editor, shows in the Outline, opens no scopeToday, #202
User constantsVAR CONSTANT in a block, or VAR_GLOBAL CONSTANT in a lib/ file for the whole projectToday, #176
Real, DInt, Time in SCL’s casingthe same; any casingToday
Word.%X3 bit access, %B/%W/%D partial accessthe same, or Logix’s Word.3; bounded by the declared typeToday, #222
IEC_TIMER / TON DBt : TON; and t(IN := Run, PT := T#5S);Today

Standard timers and counters have the IEC pins, so SCL calls such as t(IN := Run, PT := T#5S); Done := t.Q; carry over unchanged.

TIA FBD or LADnautilusStatus
Networka RUNG in ladder, with a name and a comment. In FBD the netlist is one flat list of wiresToday. A NETWORK 'title' line starts a numbered network in FBD; see networks
Network title and commentthe (* … *) slot on a rungToday. The optional title after NETWORK
EN / ENO on standard blocksany block takes EN (TRUE when unbound) and gives ENO; see EN/ENOToday
Execution order by networksource order, with a block evaluated before its readersToday
Block call from the paletteFB… in the ladder palette; the FBD palette suggests blocksToday. Suggesting the project’s own FUNCTIONs in FBD is #204
Open inputs left unconnectedan unconnected input must be bound or dropped from the call#205

naut new my-plant --template minimal --language fbd scaffolds an FBD program; nautilus: Create Project… asks for the language. Then read the tag model first: it is where a global DB or a tag table maps, and the one rule that surprises everyone, which is that naming a tag binds it and does not create it.