Vous êtes sur la page 1sur 30

s

SIMATIC
S7-SCL V5.3 para S7-300/400

Getting Started Edicin 02/2004

Primeros pasos
El ejemplo que acompaa a este producto no es una descripcin aislada,
sino que forma parte del manual.
Consignas de seguridad para el usuario
Este manual contiene las informaciones necesarias para la seguridad personal as como para la
prevencin de daos materiales. Las informaciones estn puestas de relieve mediante seales de
precaucin. Las seales que figuran a continuacin representan distintos grados de peligro:

! Peligro
Significa que, si no se adoptan las medidas preventivas adecuadas, se producir la muerte, o bien
lesiones corporales graves o daos materiales considerables.

! Advertencia
Significa que, si no se adoptan las medidas preventivas adecuadas, puede producirse la muerte,
lesiones corporales graves o daos materiales considerables.

! Precaucin
Significa que, si no se adoptan las medidas preventivas adecuadas, pueden producirse lesiones
corporales.

Precaucin
Significa que, si no se adoptan las medidas preventivas adecuadas, pueden producirse daos
materiales.

Atencin
Se trata de una informacin importante, sobre el producto o sobre una parte determinada del manual,
sobre la que se desea llamar particularmente la atencin.

Personal cualificado
Slo est autorizado a intervenir en este equipo el personal cualificado. En el sentido del manual se
trata de personas que disponen de los conocimientos tcnicos necesarios para poner en
funcionamiento, conectar a tierra y marcar los aparatos, sistemas y circuitos de acuerdo con las normas
estndar de seguridad.

Uso conforme
Considere lo siguiente:

! Advertencia
El equipo o los componentes del sistema slo se podrn utilizar para los casos de aplicacin
previstos en el catlogo y en la descripcin tcnica, y slo con los equipos y componentes de
proveniencia tercera recomendados y homologados por Siemens.
El funcionamiento correcto y seguro del producto presupone un transporte, un almacenamiento, una
instalacin y un montaje conforme a las prcticas de la buena ingeniera, as como un manejo y un
mantenimiento rigurosos.

Marcas registradas
SIMATIC, SIMATIC NET y SIMATIC HMI son marcas registradas por SIEMENS AG.
Los restantes nombres y designaciones contenidos en el presente documento pueden ser marcas
registradas cuya utilizacin por terceros para sus propios fines puede violar los derechos de los
proprietarios.

Copyright Siemens AG 2004 All rights reserved Exencin de responsabilidad


La divulgacin y reproduccin de este documento, as como el uso Hemos probado el contenido de esta publicacin con la
y la comunicacin de su contenido, no estn autorizados, a no ser concordancia descrita para el hardware y el software. Sin
que se obtenga el consentimiento expreso para ello. Los embargo, es posible que se den algunas desviaciones que nos
infractores quedan obligados a la indemnizacin de los daos. Se impiden tomar garanta completa de esta concordancia. El
reservan todos los derechos, en particular para el caso de contenido de esta publicacin est sometido a revisiones
concesin de patentes o de modelos de utilidad. regularmente y en caso necesario se incluyen las correcciones en
la siguiente edicin. Agradecemos sugerencias.

Siemens AG
Bereich Automation and Drives
Geschaeftsgebiet Industrial Automation Systems Siemens AG 2004
Postfach 4848, D- 90327 Nuernberg Sujeto a cambios sin previo aviso.
Siemens Aktiengesellschaft A5E00290620-01
Disear un programa SCL

Bienvenido al ejemplo de iniciacin "Adquisicin de valores


medidos"

Qu aprender?
El ejemplo de iniciacin ilustra cmo configurar SCL de forma eficaz. Al principio, las
preguntas ms frecuentes son p. ej.:
Cmo se trabaja con SCL al disear programas?
Qu medios ofrece el lenguaje SCL para solucionar la tarea planteada?
De qu funciones de test dispongo?
En este captulo se dar respuesta a stas y otras preguntas.

Medios utilizados en el lenguaje SCL


En el ejemplo aparecen, entre otros, los siguientes elementos de lenguaje SCL:
Estructura y utilizacin de los diferentes tipos de bloques en SCL
Llamada del bloque con transferencia y evaluacin de parmetros
Distintos formatos de entrada y salida
Programacin con tipos de datos simples y arrays
Inicializacin de variables
Estructuras con ramificaciones y bucles

Hardware necesario
El programa de ejemplo se puede ejecutar en un SIMATIC S7-300 o SIMATIC S7-400 con la
siguiente periferia:
un mdulo de entrada de 16 canales
un mdulo de salida de 16 canales

Funciones de test disponibles


El programa est estructurado de manera que el usuario pueda testearlo rpidamente
mediante los pulsadores a la entrada y los indicadores en la salida. Para realizar un test
exhaustivo, es mejor utilizar las funciones de test de SCL.
Adems, el usuario dispone de todas las posibilidades del paquete bsico STEP 7 en varios
idiomas.

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 3
Disear un programa SCL

Planteamiento

Resumen
La tarea consiste en adquirir valores medidos a travs de un mdulo de entrada y
clasificarlos y procesarlos con un programa SCL. Los resultados deben visualizarse en el
mdulo de salida.

Adquisicin de valores medidos


