Você está na página 1de 56

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

PLC S7-300
PROGRAMACIN ESTRUCTURADA

S7-SCL

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 1/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

PRLOGO

Esta documentacin forma parte de una serie de manuales que un grupo de profesores de tres institutos de
educacin secundaria de Catalunya, como son:
IES-SEP Comte de Rius de Tarragona
IES Palau Ausit de Ripollet (Barcelona)
IES-SEP La Garrotxa de Olot (Girona)
han estado experimentando con diferentes materiales incluidos dentro de la temtica de la automatizacin,
el control y las comunicaciones industriales.
Este equipo de profesores, formaron un grupo de trabajo, llamado EDCAI (Experimentacin y
Documentacin en Control y Automatizacin Industrial), reconocido tanto por el Departament dEducaci de
la Generalitat de Catalunya como por la empresa Siemens, con unos objetivos tan sencillos como claros y
que se basaban en la realizacin de documentacin realizada por profesores/as para profesores/as, y que
adems, pudiese servir como manual para los alumnos, esto quiere decir que se ha intentado realizar una
documentacin que sea fcil de seguir con unas explicaciones paso a paso de los diferentes procesos a
realizar, para de esta manera poder alcanzar el objetivo propuesto en cada ejercicio.
Este grupo de trabajo contina trabajando en cada uno de los temas para poder ir actualizando da a da
esta documentacin, es por ello, que nos podis enviar vuestras sugerencias a travs de la informacin que
encontrareis en la web dedicada a este grupo de trabajo y que desde aqu os invitamos a participar.
www.iespalauausit.com/edcai/edcai.php

Esperamos que el esfuerzo y dedicacin que hemos realizado pueda ayudar a mejorar vuestra labor
educativa.

Los profesores del grupo de trabajo EDCAI

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 2/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

NDICE
1. Introduccin.
2. Funciones matemticas i de conversin.
3. Manejo de datos en listas y matrices.
4. Manejo de datos complejos: UDTs.
5. Problemas complejos de tratamiento de datos.
6. Ejercicios propuestos.
7. Soluciones.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 3/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
1.- Introduccin.
La instruccin IEC 1131-3 persigue la normalizacin de los lenguajes de programacin para
autmatas programables, de forma que independientemente de la tecnologa elegida, los
programas escritos para un PLC concreto puedan trasladar-se a un PLC de otro fabricante con
poco esfuerzo. Uno de los lenguajes definidos en esta norma es el ST o structured text que
es un lenguaje de alto nivel y que como tal tendr todas las prestaciones de stos:
instrucciones matemticas complejas, tipos de datos complejos, tipos de datos definidos por el
usuario, manejo de tablas i matrices, de datos complejos y las estructuras de control clsicas
que poseen todos los lenguajes de alto nivel: IF THEN ELSE, REPEAT UNTIL, WHILE DO, FOR
TO y CASE OF.
SCL structured control language es el lenguaje de texto estructurado para PLCs de Siemens
y est basado en el lenguaje de alto nivel PASCAL. Permite una fcil integracin en el
contexto de una solucin global para un problema de automatizacin ya que un bloque
programado en SCL puede ser llamado desde un bloque escrito en KOP, en grafcet, en AWL o
en FUP y a la inversa, un bloque escrito, por ejemplo en KOP puede ser llamado desde un
bloque escrito en SCL. Al mismo tiempo SCL trata todas las reas de memoria del PLC como
variables globales, lo que permite, como en el resto de lenguajes, intercalar una direccin
absoluta de memoria (entrada, salida, marca, DB, periferia, etc.) en el rea de instrucciones
del bloque como si se tratara de una variable del bloque.
SCL est especialmente indicado para la resolucin de los siguientes tipos de problemas:
1. Problemas matemticos complejos como los siguientes ejemplos:
Funcin de normalizado de variables analgicas.
Clculo de volmenes y pesos de depsitos cnico-cilndricos.
Clculo de tiempos de activacin o funcionamiento de dispositivos.
2. Problemas de tratamiento de datos, como los siguientes ejemplos:
Filtrado de una variable analgica
Determinacin de media y valores extremos en un grupo de valores
Deteccin de errores repetidos por desviaciones fuera de tolerancia en distintos
instrumentos.
3. Manejo de datos en matrices, como los siguientes ejemplos.
Determinacin de la posicin de carga y descarga de piezas en un almacn con
robot cartesiano de dos ejes.
Mantenimiento de un histrico de eventos en un PLC.
Impresin de un histrico de valores de produccin en un dosificador de colas.
Gestin de la presentacin en pantalla de datos de mantenimiento y funcionamiento
de vlvulas y motores.
Gestin de contadores de producto en mquina plegadora de sbanas.
4. Aplicaciones de tratamiento de grandes cantidades de datos, como los siguientes
ejemplos.
Mantenimiento de datos de produccin de un grupo de mquinas de hilatura.
Mantenimiento de datos de produccin de un grupo de mquinas de inyeccin.
En el presente documento se pretende, a la par que ir explicando los detalles del trabajo con la
herramienta de programacin en SCL ( editor y compilador), disear funciones que resuelvan
todos los problemas tipo planteados, forzando al alumno a leer programas diseados por otros
programadores cosa que necesariamente forma parte del aprendizaje de todo buen
programador. Al final de cada captulo se van a dar tambin una coleccin de ejercicios
propuestos.
Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 4/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

Para terminar con la introduccin quisiera hacer unas recomendaciones acerca de la ubicacin
de estos contenidos en el ciclo superior de Sistemas de Regulacin y Control, de los
conocimientos previos que debe tener los alumnos para sacar el mximo aprovechamiento de
estos contenidos, de las herramientas necesarias para trabajar en SCL y del uso ms racional
a mi modo de entender de SCL en una aplicacin general de automatizacin.
Respecto al primer punto, mi opinin es que hay que ensear diseo, antes que codificacin
por lo que habra que seguir el camino clsico consistente, en ensear las estructuras bsicas
de control, las estructuras de datos y la programacin en pseudo cdigo de los algoritmos tipo,
antes que entrar en la codificacin a cualquier tipo de lenguaje. De otro lado es necesario
tener un buen nivel de autmatas, antes de programar en SCL. Desde mi punto de vista, estos
dos factores hacen que la ubicacin ms deseable para estos contenidos, sea la de los
mdulos de Desarrollo de sistemas secuenciales o de Desarrollo de sistemas de medida y
regulacin o de Informtica industrial pero siempre que se impartan despus de haber dado
conocimientos generales sobre PLCs, que ya est as recomendado en los documentos sobre la
planificacin del ciclo formativo.
Sobre las herramientas necesarias para trabajar con SCL mencionar que con disponer del
STEP-7 y de las herramientas SCL y PLCSIM es suficiente puesto que PLCSIM nos permite
depurar todas las funciones que desarrollemos con SCL.
Sobre el ltimo punto y despus de escuchar alguna recomendacin de tcnicos que trabajan
en este campo mi opinin es la siguiente. Ocurre sobretodo en alumnos que provienen de
formacin informtica, que tienen dificultad relativa en trabajar con diagrama de contactos
KOP, que al conocer SCL quieren resolverlo todo en SCL cosa realmente inadecuada por la
razn que la mayora de personas (tcnicos de mantenimiento, de puesta en marcha, etc.) que
tienen que leer programas de PLC, cambiarlos, depurarlos, etc. Entienden perfectamente KOP
pero pocos de ellos son capaces de entender y menos depurar y testear programas en SCL.
Por ello mi recomendacin es que se destine SCL a resolver problemas concretos, muy bien
definidos y que est muy bien documentado como tienen que funcionar y que se siga
utilizando KOP o FUP para enlazar todas las funciones y para programar la parte bsica de la
aplicacin.
Antes de abordar la programacin en SCL a partir del planteamiento de problemas concretos
comunes en diversas aplicaciones, quisiera abordar la resolucin de un sencillo problema para
visualizar la importancia de trabajar o no con parmetros, en las funciones que vayamos a
programar. Ruego al lector que se abstenga de valorar si el ejemplo es idneo para ser
programado en SCL puesto que ste no es el objetivo de este apartado.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 5/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

