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:
- •Performance: funzioni TIA sono ottimizzate dal compilatore S7-1500 (esecuzione CPU piu veloce)
- •Certificazione: testate e certificate da Siemens
- •Leggibilita: codice riconoscibile da altri programmatori PLC
- •Manutenibilita: chi legge sa cosa fa LIMIT, non deve interpretare IF/THEN
- •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
- •Identifica la categoria dalla tabella sopra
- •Leggi solo il file .json necessario (risparmio token)
- •Se la funzione non e' nell'indice, cercala su support.industry.siemens.com
- •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 - •
CASEsupporta valori singoli, range (min..max), e liste (val1, val2, val3) - •
FOR...TOincrementa,FOR...DOWNTOdecrementa - •
WHILEtesta prima (pre-test),REPEAT...UNTILtesta dopo (post-test) - •
EXITesce dal loop,CONTINUEsalta all'iterazione successiva - •
RETURNesce dalla funzione/FB
Fallback
Se una funzione non e' documentata qui:
- •Cerca in
index.json - •Se non presente, usa web search su:
site:support.industry.siemens.com SCL <nome_funzione> - •Documenta la nuova funzione per uso futuro
Riferimenti
- •sources.md - Fonti consultate
- •incomplete.md - Funzioni non documentate
- •index.json - Lookup rapido funzioni
LINT and Syntax Rules
- •LINT rules: lint_rules.json
- •Syntax patterns: syntax_rules.json
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