Un valor medido se ajusta a travs de los 8 interruptores de entrada. Cuando en uno de los
interruptores de entrada se detecte un flanco (v. figura siguiente), habr que registrar dicho
valor en el array del valor medido.
El margen permitido para los valores medidos oscila entre 0 y 255. Por consiguiente se
requiere un byte para la entrada.

Procesamiento de valores medidos


El array del valor medido debe ser un bfer anular de 8 entradas como mximo.
Si en un interruptor de clasificacin se detecta un flanco, habr que clasificar los valores
guardados en el array de valor medido en orden ascendente. Despus se calcular la raz y
el cuadrado de cada uno de los valores. Para las funciones de procesamiento se necesita
una palabra.

Introducir datos x=Valoracin del flanco


Interruptor Interruptor de
de entrada Valor medido clasificacin

X 1 1 1 1 1 1 1 1 X

255

Raz Cuadrado

255 1 1 1

127 3 2 9

63 7 Clculos 3 49

31 15 4 225

15 31 6 961

7 63 8 3969

3 127 11 16129

1 255 16 *

(* = Desbordamiento)
Adquirir valores Clasificar valores
medidos medidos Calcular resultados

Getting Started S7-SCL V5.3 para S7-300/400


4 A5E00290620-01
Disear un programa SCL

Salidas ajustables
En el mdulo de salida slo se puede mostrar un valor. Por eso se programarn las
siguientes opciones:
Seleccin de un elemento de una lista
Seleccin entre valor medido, raz y cuadrado
La seleccin del valor mostrado se realiza de la manera siguiente:
Con tres interruptores se ajusta una codificacin que se acepta al detectarse un flanco en
el cuarto interruptor, el interruptor de codificacin. A partir de aqu se calcula la direccin
con la que se direccionar la salida.
Con la misma direccin se ponen a disposicin tres valores para la salida: valor medido,
raz y cuadrado. Para seleccionar uno de estos valores, hay que programar dos
conmutadores.

Introducir datos x=Valores del flanco


Interruptor en mdulo de entrada 1
Dos conmutadores Codificacin 1 Interruptor de codificacin
0 1 0 X

Raz o Valor medido


cuadrado o resultado 3

Valor medido Raz Cuadrado

1 1 1

3 Direccionar 2 9
salida
7 3 49

15 4 225

31 6 961
Conmutador
63 8 3969
Seleccionar
127 salida 11 16129

255 16 *
Direccin Direccin
Valores Resultados
clasificados
(* = Desbordamiento)

Salida de datos
Visualizacin en mdulos 4
de salida
Salida

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 5
Disear un programa SCL

Crear un programa estructurado con SCL

Tipos de bloques
La mejor manera de solucionar la tarea planteada es mediante un programa SCL
estructurado. Dicho programa tiene estructura modular; es decir, se compone de bloques
que procesan una o varias tareas parciales. Al igual que los lenguajes de programacin de
STEP 7, SCL ofrece los siguientes tipos de bloques.

Los bloques de organizacin forman la interface entre el sistema operativo


de la CPU S7 y el programa de usuario. Aqu se determina la secuencia
OB de ejecucin de los bloques del programa de usuario.

Los bloques de funcin son bloques lgicos con datos estticos. Dado que un
FB FB dispone de memoria, se puede acceder a sus parmetros (p.ej. salidas)
desde cualquier punto del programa de usuario.

Las funciones son bloques lgicos sin memoria. Dado que no existe memoria,
Bloques FC hay que procesar los valores calculados justo despus de llamar a la funcin.
de STEP 7
Los bloques de datos son reas de datos en las que se guardan los datos de
DB usuario. Existen bloques de datos globales, a los que se puede acceder
desde todos los bloques lgicos, y DB de instancia asignados a una
llamada a FB determinada.
Los tipos de datos definidos por el usuario son tipos de datos configurados
UDT que se pueden definir segn las necesidades del usuario y son de uso
mltiple. Estos datos se emplean para generar varios bloques de datos
con la misma configuracin. Los UDT se utilizan como bloques.

Getting Started S7-SCL V5.3 para S7-300/400


6 A5E00290620-01
Disear un programa SCL

Organizacin de los bloques en fuentes SCL


Un programa SCL se compone de una o ms fuentes. Una fuente puede contener un nico
bloque o un programa completo compuesto de varios bloques.

Una fuente para un Varias fuentes para un


programa programa

Fuente Fuente Fuente


SCL SCL SCL
para para para
. OB1 FC2 FB22
FB22
.
.
.
FC2
. FB22
. FC2
. DB de
OB1 instancia
OB1
.

Fuente SCL Carpeta de bloques


Offline

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 7
Disear un programa SCL

Definir las tareas parciales

Tareas parciales
Las tareas parciales aparecen representadas en forma de cuadros en la siguiente figura.
Las rectngulos sobre fondo gris representan los bloques. La disposicin de los bloques
lgicos de izquierda a derecha se corresponde con la secuencia de llamada.

CICLO ADQUISICION VALORACION


Bloque de organizacin (OB) Bloque de funcin (FB) Bloque de funcin (FB)

Entrada de Adquirir valo Clasificar


datos res medidos valores
medidos
Lla- RAIZ Funciones
mada y CUADRADO
cclica
Direccionar y
Salida de da- seleccionar Calcular Raz,
tos salida resultados cuadrado

