Cargando el progreso local…
PLC Gym
Inicio de PLC GymNivel 1, 0 XP · tu progreso
TIA Portal V20

Siemens SCL

Probado en el simulador

S7-1500 estándar · almacenamiento optimizado de FB · variables locales # en SCL.

Estructura
Interfaz con tipos; asignaciones, IF / ELSIF / ELSE, listas CASE con INT/DINT con signo y REGION / END_REGION. Los rangos en CASE quedan fuera de este subconjunto.
Expresiones
Lógica BOOL, aritmética numérica, comparaciones y paréntesis. INT, DINT, REAL y TIME. & también significa AND. ABS, LIMIT, MIN, MAX, ROUND y TRUNC funcionan con números. Un REAL pasa a INT o DINT mediante ROUND o TRUNC: TIA Portal no lo convierte por sí solo. Los comentarios son // hasta el final de la línea, (* ... *), o (/* ... */) para un comentario que se puede traducir.
Instrucciones con estado
Temporizadores TON_TIME, TOF_TIME, TP_TIME y TONR_TIME; contadores IEC_COUNTER.CTU, CTD_INT y CTUD_INT con PV/CV de tipo INT; R_TRIG y F_TRIG. La lista de abajo los incluye todos.
Bucles FOR y EXIT
FOR counter := start TO end BY step DO … END_FOR; usa un contador INT/DINT, límites inclusivos y un BY opcional (por defecto +1). Los pasos negativos funcionan. EXIT sale del bucle más interno. No cambies el contador, el final ni los operandos de BY dentro del cuerpo; un BY igual a cero se rechaza.
Arreglos
Declara ARRAY[0..9] OF REAL en la interfaz del bloque; lee o escribe #Samples[#Index]. Elementos BOOL, INT, DINT y REAL, incluidos límites inferiores negativos.
Tipos de datos PLC y FB
Tipos de datos PLC con nombre (tabla o documento TYPE) y FB reutilizables con Input, Output, InOut, Static y Temp. Declara las instancias de FB en Static y llama a #Instance(Input := …, Output => …).
Límites de ejecución
Arreglos de una dimensión: hasta 256 elementos cada uno y 1,024 valores de almacenamiento expandidos por programa. Cada elemento aparece en Observar variables y en la repetición. Un índice fuera de rango detiene el escaneo e indica el índice real y los límites permitidos. Los bucles comparten el presupuesto de 20,000 operaciones por escaneo, incluso con el cuerpo vacío. Son límites de la academia.
Fuera de este subconjunto
WHILE / REPEAT, el operador de potencia **, las demás funciones matemáticas (SQRT, SIN, etc.), arreglos multidimensionales, arreglos de UDT o de instancias, estructuras anidadas anónimas, copias de arreglos enteros, tus propias funciones con valor de retorno, direccionamiento por punteros y archivos de proyecto nativos.

Temporizadores, contadores y autorretenciones

TON TON_TIME
Retardo a la conexión. Q se activa cuando IN lleva activo el tiempo PT, y se desactiva con IN. #Delay(IN := #Start, PT := T#2s); Siemens(página oficial)
TOF TOF_TIME
Retardo a la desconexión. Q se activa con IN y sigue activa durante PT después de que IN se desactiva. #RunOn(IN := #Start, PT := T#2s); Siemens(página oficial)
TP TP_TIME
Impulso. Q está activa durante PT desde cada flanco ascendente de IN, haga lo que haga IN después. Un flanco nuevo mientras dura el impulso se ignora. #Dose(IN := #Start, PT := T#2s); Siemens(página oficial)
TONR TONR_TIME
Acumulador de tiempo. ET suma el tiempo que IN está activo y lo conserva cuando IN se desactiva. Q se activa al llegar a PT y sigue activa. R borra ET y Q. #RunTime(IN := #Running, R := #Clear, PT := T#1h); Siemens(página oficial)
CTU IEC_COUNTER
Cuenta hacia arriba. Cada flanco ascendente de CU suma 1 a CV. Q está activa cuando CV es PV o más. R pone CV a 0. #Bottles.CTU(CU := #Sensor, R := #Clear, PV := 6); Siemens(página oficial)
CTD CTD_INT
Cuenta hacia abajo. LD carga PV en CV. Cada flanco ascendente de CD resta 1. Q está activa cuando CV es 0 o menos. #Left(CD := #Sensor, LD := #Refill, PV := 12); Siemens(página oficial)
CTUD CTUD_INT
Cuenta hacia arriba y hacia abajo. CU suma 1, CD resta 1, y los dos en el mismo escaneo dejan CV igual. R pone CV a 0 y LD carga PV. QU está activa con PV o más, QD con 0 o menos. #Stock(CU := #In, CD := #Out, R := #Clear, LD := FALSE, PV := 10); Siemens(página oficial)

SR, RS y la bobina negada son cajas de LAD y FBD. En SCL, escribe un biestable con IF y un bit invertido con NOT.

Tipos de datos PLC y FB

Agrupa los datos de un equipo y reutiliza un bloque de control probado

Probado en el simulador
  • Un UDT describe un grupo de valores relacionados. PumpStatus guarda el estado de marcha y el total de arranques; no ejecuta ninguna lógica.
  • PumpControl contiene la lógica reutilizable. DutyControl y StandbyControl son instancias separadas: comparten la definición, pero cada una conserva sus propios valores de Latch y WasRunning.
  • Las entradas se dan en la llamada. Running se copia a la salida después de la ejecución. Status es un InOut estructurado que apunta a la variable de estado de esa bomba; escribir Status.Starts actualiza los datos de quien llama.
  • Cada llamada se ejecuta en el orden del programa. Saltarse una llamada conserva los valores de su instancia y de su salida; un IF alrededor de una llamada no es una orden de paro. Da la entrada de bloqueo o de Stop y ejecuta el bloque para apagar la bomba.

