Está en la página 1de 8

SIMATIC S7 Controlador programable S7-1200

SCL

SCL

El lenguaje de control estructurado (SCL, Structured Control Language) es un lenguaje de


programacin de alto nivel basado en PASCAL para las CPU de SIMATIC S7. SCL soporta la
estructura de bloques de STEP 7. Su proyecto puede incluir bloques de programa en uno de
los tres lenguajes de programacin: SCL, KOP y FUP.
Las instrucciones de SCL emplean operadores de programacin estndar, p. ej. para
asignacin (:=) o para funciones matemticas (+ para la suma, - para la resta, * para la
multiplicacin y / para la divisin). SCL tambin utiliza operaciones de control de programa
PASCAL estndar, tales como IF-THEN-ELSE, CASE, REPEAT-UNTIL, GOTO y RETURN.
Es posible utilizar cualquier referencia PASCAL para elementos sintcticos del lenguaje de
programacin SCL. Muchas otras instrucciones de SCL, como los temporizadores y
contadores, se corresponden con las instrucciones de KOP y FUP. Para ms informacin
sobre determinadas instrucciones, vanse las instrucciones especficas de las secciones
correspondientes a Instrucciones bsicas e Instrucciones avanzadas.
Es posible designar cualquier tipo de bloque (OB, FB o FC) para utilizar el lenguaje de
programacin en el momento de crear el bloque. STEP 7 cuenta con un editor de programas
SCL que incluye los elementos siguientes:
Seccin de interface para definir los parmetros del bloque lgico

Seccin de cdigo para el cdigo del programa

rbol de instrucciones que contiene las instrucciones SCL soportadas por la CPU

El cdigo SCL para la instruccin se introduce directamente en la seccin de cdigo. El editor


incluye botones para las construcciones y comentarios de cdigo habituales. Para obtener
instrucciones ms complejas, basta con arrastrar las instrucciones SCL del rbol de
instrucciones y soltarlas en el programa. Tambin se puede emplear cualquier editor de texto
para crear un programa SCL y, a continuacin, importar el archivo a STEP 7.

This document constitutes a free excerpt compiled by the user himself/herself from the documentation provided by Siemens for this product. Siemens disclaims
all liability for the completeness of this document. It shall only be used for the user's own internal purposes. It shall not be passed on to third parties. The complete
documentation can be found at:
/dokumentation/default.aspx?DocVersionId=62121591435&Language=es-ES&TopicId=52965963659 27/05/2017
SIMATIC S7 Controlador programable S7-1200
SCL

En la seccin de interfaz del bloque lgico SCL se pueden declarar los tipos de parmetros
siguientes:
Input, Output, InOut y Ret_Val: estos parmetros definen las variables de entrada, las variables de
salida y el valor de retorno del bloque lgico. El nombre de la variable introducida en este punto se
emplea de forma local durante la ejecucin del bloque lgico. Normalmente, no se emplea el nombre
de variables globales en la tabla de variables.

Static (solo FB; la figura de arriba corresponde a una FC): el bloque lgico utiliza variables estticas
para almacenar resultados intermedios estticos en el bloque de datos de instancia. El bloque
retiene datos estticos hasta que se sobrescriben, lo cual puede ocurrir despus de varios ciclos.
Los nombres de los bloques, que este bloque llama como multiinstancia, tambin se almacenan en
los datos locales estticos.

Temp: estos parmetros son variables temporales que se emplean durante la ejecucin del bloque
lgico.

Si se llama el bloque lgico SCL desde otro bloque lgico, los parmetros del bloque lgico
SCL aparecen como entradas o salidas.

En este ejemplo, las variables de "Start" y "On" (de la tabla de variables de proyecto) se
corresponden con "StartStopSwitch" y "RunYesNo" en la tabla de declaracin del programa
SCL.

This document constitutes a free excerpt compiled by the user himself/herself from the documentation provided by Siemens for this product. Siemens disclaims
all liability for the completeness of this document. It shall only be used for the user's own internal purposes. It shall not be passed on to third parties. The complete
documentation can be found at:
/dokumentation/default.aspx?DocVersionId=62121591435&Language=es-ES&TopicId=52965963659 27/05/2017
SIMATIC S7 Controlador programable S7-1200
SCL

Construir una expresin SCL


Una expresin SCL es una frmula para calcular un valor. La expresin consiste en operandos
y operadores (p. ej. *, /, + o -). Los operandos pueden ser variables, constantes o expresiones.