Guardar
ADQUISICION_DATOS datos
Bloque de datos (DB)
Flujo del programa Flujo de datos

Seleccin y asignacin de los tipos de bloque


Los bloques se seleccionan de acuerdo con los siguientes criterios:

Funcin Nombre de bloque


Los programas de usuario slo se pueden iniciar OB "Ciclo"
desde un OB. Dado que los valores medidos se
adquieren de manera cclica, se requiere un OB para
llamadas cclicas (OB1). Una parte del procesamiento
- entrada de datos y salida de datos - se programa en
el OB.
Para la tarea parcial Adquisicin de valores medidos FB "ADQUISICION"
se requiere un bloque con memoria, es decir un FB, ya
que hay que mantener ciertos datos locales de bloque
(p.ej. el bfer anular) de un ciclo de programa en el
siguiente. El lugar donde se almacenan los datos
(memoria) es el bloque de datos de instancia
ADQUISICION_DATOS. El mismo FB puede asumir la
tarea parcial Direccionar salida o Seleccionar salida,
puesto que se dispone de los datos necesarios.

Getting Started S7-SCL V5.3 para S7-300/400


8 A5E00290620-01
Disear un programa SCL

Funcin Nombre de bloque


Al seleccionar el tipo de bloque para resolver las FB "EVALUACION"
tareas parciales Clasificacin valores medidos y
Clculo de resultados hay que tener en cuenta que es
necesario crear un bfer de salida que contenga los
resultados de clculo raz y cuadrado de cada valor
medido. Por este motivo el nico bloque posible es un
FB. Dado que el FB es llamado por un FB de orden
superior, no necesita ningn DB propio. Sus datos de
instancia se pueden crear en el bloque de datos de
instancia del FB invocante.
La FC resulta idnea para resolver la tarea parcial FC "SQRT" (raz) y
Clculo de raz o cuadrado porque se puede producir FC "CUADRADO"
el retorno del resultado como valor de la funcin.
Adems, para el clculo no se requiere ningn dato
que deba conservarse ms de un ciclo de ejecucin
del programa. Para calcular la raz se puede utilizar la
funcin estndar de SCL SQRT. Para calcular el
cuadrado debe crearse una funcin CUADRADO, que
tambin comprobar los lmites del rango.

Definir los interfaces entre bloques

Resumen
El interface de un bloque se crea mediante parmetros a los que se puede acceder desde
otros bloques.
Los parmetros declarados en el bloque son comodines cuyos valores se determinan al
efectuarse la llamada al bloque. Estos comodines se denominan parmetros formales y los
valores asignados al llamar el bloque, parmetros actuales. Cuando se llama a un bloque se
le transfieren datos de entrada en forma de parmetros actuales. Al retornar al bloque
invocante se ponen a disposicin los datos de salida para su transferencia. Una funcin
(FC) puede transferir su resultado como valor de la funcin.
Los parmetros de bloque se pueden dividir en las siguientes categoras:

Parmetros de Significado Declaracin con


bloques
Parmetros de Los parmetros de entrada asumen los valores VAR_INPUT
entrada de entrada actuales cuando se llama al bloque.
Slo permiten accesos de lectura.
Parmetros de Los parmetros de salida transfieren los VAR_OUTPUT
salida valores de salida actuales al bloque invocante.
Permiten accesos de lectura y escritura.
Parmetros de Cuando se efecta la llamada, los parmetros VAR_IN_OUT
entrada/salida de entrada/salida asumen el valor actual de
una variable, lo procesan y a continuacin
devuelven los resultados a la misma variable.

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 9
Disear un programa SCL

OB Ciclo
El OB CICLO no dispone de ningn parmetro formal. Llama al FB ADQUISICION y le
asigna el valor medido y los datos de control para sus parmetros formales.

FB ADQUISICION

Nombre del Tipo de datos Tipo de Descripcin


parmetro declaracin
intr_val_med INT VAR_INPUT Valor medido
nue_val BOOL VAR_INPUT Interruptor para aceptar el valor medido en el
bfer de anillo
nue_clas BOOL VAR_INPUT Interruptor para clasificar y evaluar valores
medidos
sel_funcion BOOL VAR_INPUT Conmutador para seleccionar raz o cuadrado
seleccion WORD VAR_INPUT Cdigo para seleccionar valor de salida
nue_sel BOOL VAR_INPUT Interruptor para aceptar la codificacin
sal_resultado DWORD VAR_OUTPUT Salida del resultado calculado
sal_v_med DWORD VAR_OUTPUT Salida del valor medido correspondiente

Evaluar
El FB ADQUISICION llama al FB EVALUACION. Ambos FB reciben como dato comn el
array del valor medido que se clasificar. Por ello se declara como parmetro de
entrada/salida. Para el resultado de clculo de la raz y del cuadrado se crea un array
estructurado en forma de parmetro de salida. En la siguiente tabla se indican los
parmetros formales:

Nombre Tipo de datos Tipo de Descripcin


declaracin
bufer_clasif ARRAY[..] OF VAR_IN_OUT Array de valor medido, se corresponde con
REAL el bfer anular
bufer_calculo ARRAY[..]OF VAR_OUTPUT Array para resultados:
STRUCT estructura con los componentes "RAIZ" y
"CUADRADO" del tipo INT

Getting Started S7-SCL V5.3 para S7-300/400


