Mostrando entradas con la etiqueta Empezar a programar. Mostrar todas las entradas
Mostrando entradas con la etiqueta Empezar a programar. Mostrar todas las entradas

lunes, 3 de agosto de 2015

Temporizadores del S7 1200, Casos prácticos.


A un que lo explicado con anterioridad en el tema de los temporizadores está en lo cierto, tengo que aclarar unas cuantas cosas. Cuando el dato de tipo “time” es colocado de manera directa en la entrada PT del temporizador este arrancara de forma inmediata una vez activada la entrada IN en caso de ser el temporizador del tipo TON este arranca y una vez trascurrido el tiempo que marca PT la salida Q pasa a nivel alto habiendo hecho correctamente su función.



Pues bien, esto mismo ocurre si PT recibe el dato de una variable tipo marca del autómata.
La cuestión cambia y bastante, cuando la variable es de una función FC o FB y el temporizador esta en la OB es decir el dato de tiempo de PT nos viene de una función. Aquí tendremos que actuar de otra manera por supuesto que tendremos que arrastrar la función del temporizador que queramos usar hasta su segmento en OB y ademas la instrucción de arranque correspondiente al tipo que usemos. Una vez la función de temporizador este en su sitio y la instrucción de arranque en el suyo, la forma de hacer que el temporizador funcione es la siguiente para los tipos TON y TOF.

  1. Tenemos que arrancar el temporizador con la instrucción -(TON)- o -(TOF)- ,esta acción no disparara el temporizador.
  2. Pondremos la entrada IN de la función del temporizador a nivel alto si es un temporizador TON provocara que este realice su función de activación de la salida Q trascurrido el tiempo de PT. Si es un temporizador TOF después de arrancar debemos de poner a nivel alto la entrada IN y cuando la pongamos a nivel bajo se activara el temporizador, pasado el tiempo PT se desactivara la salida Q.
Hay que advertir que no podemos activar a la vez la o con la misma señal la entrada IN y el arranque por que si no el temporizador se bloquea y no realiza su función.


Con el temporizador TP ocurre algo bien distinto a lo narrado con anterioridad, pues este si que arrancara una vez hallamos activado la instrucción de arranque de TP sin necesidad de llevar la entrada IN de la función a nivel alto.




El Contacto de temporizador que vemos a la entrada IN del temporizador TP es el de la fotografía anterior y corresponde al temporizador IEC Timer 0 DB 12. Se puso hay para evitar la activación simultanea del arranque y puesta a nivel alto de IN, pero luego se pudo comprobar que no servia de nada puesto que con la llamada de la instrucción de arranque el temporizador TP ya realizaba su función.

viernes, 10 de abril de 2015

Conversión analógica a digital con la CPU del S7 1200

Conversión analógica a digital con S7 1200.

En el S7 1200 tenemos dos entradas analógicas, en la parte superior de la CPU en el conector X11,
estas entradas solo leen valores en tensión de 0 voltios a 10 voltios suficiente para poder realizar algún que otro ejercicio interesante.


El ejercicio que he realizado consiste en leer la entrada analógica 0 y en función de su valor activar o desactivar las cinco salidas a relé que tiene la CPU. Para ello, utilizo un divisor de tensión compuesto por una resistencia de 15Kohm y un potenciómetro de 10Kohm, la salida intermedia del potenciómetro es la que va conectada a la entrada analógica de la CPU y en función de la posición del potenciómetro, tendremos un valor u otro de tensión a la entrada analógica 0.




La programación la he realizado nuevamente en SCL (para ir practicando), y utilizo las instrucciones NORM_X y SCALE_X, primero tenemos que normalizar el valor de la entrada entre dos valores uno MIN y otro MAX existente entre 0 y 27648. El valor de entrada tiene que ser del tipo real y la función nos devuelve otro valor normalizado entre el mínimo y máximo del tipo real, también a pesar de lo que dice el manual a mi no me ha dejado cambiar de tipo de variable por lo menos en programación SCL.

Una vez ya tenemos el valor de la entrada normalizado procedemos a escalarlo en este caso de 0 a 6
es decir los 27648 valores posibles estarán divididos en 6 partes. SCALE_X funciona de la misma forma que NORM_X tiene una entrada de valor y otras dos para el máximo y el mínimo de la escala
(ver fotografía de panel).

El programa sigue con una instrucción CASE, en la que, en función del valor devuelto por SCALE, activaremos unas salidas u otras yendo de estar todas desconectadas a conectadas en en función de como movamos el potenciómetro.


Descargar el programa en el siguiente enlace:
Ejercicio de de conversión analógica a digital