Supongamos que queremos consultar el estado de la entrada E124.0 para activar o desactivar
la salida A124.0. En KOP o diagrama de contactos es tan simple como esto:

Aceptando que el lector posee conocimientos bsicos de programacin en lenguaje de alto


nivel, es fcil ver que la solucin al problema, escrita en lenguaje algortmico es:
si (E124.0 = 1) entonces
A124.0 := 1;
sino
A124.0 := 0;
fsi
Este trozo de cdigo, incorporado a una funcin concreta como FC51, tiene traduccin directa
a SCL como:

Dejando aparte la traduccin precisa de las distintas estructuras y operadores, del lenguaje
algortmico a SCL, cuestin que abordaremos progresivamente, esta funcin deber llamarse,
por ejemplo desde el OB1, para que sea ejecutada. El aspecto de la llamada ser el siguiente:

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 6/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

Supongamos ahora, que queremos hacer lo mismo con la entrada E124.1 para activar la salida
A124.1 Evidentemente habr que modificar el cdigo fuente de la FC51, para incorporar esa
modificacin, que pasar a ser:

Con esta modificacin la llamada a la funcin no sufrir ningn cambio, pero es obvio que
hemos obligado al programador a cambiar el cdigo de una funcin escrita en SCL. Si quisieran
aadirse mas entradas y salidas que debieran recibir el mismo tratamiento, debera
modificarse de nuevo el cdigo de la funcin SCL.
En vez de esto proponemos trabajar con parmetros. Un parmetro es asimilable a una
variable, que es cargada con un valor concreto al hacer la llamada a la funcin. Esto nos
permite escribir la funcin sin hacer referencia a direcciones absolutas de memoria, usando en
su lugar los parmetros o variables mencionadas, como objetos genricos. Los parmetros,
pueden ser de entrada ent (solo nos interesa consultar su valor), salida sal (solo nos interesa
darle un valor) y entrada salida ent_sal (Nos interesa consultar i modificar su valor)
Veamos el ejemplo inicial reescrito usando dos parmetros, primero en lenguaje algortmico.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 7/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

accin actuarSalida(ent entrada: bool,


sal salida: bool)
si (entrada = 1) entonces
salida := 1;
sino
salida := 0;
fsi
faccin
En lenguaje algortmico se distingue entre funciones (solo tienen parmetros de entrada y
retornan un nico valor del tipo definido para la funcin) y acciones (pueden recibir cualquier
tipo de parmetro y no retornan ningn valor).
En SCL traducimos la accin precedente como la funcin FC 52 quedando como sigue:
Se ha declarado entrada como parmetro o variable
de entrada y salida como parmetro o variable de
salida. Cuando llamamos a la funcin desde el OB1 el
aspecto de la llamada ha cambiado apareciendo en la
misma los parmetros definidos, como se observa en
la siguiente figura:

Es ah en la llamada cuando asignamos un valor al parmetro formal entrada y una direccin


puntero al parmetro formal salida. Trabajando de esta forma no ser necesario modificar el
cdigo de la funcin para actuar sobre una salida adicional, sino que efectuaremos una
segunda llamada asignando nuevos valores actuales a los parmetros. La ltima versin de la
FC51 en el que actubamos sobre dos salidas, quedar resuelto con dos llamadas a la FC52,
tal como se muestra a continuacin:

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 8/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

Es obvio que pueden realizarse llamadas adicionales, de hecho pueden hacerse tantas como
sean necesarias.
Esta forma de trabajar tiene dos ventajas claras: La primera es que reducimos la memoria
ocupada por el programa al duplicar la llamada de la funcin en vez del cdigo de la misma.
Las ventajas son ms evidentes cuantas ms veces tengamos que ejecutar la funcin y cuanto
ms cdigo tenga la funcin. La segunda ventaja hace referencia a la transparencia de la
funcin en el sentido de que es mucho mas clara una funcin con parmetros que sin ellos.
Una funcin con parmetros nos permite observar su funcionamiento viendo los valores de
respuesta, y adems la introduccin de un parmetro nos permite evitar la modificacin del
cdigo de una funcin para por ejemplo cambiar una direccin de memoria.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 9/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
2.- Funciones matemticas y de conversin.
2.1.- Funcin para indicar si una variable est o no dentro de mrgenes o fuera de
control.
Se trata de una funcin de vigilancia de una variable de proceso o de una variable interna del
control, de manera que si su valor est por encima de un mximo, introducido como
parmetro de entrada o por debajo de un mnimo tambin introducido como parmetro de
entrada nos activa una salida para aviso, alarma o indicacin de fuera de control.
Los parmetros necesarios son:
ent
valorProceso: real,
valorMaximo: real,
valorMinimo: real,
sal

alarma: bool,

Podemos plantear una funcin que nos retorne alarma teniendo como entradas los tres
parmetros o variables mencionados. Escrita en lenguaje algortmico tendremos:
funcion indicarFueraDeControl(valorProceso, valorMaximo, valorMinimo: real): bool
var
alarma: bool;
fvar
si valorProceso >= valorMaximo or valorProceso <= valorMinimo entonces
alarma := true;
sino
alarma := false;
fsi
retorna alarma;
ffuncion;

Vamos a continuacin a explicar por pasos, como programar y probar esta funcin en SCL.
En primer lugar, hay que crear un proyecto en STEP 7 asocindole nicamente un programa
S7 puesto que no es necesario asignarle un hardware si no trabajamos con una aplicacin
concreta. En segundo lugar hay que escribir el cdigo fuente de nuestra funcin (existe una
traduccin precisa de lenguaje algortmico a SCL), usando para ello el contenedor fuentes de
nuestro proyecto, insertando dentro del mismo una fuente SCL. Por ltimo, hay que compilar
nuestra fuente SCL para traducirla a lenguaje ejecutable por el PLC.
Veamos detenidamente cada uno de estos pasos.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 10/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Creamos el proyecto SCL_01 e insertamos en el un programa S7.

Insertamos dentro de la carpeta fuentes, una fuente SCL con el nombre fueraDeControl. Una
fuente SCL puede contener varias funciones as como otros tipos de bloques como OB y DB.

Abrimos la herramienta SCL haciendo doble clic sobre el objeto que acabamos de insertar para
pasar a la edicin de nuestra funcin. Debemos plantearnos con que tipo de bloque S7,
bsicamente FC o FB vamos a trabajar para introducir nuestra funcin, y como traducir la
declaracin de variables, las estructuras de control y el resto de elementos contemplados en la
notacin algortmica.
En primer lugar hay que decir que tanto las funciones como las acciones de la notacin
algortmica se corresponden con FCs o FBs al traducirlos a SCL. SCL por tanto, no distingue
Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 11/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
entre funciones y acciones y de hecho la nica distincin entre ellas se encuentra en la
declaracin de variables.
Sobre la cuestin de cuando utilizar un FC o un FB la distincin es la siguiente: Si al ejecutar la
funcin se genera mucha informacin adicional, no contemplada en los parmetros de entrada,
que adems ha de ser almacenada, el mdulo a utilizar ser un FB, puesto que toda esta
informacin adicional se guardar en el DB de instancia del FB. Si por el contrario toda la
informacin relevante se encuentra en los parmetros de salida de la funcin, el mdulo a
utilizar ser claramente un FC.
El aspecto de la herramienta se observa en la figura siguiente:

Para facilitar la edicin disponemos de plantillas, tanto de bloques como de parmetros como
de estructuras de control, por lo que empezamos insertando una plantilla de bloque FC.

La plantilla correspondiente nos aparece en la ventana de edicin, como muestra la siguiente


figura:

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 12/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

En la lnea 2 aparece la declaracin de la funcin, en la cual debemos sustituir xxx por el


nmero de la FC que vayamos a usar. Por ejemplo FC2. Tambin aparece el tipo de datos
correspondiente al valor de retorno de la funcin. En la plantilla aparece INT pero puede ser
cualquier tipo de datos o VOID si la funcin no ha retornar ningn valor.
De las lneas 3 a 8 hay que introducir la declaracin de todos los objetos necesarios para la
correcta ejecucin de la funcin.
En
la
figura
pueden
observarse todos los tipos de
objetos
que
pueden
declararse, la sintaxis de la
declaracin y el tipo de
mdulo de programa S7 que
lo soporta.
Tambin estn indicados en
el orden ms correcto en que
deben declararse.
Las variables estticas que
en un FB son las variables
que se salvaguardan en el
DB de instancia, pueden ser
declaradas tambin en una
FC
aunque
al
compilar
quedaran configuradas como
variables temporales y por
tanto su valor se perder al
finalizar la ejecucin.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 13/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Podemos insertar tambin una plantilla para la declaracin de constantes y parmetros.
SCL distingue entre variables y parmetros. Los parmetros aparecen en la interfase de la
funcin, al ser llamada. Las variables no aparecen en la interfase y su valor se pierde al
finalizar la ejecucin de la funcin si son temporales o se salvaguarda en el DB de instancia si
son estticas (solo en caso de FBs).
Finalmente las lneas 9 y 10 de la plantilla de la FC y por supuesto todas las que fueran
necesarias, albergaran el cdigo de la funcin con todas las estructuras de control necesarias.
La lnea 11 asigna a la funcin el valor constante 100, para que sea su valor de retorno y con
la lnea 12 finaliza la funcin.
Realizamos ahora la declaracin de la funcin indicarFueraDeControl y sus parmetros:

Como solo debemos declarar parmetros de entrada y una variable temporal que se
corresponder con la variable de retorno de la funcin, eliminamos el resto de apartados de la
declaracin. Observar que la funcin se ha declarado con nombre simblico. Esto nos obligar
a declarar una FC con el mismo nombre simblico en la tabla de smbolos. A la tabla de
smbolos puede accederse directamente desde el men herramientas. Indicamos FC120.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 14/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Para finalizar la edicin de la funcin completamos el rea de instrucciones con la estructura IF
THEN ELSE, que puede si se desea insertarse en el rea de edicin.

Nos queda compilar la funcin, programar su llamada en OB1 por ejemplo, y probarla.
Para compilar usamos el siguiente botn de la barra dherramientas:
Para ver los resultados de la compilacin debemos tener activa la opcin
Con esto nos aparece en la ventana inferior del rea de trabajo.

Que nos indica que no existe ningn error y que nuestro bloque est listo para ser probado.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 15/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Antes hay que programar la llamada a la funcin. Para ello, desde el contenedor bloques
abrimos el OB1 en KOP e insertamos la FC120 en un segmento.

Aparece el nombre de la funcin, los tres parmetros de entrada y en el parmetro RET_VAL


aparece el valor de retorno de la funcin. RET_VAL es por lo tanto una palabra reservada y es
usada como un parmetro de salida del tipo declarado para la funcin. Si la funcin se ha
declarado como boleana RET_VAL es bool si la funcin es declarada como INT RET_VAL es
tambin de tipo entero, etc.
Para completar la llamada a una funcin (FC) hay forzosamente que asignar valores a los
parmetros de la funcin.
En el ejemplo, usamos la
funcin para controlar una
variable de proceso, cuyo
valor est en MD50 y sobre
la que hay que indicar una
alarma si su valor es menor
de 30 o mayor que 50,5. La
marca M100.0 estar a 1 si
hay alarma y a 0 en caso
contrario.
Arrancamos
el
simulador
desde
el
administrador
simatic y cargamos todos los
bloques en la CPU, para a
continuacin colocar en RUN
el conmutador de estado del PLC.
Para probar la funcin insertamos en el simulador una variable general y le indicamos MD0,
con el formato regulacin real, lo que nos permite cambiar su valor entre un mnimo y un
mximo como si fuera un potencimetro.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 16/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
En las figuras siguientes podemos observar la respuesta de la funcin para tres valores en
MD0.

En este caso, el valor de MD0 est entre 30 y 50.5 y por lo tanto, M100.0 est en 0 indicando
que la variable se encuentra dentro de mrgenes.

En este segundo caso, la variable ha sobrepasado a valorMaximo por lo que el valor de retorno
de la funcin es 1, indicando alarma de proceso.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 17/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
La misma situacin se da cuando el valor en MD0 es inferior a 30, tal como muestra la
siguiente figura.

Con esto podemos hemos comprobado que la funcin se comporta tal como desebamos por lo
que la damos por buena.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 18/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
2.2.- Funcin para convertir un valor real a tiempo simatic.
Supongamos que tenemos un sistema de control de una mquina o proceso donde intervienen
un PLC y una pantalla para la interfase de usuario, conectados por MPI, tal como muestra la
siguiente figura.
En la interfase de usuario
del sistema descrito se ha
previsto una pantalla de
configuracin, donde se
desea poder cambiar el
valor de preseleccin de
varios temporizadores del
proceso.
Los temporizadores de la
gama
del
S7-300/400
utilizan el tipo S5TIME que
no es un tipo de datos
estndar y que tiene el
inconveniente de cambiar
la base de tiempo de manera automtica, segn el valor de preseleccin propuesto. Esto
quiere decir que segn el intervalo de tiempo deseado para preseleccionar el temporizador
deberamos cambiar el formato de preseleccin. Para facilitar la tarea del operador de planta
hemos diseado la interfase para permitir la entrada directa de tiempos en segundos, en
formato real con dos decimales, por lo que podemos apreciar centsimas de segundo.
Con esto facilitamos la tarea por parte del usuario pero hemos de disear una funcin de
conversin para convertir el tiempo, introducido en formato real a formato S5TIME.
Escrita en lenguaje algortmico la funcin tiene el aspecto que sigue. En ella utilizamos varias
funciones de conversin de tipos. En primer lugar disponemos, en la librera estndar de
funciones S7, de la funcin de conversin timeToS5time, que vamos a utilizar. Con ello
hemos reducido el problema a realizar una conversin realATime que en el ejemplo lo
realizamos del siguiente modo:
Pasamos entrada de segundos a milisegundos (entrada*1000.0)
Convertimos el resultado anterior (real) a entero 32 bits (realAEnter)
Convertimos el resultado del paso anterior a time (entero 32 bits en mseg) con
(enterATime)
funcion realAS5time(entrada: real): s5time
var
aS5T: s5time;
fvar
aS5T := timeAS5time (EnterATime(realAEnter(entrada*1000.0)));
retorna aS5T;
ffuncion;

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 19/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Escrita en SCL la funcin queda como sigue:

Hemos usado dos funciones de conversin implcitas en SCL como DINT_TO_TIME y