10 A5E00290620-01
Disear un programa SCL

SQRT y cuadrado
Las funciones se llaman desde EVALUACION. Necesitan un valor de entrada y proporcionan
un valor de funcin como resultado.

Nombre Tipo de datos Tipo de Descripcin


declaracin
Valor REAL VAR_INPUT Entrada para RAIZ
SQRT REAL Valor de funcin Raz del valor de entrada
Valor INT VAR_INPUT Entrada para CUADRADO
CUADRADO INT Valor de funcin Cuadrado del valor de entrada

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 11
Disear un programa SCL

Definir el interface de entrada/salida


En la siguiente figura se muestra el interface de entrada/salida. Tenga en cuenta que en la
entrada/ salida byte a byte, el byte menos significativo aparece arriba y el byte ms
significativo aparece abajo. Sin embargo, en la entrada/salida palabra a palabra sucede todo
lo contrario.

Byte 0 Byte 4
Sistema de automatizacin

Byte 1 Byte 5

Mdulo de Mdulo de
entrada digital salida digital

Mdulo de
entrada Byte 0

E 0.3
0 Aceptacin del valor medido
E 0.4 1 Inicio de clasificacin y clculo
2 Selec. resultado: raz o cuadrado
3 Selec. salida: Valor medido o resultado
4 Codificacin bit 0
5 Codificacin bit 1
6 Codificacin bit 2
7 Aceptacin de la codificacin

0a7 Valor de entrada: valor medido

Byte 1

Mdulo de
salida Byte 4 0
0a7 Byte ms significativo de la palabra
1
de salida(bits 8 s 15)
2 slo necesario en el clculo del
3 cuadrado. En otros casos, 0.
4
5
6
7

0
1
2
0a7 Byte menos significativo de la palabra
3 de salida (bits 0 a 7):
4 valor medido o resultado:
5 raz o cuadrado.
6
Byte 5 7

Getting Started S7-SCL V5.3 para S7-300/400


12 A5E00290620-01
Disear un programa SCL

Definir la secuencia de bloques en la fuente


En cuanto a la secuencia de los bloques en la fuente SCL, hay que tener en cuenta que un
bloque debe existir antes de poderlo utilizar, es decir, de llamarlo desde otro bloque. En la
fuente SCL, los bloques deben estar ordenados de esta forma:

CUADRADO FC
Llama a

EVALUAR FB
Llama a

REGISTRAR FB
Llama a
CICLO OB

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 13
Disear un programa SCL

Definir los smbolos


El programa resulta ms comprensible asignando nombres simblicos a las direcciones de
los mdulos y a los bloques. Los nombres simblicos se asignan en la tabla de smbolos.
La siguiente figura contiene la tabla de smbolos del ejemplo. En ella se describen los
nombres simblicos que hay que declarar en la tabla de smbolos para poder compilar la
fuente sin que se produzca ningn error:

Getting Started S7-SCL V5.3 para S7-300/400


14 A5E00290620-01
Disear un programa SCL

Crear la funcin CUADRADO

rea de instrucciones de la funcin CUADRADO

rea de instrucciones
En primer lugar se comprueba si el valor de entrada excede el lmite en el que el resultado
es superior al rango permitido para enteros. En este caso se registrara el valor mximo
para Integer. En caso contrario, se efectuara la operacin de elevar al cuadrado. El
resultado se transfiere como valor de funcin.

FUNCTION CUADRADO : INT


(*******************************************************************
Esta funcin proporciona como valor de funcin el cuadrado de
entrada, o, en caso de desbordamiento, el valor mximo que puede
representarse con enteros.
*******************************************************************)
VAR_INPUT
valor : INT;
END_VAR
BEGIN
IF valor <= 181 THEN
CUADRADO := valor * valor; //Clculo del valor de la funcin
ELSE
CUADRADO := 32_767; // Definir valor mximo en desbordamiento
END_IF;
END_FUNCTION

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 15
Disear un programa SCL

Crear el bloque de funcin EVALUACION


Diagrama de flujo de EVALUACIN

EVALUACION
bloque de funcin Inicio

Inicio de la
instruccin REPEAT Cambio := FALSE

I := LIMITE
I significa ndice

Inicio de la
instruccin FOR No
I >= 1 ?

S
bufer_clasif [I-1] >
bufer_clasif [I]
? Intercambiar los valores de
bfer de clasificacin [I-1]
No
y bfer de clasificacin [I]

CAMBIO = TRUE

I := I-1
Fin de la
instruccin FOR

Fin de la
instruccin REPEAT
Cambiar ?
TRUE
FALSE
I := 0

Inicio de la
instruccin FOR
No
I <= LIMITE ?

Adquirir los resultados en el array


RAIZ de resultados estructurado.

Adquirir los resultados en el array


CUADRADO de resultados estructurado.

Fin de la I := I+1
instruccin FOR

Fin

Getting Started S7-SCL V5.3 para S7-300/400


16 A5E00290620-01
Disear un programa SCL

Estructura del rea de declaracin

El rea de declaracin de este bloque est formada por las siguientes partes:
Constantes: entre CONST y END_CONST
Parmetros de entrada/salida: entre VAR_IN_OUT y END_VAR,
Parmetros de salida: entre VAR_OUTPUT y END_VAR
Declaracin de las variables temporales: entre VAR_TEMP y END_VAR

