Beruflich Dokumente
Kultur Dokumente
Sistemas
Manual WinCC V4.02 Indice General
Indice:
1 INTRODUCCIÓN ............................................................................................................ 10
INSTALACION ....................................................................................................................... 13
2.1 Instalación de WinCC V4.02..................................................................................... 13
2.2 Primeros pasos de instalación .................................................................................. 14
2.2.1 Pestaña Seleccionar opción instalación:................................................................ 15
2.2.2 Botón Instalar aplicaciones: .................................................................................. 15
2.2.3 Botón Notas de instalación:................................................................................... 15
2.2.4 Botón Diapositivas Powerpoint.............................................................................. 15
2.2.5 Botón Guía de iniciación rápida............................................................................. 16
2.2.6 Botón Instalar Simulador de Variables................................................................... 16
2.2.7 Botón Cambio de idioma:...................................................................................... 16
2.2.8 Botón Salir de la instalación: ................................................................................. 16
2.3 Desinstalación de WinCC ......................................................................................... 23
2.4 Instalación de la Demo de WinCC. ........................................................................... 24
2.5 Instalación del simulador de WinCC. ........................................................................ 25
2.5.1 ¿Cómo asignar variables al simulador?................................................................. 32
3 Estructura de WinCC....................................................................................................... 35
3.1 Estructura del programa ........................................................................................... 35
3.2 Estructura del proyecto............................................................................................. 42
4 CONTROL CENTER ....................................................................................................... 46
4.1 Introducción. ............................................................................................................ 46
4.2 Crear un nuevo proyecto. ......................................................................................... 48
4.2.1 ¿Cómo inicializar la base de datos de runtime?..................................................... 50
4.3 Base de datos SQL AnyWhere ................................................................................. 52
4.4 Opciones del menú del Control Center ..................................................................... 53
4.4.1 Print FeedBack Doc.. ............................................................................................ 53
4.4.2 Shut Down ............................................................................................................ 53
4.4.3 Idioma del Control Center ..................................................................................... 54
4.4.4 Status de conexión ............................................................................................... 55
4.5 Datos del Proyecto ................................................................................................... 57
4.5.1 Introducción .......................................................................................................... 57
4.5.2 General Information. ............................................................................................. 57
4.5.3 Update cycles. ...................................................................................................... 58
4.5.4 Hotkeys: ............................................................................................................... 59
4.6 Computer: ................................................................................................................ 60
4.7 Computer Properties ................................................................................................ 61
4.7.1 General Information. ............................................................................................. 61
4.7.2 Startup:................................................................................................................. 63
4.7.3 Parameter:............................................................................................................ 65
4.7.4 Graphics-Runtime................................................................................................. 66
4.8 Tag Management ..................................................................................................... 69
4.8.1 Introducción. ......................................................................................................... 69
4.8.2 ¿Qué es un driver o canal de comunicaciones? .................................................... 69
4.8.3 Adición de un driver de comunicaciones................................................................ 69
4.8.4 Adición de una nueva conexión............................................................................. 71
4.8.5 ¿Qué es un group? ............................................................................................... 73
4.8.6 ¿Qué es un tag? ................................................................................................... 74
4.8.7 Control de límites en variables de comunicaciones................................................ 76
4.8.8 Escalado de variables por software ....................................................................... 77
4.8.9 Tamaño de las variables o tags............................................................................. 78
4.8.10 Adaptar una variable de WinCC con respecto al valor del PLC .......................... 78
4.8.11 Generación de variables internas (internal tags) ................................................ 78
4.9 Data Types............................................................................................................... 80
4.9.1 Introducción .......................................................................................................... 80
4.10 Barra de estado de Control Center ........................................................................... 82
GRAPHICS DESIGNER ......................................................................................................... 85
5.1 Introducción ............................................................................................................. 85
5.2 Características ......................................................................................................... 85
5.2.1 Tips&Tricks........................................................................................................... 85
5.2.2 Propiedades de los objetos ................................................................................... 86
5.2.3 Propiedades del objeto Picture.............................................................................. 86
5.2.4 Iconos de la ventana propiedades......................................................................... 91
5.2.5 Barra de herramientas del Graphic Designer......................................................... 92
5.2.6 Biblioteca de objetos ............................................................................................. 94
5.3 Opciones del menú .................................................................................................. 99
5.3.1 Settings ................................................................................................................ 99
5.3.2 Idioma de la pantalla:...........................................................................................102
5.4 Barras de herramientas ...........................................................................................103
5.4.1 Barra de colores ..................................................................................................103
5.4.2 Barra de zoom .....................................................................................................103
5.4.3 Barra de objetos ..................................................................................................103
5.4.4 Barra de layers: ...................................................................................................105
5.4.5 Barra de alineación. .............................................................................................105
5.4.6 Barra de fuentes ..................................................................................................106
5.4.7 Barra de estilos....................................................................................................106
5.5 Smart Objects .........................................................................................................107
5.5.1 Introducción .........................................................................................................107
1 INTRODUCCIÓN
El paquete de software WinCC constituye el entorno de desarrollo de Siemens en el marco de
los scadas1 para visualización y control de procesos industriales. Sus características más
importantes se pueden resumir en:
El presente manual tiene como objeto explicar de la manera más práctica posible todas las
posibilidades que dicho scada dispone, comenzando con una descripción de todas las
opciones del paquete para posteriormente adentrarse en los capítulos sobre comunicaciones,
finalizando con la realización de un proyecto que utiliza las más importantes características
descritas.
2 Driver: Código que implementa el protocolo de comunicaciones con un determinado equipo inteligente.
INSTALACION
DE WINCC V4.02
2 INSTALACION
Seleccionar
opción
Instalar
selección
Notas de
instalación
Diapositivas
Powepoint
Guía
iniciación
Simulador de
variables
Cambio
de idioma
Salir de la
instalación
Si no dispone del autorun activado, ejecute el fichero setup.exe del raíz de su CD.
A continuación veremos las diferentes opciones posibles.
Esta guía en formato Word le permite adentrarse en el mundo del WinCC mediante la
explicación de un ejemplo claro y sencillo. Es muy recomendable que se imprima dicha guía en
papel y realice el ejercicio descrito antes de comenzar a desarrollar un proyecto en WinCC, ya
que se describen los casos más usuales de manejo del paquete.
Este software nos permite simular un valor periódico (seno, coseno, etc..) en unas
variables internas de WinCC. Esto es útil cuando necesitamos dinamizar algún proceso (p. Ej.
Para visualizar gráficas de curvas o animar una barra analógica) y, o no disponemos de ningún
PLC con el que poder animar la propiedad, o el PLC no dispone de ningún valor que se
encuentre variando de manera constante.
Podemos cambiar el idioma del software de la instalación de WinCC, pero sólo entre
inglés, alemán y francés. Este cambio de idioma corresponde a los textos del menú del
programa de desarrollo, no confundir con los textos de la aplicación que vamos a desarrollar
con WinCC.
A continuación se nos pide el path donde deseamos guardar el software (por defecto
C:\Siemens\WinCC), así como si deseamos instalar el software en otro idioma además de en
inglés.
A continuación se nos permite elegir entre los tres tipos de instalación que podemos
realizar:
Los datos del WinCC se almacenan en un fichero de extensión DB, que posee un
formato SQL Server, y puede optimizarse para velocidad en acceso a los datos, con lo cual la
base de datos generada ocupará 4 Mb, o optimizarlo para espacio en el disco duro, con lo cual
la base de datos se reduce a la mitad de tamaño pero el tiempo de acceso a la misma
aumenta. Seleccionamos optimizada para velocidad en acceso a datos (4 Mb.)
Podemos:
• Quitar/poner partes del programa.
• Quitar/poner un lenguaje del programa.
• Desinstalar completamente el software del disco duro.
El software que se encarga de realizar esto se debe instalar a parte del WinCC,
seleccionando la opción del menú principal de la instalación de WinCC. El asistente nos
permite modificar el subdirectorio en el que se va a instalar la aplicación.
Si no se modifica, el programa instala en el subdirectorio C:\Siemens\Sim, los
archivos Simeng.exe y Simdeu.exe. Ambos son el mismo programa, pero en versiones inglesa
y alemana del simulador de variables. Para arrancar el simulador desde el menú inicio vamos
a:
Inicio->Simatic->WinCC->WinCC Simulator
carga una instancia en memoria del programa, que posteriormente al arrancar la runtime de
WinCC bloquea el PC. Para comprobarlo, ejecute el simulador sin tener el WinCC arrancado y
posteriormente presione Ctrl+Alt+Supr. Verá como aparece una instancia de Simulation que
anteriormente no existía.
Este fallo se encuentra corregido en la versión 4.02. En cualquier caso, si intenta
ejecutar el simulador sin tener activado el runtime de WinCC aparecerá el siguiente mensaje:
• Función seno:
• Random: valor aleatorio entre unos límites máximo y mínimo. El ideal para simulación de
gráficas y valores dinámicos.
• Inc: Rampa incremental que al llegar a un valor comienza formando dientes de sierra.
• Dec: Rampa decremental que va disminuyendo hasta un valor cero, formando dientes de
sierra invertidos.
• Slider: en función de nuestros desplazamientos por la barra que nos habilita el simulador
podremos definir el valor de la variable. Ideal para simular valores estáticos.
ESTRUCTURA
DEL WINCC
3 Estructura de WinCC
• Bin:
Apdiag.exe: programa de diagnosis del funcionamiento de la aplicación runtime, en el
que podemos estudiar los procesos internos que se van realizando en el código de la
runtime. Si activa la runtime de un proyecto, puede arrancar a su vez este programa,
que permite observar los mensajes del sistema, la ejecución de eventos y exportar esta
información a un fichero de texto. Incluso es posible que muestre mensajes
automáticamente en la pantalla cuando detecte un error interno en la ejecución del
WinCC.
Directorio GraCS:
Pdl -> las imágenes del proyecto.
Sav -> ficheros backup de las imágenes. Si se realiza una modificación errónea en una
picture y se salva se puede recuperar renombrando el fichero sav como pdl.
Bmp, wmf, emf: ficheros de imágenes.
Act -> acciones C. Un código C se puede almacenar en uno de estos ficheros para
luego ser importado desde otro proyecto sin disponer del proyecto original en donde
residía el código.
Pdd -> parámetros por defecto del graphic designer.
Directorio Library:
H -> declaración de funciones C.
Pxl -> librería de símbolos.
Fct -> project functions (funciones de proyecto definidas por nosotros).
Directorio Pas:
Pas -> acciones de proyecto que son disparadas por un trigger y corren en
background con respecto al runtime del proyecto.
Directorio Prt:
rpl -> layouts para realizar reports a impresora. Los definidos por el sistema comienzan
con el carácter @.
Rp1 -> line layouts. Definiciones de líneas a impresora para impresión de eventos en
tiempo real.
Archivos opcionales:
Directorio raíz:
Ini -> archivo de inicialización del simulador de variables.
Sim -> variables internas a simular por el simulador de variables.
Csv -> textos exportados separados por comas.
Txt -> mensajes exportados separados por comas.
Emf -> report a impresora exportado a un fichero.
Log -> ficheros de diagnosis de la ejecución del WinCC.
CONTROL CENTER
4 CONTROL CENTER
4.1 Introducción.
Control Center representa el acceso a todas las opciones del WinCC como sistema de
desarrollo para visualización de procesos industriales. Desde el Control Center podemos disponer
de todos los módulos software para la creación de ventanas gráficas, archivos de procesos,
ventanas de alarmas, y generación de documentos a impresora.
Además de esto, la filosofía abierta del WinCC posibilita la interconexión desde aquí del
sistema con otras aplicaciones, ya sea a través de OLE, DDE o ODBC.
Al arrancar el WinCC, existen tres posibilidades:
a) Que anteriormente no hubiera ningún proyecto abierto, con lo que se nos abre
automáticamente una caja de diálogo en la que se nos permite crear un nuevo proyecto o abrir
uno existente.
b) Que ya hubiera un proyecto abierto anteriormente, con lo que no nos aparece esta caja de
diálogo, sino el proyecto en cuestión.
c) Que el proyecto ya estuviera abierto y en runtime cuando lo abandonamos la última vez, con lo
que arranca automáticamente la runtime del WinCC.
La estructura que nos genera en el disco duro es la que se muestra en la figura superior.
De toda esta estructura, el único subdirectorio que ya contiene inicialmente archivos es el
de Prt, en el cual se encuentran los reports a impresora pre-configurados.
Como se puede observar desde el Control Center, todo proyecto de WinCC se divide en una
serie de partes bien definidas y siempre iguales, lo que nos permite afrontar cualquier tipo de
proyecto siguiendo siempre las mismas pautas de trabajo.
Un proyecto está compuesto por:
• El nombre del proyecto, en este caso Dunker,
• Computer: Todos los parámetros relacionados con el entorno de trabajo de la aplicación en
general.
• Tag Management: Administrador de comunicaciones (tener en cuenta a partir de ahora que
tag equivale en el proyecto a una variable, sea de comunicaciones con el PLC o interna del
proyecto).
• Data Types: Agrupación de las variables del WinCC por tamaño, sin distinción de origen de
los datos (comunicaciones o internos).
• Editors: Editores de las diferentes partes en que se subdivide el runtime del WinCC. Dentro
de este apartado nos encontramos con:
Graphics Designer: Editor gráfico que nos permite dibujar las pantallas que componen el
WinCC.
Alarm Logging: Editor de alarmas que nos permite configurar las ventanas y tratamiento
de alarmas del proceso.
Tag Logging: Editor de archivos y gráficas que e encarga de configurar el
almacenamiento de datos y su posterior visualización en forma de curvas o de tablas.
Report Designer: Editor de informes a impresora. Se encarga de configurar todo lo
referente al envío a impresora de informes.
Global Script: Compilador en C que nos permite programar nuestras propias acciones y
ejecutarlas de manera periódica o mediante eventos de cambio de variables.
Text Library: Editor de texto que nos permite asignar diferentes configuraciones de textos
según el idioma seleccionado en el WinCC.
User Administrator: Administrador de usuarios que nos permite activar o desactivar
usuarios mediante activación de passwords.
Los datos del proceso son almacenados en la base de datos PROYECTORT.DB siendo
PROYECTO el nombre de nuestro proyecto. A medida que se trabaja en modo runtime el tamaño
de dicha base va aumentando (histórico de alarmas, archivos, etc..). Si en un momento dado es
necesario inicializar dicho archivo, realice una copia de seguridad del mismo y siga los siguientes
pasos:
• borre el archivo PROYECTORT.DB
• copie el archivo WINRT.DB del subdirectorio WinCC\bin en su proyecto.
• Renómbrelo como PROYECTORT.DB.
Esta opción nos permite generar un report para documentar nuestro proyecto. Si
deseamos modificar el formato que nos aparece por defecto, tenemos que ir al report designer y
modificar el report @Documentation Control Center.
Esta opción del menú nos permite seleccionar la forma en la que deseamos salir del
WinCC.
Las opciones disponibles son:
• Salir de Windows, cerrando todas las aplicaciones que estuvieran abiertas (apagar el
ordenador en una instalación).
Si hemos seleccionado algún idioma además del inglés en la instalación del WinCC,
disponemos en Tools->Languaje de la posibilidad de cambiar de idioma el Control Center.
Es importante recordar que estos idiomas son para el Control Center, no para la runtime.
Por esta razón no aparece la opción en español, ya que el software sólo está disponible en
francés, inglés y alemán. Sin embargo, esto no impide que en la runtime podamos seleccionar los
textos directamente por la referencia Español.
Para actualizar los campos, se puede seleccionar la casilla Cyclic Update, que actualiza cada
segundo el estado de las comunicaciones en la ventana, así como las variables leídas y escritas.
4.5.1 Introducción
Vamos a repasar todas las opciones que nos ofrece el proyecto recién generado, visto
desde la ventana del Control Center.
Ejemplo:
Si deseamos leer un valor de proceso cada 6 segundos, definiremos aquí este tiempo en base
a milisegundos (6000) y posteriormente utilizaremos como ciclo de lectura el user cycle 1.
4.5.4 Hotkeys:
4.6 Computer:
Esta opción nos permite seleccionar el nombre de nuestro ordenador. Hay que tener en
cuenta que dicho nombre ha de corresponder al asignado en Windows 95, 98 o NT, ya que de otro
modo al ejecutar la runtime WinCC nos indicará que no encuentra dicho nombre en su lista de
servidores.
4.7.2 Startup:
En esta solapa podemos seleccionar la parte del runtime que deseamos activar en WinCC.
El runtime del WinCC está dividido en varias partes para poder optimizar el tiempo de respuesta
en el procesamiento de las comunicaciones. Esto es así, ya que si por ejemplo no se dispone de
impresora en la instalación, no es necesario activar la parte de runtime que corresponde a la
impresora, con lo que no pierde tiempo el programa, encargándose de realizar esa parte de
código.
Hay que tener en cuenta que con respecto a la runtime del Global Script, su ámbito de
activación no es exclusivamente el de programar funciones en C. Si asignamos un script a un
botón deberemos de tener activado el runtime de Global Script, ya que de facto esto es una acción
en C. Esto no es siempre obligatorio para todas las acciones en C, pero es conveniente ya que
algunas no se ejecutarán si no tiene instalada la parte de Global Script.
A su vez, en Additional Tasks podemos asociar aquellas aplicaciones que deseamos que
se ejecuten cada vez que arranque la runtime del WinCC.
4.7.3 Parameter:
En esta pestaña podemos seleccionar el lenguaje del runtime del WinCC (por defecto
viene en inglés). No confundir con el lenguaje del entorno de desarrollo, que sólo puede ser en
inglés, francés y alemán, seleccionándose en el menú, y no en esta opción.
Por defecto sólo aparece un idioma (inglés) para comenzar la aplicación, pero podemos
disponer prácticamente de cualquier idioma en esta solapa, siempre y cuando en el Text Library
añadamos este idioma a la tabla (para más información ver Text Library).
A su vez, también podemos seleccionar la prioridad de acceso al microprocesador de la
cpu de nuestra aplicación. Si seleccionamos prioridad alta, nuestra tarea será la única que podrá
acceder de una manera ágil al micro, por lo que cualquier tarea que se desee realizar en paralelo
se verá ralentizada al máximo.
También podemos deshabilitar algunas combinaciones de teclas. Las diferentes
posibilidades son:
• Ctrl+Alt+Del: Impide cerrar el WinCC realizando un reset por software.
4.7.4 Graphics-Runtime
Con respecto a los atributos de ventana que se pueden bloquear, las posibilidades son:
• Alt+F4: Impide que se pueda cerrar la ventana de runtime con la combinación Alt+F4.
• Change Size: Impide que se pueda modificar el tamaño de la ventana de runtime desde el
propio runtime.
• Move: Impide que se pueda mover la ventana de runtime.
• Minimize: Impide que se pueda minimizar la ventana de runtime.
• Maximize: Impide que se pueda maximizar la ventana de runtime.
• Close: Impide que se pueda cerrar la ventana de runtime desde la X de la esquina superior
derecha de la ventana.
• Optimized View: Deshabilita la optimización del redibujado de los objetos en pantalla. Por
defecto, los objetos de la pantalla no se redibujan de manera individual, sino todos a la vez en
el denominado Windows Cycle. Si deseamos que cada objeto se redibuje de manera
independiente seleccionaremos esta opción, teniendo en cuenta que esto nos puede producir
parpadeos en la pantalla y retardos en el redibujado de la misma.
Además de la asignación de teclas para subir y bajar con el teclado, podemos configurar el
funcionamiento del cursor a la hora de desplazarse, eligiendo entre las siguientes opciones:
• Normal: El cursor al llegar al extremo de una fila de controles si nos desplazamos en
horizontal, comienza de nuevo por la izquierda (pasa de 3 al 1).En vertical exactamente igual
(pasa del 4 al 1).
• Normal Whitout Rollback: El cursor al llegar a un extremo de la fila o columna de controles
no continúa desplazándose (al llegar a 3 se queda en el 3 aunque sigamos intentando
desplazarnos hacia la derecha).
• Expanded: El cursor al llegar a un extremo de una fila o columna, continúa por el principio de
la siguiente fila o columna (al llegar a 3 pasa a 4, al llegar al 6 pasa al 1).
4.8.1 Introducción.
Un driver de comunicaciones es una dll, con la extensión *.CHN que posibilita al WinCC
comunicarse con un determinado protocolo con un tipo determinado de PLC industrial o aplicación
software. Un canal de comunicaciones puede soportar varios enlaces de comunicaciones a la vez
o no, dependiendo del tipo de canal. Existen canales de comunicaciones que, pese a encontrarse
entro del CD de WinCC, necesitan para funcionar una licencia aparte. Para más información
acerca de cuales son, ver apéndice.
Es posible generar un nuevo canal de comunicaciones si se dispone de la herramienta
CDK, paquete de desarrollo de WinCC para canales de comunicaciones.
Supongamos que deseamos conectar el WinCC a un autómata S7 300 o 400 para obtener
información de él. Primeramente necesitaremos añadir el driver de comunicaciones adecuado.
Para ello, seleccionando con el botón derecho tag management, aparece un menú contextual
cuya primera opción es añadir nuevo driver. Seleccionando esta opción nos aparecen todos
aquellos drivers de que dispone el WinCC.
Si volvemos a colocarnos sobre el driver MPI y presionamos el botón derecho, una de las
opciones es new driver connection. Seleccionándola podemos configurar la dirección MPI y el
nombre simbólico que le queremos dar a nuestro enlace MPI (en nuestro caso AUTOMATA_314).
En la solapa connection podemos definir la dirección MPI del equipo al que vamos a
conectarnos. Los autómatas S7 disponen de un número identificativo comprendido entre 2 y 126
que les identifica dentro de una red MPI. También podemos activar la opción de envío y recepción
de raw datas. Como veremos más adelante, los raw datas son bloques de datos que no reciben
tratamiento a nivel de protocolo ni por parte del PLC ni por parte de WinCC. Es el sistema ideal
para el envío de estructuras de información o telegramas completos, en lugar de variables sueltas
de comunicaciones.
Con esto se ha definido el enlace con un PLC S7 300/400 en la dirección MPI 2. Todas las
variables que se definan a partir de este enlace obtendrán su valor de las comunicaciones con
dicho PLC de manera automática. Para conocer otros tipos de enlaces a parte del S7 ver apéndice
al final del libro.
Todas las variables, tanto las internas como las externas pueden agruparse en groups o
grupos de variables, lo que permite cuando el proyecto crece en tamaño acceder a las variables
de una manera más intuitiva.
Ejemplo:
Supongamos que deseamos realizar un proyecto de una máquina de lavado de coches,
que se compone de cuatro partes bien diferenciadas, entrada al lavadero, enjabonado, lavado y
secado
Definimos cuatro grupos de variables dentro de los cuales crearemos los tags que
correspondan a cada una de las partes de la máquina.
Un tag es el elemento de enlace entre la base de datos del WinCC, las variables del PLC y
los objetos del runtime de nuestra aplicación. Los valores de los tag son almacenados en nuestra
base de datos del proyecto. Cuando arranca el WinCC, carga estos valores de la base de datos. A
partir de ese momento se pueden modificar dichos valores, pero hay que tener en cuenta que
dichas dinamizaciones no se almacenan en la base de datos, por lo que si utilizamos variables
internas para realizar una receta de valores, y nos salimos de WinCC, cargará al arrancar de
nuevo los valores de las variables internas que tenga asignados en propiedades estáticas, y no el
último valor que hubiésemos introducido.
Para crear una variable de comunicaciones o tag, nos colocamos sobre cualquiera de los
grupos creados y seleccionamos con el botón derecho new tag.
La solapa general information nos permite introducir un nombre simbólico para nuestra
variable de comunicaciones.
Presionando en el botón select podemos acceder a un cuadro de diálogo que nos permite
definir la dirección del mapa de memoria del PLC de la que queremos obtener el valor o donde lo
deseamos almacenar.
El poder seleccionar estos mapas de memoria nos permite realizar controles de instalaciones
que ya estuvieran funcionando con su programa de PLC siempre y cuando las zonas a las que
accedamos para escribir no estén a su vez siendo escritas desde programa de PLC. Con respecto
a la lectura no existe evidentemente ninguna limitación, accediendo a todas ellas libremente.
Ejemplo
Se desea leer un valor analógico que viene de una sonda 0-20 mA que dentro del PLC se
almacena tras la conversión analógica digital en un valor de 32 bits. La sonda aporta 0 mA para –
10 ºC y 20 mA para 60ºC. Leemos el valor directamente de la entrada del PLC y escalamos al
rango de la sonda, con lo que podemos obtener en el WinCC la representación en ºC del valor de
la sonda sin necesidad de más transformaciones dentro del PLC.
4.8.10 Adaptar una variable de WinCC con respecto al valor del PLC
b) Poseen una funcionalidad añadida, que es la opción de poder elegir si dicha variable debe ser
local para el ordenador en el que se genera o debe ser compartida por todos los ordenadores
cuando se trabaja en una red multipuesto.
c) A diferencia de las de comunicaciones, son gratuitas e ilimitadas, en función de la memoria
RAM de que disponga el PC.
4.9.1 Introducción
Data types, agrupa las variables en lugar de por origen de los valores de las mismas, por
tamaño. Así las agrupaciones posibles son:
Desde esta opción podemos generar estructuras de variables que luego pueden ser
utilizadas en el Tag Management. Para generar una nueva estructura, sobre Structure Tag,
pulsamos el botón derecho y seleccionamos New...
Generamos una estructura de PID como la de la figura de abajo. Esto nos permite ir al Tag
Management, y cuando generemos una nueva variable, podemos asociarle esta estructura, con lo
que en lugar de estar definiendo una sola variable, definimos un grupo de variables, direccionando
de una sola vez todas dentro del PLC..
Una estructura puede contener tanto variables internas como de comunicaciones. Al crear
una variable en el Tag Management de tipo Struct se puede asignar el tipo definido en este punto,
con lo que se generan tantas variables nuevas como tenga la estructura, siguiendo la siguiente
regla:
Variable_nueva.dato_estructura
• Variables externas que estamos utilizando en nuestro proyecto. Esto nos permite
dimensionar la runtime que debemos adquirir para la comunicación una vez finalizado el
desarrollo.
• El modo de desarrollo que se está utilizando. En modo demo (sin licencia) se cumple lo
anteriormente mencionado al respecto de los 30 minutos de control.
• CAPS: tecla mayúsculas presionada.
• NUM: teclado numérico activado.
• SCRL: la tecla bloq despl del teclado está activada.
GRAPHIC DESIGNER
5 GRAPHICS DESIGNER
5.1 Introducción
El editor Graphics designer se encarga de la confección de las pantallas del WinCC.
Básicamente es un entorno de dibujo con la característica de que los objeto poseen la
capacidad de asociar sus propiedades a variables de comunicaciones que son proporcionadas
por el Tag Management.
5.2 Características
5.2.1 Tips&Tricks
El editor Graphics designer posee una opción de Tips&Tricks o ideas que nos
proporciona algunas sugerencias cada vez que entramos al mismo al respecto de alguna
funcionalidad del mismo.
Todos los objetos poseen dentro del graphics designer varias características comunes,
incluyendo a la propia superficie en la que vamos a colocar los objetos (picture). Estos son:
• Todo objeto posee una serie de propiedades, cuyo número depende del tipo de objeto en
cuestión. Para acceder a estas propiedades es necesario colocarse sobre el objeto y
presionar el botón derecho del ratón, emergiendo un menú contextual como el de la figura.
• Geometry:
Picture Width: Ancho de la pantalla (en pixels).
Picture Height: Alto de la pantalla (en pixels).
• Colors:
Background Color: Color del fondo de la picture
Fill Pattern Color: Color de la máscara de dibujado sobre el fondo de la picture.
Grid color: Color de los puntos de la rejilla
• Miscelaneous:
Operator-Control Enabled: la picture se encuentra habilitada.
User Level: Nivel de usuario al que le está permitido entrar en esta ventana. Para
conocer como realizar la asignación de niveles de usuario, vea capítulo User Administrator.
Display: Mostrar la picture.
Update cycle: Ciclo de actualización de la picture.
Date of the last change: fecha de la última modificación que se hizo a la picture.
Cursor Mode: Tipo de modo de desplazamiento con el cursor (alpha o tab).
Con respecto a los eventos, las posibilidades para una picture son:
• Eventos Mouse:
Mouse Action: Se ejecuta al presionar cualquier botón del ratón.
• Eventos Keyboard:
Press: Se ejecuta al presionar una tecla, siempre y cuando el foco activo sea dicho
objeto.
Release: Se ejecuta al levantar la tecla presionada anteriormente.
• Eventos Miscelaneous:
Objetc Change: Se ejecuta cada vez que cambia alguna propiedad del objeto.
Open Picture: Se ejecuta al entrar al picture.
• Property topics:
Se ejecutan cuando la propiedad seleccionada cambia en el objeto.
Copiar Propiedades: Copia las propiedades del objeto activo en ese momento
en el portapapeles.
Visualizar rejilla
Biblioteca de objetos.
Veamos
5.3.1 Settings
En esta opción podemos seleccionar las capas que deben estar activas por defecto en
una picture y las que no.
Por último, podemos seleccionar la configuración por defecto de objetos que deseamos
y donde guardarla.
Podemos seleccionar diferentes idiomas para los textos asociados a todos los objetos
que coloquemos en las pantallas del WinCC, de tal manera que simplemente cambiando de
página de idioma podamos modificar completamente el lenguaje del runtime en la aplicación.
Para conseguir esto, primeramente deberemos definir el lenguaje de la pantalla en la
que estamos.
¿Cómo saber el idioma actual de la pantalla que estamos editando?
Aparece en la barra de status, en la parte de debajo de la pantalla
Disponemos de una barra de colores para asignar a las propiedades estáticas de los
objetos. Dichos colores pueden personalizarse gracias al último de los iconos de la barra.
• Smart Objects: Objetos inteligentes, cada uno con unas propiedades especiales.
• Windows Objects: Objetos comunes de Windows, tales como botones, cajas de selección,
barras de desplazamiento, etc..
La barra de layers nos indica las capas que actualmente están activas en nuestra
ventana. Todos los objetos poseen una propiedad layer que indica a qué capa pertenecen.
Disponemos de un total de 16 capas, apareciendo por defecto todas activas.
Esta barra se utiliza para poder alinear varios objetos y también para igualarlos en
tamaño tanto en altura como en anchura.
Para que aparezca activa lógicamente deberemos de tener seleccionados por lo menos
dos objetos.
La mayoría de los objetos poseen algún texto asociado. Mediante la barra de fuentes
podemos configurar el tamaño y fuente de los mismos sin tener que entrar en sus propiedades.
Al igual que el anterior, poseemos también una barra de herramientas solo para las
líneas de los objetos, en las que podemos modificar el estilo de la línea, su grosor, su final y el
relleno que deben tener (si poseen un grosor mayor de una simple línea).
5.5.1 Introducción
Los smart objects son la base de construcción de los proyectos de WinCC. Los cuatro
primeros los estudiaremos más adelante, ya que su estudio es más amplio y complicado. Nos
centraremos ahora en los siguientes objetos.
• Text Flashing frequency: Frecuencia del parpadeo del texto. Disonemos de tres
velocidades: lenta, media y rápida.
Opciones Miscelaneous:
• Operator Control Enable: Indica si el usuario puede tener acceso a la caja para introducir
valores. Esta propiedad es independiente de que tenga o no nivel para poder introducir
valores. Equivale al Locked de los controles de programación de objetos.
• User level: Nivel que debe disponer el usuario para poder introducir datos en esta caja.
• Display: Si debe ser visible o no la caja.
• Tooltip Text: Texto que debe aparecer en el cursor al posicionarse con el mismo sobre la
caja. Los tooltip dependen también del código de página de idiomas seleccionado en el
runtime.
• Operator activites report: Cuando se activa esta opción, cada vez que se introduzca un
valor en la caja, aparecerá una caja de texto solicitando que introduzcamos una explicación
al respecto de la modificación realizada en el valor del proceso. Este mensaje queda
almacenado en el sistema como seguridad antes posibles fallos debidos a los cambios
realizados, o como nota aclaratoria de porqué se toma dicha decisión.
• Operator Input Message:
• Adapt Border: Ajusta automáticamente el tamaño de la caja al texto o número que
contenga en cada momento.
• Cursor Control: Determina si después de realizar una entrada en la caja se debe saltar al
siguiente objeto en el orden de Alpha-cursor seleccionado o se debe de continuar en el
campo en el que se acaba de introducir el valor.
• Inmediate input: Indica si la caja al recibir el foco debe ponerse automáticamente en modo
de edición para introducir un valor, o no.
Límites:
• Low Limit Value: Valor menor que se puede aceptar como válido a la hora de introducir un
valor en proceso.
• High Limit Value: Valor mayor que se puede aceptar como válido a la hora de introducir un
valor en proceso.
Si se sobrepasa cualquiera de estos valores, automáticamente aparece una caja
indicándonos dicho suceso.
Output/Input:
• Field Type: Tipo de valor del campo a representar o introducir. Las diferentes posibilidades
son:
Output: Solo leer el valor en el PLC, sin poder escribir.
Input: Solo escribir el valor en el PLC sin poder leer.
I/O field: leer el valor en el PLC y poder modificarlo también.
• Output Format: formato de salida del valor a introducir. Cada carácter 9 corresponde a un
dígito. Los dígitos que se coloquen después del punto corresponderán a los decimales a
los que se ajuste el valor a representar.
• Formato hexadecimal:
f -> carácter hexadecimal.
0 -> cero de relleno a la izquierda de caracteres hexadecimales.
Además de las propiedades, todo objeto (incluyendo el objeto I/O que estamos tratando
ahora) posee un Configuration Dialog, perteneciente a su menú contextual, en el cual se
representan las propiedades más importantes del objeto en cuestión, es decir, un resumen de
lo visto en las páginas anteriores. El Configuration dialog de la caja I/O es:
5.5.3 Bar.
La barra es un objeto que nos permite representar un valor analógico y compararlo con
unos límites establecidos para saber en que estado se encuentra el proceso con respecto al
valor deseado.
• Bar direction: dirección en la que debe de crecer la barra (hacia arriba, hacia abajo...)
Colors:
Styles:
• Border Weight: Anchura del borde de la ventana de la barra.
• Border Style: Estilo del borde de la ventana.
• Fill Pattern: Estilo de rellenado del fondo de la ventana de la barra.
• Bar Pattern: Estilo de rellenado de la barra.
Font:
• Font: Fuente de la escala e la barra.
• Font Size: Escala de la fuente de la escala de la barra.
• Bold: Si dicha fuente debe aparecer en negrita.
Miscelaneous:
• Change color: Cambia el color de la barra al superar un límite superior o inferior de
manera total, o solo el trozo que sobrepase dicho límite.
• Maximum value: Valor máximo de la escala de la barra.
• Zero point value: Valor del punto cero de la escala.
• Minimun value: Valor mínimo de la escala de la barra.
• Histeresys: Indica si el valor debe de comportarse según una histéresis al alcanzar el
límite superior o inferior. Si alcanzamos un límite de 100, teniendo activado este parámetro,
y seleccionando un rango de histéresis de 20, hasta que el valor no baja de 80 no volverá
la barra a representar modificaciones en su valor. Esto permite evitar las oscilaciones
propias de los fluidos una vez alcanzados los límites precisos.
• Histeresys Range: Valor a tener en cuenta en la histéresis.
• Trend: Indicador del sentido de la barra. Nos indica si el proceso está aumentando o
disminuyendo, realizando una comparación del valor actual con el anterior.
• Average Value: Seleccionando esta opción se muestra la media de los últimos 15 valores
leídos en el proceso, no el instantáneo. Ideal para procesos muy fluctuantes.
• Process Drive Connection: Valor del proceso a mostrar.
Axis:
• Scale: Mostrar o no la escala de referencia de la barra.
• Alignment: Lugar en el que colocar la escala (derecha o izquierda).
• Long Axis Section: La escala se compone de barras largas y cortas. Esta opción dibuja
las barras largas de la escala en negrita.
• Label Each: Indica cada cuantas barras largas de la escala hay que colocar un valor
numérico.
• Only long axis sections: Mostrar solo las barras largas de la escala, no las intermedias
cortas.
• Lenght of axis section: Longitud en pixels de las barras divisoras de la escala de la barra.
• Exponent display: Mostrar la escala en valor exponencial o lineal.
• Bar Scaling: Tipo de escala de la barra.
CUBIC
• Zero point: Lugar donde se encuentra el punto cero en la escala.
• Axis Section: Cada cuantas unidades queremos poner un indicador numérico de escala.
Por ejemplo, cada 20 unidades, con lo que la cantidad de marcadores numéricos en la
escala será de 100/20=6.
• Scale marcs: La distancia en las divisiones de la escala.
• Digits to the left of the decimal: Dígitos del valor entero de la escala.
• Digits to the rigth of the decimal: Cantidad de decimales del valor del a escala.
Limits:
• Limit Marker: Marca de límite que aparece a la izquierda de la barra indicándonos donde
se encuentran los límites de control de la barra.
• Monitoring AL: Controlar alarma 1de mínimo.
• Limit AL: Valor del límite de alarma 1.
• Bar color AL: Color que debe adoptar la barra cuando el valor del proceso esté por debajo
de lo especificado en Limit AL.
• Type AL: El valor de Limit AL puede ser expresado en valor absoluto, con lo cual es
necesario conocer a priori el valor máximo de la escala, o en porcentual (mucho más
flexible, ya que ante cualquier modificación de límites continúa manteniendo la
proporcionalidad).
Las demás opciones son idénticas pero para los cuatro siguientes limites de alarma
mínima (La L de AL indica que es un límite de mínimo). Los límites de máximo comienzan con
AH, siendo su funcionamiento y propiedades idéntico al descrito, salvo que la barra cambia de
color cuando el valor del proceso está por encima del valor estipulado como límite de alarma.
El objeto gráfico representa una imagen en pantalla. Su asignación suele ser dinámica,
utilizándose el status display para realizar animaciones de imágenes, aunque puede
dinamizarse la imagen que representa.
Picture:
• Picture: Imagen actual a representar.
• Picture referenced: Indica si se debe almacenar en el objeto la imagen o solo la referencia
a la misma, para que al cambiar esta en el disco duro, cambie también en el objeto.
• Picture transparent color: Color que se considera transparente en la imagen.
• Picture transparent color on: Activar el color transparente, con lo que todos los pixels de
dicho color serán reemplazados por la imagen que se encuentre por debajo del objeto.
El objeto textlist es útil a la hora de realizar un control sobre valores numéricos que se
encuentran claramente definidos mediante textos. Suelen ser estadios del proceso de 3 o
cuatro pasos máximo. Por ejemplo, un motor puede estar parado, arrancado en automático, o
arrancado en manual. En estas situaciones el asociar textos a valores numéricos dentro del
PLC permite gobernar variables del proceso simplemente seleccionando un texto de una lista,
o que un texto nos describa el estado de un determinado elemento de la instalación.
Output/Input:
• Field Type: Campo de salida (solo leer el valor), de entradas (solo modificar el valor en el
PLC) o de ambos (leer y escribir en el PLC).
• Output Value: Valor del proceso relacionado con los textos.
• List Type: Tipo de lista de texto.
5.5.7 Buttons.
Dos opciones no vistas del botón es que podemos definir dos imágenes (picture on y
picture off) para representar los dos estados del botón (presionado o no).
• Selected Boxes: Cajas que están activas por defecto según el array generado (en el
ejemplo solo la primera de las tres).
El objeto option button se utiliza para realizar una entrada en el proceso de un valor
que solo puede adoptarse de entre una serie definida de posibilidades excluyentes entre sí.
La única diferencia entre él y checkbox, visto anteriormente es precisamente esta
característica de exclusión, lo que hace que seleccionando cualquiera de las opciones del
objeto option automáticamente dejan de estar seleccionadas todas las demás.
Todas las propiedades vistas en checkbox sirven para option button.
5.5.10 Slider.
La barra slider sirve para poder introducir valores analógicos en el proceso de una
manera gráfica.
De las propiedades de slider solo destacar por no haber sido vista aún:
• Extended operation:
• Operation steps: incrementos en que aumenta o disminuye la variable de proceso cada
vez que nos desplazamos por la barra.
5.5.11 Round.
El objeto round está ideado como pulsador con enclavamiento o como visualizador de
estado (presionado o no presionado).
5.6 Asistentes
Los asistentes de programación son pequeños scripts o trozos de código de programa
que se añaden de manera automática al objeto sobre el que se aplican, para realizar una
determinada tarea de programación.
Cuando se aplica un Dinamic Wizard a un objeto aparece un asistente que nos permite
seleccionar el evento con el cual deseamos ejecutar el script.
• Exit WinCC:
Sale del runtime de WinCC y del propio WinCC.
Código añadido: ExitWinCC();
• Exit WinCC or Windows:
Nos permite seleccionar la forma de salir de WinCC. Las opciones posibles son:
• HardCopy:
Imprime la pantalla actual por la impresora predeterminada de Windows.
Código: WinExec("PRTSCR.EXE -hardcopy",SW_SHOWNORMAL);
• Language switch:
Cambia de idioma los textos de la aplicación runtime.
Código: SetLanguage(0x040A); /* SPANISH */
Un asistente nos permite seleccionar el código de área del lenguaje deseado.
• Add dinamics to the prototype: permite dinamizar una propiedad del objeto seleccionado
a través de un Wizard en lugar de hacerlo directamente en propiedades del objeto.
• Copy tag value: incluye el código que copia una variable en otra.
• Fill object: rellena los objetos que permitan dinamic filling, pero con la ventaja de que a
través del wizard podemos establecer un rango de llenado diferente de 0 a 100 que sería
mediante una conexión directa de la variable de llenado con la propiedad de llenado.
• Display error: muestra una ventana de error en pantalla. Este Wizard es muy útil para
sacar mensajes al operario frente a error de manejo.
El resultado es el siguiente:
• Display WinCC dialog: mostrar una ventana de diálogo ya configurada anteriormente. Nos
crea el código necesario para que al presionar sobre el objeto, aparezca la ventana
indicada.
La representación de una asignación directa a una variable se realiza con una bombilla
verde.
La segunda forma sencilla de dinamizar una propiedad es a través del dinamic dialog,
una caja de diálogo que nos permite configurar cual debe ser el valor que controla la propiedad
dependiendo de una fórmula que puede ser el resultado del valor de una variable o de una
operación matemática.
El dinamic dialog lo veremos más adelante en los ejemplos de programación, pero es
conveniente saber que se representa su asignación a una propiedad mediante un rayo rojo.
Pero casi siempre hay que recurrir al C para realizar las acciones que deseamos.
Cuando asignamos nuestro código de programación a un evento, se nos indica mediante una
bombilla verde:
ALARM LOGGING
6 ALARM LOGGING
6.1 Introducción
Alarm Logging es la parte del WinCC que de se encarga del tratamiento de los
mensajes de alarma de la instalación, así como del tratamiento del histórico de alarmas y la
generación de alarmas a partir de comparaciones con valores de comunicaciones.
El tratamiento de alarmas de WinCC proporciona:
• Información sobre el error que se ha producido en la instalación.
• Detecta situaciones críticas del sistema.
• Reduce los tiempos de parada de la instalación.
El editor se ejecuta presionando con el botón derecho sobre Alarm Logging del
Control Center y seleccionando Open
que era el responsable del ulterior mensaje de alarmas. Mediante esta opción esto no es
necesario, siempre y cuando la alarma no tenga ninguna repercusión en el proceso (activar p.
Ej. una sirena), descargando de esta tarea al PLC y permitiendo realizar modificaciones de este
estilo sin modificar el PLC.
Como se puede observar, esta dividida entres partes. La primera es un árbol en que se
representan las diferentes partes en que se divide la construcción de una ventana de alarmas.
La segunda, son los objetos que contiene la parte seleccionada a la izquierda. Por último, la
ventana inferior, es donde se representan todas los mensajes de alarma que pueden existir en
nuestro proyecto, con su bit de comunicaciones asignado.
Estos bloques se organizan en una línea, y esta línea ya configurada con los bloques se
coloca como base de una ventana de alarmas. Una vez configurada la ventana de alarmas, su
emplazamiento en una o varias pantallas del runtime no se realiza desde este editor, sino
desde el graphic designer.
Para poder realizar todos estos bloques y configurar las líneas y ventanas de alarmas
disponemos de un Wizard de alarmas que nos guía paso a paso en su realización. Para
arrancarlo, vaya al menú File->Start Message Wizard.
En system blocks definimos Si los bloques de sistema que deseamos son la fecha, la
hora, el número de alarma...o + el status de la alarma y la duración de la misma...o + la clase
de alarma y el tipo de mensaje.
En User text blocks definimos si no queremos ninguno, si queremos el teto de la
alarma y el lugar donde se produjo, o todos los posibles.
En process value blocks definimos si no queremos bloques de proceso, si queremos
solo 2 o todos.
A continuación definimos la línea de alarmas, eligiendo entre una línea con solo los
bloques de hora, fecha y número de alarma, o todos los configurados anteriormente.
A continuación se definen las clases de mensajes. Los mensajes pueden agruparse por
clases, de tal manera que WinCC puede determinar un color y funcionamiento diferente ante
mensajes de diferentes clases. Aquí se puede elegir entre crear la clase error, que contiene los
tipos de mensajes alarma, fallo, warning, o además crear la clase operación, con los tipos
Check-Back y tipo de operación.
Con esto finaliza el Wizard de configuración. Todos estos pasos también se pueden
realizar de manera manual.
El formato que debe poseer el fichero de texto viene especificado en el Manual del
WinCC.
Esta opción se encuentra en Messages->Import single messages.
Al igual que podemos importar los mensajes, también podemos desde el menú
exportarlos a un fichero de texto. Incluso podemos seleccionar cuales deseamos exportar y
cuales no.
Esta opción se encuentra en Messages->Export single messages.
Vamos a configurar los diferentes apartados del alarm logging sin utilizar ahora el asistente. Lo
primero que vamos a parametrizar serán los bloques de mensajes que necesitemos. Nos
colocamos sobre Message Blocks, y con el botón derecho seleccionamos la opción del menú
Message Blocks.
• Aparece: +
• Desaparece: -
• Es acusada: +/-
En cualquier caso, estos textos pueden modificarse desde el text library a posteriori para
que sean más descriptivos.
La opción With leading zeros rellena de ceros los campos definidos en number of que
no queden rellenos por número de alarma, comenzando por la izquierda.
Indica si el mensaje de alarma va a salir por impresora o no. Se puede seleccionar para
cada línea de alarma la posibilidad de salir por impresora. Este campo nos indica que esto va a
ser efectivo o no.
Este bloque contiene los comentarios que se han realizado sobre las alarmas. Los
comentarios pueden ser introducidos por el operario a posteriori de que se genere la alarma, y
se pueden asociar a la próxima aparición de la alarma mediante este bloque.
El bloque loop in alarma indica que la alarma presente posee la funcionalidad de saltar
a una ventana si se presiona el botón loop in alarm.
Otro bloque de usuario que nos indica donde se ha producido la alarma (p. Ej: Sector
de entrada).
Podemos definir varios valores de proceso, pero normalmente con uno basta. La
asignación del valor que debe configurarse en este campo es individual para cada una de las
alarmas, lógicamente.
indica que alarma acaba de saltar, con un botón que accede a la ventana en la que ya
se encuentra la ventana de alarmas con el histórico de alarmas.
Short Term Archive Window: Ventana que almacena las alarmas en un histórico para
que posteriormente podamos observarlas. El tambor de alarmas puede ser
configurado.
Sequence Archive Window: Archivo secuencial de alarmas. Las alarmas se van
almacenando en él sin límite de almacenamiento.
• El botón selection nos permite seleccionar que bloques son los que se deben almacenar
en el histórico, independientemente de los que estemos representando en pantalla al
aparecer la alarma.
Message Line: En esta ventana seleccionamos la línea de alarmas que debe aparecer
en esta ventana de alarmas.
Parameters:
• Líneas de separación: horizontales y/o verticales.
Title line: Título de la línea.
• Selection: Tipo de selección de la alarma dentro de la ventana. Podemos decidir si la
selección es por celda, o por línea.
• Column title: Coloca encima de cada columna un título descriptivo de la misma.
• Change column Width: Poder cambiar el ancho de las columnas desde el runtime. Si se
realiza click sobre la línea de separación de una columna en el runtime, la columna se
autoajusta al ancho de la misma.
• Shortem Title: Si el título de la columna no se puede representar entero en la columna
debido a que no cabe, seleccionando esta opción se añaden unos puntos suspensivos,
para indicarnos que existe texto oculto.
• Shortem cell content: Si el texto de una celda de un bloque de la línea de alarmas no se
puede representar entero debido a que no cabe, seleccionando esta opción se añaden
unos puntos suspensivos, para indicarnos que existe texto oculto.
• Auto Scrolling: Cuando esta opción está activada, al entrar a la ventana de alarmas, si la
cantidad de alarmas es superior a la que cabe en la ventana de alarmas, salta
automáticamente al final de la pila de alarmas. En caso contrario (opción no seleccionada),
nos muestra desde la primera alarma en pantalla.
Status bar:
• Display status bar: Muestra en la parte inferior de la ventana de alarmas una línea de
status que podemos configurar en la ventana Elements of the status bar.
Las opciones a configurar en la línea de status son:
Date: muestra la fecha actual.
Time: muestra la hora actual.
Number of the messages in the list: muestra el número de alarmas DIFERENTES
actuales en la ventana.
Number of messages in the window: muestra el número de alarmas actuales en la
ventana, independientemente de que se repitan.
Number of messages not yet acknowledged: cantidad de alarmas no acusadas aún,
y que deben serlo.
Lock: Algún tipo de alarmas está siendo bloqueado actualmente, por lo que puede
producirse y no ser representado en la pantalla.
Selection: Se está aplicando una selección o filtrado al histórico de alarmas, de tal
manera que las que se están representando actualmente no son todas las que hay.
Toolbar:
• Display toolbar: muestra la barra de herramientas en la ventana de alarmas.
• Alignement: posición de la barra de herramientas (izquierda, derecha, arriba, abajo).
Message classes: muestra solo las clases de mensaje que seleccionemos (p.
Ej: crear una clase que sea alarmas zona 1 y luego filtrar por este tipo de clase).
Text blocks: filtrar por un determinado bloque (p. Ej: todas las alarmas que
tengan texto en el campo point of error).
Process Value: filtrar por valor de proceso (p. Ej: todas las alarmas que tengan
un valor de proceso asignado).
Otra posibilidad es bloquear alarmas de manera individual y no por grupo (p. Ej: un
nivel de depósito se ha roto y da siempre fallo de desbordamiento). Para ello, deberemos de
generar un grupo, User defined, y añadir las alarmas que deseemos que formen parte de dicho
grupo. Posteriormente lo bloquearemos.
Loop in alarm: permite saltar a una pantalla relacionada con la alarma que
actualmente se está seleccionando (p. Ej: Alarma compresor enfriadora 1 temperatura alta, y
un loop a la ventana en la que se encuentra el compresor, para poder arrancar el motor de
reserva y reducir la temperatura).
Todos los botones de la barra de herramientas poseen una serie de opciones a las que
se accede seleccionando el texto del botón y posteriormente el botón que hay sobre la ventana,
denominado properties.
La última característica que nos queda por ver de la ventana de alarmas es que podemos
visualizar como va a quedar nuestra ventana si pulsamos sobre el icono de la ventana que
aparece en la ventana principal del alarm logging. La primera de las opciones es Window
Preview. La representación se puede apreciar en la imagen inferior.
6.8.1 Introducción
Una clase de mensaje es una agrupación de alarmas que poseen una determinada
característica. Generalmente se utiliza para disponer de un grupo de alarmas que necesitan ser
acusadas porque son muy graves, y otro grupo de avisos, que no requieren acuse y son solo
de información.
6.8.2 Clases
• Acknowledgement Went out: que deba ser acusada la alarma una vez desaparezca.
• Flashing On: que parpadeen las alarma de esta clase cuando estén activas.
• Only initial value: que parpadee solo el primer valor de esta clase que se encuentre
activo.
• Message without status Went Out: Anula el acuse de alarmas al desaparecer.
• Central signal devices:
Separate Ack. Key: asignar una segunda opción de acuse, independiente de la de
hacer desaparecer de la pantalla de alarmas la actual alarma. Las alarmas del grupo
seleccionado, al aparecer habilitan el botón Horn de la barra de herramientas. Se
puede asignar una variable de proceso como alarmas no acusadas, de tal manera que
hasta que no presionemos el botón horn, aunque la alarma se haya acusado,
continuaremos teniendo constancia de que se ha producido alguna alarma en la
instalación. Como el botón horn puede tener una prioridad distinta que el de acuse, se
puede dejar esta opción para que un responsable de control sepa que se ha producido
una alarma pese a que se hayan acusado todas y no haya histórico.
Status text:
Podemos definir los caracteres que aparecen el bloque status display a la hora de
mostrar los mensajes al aparecer, al desaparecer y al ser acusados.
A su vez, todos los tipos que se definan dentro de una clase de alarmas pueden tener
diferentes colores con respecto a los otros tipos, tanto para:
• El color de texto y fondo cuando aparece la alarma
• El color de texto y fondo cuando desaparece la alarma
• El color de texto y fondo cuando es acusada la alarma.
Dentro de cada tipo perteneciente a una clase podemos definir la cantidad de líneas de
alarma que queremos crear para este tipo. Posteriormente deberemos de rellenar los textos
que lleven asociados.
6.9.1 Introducción
Las alarmas analógicas nos permiten generar alarmas a partir de una comparación que
se realiza en el WinCC entre un valor de proceso y un límite generado por nosotros. Esto
descarga al PLC de realizar este tipo de cálculos, pero solo si dicha alarma no tiene ninguna
repercusión posterior sobre el proceso, como tener que arrancar un motor, o hacer sonar una
sirena.
Si nos situamos sobre analog alarm, con el botón derecho podemos seleccionar New.
Los datos a rellenar para generar una nueva alarma analógica son:
• La variable a monitorizar.
• Podemos elegir seleccionar un único mensaje de alarma para todos los límites que
definamos en una alarma analógica, en cuyo caso debemos indicarle el número de alarma
deseado. Si no elegimos esta opción cada límite posterior que generemos generará un
mensaje de alarma diferente. Por ejemplo , si estamos controlando el nivel de un pozo, nos
interesa dejar desactivada esta casilla, ya que deseamos tener un límite de pozo vacío y
otro de pozo lleno. Sin embargo si vamos a monitorizar la temperatura de un motor, puede
ser interesante seleccionar esta opción, ya que solo tendremos un límite de motor
sobrecalentado, no generamos alarma por motor frío.
• Delay Time: Tiempo que debe de estar superado el límite que definamos para que haga
saltar la alarma. Esta opción es interesante en valores analógicos que suelen tener una
cierta oscilación permanente, y no nos interesa que dispare hasta que efectivamente no
haya llegado a sobrepasar el límite establecido (los temas de aguas suelen generar este
rizado sobre un valor continuo, al producir pequeñas olas que falsean la señal de nivel).
Una vez generada la variable analógica, podemos comenzar a crear límites asociados a la
misma. Colocándonos sobre ella y con el botón derecho, seleccionamos new..
Si deseamos archivar en el disco duro las alarmas que se vayan generando, tenemos
que seleccionar en archives cuando seamos guardarlas. Las opciones posibles son:
• Guardar las alarmas en un archivo rotatorio o de tambor (short term archive) y/o
• Guardarlas en un archivo secuencial (sequencer archive).
Desde el icono de archive report podemos acceder a una ventana de selección en la que
podemos definir los bloques que queremos que aparezcan en nuestro report a impresora. Si no
indicamos nada, realizará el report predefinido en el apartado reports para archive reports.
En la parte inferior del alarm logging podemos definir las alarmas que deseamos que
existan en nuestro proyecto.
• Class: Clase a la que pertenece la alarma. De esta clase le derivarán una serie de
propiedades ya descritas anteriormente.
• Type: Tipo de la clase a la que pertenece la alarma. De esta propiedad le derivará su color
de fondo y texto.
• Group: Grupo al que pertenece la alarma. Al agrupar las alarmas en grupos podemos
posteriormente realizar acuses de grupos (acusar varias alarmas a la vez), filtrados (ver
solo las alarmas de un grupo) o reports a impresora (imprimir solo las alarmas de un
determinado grupo).
• Propiedades del mensaje:
Is single acknowledged: la alarma debe ser reconocida de manera individual y no en
un grupo de alarmas.
Trigger horn: Dispara la variable asignada en trigger horn. Recordemos que mediante
la activación de trigger horn, se nos activa un bit de una variable que deseemos una
vez se dispare alguna alarma. El bit continúa activo independientemente de que
nosotros acusemos las alarmas, hasta que se pulsa el botón horn de la barra de
herramientas de la ventana de alarmas. Estos nos puede servir para poner en marcha
un indicador luminoso que permanecerá activo hasta que lo apaguemos con dicho
botón.
• Will be archived: la alarma se guardará en el histórico de alarmas.
• Will be reported: la alarma se imprimirá por impresora con el report de alarmas.
Create with a negative edge: la alarma aparece con un flanco negativo, no cuando aparece la
señal, sino cuando desaparece.
• Triggers an action: la alarma dispara una acción en C que debe ser asignada.
• Event tag: Variable y bit de la variable que activa la alarma.
Acknowledge tag: variable y bit de la variable donde se guarda automáticamente si la alarma
ha sido ya acusada o no.
• Status bit: variable y bit de la variable en el que se encuentra el valor actual de la señal de
proceso (si aún existe la alarma o no).
• Format DLL:
Los demás bloques de usuario se activan si han sido seleccionados a la hora de configurar
la línea de alarmas.
TAG LOGGING
7 TAG LOGGING
7.1 Introducción
El tag logging es la parte del WinCC que se encarga del almacenamiento de los valores
de proceso en el disco duro, así como de mostrarlos tanto en formato de gráfica como de tabla
de valores. Así mismo, permite editar dichos valores a posteriori desde la base de datos.
La presentación del tag logging en pantalla es la siguiente:
Si activamos esta casilla, todas las variables que definamos en los archivos de nuestro
proyecto generarán en el subdirectorio Pde\archivo_de_valores un archivo en el que
almacenan su valor de proceso, componiéndose dicho archivo del nombre de la variable, con la
extensión DBF. El formato Dbase III es exportable por la mayoría de las aplicaciones. El
archivo que genera posee 3 columnas:
• T: Fecha y hora de la adquisición del valor. Este campo es de texto y no separa la fecha de
la hora, por lo que su tratamiento es relativamente difícil, requiriendo de una macro que nos
descomponga los campos en celdas separadas si deseamos posteriormente realizar
consultas por fechas o intervalos de tiempo.
• V: valor del proceso. Este es el valor del proceso que almacena en el archivo.
• F: Código de error de lectura del valor del proceso. Si el valor es correcto, este campo está
a cero.
Los predefinidos aparecen en la figura, pero si deseamos uno nuevo, solo necesitamos
rellenar la pantalla de nuevo timer, o modificar un o existente.
En la imagen se puede ver un nuevo temporizador que actuará cada 3 segundos. Las
opciones son:
• Que se dispare el temporizador solo entrar al WinCC, pese a que no le corresponda aún.
• Que se dispare el temporizador al salir del WinCC, pese a que aún no le corresponda.
• Poder seleccionar la fecha exacta de comienzo del ciclo de disparo. A partir de ese minuto
y ese segundo, comenzará cada 3 segundos a dispararse.
También se nos permite elegir entre los tres tipos de archivos posibles. Los archivos de
WinCC pueden ser:
• Archivos de proceso: archivo que almacena los valores de una o varias variables en el
disco duro.
• Compressed Archives: archivos de valores comprimidos. Se realiza una compresión de
los datos antes de almacenarlos, y una descompresión a la hora de sacarlos de nuevo de
la base de datos. Este tipo de archivos es ideal para el almacenamiento de grandes
cantidades de datos que no requieran un almacenamiento inferior al minuto.
• User Archives: Archivos de usuario.
En el paso 2 del Wizard podemos seleccionar aquellas variables que van a ser
almacenadas en el archivo. Con el botón select podemos ir añadiéndolas a la lista. Estas
variables sólo comparten el lugar de almacenamiento, pero no necesariamente el tiempo de
lectura ni el de almacenamiento, como posteriormente veremos.
Si presionamos con el botón derecho sobre el nuevo archivo de valores que se nos ha
generado en el Tag Logging podemos editar sus propiedades.
Las opciones que podemos modificar son:
• Archive name: podemos cambiar su nombre a posteriori.
• Comment: podemos añadir un comentario sobre dicho archivo.
• Archiving at system starts: Indica si el almacenamiento en el disco duro debe de
comenzar solo entrar en la runtime de WinCC, o cuando nosotros se lo indiquemos con una
función. La opción enabled comienza a almacenar nada más entrar en la runtime, la opción
locked no.
• Archive type: Esta función de solo lectura nos indica de que tipo es nuestro archivo. Esto
quiere decir que una vez generado un tipo de archivo no podrá ser modificado
posteriormente, por lo que tendremos que generar otro y borrar el actual si deseamos
cambiar de tipo de archivo nuestros valores.
• Authorization level: Nivel de autorización requerido para poder leer los valores del
archivo, y para poder editarlos. Hay que tener en cuenta que estos datos son variables
dependiendo del archivo en cuestión, luego se puede hacer archivos protegidos (nivel
elevado de protección) y otros desprotegidos. También se puede dejar desprotegida la
lectura, y proteger la escritura para que solo el responsable pueda modificar los datos en el
archivo.
• Action during start/enabled: podemos definir una acción en C que se ejecutará cada vez
que se habilite la lectura y almacenamiento en el archivo.
• Memory location: donde guardar los valores leídos. Se pueden guardar en la memoria
RAM del ordenador o en el disco duro. Si se selecciona en la memoria del ordenador, el
cálculo para saber cuanta RAM estamos consumiendo es:
Las variables que hemos definido en nuestro archivo, aparecen en la ventana inferior
en forma de tabla. Si presionamos el botón derecho sobre cada una de ellas podemos editar
sus propiedades particulares.
Variables Cyclic Selective: Valores que deseamos guardar en el WinCC solo durante
determinados períodos de tiempo (p. Ej: cada vez que pase un ladrillo por el horno, y mientras
esté dentro, almacenar los valores de presión en el WinCC).
• Also put archived value in tag: determina que variables deben también almacenarse en
esta variable de archivo además de la que se indicó al principio.
• Unit:
• Save on error: permite determinar que valor almacenar ante la aparición de un error en la
lectura de la variable desde el proceso. Las opciones posibles son:
Last value: Almacena el último valor leído desde el administrador de variables.
Substitute value: toda variable dispone de un valor de substitución. Podemos
determinar el almacenar dicho valor frente a un error de comunicaciones.
• Archive upon change: Esta opción permite almacenar el valor exclusivamente si cambia
dicho valor en el proceso. Es muy interesante, ya que permite substituir las carencias del
tag logging en la adquisición de datos realizando programación en el PLC. Por ejemplo,
ante el fallo del acyclic, que nos archiva valores en el flanco de subida y el de bajada,
podemos programar en el PLC una subrutina que cada vez que un bit esté activo, nos
transfiera un valor del plc a otra variable de comunicaciones. Si el valor es el mismo que
poseía se le aumenta o disminuye en una cantidad insignificante para su posterior análisis
desde WinCC. Así, solo adquiere el valor el WinCC cuando se modifica, que en realidad es
cuando existe un bit en el PLC.
• Hysteresis: % que debe de variar la variable de proceso con respecto al último valor
almacenado para que se vuelva a considerar su almacenamiento como necesario. Esta
opción es interesante en valores que está variando ligeramente en el PLC, pero sólo nos
interesa almacenarlos cuando su variación sea significativa, ya que en caso contrario se
convertiría en un almacenamiento continuo de la variable.
Para que una de estas funciones realicen la acción deseada, deben devolver un 1. Así, si
deseamos arrancar el almacenamiento de valores en la gráfica con un bit, lo que haremos será
consultarlo dentro de una función. Supongamos que deseamos arrancar la gráfica cuando un
bit de proceso esté a uno y pararlo con ese mismo bit cuando esté a cero.
Tenemos que generar dos funciones, una para el arranque y otra para la parada.
Seleccionamos como tipo Cycle-selective. El código de las funciones se encuentra abajo
indicado.
int Arrancar_Grafica()
{
if (GetTagBit("NewTag")==TRUE)
{
return(1);
}
else
{
return(0);
}
}
Int Parar_Grafica()
{
if (GetTagBit("NewTag")==FALSE)
{
return(1);
}
else
{
return(0);
}
}
Todas estas propiedades que hemos definido para cada variable de archivo podemos
preconfigurarlas, para que cada vez que definamos una nueva variable no tengamos que
asignárselas de nuevo. Las posibles preconfiguraciones son:
• Process Archive.
• User archive.
• Compressed archive
• Analog tag: Preconfiguración de una variable analógica (mayor que un bit).:
• Binary tag: Preconfiguración de una variable digital (0 o 1).:
Con respecto a las variables digitales, destacar que se puede seleccionar que se
almacenen siempre, frente a un flanco positivo o uno negativo. Lógicamente aquí sólo
existe el ciclo de almacenamiento, ya que no se pueden hacer medias de valores, ni
sumas. Podemos as su vez asignar un texto a el estado 0 y otro al 1 (p. Ej 0=parado y
1=arrancado) para una mayor claridad en la gráfica.
7.6.1 Introducción
Las tendencias de valores son utilizadas para mostrar la evolución de una variable de
proceso en el tiempo de manera gráfica. La limitación más importante es que el eje X siempre
obligatoriamente debe ser de tiempo, por lo que no podemos utilizar las curvas o tendencias
(trends) para realizar una gráfica en la que comparemos la presión con respecto a la humedad,
por ejemplo.
Dentro de una ventana de tendencias podemos tener una o más curvas, cada una con
un color identificativo, y que asociaremos a variables de archivo que formarán parte de un
archivo generado anteriormente, como ya vimos.
Ruler visible while opening the picture: La opción regla visible al abrir la ventana nos
presenta en pantalla automáticamente una ventana auxiliar en la que se van visualizando los
valores instantáneos de las tendencias sobre las que se encuentra la regla que aparece en la
ventana de curvas. Esta regla la podemos desplazar para observar los valores de las curvas en
un determinado instante de tiempo.
Display trends staggered: Muestra las tendencias en gráficas separadas. Esta opción
es interesante en ciertas situaciones en las que los valores de dos o más tendencias van
parejos en el tiempo, por lo que se están solapando, y deseamos observarlos o plasmarlos de
manera individual.
Color: podemos definir el color de la tendencia para poder identificarla con respecto a
las demás curvas.
Con respecto a la solapa tag, aquí se puede definir la variable de proceso con la cual
estamos conectados o almacenando dicho valor. Observar que en tiempo de ejecución
podemos desde esta ventana modificar dicha variable, con lo cual es posible realizar la
operación de cambiar de señal de proceso a representar sin modificar el desarrollo de
En la solapa X Axis podemos definir todas las propiedades que tiene que ver con dicho
eje. Para que estas propiedades sean modificables deberemos encontrarnos en la primera de
las tendencias de nuestra ventana, si hubiera más de una.
• Label: etiqueta de texto que identifica el eje X (generalmente la unidad de tiempo).
• Update: Actualizar o no la ventana de curvas.
• Autorange: Realiza un escalado del eje x, mostrando los último n valores en dicho eje. El
número n es el valor que estipulemos nosotros en el apartado measured.
• Si no seleccionamos autorange, entonces se nos pide una fecha a partir de la cual se
quiere presentar los datos almacenados. Si no seleccionamos la casilla time period,
entonces tenemos que introducir una fecha final, y nos muestra todos los datos en ese
intervalo de tiempo.
• Si por el contrario seleccionamos la casilla time period, se nos pide el tamaño del periodo
de tiempo. Las opciones posibles son:
500 ms.
1 segundo.
1 minuto.
1 hora.
1 día.
cuando estemos intentando representar sólo los valores de bajo rango nos aparecerá
una línea superpuesta al eje X, como si estuvieran todos a cero.
• Trend display: La unión de los puntos de la variable de archivo se puede realizar de varias
maneras en la pantalla:
Stepped trend: mediante escalones cuadrados que unen nuestros puntos.
Fill area interpolated trend: muestra los puntos como un área que rellena del color de
la tendencia. Este tipo impide que otras tendencias se puedan apreciar. En la figura se observa
como la tendencia 2 queda oculta tras la tendencia 1 debido a que ésta última se presenta bajo
el tipo área rellena. Sólo es aconsejable este tipo para una sola curva, o cuando la curva a la
que se le aplica este estilo ocupa la última posición.
Fill area stepped trend: Igual que el anterior pero la unión se realiza mediante
cuadrados y no de manera lineal.
Propiedades de color y límites: en esta ventana podemos definir el color que debe
adoptar la tendencia cuando baje o sobrepase unos límites que nosotros estipulemos.
• Límite inferior: Cuando el valor de la tendencia baje de 30, el color de la misma cambiará
a rojo.
• Límite superior: Cuando el valor de la curva sobrepase 900 cambiará a amarillo.
El ejemplo de abajo muestra esto mismo, con límite inferior de 200 y superior de 800.
En la ventana choose object podemos añadir y restar las curvas que van a componer
nuestra ventana de tendencias. A su vez podemos seleccionándolas editar mediante el botón
Template las características de la ventana. Estas son:
• Status bar: Barra de estado en la que se indica el proceso que está teniendo lugar
actualmente.
• Toolbar: Barra de herramientas con opciones accesibles desde botones ya
preconfigurados.
• Read data from archive inmediately: Leer los datos del archivo al entrar en la ventana.
Cuando existe en el archivo una gran cantidad de datos, puede ser interesante desactivar
esta opción y que no pierda tiempo leyéndolos. Unicamente cuando rebobinemos marcha
atrás en el histórico, leerá los datos del disco duro.
• Font: Fuente de los textos de la escala.
• Color: Color del fondo de la gráfica.
Set parameters: Esta ventana posibilita que un usuario de WinCC parametrice sus
ventana de curvas a su gusto, después de haber configurado el programador la
instalación. Las modificaciones que se realicen, pueden ser de tres tipos:
• Volátiles, que se pierden en cuanto se sale de la ventana actual. Esta situación se
produce si en la ventana Persistence no se selecciona nada.
Primer dato: si la gráfica está detenida, se desplaza al primer elemento del archivo.
Dato anterior: muestra el dato anterior del archivo, hasta llegar al primero.
Dato siguiente: muestra el dato siguiente del archivo hasta llegar al último.
Mostrar curvas: mediante esta opción podemos seleccionar que curvas deseamos
observar en la ventana La ventana de diálogo aparece abajo indicada..
Curva previa al frente: esta opción trae la curva que tengamos en segundo plano al
primero y viceversa.
7.7.1 introducción
Las tablas de valores permiten representar los datos de los archivos en forma de
tablas, para poder comparar los valores numéricos, además de poder editar dichos valores
directamente desde las mismas, lo que posibilita la modificación de los datos de proceso con
posterioridad al desarrollo de los mismos.
Desde table window template del Tag logging podemos crear una tabla de valores.
Dicha tabla podrá contener una o más columnas, cada una de ellas asociada a un valor de un
archivo que hayamos previamente generado.
Editar una columna: Presionando este botón y seleccionando una celda de una
columna, si dicha columna tiene activada la opción Can be edited, será posible
modificarla.
Enviar la columna previa a la primera posición.
TEXT LIBRARY
8 Text Library
8.1 Introducción
Text Library es la parte el WinCC que se encarga de gestionar los mensajes de textos.
Cuando necesitamos realizar una aplicación que deba cambiar sus textos según el idioma
seleccionado, necesariamente deberemos realizar una asignación de dichos textos en un
idioma u otro.
Mediante text library se consigue enlazar a través de un número identificativo cadenas
de texto de diferentes idiomas. Dicho número se asigna automáticamente a los controles que
utilizamos en el Graphic Designer. De esta manera, cuando dentro del WinCC en modo runtime
cambiamos de código de idioma, automáticamente sustituye los textos asignados a un número
en un idioma por el correspondiente.
8.2 Idiomas
Lo primero que necesitamos en el Text Library es generar un nuevo idioma, ya que por
defecto solo nos genera la columna en Inglés. Evidentemente, el hecho de que el idioma sea el
Inglés no implica que podemos poner los textos en castellano, y no tener que cambiar de
página de idioma.
Sin embargo, si deseamos disponer de dos idiomas, lo correcto sería generar nuestros
mensajes en el idioma correspondiente (español o los diferentes dialectos, si así
correspondiera en la provincia).
Vamos a generar dos nuevos idiomas, Español y Catalán. Para ello, en el menú
Options->Add language podemos añadir los idiomas que soporta el WinCC.
Nos parecen dos nuevas columnas, cada una con el idioma correspondiente. Ahora,
debemos de rellenar todos los mensajes que aparecen en la columna inglés, traduciéndolos
nosotros mismos al idioma correspondiente.
U SE R
ADMINISTRATOR
9 User Administrator
9.1.1 Introducción
En los sistemas de privilegios por nivel, si un usuario dispone de nivel 3, podrá realizar
todo lo que pueden realizar los de nivel 2, más aquello que se permite solo a los de nivel 3.
Cuando se bloquea una acción para nivel de password 3, significa que todos los que dispongan
de nivel igual o superior a 3 podrán realizarla.
En WinCC esto no es así, definiéndose en lugar de niveles, capacidades de realizar
cosas (cambiar valores en archivos, entrar a determinadas pantallas, resetear alarmas, etc..).
Dichas capacidades pueden ser o no compartidas por usuarios. Estos usuarios se
pueden agrupar en grupos, sólo para una más fácil identificación, ya que no es imprescindible
que compartan las mismas capacidades dos usuarios de un mismo grupo.
Vamos a crear un grupo de usuarios que se llame operadores. Para ello, presionando
sobre el grupo de administración el botón derecho, seleccionaremos add group. Introducimos
el nombre del grupo y presionando de nuevo sobre el grupo creado, le añadimos dos usuarios.
Las capacidades que dispone un usuario aparecen con un piloto rojo indicativo
seleccionadas.
Para añadir una capacidad a un usuario, simplemente hay que hacer doble click en el
lugar donde debe aparecer el piloto rojo de la capacidad.
Para deshacer dicha operación es necesario realizar de nuevo doble click en el mismo
lugar.
Lógicamente, lo primero que debemos realizar, será estudiar los diferentes bloqueos o
límites que requerimos en nuestro desarrollo para posteriormente asignárselos a los usuarios
creados.
Un bloqueo es una acción cuya capacidad de realización diferencia a unos usuarios de
otros. Normalmente se suele bloquear el acceso a determinadas pantallas, la impresión de
determinadas gráficas, la activación de determinados elementos de campo (p. Ej. pasarlos a
manual y que no realicen su actividad en automático) y sobretodo la modificación de los valores
de proceso, ya sea en producción (bloqueo de cajas), como a de manera posterior
(modificación de archivos de proceso).
Para crear un nuevo bloqueo o límite que permita definir una capacidad a un usuario,
debemos seleccionar en el menú Table-> Add New Authorization Level.
Nos indica un número de nivel de autorización, que debemos aceptar como bueno, ya
que no podemos duplicar dicho número indicado. Esta acción nos lleva a disponer de una línea
nueva con el número de orden indicado, pero que no dispone de ningún texto descriptivo, por lo
que será de difícil asignación dicho nivel si posteriormente olvidamos a que correspondía este
bloqueo.
Para añadir un texto descriptivo debemos realizar doble click en la casilla del texto, e
introducir un comentario que nos resulte intuitivo para el bloqueo que realiza dicho nivel. La
asignación del privilegio del bloqueo a los usuarios se realiza como vimos anteriormente.
Para cambiar el login o nombre identificativo solo es necesario realizar un solo click
sobre dicho nombre y se podrá curiosamente cambiar, sin necesidad de ningún tipo de clave,
por lo que un superusuario puede modificarlo a su entera voluntad sin ninguna autorización por
parte de los mismos usuarios.
Una vez se ha activado un usuario, el sistema dispone de los privilegios derivados del
nivel de dicho usuario. Hasta que dicho usuario no se da de baja en el sistema, los privilegios
continúan activos, por lo que si un usuario deja el sistema activado con su login, un par de
horas después puede utilizar el sistema WinCC cualquier usuario sin necesidad de darse de
alta en el mismo y utilizando todos los accesos habilitados en función del nivel del anterior
usuario aún en activo.
Como el olvido de dejar activado el password es muy frecuente con el tiempo, resulta
inservible un sistema de passwords que siempre se encuentra habilitado. Para evitar este
punto, todo usuario dispone de una casilla de desconexión automática en base de minutos.
Las acciones a realizar que requieren un password determinado siempre van asociadas a un
objeto. Todos los objetos disponen de una propiedad en miscelaneous que se llama User
Level. Si realizamos doble click sobre ella, nos aparece una ventana en la que se muestran los
diferentes niveles generados anteriormente con el user administrator. Podemos seleccionar
uno, en cuyo caso todos los usuarios que deseen realizar las acciones asociadas a dicho
objeto, deberán disponer previamente del nivel requerido.
GLOBAL SCRIPT
10 Global Script
10.1 Introducción
El global script es un compilador de C incorporado con el WinCC, que nos permite
realizar compilaciones de código objeto (con un formato un tanto especial, ya que no lo deja en
obj) sin necesidad de salir del propio entorno.
Este código generado puede ser añadido directamente al propio runtime y generarse
cada cierto tiempo, o posteriormente asociarse a un evento de un objeto. Si desde el editor del
Graphic Designer seleccionamos realizar una acción en C, automáticamente se nos activa el
global script para permitirnos editar dicha acción en el compilador de C.
Vamos a realizar una función de proyecto, que mediante código C nos suma dos
valores enteros y nos devuelve el resultado. El código es el siguiente:
int Temporal;
Temporal=Valor_1+Valor_2;
return(Temporal);
#include "apdefap.h"
int Temporal;
int temp1,temp2;
Las funciones internas son las básicas con las que se puede trabajar a la hora de
realizar funciones o acciones en C. Son propiamente las instrucciones de programación de que
dispone el WinCC para poder realizar las subrutinas por código.
Dichas funciones también son comunes y se encuentran en el subdirectorio aplib, pero
se diferencian de las anteriores en la extensión, que en este caso es icf.
Además, no pueden ser editadas las funciones internas, y por lo tanto no se pueden
modificar por parte del usuario.
10.2.4 Actions
Las actions son funciones que son llamadas o disparadas generalmente de manera
independiente a los objetos de las pictures. Se utilizan para realizar disparos de acciones por
tiempo (cada 10 segundos hacer x), para realizar acciones frente a cambios de variables
(cuando cambie la variable x o la y, realizar su suma), y para ser llamadas cuando acontecen
ciertos eventos (cuando finalice la gráfica, cuando el valor ha sido superado, etc..).
Existen dos tipos de acciones, las comunes a todos los ordenadores de nuestro
proyecto, que se agrupan bajo el epígrafe de Global Actions, y las que pertenecen
exclusivamente a nuestro ordenador, que se agrupan bajo el nombre dado a nuestra estación.
En sistemas monopuesto la diferencia es inexistente, dando igual en qué apartado se
genere la acción para luego poder ser llamada.
Una acción se almacena siempre en un fichero de extensión pas, que suele guardarse
en el subdirectorio pas de nuestro proyecto. Si la generamos como acción local (de nuestra
estación), se almacenará en el pas que cuelga del subdirectorio generado con el nombre de
nuestra estación. Si por el contrario la generamos global, se almacena en el subdirectorio pas
de nuestro proyecto.
Una acción no es una función, por lo que no podemos:
• Ni definir el valor de retorno (siempre será un int). Por lo tanto, deberemos terminar con un
return que indique si ha finalizado adecuadamente la acción.
• Ni cambiarle el nombre, que por defecto es gscAction.
• Ni pasarle parámetros de entrada, ya que siempre es de tipo void.
Por lo tanto, el nombre por el que luego la identificaremos no será el de la acción (que es
gcsAction), sino el del archivo en el que la almacenamos, que finaliza en extensión pas.
En event podemos seleccionar por ciclo standard, con lo cual podemos asignar la
llamada a un ciclo de usuario personalizado, o por hora, día, semana, mes o año. En este
segundo caso, nos permite indicar a partir e que fecha u hora debe empezar a realizar dicha
acción.
• Tag: Podemos disparar una acción cuando alguna o varias variables cambien de valor.
#pragma code(“NOMBRE_DE_LA_DLL.DLL”)
#include “NOMBRE_DE_LA_CABECERA.h”
#pragma code()
Una variable local es toda aquella cuyo ámbito de acción se circunscribe a la subrutina
en que es definida, mientras que una variable global es accesible desde cualquier subrutina
generada en WinCC.
En numerosas ocasiones se utilizan en WinCC variables internas para realizar tareas
que con variables globales quedan fácilmente solventadas.
Para definir una variable local, simplemente hay que declararla dentro de una función o
evento. Sin embargo para definir una variable global:
• si estamos declarándola en una acción de C, se debe declarar antes de la
declaración de la función:
int variable=0;
void subrutina()
{
• si estamos declarándola en una propiedad o evento, deberemos de antecederla de
la instrucción extern:
void OnProertyChange(…)
{
extern int variable;
a=0;
Nota: Si declaramos una variable externa sobre una función standard, esta
función existirá en todos los proyectos que generemos.
REPORT DESIGNER
11 REPORT DESIGNER
11.1 Introducción
El módulo report designer se encarga de todas las tareas relacionadas con la impresión
de datos y documentos desde WinCC a una impresora o a un archivo de texto. Un report es un
documento diseñado previamente que posee una serie de campos, en el momento de enviarse
el documento a impresora o fichero, toman el valor de los datos con los que están relacionados
en la propia base del WinCC.
La finalidad lógica de dicho reports a impresora es permitir al usuario tener constancia
en papel de un resumen organizado de los valores del proceso, alarmas, o estado de la
instalación en un momento determinado.
Dentro del apartado report designer existen tres subdivisiones, cada una con una
finalidad distinta.
11.3 Layout
Si presionamos con el botón derecho sobre el layout, podemos ver sus propiedades.
Repasemos las más importantes:
Layout:
• Name: nombre del objeto layout.
• Context: a que contexto debe relacionarse este layout. Desde el graphic designer existen
asignaciones a layouts de sistema a la hora de imprimir determinadas acciones (p. Ej., el
botón de impresión de alarmas desde la ventana de alarmas está asignado a un contexto.)
Geometry:
• Width: ancho de la página.
• Height: alto de la página.
• Paper size: formato de tamaño del papel en que se imprime el layout (carta, A4,etc..)
• Orientación: Vertical o apaisado.
• Left print margin: margen izquierdo a partir del que se empieza a imprimir.
• Top dinamic margin: margen entre la parte superior de la página y el comienzo de la parte
dinámica del documento. Estas distancias determinan la anchura de la parte gris del layout
(cabecera y pie de página).
Miscelaneous:
• Cover sheet: Todo layout puede tener una página inicial, en la que se puede introducir los
textos informativos al respecto del tipo de layout, la instalación en la que se genera,
etc…Aquí se determina si esta página inicial debe de aparecer o no en el documento final.
• Final page: lo mismo, pero con una página de finalización de documento.
Visualizar parte estática del documento. Solo puede modificar la parte cabecera y
pierde del documento.
Visualizar parte dinámica del documento. Solo se puede modificar la parte central, no la
cabecera ni el pie de página.
Como en el graphic designer, lo más importante del layout serán los objetos que
insertemos en el mismo. Disponemos de una ventana en el que se nos muestran los mismos
por categorías.
Los objetos dinámicos requieren una conexión, que es el vínculo con el sistema que
determina que valores del mismo deben plasmarse en el objeto a la hora de la impresión. En
este caso, si queremos imprimir:
• las pictures de WinCC: deberemos seleccionar General Display de picture. Nos
mostrará todas las imágenes diseñadas, con el tamaño que le demos a dicho objeto.
• Archive data selection: archivo del que hay que sacar los datos y tendencias a mostrar en
la gráfica.
Dynamic Table: tabla de datos cuyas celdas se rellenan de los datos indicados
mediante connect. Se utiliza para mostrar todo tipo de datos numéricos y de texto, en oposición
a la anterior que mostraba dibujos y gráficas. Las posibilidades dentro de connect son muy
amplias, por lo que ejemplificaremos creando una lista de valores de proceso en impresora.
Dentro de tag logging runtime, tag table se encarga de mostrar una tabla con los
valores de variables de proceso durante un periodo de tiempo determinado. Asignamos esta
conexión a la tabla creada.
De esta manera se pueden realizar tablas de datos por impresora, listados de alarmas,
y en general cualquier representación de datos durante el tiempo o listas almacenadas en la
base de datos, ya sea del desarrollo CS o de runtime RT.
La impresión por líneas se utiliza para mostrar generalmente las alarmas o eventos de la
instalación en tiempo real por impresora.
Podemos definir la cantidad de líneas que queremos que ocupe una hoja, los
márgenes, y los textos de cabecera y pie de página. Todas estas opciones evidentemente
están ideadas para una impresora matricial que solo utilizaremos para caracteres de texto.
Definidos estos parámetros, no queda determinar el formato del mensaje que vamos a
sacar en la línea de layout. Para ello, si seleccionamos el botón Selection de esta ventana,
podemos acceder a los bloques que hayamos creado en la parte de Alarm logging. Mediante
estos bloques confeccionamos nuestra línea.
Los archivos de line printer poseen la extensión rp1 y se almacenan en el subdirectorio
Prt de nuestro proyecto.
11.5 Jobs
Un job o trabajo es un fichero que vincula nuestro layout o documento con la impresora y
el momento en que se debe imprimir dicho documento.
En la ventana podemos observar el nombre del trabajo o job, y el layout al que está
asociado. La P o F que aparecen después del nombre del layout significan respectivamente
Printer y File, indicando si el trabajo está configurado para salir por impresora, a un fichero o a
ambos.
Al igual que en los layouts, ya existen jobs configurados por le sistema, que nosotros
podemos modificar, pero no debemos borrar, ya que son los que utiliza WinCC.
Si realizamos un nuevo job, podemos acceder a sus propiedades que son:
Printer setup nos permite seleccionar la impresora de todas las que posea el sistema
por la que deseamos imprimir. Podemos indicar hasta 3 impresoras si existen en el sistema,
para que si una de ellas actualmente está desconectada o no responde (falta de papel, etc..),
poder imprimir por la siguiente que esté en la lista asignada.
También podemos exportar el documento o report a un fichero emf en el disco duro. En
este caso, se genera en nuestro proyecto un subdirectorio llamado Prt_Out, dentro del cual se
genera otro directorio con el nombre del job más la fecha y la hora en que se imprime, donde
se almacena cada página de nuestro documento en formato EMF (gráfico).
Los iconos de un job indican si está configurado para disparase a través de un evento
de tiempo de manera automática o no. En la imagen se aprecia que el primero arrancará por
tiempo, mientras que el segundo deberá de ser llamado desde el graphic designer mediante la
función en C de ejecución de reports.
Existe la posibilidad de poder realizar una visualización previa del report sin necesidad
de esperarse al evento de tiempo ni tener que llamarlo desde C. Si presionamos sobre el job
con el botón derecho estando el runtime activado, podemos seleccionar Job Preview, con lo
que podremos observar como nos quedaría la impresión en el momento actual, e incluso
imprimir desde esta ventana el report.
EJEMPLO BÁSICO
12 EJEMPLO BÁSICO
12.1 Introducción
Para ejemplificar todo lo visto hasta ahora vamos a realizar un ejemplo de las diferentes
posibilidades a la hora de configurar las pantallas del WinCC. Comenzaremos por las
características básicas a la hora de realizar una instalación de control, para posteriormente
introducirnos en el posibilidades más particulares.
Comenzaremos creando un nuevo proyecto de nombre DUNKER. Lo primero que
necesita nuestro proyecto es un botón para desactivar la runtime desde la propia runtime de
WinCC.
Creamos una picture desde el graphic designer que se llame MAIN.PDL. Colocamos
un botón como muestra la figura, y tenemos dos opciones:
• utilizar el asistente de Exit WinCC Runtime
• o colocar la instrucción DeactivateRTProject (); en el evento Mouse action.
Comprobamos que podemos saltar de una a otra con el teclado o con el ratón.
Vamos a ver como podemos activar un piloto en pantalla que cambie al color verde
cuando se active un bit en el PLC. Para ello, crearemos una caja I/O, con una variable interna
de nombre CONFIRMACION_MARCHA de 32 bits unsigned. Creamos también un círculo
quedando la imagen siguiente:
En este caso nos interesa que cambie de color cuando cambie dicha variable
únicamente, aunque no siempre será así.
Este tipo de configuración nos permite chequear el estado de un bit de una variable de
comunicaciones. Por lo tanto, lo más interesante será agrupar todas las variables binarias
(confirmaciones de marcha, estados manual/automático, etc..) en variables lo más grandes
posibles. En el caso de S7 el tamaño será de 32 bits, mientras que en el caso de S5 de 16 bits.
Si seleccionamos evaluate status of tag podemos indicar un color especial frente a
errores de comunicaciones, fallo en la conversión de datos y demás errores que indican que el
valor a representar no corresponde al estado real de la variable asociada.
Esta opción está pensada para las variables de comunicaciones. Con esto cuando el bit
0 de la variable.
Como sabemos WinCC tiene una biblioteca de imágenes y botones. Existen algunos
ellos que ya vienen preconfigurados para representar un estado binario (pilotos de aviso).
Seleccionamos la biblioteca y en Global Library->Smart Objects->Toggle Buttons
elegimos el botón de la figura.
En las propiedades del piloto, asignamos a tag assignement la variable igual que hicimos
anteriormente.
Con esto, cuando el bit valga uno aparece un piloto amarillo, y cuando valga cero es
rojo.
Puede ser que la imagen de un piloto amarillo no sea la ideal para representar el
estado del motor en marcha y deseemos modificarla para introducir nuestra propia imagen.
Para ello, en el menú contextual del objeto seleccionamos Customize Object->Edit. Ahora
seleccionamos Configuration Dialog, y nos aparece la asignación de imágenes que realiza el
objeto. Simplemente tenemos que asignar la que nosotros deseemos. Una vez funcione el
objeto según nuestros deseos, debemos volver a la opción Customize Object->Finish
Editing.
En realidad, WinCC crea un nuevo objeto al que asigna dos wmf y el siguiente código:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
BOOL value;
LINKINFO plink;
PDLRTGetPropEx(0,lpszPictureName,lpszObjectName,"Toggle",VT_BOOL,&value,NULL,
NULL,0,NULL,NULL);
if(value) value =FALSE;
else value = TRUE;
PDLRTGetLink(0,lpszPictureName,lpszObjectName,"Toggle",&plink,NULL,NULL,NULL);
//Rückgabe-Typ :BOOL
A veces nos interesa representar imágenes dependiendo del estado del bit de una
variable (compuerta abierta o cerrada).
Para ello, lo primero que necesitamos son dos imágenes. En la biblioteca disponemos
dentro de global library->Valve 3D de una válvula de paso. La añadimos a nuestra picture y la
desagrupamos.
Los objetos de la biblioteca generalmente son un grupo de otros objetos. Para
desagrupar el objeto seleccionamos del menú group object->Ungroup. Ahora modificamos el
color de la tubería para que adquiera el color azul (paso de agua).
Por último volvemos a agrupar el objeto disponiendo del de la biblioteca y el
modificado.
Mediante este sistema podemos animar imágenes en relación a un bit de una variable.
Ya tenemos configurado el text list para que cuando cambie el bit nos represente dicho
estado con un texto.
Los valores analógicos en S7 ya pueden ser tratados mediante números reales, por lo
que vamos a elegir esta opción en el ejemplo para obtener mayor resolución. Creamos una
variable interna denominada VALOR_ANALOGICO de tipo Floating point 32. Seleccionamos la
caja I/O y realizamos la siguiente parametrización:
También podemos definir la frecuencia de flashing como fast y el color de flashing off
igual al del fondo de la caja. Esto dará sensación de desaparecer de la pantalla y volver a
aparecer.
Ahora ya puede guardar los cambios y comprobar el resultado introduciendo valores
entre 0 y 21 dentro de la caja I/O en el runtime.
Representar valores analógicos mediante barras es muy sencillo. Basta con asignar el
valor a representar (que en nuestro caso continúa siendo el de la caja I/O) y parametrizar unos
máximo y mínimo de barra.
Nosotros realizaremos un ejercicio en que estos valores máximos sean a su vez
parametrizables.
En la picture CONSULTA_ANALOGICA, introducimos una barra, Y tres cajas de I/O
para controlar los valores de mínimo, máximo y fondo de escala, como muestra la figura.
Con esto podemos modificar la escala y observar la tendencia del valor (crece o
disminuye). Seleccionamos change color en segment, para que cambie de color por segmentos
la barra.
Además de las barras, podemos representar los valores analógicos mediante un control
que existe en WinCC llamado gauge control. En realidad el gauge control es un control OCX
suministrado por WinCC, por lo que para poder crear un objeto gauge debemos insertar un
OLE Control. De la lista que se nos suministra elegimos WinCC gauge control. La apariencia
del control es la siguiente.
Vamos a repasar las propiedades de dicho control, ya que algunas de ellas son muy
interesantes a la hora de representar los valores analógicos en un proceso.
En OLE control properties tenemos:
• backcolor: color de fondo del circulo indicador.
• Background picture: podemos indicar un bitmap como fondo del indicador.
• BevelInner: Tamaño del borde del cuadro que rodea al indicador por su cara interior.
• BevelOuter: Tamaño del borde del cuadro que rodea al indicador por su cara exterior.
• BevelWidth: Tamaño del propio cuadro que rodea al indicador.
• Center Color: color del círculo central de la aguja del indicador.
• NeedleColor: color de la aguja del indicador.
• Show danger: mostrar el trozo de la escala que indica zona peligrosa superior (color rojo
escala).
• Show warning: mostrar el trozo de la escala que indica zona peligrosa inferior (color
amarillo escala).
• Tic color: color de las divisiones de la escala.
• ShowNormal: Mostrar la parte de la escala que esta entre los límites máximo y mínimo
(parte verde).
• Show DecimalPoint: Mostrar los números de la escala con un decimal o no.
• ShowPeak: Muestra una línea indicando el límite que ha alcanzado el valor por arriba o por
debajo (el pico máximo o mínimo que alcanzó el proceso).
El control sobre los bits de una variable del PLC es una de las facetas fundamentales
en la configuración de un sistema scada. La mayoría de las acciones que implican dicho control
se basan en activar o resetear bits que conforman una palabra dentro de la memoria del PLC.
La variable de comunicaciones a controlar puede ser directamente una salida de PLC,
aunque lo más común es utilizar un estado de manual para el control por ordenador y un
estado de automático para el control a través del programa de PLC.
Nuestra intención es activar un bit en una variable interna a través de un botón. Para
ello, creamos una picture llamada ACTIVACION_BIT.PDL, que posee el siguiente aspecto:
Por último debemos indicar el bit sobre el que se debe realizar la acción. Estos pasos
son idénticos para el segundo botón, salvo que en lugar de elegir setear el bit se elige resetear
el bit. Sólo queda guardar las modificaciones realizadas y probar el runtime.
DWORD dwHelp1,dwHelp2;
dwHelp1=GetTagDWordWait("MOTORES");
dwHelp2=dwHelp1|4096;
SetTagDWordWait("MOTORES",dwHelp2);
Para que al levantar la presión sobre la tecla desaparezca el bit el código debe de
asignarse en el evento keyboard->release y es el siguiente:
DWORD dwHelp1,dwHelp2;
dwHelp1=GetTagDWordWait("MOTORES");
dwHelp2=dwHelp1&(0xFFFFFFFF^4096);
SetTagDWordWait("MOTORES", dwHelp2);
Nota:
Si vamos a trabajar sólo con el teclado, debemos
recordar siempre que:
• se debe asignar una hotkey al objeto.
• En el evento mouse action del mismo se debe
realizar una llamada setfocus, ya que es el único
evento que realiza la tecla hotkey , por lo que si en
el mismo no tomamos el foco a nuestro objeto, no
se realizarán los eventos de teclado anteriormente
descritos.
Otra posibilidad es activar o desactivar varios bits de una misma palabra a la vez. Los
pasos a seguir son similares al primer caso, salvo que el Wizard será distinto. Creamos dos
nuevos botones según la figura:
Además de poder activar bits mediante botones estándar de Windows, en los sistemas
de control se utiliza la superposición de dos imágenes que simulan interruptores de parado y
arrancado. Mediante la pulsación sobre esta imagen se activa el elemento y se visualiza su
estado. Con una nueva pulsación se desactiva el bit y se vuelve al estado inicial.
En WinCC, esta posibilidad ya esta contemplada en la biblioteca dentro de Smart
Objects. Todos los Toggle Buttons poseen dos imágenes, y lo único que tenemos que hacer
es asignar a la propiedad Tag Assignement la variable que se debe controlar desde estos
botones.
if (GetTagBit("VARIABLE_BOOL")==TRUE)
{
dwHelp1=GetTagDWord("CONFIRMACION_MARCHA"); //Return-Type :DWORD
dwHelp2=dwHelp1|8;
SetTagDWordWait("CONFIRMACION_MARCHA",dwHelp2);
}
else
{
dwHelp1=GetTagDWord("CONFIRMACION_MARCHA"); //Return-Type :DWORD
dwHelp2=dwHelp1&(0xFFFFFFFF^8);
SetTagDWordWait("CONFIRMACION_MARCHA",dwHelp2);
}
WinCC dispone de un objeto propio además del ya visto de Windows para poder
introducir y visualizar a la vez valores analógicos en el proceso. Este objeto se encuentra en
Ole Control->Slider Control. La imagen es la siguiente:
El problema que tiene este objeto es que al asignar la propiedad position, solo es de
lectura, pero no modifica el valor de proceso al que se asigna al modificar la posición del slider
el usuario.
Esto se solventa añadiendo el siguiente código C en el evento Miscelaneous del
objeto slider.
#include "apdefap.h"
void Change(char* lpszPictureName, char* lpszObjectName , long Position)
{
SetTagDWord("CONFIRMACION_MARCHA",Position); //Return-Type :BOOL
}
Algunos objetos, como un cuadrado, poseen la propiedad Dynamic Filling, que les
permite rellenar su fondo en función de un valor de proceso. El único inconveniente es que el
valor es escalado entre 0 y 100, de tal manera que si el valor de proceso pasa de 100, el objeto
queda completamente rellenado, sin mostrar nuevos incrementos.
Para solucionar esto, se puede utilizar el escalado de variables que permite el Tag
Management, pasando del valor de proceso a un valor entre 0 a 100.
EJEMPLO AVANZADO
13 Ejemplo avanzado
Nota: todas las variables del canal DDE se consideran variables de comunicaciones,
por que es necesario tenerlas en cuenta a la hora de comprar una runtime de un determinado
número de tags.
Si deseamos acceder a variables que se encuentren en la hoja 1 de un libro de excel,
basta con realizar la parametrización del enlace que aparece en la imagen siguiente.
• Setup attemps: veces que se debe de permitir realizar la comunicación DDE entre las
aplicaciones:
Infinite: se permitirá comunicar mientras esté activo el canal DDE entre las
aplicaciones (ninguna de las dos se cierre).
Quantity: se permitirá comunicar un número determinado de veces entre las
aplicaciones.
Sin embargo, para asignar un enlace a otra hoja que no sea la primera, en el apartado
Topic es necesario indicar el siguiente acceso:
[ejemplo.xls]Hoja2
Los botones Leer() y Ecribir() poseen asociadas dos macros (que en el ejemplo se
llaman setvalue() y getvalue(), pero que podemos denominar como deseemos.
En realidad dichas macros son unas pequeñas instrucciones en visual basic, que
vamos a explicar de manera personalizada (simplificando el ejemplo suministrado por
DemoV4).
Sub GetValue()
Rem----------------------------------------------------------------------
Rem Leer valores de WinCC desde Excel
Rem----------------------------------------------------------------------
ActiveCell.FormulaR1C1 = Str(value)
End Sub
Rem///// end /////////////////////////////////////////////////////
La macro setvalue para activar las dos primeras variables del ejemplo puede ser la
siguiente:
Sub SetValue()
Rem----------------------------------------------------------------------
Rem ESCRITURA DE VALORES DESDE EXCEL A WINCC
Rem----------------------------------------------------------------------
End Sub
Una de las grandes ventajas de utilizar la comunicación OLE entre aplicaciones es que
no consume variables de comunicaciones, a diferencia de DDE, por lo que son gratuítas,
mientras que las segundas deben de comprarse.
La exportación de datos es uno de los procesos más frecuentes para poder tratar la
información almacenada por WinCC del proceso. Estos datos se pueden tratar a través de
Excel y Access como aplicaciones ofimáticas más comunes. En realidad, el formato CSV, que
se suele utilizar para importar datos a Excel, es este mismo tipo de exportación (a fichero de
texto, separando los diferentes campos por un operador (en este caso una coma).
Por consiguiente, la exportación a ficheros txt es una manera sencilla de poder obtener
datos de la base sql anywhere en la que almacena WinCC la información y poder plasmarla
mediante cualquier procesador de textos para combinar dicha información con un documento
(p. Ej. Un informe realizado con Word).
Vamos a realizar un nuevo proyecto que se denomine Exportar, y que cuelgue del subdirectorio
raíz C:\.
Nos vamos al tag logging y creamos un archivo de nombre ARCHIVO, en el que
almacenaremos el valor de VARIABLE cada segundo. Creamos una tabla que contenga en la
columna 1 el valor de VARIABLE del archivo ARCHIVO.
Nos creamos una picture main.pdl como la figura:
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char*
lpszPropertyName, UINT nFlags, int x, int y)
{
ProgramExecute("ISQL.EXE -q -b -c
UID=DBA;PWD=SQL;DBF=C:\\exportar\\exportarRT.DB;DBN=CC_Exportar_99-01-
29_21:17:03R; read C:\\exportar\\DB\\CONSULTA.SQL");
Volvemos al WinCC y activamos en COMPUTER la parte del runtime del tag logging, y
definimos como imagen inicial esta picture creada (en nuestro ejemplo como siempre la hemos
denominado MAIN.PDL).
En realidad lo que hemos hecho antes ha sido llamar a una utilidad de SQL Anywhere
llamada ISQL que se ha encargado de realizar la exportación.
También podemos llamar directamente desde Windows al ejecutable isql.exe. En la
conexión deberemos de pasar los parámetros DBA y como password SQL:
Podemos desde la ventana del interactive SQL realizar las consultas que deseemos
cargando nuestro fichero *.sql en que realizamos la consulta.
Creamos otra picture denominada AYUDA_1.PDL que estará compuesta por un static
text y un botón como se aprecia en la figura inferior. Es importante recordar que en el static text
el poder introducir diferentes líneas de texto se consigue presionando la tecla ENTER + SHIFT.
Asignamos a la picture Window que hemos creado la picture AYUDA_1.PDL con las
siguientes propiedades (además de DISPLAY=NO):
Queremos que presionando con el botón derecho del ratón sobre el botón AYUDA
CON EL BOTON OK aparezca esta ventana de ayuda, y que desaparezca al presionar el
botón ACEPTAR. El código en el botón AYUDA CON EL BOTON OK en el evento Press
Rigth es el siguiente:
SetVisible("AYUDAS.PDL","Picture Window1",1);
SetVisible("AYUDAS.PDL","Picture Window1",0);
Otra posibilidad a la hora de plasmar ayudas contextuales es que con el botón derecho
pinchado sobre el objeto seleccionado aparezca una ventana de ayuda que desaparece
automáticamente después de un tiempo predeterminado.
Para realizar esto, utilizaremos la picture AYUDA_1.PDL pero borrándole el botón
ACEPTAR, con lo que para que desaparezca tendremos que programar una acción en C.
SetVisible("AYUDAS.PDL","Picture Window1",1);
La idea es activar una variable interna de tipo bit al mostrar la ventana de ayuda. Esta
variable interna, activará una acción en C que irá contando automáticamente hasta llegar a 5
segundos, tiempo en que ocultará la ventana de ayuda.
En la picture AYUDA_1.PDL, en el evento Open picture programamos:
SetTagBit("TRIGGER_AYUDA_1",TRUE);
TRIGGER_AYUDA_1 es una variable interna que nos hemos definido de tipo BOOL y
que debe de disparar una acción en C. Nos vamos al Global Script y creamos una nueva
acción de tipo global que contenga el siguiente código:
#include "apdefap.h"
return(lpszPictureName);
Esta función nos devuelve el nombre de la ventana desde la que ha sido llamada.
Para ejemplificar esto último vamos a crear una nueva picture llamada
INTRODUCCIÓN.PDL que posee el siguiente aspecto:
Las variables asociadas a los campos de I/O van a ser las conocidas
VARIABLE_ANALOGICA, VALOR_MINIMO y VALOR_MAXIMO.
Ahora creamos otra nueva picture llamada CAJA_INTRODUCCION.PDL con un tamaño de
300*400 y el siguiente aspecto:
SetTagFloat("TEMP_VARIABLE_ANALOGICA",GetTagFloat("VARIABLE_ANALOGICA"));
SetTagFloat("TEMP_VALOR_MINIMO",GetTagFloat("VALOR_MINIMO"));
SetTagFloat("TEMP_VALOR_MAXIMO",GetTagFloat("VALOR_MAXIMO"));
Y el de aceptar:
SetTagFloat("VARIABLE_ANALOGICA",GetTagFloat("TEMP_VARIABLE_ANALOGICA"));
SetTagFloat("VALOR_MINIMO",GetTagFloat("TEMP_VALOR_MINIMO"));
SetTagFloat("VALOR_MAXIMO",GetTagFloat("TEMP_VALOR_MAXIMO"));
float valor,minimo,maximo;
if (valor<minimo)
{
valor=minimo;
MessageBox(NULL,"El valor analógico debe ser mayor que el valor minimo.","Error de
introducción",MB_OK|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMO
DAL);
}
if (valor>maximo)
{
valor=maximo;
MessageBox(NULL,"El valor analógico debe ser menor que el valor maximo.","Error de
introducción",MB_OK|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMO
DAL);
}
En las propiedades de los botones podemos asignar tanto el incremento que van a
realizar, como la variable a incrementar/decrementar, como el límite que no se puede rebasar.
13.7 Animación
La animación de los procesos a través de la lectura de un bit es la forma más visual de
mostrar el funcionamiento del proceso. En WinCC es el status display el que se encarga de
realizar esta acción, ya que es un objeto que contiene hasta un máximo de 31 imágenes, y que
en función de un índice irá mostrándolas.
El principal problema reside en el hecho de que en los procesos, el movimiento debe de
producirse cuando el bit de una variable está activado. Por lo tanto, deberemos de mediante
una función en C, animar una variable interna mientras dicho bit se encuentre activo.
Creamos una picture llamada ANIMACION.PDL. Vamos a utilizar unas imágenes que se
encuentran en la demo de WinCC, en el subdirectorio GraCS y que son 29 imágenes BMP
llamadas DMP00000 a DMP00029.
Asignamos a un objeto status display las 29 imágenes como muestra la figura:
Hay que observar que a partir de la imagen 14 desde esta ventana no permite
introducir los valores, por lo que deberemos ir a properties->state->Current status y asignar a
mano el número y la imagen en Basis Picture.
La pantalla resultante, con un botón para parar la animación y otro para arrancarla
debe quedar aproximadamente así:
#include "apdefap.h"
if (indice>28)
{
indice=0;
}
else
{
indice++;
}
return(0);
}
Solo queda comprobar que la animación funciona. Recordar que es necesario poner un
botón que acceda a la ventana ANIMACION.PDL.
13.8.1 Introducción
Vamos a crear una nueva picture llamada OLE, con un campo I/O asignado a la
variable VARIABLE_ANALOGICA. Introducimos desde Smart Objects->Ole Control el objeto
ProgressBar que es la barra de progresión que aparece cuando arranca el runtime de WinCC.
Observar que en la parte inferior nos indica a que OCX pertenece el control OLE.
El insertar un objeto nos permite acceder a sus propiedades, que irán en función de lo
que realice el mismo. En este caso nos interesa dinamizar el valor que debe representar.
El resultado es que tenemos una barra de progresión para mostrar valores analógicos
que WinCC no poseía anteriormente. El único inconveniente de utilizar OCX externos es que
no basta con instalar el WinCC en otro ordenador y copiar el subdirectorio de nuestro proyecto
para que la aplicación funcione. Es necesario registrar en el sistema el control. En caso
contrario donde aparecía el control mostrará una imagen en blanco.
Digital/Analog Clock
Creamos dos objetos iguales de OLE control, asignándole el objeto reloj en nuestra
picture OLE, y repasamos los parámetros de que dispone dicho objeto.
diagnosis, y poder retroceder en los mensajes para estudiarlos con calma, a la vez que poder
imprimirlos en papel.
Para poder enviar mensajes de aviso a la pantalla de diagnosis desde nuestra propia
aplicación, creamos un botón y en el evento action mouse escribimos:
Diagnose Control
El objeto diagnose control nos indica que aplicación de qué ordenador está enviando
un mensaje de error. En instalaciones en las cuales disponemos de varios ordenadores esta
ventana se vuelve bastante útil a la hora de informar si uno de los ordenadores de la red está
teniendo problemas.
WinCC Webbrowser
WinCC dispone de un control para poder navegar a través de internet sin necesidad de
salir del mismo ni utilizar el Explorer ni Netscape. Dicho objeto se denomina Webbrowser, y lo
único que requiere es habilitar la dirección home en la que debe de arrancar.
13.9 Multimedia
Hay que observar que para que suene, deberemos de tener el fichero FRTRAIN.WAV
que está disponible en la Demo de WinCC copiado en el raíz. También destacar que como la
función pertenece a la API del sistema primeramente deberemos de declararla, incluyendo la
dll a la que pertenece, lo cual realizamos en las primeras tres líneas de código.
Debemos de disponer del programa mplayer.exe en el raíz de nuestro disco duro, así
como de un archivo avi llamado coravif.avi (se encuentra en el subdirectorio video de
DemoV4).
Los parámetros play y close indican al programa que debe de arrancar
automáticamente, y que al acabar la presentación del avi debe cerrarse automáticamente.
Una grabación con cámara de vídeo de las partes de la instalación podría servir como
ayuda a un operario, que podría estar viendo y oyendo lo que debe hacer ante una
determinada situación.
13.10 Instancias
13.10.1 Introducción
La asignación dinámica de las variables a una ventana es uno de los procesos más
interesantes a la hora de configurar una aplicación que posee determinados elementos con una
estructura similar.
Supongamos el funcionamiento de un motor. Sus estados de control son
manual/automático, marcha/paro, parado/funcionando/con error. Podría realizar una ventana,
asignando estas tres variables para un determinado motor, y con un botón visualizar o no la
misma.
Esta solución cuando existen una gran cantidad de elementos idénticos (200 motores)
se vuelve tediosa y repetitiva. Para solventar esta situación existen la asignación de estructuras
de datos a ventanas y la generación de instancias de prototipos de ventanas.
Vamos a seguir los pasos necesarios para generar una instancia de un prototipo de
ventana mediante la pulsación de un botón.
Creamos una nueva picture llamada INSTANCIA.PDL, y que posee el siguiente
aspecto:
Las cajas I/O no poseen de momento ninguna variable asignada, así que vamos a
generarlas. Primeramente vamos a generar una estructura prototipo. En data types, en la
opción structure tag, creamos una nueva según la siguiente imagen:
Creamos tres nuevas variables (PID_1, PID_2 y PID_3) en Tag management una
nueva variable interna, del tipo que acabamos de definir (PID), con lo que veremos que se nos
generan tantas variables como elementos posee la estructura.
Volvemos a la picture anterior, y asignamos las variables creadas a cada una de las
cajas de I/O.
Ahora vamos a crear una nueva picture llamada VENTANA.PDL, con un tamaño de
300x400 y el siguiente aspecto:
Teniendo creada esta ventana, el siguiente paso es asignar a cada propiedad de esta
ventana una variable de la estructura tipo (PID). Para ello podemos utilizar el Wizard llamado
Picture Modul Template del Wizard Picture Moduls.
Se nos solicita la picture de la cual se deben generar instancias (creada con el wizard
anterior.
Además disponemos de cuatro tipos de generación de instancias:
• Crear una ventana para cada instancia.
• Crear una sola ventana y con varios botones seleccionar la instancia que se carga en dicha
ventana.
• Igual que la anterior, pero el botón no solo muestra la instancia, sino que con una segunda
pulsación la oculta.
• Una sola ventana que puede modificar su instancia cambiando el nombre que posee en la
parte superior, y que corresponde con la estructura a cargar.
En esta ventana podemos elegir la cantidad de instancias que deseamos generar (en
nuestro caso 3, una para cada estructura generada).
Además, podemos asignar ya una posición para la instancia de manera absoluta, o con
respecto a la posición del botón que hará visible la instancia.
En la esquina superior se nos generará una window picture y tres botones amarillos.
Cada uno de estos botones cargará una instancia diferente en la picture window generada. El
resultado es el siguiente:
Con esto, estaremos archivando en la base de datos de WinCC valores dentro del
archivo donde se almacenan dichas variables.
Arrancamos Access 97, y creamos una nueva base de datos en blanco. Con el botón
derecho, seleccionamos Importar. La ventana de Access nos muestra por defecto solo las
bases de datos de tipo mdb. Seleccionamos desplegando la solapa de tipos de archivo la
opción bases de datos ODBC.
Con estos pasos hemos conseguido importar no solo los datos de la base con su fecha
y hora de adquisición, sino también en la tercera columna el código de error (si lo hubiera) que
se pueda producir en la adquisición del valor.
Hay que tener en cuenta que la columna T es un campo de la base de datos en formato
fecha/hora, que habrá que descomponer para su posterior tratamiento.
Copiamos dicho cuadrado varias veces, realizando en cada una de las copias un
desplazamiento de los colores que se muestran en el dinamic dialog superior.
La variable VALOR_1 es una variable interna de tipo unsigned int que utilizaremos para
desplazar los colores, de tal manera que se genere el efecto de desplazamiento de líquido.
Solo queda realizar una acción en C que varíe el valor de VALOR_1 de 0 a 3
dependiendo de si se encuentra activado un bit.
En global script crearemos la siguiente acción:
#include "apdefap.h"
if (GetTagBit("bit")==1)
{
if(temporal>2)
{
temporal=0;
}
else
{
temporal++;
}
SetTagWord("VALOR_1",temporal); //Return - Type :BOOL
}
return(0);
}
El trigger de dicha acción será el siguiente:
Con esto, la animación deberá quedar como muestra la figura inferior. Es importante
destacar que se debe de tener en cuenta el sentido que se da al corrimiento de los colores de
los rectángulos ya que en función del mismo será el efecto de desplazamiento del fluido.
Por último se debe de rodear con varias líneas negras el borde de los rectángulos para
que se dé el efecto de tubería.
13.13.1 Introducción
El manejo de recetas supone uno de los inconvenientes del paquete básico WinCC. Tal
como está diseñado el scada, el almacenamiento de valores importantes para el proceso que
no sean históricos debe de realizarse en el PLC.
Cualquier sistema que se base en variables internas, depende de conseguir que no se
pare nunca la runtime, ya que al volver a arrancar carga los valores que se hayan definido en el
apartado valor inicial para cada variable interna (por defecto 0).
La única manera de conseguir utilizar el WinCC como un sistema de almacenamiento y
manejo de recetas pasa por la utilización de ficheros en el disco duro programados en C y que
nos permitan guardar los valores internos, y posteriormente ser cargados para su envío al
proceso.
Este apartado se ocupa de la programación en C necesaria para poder llevar a cabo el
manejo de ficheros.
La ventana en blanco que aparece en la parte inferior es el control OLE Global Script
Diagnose Control ya visto anteriormente.
Definimos las variables anteriormente citadas y las asignamos a las cajas I/O.
Vamos a asociar el siguiente código C al botón ESCRIBIR VALORES A FICHERO
DUNKER.DAT:
FILE *DATOS;
long L;
float FP;
int I;
DATOS=fopen("C:\\DUNKER.DAT","w+");
if(DATOS!=NULL)
{
L=GetTagDWord("VALOR_1"); //DWORD
FP=GetTagFloat("VALOR_3"); //float
I=GetTagWord("VALOR_2"); //WORD
fprintf(DATOS,"%ld\r\n%d\r\n%f\r\n",L,I,FP);
fclose(DATOS);
FILE *DATOS;
long L;
float FP;
int I;
int a;
char CADENA[20];
char* z;
DATOS=fopen("C:\\DUNKER.DAT","r");
if(DATOS!=NULL)
{
z=fgets(CADENA,20,DATOS);
printf("CADENA 1:%s\r\n",CADENA);
L=atol(CADENA); //Return-Type :long int
z=fgets(CADENA,20,DATOS);
printf("CADENA 2:%s\r\n",CADENA);
FP=atof(CADENA); //Return-Type :double
z=fgets(CADENA,20,DATOS);
printf("CADENA 3:%s\r\n",CADENA);
I=atoi(CADENA); //Return-Type :long int
fclose(DATOS);
printf("VALORES LEIDOS:%ld %f %d\r\n",L,FP,I);
printf("DATOS LEIDOS DE C:\\DUNKER.DAT\r\n");
}
else
{
printf("ERROR LEYENDO DATOS EN DUNKER.DAT");
}
Para poder apreciar que ha cargado los valores, lógicamente deberemos de modificar
anteriormente los que ya poseen las cajas de I/O, y presionar el botón, con lo que cargará los
valores que hubiéramos introducido anteriormente.
Menos frecuente puede ser la siguiente posibilidad, pero tal vez pueda resultar
interesante al lector: disponer de un fichero ya creado, y añadirle un valor de una variable
interna que anteriormente no se hubiese almacenado, sin tener que generarlo de nuevo.
El código que asociaremos al botón AÑADIR VALORES AL FICHERO DUNKER.DAT
es el siguiente:
FILE *DATOS;
float FP;
DATOS=fopen("C:\\DUNKER.DAT","a");
if(DATOS!=NULL)
{
fprintf(DATOS,"%f",FP);
fclose(DATOS);
printf("DATO VALOR_3 AÑADIDO A C:\\DUNKER.DAT\r\n");
}
else
{
printf("ERROR AÑADIENDO DATOS A DUNKER.DAT");
}
Por último, solo nos queda explicar como se borra un fichero de datos desde WinCC. El
código asociado al botón BORRAR EL FICHERO DUNKER.DAT es el siguiente:
remove("C:\\DUNKER.DAT");
printf("FICHERO C:\\DUNKER.DAT BORRADO.\r\n");
anteriormente). El problema reside en que hay que realizar un cambio de escala, ya que los
valores del eje X en el proceso representar la frecuencia entre 0 y 140 Hz, mientras que en la
gráfica son píxels desde el 60 al 560.
Con respecto al eje Y, los valores del proceso son Intensidades que van desde 0
amperios a 120, mientras que la gráfica va desde 480 píxels a 340.
En el global script creamos una nueva acción denominada GRAFICA_NO_TEMPORAL
que posee el siguiente código C:
#include "apdefap.h"
TEMP_X=60 + ((GetTagWord("VAL_X_1")*560)/140);
TEMP_Y=480- ((GetTagWord("VAL_Y_1")*250)/120);
TEMP_X=60 + ((GetTagWord("VAL_X_2")*560)/140);
TEMP_Y=480- ((GetTagWord("VAL_Y_2")*250)/120);
TEMP_X=60 + ((GetTagWord("VAL_X_3")*560)/140);
TEMP_Y=480- ((GetTagWord("VAL_Y_3")*250)/120);
SetActualPointLeft("grafica_no_temporal","Línea",TEMP_X); //Rückgabe-Typ
:BOOL
SetActualPointTop("grafica_no_temporal","Línea",TEMP_Y); //Rückgabe-Typ
:BOOL
TEMP_X=60 + ((GetTagWord("VAL_X_4")*560)/140);
TEMP_Y=480- ((GetTagWord("VAL_Y_4")*250)/120);
TEMP_X=60 + ((GetTagWord("VAL_X_5")*560)/140);
TEMP_Y=480- ((GetTagWord("VAL_Y_5")*250)/120);
return(0);
}
Destacar el cambio de escala (una simple regla de tres) para ajustar la posición de la
polilínea, y como vamos cambiando el índice para cada vez asignar la posición de un vértice
diferente.
Por último, esta acción deberá realizarse siempre que cambie alguna variable del
proceso que tenga que ver con la gráfica. La asignación se realiza en el trigger de la siguiente
manera:
Es importante recordar que para que se ejecute el código de la acción la parte del
runtime global script runtime debe estar asignada antes de arrancar la runtime.
Con esto dispondremos de una gráfica de 5 puntos que muestra la función x=f(y).
La manera más sencilla de cambiar la hora del WinCC sin necesidad de programar
excesivamente en C consiste en llamar a una utilidad del panel de control de Windows 95
denominada timedate.cpl, y en la cual modificamos a nuestro antojo el calendario del reloj del
sistema.
La instrucción a asociar a cualquier botón de cambio de hora será la siguiente:
#pragma code("kernel32.dll");
void GetLocalTime(SYSTEMTIME * lpst);
#pragma code();
SYSTEMTIME datos;
GetLocalTime(&datos);
SetTagWord("año",datos.wYear); //Return-Type :BOOL
SetTagWord("mes",datos.wMonth); //Return-Type :BOOL
SetTagWord("día_de_la_semana",datos.wDayOfWeek); //Return-Type :BOOL
SetTagWord("día",datos.wDay); //Return-Type :BOOL
SetTagWord("Horas",datos.wHour); //Return-Type :BOOL
SetTagWord("minutos",datos.wMinute); //Return-Type :BOOL
SetTagWord("segundos",datos.wSecond); //Return-Type :BOOL
SetTagWord("Milisegundos",datos.wMilliseconds); //Return-Type :BOOL
Muchos procesos deben de realizarse en una determinada franja de tiempo que debe
de ser parametrizable. La lubricación de motores, el arranque y parada del alumbrado, etc.. son
tareas que requieren de la comparación de la hora actual del PLC con una hora de arranque, y
posteriormente con una de parada.
En estos casos, no es posible realizar la comparación en WinCC (que sería mucha más
sencillo), debido a que si el ordenador se desconectara no arrancaría o pararía el proceso
temporal.
Vamos a realizar un ejemplo en el que queremos arrancar una salida del PLC de
acuerdo a una franja horaria. Creamos una picture en WinCC llamada HORARIO.PDL y que
presenta el siguiente aspecto:
Las variables asignadas a las cajas I/O son una estructura definida por nosotros en
data types->struct como HORARIO y que presenta el siguiente aspecto de la imagen inferior.
Destacar que es necesaria en la solapa de conversión realizar una conversión de byte a BCD,
ya que en los PLC’s S7 300/400 el horario se almacena en un formato denominado
date_and_time.
Este formato se describe en la ayuda de Step 7, pero básicamente cada valor de año,
mes, etc.. se encuentra en un byte en formato BCD.
Por último solo queda crear una comparación dentro del PLC de dichas variables con la
hora del mismo. El programa de S7 en AWL a programar dentro de una FC es el siguiente:
CALL SFC 1
RET_VAL:=#ERROR
CDT :="HORARIOS".FECHA_HORA_ACTUAL
CALL FC 14
DT1 :="HORARIOS".FECHA_HORA_ACTUAL
DT2 :="HORARIOS".INICIO
RET_VAL:=M0.0
CALL FC 23
DT1 :="HORARIOS".FECHA_HORA_ACTUAL
DT2 :="HORARIOS".FIN
RET_VAL:=M0.1
U M 0.0
U M 0.1
= A 124.0
La SCF1 lee la hora actual del PLC. La FC14 realiza la comparación de arranque,
mientras que la FC23 la de finalización. Estas FC’s se encuentran en la librería stdlib de Step
7.
Uno de los inconvenientes del teleservicio es que para poder instalar dicho software se
necesita tener instalado el software de Step 7 en dicho ordenador. Sin embargo, si se dispone
de dicho software, la desventaja se convierte en ventaja ya que no solo es posible visualizar y
controlar con WinCC, sino que además podremos acceder a todos los PLC’s que se
encuentren conectados en MPI y pogramarlos como si nos encontráramos en la misma
instalación.
La velocidad de transferencia se reduce lógicamente de 187000 baudios a 19200
debido a la línea telefónica.
Una gran cualidad de la conexión en teleservicio desde WinCC es que no son
necesarias grandes modificaciones de nuestro proyecto inicial con respecto al que existirá en el
ordenador remoto. Basta con seleccionar en el enlace MPI, en lugar de por PC Adapter o
Tarjeta MPI por TS Adapter. El resto del proyecto nos sirve sin realizar ninguna modificación.
INSTALACION DEMO
14 Instalación Demo.
14.1 Introducción.
Vamos a realizar una instalación de demostración en la que trataremos de utilizar la
mayor cantidad posible de técnicas de programación para que sirvan como base de ejemplos a
otras aplicaciones.
Comenzaremos creando un nuevo proyecto llamado INSTALACION.
Lo primero que haremos será crear nuestra estructura de usuarios del sistema. Tendremos:
• 2 operarios (OPERARIO_1 y OPERARIO_2) que podrán manejar el sistema.
• 1 responsable (RESPONSABLE_1) que tendrá el mismo acceso que nosotros a todas las
posibilidades del scada.
Los operarios de momento solo podrán salirse de WinCC para apagar el ordenador. Los
passwords de cada uno de ellos serán igual a su nombre pero sin el guión inferior (ej.
RESPONSABLE_1 es RESPONSABLE1).
A continuación creamos una pantalla MAIN.PDL con un botón de la biblioteca para salir de
la aplicación. Seleccionamos en el graphic designer como idioma el Español. En el text
library, añadimos el Español como idioma, y en Computer, seleccionamos el Español como
idioma del runtime.
Nos queda asignar el código a los botones aceptar y cancelar. Para el botón aceptar el
código será:
DeactivateRTProject ();
Y para el botón cancelar:
SetVisible("MAIN.PDL","Ventana Salir",0); //Return-Type :BOOL
Por último nos queda en Computer asignar las hotkeys control+q para activar
usuarios y control+a para desactivar usuarios.
Vamos a crearnos una variable interna de 32 bits denominada ALARMAS. Cada uno de
los bits de la misma activará un mensaje de alarma.
En el alarm logging configuramos una ventana de alarmas, y 10 mensajes de alarmas
para los 10 primeros bits de la palabra de alarmas. En propiedades de Error activamos la
opción horn.
Creamos una nueva picture que se denomine ALARMAS.PDL y que posea el siguiente
aspecto:
Deberemos crear dos tipos de ventanas, la anterior del tipo short-term y otra del estilo
message windows que colocaremos en la pantalla main, y que nos avisará del último evento
acaecido en la instalación.
El botón superior forma parte de una serie de botones que van a ser comunes a la
mayoría de las pantallas, y que nos van a permitir acceder y controlar el proceso
independientemente de donde nos encontremos. El botón ALARMAS, además de saltar a la
ventana del histórico de alarmas, cambia el color de fondo de gris a rojo cuando existe alguna
alarma en la instalación, y el texto parpadea.
Para conseguir esto creamos una variable de tipo BOOL llamada ALARMA_ACTIVA, y
vamos a generar una acción en C llamada alarma.pas y que tiene el siguiente código:
#include "apdefap.h"
return(0);
}
Supongamos que deseamos que cuando aparezca una alarma podamos sacarle al
operario una ventana de aviso indicando qué alarma ha disparado, la fecha o la hora de su
aparición o desaparición.
Para ello, toda alarma dispone de una propiedad denominada Trigger an action que
permite asociar una subrutina de C a los eventos de aparición de una alarma. Esta función se
llama GMSGFUNC.FCT y se encuentra dentro del global script en standard functions\alarm.
Podemos editarla y modificar su código a nuestra voluntad. Si no realizamos ningún
cambio en la misma, lo que ejecuta es una salida por la ventana de diagnosis de C en la que se
refleja la alarma, fecha, hora y estado de la misma. Podemos leer los valores de la estructura
que nos devuelve la función para asociarlos a una ventana de mensajes personalizada, o
asignar un sonido particularizado para cada alarma, etc…
En concreto añadimos el código de activar un fichero wav al principio de esta función
standard, de tal manera que cuando aparece una alarma, suena por los altavoces de nuestra
instalación.
Llegados a este punto se vuelve interesante el control de los usuarios de nuestro sistema
desde la runtime. Para ello tomamos dos botones de la biblioteca, como muestra la figura:
PWRTLogin('c');
PWRTLogout();
MessageBox(NULL,"Desactivación de usuario","Desactivar
usuario",MB_OK|MB_ICONSTOP|MB_SETFOREGROUND);
Podemos mostrar en una cadena de texto el usuario actual que está activo en el
sistema. Para conocer quién esta activo y su login seguimos los siguientes pasos:
• creamos una variable de tipo text 8 bits con 40 caracteres llamada
USUARIO_ACTUAL.
• Creamos una caja de I/O de sólo lectura y de tipo string y le asociamos la variable
anterior.
• Insertamos el siguiente código en un evento temporal:
PWRTGetCurrentUser(cadena, 20);
SetTagChar("USUARIO_ACTUAL",cadena); //Return-Type :BOOL
Vamos a controlar en nuestro proyecto demo unos tanques de llenado utilizando tres
válvulas proporcionales y tres electroválvulas. Disponemos de dos depósitos de llenado que
confluyen en un tercero en el que se realiza una mezcla de dos líquidos.
Creamos una nueva picture llamada ZONA_1.PDL en la que utilizando los objetos de la
librería del graphic designer dibujamos lo siguiente:
Los contenedores de líquido los asignaremos a tres variables float (se recomienda
utilizar el asistente para dynamic filling, ya que permite escalar la variable de proceso
automáticamente, no restringiéndonos a un valor entre 0 y 100).
El siguiente paso es mover las electroválvulas de acuerdo a bits de una variable interna
llamada CONFIRMACION_MARCHA de 32 bits. Tomamos de la biblioteca el dibujo de la
electroválvula horizontal y vertical, las superponemos (por comodidad, cada una en una capa
distinta) y a la horizontal le asignamos en la propiedad display el siguiente dinamic dialog:
Nos queda ahora asignar tres PID’s, una a cada electoválvula proporcional que van a
regular la dosificación del producto.
Podríamos hacer tantas ventanas como PID’s y asignarle a cada botón amarillo
(PID_X) la opción de displya de la ventana. En este ejemplo, esto es posible. Sin embargo, si
queremos realizar el control de 20 motores con manual/automático y marcha/paro,
necesitaremos recurrir a la generación de instancias, ya vistas anteriormente, y que ahora
trataremos en algo más de profundidad.
Comencemos por crearnos una estructura que contenga los parámetros de un PID:
En el graphic designer, creamos una nueva picture denominada PID.PDL, que posee el
siguiente aspecto:
Las cajas I/O de este prototipo no las asignamos a ninguna variable de momento, tan
solo les asignamos nombres que nos permitan identificarlas claramente, al igual que las barras
y los botones.
Terminado el Wizard se nos genera un picture window object y tres botones. Estos
botones al ser presionados, hacen visible el objeto picture window que muestra la ventana
PID.PDL, pero en cada llamada se lincan las variables asignadas a cada estructura del PID.
El código que se genera en los botones de llamada es el siguiente:
#include "PicBlck.h"
CalledTypePicture "Pid";
Position_x xPositionOfButton + (100);
Position_y yPositionOfButton + (-200);
LinkPrototypeInstance;
EnableTemplateInstance(TemplateTypePicture,InstanceName,TemplateHeight);
Con esto hemos visto la asignación de un lincado o enlace entre los valores de la
estructura que es relativamente sencillo utilizando los wizard existentes. Pero si lo que
deseamos es modificar un valor de la variable enlazada mediante código, es necesario
comprender detenidamente el código que vamos a asociar a los botones M y A de la picture
PID.PDL.
Deseamos con el botón M poner el PID en manual y con el A en automático, o lo que
es lo mismo, modificar el bit MAN_ON de la estructura del PID. El código a asociar al botón M
es el siguiente:
Para el botón de automático sería lo mismo salvo la instrucción settagbit con parámetro
final a 1.
Si deseáramos cambiar el valor de un bit de una estructura con un solo botón, de
manera que cada vez que pulsamos una vez el PID se pone en manual y con otra pulsación en
automático, la última línea debería de sustituirse por la siguiente:
SetTagBit(par4.szLinkName,1-GetTagBit(par4.szLinkName));
Este código realiza la alternancia entre 0 y 1 cada vez que se pulsa el botón.
Por último, terminada la instancia, nos quedan los indicadores analógicos, a los que le
asignamos directamente la variable PV_IN de su correspondiente estructura de PID.
El resultado es el siguiente:
FILE *DATOS;
int L[5];
DATOS=fopen("C:\\RECETA_1.DAT","w+");
if(DATOS!=NULL)
{
L[0]=GetTagWord("RECETA_1");
L[1]=GetTagWord("RECETA_2");
L[2]=GetTagWord("RECETA_3");
L[3]=GetTagWord("RECETA_4");
L[4]=GetTagWord("RECETA_5");
fprintf(DATOS,"%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n",L[0],L[1],L[2],L[3],L[4]);
fclose(DATOS);
Para los demás botones de grabar valdrá el mismo código, simplemente modificando el
nombre del fichero RECETA_1.DAT por RECETA_2.DAT y así sucesivamente.
FILE *DATOS;
int L[5];
char CADENA[20];
char* z;
DATOS=fopen("C:\\RECETA_1.DAT","r");
if(DATOS!=NULL)
{
z=fgets(CADENA,20,DATOS);
L[0]=atoi(CADENA); //Return-Type :long int
z=fgets(CADENA,20,DATOS);
L[1]=atoi(CADENA); //Return-Type :long int
z=fgets(CADENA,20,DATOS);
L[2]=atoi(CADENA); //Return-Type :long int
z=fgets(CADENA,20,DATOS);
L[3]=atoi(CADENA); //Return-Type :long int
z=fgets(CADENA,20,DATOS);
L[4]=atoi(CADENA); //Return-Type :long int
z=fgets(CADENA,20,DATOS);
L[5]=atoi(CADENA); //Return-Type :long int
fclose(DATOS);
printf("DATOS LEIDOS DE C:\\RECETA_1.DAT\r\n");
}
else
{
printf("ERROR LEYENDO DATOS EN RECETA_1.DAT");
}
Por último esta carga de valores debe ser enviada mediante el botón ENVIAR RECETA
A PLC que copia los valores internos a los de proceso. Lo contrario realiza el botón LEER
RECETA DEL PLC.
Antes de crear una nueva trend y una nueva table, acudimos al user administrator,
donde definimos un nuevo nivel de password al que solo puede acceder el RESPONSABLE_1.
Volviendo al tag logging creamos una nueva trend y una nueva tabla. En las
propiedades del archivo de lectura le asignamos el nivel creado anteriormente. De esta
manera, a la hora de editar los datos de la tabla, solo podrá realizar dicha acción el
RESPONSABLE_1, quedando inhabilitada para los demás usuarios.
Creamos una nueva picture llamada GRAFICA.PDL y que posea una aplication window
de trend y una aplication window de table.
Para finalizar una instalación, se suelen realizar los reports que deben de plasmar los
resultados anteriores del proceso en el formato deseado por el cliente. Se suele añadir un
logotipo, nombre de instalación, etc… Lo que será común en todas las instalaciones es la
necesidad de mostrar las gráficas de la instalación en hojas separadas, al igual que las tablas
de datos.
Nuestro ejemplo modificará (para simplificar los pasos a seguir) el report ya existente en el
WinCC por defecto, pero recomendamos crear un nuevo report (basándonos en este que nos
genera WinCC) y lo personalicemos completamente.
Necesitaremos un report y un layout asignado por cada gráfica o tabla diferente que
deseemos imprimir.
El report para imprimir una gráfica se denomina Report Tag Logging RT Curves y el
layout asignado a dicho report tlrtkur.rpl. Sin embargo, necesitaremos asignar a dicho layout la
gráfica que debe de mostrar, por lo que entramos en el mismo y sobre el objeto central tag-
logging runtime curve editando su conexión, modificamos:
• time selection: seleccionamos el intervalo de tiempo que debe de imprimirse.
• Archive data selection: seleccionamos el archivo y del mismo las curvas que deben
de imprimirse.
Para las tablas de valores, utilizaremos el report Report Tag Logging RT Tables
asociado al layout tlrttab.rpl que deberemos también que asignar a un archivo, e indicar el
periodo de tiempo que deseamos que imprima. Asignamos el siguiente código a otro botón en
la ventana GRAFICA.PDL:
El resultado es el siguiente:
Con esto damos por concluida nuestra instalación demo, confiando en que junto con
los ejemplos básicos y avanzados vistos en los diferentes capítulos de este libro sirvan como
cimientos para la construcción de desarrollos de auténticas instalaciones que intenten
aprovechar al máximo las múltiples cualidades de este sistema de visualización.
15 APENDICE A
CONFIGURACIONES
DE WINCC
Max. 1000m
SIMATIC S5-95/100/115/135/155U
max. 1000m
SIMATIC S5-115/135/155U
SIMATIC MPI
SIMATIC S7-300
SIMATIC S7-400
• CP 1411
•6GK1141-1AA00 Manual de WinCC en Ingles
•SOFT NET 8 Conexiones 6GK17041CW22-3AA0
•SOFTNET 64 Conexiones 6GK1704-1CX22-3AA0 6AV6392-1XA04-0AB0
Manual de ejemplos de WinCC en Ingles
6AV6392-1CA04-0AB0
Max. 1000m
SIMATIC S5-95/100/115/135/155U
max. 1000m
SIMATIC S5-115/135/155U
Adaptador 6ES7901-2BF00-0AA0
SIMATIC MPI
SIMATIC S7-300
SIMATIC S7-400
• CP 1411
•6GK1141-1AA00 Manual de WinCC en Ingles
•SOFT NET 8 Conexiones 6GK17041CW22-3AA0
•SOFTNET 64 Conexiones 6GK1704-1CX22-3AA0 6AV6392-1XA04-0AB0
Manual de ejemplos de WinCC en Ingles
6AV6392-1CA04-0AB0
C WinCC C
S
+ Windows NT4.0
+ 64 MB- Cliente
+WinCC RC o RT
+Opción Server
6AV6371-1CA03-0AX0
+Conexión a TCP/IP TCP/IP
NetBEUI
Bus de Terminales
Estación de Operador WinCC Cliente
TF
• TF-NET 1413/Windows NT 4.0 (ab V 3.10)
- Solamente necesario para comunicación S5TF
o S/R
Ethernet Industrial (SINEC H1)
con (como mínimo) licencia Run timel RT 128 Variables
•Windows95 o Windows NT
+Conexión a TCP/IP
• SR-NET 1413/Windows NT 4.0 (a partir V 3.30)
6GK1141-3TB01
Comprende: 6GK1141-3CB11
comprende:
* Procesador de comunicaciones CP 1413
* Software para Funciones TF S5/TI505 Nivel 4 * Procesador de comunicaciones CP 1413
* Software para S5/TI505 nivel 7
Ethernet Industrial (SINEC H1)
C WinCC C
S
+ Windows NT4.0
+ 64 MB- Cliente
+WinCC RC o RT
+Opción Server
6AV6371-1CA03-0AX0
+Conexión a TCP/IP TCP/IP
NetBEUI
Bus de Terminales
Estación de Operador Wincc Cliente
PROFIBUS SIMATIC NET con (como mínimo) licencia Run timel RT 128 Variables
• CP 5412 (A2) •Windows95 o Windows NT
6GK1541-2BA00 +Conexión a TCP/IP
Software para S7-5412 (Windows NT4.0)
6GK1702-5CB41-3AA0
(a partir V 2.01)
C WinCC C
S
+ Windows NT4.0
+ 64 MB- Client
+WinCC RC o RT
+Opción Server
6AV6371-1CA03-0AX0
+Conexión a TCP/IP TCP/IP
WinCC/FMS (Canal-DLL)
NetBEUI
6AV6371-1CD03-1CX0 Bus de Terminales
Estación de Operador WinCC Cliente
con (como mínimo) licencia Run timel RT 128 Variables
PROFIBUS SIMATIC NET •Windows95 o Windows NT
• CP 5412 (A2) +Conexión a TCP/IP
GK1541-2BA00
• Software para FMS-5412/Windows
NT 4.0 (a partir V2.50)
GK1702-5FB41-3AA0
SIMATIC NET PROFIBUS
16 APENDICE B
CANALES DE
COMUNICACIONES
CANAL AS 511
El canal AS 511 implementa el protocolo de comunicaciones que poseen los PLC’s de
la serie S5 en el puerto de programación de las CPU’s.
• Podemos definir diferentes puertos para cada uno de los enlaces S5 que deseemos
realizar.
• La velocidad de transferencia vendrá limitada a 9600 baudios.
• El cable de comunicaciones de S5 nos servirá para realizar el enlace entre el PLC y el
WinCC.
SIMATIC S7 PROFIBUS.
Para realizar una conexión en Profibús, necesitamos disponer de una tarjeta de
comunicaciones para Profibús y de su correspondiente driver de comunicaciones
implementado.
En la ventana de Device deberemos de seleccionar el dispositivo lógico que debe de
haber sido definido al parametrizar el driver de la tarjeta.
SIPART DR.
Podemos definir una red de reguladores Sipart que dispongan de la tarjeta serie, para
que WinCC a través de uno de sus puertos pueda leer los valores de los mismos, y modificar
cualquier valor a través de dicho puerto.
PROFIBUS FMS.
A la hora de realizar una red de PLC’s la opción más frecuente es la utilización de
Profibús FMS, que integra tanto S5 como S7 en la misma red.
Para poder conectar el WinCC, deberemos tener primeramente la tarjeta de
comunicaciones con su driver correspondiente integrado.
Dicho driver nos genera un nombre de conexión. Los enlaces de dicha conexión
podremos definirlos en esta pantalla, de tal manera que estaremos a través del driver
accediendo al PLC en cuestión.
OMRON SERIE C.
Además de los propios autómatas de Siemens, WinCC dispone de drivers opcionales
para comunicarse con otros PLC’s del mercado. El driver para los autómatas de Omron
(CQM1, CPM1 y C200H) se encuentra en WinCC en forma de add-on.
Las únicas particularidades del driver se basan en definir el puerto de comunicaciones
por el que vamos a enlazar con el PLC.
En la solapa HostLink Options definiremos si deseamos realizar un enlace punto a
punto o en formato HostLink (en red) en cuyo caso seleccionaremos el participante al que
estamos accediendo por este enlace que configuramos.
GE FANUC.
Otro autómata del mercado son los Fanuc de General Electric. Mediante este driver se
pueden realizar hasta 4 enlaces diferentes (uno por cada puerto del PC) en acoplamiento punto
a punto.
A D
Bar, 115 F
Barra de estado, 82
Barras de herramientas, 103 fuentes, 106
Biblioteca de objetos, 94 Full Screen, 67
Bin, 35
Buttons, 129 G
PC Adapter, 70
I
Presettings, 221
Job, 275 S
Settings, 99
L
Shut Down, 53