REAL_TO_DINT y hemos usado la funcin TIM_S5TI que viene incluida en la librera estndar
en el apartado IEC function blocks.
Para probar la funcin hemos diseado una pequea interfase en la pantalla TP270, que
describimos a continuacin.
En la columna preseleccin
hemos incluido tres campos
de entrada con el valor de
preseleccin en segundos,
en formato real, de tres
temporizadores.
Los botones de comando
de estado de la derecha
nos permiten arrancar o
parar cada uno de los
temporizadores de manera
individual.
Los temporizadores son SE
por lo que al finalizar el
tiempo
el
mismo
temporizador borra el BIT
de arranque asociado al
botn de comando de
estado,
pudindolo
observar en la misma
pantalla.
Los tres campos de salida situados bajo la columna Valor actual permitirn observar el valor
actual de cada uno de los temporizadores despus de programar la correspondiente funcin.
Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 20/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
De momento vamos a probar que la introduccin de un valor real en cada uno de los
mencionados campos de preseleccin se traduce en el correspondiente valor S5TIME de
arranque del temporizador. Para ello programamos los tres temporizadores en el OB1. Debido
a que tanto la preseleccin como el BIT de arranque se modifican desde la pantalla hemos
definido los siguientes valores en DB10.

Con estas variables la programacin de los temporizadores nos queda como sigue:

En primer lugar llamamos a la funcin REAL_TO_S5TIME a la que damos como entrada el valor
de preseleccin introducido en el correspondiente campo de entrada de la pantalla comentado
anteriormente. La respuesta de la funcin la descargamos en D_TP.T1_S5T_SP en formato
S5TIME. Este mismo valor, es el que introducimos como preseleccin del temporizador.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 21/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
El arranque del temporizador lo realizamos con D_TP.T1_ON que se activa o desactiva desde
la pantalla. Cuando el temporizador finaliza el tiempo desactiva tambin el BIT de arranque. En
la siguiente diapositiva vemos el resultado de la funcin de conversin.

Arrancamos el simulador, cargamos el programa del PLC en el simulador y arrancamos el


runtime del Protool. Al introducir un valor en Tiempo 1 observamos su efecto el segmento 1
pudiendo ver como coincide con el valor S5TIME del temporizador.
Los proyectos descritos en esta prctica y en el resto de prcticas de este manual estn
incluidos en el CD que lo acompaa.
Como puede fcilmente intuirse, a menudo se hace necesaria la funcin contraria para
convertir a real el tiempo transcurrido en el temporizador. Esto podra usarse para visualizar
los tiempos actuales de temporizadores cuando estn activados.
Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 22/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Para construir esta segunda funcin que vamos a denominar S5TIME_TO_REAL vamos a usar
la funcin S5TIME_TIME (FC33) del apartado funciones IEC de la librera estndar que
acompaa al paquete STEP 7.
Hay que hacer sin embargo las siguientes salvedades:
Los tiempos actuales pueden descargarse de los temporizadores usando los
parmetros DUAL, declarado de tipo WORD y que contiene en formato entero el tiempo
que resta para completar la preseleccin y DEZ declarado tambin de tipo WORD y al
igual que con DUAL conteniendo el tiempo que resta para completar el tiempo
preseleccionado, pero en formato BCD, de hecho en formato S5TIME. Por este motivo
nuestra funcin va a leer el tiempo actual del temporizador del parmetro DEZ.
Vamos a indicar el tiempo transcurrido desde el arranque del temporizador en vez del
tiempo que falta para completar el ciclo, por esto nuestra funcin va a tener como
parmetro de entrada el valor de preseleccin del temporizador.
El cdigo de la funcin escrita directamente en SCL es:

Es una funcin muy parecida a la anterior pero quiero resaltar dos cosas:
entrada es el parmetro que va a recibir al valor actual del temporizador del parmetro
DEZ del mismo, que esta declarado como WORD. Sin embargo SCL no dispone de la
conversin WORD_TO_S5TIME, por lo que no podemos traspasar la salida de DEZ a la
entrada de S5TI_TIM. Aunque hay otras soluciones, en nuestro caso lo hemos resuelto,
declarando lo que se denomina una vista sobre una variable. Si observamos el apartado
de variables de entrada vemos la declaracin de entrada_S5T AT entrada: S5TIME.
Esto significa exactamente que entrada_S5T contiene lo mismo que entrada pero que
su contenido ser interpretado como S5TIME, con lo que podemos pasar entrada_S5T
a S5TI_TIM sin ningn problema. Sin embargo, en la interfase de la funcin solo nos
aparecer, entrada.
Las conversiones aplicadas son: entrada_S5T pasa a formato TIME (miliseg), el
resultado se pasa a DINT y a su vez, este ltimo a REAL. Este resultado se divide por
1000.0 para pasar a segundos y finalmente restamos este resultado del valor
preseleccionado para obtener el tiempo transcurrido en vez del tiempo restante.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 23/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Para probar la funcin solo nos queda llamarla en el OB1 colocando como salida de la misma
la direccin de DB10 asignada a los campos de salida de la pantalla.
La llamada de la funcin queda como sigue:

Al parmetro DEZ del


temporizador le asignamos
la variable temporal del
OB1
#A1_W
declarada
lgicamente de tipo WORD.
Tambin le pasamos en SP
el valor de preseleccin del
temporizador como REAL.
Finalmente la funcin nos
devuelve en RET_VAL el
valor
actual
del
temporizador en segundos
para
poderlo
visualizar
desde la pantalla.
Como podemos comprobar
en el sinptico contiguo,
vemos
los
tiempos
transcurridos
desde
el
arranque
de
los
tres
temporizadores en la columna valor actual.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 24/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
2.3.- Funcin para normalizar o escalar una entrada analgica.
Como se ha dicho en la introduccin, la realizacin de clculos es una de las aplicaciones
donde SCL toma clara ventaja respecto por ejemplo a KOP o incluso AWL. Para comprobarlo
podemos disear el primer ejercicio en KOP y en SCL comparando la extensin del cdigo
generado en el PLC.
La normalizacin de variables analgicas en Siemens tiene las siguientes particularidades:
Se aplica generalmente la funcin de la librera estndar FC105 SCALE que aplica una
conversin lineal entre el valor de entrada, variable entre 0 y 27648 si la entrada es de rango
unipolar o entre -27648 y +27648 si la entrada es de rango bipolar y un valor de salida
variable entre LO_LIM y HI_LIM. El valor de entrada proporcionado por las tarjetas analgicas
del S7-300 puede sin embargo sobrepasar el valor 27648 cuando por ejemplo se ha conectado
un sensor de rango de salida 2 a 10 voltios y el sensor est proporcionando 10,5 voltios a la
tarjeta analgica indicando por descontado, que hay un desbordamiento en la variable del
proceso que se est midiendo. En esta situacin la funcin SCALE proporcionada por STEP-7
en la librera estndar dara como salida, el valor HI-LIM cosa que obviamente no proporciona
informacin acerca de en cuanto est sobrepasado el valor mximo proporcionado por el rango
de medida del sensor.
En la figura anexa puede
verse una llamada a la
FC105 SCALE, con sus
parmetros.
El significado de cada uno
de los parmetros se ir
comentando a lo largo del
ejercicio.
Se pretende por tanto
corregir esta limitacin de
la
funcin
SCALE
haciendo que cuando el
sensor
de
un
valor
superior a 10 voltios, 20
mA, etc. dependiendo de su rango, cosa que significar que en el valor de entrada de la
funcin se presente un valor entre 27648 y 32767, nuestra funcin responda tambin con un
valor que est por encima de HI_LIM.
Describimos a continuacin los puntos clave en el proceso de escalado o normalizacin de
valor de entrada analgico. En primer lugar el sensor da una seal entre 0-10v, 1-5v, 4-20mA,
etc. cuando la variable en el proceso vara de LO_LIM a HI_LIM. La variable en el proceso
puede variar fuera de los mrgenes indicados, provocando que el sensor proporcione una seal
fuera de los rangos de medida indicados. En segundo lugar la tarjeta de entrada analgica
conectada al PLC proporciona en una palabra del rea de memoria de periferia de entradas un
valor entero comprendido entre 0 y 27648 si el rango del sensor es unipolar o entre -27648 y
+27648 si el rango del sensor es bipolar. En tercer y ltimo lugar debemos aplicar la funcin
escalar y dar como salida el valor de la variable del proceso en unidades de ingeniera. Por
supuesto que este valor estar, en condiciones normales, comprendido entre LO_LIM y
HI_LIM.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 25/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Grficamente:

HI_LIM

VAR_PV

INPUT

27648

32767

LO_LIM

El grfico corresponde a una entrada unipolar. Para un valor INPUT cualquiera entre 0 y
27648 la funcin nos responde con VAR_PV, que se correspondera con el valor de la variable
del proceso. Ntese que la funcin podra perfectamente dar valores por encima de HI_LIM
cuando INPUT vara de 27648 a 32767.
La formula que hay que aplicar se deduce de la ecuacin de una recta que pasa por dos puntos
(x1, y1), (x2, Y2)
y = ((Y2-y1)/(x2-x1))*(x-x1) + y1
Aplicado a nuestro problema los puntos de la recta son (0, LO_LIM), (27648, HI_LIM)
Y la formula para el caso de rangos unipolares es:
VAR_PV = ((HI_LIM-LO_LIM)/27648)*INPUT + LO_LIM
Si el rango es bipolar los puntos son (-27648, LO_LIM), (+27648, HI_LIM) y la formula cambia
a la siguiente expresin
VAR_PV = ((HI_LIM-LO_LIM)/(27648-(-27648)))*(INPUT-(-27648)) + LO_LIM
Estamos ahora en condiciones de resolver el problema usando SCL.
En primer lugar hay que tener un PC con STEP7 y las herramientas PLCSIM y por supuesto
SCL. Si se dispone de STEP7 Professional ambas herramientas de ingeniera vienen incluidas
en el mismo CD del STEP7.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 26/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

Creamos el proyecto SCL001 e insertamos un programa S7, tal como muestra la figura
contigua.

A continuacin hemos de crear la fuente SCL de nuestra funcin. Esto significa que cuando
trabajamos con SCL hay que primero escribir el cdigo y luego compilarlo para generar el
bloque ejecutable por el PLC. As que abrimos la carpeta fuentes y bien con el men insertar,
bien con el botn derecho del ratn creamos una fuenteSCL(1), a la cual denominaremos
funcionEscalar. En nuestro proyecto existe ya otra fuente denominada volumenDeposito.
Tanto de una forma como de otra es posible insertar dos tipos de objetos relacionados con
SCL, fuente SCL y archivo de control de compilacin de SCL. Optaremos por Fuente SCL y ms
adelante ya trabajaremos con archivos de control de compilacin.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 27/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
A continuacin abrimos la fuente que acabamos de insertar haciendo doble clic sobre ella. Se
nos abre la herramienta de trabajo en SCL, que tiene el aspecto de la siguiente figura. Abrimos
directamente el men Herramientas, Preferencias

Activamos todas las opciones de la ficha compilador.


El men insertar tiene un apartado interesante, destinado a facilitar la tarea del programador,
denominado insertar plantilla de bloque que vamos a usar inmediatamente. Al seleccionar
insertar, plantilla de bloque, FC aparecen las siguientes lneas en el editor.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 28/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

En primer lugar pide el numero de la FC que


deseamos editar y si esta funcin va a
devolver algn valor de retorno y si es as el
tipo de datos del valor de retorno. En la
plantilla propuesta la funcin retorna un
valor entero.
En segundo lugar nos pide la declaracin de
variables, en la cual solo presupone que
existan variables temporales, pero adems
de temporales las variables, al igual que en
KOP o en FUP, pueden ser de entrada
VAR_INPUT, de salida VAR_OUTPUT, o de
entrada salida VAR_IN_OUT. Si se tratara de
un bloque FB las variables podran ser
adems estticas.
VAR_INPUT son valores que introducimos en
la funcin. Desde la funcin solo podemos
leer estos valores.
VAR_OUTPUT La funcin entrega valores de salida sobre estos parmetros, pero no puede
consultar su valor mientras se ejecuta.
VAR_IN_OUT La funcin entrega valores de salida sobre estos parmetros pero adems puede
consultar su estado o valor en cualquier momento.
Los tres tipos de variables, VAR_INPUT, VAR_OUTPUT y VAR_IN_OUT, aparecen como
parmetros cuando se invoca a la funcin desde otro bloque. En ningn caso aparecen las
variables temporales ni las estticas en el caso de FBs.
Por ultimo deja espacio para el rea de instrucciones y acaba con un valor constante de
retorno para la funcin y la palabra clave END_FUNCTION.
Para concretar nuestra funcin escalar debemos antes identificar los parmetros o variables
que necesitamos. Pueden deducirse de la propia expresin que antes hemos descrito. Se
tendrn los siguientes parmetros de entrada.
IN: Valor de entrada de la funcin. Es el valor que nos proporciona la tarjeta
analgica del PLC. Ser un valor entero entre 0 - +32767 si el rango es unipolar y 32767 a
+32767 si el rango es bipolar.
HI_LIM: Valor mximo del margen del captador en unidades de ingeniera. Se
corresponde con el valor de la variable del proceso para la mxima seal proporcionada por el
captador: 10v, 20mA, etc. Ser un valor real.
LO_LIM: Valor mnimo del margen del captador en unidades de ingeniera. Se
corresponde con el valor de la variable del proceso para la mnima seal proporcionada por el
captador: 0v, 4mA, etc. Ser Tambin un valor real.
Bipolar: Bit que indicar a la funcin que se trata de rangos bipolares si est en 1 o
unipolares si est en 0.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 29/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Y los siguientes parmetros de salida:
RET_VAL: Valor de retorno de la funcin que indicar distintos estados.
VAR_PV: Valor de la variable de proceso ya escalada o normalizada que se
corresponde con la entrada proporcionada.
No son necesarias en esta funcin variables de entrada salida, aunque si definiremos la
constante K1 y la variable temporal AR1. De otro lado la funcin no va a proporcionar valor de
retorno, por lo que indicaremos la palabra clave VOID en la cabecera. Esta y la declaracin de
variables quedaran como sigue:
Observar la sintaxis para la
declaracin de la constante.

Botn compilar
fuente

Observar tambin como solo con


la declaracin de variables y
constantes se ha realizado una
compilacin
para
comprobar
errores sintcticos y no se han
presentado errores.
En la siguiente figura ya
podemos observar el cdigo de
la
funcin.
Una
pequea
aclaracin antes de ver las
instrucciones. La variable IN es
entera y por tanto hay que
convertirla a real antes de poder
operar con el resto de variables.
En KOP habra que usar las
instrucciones de conversin.
En SCL tambin hay que hacer
bsicamente lo mismo, con la
ventaja de que ya estn
definidas en el lenguaje. Es decir
podemos llamar a la funcin
INT_TO_REAL
sin
otra
preocupacin que la de la
correspondencia de tipos.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 30/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Asignando el valor correcto a AR1 usar la misma expresin tanto para rango unipolar como
bipolar, simplificando la funcin.