CONST
LIMITE := 7;
END_CONST
VAR_IN_OUT
bufer_clasif : ARRAY[0..LIMITE] OF INT;
END_VAR
VAR_OUTPUT
bufer_calculo : ARRAY[0..LIMITE] OF
STRUCT
raiz : INT;
cuadrado : INT;
END_STRUCT;
END_VAR
VAR_TEMP
cambiar : BOOL;
indice, ayuda : INT;
n_valor, n_resultado: REAL;
END_VAR

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 17
Disear un programa SCL

rea de instrucciones del FB EVALUACION

Ejecucin del programa


El parmetro de entrada/salida "bfer_clasif" se combina con el bfer anular
"valores_medidos", es decir, el contenido original del bfer se sobrescribe con los valores
medidos clasificados.
Para los resultados de clculo se crea el nuevo array "bufer_calculo", configurado como
parmetro de salida. Sus elementos estn estructurados de tal forma que conservan la raz
y el cuadrado de cada valor medido.
En la figura siguiente puede encontrar la relacin entre los arrays descritos:

bufer_clasif
valores_medidos
bufer_calculo

EVALUACION

Este interface muestra el ncleo del intercambio de datos para procesar los valores
medidos. Los valores se guardan en el bloque de datos de instancia ADQUISICION_DATOS
ya que en el FB ADQUISICION invocante se ha creado una instancia local para el
FB EVALUACION.

rea de instrucciones de EVALUACION


En primer lugar se clasifican los valores medidos en el bfer anular y a continuacin se
realizan los clculos:
Mtodo del algoritmo de clasificacin
Aqu se utiliza el mtodo de intercambio permanente de valores para la clasificacin del
bfer de valores medidos, es decir, se comparan dos valores consecutivos y se
intercambian hasta que se alcanza la secuencia de clasificacin deseada. El bfer
utilizado es el parmetro de entrada/salida "bufer_clasif".
Inicio del clculo
Cuando termina la clasificacin se ejecuta un bucle para el clculo en el que se llama a
las funciones CUADRADO para elevar al cuadrado y SQRT para calcular la raz. Sus
resultados se guardan en el array estructurado "bufer_calculo".

Getting Started S7-SCL V5.3 para S7-300/400


18 A5E00290620-01
Disear un programa SCL

rea de instrucciones de EVALUACION


El rea de instrucciones del bloque lgico presenta la siguiente estructura:

BEGIN
(*******************************************************************
Parte 1 'Clasificacion' : Clasificacin segn el proceso "bubble
sort": intercambiar de dos en dos los valores hasta que el bfer de
valores medidos est clasificado
*******************************************************************)
REPEAT
cambiar := FALSE;
FOR indice := LIMITE TO 1 BY -1 DO
IF bufer_clasif[indice-1] > bufer_clasif[indice] THEN
ayuda := bufer_clasif[indice];
bufer_clasif[indice] := bufer_clasif[indice-1];
bufer_clasif[indice-1] := ayuda;
cambiar := TRUE;
END_IF;
END_FOR;
UNTIL NOT cambiar
END_REPEAT;
(*******************************************************************
Parte 2 'Calculo' : Clculo de la raz con la funcin estndar RAIZ
y obtencin del cuadrado con la funcion CUADRADO.
*******************************************************************)
FOR indice := 0 TO LIMITE BY 1 DO
n_valor := INT_TO_REAL(bufer_clasif[indice]);
n_resultado := SQRT(n_valor);
bufer_calculo[indice].raiz := REAL_TO_INT(n_resultado);
bufer_calculo[indice].cuadrado := CUADRADO(bufer_clasif[indice]);
END_FOR;

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 19
Disear un programa SCL

Crear el bloque de funcin ADQUISICION

Diagrama de flujo de ADQUISICION

La siguiente figura representa el algoritmo en forma de diagrama de flujo:

ADQUISICION
Bloque de funcin
Inicio

Cambio S
valor nuevo
? Con la operacin MOD se real
Leer valor medido en el bfer de iza el bfer de circulacin:
No circulacin, recalcular el puntero cuando se alcance el lmite,
iniciar desde el principio.

Cambio
S
clasificacin
nueva?
Clasificar bfer de circulacin y
No VALORACIO efectuar clculos (para hacerlo,
N crear rea de resultados)

Aceptar resultados de clculo Cargar a partir del bloque


en rea de resultados de datos de instancia

Cambio S
cdigo nuevo
? Primero desplazar los bits rele vantes
Evaluar cdigo y determinar hasta el borde derecho, y despus
No
direccin de salida ocultar las posiciones no
necesarias con AND

Seleccin de TRUE
funcin?

FALSE
Cargar resultado de Cargar resultado de
RAIZ CUADRADO
Cargar:
escribir elementos de la lista en los
parme tros de salida junto con la
Cargar valor medido direccin de salida, para despus
indicar sus valores

Fin

Getting Started S7-SCL V5.3 para S7-300/400


20 A5E00290620-01
Disear un programa SCL

rea de declaracin del FB ADQUISICION

Estructura del rea de declaracin


El rea de declaracin de este bloque est formada por los siguientes bloques de
declaracin:
Constantes: entre CONST y END_CONST.
Parmetro de entrada: entre VAR_INPUT y END_VAR
Parmetros de salida: entre VAR_OUTPUT y END_VAR.
Variables estticas: entre VAR y END_VAR.
Incluida la declaracin de la instancia local para el bloque EVALUACION.

