DeLuAle

scl-reference

Riferimento per funzioni di sistema SCL (TIA Portal V20+) con sintassi e anti-pattern. Usa quando devi generare o revisionare codice SCL per S7-1200/S7-1500, scegliere funzioni native o chiarire la sintassi di costrutti di controllo, conversioni, stringhe, timer e contatori.

DeLuAle 2 Updated 4mo ago

Resources

7
GitHub

Install

npx skillscat add deluale/framework-parser/scl-reference

Install via the SkillsCat registry.

SKILL.md

SCL Reference - TIA Portal V20+

Quando usare questa skill

Usa questa documentazione prima di scrivere codice SCL se devi:

  • usare funzioni di sistema (LIMIT, CONCAT, MOVE_BLK, ecc.)
  • verificare la sintassi esatta di una funzione TIA
  • sostituire logica manuale con una funzione nativa equivalente
  • risolvere errori di compilazione legati a funzioni TIA
  • usare costrutti di controllo (IF, FOR, CASE, WHILE, REPEAT)

REGOLE OBBLIGATORIE

R1: Usa sempre le funzioni di sistema TIA

NON reimplementare funzioni che esistono native.
Usa le funzioni di sistema documentate in questa skill.

Motivazioni tecniche:

  1. Performance: funzioni TIA sono ottimizzate dal compilatore S7-1500 (esecuzione CPU piu veloce)
  2. Certificazione: testate e certificate da Siemens
  3. Leggibilita: codice riconoscibile da altri programmatori PLC
  4. Manutenibilita: chi legge sa cosa fa LIMIT, non deve interpretare IF/THEN
  5. Conformita: standard IEC 61131-3

R2: Anti-pattern vietati

NON SCRIVERE USA INVECE
IF val < min THEN val := min; ELSIF val > max THEN val := max; END_IF; val := LIMIT(MN:=min, IN:=val, MX:=max);
IF a < b THEN result := a; ELSE result := b; END_IF; result := MIN(IN1:=a, IN2:=b);
IF a > b THEN result := a; ELSE result := b; END_IF; result := MAX(IN1:=a, IN2:=b);
IF cond THEN result := valTrue; ELSE result := valFalse; END_IF; result := SEL(G:=cond, IN0:=valFalse, IN1:=valTrue);
IF NOT prev AND curr THEN... (fronte salita manuale) Istanza R_TRIG
IF prev AND NOT curr THEN... (fronte discesa manuale) Istanza F_TRIG
Concatenazione stringhe manuale CONCAT(IN1:=str1, IN2:=str2)
Conversioni implicite Funzioni CONVERT o TO_* esplicite
IF val >= min AND val <= max THEN... IN_RANGE(MIN:=min, VAL:=val, MAX:=max)
Calcoli manuali su date/tempi T_ADD, T_SUB, T_DIFF
Scaling manuale (val - rawMin) * (engMax - engMin) / (rawMax - rawMin) + engMin SCALE_X e NORM_X
Loop con indice per copiare array MOVE_BLK o FILL_BLK
val := val * (-1); per negazione val := NEG(IN:=val);

R3: Self-check prima di consegnare codice

Prima di finalizzare codice SCL, verifica:

  • Ho usato IF/THEN/ELSE per qualcosa che ha una funzione nativa?
  • Ho reimplementato MIN/MAX/LIMIT/ABS/SEL/IN_RANGE?
  • Ho gestito fronti senza R_TRIG/F_TRIG?
  • Ho fatto conversioni di tipo senza funzioni CONVERT/TO_*?
  • Ho manipolato stringhe senza funzioni STRING native (CONCAT, MID, FIND)?
  • Ho fatto calcoli su date/tempi senza T_ADD/T_SUB/T_DIFF?
  • Ho fatto scaling manuale senza SCALE_X/NORM_X?
  • Ho copiato array con loop invece di MOVE_BLK?
  • Ho usato timer/counter senza istanze IEC (TON, TOF, CTU)?
  • Ho scritto costrutti di controllo con sintassi incerta?

Se anche una sola risposta e' SI, riscrivi usando le funzioni di sistema.

Quick Index

Basic Instructions

