Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Introducción
TIA Portal es el actual software de programación de los PLC de Siemens, permite programar todos los
modelos posteriores al año 2007 (se excluye la serie S7-200 y los equipos anteriores). En el caso de la serie
S7-300 hay que tener en cuenta:
Los proyectos de Step 7 pueden importarse en TIA Portal (si es un PLC anterior a 2007 puede importarse
sin incluir la configuración HW).
Desde el menú ‘Proyecto > Migrar proyecto’ primero seleccionaremos la ruta de origen del proyecto en
Step7 y la ruta de destino con la que se guardará en TIA Portal y después pulsaremos en ‘Migrar’.
La serie S7-300 sólo está disponible en la versión PRO de TIA Portal. En un proyecto nuevo seleccionamos
el equipo y la versión desde el desplegable para añadirlo al mismo y poder configurarlo. En nuestro caso
trabajaremos con un 314C-2DP (6ES7 314-6CG03-0AB0) con la versión de FW 2.6.
Estos PLC son modulares, aunque la serie C es una gama compacta que integra E/S digitales y analógicas
junto con la CPU. En todo caso, tendremos que incluir los módulos adicionales que pudieran estar
conectados al dispositivo, (en este caso una unidad de 8 DO con referencia 322-1BF01-0AA0), podemos
bien arrastrarla o hacer doble clic con lo que se situará en el primer hueco disponible en el bastidor.
Accediendo a la vista general del dispositivo veremos las E/S y las direcciones por defecto del PLC.
Estos valores pueden ser modificados desde las propiedades del dispositivo, aunque suele ser aconsejable
dejar los valores por defecto. Se comentan sólo los más significativos:
El S7-300 sólo permite un OB de ejecución cíclica, el OB1. Tendremos disponibles algunos OB de sistema,
dependiendo del modelo de PLC y además, hasta 2048 bloques FC, 2048 bloques FB y 512 bloques de
datos DB.
Instrucciones
4. Programación básica
La programación de los S7-300 está integrada en TIA Portal, siendo el programa recomendado
actualmente, ya que el programa tradicional Step 7 no se actualiza desde hace varios años.
Las diferencias fundamentales están en que mientras que en Step 7 las direcciones son absolutas, en TIA
Portal la programación es simbólica. Cada vez que utilizamos una dirección de memoria se creará de forma
automática una etiqueta (tag) asociada, que se añade a la tabla de símbolos y se utilizará como referencia
en la programación.
Por lo demás, la programación es perfectamente asimilable a la que se realiza con las anteriores versiones
de Step 7.
Temporizadores IEC
Contadores IEC
Usando estas funciones tendremos que llevarán asociadas siempre un bloque de datos DB asociado, que
contiene sus parámetros y áreas de memoria. Al insertarlos en una línea de programa la DB se creará de
forma automática.
Definimos las variables en el bloque y las llamamos al crear el segmento de programa. Vemos que al llamar
a #KM en el enclavamiento se pone en amarillo, debido a que la hemos definido como variable de salida
y la estamos leyendo. Podríamos haberla definido como variable de entrada y salida en vez de sólo de
salida.
Al insertar ahora la función, podremos asignar los valores de las variables de E/S y utilizarla varias veces
en el programa, con valores diferentes.
Un bloque de función también se puede llamar varias veces en diferentes puntos de un programa. Esto
facilita la programación de tareas complejas que se repiten con frecuencia. Para ejecutarse, deben ser
llamados desde un bloque que ejecución cíclica. Con el S7-300 pueden programarse en 5 lenguajes de
programación KOP, FUP, AWL, SCL y GRAPH.
Al insertar una variable de este tipo, automáticamente se crean los datos asociados a la estructura de
datos de la variable. Una vez creados los datos y la estructura del programa asociando las variables,
tendremos después que agregar el bloque en el OB1.
Al insertar la FB se creará la DB de instancia asociada a la misma y en caso de tener variables de E/S, como
en este ejemplo, completarlas con las direcciones.
• Bloques de datos globales: Los bloques de datos globales, pueden ser utilizados por todos los
módulos del programa. Los FB, FC y OB pueden leer o escribir datos en los DB globales. Para grabar
o leer datos, antes hay que abrir el módulo con “OPN DB”.
• Bloques de datos de instancia: Un DB de instancia, está asociado a un Bloque de Función (FB)
especifico. Los datos almacenados en el DB de instancia solo pueden ser leídos o escritos por el
bloque asociado a él.
Un DB de instancia no necesita abrirse con ninguna instrucción, se abre se lee y se escribe en él de forma
automática. Al empezar a leer el bloque de función (FB), se carga del DB una copia de las variables locales
en el bloque de función, se ejecuta el bloque y cuando acaba, deposita el valor actual de las variables
locales en el DB de instancia.
Para guardar un dato, tenemos que poner nombre a la variable, definir el formato en el que lo queremos,
y opcionalmente definir un valor inicial.
Una vez definidas las variables a almacenar y también después de cualquier cambio en la DB, deberemos
compilar el bloque para que se establezcan las direcciones dentro del mismo, lo que aparece en la
columna OFFSET, por ejemplo, en la imagen veremos que la variable Hora_inicio está a partir del byte
18.0.
Además, los bloques de datos nos permiten establecer un valor inicial, en la columna Valor de arranque,
que será con el que se inicia el variable en el arranque del PLC. También podremos establecer si las
variables son remanentes y sin accesibles desde un HMI.
Así nos podremos referir a esa variable directamente por su dirección en la DB. Suponiendo que el número
de DB fuese DB1, la dirección sería por tanto DB1.DBD18 al tratarse de una variable tipo DInt. En TIA
Portal nos mostrará además el nombre simbólico asociado: “Datos_Reloj_RTC”.Hora_inicio.
Como vemos en el ejemplo anterior, el día de la semana está incluido en los 4 últimos bits del byte 8, lo
que complica bastante su interpretación. Para poder extraerlo y operar con él podemos usar la función
T_CONV, que permite extraer la fecha, la hora o el día de la semana de la variable.
El RTC está por defecto en una variable, tanto en el OB1 como en el OB35. Si se requiere gran precisión
en el uso del reloj, es conveniente usar la variable del OB35 ya que es llamada a intervalo de tiempos
regulares, mientras que en otros casos puede haber ligeros retrasos (del orden de milisegundos),
dependiendo del tiempo de ciclo del programa.
Para aplicaciones de reloj como un programador semanal, no es necesaria mucha precisión, por lo que
llamaremos el RTC desde una función (FC) y la depositaremos en una variable de un bloque de datos DB
global, de forma que podamos acceder desde cualquier bloque del programa.
Para este ejemplo vamos a crear una función en el OB10 que incremente una unidad un contador cada
minuto, para lo que activamos la OB10 y la configuramos para que sea llamada cada minuto. Hay que
tener en cuenta que el programa de la OB10 sólo se ejecuta un ciclo de scan cada vez que es llamada, por
lo que sólo se incrementa una unidad en cada llamada (cada minuto) y lo cargaremos en el PLC o en el
simulador.
Se suele utilizar la OB35 para las llamadas a lecturas analógicas, regulación PID, y otros procesos que
requieran un tratamiento uniforme en el tiempo, e independiente del tiempo de ciclo del programa.
Nuevamente, vamos a poner en el bloque un pequeño programa que incremente en una unidad el valor
de un contador. Al igual que el resto de OB de alarma, cada vez que son llamados sólo se ejecutan un
único ciclo. Como en este ejemplo el OB35 es llamado cada 6 segundos, en 1 minuto se incrementará en
10 unidades.
El OB35 es interesante porque integra una variable local del RTC que se puede utilizar para llamadas al
reloj a intervalos fijos.
FC con las funciones de control del RTC DB con los datos del RTC
En la DB crearemos una serie de variables en las que depositar los datos del reloj, de esta forma se puede
acceder desde cualquier elemento de programa. Las variables a utilizar, junto con el tipo de dato que
utilizarán, se muestran en la imagen siguiente, adicionalmente se pueden crear otras variables.
Una vez creada la DB y las variables, es aconsejable Compilar para que los datos de la DB puedan ser
ordenados y accedidos de forma correcta desde el programa.
Dentro de la FC localizaremos las instrucciones de Fecha y hora dentro del apartado ‘Avanzadas’.
Primeramente, incluimos RD_SYS_T y la depositamos en la variable ‘Reloj_RTC’ de la DB.
Una vez tenemos los datos del reloj, que recordamos ocupan 8 byte, podemos extraer aquellos que nos
interesan para poder trabajar más cómodamente. Con la instrucción T_CONV extraemos y convertimos
diferentes datos del reloj.
Como entrada tendremos la variable con el RTC de la DB, en formato DT, mientras que en la salida
podemos seleccionar entre 3 opciones:
Utilizaremos 3 veces la instrucción y depositaremos los datos en las variables correspondientes de la DB.
Si cargamos el programa y la configuración en el PLC o el simulador, podremos ver los datos del reloj.
Accediendo a la DB y activando el botón de observación, veremos los datos. En este ejemplo nos muestra
que es la fecha 02/10/2017 y la hora 00:33:23.979. Además, como hemos extraído también el día de la
semana, vemos que ese día es un lunes (valor 2).
Con estas variables definidas es posible utilizarlas de forma directa para que se muestren en un HMI o en
un Scada.
Para utilizar el reloj en programa, disponemos de una serie de instrucciones que nos permiten operar con
las fechas. Un problema es que debemos trabajar con el dato completo en formato DT, lo que resulta
bastante farragoso al ser de 12 byte.
Finalmente tendremos otras tres instrucciones T_ADD, T_SUB y T_DIFF, con el que añadir, restar o
calcular la diferencia entre dos datos DT.
Con este conjunto de operaciones podremos trabajar y comparar fechas y horas, usando el formato DT,
lo que resulta algo farragoso.
En algunos casos nos interesa poder operar de forma más sencilla, simplemente comparar dos horas de
inicio o final en un día de la semana concreto, sin necesidad de tener que trabajar con el dato completo.
Con el S7-300 no hay una comparación directa de horas, a diferencia de los S7-1200/1500. Para hacerlo
podemos hacer una comparación implícita entre la hora incluida en el DT y un valor en doble palabra en
BCD (hexadecimal).
El DT tiene 8 byte, estando la hora a partir del byte 3, con lo que lo podemos obtener el valor de la hora
con una doble palabra a partir de ese byte, incluyendo hh:mm:ss.ms. Si hemos depositado el DT en el
primer byte de la DB, tendremos la hora en el byte 3, esto es DB1.DBD3.
El programa nos lo pondrá en amarillo indicando que no hay una variable definida con ese dato, pero
funcionará de forma correcta. En la imagen podemos ver que la hora del PLC es 01:42:53.37, por lo que
la salida Q124.0 está desactivada ya que la comparación la hacemos a partir de las 01:44:00.00. Una vez
superada esa hora (en la segunda imagen son las 01:45:31.14), se activará la salida Q124.0.
Vamos a hacer un ejemplo en que se active una salida en un periodo concreto de tiempo y unos días de
la semana en particular. Supondremos que la hora de inicio y de finalización puede modificarse, desde un
HMI por ejemplo, por lo que las llevaremos a unas variables, bien del área de marcas o de la DB.
Creamos dos variables en la DB en la que poner las horas de inicio y finalización. Además, las variables
creadas así permiten poner un valor ‘por defecto’, de modo que no es preciso cargarlo y también
permitirán modificarlo, desde un HMI, por ejemplo. En este ejemplo, pondremos la hora de inicio a las
07:30:00.00 y la hora de finalización a las 22:15:00.00, para lo que escribimos el valor correspondiente en
hexadecimal (precedido de #16), sabiendo que será interpretado en BCD.
Usando el valor de la variable ‘Diasemana’ podemos controlar qué días se activará la salida, teniendo en
cuenta que su valor irá de 1 (domingo) a 7 (sábado), en este caso queremos que la salida se active entre
semana (de lunes a viernes). En la imagen el día de la semana es miércoles (4) y son las 22:13:50.83, por
lo que la salida está activa.
Para el control del contador tenemos el parámetro MODE, que puede tener 7 funciones según el valor:
En el resto de parámetros tendremos el resultado de operación, por si hubiera algún error (RET_VAL), el
estado del contador (CQ), que es un bit activo cuando lo está el contador y finalmente el valor en horas
que haya estado activado (CV). Para iniciar el contador, podemos usar el OB100, cargando los parámetros
en el inicio del PLC.
Existen dos parámetros que determinan una entrada o una salida analógica:
• El tipo de sonda (en el caso de entradas), o el tipo de actuador (en el caso de salidas), a conectar
(4-20 mA, 0-10 V, etc...).
• La resolución a alcanzar en la lectura o escritura. A mayor resolución, mayor exactitud de lectura
y menor error entre el valor real y el almacenado en el PLC. Por contra, también el tiempo de
conversión A/D es mayor y por lo tanto las variaciones tardan más en reflejarse en el PLC.
En la tabla se reproducen los valores en función de la resolución de la tarjeta. Al ser de 11 bits tendremos
que las medidas se irán incrementando en valores de 16 unidades (10 hex en hexadecimal). Esto es, los
32768 valores que admite el canal irán ‘saltando’ de 16 en 16 (total de 2048 valores posibles).
Sin embargo, como puede haber tarjetas con rangos bipolares (+/-), se utiliza el bit de mayor peso para el
signo (S), por lo que los valores efectivos serían de -32768 a +32767. En el caso de señales unipolares (sólo
valores positivos), los datos negativos son ignorados.
Además, parte de ese rango se reserva para un margen de saturación y desborde del valor de la entrada
o salida. En la práctica los valores nominales van de -27648 a + 27648.
La más utilizada en la industria es 0-10V. El Simatic S7 300 posee el rango +/-10V. El inconveniente de este
tipo de lectura es que, al ser una tensión, las distancias sin atenuación de la señal debido a caídas de
tensión en el cable son relativamente cortas, por lo que la sonda debe estar cerca del cuadro eléctrico
donde se encuentre el módulo analógico.
Dentro de las medidas de intensidad se suelen utilizar principalmente dos tipos: 0-20 mA. y 4-20 mA. Las
medidas por intensidad es el más utilizado en la lectura analógica, ya que permite grandes distancias al
ser la lectura por corriente, y a la vez es fácil reconocer la rotura del hilo, ya que por debajo de 4 mA indica
el mal funcionamiento del sensor.
Por defecto las direcciones están a partir del byte 752, tanto en entradas como en salidas, con un tamaño
de palabra cada una de ellas (W). Al ser áreas de memoria de periferia, se deberán identificar bien con la
P delante de la dirección o bien con :P. Así, la primera entrada analógica será la PIW752 y la primera salida
la PQW752.
Vamos a configurar la primera entrada y salida en modo tensión de 0 a 10V, haremos que se refleje el
valor de la entrada en la salida y que cuando se superen los 7000 puntos (aproximadamente 2,53V), se
active una salida.
La función SCALE sirve para escalar el valor de una entrada analógica entre
dos valores (máximo y mínimo). También podríamos escalar cualquier otro
registro que no sea una entrada analógica. El resultado será una doble
palabra en REAL.
En ambas funciones hay un parámetro de bit, BIPOLAR que permite indicar si los valores tienen valores
negativos (-10V/+10V, -20mA/+20mA) o sólo valores positivos, en este último caso, el valor de ese bit
tendrá que ser OFF.
En este ejemplo escalamos el valor de la entrada analógica para que represente, por ejemplo, una
temperatura entre -50 ºC y 250 ºC y lo depositamos en el MD84. Después lo desescalamos con una escala
distinta y lo llevamos a la salida analógica.
Para hacer un escalado o desescalado inverso, bastará con intercambiar los límites superior e inferior.
Esto no es posible en el resto de PLCs de Siemens de las series 1200/1500, en esos modelos en los límites
de escalado el límite superior siempre debe ser mayor que el límite inferior.
Es posible disparar una alarma de proceso con determinados eventos. La alarma de proceso permite
reaccionar a los eventos inmediatamente en el programa de usuario, interrumpiendo la ejecución cíclica
del OB1.
Procedimiento
1. Habilite la alarma de proceso del módulo en la pantalla de parametrización "Parámetros
básicos". (Selección de alarmas: Proceso o diagnóstico/proceso)
2. Ajuste cada uno de los eventos que desea que disparen una alarma de proceso en las
pantallas de parametrización correspondientes al módulo.
3. Instale el OB de alarma de proceso (OB 40) en su programa de usuario.
Cuando se activa el bit correspondiente a una alarma de proceso, la CPU accede al OB 40 en el programa
de usuario de forma inmediata y ejecuta el programa durante un ciclo de scan.
La activación de una alarma de proceso sin que se encuentre cargado el OB correspondiente provoca que
la CPU pase a STOP.
La tabla siguiente describe las variables temporales (TEMP) de un OB de alarma de proceso. Como
nombres de variables se han elegido los nombres por defecto del OB 40.
Las alarmas de proceso NO pueden simularse, han de probarse con el PLC real.
Vamos a activar las alarmas de dos entradas para que realicen acciones diferentes. Con la E124.0 haremos
que desde el OB40 se active la salida A124.0 y con la E124.7 se active la A125.7. Hacemos la configuración
en el HW del PLC y se lo cargamos:
Tendremos entonces que según el bit que provoque el disparo del OB40 el valor en binario y su traducción
en hexadecimal será diferente. Cuando dispara la E124.0 la cifra será 00000001 y cuando dispare la E125.7
sería 00008000
Crearemos la OB40 y haremos un programa en la que evaluará el módulo que ha provocado el disparo y
la entrada que actúa, en función de la que dispare, activaremos una salida u otra.
Así cuando se active una de las entradas, se llamará al OB40, se evalúa el módulo que provoca el disparo
y después la entrada concreta que lo ha provocado, activando una salida o la otra.
Esta configuración NO se puede simular, sólo puede probarse con el PLC real.