La evaluacin de la expresin se desarrolla en un orden determinado, que est definido por


los siguientes factores:
Cada operador tiene una prioridad predefinida y la operacin con mayor prioridad se ejecuta en
primer lugar.

Si tienen la misma prioridad, los operadores se procesan en una secuencia de izquierda a derecha.

Se utilizan parntesis para designar una serie de operadores que deben evaluarse conjuntamente.

El resultado de una expresin se puede utilizar para asignar un valor a una variable utilizada
por el programa, como una condicin que debe ser considerada en una instruccin de control,
o como parmetros para otra instruccin SCL o para llamar un bloque lgico.

Tabla 1 Operadores en SCL


Tipo Operacin Operador Prioridad

Parntesis (Expresin) (,) 1

Matemticas Alimentacin ** 2

Signo (ms unario) + 3

Signo (menos unario) - 3

Multiplicacin * 4

Divisin / 4

Modulo MOD 4

Suma + 5

Resta - 5

Comparacin Menor < 6

Menor o igual <= 6

Mayor > 6

Mayor o igual >= 6

Igual = 7

Diferente <> 7

Lgica con bits Negacin (unaria) NOT 3

Combinacin Y lgica Yo& 8

Combinacin lgica O-exclusiva XOR 9

Combinacin lgica O O 10

Parametrizacin Parametrizacin := 11

This document constitutes a free excerpt compiled by the user himself/herself from the documentation provided by Siemens for this product. Siemens disclaims
all liability for the completeness of this document. It shall only be used for the user's own internal purposes. It shall not be passed on to third parties. The complete
documentation can be found at:
/dokumentation/default.aspx?DocVersionId=62121591435&Language=es-ES&TopicId=52965963659 27/05/2017
SIMATIC S7 Controlador programable S7-1200
SCL

Como lenguaje de programacin de alto nivel, SCL utiliza instrucciones estndar para tareas
bsicas:
Instruccin de asignacin: :=

Funciones matemticas: +, -, * y /

Direccionamiento de variables globales (variables): "<nombre de variable>" (nombre de la variable


o nombre del bloque de datos encerrado entre comillas dobles)

Direccionamiento de variables locales: #<nombre de variable> (nombre de la variable precedido por


el smbolo "#")

Los ejemplos siguientes muestran diferentes expresiones para diversos usos.

"C" := #A+#B; Asigna la suma de dos variables locales a una


