SIMATIC S7 Controlador programable S7-1200 SCL SCL El lenguaje de control estructurado (SCL, Structured Control Language) es un lenguaje de programación 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 programación: SCL, KOP y FUP. Las instrucciones de SCL emplean operadores de programación estándar, p. ej. para asignación (:=) o para funciones matemáticas (+ para la suma, - para la resta, * para la multiplicación y / para la división). SCL también utiliza operaciones de control de programa PASCAL estándar, tales como IF-THEN-ELSE, CASE, REPEAT-UNTIL, GOTO y RETURN. Es posible utilizar cualquier referencia PASCAL para elementos sintácticos del lenguaje de programación SCL. Muchas otras instrucciones de SCL, como los temporizadores y contadores, se corresponden con las instrucciones de KOP y FUP. Para más información sobre determinadas instrucciones, véanse las instrucciones específicas de las secciones correspondientes a Instrucciones básicas e Instrucciones avanzadas. Es posible designar cualquier tipo de bloque (OB, FB o FC) para utilizar el lenguaje de programación en el momento de crear el bloque. STEP 7 cuenta con un editor de programas SCL que incluye los elementos siguientes: • • • Sección de interface para definir los parámetros del bloque lógico Sección de código para el código del programa Árbol de instrucciones que contiene las instrucciones SCL soportadas por la CPU El código SCL para la instrucción se introduce directamente en la sección de código. El editor incluye botones para las construcciones y comentarios de código habituales. Para obtener instrucciones más complejas, basta con arrastrar las instrucciones SCL del árbol de instrucciones y soltarlas en el programa. También se puede emplear cualquier editor de texto para crear un programa SCL y, a continuación, 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 21/11/2016 SIMATIC S7 Controlador programable S7-1200 SCL En la sección de interfaz del bloque lógico SCL se pueden declarar los tipos de parámetros siguientes: • • • Input, Output, InOut y Ret_Val: estos parámetros definen las variables de entrada, las variables de salida y el valor de retorno del bloque lógico. El nombre de la variable introducida en este punto se emplea de forma local durante la ejecución del bloque lógico. 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 lógico utiliza variables estáticas para almacenar resultados intermedios estáticos en el bloque de datos de instancia. El bloque retiene datos estáticos hasta que se sobrescriben, lo cual puede ocurrir después de varios ciclos. Los nombres de los bloques, que este bloque llama como multiinstancia, también se almacenan en los datos locales estáticos. Temp: estos parámetros son variables temporales que se emplean durante la ejecución del bloque lógico. Si se llama el bloque lógico SCL desde otro bloque lógico, los parámetros del bloque lógico 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 declaración 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 21/11/2016 SIMATIC S7 Controlador programable S7-1200 SCL Construir una expresión SCL Una expresión SCL es una fórmula para calcular un valor. La expresión consiste en operandos y operadores (p. ej. *, /, + o -). Los operandos pueden ser variables, constantes o expresiones. La evaluación de la expresión se desarrolla en un orden determinado, que está definido por los siguientes factores: • • • Cada operador tiene una prioridad predefinida y la operación 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 paréntesis para designar una serie de operadores que deben evaluarse conjuntamente. El resultado de una expresión se puede utilizar para asignar un valor a una variable utilizada por el programa, como una condición que debe ser considerada en una instrucción de control, o como parámetros para otra instrucción SCL o para llamar un bloque lógico. Tabla 1 Operadores en SCL Tipo Operación Operador Prioridad Paréntesis (Expresión) (,) 1 Matemáticas Alimentación ** 2 Signo (más unario) + 3 Signo (menos unario) - 3 Multiplicación * 4 División / 4 Modulo MOD 4 Suma + 5 Resta - 5 Menor < 6 Menor o igual <= 6 Mayor > 6 Mayor o igual >= 6 Igual = 7 Diferente <> 7 Negación (unaria) NOT 3 Combinación Y lógica Yo& 8 Combinación lógica O-exclusiva XOR 9 Combinación lógica O O 10 Parametrización := 11 Comparación Lógica con bits Parametrización 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 21/11/2016 SIMATIC S7 Controlador programable S7-1200 SCL Como lenguaje de programación de alto nivel, SCL utiliza instrucciones estándar para tareas básicas: • • • • Instrucción de asignación: := Funciones matemáticas: +, -, * 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 símbolo "#") 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; Asignación a una variable de bloque de datos IF #A > #B THEN "C" := #A; Condición de la instrucción IF-THEN "C" := SQRT (SQR (#A) + SQR (#B)); Parámetros de la instrucción SQRT Los operadores aritméticos pueden procesar varios tipos de datos numéricos. El tipo de datos resultante lo determina el tipo de datos de los operandos más significativos. Por ejemplo, una operación de multiplicación que emplea un operando INT y un operando REAL da como resultado un valor REAL. Instrucciones de control Una instrucción de control es un tipo de expresión SCL especializada, que realiza las siguiente tareas: • • • • Ramificación del programa Repetición de secciones del código del programa SCL Salto a otras partes del programa SCL Ejecución condicionada Las instrucciones de control de SCL incluyen IF-THEN, CASE-OF, FOR-TO-DO, WHILE-DO, REPEAT-UNTIL, CONTINUE, GOTO y RETURN. Una instrucción única generalmente ocupa una línea de código. Es posible introducir varias instrucciones en una línea o dividir una instrucción en varias líneas de código para que el código resulte más comprensible. Los separadores (como tabulaciones, saltos de línea o espacios adicionales) se ignoran durante la comprobación de sintaxis. Una instrucción END termina la instrucción de control. Los siguientes ejemplos muestran una instrucción de control FOR-TO-DO. (Ambas formas de codificación son válidas sintácticamente.) 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 21/11/2016 SIMATIC S7 Controlador programable S7-1200 SCL FOR x := 0 TO max DO sum := sum + value(x); END_FOR; Una instrucción de control también puede llevar una etiqueta. Una etiqueta se inserta colocando dos puntos (:) al comienzo de la instrucción: Etiqueta: <Instrucción>; La ayuda en línea de STEP 7 ofrece una completa referencia del lenguaje de programación SCL. Condiciones Una condición es una expresión de comparación o una expresión lógica cuyo resultado es del tipo BOOL (con el valor TRUE o bien FALSE). El siguiente ejemplo muestra condiciones de varios tipos. #Temperatura > 50 Expresión de relación #Contador <= 100 #CHAR1 < 'S' (#Alpha <> 12) AND NOT #Beta Comparación y expresión lógica 5 + #Alpha Expresión aritmética Una condición puede utilizar expresiones aritméticas: • • La condición de la expresión es TRUE si el resultado es cualquier valor diferente a cero. La condición de la expresión es FALSE si el resultado es igual a cero. Direccionamiento Igual que en el caso de KOP y FUP, SCL permite utilizar variables (direccionamiento simbólico) o direcciones absolutas en el programa de usuario. SCL también permite utilizar una variable como índice de matriz. Direccionamiento absoluto %I0.0 %MB100 Debe colocar el símbolo "%" delante de las direcciones absolutas. Sin el símbolo "%", STEP 7 genera un error de variable no definido durante el tiempo de compilación. Direccionamiento simbólico "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 21/11/2016 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 parámetros de offsets de byte, o de bit, específicos para la operación. Nota Para usar las instrucciones PEEK y POKE con bloques de datos deben usarse bloques de datos estándar (no optimizados). Nótese que las instrucciones PEEK y POKE solo transfieren datos. Desconocen los tipos de datos que hay en las direcciones. PEEK (area:=_in_, et:=_in_); dbNumber:=_in_, Lee el byte referenciado por byteOffset del bloque byteOffs de datos, E/S o área de memoria referenciados. 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 (area:=_in_, et:=_in_); dbNumber:=_in_, Lee la palabra referenciada por byteOffset del byteOffs bloque de datos, E/S o área de memoria referenciados. Ejemplo: %MW200 := PEEK_WORD(area:=16#84, dbNumber:=1, byteOffset:=#i); PEEK_DWORD (area:=_in_, dbNumber:=_in_, et:=_in_); Lee la doble palabra referenciada por byteOffset byteOffs del bloque de datos, E/S o área de memoria 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 21/11/2016 SIMATIC S7 Controlador programable S7-1200 SCL PEEK_BOOL (area:=_in_, dbNumber:=_in_, et:=_in_, bitOffset:=_in_); Lee un booleano referenciado por el bitOffset y el byteOffs byteOffset del bloque de datos, E/S o área de memoria referenciados. Ejemplo: %MB100.0 := PEEK_BOOL(area:=16#84, dbNumber:=1, byteOffset:=#ii, bitOffset:=#j); POKE (area:=_in_, et:=_in_, dbNumber:=_in_, value:=_in_); Escribe el valor (Byte, Word o DWord) en el byteOffs byteOffset referenciado del bloque de datos, E/S o á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 (area_src:=_in_, dbNumber_src:=_in_, byteOffset_src:=_in_, area_dest:=_in_, dbNumber_dest:=_in_, byteOffset_dest:=_in_ , count:=_in_); Escribe el número de "recuento" de bytes empezando por el offset de bytes referenciado del bloque de datos, E/S o área de memoria de origen referenciados en el byteOffset referenciado del 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 parámetros "area", "area_src" y "area_dest". Para otras áreas distintas de los bloques de datos, el parámetro 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 21/11/2016 SIMATIC S7 Controlador programable S7-1200 SCL 16#82 Q 16#83 M 16#84 DB Llamar otros bloques lógicos desde el programa SCL Para llamar otro bloque lógico en el programa de usuario, basta con introducir el nombre (o dirección absoluta) del FB o la FC que contiene los parámetros. En el caso de un FB, también hay que indicar un DB de instancia para llamarlo con el FB. <Nombre de DB> (lista de parámetros) Llamar como instancia única <#Nombre de instancia> (lista de parámetros) Llamar como multiinstancia "MyDB"(MyInput:=10, MyInOut:="Tag1"); <Nombre de FC> (Lista de parámetros) Llamada estándar <Operando>:=<Nombre de FC> (Lista de parámetros) Llamar en una expresión "MyFC"(MyInput:=10, MyInOut:="Tag1"); También se pueden arrastrar bloques desde el árbol de navegación al editor del programa SCL y completar la asignación de parámetros. Adición de comentarios de bloque al código SCL Puede incluir un comentario de bloque en el código SCL mediante la inclusión del texto del comentario entre (* y *). Puede incluir tantas líneas de comentario como desee entre (* y *). El bloque de programa SCL puede incluir varios comentarios de bloque. A efectos de programación, el editor de SCL incluye un botón de comentarios de bloque junto con las instrucciones de control habituales: Ver también → Instrucciones básicas → 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 21/11/2016