Escolar Documentos
Profissional Documentos
Cultura Documentos
SCL
Introduccin a la programacin
Electricitat/Electrnica
PLC S7-300
PROGRAMACIN ESTRUCTURADA
S7-SCL
Realizado por:
Josep Caigueral i Barnes
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.
Realizado por:
Josep Caigueral i Barnes
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
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
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
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:
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
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
Fecha: 12/01/2007
Pgina: 7/56
Versin: 1.1
Fichero: S7_SCL
Departament dEducaci
SCL
Introduccin a la programacin
Electricitat/Electrnica
Realizado por:
Josep Caigueral i Barnes
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
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
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
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.
Realizado por:
Josep Caigueral i Barnes
Fecha: 12/01/2007
Pgina: 12/56
Versin: 1.1
Fichero: S7_SCL
Departament dEducaci
SCL
Introduccin a la programacin
Electricitat/Electrnica
Realizado por:
Josep Caigueral i Barnes
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
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
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.
Realizado por:
Josep Caigueral i Barnes
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
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
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
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:
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
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.
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
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:
Realizado por:
Josep Caigueral i Barnes
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
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
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
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
Realizado por:
Josep Caigueral i Barnes
Fecha: 12/01/2007
Pgina: 28/56
Versin: 1.1
Fichero: S7_SCL
Departament dEducaci
SCL
Introduccin a la programacin
Electricitat/Electrnica
Realizado por:
Josep Caigueral i Barnes
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
Realizado por:
Josep Caigueral i Barnes
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
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
Fecha: 12/01/2007
Pgina: 32/56
Versin: 1.1
Fichero: S7_SCL
Departament dEducaci
SCL
Introduccin a la programacin
Electricitat/Electrnica
Realizado por:
Josep Caigueral i Barnes
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
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
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
Realizado por:
Josep Caigueral i Barnes
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
Fecha: 12/01/2007
Pgina: 37/56
Versin: 1.1
Fichero: S7_SCL
Departament dEducaci
SCL
Introduccin a la programacin
Electricitat/Electrnica
Realizado por:
Josep Caigueral i Barnes
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.
Realizado por:
Josep Caigueral i Barnes
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.
Realizado por:
Josep Caigueral i Barnes
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
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
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
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
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
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.
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
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.
Realizado por:
Josep Caigueral i Barnes
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
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
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.
Realizado por:
Josep Caigueral i Barnes
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
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.
Realizado por:
Josep Caigueral i Barnes
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
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:
Realizado por:
Josep Caigueral i Barnes
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.
Realizado por:
Josep Caigueral i Barnes
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:
Realizado por:
Josep Caigueral i Barnes
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
Fecha: 12/01/2007
Pgina: 56/56
Versin: 1.1
Fichero: S7_SCL