56
Departament d’Educació Electricitat/Electrònica SCL Introducción a la programación Realizado por: Josep Cañigueral i Barnes IES SEP LA GARROTXA Fecha: 12/01/2007 Versión: 1.1 Página: 1/56 Fichero: S7_SCL PLC S7-300 PROGRAMACIÓN ESTRUCTURADA S7-SCL

S7_SCL_v1_0

  • Upload
    bbaboom

  • View
    13

  • Download
    3

Embed Size (px)

DESCRIPTION

Programación estructurada S7.300

Citation preview

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 1/56 Fichero: S7_SCL

    PLC S7-300

    PROGRAMACIN ESTRUCTURADA

    S7-SCL

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 2/56 Fichero: S7_SCL

    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

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 3/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 4/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 5/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 6/56 Fichero: S7_SCL

    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:

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 7/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 8/56 Fichero: S7_SCL

    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:

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 9/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 10/56 Fichero: S7_SCL

    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

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 11/56 Fichero: S7_SCL

    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

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 12/56 Fichero: S7_SCL

    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:

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 13/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 14/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 15/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 16/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 17/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 18/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 19/56 Fichero: S7_SCL

    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;

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 20/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 21/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 22/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 23/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 24/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 25/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 26/56 Fichero: S7_SCL

    Grficamente:

    0 27648 32767

    HI_LIM

    LO_LIM

    VAR_PV

    INPUT

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 27/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 28/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 29/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 30/56 Fichero: S7_SCL

    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.

    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.

    Botn compilar fuente

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 31/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 32/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 33/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 34/56 Fichero: S7_SCL

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 35/56 Fichero: S7_SCL

    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:

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 36/56 Fichero: S7_SCL

    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 Reales La secuencia de operaciones de la funcin ser: 1.- Control de errores en entradas 2.- Escalado de InSensor para obtener h. Con ello practicamos llamadas de funciones desde SCL. 3.- Determinar valores auxiliares. 4.- Determinar Volumen, Peso y %CapacidadTotal Escribimos el cdigo en la fuente VolumenDeposito que ya habamos creado.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 37/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 38/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 39/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 40/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 41/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 42/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 43/56 Fichero: S7_SCL

    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 Nmero de ciclos acumulado en dispositivo o proceso DP_T_ACC Tiempo acumulado de funcionamiento en dispositivo o proceso DP_T_UC Tiempo ltimo ciclo en dispositivo o proceso Salida: DP_DT_IUC Fecha y hora inicio ltimo ciclo en dispositivo o proceso DP_DT_FUC Fecha y hora finalizacin ltimo ciclo en dispositivo o proceso Estticos DP_FUP Flanco de subida para la seal on off del dispositivo o proceso DP_A_FUP Auxiliar para la obtencin del flanco anterior DP_FDOWN Flanco de bajada para la seal on off del dispositivo o proceso DP_A_FDOWN Auxiliar para la obtencin del flanco anterior DT_UMIN 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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 44/56 Fichero: S7_SCL

    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:

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 45/56 Fichero: S7_SCL

    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 flanco de subida 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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 46/56 Fichero: S7_SCL

    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

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 47/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 48/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 49/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 50/56 Fichero: S7_SCL

    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

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 51/56 Fichero: S7_SCL

    {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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 52/56 Fichero: S7_SCL

    Finalmente el rea de instrucciones queda como sigue:

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 53/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 54/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 55/56 Fichero: S7_SCL

    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.

  • Departament dEducaci

    Electricitat/Electrnica

    SCL Introduccin a la programacin

    Realizado por: Josep Caigueral i Barnes

    IES SEP LA GARROTXA

    Fecha: 12/01/2007 Versin: 1.1

    Pgina: 56/56 Fichero: S7_SCL

    3.3.- Determinacin del recalentamiento de un evaporador frigorfico.