Descargar el programa en el siguiente enlace:
El voltimetro

Fotografía: El voltímetro

lunes, 9 de marzo de 2015

Empezamos a programar

Empecemos a programar.

El programa o la base de nuestro programa, se escribe en el bloque de organización (OB1), este programa se escribe en los segmentos del bloque, en lenguaje que hayamos elegido para ese segmento.
Podemos crear nuestro programa en este bloque, pero si este es extenso, lo mejor es estructurarlo en FBs o Fcs para una mayor y mejor compresión del programa. También podemos crear otros OBs para la atención de eventos, alarmas y errores de nuestro bloque principal.

Que son las FB y FC.

Son otros bloques lógicos, que son llamados por otros FB,FC o OB a modo de subrutinas, que cuando se ejecutan realizan las tareas asignadas y a su termino devuelven el control al bloque que realizo la llamada.

Como funciona una FB.

El bloque que efectúa la llamada transfiere parámetros al FB e identifica un bloque de datos determinado (DB) que almacena los datos de la llamada o instancia específica de este FB. La modificación del DB instancia permite a un FB genérico controlar el funcionamiento de un conjunto de dispositivos.

Como funciona una FC.

Una función (FC) es una subrutina que se ejecuta cuando se llama desde otro bloque lógico (OB, FB o FC). La FC no tiene un DB instancia asociado. El bloque que efectúa la llamada transfiere los parámetros a la FC. Los valores de salida de la FC deben escribirse en una dirección de la memoria o en un DB global.
Como puedes ver, este tipo de función es el mas parecido a las subrutinas, que se tratan con el S7 200.

instrucciones básicas.


Vamos a ver unas cuantas instrucciones básicas y mas utilizadas a la hora de crear un programa. Sin lugar a duda la mas utilizada va ser el contacto abierto o cerrado, que podremos arrastrar desde la carpeta, “operaciones lógicas de bits” en la pestaña de herramientas, o bien si tenemos montada la interfaz de bloque, desde allí, lo podemos arrastrar asta el segmento deseado y empezar a crear la lógica de ese segmento.

Los Temporizadores

En toda función, (OB,FB,FC) hay que declarar el temporilizador que vamos a usar, para ello ir al simbolo de cuadro vacio en la interfaz de bloque y arrastrar asta el segmento que nos interese, en el simbolo de cuadro vacio pulsar sobre "??" y en el menú contextual elegir función que va a realizar (TON, TOF, ...) pero, elegir el símbolo que es parecido a un enchufe de color azul y que no es otra cosa que un bloque de organización. Después se abre una ventana para dar nombre y orden a la base de datos, ya tenemos el bloque del temporizador, ahora nos queda dar valor a “PT” que lo debemos hacer como una variable de tipo TIME, constante o indirectamente y en el que vendrá reflejado el tiempo en milisegundos que nuestro temporizador estará poniendo o retrasando la puesta a nivel alto de la salida “Q”, en la que conectaremos lo que queramos activar.



La salida ET, no es otra cosa que el tiempo que nos queda de la temporalización, el dato de salida de la variable es de tipo TIME.

Las bases de datos de las temporizaciones, las podemos ver en la ventana del árbol de proyecto, iremos al menú del proyecto, opción, Bloques de programa > bloques del sistema > recursos del programa > y aparecerá un listado con las bases de datos que estamos utilizando.

Otra manera de colocar una temporización en un segmento de la ventana de programación es,
ir a la pestaña de “instrucciones” abrir carpeta de “temporizadores” y elegir el bloque temporizador (recuerda el que tiene forma de enchufe y es de color azul) que nos interesa y arrastrar asta el segmento.

Arrancar una temporización

Una vez ya hemos declarado la temporización, la podemos arrancar desde la misma declaración poniendo a uno la entrada “IN”. Pero si en otra parte del programa nos hace falta volver a arrancar la temporización no hace falta que la volvamos a declarar , simplemente iremos de nuevo a la pestaña instrucciones elegiremos la carpeta temporizadores y arrastraremos alguno de los símbolos que están poniendo entre paréntesis el tipo de temporalización que deseamos arrancar y lo arrastraremos al segmento que nos interese, una vez allí, lo configuraremos haciendo referencia al temporizador que deseamos arrancar.

descarga el programa en este enlace:
Temporizadores

Contadores básicos en el S7 1200

