martes, 14 de julio de 2015

Como crear un programa en SCL

Como crear un programa en SCL.
Cosas a tener en cuenta si queremos que nuestro programa no genere fallos de ciclo.

Lo primero que tengo que deciros, es que la ejecución se realiza de forma lineal, linea por linea, es decir y para dejarlo de una manera muy clara, lee el programa en SCL igual que si estuviese escrito en FOP o KOP, no como un programa normal escrito en un lenguaje de programación tipo C+ o VB. Ademas tenemos que tener cuidado con los saltos dentro del programa por que se pueden quedar variables sin cambiar de estado por culpa del salto.

Voy a poneros un ejemplo, imaginaros que tenemos una variable tipo booleana, que llamaremos Var
esta variable si esta a 1 activa una temporización, pero antes de llegar a la linea que la activa tenemos una instrucción IF, que en función del valor de esa variable u otra puede provocar un salto a otra linea del programa sin pasar por la linea que activa la temporización. Que es lo que ocurre? Pues que aunque Var halla cambiado de valor, al haberse producido el salto, en esa linea en concreto donde se activa la temporización Var sigue valiendo 1.

Tened esto en cuenta, por que en otros lenguajes de programación esto no ocurre y si estáis acostumbrados a que sea así puede traeros problemas, a la hora de poner el programa en funcionamiento.

El sistema operativo del autómata realiza una lectura cíclica de nuestro programa ese ciclo se puede controlar su tiempo de duración (mínimo 150ms y máximo 6000ms) esto se hace así para evitar bloqueos del programa si trascurrido el tiempo máximo que le hemos configurado a la CPU el sistema operativo genera una alarma que hace que el sistema operativo busque la OB 80 es la encargada de registrar el fallo que ha realizado el programa y evitar el bloqueo de la CPU pero trascurridos unos pocos ciclos mas si el fallo persiste acaba bloqueándo la CPU.

Os cuento esto por que ciertas instrucciones pueden provocar fallos de ciclo si no son usadas correctamente.

Instrucciones FOR NEXT, WHILE DO, REPEAT-UNTIL.

Estas instrucciones pueden provocar fallos de ciclo y consecuentemente bloqueo de la CPU sino se usan correctamente, que quiere decir esto?
Voy a poneros un ejemplo, ya que en el manual de programación del S7 1200 trae a bastante confusión debido pienso yo a una mala traducción que se ha podido hacer del original.