Declara PumpStatus como tipo de datos PLC y PumpControl como FB. Declara DutyControl/StandbyControl en Static para llamadas multiinstancia. SCL usa variables locales con #, Input/InOut := y Output =>. En este modelo didáctico optimizado, los datos Temp se borran en cada llamada.

Tipo de datos PLC · documento TYPE
TYPE
    PumpStatus : STRUCT
        Running : BOOL;
        Starts : DINT;
    END_STRUCT;
END_TYPE
FB PumpControl · interfaz
NombreSecciónTipo de datos
StartEntradaBOOL
StopEntradaBOOL
PermitEntradaBOOL
FaultEntradaBOOL
RunningOutputBOOL
StatusInOutPumpStatus
LatchStaticBOOL
WasRunningStaticBOOL
Cuerpo del FB (SCL)
#Latch := (#Start OR #Latch) AND NOT #Stop AND #Permit AND NOT #Fault;
IF #Latch AND NOT #WasRunning THEN
    #Status.Starts := #Status.Starts + 1;
END_IF;
#Status.Running := #Latch;
#Running := #Latch;
#WasRunning := #Latch;
Dos instancias llamadas desde la rutina principal
#DutyControl(Start := #Start, Stop := #Stop, Permit := #Permit, Fault := #Fault, Running => #PumpOn, Status := #DutyStatus);
#StandbyControl(Start := #StandbyStart, Stop := #Stop, Permit := #Permit, Fault := #StandbyFault, Running => #StandbyPump, Status := #StandbyStatus);

Pruébalo en el banco de trabajo

Abre una misión en SCL misión y usa el Tipos de datos PLC y Bloques de función (pestañas). Luego declara las instancias en Interfaz del bloque.

  1. Revisa el UDT y la definición del bloque, y luego las dos instancias con nombres distintos.
  2. En pausa, fuerza Start a TRUE en la pestaña Entradas y avanza varios escaneos: PumpOn sigue activa y DutyStatus.Starts sube una vez.
  3. Suelta Start. El enclavamiento mantiene en marcha la bomba principal. Arranca la de reserva; su cuenta de arranques es independiente.
  4. Pon Fault en ON: la bomba principal se para al instante mientras la de reserva sigue funcionando. Pulsa Stop durante la ejecución, o fuerza Stop a TRUE en la pestaña Entradas estando en pausa: las dos se paran.
  5. Rebobina un escaneo grabado y compara las variables de estado de quien llama con el estado local del bloque y las líneas ejecutadas del bloque.

El contrato de la simulación

  • Tarea virtual fija de 20 ms. La velocidad de reproducción y la tasa de fotogramas 3D no cambian los resultados.
  • Cada escenario de prueba empieza con el controlador y la planta en estado nuevo.
  • Las ediciones detienen la ejecución. Los resultados y la repetición pertenecen a la revisión del programa que se probó.
  • REAL usa precisión de 32 bits. Un desbordamiento de entero no admitido produce un diagnóstico.
  • Los contadores guardan valores INT. Los demás tamaños de contador (SINT, DINT y los tipos sin signo) y los temporizadores LTIME no están implementados aquí.
  • Los cálculos NORM_X/SCALE_X válidos se admiten en FBD. Los rangos no válidos se detienen con un diagnóstico; no se reproducen los resultados ENO/de error nativos.
  • Los diagramas usan un solo camino activo y acciones booleanas N/S/R. Las acciones temporizadas nativas, los caminos paralelos y las opciones de último escaneo/reset quedan fuera de este modelo.
  • La división entera descarta la parte decimal: 7 / 2 es 3. Las comparaciones decimales usan la precisión del operando; un valor REAL de 0.1 es igual a 0.1. Usa un operando REAL para una división con decimales.
  • SCL acepta constantes REAL con tipo, como REAL#2.0. Los cálculos en coma flotante ambiguos usan la doble precisión del S7-1500 antes de asignarse a una variable REAL.
  • La retención tras un corte de alimentación, la E/S real, la temporización de red y el firmware del fabricante quedan fuera del modelo.

Leer la documentación original

Esta academia enseña un subconjunto acotado. Para verificarlo de forma nativa hay que compilar y probar en el software del fabricante indicado.

La corrección de la entrevista se hace en este navegador. El flujo presencial actual es un prototipo local, no un servicio seguro de evaluación remota. Los archivos de exportación están en beta y hay que comprobar su importación y comportamiento en TIA Portal V20 o Studio 5000.

El comportamiento básico se ha revisado con los manuales oficiales de Logix, el manual del S7-1200 y la guía del S7-1200/1500. Los documentos de Siemens son anteriores a V20. El comportamiento de TwinCAT sigue las páginas de referencia de Tc2_Standard de Beckhoff y el manual de PLC de TwinCAT 3. Esta revisión no sustituye las pruebas en el controlador de destino, sobre todo para la temporización de diagramas y los bloques reutilizables.

Siemens TIA Portal V20Studio 5000 v38Manual de bloques de función de LogixManual de SFC de LogixLenguajes de PLC de TwinCAT 3TON de TwinCAT Tc2_StandardCTU de TwinCAT Tc2_Standard