Al igual que ocurre con las temporizaciónes los contadores son también un “objeto” por lo tanto también tienen una base de datos. El proceso para crear el contador es idéntico al del temporizador, los dos caminos explicados para colocar una temprización en el segmento, es hacer lo mismo para el contador.
La diferencia entre el contador y el temporizador a parte de su función propia, es a la hora de activar su tarea o marcha, mientras en la temporización tenemos que declarar el objeto y que este mismo ya realizara su trabajo, pero, si posteriormente queremos volver a utilizar esa misma temporización debemos utilizar una instrucción propia de arranque para volver a usarla. El contador no tiene instrucciones de arranque a parte del propio objeto por lo tanto debemos de usar un objeto contador cada vez que nos haga falta.

Puesta en marcha de un contador

Una vez colocado el contador en el segmento deseado debemos de conectarlo.


  • CU es la entrada que nos registra los pulsos que va a contar el contador.
  • R es el borrado del contador “reset”.
  • PV es el valor máximo que deseamos que cuente y que provocara la activación de la salida Q, el tipo de dato siempre entero (int o Dint).
  • Q como ya e dicho es una salida de tipo binario que pasa a estado alto una vez se a alcanzado o superado el valor de PV.
  • CV es el dato que nos indica cuanto nos falta para llegar a el valor tope indicado en PV.


Los dos tipos de contadores que nos quedan son el, descontador y contador-descontador. El descontador es lo mismo que el contador, pero con la diferencia que PV tiene el valor a partir del cual empezara a descontar y desaparece R y tenemos LD, que lo que hace es volver a cargar el valor de PV he iniciar de nuevo el descontaje.
El contador-decontador no es otra cosa que un contador reversible es decir la suma de los dos anteriores si los pulsos los recibe la entrada CU el contador cuenta y una vez alcanzado el valor de PV activa QU. Si los pulsos los recibe CD descuenta y cuando llega a cero activa la salida QD.

Descarga el programa desde este enlace:
Contador


Crear una Función FC

Crear un FC es sencillo, tenemos que ir a la ventana del árbol de proyecto, pulsar dos veces seguidas sobre la opción de menú “Agregar nuevo bloque”, se nos abre una ventana nueva donde tenemos que elegir, bloque, función o DB, evidentemente tenemos que elegir función FC, posteriormente tenemos que dar nombre a la función, numerar y aceptar. Dicha función nos aparecerá en el árbol de proyecto y si queremos trabajar dentro de ella solo tenemos que pulsar dos veces seguidas sobre la misma y en la ventana, interfaz de bloque nos aparece el primer segmento de la función listo para ser escrito.

Para realizar la llamada de la función desde OB, tenemos que proceder de la siguiente forma , nos dirigiremos nuevamente al árbol de proyecto situaremos el cursor sobre el bloque FC 1 y lo arrastraremos asta el segmento que nos interesa de la ventana de interfaz de bloque y soltaremos el cursor. Si la llamada va a ser condicionada evidentemente la lógica programada tendrá que ir delante del bloque FC1.

Como interactua FC con OB

Lo puede hacer de dos maneras diferentes usando las marcas de memoria o mediante una base de datos global.

Mediante las marcas lo que hace FC cuando se ejecuta es leer las que le hacen falta para su ejecución y vuelca el resultado en otra marca de las variables del PLC así de sencillo.

En cuanto a la DB global es que en esta introduciremos todos los datos o variables en la DB, menos, las variables que hagan referencia a entradas y salidas del autómata por que estas no funcionaran.
Lo que la DB hace es de intermediario entre FC y OB, la DB puede ser leída y escrita por otras funciones que harán uso de los datos a su antojo. Otras ventajas de usar DB es que estas se pueden copiar, guardar o enviar fácilmente en otros dispositivos.

Un ejemplo podría ser, un autómata recibe información de unos dispositivos externos que mandan una DB con información conformada entre ambos, esta información es procesada por el autómata y devuelve el resultado al dispositivo solicitante mediante una DB de respuesta. Si esto lo hiciéramos con variables del PLC cada dispositivo tendría que tener sus variables reservadas en el PLC con el consiguiente ocupación de memoria que ello tendría al igual que cada dispositivo le tocaría tener una FC propia por lo tanto mas consumo de memoria del PLC.

Descarga los programas de los siguientes enlaces:
programa con una FC

FC con DB global

Crear una Función FB

Quisiera poder seguir con el tema de las funciones y ahora le tocaba a las FB, pero, a surgido un problema y es que aunque TIAportal, deja las creemos no podemos programarlas ni en KOP ni FUP solo en SCL, intentarlo vosotros y veréis, que cuando indicáis un lenguaje distinto al SCL, creamos el bloque de FB y después creamos y abrimos la DB no os deja meter ninguna variable en la DB.

Por lo tanto vamos a dejar el tema de las funciones y de la programación en SCL para mas adelante ya que este tema el de la programación en SCL es bastante extenso.