CONST
LIMITE := 7;
NUMERO:= LIMITE + 1;
END_CONST
VAR_INPUT
intr_val_med: INT ; // Nuevo valor medido
nue_val : BOOL; // Aceptar valor medido en bfer de circulacin
// "valores_medidos"
nue_clas : BOOL; // Clasificar valores medidos
sel_funcion : BOOL; // Seleccionar la funcin de clculo
raiz/cuadrado
nue_sel : BOOL; // Aceptar direccin de salida
seleccion: WORD; // Direccin de salida
END_VAR
VAR_OUTPUT
sal_resultado: INT; // valor calculado
sal_v_med: INT; // valor medido correspondiente
END_VAR
VAR
valores_medidos : ARRAY[0..LIMITE] OF INT := 8(0);
bufer_resultado : ARRAY[0..LIMITE] OF
STRUCT
raiz : INT;
cuadrado : INT;
END_STRUCT;
puntero : INT := 0;
ant_val : BOOL := TRUE;
ant_clas : BOOL := TRUE;
ant_sel : BOOL := TRUE; // Direccin de salida convertida
valorar_instancia: evaluacion; //Declarar instancia local
END_VAR

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 21
Disear un programa SCL

Variables estticas
Se ha seleccionado el tipo de bloque FB porque hay datos que se deben mantener de un
ciclo de programa al siguiente. Estos datos son las variables estticas declaradas en el
bloque de declaracin "VAR, END_VAR".
Las variables estticas son variables locales cuyo valor se mantiene en todos los recorridos
del bloque. Sirven para guardar los valores de un bloque de funcin y se almacenan en el
bloque de datos de instancia.

Inicializacin de las variables


Tenga en cuenta los valores de inicializacin que se registran en las variables al inicializar el
bloque (despus de cargar el programa en la CPU). En la tabla de declaracin VAR,
END_VAR tambin se declara la instancia local del FB EVALUACION. El nombre se
utilizar posteriormente para la llamada y para acceder a los parmetros de salida. Como
memoria de datos se utiliza la instancia global ADQUISICION_DATOS.

Nombre Tipo de datos Pre-ajuste Descripcin


valores_medidos ARRAY [..] 8(0) Bfer anular para valores medidos
OF INT
bufer_resultado ARRAY[..] - Array para estructuras con los componentes "raz"
OF STRUCT y "cuadrado" del tipo INT
puntero INT 0 ndice para bfer anular, all se registra el valor
medido
ant_val BOOL FALSE Anterior valor para la validacin del valor medido
con "nue_val"
ant_clas BOOL FALSE Valor precedente para clasificar con "nue_clas"
ant_sel BOOL FALSE Valor precedente para aceptar la codificacin con
"nue_sel"
direccion INT 0 Direccin para la salida de valores medidos o
resultados
valorar_instancia Instancia local - Instancia local para el FB EVALUACION

Getting Started S7-SCL V5.3 para S7-300/400


22 A5E00290620-01
Disear un programa SCL

rea de instrucciones del FB ADQUISICION

Estructura del rea de instrucciones


El rea de instrucciones de ADQUISICION se divide en tres partes:
adquirir valores medidos:
cuando el parmetro de entrada cambia de "valor antiguo" a "valor nuevo" se carga un
valor medido nuevo en el bfer anular.
2 parte: iniciar clasificacin y clculo
Llamando al bloque de funcin EVALUACION, cuando el parmetro de entrada cambia de
"clasificacin antigua" a "clasificacin nueva".
3 parte: evaluar codificacin y preparar salida
La codificacin se lee por palabras: segn las convenciones de SIMATIC, esto significa
que el grupo de interruptores superior (Byte0) contiene los 8 bits ms significativos de la
palabra de entrada y el grupo de interruptores inferior (Byte1), los menos significativos.
La siguiente figura indica dnde se encuentran los interruptores en los que se puede
ajustar la codificacin:

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 23
Disear un programa SCL

Clculo de la direccin
La siguiente figura muestra el clculo de la direccin: la palabra de entrada EW0 contiene
en los bits 12 a 14 el cdigo que se acepta cuando en el interruptor de codificacin (bit 15)
se detecta un flanco. Desplazando a la derecha con la funcin estndar SHR e inhibiendo
los bits relevantes con una mscara AND se calcula la "direccin".
Con esta direccin se escriben los elementos de array (resultado de clculo y valor medido
correspondiente) en los parmetros de salida. Que la salida sea raz o cuadrado depende
de la "seleccin de funcin".
Un flanco en el interruptor de codificacin se detecta porque el "valor nuevo" cambia
respecto al "valor antiguo".

Interruptor Palabra de Despus de SHR Despus de AND,


del mdulo la memoria 12 posiciones mscara 0007

0 0 0 0
1 1 1 1 "direccin"
2 2 2 2
3 3 3 3
Interruptor 4 4 4 4
para valor de 5 5 5 5
codificacin
6 6 6 6
Interruptor 7 7 7 7
de codifi Byte0
cacin
0 8 8 8
1 9 9 9
2 10 10 10
3 11 11 11
4 12 12 12
5 13 13 13
6 14 14 14
7 15 15 15
Byte1 EW0