Categoria File Funzioni principali
Math functions/math.json LIMIT, MIN, MAX, ABS, NEG, MOD, SQR, SQRT, SIN, COS, ROUND, TRUNC
Comparison functions/comparison.json SEL, IN_RANGE, OUT_RANGE, EQ, NE, LT, GT, LE, GE
Conversion functions/conversion.json CONVERT, SCALE_X, NORM_X, TO_INT, TO_REAL, TO_BOOL
Move functions/move.json MOVE, MOVE_BLK, FILL_BLK, SWAP, CountOfElements, IS_ARRAY
Bitwise functions/bitwise.json AND, OR, XOR, NOT, SHL, SHR, ROL, ROR
Timers functions/timers.json TON, TOF, TP, TONR
Counters functions/counters.json CTU, CTD, CTUD
Triggers functions/triggers.json R_TRIG, F_TRIG, P_TRIG, N_TRIG
Program Control functions/program_control.json IF, CASE, FOR, WHILE, REPEAT, EXIT, CONTINUE, RETURN, GOTO

Extended Instructions

Categoria File Funzioni principali
String functions/string.json CONCAT, LEN, LEFT, RIGHT, MID, FIND, REPLACE, DELETE, INSERT, S_CONV
Date and Time functions/date_time.json RD_SYS_T, RD_LOC_T, T_ADD, T_SUB, T_DIFF, T_COMBINE
Alarms & Diag functions/alarms_diagnostics.json Program_Alarm, Get_AlarmState, GET_DIAG, LED
Addressing functions/data_block_addressing.json PEEK, POKE, READ_DBL, WRIT_DBL, TypeOf, GetSymbolName
Distributed I/O functions/distributed_io.json RDREC, WRREC, DPRD_DAT, DPWR_DAT
Communication functions/communication.json TSEND_C, TRCV_C, TCON, TDISCON, GET, PUT
Tech & Safety functions/technology_safety.json PID_Compact, CTRL_HSC, ESTOP1, ACK_GL
Motion Control functions/motion_control.json MC_Power, MC_Reset, MC_Home, MC_MoveAbsolute

Data Types Reference

Documento Contenuto
data_types.json Tutti i tipi di dati SCL: BOOL, INT, DINT, REAL, STRING, ARRAY, STRUCT, DTL, ecc.

Programming Fundamentals

Documento Contenuto
code_blocks.json Blocchi di codice: OB, FC, FB, DB, UDT - quando usarli e come
block_interface.json Interfacce blocchi: VAR_INPUT, VAR_OUTPUT, VAR_IN_OUT, VAR_TEMP, VAR, regole dichiarazione
plc_tags.json PLC Tags: organizzazione, I/O mapping, retentive, best practices

Procedura di Consultazione

  1. Identifica la categoria dalla tabella sopra
  2. Leggi solo il file .json necessario (risparmio token)
  3. Se la funzione non e' nell'indice, cercala su support.industry.siemens.com
  4. Se non esiste funzione nativa, implementa con IF/THEN documentando il motivo

Sintassi Costrutti di Controllo

Per la sintassi completa di tutti i costrutti di controllo (IF, CASE, FOR, WHILE, REPEAT) con tutte le varianti, consulta program_control.json.

Punti chiave:

  • ELSIF (non ELSEIF) per condizioni multiple in IF
  • CASE supporta valori singoli, range (min..max), e liste (val1, val2, val3)
  • FOR...TO incrementa, FOR...DOWNTO decrementa
  • WHILE testa prima (pre-test), REPEAT...UNTIL testa dopo (post-test)
  • EXIT esce dal loop, CONTINUE salta all'iterazione successiva
  • RETURN esce dalla funzione/FB

Fallback

Se una funzione non e' documentata qui:

  1. Cerca in index.json
  2. Se non presente, usa web search su: site:support.industry.siemens.com SCL <nome_funzione>
  3. Documenta la nuova funzione per uso futuro

Riferimenti

LINT and Syntax Rules

Expanded coverage: control structures, types, and best-practice lint checks in lint_rules.json; syntax patterns in syntax_rules.json.
Expanded coverage includes safety, style, naming, and performance lint rules.

Lint Data Files

  • lint_rules.json
  • lint_patterns.json
  • lint_checks.json
  • lint_functions.json
  • lint_types.json

Motion Control Data Files

  • mc_functions.json
  • mc_to_structures.json
  • mc_error_codes.json

Motion Control Lint Data

  • mc_status_lint.json
  • mc_naming_conventions.json

Lint Examples

  • lint_examples.json

Motion Control Categories

  • mc_move.json
  • mc_stop.json
  • mc_power.json
  • mc_sync.json
  • mc_cam.json
  • mc_other.json
  • mc_params_schema.json

Motion Control Index

  • mc_rule_map.json
  • mc_index.json