WHILE (#RiegoDomingo = TRUE)DO
IF (#EHoraCalendario.HOUR >= #IRDomingo AND #EHoraCalendario.HOUR <= (#IRDomingo + #TRDomingo)) THEN #Sector1 := true;#BombaRiego:= true;
ELSIF (#EHoraCalendario.HOUR > (#IRDomingo + #TRDomingo)) THEN #BombaRiego := FALSE; #Sector1 := false;
END_IF;
#VisInicioReg := #IRDomingo; #VisiTiempoReg := #TRDomingo;
EXIT;
END_WHILE;

Aquí os pongo un ejemplo con una instrucción WHILE, fijaros bien donde esta situada la instrucción EXIT. Por que esta situada ahí y para que sirve?.

Si olvidamos de poner la instrucción EXIT lo que ocurrirá es que si la condición de WHILE es cierta se ejecuta de forma permanente esta rutina hasta que salta la alarma de tiempo de ciclo excedido. EXIT lo que hace es que una vez ejecutada la rutina el programa continué su marcha por eso se coloca al final de la rutina.


En las de mas instrucciones hay que hacer lo mismo. 

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

miércoles, 1 de abril de 2015

Poner en hora el reloj del panel

Poner en hora el reloj del panel.

En las practicas realizadas hasta el momento con el reloj, he cogido y he obviado el reloj que sale en la propia plantilla básica del reloj, por desconocimiento de como se ponía en hora y optaba por una presentación propia. Bien pues ahora vamos a usar ese reloj que viene en la plantilla para ello nos iremos a el, árbol de proyecto >> dispositivo HMI-1>> Administración de imágenes>> Plantilla>> plantilla 1. Situarse con el cursor encima del recuadro del reloj, seleccionar pulsando con el botón izquierdo del ratón y se nos remarca la cuadricula ahora pulsar el botón derecho del ratón se nos abre un menú contextual, ir a, “Propiedades”, se nos abre una nueva ventana de configuración, ir al apartado, “General” y deseleccionar “Hora del sistema”, esta hora, es propia del panel y no tiene nada que ver con la del autómata. A si que, la anulamos, ahora pasamos a la linea que tenemos debajo de la anterior casilla de selección y tenemos que elegir la variable de la CPU que contiene el dato de la hora, y ya está hecho, salimos de la ventana de propiedades y cuando conectamos la CPU y el panel veremos a parecer la hora local que tengamos programada.

Para la fecha procederemos del mismos modo siguiendo los pasos anteriores y teniendo en cuenta que ahora es la fecha.

Puede descargar el siguiente programa:
El reloj del panel

lunes, 30 de marzo de 2015

El reloj del Siemens S7 1200

El reloj del Siemens S7 1200.

Con el reloj del autómata podemos hacer bastantes cosas. Lo primero que tenemos que aprender es a ponerlo en hora, para seguir, con diferencias de tiempo, contadores de funcionamiento y cambios de horarios.

Tipos de datos de fecha y hora que manejamos.

Tipo de datoTamañoRangoEjemplos
Time32bits
T#-24d_20h_31m_23s_648ms a
T#24d_20h_31m_23s_647ms
Almacenado como: -2.147.483.648 ms hasta
+2.147.483.647 ms
T#5m_30s
T#1d_2h_15m_30s_45ms
TIME#10d20h30m20s630ms
500h10000ms
10d20h30m20s630ms
Date16bitsD#1990-1-1 a D#2168-12-31
D#2009-12-31
DATE#2009-12-31
2009-12-31
Hora32bitsTOD#0:0:0.0 a TOD#23:59:59.999
TOD#10:20:30.400
TIME_OF_DAY#10:20:30.400
23:10:1
DTL12bits
Mín.: DTL#1970-01-01-00:00:00.0
Máx.: DTL#2554-12-31-23:59:59.999 999 999
DTL#2008-12-16-20:30:20.250
Creo que con esta tabla quedan muchas cosas claras de como utilizar los datos del reloj y sus posibles usos.

Falta añadir, que el tipo de dato DTL solo es posible su utilización a través de la programación en SCL, no es posible su utilización ni en FOB ni KOP. Si queremos poner el reloj en hora mediante un programa este tendrá que estar escrito en SCL, la otra opción es a través de TIAPortal en la configuración de la CPU.


Para terminar y que no decaiga la moral, si queremos trabajar con el reloj en hora local lo tendremos que hacer con la instrucción RD_LOC, que utiliza la información de la zona horaria (GMT+1) para proporcionar la hora correcta de nuestro país. La instrucción RD_SYS proporciona la hora del sistema, esto quiere decir que GMT+0 siempre. Estas instrucciones solo se pueden utilizar en programación SCL.

Leer la hora del reloj.

Para hacer una lectura del reloj podemos usar dos instrucciones RD_SYS y RD_LOC, ya explicado con anterioridad la diferencia entre las dos, ambas funcionan igual salvo el tema de la zona horaria RD_SYS no la usa y RD_LOC si. He hecho un pequeño programa que podéis descargar, esta escrito en SCL y a continuación paso a explicar.


El programa a sido escrito dentro de una FC. La primera linea carga en la variable “Terror” el dato de tipo INT que devuelve la función RD_LOC, este dato es una indicación del funcionamiento del reloj, si su valor es cero quiere decir que los datos presentes a la salida de la función son validos, en dicha salida tendremos un tipo de dato DTL. Posteriormente comprobamos mediante una sentencia IF-THEN que los datos son correctos, si es así activamos la salida binaria de la FC “HoraOK” y la descomposición del tipo de dato DTL en tipos de dato Usint y Time_Of_Day o TOD. en la que las primeras tendremos una salida en la FC para la hora, minuto, día, mes y año, todas por separado y en la segunda el tipo de dato TOD con hora, minuto y segundo todo en una misma salida.
Si la variable “Terror” es distinta del valor “0” es decir se a producido un error en el reloj la salida “HoraOK” vale “0” al igual que el resto de salidas.

Listado de variables.



Fijaros en el detalle HoraDeCPU es una variable de tipo DTL que en realidad es una variable de tipo compuesta.

Enlace de descarga del Programa:
Ejercicio manejo del reloj 1

Nota: en la explicación digo que el programa se ha hecho sobre una FB pero el ejercicio lo he modificado sobre el original y esta hecho sobre una FC.

Pongamos el reloj en hora.

Como he escrito con anterioridad hay dos formas de poner el reloj en hora, una a través de la instrucción WR_SYS que comentare mas a delante, la otra mediante la configuración de la CPU, para ello iremos al, árbol de proyecto>> Dispositivo CPU >> Online y Diagnostico >> Establecer Conexión >> Desplegar Funciones >> Ajustar hora >> Aplicar.

Mediante la función WR_SYS, ajustamos solamente la hora y fecha del sistema, recordad que hora del sistema, no es la hora local; (H. Sistema GMT+0 y H. Local GMT+n).

Al igual que en la lectura del reloj empleamos una variable DTL, para escribir haremos lo mismo. Como ya sabemos el tipo de variable DTL, es una variable compuesta y no es necesario escribir en todo los términos, por ejemplo solo queremos escribir los que hacen referencia a la hora, minuto y segundo e ignorar los de la fecha, esto se puede hacer.

Descargar desde el enlace:
Ejercicio del manejo del reloj 2

miércoles, 25 de marzo de 2015

Conectamos Basic Panel

Conectamos Basic Panel (la Pantalla).

Bien llegamos a lo visual!!! y que sera algo que tendremos en cuenta a la hora de hacer las practicas, el darles una cara mas amable. A partir de aquí intentare que los ejercicios que haga cuenten con una interfaz gráfica.

Lo primero la parte física montar y conectar el panel. El panel que viene en el kit tiene dos tomas, una de alimentación y otra de ethernet.

La alimentación es de 24VCC y una corriente de consumo maxima de 550mA , no es aconsejable aprovechar la salida de alimentación del autómata, por que esta se quedaría muy justa para poder alimentar el panel y que ni decir tiene si la salida de alimentación del autómata tuviera algo mas conectado, (ver Manual del sistema S7 1200, pagina 744, Imax 300mA).

Creo que queda claro, que necesitamos una fuente de alimentación a parte,para poder hacer funcionar el panel de una forma segura, sin quemar nada.

Una vez hechas las advertencias necesarias, vamos a conectar el panel KTP600 (que es el que yo tengo). Conectamos la alimentación correctamente polarizada, si no el panel no funciona, después el cable de red, en un principio al PC con el que programamos y alimentamos el panel.

Una vez arrancado se queda a la espera de trasferencia del archivo que contiene nuestro programa. Pero, como es la primera vez tendremos que hacer otras cosa antes.

Lo primero es cancelar la espera de trasferencia, pulsaremos sobre “cancelar” y pasamos a otra ventana con tres botones de opciones elegimos “control panel”, aparece una nueva ventana con seis iconos, pulsamos sobre “profinet” y nos aparece el panel de configuración “Profinet Settings”. Aquí podemos dejar que se determine automáticamente la dirección IP o hacerlo nosotros de forma manual. Y ahora lo dejo a vuestro gusto, si optáis por el modo manual proceder de la siguiente forma, primero tenemos que estar en “Profinet Settings” en la pestaña “IP Adress” seleccionar “Specify an IP adress”, determinar IP y DNS, poner IP 192.168.02, DNS 255.255.255.0. y ahora os explico el porque, el ordenador tiene fijada es dirección para buscar el panel así dejaremos de modificar mas datos o tener que decir al ordenador en que dirección IP esta el panel. De segundo ir a la pestaña de “Device” dar un nombre al panel, con letras minúsculas, y por ultimo pulsar OK, si nos aparece un icono con un reloj de arena quiere decir que nuestra configuración se está grabando y que todo ha ido bien, si no..... ya sabéis algo hemos hecho mal.

Para terminar con el tema de la configuración de la pantalla recomiendo activar el protector de la misma. Situémonos ahora en “control panel” pulsar sobre el icono “Screensaver Settings” se abre otra ventana donde podemos determinar el tiempo que nuestra panel permanecer encendido después de un ultimo uso, el tiempo está en minutos. Para volver a encender la pantalla después de haberse apagado solo hay que pulsar sobre la misma pantalla.

Programación de la pantalla

Iremos a TIAportal e iniciaremos un nuevo proyecto, configuraremos el autómata como lo hemos hecho asta ahora y luego pasaremos a agregar pantalla y nos aparece el asistente del panel de operador, en mi caso elijo KTP600 Basic Color PN y muy importante elegir versión de Sofware correcta.




Para seguir dar a aceptar.



Ahora se abre el asistente para el panel del operador donde determinamos la conexión con el PLC que nos interesa en el caso de que halla varios. Pasamos a siguiente.



En formato de imagen, determinaremos el color del fondo y quitaremos el encabezado, pasando a la siguiente.



Pantalla de avisos, yo los he quitado todos para hacer las primeras practicas, pasamos a siguiente asta llegar a la pantalla de botones donde los quitaremos todos menos el de encendido y apagado y finalizar.



Entramos ya en la pantalla de programación de TIAportal, como podemos comprobar se nos queda un mensaje de bienvenida en el centro de la representación del panel, este se puede quitar simplemente situando el cursor sobre el y pulsando el botón derecho del ratón, se despliega el menú y elegimos borrar y ya esta quitado.

He hecho un pequeño ejercicio, para mostrar el funcionamiento del panel y el PLC trabajando juntos . De momento no me voy a meter en explicaciones de como crear gráficos para el panel, pero si habéis trabajado con WinCC esto es casi igual. Para los que no colgare unos ejercicios que hice en WinCC para que vayáis conociendo el tema al igual que espero poder crear vídeos de como creo yo los míos en los ejercicios que vaya haciendo.

“La paciencia es la madre de todas las ciencias”

Descárgate el programa del siguiente enlace:
Activar una salida desde el panel

Ah!! se me olvidaba.

Si queremos volver a cargar una nueva imagen en el panel tenemos que proceder como la primera vez, compilar la imagen, grabar y proceder a cargar en el panel. Para ello tenemos que ir al panel físico (el de verdad) y situarnos en la ventana “Loader” y pulsar sobre el botón “Trasfer”, después volver al ordenador y pulsar en “cargar en el dispositivo”. Cuando finalice la carga nos aparecerá la nueva imagen en el panel.

Si, el dispositivo que estamos programando no nos aparece en el árbol de proyecto como HMI_1(KTP600 Basic Color PN). Tenemos que saber que tanto la IP como el nombre del dispositivo cambian, por lo tanto la comunicación entre TIAportal y el panel no sera posible, para que sea posible tendremos que cambiar la IP y el nombre en el propio panel.

Para saber cual es la nueva IP y el nombre iremos al árbol de proyecto >> HMI_1(KTP600 Basic Color PN) >> Configuración de dispositivo >> propiedades >> General >> Interfaz PROFINET.

Hay veremos los datos de la IP y el nombre que tendremos que poner en el panel.

sábado, 14 de marzo de 2015

Como conectar el S7 1200 al ordenador

Como conectar el S7 1200 al ordenador

Mis primeros pasos con TIA portal y el S7 1200.

instalación de TIA portal.
Lo primero, instalar el programa, tardara casi una hora, cuando ya esta todo prácticamente instalado nos pide que le conectemos el pendrive para que cargue la licencia del programa y se termina de instalar, ojo con el Windows 8 la carga del programa se puede quedar bloqueada a mi me ha pasado.
La mejor solución desistalar el programa y volverlo a instalar.

La primera ejecución del programa.
Lo primero que tenemos que hacer es elegir la CPU con la que vamos a trabajar. Para ello, tenemos que seguir los siguientes pasos.
  1. En el portal elegir la opción crear un proyecto, nombre, ubicación donde se guarda y comentarios.
  2. Configurar un dispositivo, elegir la opción agregar dispositivo, se despliega un menú con todas las CPUs que podemos elegir, seleccionar la que interese, mas el numero de serie y agregar.{si tienes problemas}
  3. En la ventana seleccionamos dispositivo PLC 1, automáticamente dejamos el portal y se nos abre una ventana el la que aparecerá el modelo de CPU elegida, seleccionamos con un “clic” de ratón sobre la CPU, con la tecla de la izquierda y luego con la tecla derecha del ratón se nos abre un nuevo menú donde elegiremos “propiedades” aquí es donde le damos un nombre a la CPU, su IP y varios datos mas. Si no queremos hacer nada especial y como principiantes que somos dejarlo como esta.
  4. Compilar el harware. Volvemos sobre la imagen de la CPU seleccionamos nuevamente y con el la tecla de la derecha del ratón abrimos de nuevo el menú elegir “compilar >harware y Sofware” se nos abre una ventana el la que veremos el proceso de compilación si todo es correcto las marcas serán todas de color azul, rojas o de otro color si hay problemas, algo.
  5. Conectaremos la CPU a la linea eléctrica para alimentarla y el cable de ETHERNET entre la CPU y el ordenador, una vez veamos que la CPU funciona, pasaremos a seleccionar la CPU sacar el menú y elegir “cargar en dispositivo > configuración del harware”, se abre otra ventana “Carga avanzada > Tipo interfaz >opción PN/IE, pasar a interfaz PG/PC > de todos los puertos de comunicación que aparecen elige la tarjeta red de tu PC que tienes conectada la CPU y si todo va bien nos deja > Cargar > nos pide asignar una IP al ordenador > si y en la siguiente ventana te aparece > “aceptar”, pulsar y se nos carga la configuración en la CPU ya podemos pasar a programar.
Empezar a crear un programa.
Ir a árbol de proyecto.
  1. Buscar “Variables PLC” y nos mostrara una tabla donde crearemos todas las variables que creamos necesarias para nuestro proyecto.
  2. Elegir lenguaje de programación. En el árbol de proyecto seleccionar “main OB1”> y con la tecla derecha del ratón volver a seleccionar, se despliega un menú, seleccionar “propiedades>General>lenguaje> elegir KOP o FUP > y “aceptar”.


Si tienes un problema 1.


Si no te deja elegir la CPU o mejor dicho agregarla, consulta la ayuda del programa en el apartado, dispositivos y redes > catalogo del hardware, leyendo la ayuda daremos con la solución, este problema solo pasa la primera vez que se usa el programa.

Otra forma de conectar el PLC a PG/PC.

Otra forma de conseguir que el PLC  se comunique con nuestro PG/PC es del siguiente modo. En el arbol de proyecto de TIAportal ir a Accesos Online, allí buscar  la tarjeta controladora de red en la que nos hallamos conectado al PLC, una vez localizada, hacemos clik sobre la flecha previa al nombre de la tarjeta y se despliega el contenido de la red con todo lo que tengamos ahí conectado. 
Si no es así  aparecerá "Actualizar dispositivos accesibles", hacer doble click y ahora si aparecerán todos los dispositivos de la red.

Antes de seguir me gustaría decir que yo la tarjeta de red del ordenador prefiero tenerla con una IP fija, para así tener claro cual es cada dispositivo.

Para los que no estén  familiarizados con el tema de redes TCP/IP, quiero recordar que cada dispositivo tiene su IP y que estos deben de estar dentro de una mis red TCP/IP.

Ejemplo de IP:

Estas dos IP son de dos dispositivos de una misma red.

Dispositivo 1 IP: 192.168.2.10
Dispositivo 2 IP: 192.168.2.11

Estas dos IP son de dos dispositivos de distinta red.

Dispositivo 1 IP: 192.168.0.10
Dispositivo 2 IP: 192.168.2.11

Aunque se podrían unir manipulando la mascara de red pero eso ahora no toca.

Volviendo a la actualización de dispositivos accesibles, nos aparecerán tanto los que estén físicamente conectados a nuestra red tanto si la IP es la correcta para la mascara de red o no.

Que hacer si las IPs que aparecen no son las apropiadas para nuestra red?. Aquí tratare sobre los PLCs que tengamos conectados a la red, de los otros dispositivos que nos aparezcan cada uno puede tener una forma distinta de cambiar las IPs como son las pantallas HMI.

En los PLCs, delante de cada PLC nos aparece una flecha pulsamos sobre esta y nos sale la opción "Online y diagnostico" hacemos doble click y se abre una ventana. En esta ventana si nos fijamos en su lado izquierdo hay un menú desplegable, iremos a funciones, donde podremos cambiar la dirección IP de nuestro PLC.

Primero es conveniente comprobar que reconoce la MAC del PLC coincide con la de la ventana, si no es así, pulsar sobre "Dispositivos Accesibles " si la MAC del dispositivo coincide con la de la ventana podemos pasar a cambiar la IP del PLC, por la que nos interese. Para terminar pulsar sobre "Asignar IP", la dirección IP sera asignada al PLC.

Una vez asignada la nueva IP, toca cambiar la IP del Proyecto que cargaremos en el PLC. Para ello iremos a el árbol del menú de proyecto y desplegamos el menú de el PLC  elegido para nuestro proyecto y que tiene que coincidir con el PLC conectado a la red en tipo, modelo y versión, para una conexión efectiva.

Desplegado el menú del PLC del proyecto, iremos a "Configuración de dispositivos" haciendo doble click sobre el, se abre una ventana donde aparece la imagen  del PLC, situando el cursor sobre esta imagen hacer click con el botón derecho. Aparece un menú, ir a a la opción "Propiedades" emergerá una ventana nueva, en esta buscar la opción del menú de la izquierda "Direcciones Ethernen"  a la derecha aparece la dirección IP del proyecto que debe de coincidir con con la IP que hemos asignado anteriormente en la configuración de red. Si no es así deberemos de modificar para que las dos sean iguales.

Todo este proceso lo tenemos que hacer sin haber establecido conexión con el PLC. El estableciento de conexión al que me refiero es el que realizamos a la hora de pasar el programa al PLC y no a la Conexión física que si que tendrá que estar hecha como es evidente.   


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.