Nos falta programar la llamada a la funcin y probarla. La llamamos desde el OB1 por ejemplo,
como un segmento en KOP. Observar como en la carpeta bloques de nuestro proyecto aparece
la funcin FC55.
Para comparar nuestra funcin con la estndar de Siemens vamos a llamar a las dos
simultneamente comparando resultados con PLCSIM.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 31/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Lo que sigue serian las llamadas de las funciones.
Las dos funciones
tienen los mismos
parmetros de
entrada y distintos
de salida por lo
que podremos
comparar los
resultados.
Despus de
transferir el
programa al
simulador
visualizamos en el
propio simulador:
PEW256 para
forzar la entrada y
MD0 y MD4 para
ver los resultados.
En las siguientes
figuras tenemos
resultados para
entrada 0 para
entrada 27648 y
para entrada
30000.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 32/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

Por ltimo en la diapositiva final se observa la diferencia entre nuestra funcin y la de


Siemens. Para una entrada 30000 superior a 27648 la funcin de siemens se queda en HI_LIM
y la nuestra sigue dando el valor de proporcionalidad.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 33/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 34/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
2.4.- Funcin para calcular el volumen, el peso i el porcentaje de carga de un silo de
forma cnico cilndrica.
En un silo de forma cnico cilndrica se mide el nivel de carga con un sensor de ultrasonidos
que nos proporciona una seal proporcional a la altura entre la superficie del lquido o slido
que contiene y el borde superior del silo hs. Se dan tambin las medidas del silo que se indican
en el grfico siguiente.
Para
calcular
el
volumen,
podemos distinguir entre dos
casos, a saber: Que el contenido
sea tal que se supere, o no, la
altura h2.
En el primer caso se tratar de
calcular el volumen de un
cilindro de altura (h-h2) al que
aadiremos el volumen fijo del
cono inferior.
En el segundo caso se tratar de
calcular el volumen de un cono
truncado de altura h y radio R.
Para facilitar los clculos vamos
a encontrar en primer lugar el
volumen del cono truncado
inferior.
El volumen del trozo de cono
que falta para completar el cono
inferior tiene una altura terica
hci
que
se
calcula
por
trigonometra a partir de R2, R1
y h2.
hci = R2*h2/(R1-R2)
El
volumen
de
ese
cono
imaginario de radio en la base
R2 es Vci y ser:
Vci = 1/3*(*R22)*hci
El volumen total del cono final del silo Vc ser el volumen del cono con base de radio R1,
menos el volumen del cono con base, de radio R2
Vc = 1/3*(*R12)*(h2+hci) - Vci

Con estos datos las frmulas aplicar sern las siguientes:


Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 35/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Caso 1: h > h2
Volumen = Volumen cilindro de altura h-h2 + volumen cono
Volumen = (*R12)*(h - h2) + Vc
Caso 2: h < h2
En este caso hay que determinar el radio R correspondiente al crculo donde est la superficie
del producto almacenado. Por trigonometra
R = R2*(h + hci)/hci
Volumen = 1/3*(*R2)*(h + hci) - Vci
Con esta introduccin podemos ya plantear el diseo de la funcin que queremos desarrollar.
La funcin tendr como parmetros o variables de entrada:
InSensor
Entero con el valor de conversin proveniente de la tarjeta
analgica donde est conectado el sensor.
R1, R2, h1, h2 Reales con valores en metros para fijar las dimensiones del silo.
Densidad
Real con el valor de densidad del producto almacenado.
Como variables de salida tendremos:
Volumen, Peso
Reales con estos valores de respuesta
%CapacidadTotal
Real con el porcentaje de llenado del tanque
Para facilitar los clculos definiremos tambin unas variables temporales que usaremos para
almacenar resultados intermedios.
Variables temporales
hci, h, R, Vci, AR1
La secuencia
1.2.desde SCL.
3.4.-

Reales

de operaciones de la funcin ser:


Control de errores en entradas
Escalado de InSensor para obtener h. Con ello practicamos llamadas de funciones
Determinar valores auxiliares.
Determinar Volumen, Peso y %CapacidadTotal

Escribimos el cdigo en la fuente VolumenDeposito que ya habamos creado.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 36/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
En esta figura vemos completa la declaracin de variables:

Hemos aadido una variable temporal denominada error que vamos a usar para la llamada de
la funcin scale, y hemos declarado h como variable de salida en vez de temporal por
considerarla til para determinadas aplicaciones.
En la parte del programa, empezamos realizando un control de parmetros de entrada. En
concreto si R1 o h1 son cero. Si eso ocurre asignamos valor nulo a los parmetros de salida y
ponemos 1 en RetValue para indicar fallo en parmetros de entrada. De otro lado si R1 y h1
tienen valores distintos de cero, la funcin sigue su curso normal.
Para llamar a la funcin scale lo ms fcil es acudir al men insertar, cogiendo la opcin
llamada de bloque. Esto produce los resultados que se observan en las siguientes diapositivas.
En primer lugar se abre por defecto la librera standard.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 37/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

La funcin scale se encuentra en el grupo TI-S7 Converting Blocks y es la FC105. La


seleccionamos haciendo doble clic, produciendo los efectos que se observan a continuacin.
Sale el nombre de la funcin y entre parntesis
los parmetros de la misma con indicacin en
forma de comentario de si es de entrada, salida o
entrada salida y del tipo de datos asociado al
parmetro.
Al cerrar los parntesis observamos que hay un
comentario con indicacin WORD. Esto hace
referencia a que la funcin retorna un valor, con
este formato de datos. Como se vio en el primer
ejercicio la fuente para la funcin scale empezara
as.

FUNCTION FC105: WORD en vez de


FUNCTION FC105: VOID como hemos visto en la propia FC que estamos desarrollando.

Con esto la llamada a la funcin


Scale para resolver nuestra funcin
nos quedara como sigue.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 38/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
El cdigo completo de la funcin quedar as:
Si hay valores de
entrada incorrectos
pone a cero las
salidas
e
indica
error en RetValue.
Si los valores de
entrada estn en el
rango correcto, da
un cero en RetValue
y
escalamos
la
entrada del sensor
entre 0 y la altura
total del tanque,
h1+h2.
Determinamos
los
valores
auxiliares
que
hemos
comentado en el
planteamiento.
Aplicamos
dos
frmulas segn que
el nivel est por
encima o por debajo
del cono.
Calculamos el peso,
el volumen total y el
porcentaje
de
llenado.

Nos queda programar la llamada a la funcin y probarla con PLC_SYM.


La llamada a la funcin la realizamos en OB1 y queda como sigue.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 39/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Vemos las variables de entrada a las cuales asignamos valores de prueba para comprobar la
funcin. A la variable InSensor le asignamos el canal analgico PEW256. Por ltimo a las
variables de salida les asignamos registros del rea de marcas para observar su valor en el
simulador.

Para finalizar arrancamos el simulador, cargamos el programa y depuramos la funcin hasta


que nos funcione correctamente.
Podemos al igual que en KOP observar el funcionamiento de la funcin activando la funcin
observar. Podemos ver el resultado de la funcin observar en la figura siguiente: En una
asignacin aparecen los valores de cada uno de los operandos y el resultado final.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 40/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

Resultados de la prueba para depsito lleno, depsito vaco y con dos valores intermedios.
Tener en consideracin que el volumen est en m3, la altura en metros y el peso en Kg.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 41/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Con valores intermedios: 4,78 metros de altura de producto, que representa un 54,82% de
capacidad y con 1,5 metros lo que se traduce en un 5,09% de capacidad.