Getting Started S7-SCL V5.3 para S7-300/400


24 A5E00290620-01
Disear un programa SCL

rea de instrucciones
El rea de instrucciones del bloque lgico presenta la siguiente estructura:

BEGIN
(*******************************************************************
Parte 1 : 'Adquisicion' de 'valores_medidos'
Al cambiar "nue_val" se produce la entrada del valor medido.
Con la operacin MOD se ejecuta un bfer de circulacin para valores
medidos.
*******************************************************************)
IF nue_val <> ant_val THEN
puntero := puntero MOD NUMERO;
valores_medidos[puntero] := Intr_val_med;
puntero := puntero + 1;
END_IF;
ant_val := nue_val;
(*******************************************************************
Parte 2 : Iniciar 'Clasificacin' y 'Clculo'
Al cambiar "nue_clas" se inicia la clasificacin del bfer de
circulacin y la ejecucin
de los clculos con los valores medidos. Los resultados se guardan
en un nuevo array, "bufer_calculo".
******************************************************************)
IF nue_clas <> ant_clas THEN
puntero := 0; //Inicializar puntero del bfer de
circulacin
valorar_instancia(bufer_clasif := valores_medidos); // Llamar
evaluacion
END_IF;
ant_clas := nue_clas;
bufer_resultado := valorar_instancia.bufer_calculo; //cuadrado y
raiz
(*******************************************************************
Parte 3 : Valorar cdigo y preparar salida:
Al cambiar "nue_sel" se determina de nuevo el cdigo para el
direccionamiento del elemento
de array para la salida: Los datos relevantes de 'seleccion' se
ocultan y se transformen en entero. Dependiendo de la posicin
del interruptor de "sel_funcion" en la salida se dispondr "RAIZ"
o "CUADRADO" *)
*******************************************************************)
IF nue_sel <> ant_sel THEN
direccion := WORD_TO_INT(SHR(IN := seleccion, N := 12) AND
16#0007);
END_IF;
ant_sel := nue_sel;
IF sel_funcion THEN
sal_resultado:= bufer_resultado[direccion].cuadrado;
ELSE
sal_resultado:= bufer_resultado[direccion].raiz;
END_IF;
sal_v_med := valores_medidos[direccion]; //indicacin del valor
medido
END_FUNCTION_BLOCK

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 25
Disear un programa SCL

Crear el bloque de organizacin CICLO

Tareas del OB CICLO


Se ha seleccionado un OB1 porque se llama de forma cclica. Con l se ejecutan las
siguientes tareas del programa:
Llamar y transferir datos de entrada y datos de control al bloque de funcin
ADQUISICION.
Aceptar los resultados del bloque de funcin ADQUISICION
Salida de los valores para su visualizacin.
Al principio del rea de declaracin aparece el array de datos temporal con 20 bytes de
"datos del sistema".

Getting Started S7-SCL V5.3 para S7-300/400


26 A5E00290620-01
Disear un programa SCL

Cdigo de programa del OB CICLO

ORGANIZATION_BLOCK CICLO
(*******************************************************************
CICLO equivale al OB1, es decir, el sistema S7 lo llama cclicamente
Parte 1 : llamada del bloque de funcin y transferencia de los
valores de entrada
Parte 2 : aceptacin de los valores de salida con conmutacin de
salida
*******************************************************************)
VAR_TEMP
datos_del_sistema : ARRAY[0..20] OF BYTE; // Area para OB1
END_VAR
BEGIN
(* Parte 1 :
*****************************************************)
ADQUISICION.ADQUISICION_DATOS(
intr_val_med := WORD_TO_INT(entrada),
nue_val := "entrada 0.0",//Interruptor de entrada como smbolo
nue_clas := "Interr_clasif",
sel_funcion := "Interr_funcion",
nue_sel := "Interr_codif",
seleccion := codificacion);
(* Parte 2 :
********************************************************)
IF Interr_salida THEN //Conmutacin de salida
salida := ADQUISICION_DATOS.sal_resultado; //Raz o cuadrado
ELSE
salida := ADQUISICION_DATOS.sal_v_med; //Valor medido
END_IF;
END_ORGANIZATION_BLOCK

Conversin de tipos de datos


El valor medido en la entrada es del tipo BYTE. Hay que convertirlo a INT: Se transforma de
WORD a INT (el compilador realiza la conversin previa de BYTE a WORD de forma
implcita). No es necesario realizar ninguna conversin para la salida, ya que sta est
declarada como INT en la tabla de smbolos.

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 27
Disear un programa SCL

Datos del test

Requisitos
Para el test se necesita un mdulo de entrada con la direccin 0 y un mdulo de salida con
la direccin 4.
Antes de efectuar el test, conmutar los 8 interruptores superiores del mdulo de entrada
hacia la izquierda ("0") y los 8 interruptores inferiores hacia la derecha ("1").
Cargue previamente los bloques en la CPU, ya que tambin se comprueban los valores
iniciales de las variables inmediatamente despus.

Pasos del test


Realice los pasos del test como se indica en la tabla.

Paso Accin Resultado


1 Active el cdigo "111" (E0.4, E0.5 y E0.6) y Todas las salidas del mdulo de salida (byte menos
acptelo con el interruptor de codificacin significativos) se activan y se encienden los
(E0.7). indicadores.
2 Visualice la raz correspondiente conmutando Los indicadores de salida corresponden al valor
el interruptor de salida (E0.3) a la posicin "1". binario "10000" (=16).
3 Visualice el cuadrado correspondiente En la salida se iluminan 15 indicadores. Esto significa
conmutando el interruptor de funcin (E0.2) a que se produce un rebose, dado que con 255 x 255
la posicin "1". se obtiene un valor demasiado elevado para el
dominio de enteros.
4a Vuelva a conmutar el interruptor de salida Vuelve a aparecer el valor medido: todas las
(E0.3) a la posicin "0". indicaciones en las salidas del byte de salida de
menor valor estn activadas.
4b Introduzca el valor 3, es decir, el valor binario La salida no cambia todava.
"11" como nuevo valor medido en la entrada.
5a Observe la escritura en memoria del valor En la salida se visualiza 0; es decir, no se enciende
medido: ajuste la codificacin a "000" y ningn indicador.
confrmela con el interruptor de codificacin
(E0.7) para poder observar ms tarde la
entrada de valores.
5b Conmute el interruptor de entrada "Entrada A la salida se muestra el valor medido 3, valor binario
0.0" (E0.0). De esta forma se escribir en la "11".
memoria el valor ajustado en el cuarto paso
del test.
6 Inicie la clasificacin y el clculo conmutando A la salida vuelve a aparecer 0, dado que por medio
el interruptor de clasificacin (E0.1). del proceso de clasificacin, el valor medido se ha
vuelto a desplazar hacia arriba en el array.
7 Visualizar el valor medido despus de A la salida aparece otra vez el valor medido "11", ya
clasificar: ajuste el cdigo "110" (E0.6=1, que se trata del segundo valor ms alto del array.
E0.5=1, E0.4= 0 de EB0, corresponde a bit
14, bit 13, bit 12 de EW0) y confrmelo
conmutando el interruptor de codificacin.
8a Visualizar los resultados correspondientes: Se visualiza el valor de salida 9 o el valor binario
conmutando el interruptor de salida (E0.3) se "1001".
visualiza el cuadrado del valor medido
obtenido en el paso 7.
8b Conmutando el interruptor de funcin (E0.2) Se visualiza el valor de salida 2 o el valor binario
obtendr tambin la raz. "10".

Getting Started S7-SCL V5.3 para S7-300/400


28 A5E00290620-01
Disear un programa SCL

Test adicional
En las siguientes tablas aparecen los interruptores del mdulo de entrada y patrones de test
para la raz y el cuadrado. Adems, estas tablas le ayudarn a definir sus propios pasos de
test:
La entrada se realiza a travs de interruptores: el programa se puede controlar mediante
los 8 interruptores superiores y los valores medidos se pueden ajustar con los 8
inferiores.
La salida se realiza a travs de indicadores: en el grupo superior aparece el byte de
salida ms significativo, y en el grupo inferior el menos significativo.

Interruptores de manejo Nombre del parmetro Explicacin


Canal 0 Interruptor de entrada Conmutacin para la validacin de valores
medidos
Canal 1 Interruptor de Conmutacin para clasificacin/evaluacin
clasificacin
Canal 2 Interruptor de funcin Interruptor hacia la izquierda ("0"): raz,
Interruptor hacia la derecha ("1"): cuadrado
Canal 3 Interruptor de salida Interruptor hacia la izquierda ("0"): valor
medido,
Interruptor hacia la derecha ("1"): resultado
Canal 4 Codificacin Direccin de salida bit 0
Canal 5 Codificacin Direccin de salida bit 1
Canal 6 Codificacin Direccin de salida bit 2
Canal 7 Interruptor de Conmutacin para confirmacin de cdigo
codificacin

La siguiente tabla contiene a ttulo de ejemplo 8 valores medidos en una secuencia ya


clasificada.
Introduzca los valores en cualquier orden. Ajuste la combinacin binaria deseada y acepte el
valor correspondiente conmutando el interruptor de entrada. Una vez introducidos todos los
valores inicie la clasificacin y evaluacin conmutando el interruptor de clasificacin. A
continuacin puede visualizar los valores clasificados o los resultados - raz o cuadrado.

VALOR_MEDIDO Raz Cuadrado


0000 0001 = 1 0, 0000 0001 = 1 0000 0000, 0000 0001 = 1
0000 0011 = 3 0, 0000 0010 = 2 0000 0000, 0000 1001 = 9
0000 0111 = 7 0, 0000 0011 = 3 0000 0000, 0011 0001 = 49
0000 1111 = 15 0, 0000 0100 = 4 0000 0000, 1110 0001 = 225
0001 1111 = 31 0, 0000 0110 = 6 0000 0011, 1100 0001 = 961
0011 1111 = 63 0, 0000 1000 = 8 0000 1111, 1000 0001 = 3969
0111 1111 = 127 0, 0000 1011 = 11 0011 1111, 0000 0001 = 16129
1111 1111 = 255 0, 0001 0000 = 16 0111 111, 1111 1111 =
Indicacin de desbordamiento

Getting Started S7-SCL V5.3 para S7-300/400


A5E00290620-01 29
Disear un programa SCL

Getting Started S7-SCL V5.3 para S7-300/400


30 A5E00290620-01