AgentSkillsCN

scl-reference

SCL(TIA Portal V20+)系统函数参考,包含语法与反模式。当您需要为S7-1200/S7-1500生成或修订SCL代码、选择原生函数,或厘清控制结构的语法、转换、字符串、定时器与计数器时使用。

SKILL.md
--- frontmatter
name: scl-reference
description: 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.

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 SCRIVEREUSA 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 manualeCONCAT(IN1:=str1, IN2:=str2)
Conversioni impliciteFunzioni CONVERT o TO_* esplicite
IF val >= min AND val <= max THEN...IN_RANGE(MIN:=min, VAL:=val, MAX:=max)
Calcoli manuali su date/tempiT_ADD, T_SUB, T_DIFF
Scaling manuale (val - rawMin) * (engMax - engMin) / (rawMax - rawMin) + engMinSCALE_X e NORM_X
Loop con indice per copiare arrayMOVE_BLK o FILL_BLK
val := val * (-1); per negazioneval := 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

CategoriaFileFunzioni principali
Mathfunctions/math.jsonLIMIT, MIN, MAX, ABS, NEG, MOD, SQR, SQRT, SIN, COS, ROUND, TRUNC
Comparisonfunctions/comparison.jsonSEL, IN_RANGE, OUT_RANGE, EQ, NE, LT, GT, LE, GE
Conversionfunctions/conversion.jsonCONVERT, SCALE_X, NORM_X, TO_INT, TO_REAL, TO_BOOL
Movefunctions/move.jsonMOVE, MOVE_BLK, FILL_BLK, SWAP, CountOfElements, IS_ARRAY
Bitwisefunctions/bitwise.jsonAND, OR, XOR, NOT, SHL, SHR, ROL, ROR
Timersfunctions/timers.jsonTON, TOF, TP, TONR
Countersfunctions/counters.jsonCTU, CTD, CTUD
Triggersfunctions/triggers.jsonR_TRIG, F_TRIG, P_TRIG, N_TRIG
Program Controlfunctions/program_control.jsonIF, CASE, FOR, WHILE, REPEAT, EXIT, CONTINUE, RETURN, GOTO

Extended Instructions

CategoriaFileFunzioni principali
Stringfunctions/string.jsonCONCAT, LEN, LEFT, RIGHT, MID, FIND, REPLACE, DELETE, INSERT, S_CONV
Date and Timefunctions/date_time.jsonRD_SYS_T, RD_LOC_T, T_ADD, T_SUB, T_DIFF, T_COMBINE
Alarms & Diagfunctions/alarms_diagnostics.jsonProgram_Alarm, Get_AlarmState, GET_DIAG, LED
Addressingfunctions/data_block_addressing.jsonPEEK, POKE, READ_DBL, WRIT_DBL, TypeOf, GetSymbolName
Distributed I/Ofunctions/distributed_io.jsonRDREC, WRREC, DPRD_DAT, DPWR_DAT
Communicationfunctions/communication.jsonTSEND_C, TRCV_C, TCON, TDISCON, GET, PUT
Tech & Safetyfunctions/technology_safety.jsonPID_Compact, CTRL_HSC, ESTOP1, ACK_GL
Motion Controlfunctions/motion_control.jsonMC_Power, MC_Reset, MC_Home, MC_MoveAbsolute

Data Types Reference

DocumentoContenuto
data_types.jsonTutti i tipi di dati SCL: BOOL, INT, DINT, REAL, STRING, ARRAY, STRUCT, DTL, ecc.

Programming Fundamentals

DocumentoContenuto
code_blocks.jsonBlocchi di codice: OB, FC, FB, DB, UDT - quando usarli e come
block_interface.jsonInterfacce blocchi: VAR_INPUT, VAR_OUTPUT, VAR_IN_OUT, VAR_TEMP, VAR, regole dichiarazione
plc_tags.jsonPLC 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