Cualquiera de los dos ejercicios anteriores puede programarse en KOP aunque el cdigo a
escribir es bastante ms extenso.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 42/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
2.5.- Clculo de tiempos de activacin o funcionamiento de dispositivos.
Este es tambin un problema bastante usual en control de procesos. Debe de controlarse la
duracin de un proceso o el tiempo de funcionamiento de un dispositivo que realiza ciclos de
trabajo prolongados de por ejemplo varias horas, pinsese en compresores frigorficos,
bombas, llenado de tanques, etc. No deben de contabilizarse los tiempos de interrupcin
debidos a alarmas de dispositivos, paradas por acciones de operador, etc. sino solo los tiempos
efectivos destinados a la tarea o proceso de la cual se quiere medir el tiempo. Adems el valor
de ese tiempo ha de visualizarse en un dispositivo HMI, por lo que debe de actualizarse a
menudo independientemente de su duracin que como se ha dicho puede ser de varias horas.
No seria adecuado actualizar el tiempo solo al finalizar el ciclo ya que el valor visualizado
tendra siempre el error del tiempo correspondiente al ltimo ciclo.
La funcin medirTiempo que se va a desarrollar va a tener como entrada la seal on off del
dispositivo o proceso y otra seal para poder poner a cero los acumuladores cuando se desee.
Esta ltima podra provenir del terminal de operador o scada y su actuacin estar protegida
con un password para evitar que pudieran borrarse los acumuladores de manera accidental.
El formato fecha y hora CPU, (DT date and time) es un formato de datos complejo que ocupa 8
bytes en memoria y por lo tanto deberemos emplear funciones incluidas en la librera estndar
del Step 7 para tratarlo. Como el volumen de datos involucrado en la funcin va a ser grande
comparado con las dos funciones anteriores, y como adems ser una funcin que se podr
utilizar bastantes veces en un mismo proyecto vamos a desarrollar la funcin como un FB. Con
ello los parmetros que no se quieran incluir en la interfase se declaran como estticas y sus
valores actuales van a quedar almacenados en el correspondiente DB de instancia del FB.
Con todo esto, en este ejercicio vamos a practicar con formatos DT, llamadas de funciones en
SCL, llamadas de FB y multiinstancias.
En resumen los parmetros a usar sern los siguientes:
Entrada:
DP_ON_OFF
Seal on off del dispositivo o proceso
DP_RES_ACC
Borrado de acumuladores
Entrada Salida:
DP_NC_ACC
DP_T_ACC
DP_T_UC
Salida:

DP_DT_IUC
DP_DT_FUC

Estticos
DP_FUP
DP_A_FUP
DP_FDOWN
DP_A_FDOWN
DT_UMIN

Nmero de ciclos acumulado en dispositivo o proceso


Tiempo acumulado de funcionamiento en dispositivo o proceso
Tiempo ltimo ciclo en dispositivo o proceso
Fecha y hora inicio ltimo ciclo en dispositivo o proceso
Fecha y hora finalizacin ltimo ciclo en dispositivo o proceso
Flanco de subida para la seal on off del dispositivo o proceso
Auxiliar para la obtencin del flanco anterior
Flanco de bajada para la seal on off del dispositivo o proceso
Auxiliar para la obtencin del flanco anterior
Fecha y hora del ltimo registro

Empezamos editando nuestra funcin insertando en la carpeta fuentes del proyecto SCL001 la
fuente SCL medirTiempo. Vamos al editor de SCL e insertamos plantilla para bloque FB y
realizamos la declaracin de variables especificada anteriormente.
Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 43/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica

En este ejemplo he declarado las dos variables DP_DT_IUC y DP_DT_FUC como parmetros de
salida si bien podran muy bien ser consideradas como variables estticas. Mi opinin es la
siguiente: Si esas dos variables tienen que visualizarse en el sistema HMI, si son declaradas
como parmetros de salida ser posible enlazarlas con otras variables de un DB especfico para
el sistema HMI. Si por el contrario son declaradas como variables estticas, el sistema HMI
deber leerlas del propio DB de instancia del FB. Ambas soluciones son posibles aunque por
estilo de programacin prefiero la primera de ellas. Adems el hecho de incluirlas como
parmetros de salida nos va a permitir practicar con el formato DT.
El aspecto de la declaracin de nuestro FB es el siguiente:

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 44/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Respecto a las tareas en las que podemos dividir nuestra funcin podemos enumerarlas como
sigue:
Elaborar flancos de subida y bajada de la seal de marcha del proceso.
Anotar fecha y hora de inicio de ciclo cuando aparece el flanco de subida, poner a cero
el contador de horas del ltimo ciclo e incrementar el acumulador de maniobras o
ciclos.
Mientras est en ON la seal del proceso leer el reloj de la CPU y comparar la fecha y
hora actual con la del ltimo registro para detectar el paso de un minuto. Cuando eso
ocurra incrementar acumuladores y actualizar registro.

Cuando aparezca el flanco de bajada anotar fecha y hora de parada e incrementar


acumuladores como en el paso anterior.

Borrar acumuladores cuando aparezca la seal de borrado de los mismos.

Comentamos cada uno de los trozos de cdigo correspondientes a esas tareas:


Elaboracin de flancos de subida y bajada.
Si est el proceso en ON ponemos a 1 el auxiliar
para flanco de bajada, que vamos a usar
posteriormente. Si no est a 1 el auxiliar para el
flanco de subida, es que estamos en el flanco de
subida y por tanto activamos tanto el flanco de
subida como su auxiliar. Como se puede observar,
en el siguiente ciclo de programa el flanco de
subida pasar a 0 debido a que su auxiliar
permanecer activado. Si el proceso pasa a OFF
ponemos a 0 el flanco de subida y su auxiliar. Si el
auxiliar para el flanco de bajada est en 1 es que
estamos en el flanco de bajada, por lo que lo
activamos al mismo tiempo que desactivamos el
auxiliar para flanco de bajada. Al igual que antes
en el siguiente ciclo de programa que permanezca
el proceso en OFF se va a poner a 0 el flanco de
bajada.
En el
subida

flanco

de

Incrementamos
el
contador de ciclos o
maniobras. Leemos
la hora del sistema
con
SFC1
y
la
registramos como la
fecha y hora de inicio del ltimo ciclo o maniobra (DP_DT_IUC). Guardamos esta fecha y hora
en DT_UMIN para comparaciones posteriores. Ponemos a cero el contador de horas del ltimo
ciclo.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 45/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Mientras este en ON el proceso.

Leemos el reloj de la CPU con SFC1 y comparamos el DT (date and time) correspondiente, con
el registrado en el inicio del ciclo. Esto ltimo lo hacemos de la siguiente forma: Usamos la FC
34 del apartado funciones IEC de la librera estndar del Step7 para restar dos DT y encontrar
el tiempo transcurrido entre los dos DT. Si el tiempo transcurrido es igual o superior a un
minuto incrementamos los acumuladores de tiempo. Dos aclaraciones: Para la comparacin
debemos convertir el formato time a entero y como en realidad contiene el tiempo en
milisegundos comparamos con los milisegundos que tiene un minuto. Para sumar a los
acumuladores pasamos a real el tiempo en milisegundos y lo dividimos por el nmero de
milisegundos que tiene 1 hora antes de realizar la suma con el acumulador correspondiente.
Por ltimo actualizamos DT_UMIN para posteriores comparaciones.
En el flanco de bajada.

Si estamos en el flanco de bajada, leemos el reloj de la CPU, calculamos el tiempo transcurrido


desde el ltimo minuto y lo sumamos a los acumuladores, convertido a horas.
Si se presenta la seal de borrado de acumuladores
Ponemos a cero tanto el contador de maniobras
como el de tiempo de funcionamiento.

Nos queda llamar al bloque de funcin y probarlo

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 46/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Como en los casos anteriores lo llamamos desde el OB1 y lo probamos con el simulador.