variable
"Data_block_1".Tag := #A; Asignacin a una variable de bloque de datos
IF #A > #B THEN "C" := #A; Condicin de la instruccin IF-THEN
"C" := SQRT (SQR (#A) + SQR (#B)); Parmetros de la instruccin SQRT

Los operadores aritmticos pueden procesar varios tipos de datos numricos. El tipo de datos
resultante lo determina el tipo de datos de los operandos ms significativos. Por ejemplo, una
operacin de multiplicacin que emplea un operando INT y un operando REAL da como
resultado un valor REAL.

Instrucciones de control
Una instruccin de control es un tipo de expresin SCL especializada, que realiza las siguiente
tareas:
Ramificacin del programa

Repeticin de secciones del cdigo del programa SCL

Salto a otras partes del programa SCL

Ejecucin condicionada

Las instrucciones de control de SCL incluyen IF-THEN, CASE-OF, FOR-TO-DO, WHILE-DO,


REPEAT-UNTIL, CONTINUE, GOTO y RETURN.
Una instruccin nica generalmente ocupa una lnea de cdigo. Es posible introducir varias
instrucciones en una lnea o dividir una instruccin en varias lneas de cdigo para que el
cdigo resulte ms comprensible. Los separadores (como tabulaciones, saltos de lnea o
espacios adicionales) se ignoran durante la comprobacin de sintaxis. Una instruccin END
termina la instruccin de control.
Los siguientes ejemplos muestran una instruccin de control FOR-TO-DO. (Ambas formas de
codificacin son vlidas sintcticamente.)

FOR x := 0 TO max DO sum := sum + value(x); END_FOR;

This document constitutes a free excerpt compiled by the user himself/herself from the documentation provided by Siemens for this product. Siemens disclaims
all liability for the completeness of this document. It shall only be used for the user's own internal purposes. It shall not be passed on to third parties. The complete
documentation can be found at:
/dokumentation/default.aspx?DocVersionId=62121591435&Language=es-ES&TopicId=52965963659 27/05/2017
SIMATIC S7 Controlador programable S7-1200
SCL

FOR x := 0 TO max DO sum := sum + value(x); END_FOR;

Una instruccin de control tambin puede llevar una etiqueta. Una etiqueta se inserta
colocando dos puntos (:) al comienzo de la instruccin:

Etiqueta: <Instruccin>;

La ayuda en lnea de STEP 7 ofrece una completa referencia del lenguaje de programacin
SCL.

Condiciones
Una condicin es una expresin de comparacin o una expresin lgica cuyo resultado es del
tipo BOOL (con el valor TRUE o bien FALSE). El siguiente ejemplo muestra condiciones de
varios tipos.

#Temperatura > 50 Expresin de relacin

#Contador <= 100

#CHAR1 < 'S'


(#Alpha <> 12) AND NOT #Beta Comparacin y expresin lgica
5 + #Alpha Expresin aritmtica

Una condicin puede utilizar expresiones aritmticas:


La condicin de la expresin es TRUE si el resultado es cualquier valor diferente a cero.

La condicin de la expresin es FALSE si el resultado es igual a cero.

Direccionamiento
Igual que en el caso de KOP y FUP, SCL permite utilizar variables (direccionamiento simblico)
o direcciones absolutas en el programa de usuario. SCL tambin permite utilizar una variable
como ndice de matriz.

Direccionamiento absoluto
%I0.0 Debe colocar el smbolo "%" delante de las direcciones
absolutas. Sin el smbolo "%", STEP 7 genera un error
%MB100
de variable no definido durante el tiempo de compilacin.

Direccionamiento simblico
"PLC_Tag_1" Variable en la tabla de variables PLC
"Data_block_1".Tag_1 Variable en un bloque de datos

This document constitutes a free excerpt compiled by the user himself/herself from the documentation provided by Siemens for this product. Siemens disclaims
all liability for the completeness of this document. It shall only be used for the user's own internal purposes. It shall not be passed on to third parties. The complete
documentation can be found at:
/dokumentation/default.aspx?DocVersionId=62121591435&Language=es-ES&TopicId=52965963659 27/05/2017
SIMATIC S7 Controlador programable S7-1200
SCL

"Data_block_1".MyArray[#i] Elemento de una matriz de bloque de datos

Direccionamiento indexado con instrucciones PEEK y POKE


SCL ofrece instrucciones PEEK y POKE que permiten leer de bloques de datos, E/S o
memoria, o escribir en ellos. Hay que proporcionar parmetros de offsets de byte, o de bit,
especficos para la operacin.

Nota
Para usar las instrucciones PEEK y POKE con bloques de datos deben usarse bloques de
datos estndar (no optimizados). Ntese que las instrucciones PEEK y POKE solo transfieren
datos. Desconocen los tipos de datos que hay en las direcciones.

PEEK Lee el byte referenciado por byteOffset del bloque


(area:=_in_, dbNumber:=_in_, byteOffs de datos, E/S o rea de memoria referenciados.
et:=_in_); Ejemplo de referencia al bloque de datos:

%MB100 := PEEK(area:=16#84, dbNumber:=1,


byteOffset:=#i);

Ejemplo de referencia a la entrada IB3:

%MB100 := PEEK(area:=16#81, dbNumber:=0,


byteOffset:=#i); // when #i = 3
PEEK_WORD Lee la palabra referenciada por byteOffset del
(area:=_in_, dbNumber:=_in_, byteOffs bloque de datos, E/S o rea de memoria
et:=_in_); referenciados.
Ejemplo:

%MW200 := PEEK_WORD(area:=16#84,
dbNumber:=1, byteOffset:=#i);
PEEK_DWORD Lee la doble palabra referenciada por byteOffset
(area:=_in_, dbNumber:=_in_, byteOffs del bloque de datos, E/S o rea de memoria
et:=_in_); referenciados.
Ejemplo:

%MD300 := PEEK_DWORD(area:=16#84,
dbNumber:=1, byteOffset:=#i);

This document constitutes a free excerpt compiled by the user himself/herself from the documentation provided by Siemens for this product. Siemens disclaims
all liability for the completeness of this document. It shall only be used for the user's own internal purposes. It shall not be passed on to third parties. The complete
documentation can be found at:
/dokumentation/default.aspx?DocVersionId=62121591435&Language=es-ES&TopicId=52965963659 27/05/2017
SIMATIC S7 Controlador programable S7-1200
SCL

PEEK_BOOL Lee un booleano referenciado por el bitOffset y el


(area:=_in_, dbNumber:=_in_, byteOffs byteOffset del bloque de datos, E/S o rea de
et:=_in_, bitOffset:=_in_); memoria referenciados.
Ejemplo:

%MB100.0 := PEEK_BOOL(area:=16#84,
dbNumber:=1, byteOffset:=#ii, bitOffset:=#j);
POKE Escribe el valor (Byte, Word o DWord) en el
(area:=_in_, dbNumber:=_in_, byteOffs byteOffset referenciado del bloque de datos, E/S o
et:=_in_, value:=_in_); rea de memoria referenciados.
Ejemplo de referencia al bloque de datos:

POKE(area:=16#84, dbNumber:=2, byteOffset:=3,


value:="Tag_1");

Ejemplo de referencia a la salida QB3:

POKE(area:=16#82, dbNumber:=0, byteOffset:=3,


value:="Tag_1");
POKE_BOOL Escribe el valor booleano en el bitOffset y
(area:=_in_, dbNumber:=_in_, byteOffs byteOffset referenciados del bloque de datos, E/S
et:=_in_, bitOffset:=_in_, value:=_in_); o rea de memoria referenciados.
Ejemplo:

POKE_BOOL(area:=16#84, dbNumber:=2,
byteOffset:=3, bitOffset:=5, value:=0);
POKE_BLK Escribe el nmero de "recuento" de bytes
(area_src:=_in_, dbNumber_src:=_in_, empezando por el offset de bytes referenciado del
byteOffset_src:=_in_, area_dest:=_in_, bloque de datos, E/S o rea de memoria de origen
dbNumber_dest:=_in_, byteOffset_dest:=_in_ referenciados en el byteOffset referenciado del
, count:=_in_); bloque de datos, E/S o rea de memoria de destino
referenciados.
Ejemplo:

POKE_BLK(area_src:=16#84,
dbNumber_src:=#src_db,
byteOffset_src:=#src_byte, area_dest:=16#84,
dbNumber_dest:=#src_db,
byteOffset_dest:=#src_byte, count:=10);

Para las instrucciones PEEK y POKE, se aplican los valores siguientes de los parmetros
"area", "area_src" y "area_dest". Para otras reas distintas de los bloques de datos, el
parmetro dbNumber debe ser 0.

16#81 I

This document constitutes a free excerpt compiled by the user himself/herself from the documentation provided by Siemens for this product. Siemens disclaims
all liability for the completeness of this document. It shall only be used for the user's own internal purposes. It shall not be passed on to third parties. The complete
documentation can be found at:
/dokumentation/default.aspx?DocVersionId=62121591435&Language=es-ES&TopicId=52965963659 27/05/2017
SIMATIC S7 Controlador programable S7-1200
SCL

16#82 Q

16#83 M

16#84 DB

Llamar otros bloques lgicos desde el programa SCL


Para llamar otro bloque lgico en el programa de usuario, basta con introducir el nombre (o
direccin absoluta) del FB o la FC que contiene los parmetros. En el caso de un FB, tambin
hay que indicar un DB de instancia para llamarlo con el FB.

<Nombre de DB> (lista de parmetros) Llamar como instancia nica


<#Nombre de instancia> (lista de parmetros) Llamar como multiinstancia

"MyDB"(MyInput:=10, MyInOut:="Tag1");

<Nombre de FC> (Lista de parmetros) Llamada estndar


<Operando>:=<Nombre de FC> (Lista de parmetros) Llamar en una expresin

"MyFC"(MyInput:=10, MyInOut:="Tag1");

Tambin se pueden arrastrar bloques desde el rbol de navegacin al editor del programa
SCL y completar la asignacin de parmetros.

Adicin de comentarios de bloque al cdigo SCL


Puede incluir un comentario de bloque en el cdigo SCL mediante la inclusin del texto del
comentario entre (* y *). Puede incluir tantas lneas de comentario como desee entre (* y *).
El bloque de programa SCL puede incluir varios comentarios de bloque. A efectos de
programacin, el editor de SCL incluye un botn de comentarios de bloque junto con las
instrucciones de control habituales:

Ver tambin
Instrucciones bsicas
Instrucciones avanzadas
Utilizar bloques para estructurar el programa

This document constitutes a free excerpt compiled by the user himself/herself from the documentation provided by Siemens for this product. Siemens disclaims
all liability for the completeness of this document. It shall only be used for the user's own internal purposes. It shall not be passed on to third parties. The complete
documentation can be found at:
/dokumentation/default.aspx?DocVersionId=62121591435&Language=es-ES&TopicId=52965963659 27/05/2017