Al llamar al FB hay alguna diferencia con respecto las llamadas a FCs. En primer lugar la
asignacin de valores a los parmetros puede dejarse en blanco. En este caso el FB trabajar
con los valores del DB de instancia, el nmero del cual se nos pide en la cabecera de la
llamada. Si el nmero de DB no existe nos pide si queremos generarlo. Finalmente la llamada
quedar como sigue:
Asignamos
las
entradas
E124.0 para la seal ON OFF
del proceso y E124.1 para el
borrado
de
los
acumuladores.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 47/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
3.- Manejo de datos en listas y matrices.
3.1.- Filtrado de una variable analgica.
Los problemas tipo donde hay que manejar una gran cantidad de datos puestos por ejemplo
en un array, tambin se resuelven ventajosamente en SCL. En el ejemplo que se describe se
trata de resolver un problema bastante usual en los sistemas automticos donde hay que
tratar con valores analgicos.
La seal que nos llega de un captador lleva un rizado incorporado que puede tener diversas
causas a veces difciles de eliminar, que nos provoca que el valor numrico de la conversin de
la variable sufra continuas variaciones, que por ejemplo, si la variable es visualizada en una
pantalla provoque un efecto molesto. Para solucionar el problema introducimos un filtro entre
el valor que nos llega directamente de la tarjeta analgica y el valor que damos para la
variable, que finalmente ser el que se va a visualizar.
El filtro que se propone consiste en almacenar una determinada cantidad de valores que se va
a entrar como parmetro, calcular la media de estos valores y dar esta media como valor de la
variable.
En este caso dado que necesitamos un array para almacenar los valores que nos van llegando
por la entrada, vamos a usar un FB. De esta forma los parmetros van a quedar en el DB de
instancia del FB.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 48/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
3.2- Determinacin de la posicin de carga en un robot cartesiano.
Se trata del siguiente problema: Un robot cartesiano ha de almacenar tres tipos distintos de
piezas cilndricas que se distinguen bsicamente por su color, pueden ser negras, naranjas o
de color gris claro, y por que estas ltimas son metlicas mientras que las negras y naranjas
son de materiales plsticos.
Las piezas son almacenadas segn el tipo, en tres filas de 13 piezas cada fila distanciadas
entre ellas 60mm, segn el eje x. El origen se encuentra situado en el extremo superior
derecho del sinptico que se muestra a continuacin y la primera pieza de cada fila est
situada en las coordenadas (100, 250) para las piezas negras, (100, 350) para las piezas
metlicas y (100, 450) para las piezas naranjas.
El tipo de pieza se detecta antes de la entrada al almacn por medio de tres detectores, uno
de capacitivo (detecta cualquier tipo de pieza), otro de inductivo (detecta solo las metlicas) y
otro de reflexin directa que detecta las naranjas y las metlicas pero no las negras. Los tres
detectores se encuentran conectados a las entradas:
E0.0 inductivo
E0.1 capacitivo
E0.2 reflex
La presencia o no de pieza en cada una de las posiciones del almacn se guarda en un array
de bits, almacenado en el DB10, de manera que un 1 en el ndice [11, 2] del array significa
que hay una pieza metlica en la posicin 11.
Se pide una funcin que teniendo como entradas las seales de los tres detectores y la tabla
de posiciones del DB nos de cmo salidas el tipo de pieza (negra =1, metlica =2 y naranja
=3) y las coordenadas de la posicin de descarga para las funciones de posicionamiento de los
ejes.

Adems la funcin debe avisarnos en caso de fila completa.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 49/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Planteamos la funcin usando pseudo cdigo.
accin buscarPosicionCarga(ent inductivo, capacitivo, reflex: bool,
entsal tablaPosiciones tabla[13, 3] de bool,
sal posX, posY: real, sal tipoPieza: int, sal filaLlena: bool)
const
delta_x: real = 60.0;
inici_x: real = 100.0;
fconst
var
j: int;
trobat: bool;
coordy tabla[3] de real;
fvar
{Asignamos coordenadas y a tabla}
coordy[1] := 250.0;
coordy[2] := 350.0;
coordy[3] := 450.0;
{Determinar tipo de pieza}
tipoPieza := 0;
si (capacitivo = 1) entonces
si (inductivo = 1) entonces
tipoPieza := 2;
sino
si (reflex =1) entonces
tipoPieza := 3;
sino
tipoPieza := 1;
fsi
fsi
fsi
{Determinar posiciones}
si tipoPieza <> 0 entonces
j:= 1;
filaLlena := 0;
trobat := tablaPosiciones[j, tipoPieza] = 0;
mentre trobat = 0 i j <= 13 fer
trobat := tablaPosiciones[j, tipoPieza] = 0;
j := j+1;
fmentre
Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 50/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
{Asignamos coordenadas nulas en caso de fila llena}
posx := 0,0;
posy := 0,0;
si j>13 entonces
filaLlena := 1;
sino
posx := inici_x + desta_x * (j-1);
posy := coordy[tipoPieza];
fsi
fsi
faccin
Para probar la funcin trabajaremos con el proyecto SCL_004, en el cul hemos insertado la
fuente SCL buscarPosicionesCarga. La traduccin de esta funcin a SCL se muestra a
continuacin.

En primer lugar la declaracin


de constantes, variables y
parmetros.
Observar como la declaracin
incluida en var en el pseudo
cdigo se ha puesto en
VAR_TEMP y como los
parmetros de la accin se
han declarado en VAR_INPUT
para ent, VAR_IN_OUT para
entsal y VAR_OUTPUT para
sal.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 51/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Finalmente el rea de instrucciones queda como sigue:

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 52/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Nos falta como siempre, llamar a la funcin desde por ejemplo el OB1 i probar su
funcionamiento. En este caso, ser necesario tambin crear la correspondiente estructura de
datos en el DB10.
Por pasos, primero declaramos los smbolos necesarios:

A continuacin declaramos en el db10 el array de bits de posicin:

Y para acabar llamamos a la funcin desde el OB1.

Por ltimo cargamos la carpeta bloques en el simulador, previamente abierto y activamos


observar viendo los resultados en los parmetros de salida.
En primer lugar probamos los tres tipos de pieza con el almacn vaco. Los resultados pueden
verse en las siguientes figuras.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 53/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
Para pieza metlica nos da el tipo de pieza correcto y la posicin de la primera pieza en la fila
correspondiente es tambin correcta.

Para pieza naranja los resultados son tambin correctos.

Ahora probaremos con posiciones intermedias.


Para ello insertamos en nuestro proyecto una tabla de datos con los valores de la tabla de
posiciones para poder ocupar posiciones a voluntad.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 54/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
En la situacin mostrada, la primera posicin libre para piezas negras, es la 9, de coordenadas
(250, 580). Esto es exactamente lo que nos da la funcin como respuesta, como se observa en
la figura siguiente:

Para dar definitivamente como buena a la funcin vamos a probarla para la situacin de fila
llena. Para ello modificamos la tabla de posiciones como sigue:

La respuesta de la funcin para este caso es:

La respuesta tambin es la prevista, al darnos filaLlena = 1. Los registros de posicin se ponen


a cero tambin como estaba previsto.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 55/56

Versin: 1.1

Fichero: S7_SCL

Departament dEducaci

SCL
Introduccin a la programacin

Electricitat/Electrnica
3.3.- Determinacin del recalentamiento de un evaporador frigorfico.

Realizado por:
Josep Caigueral i Barnes

IES SEP LA GARROTXA

Fecha: 12/01/2007

Pgina: 56/56

Versin: 1.1

Fichero: S7_SCL

Você também pode gostar