You are on page 1of 264

APRENDE

Version 5.1

CON EL GUAPERAS
INDICE

Cap1. Introducción a WinCC …………… 1

Cap2. Comunicación con autómatas S7 … 28

Cap3. Editor de gráficos: Graphics Designer … 47

Cap4. Editor de alarmas: Alarm Logging …..... 112

Cap5. Editor de curvas e históricos: Tagg


Logging ..................................................... 138

Cap6. Editor de informes: Report Designer..... 216

Cap7. Programación en C: Global Script ..... 233

Cap8. Editor de textos: Text Library ..... 251

Cap9. Gestión de usuarios: User Administrator.. 254


Aprende WinCC

.
Caappííttuulloo 1
C

IInnttrroodduucccciióónn aa W
WiinnC
CCC..

Notaciones.

En el presente manual se recogen una serie de notaciones simbólicas que poseen


el siguiente significado:

Icono Significado
Indica un click con el botón izquierdo del ratón.
Indica un click con el botón derecho del ratón.
Indica doble-click con el botón izquierdo del ratón.
Indica una entrada desde teclado.

1
Aprende WinCC

Requisitos.

Los requisitos mínimos y recomendables para trabajar con el WinCC a nivel


hardware y software del PC son:

Mínimo Recomendado
CPU Intel Pentium II Intel Pentium III
400 MHz > 400 MHz
Memoria principal/ 256 MBytes (para servidores) > 256 MBytes
RAM
128 MBytes (para clientes)
RAM en caso de 32 MBytes adicionales > 32 MBytes adicionales
configuración online
Disco duro 650 MBytes de espacio libre > 650 MBytes de
(sin datos del proyecto) de memoria espacio libre de
memoria
Memoria de Memoria de trabajo doble > Memoria de trabajo
trabajo virtual doble
Memoria de trabajo 100 MBytes > 100 MBytes
para spooler de
impresoras Windows
Gráficos SVGA (4 MBytes) XGA (8 MBytes)
Resolución 800 * 600 1024 * 768

Sistemas operativos para WinCC monopuesto o cliente:

Sistema Configuración Observaciones


operativo
Windows NT Windows NT 4.0 Instale el Service Pack antes de la
Service Pack 6a o instalación de Internet Explorer. El
superior Service Pack actual se encuentra en el CD
de Internet Explorer V6.0 suministrado.
Windows Windows 2000 Service El usuario ha de poseer para el manejo de
2000 Pack 2 WinCC como mínimo los derechos de un
usuario principal ("Power User").

Sistemas operativos para WinCC como server:

Sistema operativo Configuración


Servidor de Windows NT 4.0 Service Pack 6a
Servidor de Windows 2000 Service Pack 2 con Hotfix Q300972
Windows 2000 Advanced Server Service Pack 2 con Hotfix Q300972

2
Aprende WinCC

Licencias en WinCC.

Si no se dispone de autorización de desarrollo para WinCC, se podrá desarrollar


durante aproximadamente una hora. Pasada la misma, pueden darse dos situaciones:
• Que esté arrancado el runtime: en este caso aparece un mensaje de finalización de
la demo. No podremos realizar ninguna acción hasta que validemos dicho mensaje.
Sin embargo, el sistema runtime continua funcionando pese a no validar el mensaje,
con lo que se continúan registrando las tendencias y aparecen los mensajes de
alarmas, así como refresco de variables en pantalla. A partir de este momento, cada
aproximadamente 10 minutos vuelve a aparecer el mensaje.
• Que no esté arrancado el runtime: en este caso automáticamente se cierra el
WinCC, permitiéndonos antes guardar los cambios que hubiésemos realizado.

Pero, ¿cómo sabemos las licencias que tenemos instaladas en un determinado


momento?. La de desarrollo lo podemos saber de una manera inmediata, ya que en la
barra de estado de WinCC aparece la palabra DEMO cuando no disponemos de ella
para desarrollar.
Para conocer si disponemos de todas las demás (en especial necesitaremos una
licencia de runtime de tantas variables como nos indique la barra de estado de WinCC)
las podremos observar mediante una aplicación llamada CCAuthorInformation, que
se encuentra en el subdirectorio WinCC\bin. Lo que nos indica la ventana son las
licencias de las cuales no disponemos y que nos son necesarias con nuestra
configuración actual. Con el botón view podemos ver si disponemos de una licencia en
concreto.
También podemos saber el estado de las licencias actuales observando el fichero
license.log que se encuentra en WinCC\diagnose. El fichero license.bak es la copia del
fichero log con el estado de las licencias de la vez anterior que arrancamos el WinCC.
Un ejemplo del fichero license.log sería:
10/06/2001 11:18:51 InitLicense CS | AppName = AppCS:Mcp | CycleCheck = yes | NameForMessageBox = | Name of License =
A9WRC330 | Text of License = SIK/SIMATIC WINCC RC 1024 PowerTags |

10/06/2001 11:18:51 InitLicense ED | AppName = AppEd:Mcp | CycleCheck = own | NameForMessageBox = | Name of License =
A9WRC330 | Text of License = SIK/SIMATIC WINCC RC 1024 PowerTags |

10/06/2001 11:19:00 InitLicense RT | AppName = OptRT:CHIPCARD | CycleCheck = no | NameForMessageBox = | Name of


License = A1WPC412 | Text of License = |

10/06/2001 11:19:08 InitLicense CS | AppName = DMAso:Mcp | CycleCheck = yes | NameForMessageBox = | Name of License =
A9WRC330 | Text of License = SIK/SIMATIC WINCC RC 1024 PowerTags |

10/06/2001 11:31:51 ExitLicense CS | AppName = DMAso:Mcp | CycleCheck = yes | Name of License = A9WRC330 | Text of
License = SIK/SIMATIC WINCC RC 1024 PowerTags |

10/06/2001 11:32:30 InitLicense CS | AppName = DMAso:Mcp | CycleCheck = yes | NameForMessageBox = | Name of License =
A9WRC330 | Text of License = SIK/SIMATIC WINCC RC 1024 PowerTags |

3
Aprende WinCC

Entrar a WinCC.

A la hora de entrar al Windows Control Center V5.1 pueden darse tres


circunstancias:
• Que no hubiera ningún proyecto abierto anteriormente, con lo que se nos pedirá
crear o abrir un nuevo proyecto.
• Que anteriormente hubiese ya abierto un proyecto, pero no se hubiese
arrancado el runtime, con lo que entraremos al modo de desarrollo de WinCC.
• Que anteriormente hubiese un proyecto y que estuviese arrancado el runtime,
con lo que automáticamente entraremos al modo runtime.
Esto puede ser un problema en determinadas circunstancias, como p. Ej. Que no se
haya habilitado ninguna forma de salir del runtime y además se haya deshabilitado la
combinación Alt+Tab, con lo que no tenemos manera de ir al software de desarrollo
para solucionar este error. En estos casos, para evitar que al arrancar el WinCC entre
automáticamente al modo runtime, se debe de presionar la combinación de teclas
Ctrl+Shift durante el arranque del software, con lo que se detendrá en el modo de
desarrollo.
Esta combinación funciona en proyectos locales, y en un servidor, pero no en un
cliente que esté conectado a uno o varios servidores en sistema multiusuario.

4
Aprende WinCC

Salir de WinCC.

Para salir de WinCC, en el menú Archivo->Salir disponemos de dos opciones:

9 Salir de WinCC Explorer y cerrar el proyecto: Si ha seleccionado esta opción


se sale de WinCC Explorer y la runtime se cerrará previamente. La siguiente vez
que entremos a WinCC Explorer abrirá el proyecto y arrancará la runtime
automáticamente.

9 Salir de WinCC Explorer : Si ha seleccionado esta opción, se sale de WinCC


Explorer pero la runtime se queda activada. El proyecto abierto en último lugar
se abrirá en el siguiente inicio de WinCC.

5
Aprende WinCC

Crear un nuevo proyecto en WinCC.

Cuando se abre WinCC sin que anteriormente hubiera abierto otro proyecto,
aparece el siguiente cuadro de diálogo, indicándonos las siguientes opciones:

Vamos a realizar un proyecto para estación monopuesto. Se nos pide el nombre


del proyecto, así como el nombre del subdirectorio de nuestro proyecto (generalmente
dejaremos que coincidan ambos nombres, para una más fácil identificación de nuestro
proyecto desde el explorador de Windows NT). Este primer proyecto lo denominaremos
dunkerdemo_v51.mcp. A partir de ahora, para poder ejecutar nuestro proyecto,
podremos ejecutar desde el explorador de NT el fichero dunkerdemo_v51.mcp, que al
estar asociado a WinCC, nos abrirá nuestro proyecto automáticamente.

6
Aprende WinCC

El explorador de WinCC posee el siguiente aspecto, una vez generado el


proyecto:

A partir de ahora, para poder trasladar o copiar el proyecto a otro ordenador, bastará
con copiar este subdirectorio completo, normalmente comprimiéndolo con Winzip o
Winrar en discos previamente (herramientas no suministradas con el software). Pero
hay un dato importante: el proyecto está configurado para un ordenador en concreto,
cuyo nombre indicativo aparece en el apartado Equipo->Propiedades. Si el nuevo
ordenador no posee el mismo nombre, al intentar arrancar el runtime, aparecerá el
siguiente mensaje:

El nombre indicador se puede cambiar en Equipo->Propiedades, pero lógicamente


necesitaremos conocer el nombre del nuevo ordenador donde estamos copiando el
proyecto. Para ello, en Inicio->Configuración->Panel de control->Sistema-
>Identificación de Red se encuentra nuestro nombre de equipo.

7
Aprende WinCC

Lo primero: Definir la pantalla.

El primer paso en nuestro proyecto será definir la pantalla en la que vamos a


trabajar. Pondremos en la parte superior una zona común de 1024x100, y en la zona
inferior otra zona común de 1024x100. Como disponemos de una resolución de
1024x768, nos queda la zona central de 1024x568 para poner nuestra ventana actual.

Zona superior: para acceder a las diferentes pantallas del proyecto


Zona central: para mostrar la pantalla en la que estemos
actualmente

Zona inferior: para acceder a los botones de funciones.

Como hemos dicho, se supone que sabes de WinCC, por lo que te lo diré en una
sola frase: “créate un proyecto, la pdl inicial que se llame start.pdl , que tenga un
tamaño de 1024x768, la guardas, te haces otra que llamas top.pdl, de tamaño 1024x100,
y otra que se llame bottom.pdl, del mismo tamaño”.
Bien, teniendo esto claro, abrimos start.pdl, y en la parte superior colocamos una
ventana de imagen de tamaño 1024x100, y seleccionamos en ventana de imagen-
>otros->nombre de imagen: top.pdl. También activamos aquí bordes: si.

8
Aprende WinCC

Realizamos la misma acción para la ventana de abajo, colocando otra ventana de


aplicaicon, pero esta vez en sus propiedades ponemos posicion y:668, y como nombre
de la ventana bottom.pdl. También ponemos el borde activo. Así, dispondremos de
nuestra primera ventana, más simple que el funcionamiento de un botijo, pero la base
sobre la que vamos a trabajar. Debe tener el siguiente aspecto:

9
Aprende WinCC

Como salir de WinCC.

Aún no hemos empezado y ya estamos saliendo, esto va bien. Para salir de


WinCC nos ponemos un botón a la derecha del todo en bottom.pdl. A mí me gusta éste,
que se encuentra en la biblioteca de objetos:

Lo que queremos es que cuando se pulse dicho boton, aparezca una ventana en
la que podamos seleccionar el tipo de salida que deseamos. Para ello hacemos una
nueva pdl llamada salir.pdl, de 300x300. En ella ponemos los siguientes botones:

Deberemos de llamar a dicha picture cuando pulsemos el boton de salir. Para


ello, dentro de la picture start.pdl, nos colocamos una ventana de imagen de cualquier
tamaño, más o menos por el centro de start, como muestra la figura:

10
Aprende WinCC

Las propiedades de dicha ventana de imagen son:

Y como nombre de objeto, la llamamos “VENTANA_SALIR”


Observar que no la hacemos visible y que le ponemos titulo a la ventana,
a la vez que se ajustará al tamaño de salir.pdl, es decir, 300x300.
Ahora nos queda hacerla visible desde el botón que hemos puesto en
bottom.pdl. Entramos a los eventos de dicho botón, y en el evento clic del ratón,
creamos el siguiente código C:

SetPropBOOL(GetParentPicture(lpszPictureName),"VENTANA_SALIR","Visible",TRUE);

Vamos a explicar que hace esta línea de código:


SetPropBOOL es una instrucción que cambia el valor de una propiedad de tipo
bool de un objeto de una ventana en concreto. En este caso deseamos que active la
propiedad visible de la ventana “VENTANA_SALIR” que hemos puesto dentro de la
picture “START.PDL”. El problema está en que ahora la ventana se llama start.pdl,
pero mas adelante se llamará de otra manera, dependiendo de que naveguemos por las
diferentes ventana de nuestro proyecto. Luego no podemos escribir en el primer

11
Aprende WinCC

parámetro de la función SetPropBOOL un valor fijo, debe ser variable. Dicha variable
es el valor que devuelve la función GetParentPicture. Esta función devuelve el nombre
de la ventana en la que está contenida la ventana desde la que es llamada.
Ya sé que es lioso (me lo vas a contar a mí). Por eso, vamos por partes. Nosotros
estamos en un botón (el de salir), que está contenido en una pdl que se llama
bottom.pdl, que a su vez está contenida dentro de otra, que en este momento es
start.pdl, pero que más adelante vete tu a saber como se llama. La variable
lpszPictureName nos devuelve la ventana de bottom.pdl. Y como queremos la ventana
“padre” que contiene a la misma ponemos GetParentPicture(lpszPictureName), que nos
devolverá ahora mismo start, que es nuestra ventana en la que tenemos nuestro objeto
“ventana_salir”.
En este punto deberias de poder abrir en la runtime la ventana con el botón de
salir, y cerrarla con la x de la derecha de la ventana emergente.
Ahora nos queda darle funcionalidad a los botones de salir.pdl. Para ello
utilizamos los asistentes de WinCC.

Para el primer botón utilizamos el asistente dinámico “salir de WinCC runtime”

Para el segundo salir de WinCC.


Para el tercero “salir de Windows sin reiniciar”. Y para el cuarto “salir de
WinCC y reiniciar windows”.

12
Aprende WinCC

Bien, ya salimos de WinCC, pero claro, cualquiera puede apagarnos el


ordenador. Tendremos que controlar quien toca y quien no en nuestros ordenadores.

Controlando a los usuarios.

Vamos a organizarnos un grupo de usuarios, dentro del User Administrator. Nos


editamos los dos primeros privilegios, uno como “salir” otro como “apagar el PC” y
otro como “parar el WinCC”. El primero lo dejamos como administrar usuarios para
poder entrar desde el runtime a añadir o cambiar passwords.

Les ponemos una salida de sesión automática, para que si no se desactivan ellos,
los desactive el sistema pasados 10 minutos.
Bien, hemos añadido un ususario, queda asignar el nivel de protección al botón
de salir de la ventana start.pdl . Observa al salir que el User Administrator realiza las
modificaciones en tiempo real, por lo que al salir no te pide grabar, ya que lo va
ehaciendo “sobre la marcha”. Vamos, que no hay que equivocarse (como el regedit, será
13
Aprende WinCC

del mismo tipo el invento). Volvemos a ella, y en la propiedad otros->autorizacion


seleccionamos “salir”.

Ahora ya no podrá salir de WinCC cualquiera, sino solo los que tengan el
permiso de salir. Pero vamos a definir también quien puede parar el WinCC y quien
solo apagar el ordenador o reiniciarlo.
Para ello en la pdl salir.pdl, a los dos primeros botones les asignamos el permiso
de parar el WinCC, mientras que a los dos siguientes el de apagar el pc.
Pero: ¿cómo se logan 1 los usuarios?. Hay dos maneras, una cutre salchichera y
otra guay y complicada. Vamos con la cutre. En el control center, pinchando con el
botón derecho sobre el nombre del proyecto, aparece la ventana en la que se puede
asignar una combinación de teclas a login (logarse) y otra a logoff (deslogarse)

Pero claro, se debe de recordar cual era esa combinación, y siempre aparece el
listo que quiere un botón para activar a los usuarios. Ya la hemos liado, pensarás (y
estás en lo cierto), ya que la otra va a través de C. Quita las asignaciones que acabamos
de hacer, que no vamos a hacerlo por ese camino, sino por el del botón. Nos

1
Logarse: darse de alta en un sistema protegido, introduciendo tu nombre y tu password.
14
Aprende WinCC

colocaremos un botón en la pdl bottom.pdl (recuerda, bottom será nuestra ventana para
los botones de funciones, mientras que top será nuestra ventana para los botones de
entrar a las diferentes partes en las que se muestra la instalación). El botón lo cogemos
de la biblioteca:

Ahora viene lo bueno, el código C, asociado en el evento mouse activo:


Este Código lo escribimos en una función de proyecto que nos hacemos nueva
en el Global Script, y que llamamos login:

void login()
{

#pragma code("useadmin.dll")
#include "PWRT_api.h"
#pragma code()

long usuario;
usuario=strcmp(GetTagCharWait("@CurrentUser"),"");
if(usuario)
{
PWRTLogout();
}
else
{
PWRTLogin('c');
}

Luego vamos al evento del botón que hemos puesto antes (la llave), y le
asociamos la función login();

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END

login (); //Tipo de retorno :void

15
Aprende WinCC

Con esta función te logas y deslogas con el mismo botón (ha sido fácil, eh?).
Es mejor hacerlo en una función de proyecto para poder reutilizar dicho código
en otros proyectos copiándonos simplemente el fichero login.fct que nos ha creado
dentro del subdirectorio library de nuestro proyecto.
Para acabar de rematar la faena, pondremos en bottom.pdl una I/O box de solo
lectura, que va asociada a la variable @current_user. Esta variable la genera le sistema
y es una cadena de texto que posee el texto del usuario que actualmente está logado.
Con ello podremos saber en todo momento si estamos activados en el sistema o no.

La cosa va cogiendo color. Pero nos falta un detalle. Nosotros estamos poniendo
los usuarios en el sistema desde el User Administrator, y quitamos, ponemos y
cambiamos passwords los que queremos y mas. Pero, ¿y cuando nos vayamos de la
instalación?. ¿quién podrá cambiar los passwords, o añadir un usuario?. Tenemos que
poner un segundo botón en la pantalla bottom.pdl. Ese botón nos accederá al User
Administrator. ¿Cómo?, fácil, así:

ProgramExecute("c:\\SIEMENS\\WINCC\\BIN\\PASSCS.EXE");

Bien, lo primero es colocarnos en bottom.pdl otro botón de la biblioteca:

El texto que aparece en medio del botón solo lo puedes quitar si cambias e
idioma en el menu del Graphics Designer, en ver->idioma, a cualquiera, y vuelves a
español. Luego vas a la propiedad fuente->texto del botón (un fallo de WinCC, me
parece a mí).

16
Aprende WinCC

Asociando este código al botón de administración de usuarios, ya puede un


usuario dar de alta y borrar, es decir, administrar a los demás usuarios. Claro está, a este
botón creado, deberemos de asociarle un nivel de password, para que únicamente
puedan entrar los usuarios con capacidad para borrar a otros usuarios.
Para Poder ejecutar este código debe de estar arrancada la parte de Global Script
runtime de nuestro PC.

Por supuesto, a este botón (el de las dos cabecitas) deberemos de colocarle el
password “administrar usuarios”.

Llamar a ventanas variables.

Ahora queremos que cuando pulsemos el botón de administrar usuarios nos abra
una ventana de menú en la que podamos seleccionar:
9 Administrar usuarios (lo de antes)
9 Ver el histórico de usuarios (para saber qué usuarios estaban logados en qué
momentos).
Para hacer esto podríamos abrir otra ventana y hacerla visible con el botón, pero es
mejor utilizar la ventana que hemos gastado anteriormente para salir, y en función de
porqué botón sea llamada nos muestre una pdl u otra (llamada a ventanas
parametrizables). Ya te has asustado, pero no tiene porqué, que vas a ver que es muy
fácil.

17
Aprende WinCC

Primeramente vamos a hacer parametrizable la llamada a la ventana que hacíamos


con el botón de salir (objeto botón_salir de la pdl bottom.pdl). En el evento clic del
ratón de dicho objeto escribimos ahora el siguiente código:

SetPropChar(GetParentPicture(lpszPictureName),"VENTANA_SALIR","PictureName","salir.PDL");
SetPropChar(GetParentPicture(lpszPictureName),"VENTANA_SALIR","CaptionText","Salir de
WinCC");

SetPropBOOL(GetParentPicture(lpszPictureName),"VENTANA_SALIR","Visible",TRUE);

Observa que lo que hacemos es decirle de manera dinámica que la picture a mostrar
es salir.pdl, que va a tener como título “salir de WinCC” y luego la hacemos visible.

Ahora en el botón de usuarios (el de las ods cabecitas), en el evento clicl de ratón,
escribimos el siguiente código:

SetPropChar(GetParentPicture(lpszPictureName),"VENTANA_SALIR","PictureName","USUARIO
S.PDL");
SetPropChar(GetParentPicture(lpszPictureName),"VENTANA_SALIR","CaptionText","Ventana
Usuarios");
SetPropBOOL(GetParentPicture(lpszPictureName),"VENTANA_SALIR","Visible",TRUE);

Es lo mismo de antes, solo que esta vez llamamos a la pdl “usuarios.pdl”, con un
título llamado “usuarios” y posteriormente hacemos visible la ventana.
Pero, ¿quién es usuarios.pdl?. Tranquilo, que aún no la hemos hecho.
Es la pdl siguiente, también de 300x300:

El código que le asociamos al botón modificar usuarios es el siguiente:

ProgramExecute("c:\\SIEMENS\\WINCC\\BIN\\PASSCS.EXE");

Si pruebas lo hecho hasta ahora deberías de poder abrir la ventana de manera


parametrizable. Únicamente nos queda con el botón registro de usuarios mostrar una
ventana en la que aparezca un histórico de los diferentes usuarios que se han activado y
desactivado en el sistema.
El problema de WinCC es que no posee esta funcionalidad de manera sencilla, y
es necesario recurrir a un truco para poder conseguirla. El truco se basa en utilizar una
clase de alarmas como si fuera el registro de usuarios, para que cada vez que se loge un
usuario activamos la alarma, y cuando se desloge la desactivamos.

18
Aprende WinCC

Vamos a dar por hecho que conoces como trabajar con alarmas en el WinCC.
Primeramente nos vamos al Alarm Loggin, y en bloques de sistema añadimos los
siguientes:

En bloques de texto de usuario los siguientes:

Y por último en bloques de valor de proceso el siguiente:

¿No aparece el bloque usuario?. En realidad es el bloque de valor de proceso 1 que


lo hemos renombrado como usuario, para luego podernos aclarar mejor.
En clases de aviso añadimos una nueva clase, que nombraremos como usuarios.

19
Aprende WinCC

Dentro de esta clase creamos un tipo de clase que llamamos usuario, y con el botón
derecho sobre la clase de aviso usuarios definimos los textos para cuando aparezca y
desaparezca la alarma:

Con el botón derecho sobre el tipo de clase usuario seleccionamos el color con
que queremos mostrar la línea de alarmas de logado y deslogado de usuarios.

Ahora seleccionamos con el botón derecho archivos, y definimos un archivo


circulante.

Y por último definimos un informe de archivo para poder imprimir el histórico de


usuarios.

20
Aprende WinCC

Con esto ya podemos crear nuestra primera alarma, que tendrá las siguientes
propiedades:

La variable Login_Usuarios es una variable interna de tipo bool que hemos creado
previamente.

21
Aprende WinCC

La variable usuario es una variable interna de tipo texto de 8 bits.


Después de todo tengo claro que te estarás preguntando...¿qué estamos haciendo,
narices?. Bien, vamos a recapitular. Hemos creado una clase de alarmas que es usuarios,
que se activa con el bit Login_Usuarios, y que cuando aparece dice “aparecido” en color
azul, y cuando desaparece (el bit) dice “desaparecido” en color rojo.
También sabemos que en el campo usuario va a incluir una cadena de texto que es la
que contenga la variable “usuario”. Aquí hemos acabado. Guardamos y salimos del
Alarm Loggin.
Ahora vamos al Glogal Script y creamos una nueva Acción en acciones globales,
cuyo fichero denominaremos usuarios.pas, y que posee el siguiente código:

#include "apdefap.h"

int gscAction( void )


{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END

#pragma code ("Kernel32.dll")


void Sleep(int a);
#pragma code()

char usuario[40];

strcpy(usuario,GetTagChar("@CurrentUser"));

if (strlen(usuario)!=0)
{
SetTagChar("Usuario",usuario);
Sleep(1000);
SetTagBit("Login_Usuarios",TRUE);
}
else
{
SetTagBit("Login_Usuarios",FALSE);
}

return 1;

22
Aprende WinCC

Esta acción lo que hace es copiar el nombre del usuario actual (contenido dentro de
la variable interna @CurrentUser dentro de la variable interna usuario que hemos
definido previamente, y activar el bit interno Login_Usuarios.
Una de las cosas que te habrán extrañado al leer el código es porqué he definido la
función Sleep. Como sabes la función Sleep lo que hace es parar la ejecución del
programa durante los milisegundos que le pasemos como parámetro. Esta función es
necesaria debido a que si activamos inmediantamente el bit de alarma, el WinCC no
tiene tiempo a actualizar el valor de la variable usuario con el nuevo valor del usuario
que se está logando, por lo que aparecería vacío dicho campo al logarse, y relleno al
deslogarse. Es un problema de refresco interno de la base de datos de variables de
WinCC, el cual genera antes el evento de la alarma que el de refresco de la variable
usuario. Si no te ha quedado claro con esta explicación prueba mas tarde a quitar la
línea de Sleep y comprueba cual es su efecto.
Ya estamos acabando. Solo nos queda disparar esta acción con un disparo que
vendrá dado por el cambio de la variable @CurrentUser, o lo que es lo mismo, que se
active o desactive un usuario.

El disparo vendrá dado por el ciclo “al cambiar” de @Current_User. Compilamos la


acción y hemos finalizado en el Global Script. Ahora vamos al Graphic Designer y
renombra la pdl start.pdl como registro_usuarios.pdl. En la zona central de la pantalla
colocamos un control de tipo “WinCC alarm control” como muestra la figura:

23
Aprende WinCC

En las propiedades de la ventana de alarmas (que aparecen clickeando en la misma),


definimos como tipode ventana=ventana de archivo temporal. Y por último en la solapa
línea de avisos mostramos los siguientes bloques de avisos:

Además deberemos de filtrar las alarmas en esta ventana para que únicamente
aparezcan las del tipo “usuarios”, ya que ahora mismo solo exite esta, pero más adelante
crearemos más alarmas, y no deseamos que nos aparezcan como si fuesen usuarios
logandose.

Ya podemos guardar la pdl. Nos queda hacer que se muestre dicha pdl al pulsar el
botón Registro de usuarios, que habíamos puesto en la pdl usuarios.pdl. La función en c
que asociaremos a dicho botón será la siguiente:

OpenPicture("REGISTRO_USUARIOS.PDL");

24
Aprende WinCC

Ya podemos guardar y comprobar como nos ha quedado el invento, que debería de


mostrar a medida que vamos logando usuarios algo como esto:

Nos queda únicamente sacar por impresora un informe con los el histórico de
usuarios, igual que lo estamos sacando por pantalla. Para ello, nos vamos a ir al Report
Designer. En formato de página tenemos un Report que se llama @alrtuma.rpl, y que lo
editamos y grabamos como registro_usuarios.rpl.
Vamos a modificar la cabecera del mismo para que tenga el siguiente aspecto:

La parte dinámica del mismo la editamos, y modifcamos los bloques que deseamos
mostrar en el Report.

25
Aprende WinCC

Guardamos el Report y cerramos el editor. Ahora creamos una nueva orden de


impresión, que posee las siguientes características:

Ya tenemos la orden de impresión. Nos queda activarla para que se imprima el


Report. Para ello volvemos al Graphic Designer, y en la pdl registro_usuarios, en la
parte superior, colocamos un objeto de la librería como muestra la figura:

En dicho botón vamos a asociar el siguiente código C:

RPTJobPreview("orden_registro_usuarios");

Solo nos queda activar la parte de runtime referida a la impresión y las alarmas
dentro de equipo en el explorador de WinCC:

26
Aprende WinCC

El resultado final al presionar el botón debe de ser algo como lo que muestra la
figura:

27
Aprende WinCC

Caappííttuulloo 2..
C

C
Coom
muunniiccaacciióónn ccoonn S
S77..
Modos de comunicación.

Para el ejemplo que nos concierne vamos a realizar varios ejemplos de


comunicación con S7. Lógicamente en una instalación real únicamente utilizaremos uno
de ellos, por lo que te aconsejo vayas al capítulo en el que se explica el tipo de
comunicación que debes de realizar.

Comunicación por MPI.

Insertamos el canal Simatic S7, y dentro del protocolo MPI, con el botón derecho,
seleccionamos una nueva conexión.

La nueva conexión la denominamos como nuestro PLC, en este caso 314_C_2DP, y en


propiedades definimos la dirección MPI de nuestro equipo y el slot en el que se
encuentra la CPU, que normalmente va a ser el 2. Poner como número de slot 2 es muy
importante, ya que si no introducimos este valor (que por defecto viene a 0) no
podremos comunicar en MPI con la CPU ya que el WinCC no la encontrará. Esto es
necesario para comunicación con S7 300, pero no para los S7 400.
Una vez introducida la conexión nos aparece un icono en forma de dos manos unidas,
indicándonos la conexión con nuestro PLC

28
Aprende WinCC

Si volvemos a presionar con el botón derecho sobre el canal MPI podemos determinar
los parámetros del sistema del protocolo de comunicaciones.

29
Aprende WinCC

Comunicación por TCP/IP.

Vamos a realizar ahora la comunicación por TCP/IP. En nuestro caso utilizaremos un


416 con una tarjeta 443-1.
Primeramente deberemos de definir en nuestro proyecto de Step 7 la dirección TCP de
la tarjeta como muestra la figura:

Comprobamos que podemos comunicar por TCP/IP, p. Ej observando el programa


desde Step 7 a través de TCP/IP. Para ello deberemos de cambiar el tipo de acceso en
ajustar interface PG/PC.

30
Aprende WinCC

También deberemos de ajustar el punto de acceso del perfil de WinCC para que sea a
través de nuestra tarjeta de comunicaciones.

Nuestra tarjeta de comunicaciones TCP del PC por supuesto deberá de poseer una
dirección y submáscara de red apropiada para que pueda encontrarse en el mismo nodo
de TCP que nuestro PLC (no podemos utilizar DHCP, sino que deberemos de
configurar una dirección fija de red). Para ello vamos en Windows 2000 a Inicio-
>Configuración->Conexiones de red y acceso telefónico y en las propiedades de nuestra
red de área local, seleccionamos el protocolo TCP/IP.

Editamos las propiedades del protocolo, y le asignamos una dirección compatible con
nuestra tarjeta del PLC.

31
Aprende WinCC

Una vez tengamos definidas nuestras dos tarjetas de TCP (la del PC y la del PLC),
podemos comprobar si efectivamente las tenemos bien configuradas realizando un ping
a la tarjeta del PLC, desde Inicio->Ejecutar y escribimos:
Ping 192.80.0.2 (para nuestra tarjeta de PLC del ejemplo)
y
Ping 192.80.0.1 (para nuestra tarjeta de PC del ejemplo)

Ya podemos ir a nuestro proyecto de WinCC y definimos nuestro enlace con el plc.

La nueva conexión define tanto la dirección IP del PLC al que nos vamos a conectar,
como el puesto de la CPU dentro del bastidor del PLC para que la tarjeta TCP sepa
donde se encuentra y pueda suministrarle los datos (en nuestro caso el 400 tiene la CPU
en el slot 3).

32
Aprende WinCC

En parámetros del sistema del canal TCP/IP podemos seleccionar la tarjeta por la que
vamos a comunicar, en nuestro caso ya definida anteriormente en el perfil de WinCC
desde ajustar interface PG/PC. En esta ventana también podemos definir si las
peticiones de escritura poseen prioridad sobre las lecturas a la hora de comunicar con el
PLC.

Llegados a este punto ya tenemos definida la comunicación con la 443-1 del 400. Ya
podemos arrancar el runtime de nuestro proyecto y observar el estado de las
comunicaciones en el menu del WinCCExplorer Herramientas->Estado de las
conexiones.

33
Aprende WinCC

34
Aprende WinCC

Diagnóstico de las comunicaciones en el runtime.

Lo primero que nos interesa dentro del runtime es saber de una manera gráfica y visual
si tenemos comunicación con el PLC.

Para ello vamos a definir una variable, la MB0, que accede a dicha zona de memoria
dentro del PLC.
Vamos al Graphic Designer y abrimos la pdl bottom.pdl, y en la esquina inferior
izquierda colocamos un objeto de tipo rectángulo como muestra la figura:

En las propiedades del rectángulo, en color de fondo, definimos un cuadro de diálogo


dinámico.

Asociamos la variable MB0 y activamos valor de estado de variables, seleccionando el


color rojo para el tipo “ninguna conexión”, mientras que para estado de comunicaciones
normal (otros), seleccionamos el color verde. Con esto ya podemos arrancar el runtime
y comprobar que cuando nos falla la comunicación o la CPU se coloca en stop el
recuadro nos lo indica pasando a rojo. La reconexión es automática una vez se ha vuelto
a run o colocado el cable de comunicaciones.

35
Aprende WinCC

También Podemos hacer lo mismo, pero a través de textos, que nos indiquen si la
comunicación es correcta o no.
Para ello vamos a colocar un campo de E/S al lado del piloto anterior en bottom.pdl
como muestra la figura:

Las propiedades las definimos como muestra la figura inferior, teniendo en cuenta que
vamos a asignar un cuadro dinámico en el que vamos a definir los textos que deseamos
que aparezcan en función de que tengamos conexión (RUN) o no (STOP).

36
Aprende WinCC

De esta manera estamos obteniendo una indicación del estado de las comunicaciones,
pero a un nivel muy simple (sin indicarnos el tipo de error, y sin poder determinar
siquiera si el problema es de que tenemos la CPU en stop o que nos falla el cable de
comunicaciones). Podemos obtener una información mucho mas precisa utilizando un
objeto denominado WinCC Chanel Diagnosis Control, que se encuentra en controles del
Graphic Designer.

37
Aprende WinCC

Lo vamos a insertar en una pdl que haremos nueva. Para ello abrimos start.pdl y la
renombramos como “diagnosis_comunicaciones_pdl”. En esta nueva pdl, en la zona
central de la pantalla insertamos el objeto como muestra la figura:

Ahora tendremos que entrar a dicha pdl. Lo haremos con el evento clic del
rectángulo que colocamos anteriormente, de tal manera que cuando el operario pinche
sobre el indicador saltará automáticamente a una ventana de diagnosis más detallada,
38
Aprende WinCC

como es esta que acabamos de realizar. Para ello, colocaremos la siguiente sentencia en
el evento clic del raton del rectángulo indicador:

OpenPicture("DIAGNOSIS_COMUNICACIONES.PDL");

Ya podemos comprobar el resultado, que será algo como lo que muestra la figura:

En esta pantalla, pinchando con el botón derecho del ratón podemos obtener ayuda
online sobre la causa del error de comunicaciones. Mediante esta utilidad sí que es
posible distinguir entre cpu en stop y fallo de comunicaciones.

39
Aprende WinCC

Generando alarmas de fallo de comunicaciones.

A nosotros lógicamente nos interesa tener un histórico de fallos de


comunicaciones. De esta manera podemos saber en qué momentos la instalación ha
dejado de comunicar con un determinado PLC y por cuanto tiempo (incluso podemos
saber hasta por qué causa).
Para poder realizar esto vamos a utilizar las alarmas de WinCC. El problema
reside en que las alarmas están pensadas para que cuando una variable se active en el
PLC se genere la alarma, y en este caso cuando fallan las comunicaciones no se va a
activar nada en el mismo.
Para solventar este problema vamos a recurrir a una función de WinCC que se
llama GetTagByteState(valor_del_plc), la cual nos va a devolver una variable de doble
palabra, en la que cada uno de los bits tiene un significado de error de comunicaciones.
Esta variable está chequeando el valor de la variable contenida en valor_del_plc, y
nosotros debemos de comprobar que su estado es cero. En cuanto sea distinta de cero
deberemos de activar una variable interna de tipo doble palabra. Esta variable interna es
la que nos generará la alarma. Parece complicado pero se hace en un momento. Vamos
allá.
Primeramente veamos que hace la función GetTagByteState. Tiene dos
parámetros:
9 Variable a chequear
9 Puntero a una doble palabra en la que la función deja el estado de las
comunicaciones
9 Devuelve un byte con el valor actual de la variable chequeada.

Nos queda saber qué nos va a devolver en el puntero de doble palabra del estado
de las comunicaciones. En función del tipo de error de comunicaciones nos devolverá:

DM_VARSTATE_NOT_ESTABLISHED 0x0001 // Verbindung zum Partner nicht aufgebaut


DM_VARSTATE_HANDSHAKE_ERROR 0x0002 // Protokollfehler
DM_VARSTATE_HARDWARE_ERROR 0x0004 // Netzwerkbaugruppe brennt
DM_VARSTATE_MAX_LIMIT 0x0008 // projektierte Obergrenze überschritten
DM_VARSTATE_MIN_LIMIT 0x0010 // projektierte Untergrenze unterschritten
DM_VARSTATE_MAX_RANGE 0x0020 // Formatgrenze überschritten
DM_VARSTATE_MIN_RANGE 0x0040 // Formatgrenze unterschritten
DM_VARSTATE_CONVERSION_ERROR 0x0080 // Anzeige Wandlungsfehler
DM_VARSTATE_STARTUP_VALUE 0x0100 // Initialisierungswert der Variablen
DM_VARSTATE_DEFAULT_VALUE 0x0200 // Ersatzwert der Variablen
DM_VARSTATE_ADDRESS_ERROR 0x0400 // Adressierungsfehler im Kanal
DM_VARSTATE_INVALID_KEY 0x0800 // Variable nicht gefunden / nicht vorhanden
DM_VARSTATE_ACCESS_FAULT 0x1000 // Zugriff auf Variable nicht erlaubt
DM_VARSTATE_TIMEOUT 0x2000 // Timeout / keine Rueckmeldung vom Kanal
DM_VARSTATE_SERVERDOWN 0x4000 // Server ist down

Ya habias definido una variable de comunicaciones llamada MB0, por lo que


ahora deberemos de realizar una acción con el Global Script que nos chequee el estado
de la misma. Previamente definimos una variable interna de tipo 32bits sin signo que se
denominará “FALLO_COMUNICACIONES_EQUIPO_1”.
La acción será de tipo global, y la denominaremos alarmas_cíclicas.pas, que
posee el siguiente código:

40
Aprende WinCC

#include "apdefap.h"

int gscAction( void )


{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END

DWORD *estado;

estado=SysMalloc(sizeof(DWORD));

GetTagByteState("MB0",estado); //Tipo de retorno :BYTE

if(estado>0)
{
SetTagDWord("FALLO_COMUNICACIONES_EQUIPO_1",1); //Tipo de retorno :BOOL
}
else
{
SetTagDWord("FALLO_COMUNICACIONES_EQUIPO_1",0); //Tipo de retorno :BOOL
}

return 0;
}

Como puedes observar lo que hacemos es activar a 1 la variable interna en


cuanto detectamos que el estado de la variable es distinto de cero. Podría complicar más
la cosa si activáramos diferentes bits de la variable interna en función del fallo de
comunicaciones.
Como es una acción deberemos de definir un disparo de la misma. En este caso
creo que con que chequeemos cada 10 segundos es bastante.

Una veza tenemos compilada la acción, salimos del Global Script y activamos la
parte de golbal script runtime si no lo estuviese. Nos queda ir al alarm loggin para
definir las alarmas de comunicaciones.

41
Aprende WinCC

Las alarmas de comunicaciones tendrán su propia clase de alarmas, para que


posteriormente las podamos filtrar en un ventana de alarmas que únicamente muestre las
alarmas concernientes a las comunicaciones.

Definimos dicha clase de avisos y dentro de ella el tipo de aviso


“comunicaciones”.

Activamos el acuse de aparición para que cuando se produzca un error de


comunicaciones tengamos que acusarlo, y así detectar cuando nos falla la comunicación
aunque se produjese cuando no estábamos observando el scada.

42
Aprende WinCC

Por ultimo definimos los textos de estado de nuestras comunicaciones (aparece,


desaparece...). El símbolo +/- indica una alarma que desaparece sin haber sido acusada
por el operario (fallo de comunicaciones mientras no observábamos el scada que se ha
solventado).

También definimos los colores con los que debe de aparecer la alarma de
comunicaciones.
Definimos acto seguido una alarma con los siguientes parámetros:

También definiremos el texto que debe de aparecer en la alarma cuando fallen


las comunicaciones, así como el lugar que comunican con el centro de control (donde se
encuentra el scada).

43
Aprende WinCC

Ya hemos finalizado con el alarm loggin. Salimos del mismo y arrancamos la


parte de runtime que le compete en equipo. Vamos a reutilizar la picture
diagnosis_comunicaciones.pdl.
En el centro de la misma colocaremos un control de tipo WinCC alarm control
como muestra la figura:

Los parámetros más importantes de esta ventana de alarmas serán:

La ventana será de tipo ventana de aviso o ventana de archivo temporal.


Deberemos de realizar una selección como muestra la figura inferior en la que
determinemos que únicamente se van a mostrar las alarmas del tipo
fallo_comunicaciones. La línea de avisos tendrá el siguiente aspecto:

44
Aprende WinCC

No te preocupes que el objeto de ventana de alarmas se superponga al anterior


de diagnosis de canal. Para eso están las capas de WinCC. Lo que debes de hacer es
poner cada ventana en una capa, y activándolas y desactivándolas podrás manejarte con
soltura. Si has observado, la ventana de winc chanel diagnosis control la hemos
reducido un poco de tamaño para poder insetar dos botones como muestra la figura:

En estos botones vamos a introducir un código que nos permita mostrar las dos
ventanas solapadas. En el botón de la izquierda, teclearemos:

SetPropBOOL(lpszPictureName,"ALARMAS_COMUNICACIONES","Visible",FALSE);
SetPropBOOL(lpszPictureName,"COMUNICACIONES","Visible",TRUE);

45
Aprende WinCC

Siendo ALARMAS_COMUNICACIONES la ventana de alarmas y


COMUNICACIONES la ventana de chanel diagnosis. Para el siguiente botón será el
mismo código pero inviertiendo el TRUE por el FALSE y viceversa.
Con esto ya tenemos un histórico de comunicaciones y diagnóstico de la misma
exhaustivo.

46
Aprende WinCC

Caappííttuulloo 3
C

G
Grraapphhiiccss D
Deessiiggnneerr..

El editor Graphics Designer se encarga de la confección de las pantallas de 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. Desde el propio Graphics Designer podremos
crear nuevas variables de comunicaciones, por lo que no será necesario salirse del
mismo si la variable a usar aún no ha sido generada.

Características

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.

47
Aprende WinCC

Si se desactiva la opción Show tips at startput, para volver a mostrar la ventana


de tips & tricks cada vez que se entre al Graphics Designer, es necesario seleccionar en
Option->Extras->Settings…->Display tips & tricks.

Propiedades de las pictures

Desde el Explorador de WinCC, presionando el botón derecho teniendo


seleccionado Graphic Designer y un PDL o pantalla ya realizado, accederemos a la
opción Properties del menú contextual, donde podremos observar una previsualización
del mismo, así como sus propiedades más importantes.
También podemos ver las estadísticas de la picture en la solapa dynamics.

48
Aprende WinCC

Convertir pictures de versiones anteriores.

Uno de los aspectos iniciales a la hora de convertir un proyecto de versiones


anteriores a la 5.0 es la necesidad de convertir sus imágenes o pictures.
Para ello, basta con presionar el botón derecho teniendo seleccionado el
Graphic Designer en el explorador de WinCC. En el menú, seleccionaremos la opción
Convert pictures. Desde este menú también podremos convertir la librería de proyecto y
la librería global de las funciones C de que dispusiera nuestro proyecto realizado con
una versión anterior de WinCC.

49
Aprende WinCC

Propiedades de los objetos

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

• Customize object: podemos asociar una nueva propiedad a un grupo de objetos para
generar nuevas funcionalidades a las agrupaciones de los mismos. Ejemplos de ello
son los smart objects de la biblioteca de objetos.
• Group objects: cuando se selecciona más de un objeto se pueden agrupar, de manera
que conforman uno nuevo que posee las características de los dos pero tiene un
nuevo nombre. La mayoría de los objetos de la biblioteca son agrupaciones de
objetos más simples. Las agrupaciones se pueden desagrupar en cualquier momento.
• Linking: Cuando copiamos varios objetos, se copian también sus enlaces a
variables. Imaginemos que hacemos un I/O asignado a una variable y lo copiamos
10 veces. Entrando en la ventana linking podemos observar el resumen de las
propiedades que se encuentran dinamizadas y modificarlas rápidamente.

• Configuration Dialog: se accede a un resumen de las propiedades del objeto más


importantes.
• Properties: se accede a una caja de diálogo en la que disponemos por un lado de
todas las propiedades del objeto y por otro de los eventos frente a los cuales
reacciona. Dentro de estos eventos podremos colocar nuestro código programado
para que ejecute el programa ciertas acciones cuando se generen estos eventos del
objeto.
50
Aprende WinCC

Propiedades del objeto Picture

La propia pantalla en la que trabajamos posee propiedades y eventos.


Presione el botón derecho sobre ella y elija properties.
Las propiedades son:

• Geometry:
• Picture Width: Ancho de la pantalla (en pixels).
• Picture Height: Alto de la pantalla (en pixels).
• Grid On: Activar la rejilla de puntos
• Grid Width: Ancho de la rejilla de puntos
• Grid Height: Alto de la rejilla de puntos

• 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

51
Aprende WinCC

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

52
Aprende WinCC

• 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:
o Mouse Action: Se ejecuta al presionar cualquier botón del ratón.
o Press Left: Se ejecuta al bajar el botón izquierdo del ratón.
o Release Left: Se ejecuta al levantar el botón izquierdo del ratón.
o Press Rigth: Se ejecuta al bajar el botón derecho del ratón.
o Release Rigth: Se ejecuta al levantar el botón derecho del ratón.

53
Aprende WinCC

• 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 Focus: Se ejecuta cuando el objeto recibe o pierde el foco (la posibilidad
de actuarsobre el mismo desde el teclado).
• 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.

54
Aprende WinCC

55
Aprende WinCC

Iconos de la ventana propiedades

Todas las ventanas de propiedades poseen tres iconos en su esquina derecha. El


significado de los mismos es:
Clip: Al presionarse impide que la ventana desaparezca, por lo que
podemos movernos por varios objetos de la pantalla observando sus
propiedades sin que desaparezca cada vez la ventana de la pantalla.

Copiar Propiedades: Copia las propiedades del objeto activo en ese


momento en el portapapeles.

Pegar propiedades: Pega las propiedades copiadas en el portapapeles al


objeto que esté activo en ese momento.

Barra de herramientas del Graphic Designer

La barra de herramientas del Graphics Designer posee los siguientes iconos:

Nueva picture

Abrir picture

Guardar imagen

Arrancar el runtime desde la picture actualmente abierta en el Graphics


Designer.
Traer objeto al frente. Util cuando existen varios objetos que se solapan.

Enviar objeto al fondo. Util cuando el objeto está tapando a otros.

Visualizar rejilla

Forzar objetos a rejilla

Aumentar zoom de la ventana

Disminuir zoom de la ventana

Realizar zoom a la selección. Realiza un zoom a una selección que


hagamos.

Copiar las propiedades del objeto en el portapapeles

Pegar las propiedades en el portapapeles


56
Aprende WinCC

Biblioteca de objetos.

La ventana del Graphics Designer con sus barras de herramientas activadas se


presenta así:

Biblioteca de objetos
La biblioteca de objetos es el lugar donde disponemos de imágenes pre-
configuradas que podemos utilizar en nuestras picture. Algunos de estos objetos en
realidad son agrupaciones de varios de ellos y llevan ya asociado código C de tal
manera que están preparados para realizar una tarea determinada (smart objects).

La biblioteca se compone de dos partes:

• Global library: biblioteca general accesible desde cualquier proyecto.


• Project library: librería exclusiva del proyecto.

57
Aprende WinCC

Para pasar un objeto a nuestra picture basta con arrastrarlo y soltarlo sobre la misma.

58
Aprende WinCC

Opciones del menú

Settings

En el menú Tools ->Settings disponemos de las siguientes opciones para


configurar el Graphic Designer:
En la opción grid podemos seleccionar:

• Display grid: El visualizar o no la rejilla al crear o abrir un picture.


• Width in pixels: El tamaño que debe tener la rejilla.
• Snap to grid: El ajustar o no los objetos a la rejilla.

59
Aprende WinCC

En la pestaña options podemos seleccionar:

• Save settings on exit: Grabar los cambios cuando se sale del Graphic Designer o
no.
• Display performance warnings: avisar cuando se detecte por el sistema un error
de diseño, p. Ej., cuando se asigne una actualización crítica a un parámetro que
pudiese sobrecargar la cpu del ordenador.
• El tipo de selección de los objetos:
o Surrounding: Los objetos se seleccionan si se encuentran
completamente dentro de la selección realizada.
o Touching: Los objetos se seleccionan aunque solo una parte de los
mismos se encuentre incluida en la selección.
Nota: para seleccionar varios objetos basta con mantener presionada la
tecla mayúsculas mientras se realiza un click sobre ellos.
• Object Tree: mostrar siempre igual el árbol de objetos, independientemente de
cómo se quedó la última vez al salir.
• Edit properties: Edita las propiedades al realizar clic sobre el dibujo.
• Configuration Dialog: usar el dialog box para configurar los objetos al
insertarlos en la picture o no.
• Display tops and tricks: Mostrar la ventana de tips and tricks al arrancar de
manera automática o no.
60
Aprende WinCC

• OCX display: Muestra o no la solapa de OCX insertables en las pictures de


WinCC.

En esta opción podemos seleccionar las capas que deben estar activas por
defecto en una picture y las que no.

61
Aprende WinCC

• Save configuration on exit: Memorizar la configuración de toolbars y posiciones de


las ventanas al salir del graphic administrator. Se puede escoger abajo el fichero en
el que se desea almacenar la configuración que por defecto será el fichero
default.pdd que se alamacena en el subdirectorio GraCs.
• Default Trigger: Define el tiempo para el refresco de los objetos en pantalla.

En la solapa Menu/Toolbar podemos seleccionar:

• Flat style for: El estilo de la barra de herramientas del Graphics Designer (botones
planos o con relieve, mostrar la linea lateral de la toolbar para desplazamiento o no,
mostrar color en los botones o no).
• Standard toolbar: podemos definir si se pueden configurar los botones de la toolbar
o no. Para configurar los botones, basta con presionar la tecla ALT y seleccionando
un icono de la misma, arrastrarlo fuera de la barra de herramientas.
• Display Buttons in Menu: podemos seleccionar si deben aparecer iconos al lado de
los textos del menu o no.

62
Aprende WinCC

63
Aprende WinCC

Idioma de la pantalla:

Podemos seleccionar diferentes idiomas para los textos asociados a todos los
objetos que coloquemos en las pantallas de 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

¿Cómo poder modificar el idioma actual de la pantalla activa?


En el menú del Graphic Designer, en la opción View->Language aparece una
ventana como la de la figura y podemos seleccionar nuestro idioma.

¿Cómo hacer una misma pantalla en Inglés y en Español?


Seleccione al principio el idioma Español (tradicional), coloque todos los objetos
que desee que aparezcan, escriba todos los textos, y grabe la pantalla. Ahora cambie de
idioma al inglés y verá como todos los textos aparecen en interrogantes. Vuelva a
escribirlos, esta vez en inglés.

64
Aprende WinCC

Agrupar y desagrupar objetos.

Cuando se selecciona más de un objeto se permite la opción de agrupar los


mismos en un elemento que posee las propiedades de ambos. La idea es crear
agrupaciones de objetos que posean una determinada funcionalidad, p. Ej., cuadrados y
rectángulos que combinados y agrupados forman una tubería. A estas agrupaciones de
objetos se les puede asignar código para su dinamización de una manera sencilla, a la
vez que exportarlos a la librería de proyecto para su posterior reutilización.

Tab Secuence.

Todos los objetos poseen un orden de tabulación. Este parámetro nos indica que
objeto será activo en un determinado momento según el objeto que actualmente posea el
foco (esté activo) al presionar la tecla tab.
Existen dos órdenes de tabulación:

• Alpha cursor sequence: únicamente para cajas I/O.


• Tab order: todos aquellos objetos que se puedan seleccionar con el tabulador.
Esto se define dentro del menu Edit->tab sequence->tab order->settings.

Si seleccionamos en el menu edit la opción Tab sequence->Alpha cursor-


>sequence->edit podremos modificar el orden de alternancia entre los distintos campos
de entrada/salida de nuestra picture actual. Para modificar el orden basta con clickear en
el cuadrado de secuencia de uno de ellos. Si al realizar click se presiona la tecla shift el
objeto seleccionado adquiere el orden 1 de tabulación automáticamente.

Para modificar el tab order deberemos seleccionar en el menu edit la opción Tab
sequence->tab order->sequence->edit

Para eliminar un objeto de la secuencia de tab deberemos de seleccionar de


nuevo tab order, y manteniendo presionadas las teclas shift+ ctrl seleccionar el objeto

65
Aprende WinCC

que se desea eliminar del orden de tabulación. Su número será sustituido por un
asterisco.
Para volver a insertar un objeto en el orden de tabulación manteniendo
presionadas las teclas shift+ ctrl seleccionar el objeto que se desea insertar en el orden
de tabulación. Su asterisco será sustituido por un número.

Barras de herramientas.
Barra de colores

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.

Barra de zoom
Gracias al zoom podemos hacer escalados a la picture hasta de 8 aumentos y
reducciones hasta 1/4 parte. Podemos acceder al zoom sin necesidad de ratón
presionando Alt+z y las teclas de subir y bajar.

66
Aprende WinCC

Barra de objetos
Los objetos de la barra de objetos se dividen en tres categorías:

• Standard Objects: Objetos estándar de dibujo, tales como líneas, polígonos, etc..

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

67
Aprende WinCC

• Barra de layers:

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.

Es conveniente, cuando necesitemos poner objetos que se superponen (p. Ej. Un


efecto de sobra bajo un texto, o un mensaje de ayuda que aparece sobre un botón) que
asignemos diferentes capas, para que podamos desactivarlas pinchando sobre ellas y
trabajar de una manera más cómoda en el editor de dibujo.

• Barra de alineación.

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.
El significado de cada uno de los botones de alineación comenzando por la
izquierda de la ventana es el siguiente:

• alinear todos los objetos seleccionados a la izquierda.


• Alinear todos los objetos seleccionados a la derecha.
68
Aprende WinCC

• Alinear todos los objetos seleccionados por arriba.


• Alinear todos los objetos seleccionados por abajo.
• Centrar todos los objetos horizontalmente.
• Centrar todos los objetos verticalmente.
• Igualar el espacio entre todos los objetos de manera horizontal.
• Igualar el espacio entre todos los objetos de manera vertical.
• Dar igual anchura a todos los objetos.
• Dar igual altura a todos los objetos.
• Dar igual altura y anchura a todos los objetos.

Es muy importante saber cual va a ser el objeto que se tome como referencia para
las acciones. Si se han seleccionado los objetos por el método...:
• de abrir una ventana de selección: se toma como referencia el que esté más al
extremo de la ventana.
• utilizando el ratón y teniendo presionada la tecla mayúsculas: el primero que se
seleccionó.

• Barra de fuentes

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.

• Barra de estilos

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

69
Aprende WinCC

70
Aprende WinCC

Smart Objects

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.

• I/O Field:

Caja de entrada/Salida para visualizar el valor de una variable y poderlo


modificar.

71
Aprende WinCC

Destacar en estas propiedades:


• Bold : La fuente de la caja en negrita
• Underline: La fuente de la caja subrayada
• Text orientation -> orientación del texto de la caja (horizontal o vertical)
• X Alignement -> alineación con respecto al eje x (izquierda, centrado o derecha)
• Y Alignement -> Alineación con respecto al eje y (arriba, centrado o derecha)

72
Aprende WinCC

El flashing es una agrupación de propiedades no vista hasta ahora. Básicamente


se utiliza para señalizar un cierto estado de algún elemento de la instalación que esté
representado por dicho objeto. Si la presente caja de I/O está representando un valor de
presión de agua, podemos representar aquí dicho valor con el fondo parpadeando
cuando se exceda un determinado límite de seguridad.

Las opciones disponibles son:

• Flashing border active: Que parpadee el borde de la caja.


• Flashing border color off: Color del parpadeo del borde en estado off
• Flashing border color on: Color del parpadeo del borde en estado on.
• Border Flashing frequency: Frecuencia del parpadeo. Disonemos de tres
velocidades: lenta, media y rápida.
• Flashing Background active: Que parpadee el fondo de la caja.
• Flashing background color off: Color del parpadeo del fondo en estado off.
• Flashing background color on: Color del parpadeo del fondo en estado on.
• Background Flashing frequency: Frecuencia del parpadeo del fondo. Disonemos de
tres velocidades: lenta, media y rápida.
• Flashing Text active: Que parpadee el texto de la caja.
• Flashing Text color off: Color del parpadeo del texto en estado off.
• Flashing Text color on: Color del parpadeo del texto en estado on.
• Text Flashing frequency: Frecuencia del parpadeo del texto. Disonemos de tres
velocidades: lenta, media y rápida.

73
Aprende WinCC

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: Cuando el nuevo valor ha sido llevado a cabo por el
sistema se alamacena dicho mensaje en el sistema para su posterior estudio.
• 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.

74
Aprende WinCC

Limits:

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

75
Aprende WinCC

• Output value: Variable de proceso que contiene la caja.


• Data format: Formato de los datos a representar.

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

76
Aprende WinCC

Las diferentes posibilidades en formatos de entrada son


:
• Formato binario: debe estar compuesto por unos y ceros.
• Formato decimal: debe estar compuesto por:

s -> proporcionar signo (+ o -)


e ->representación exponencial.
9 -> numero entre 0 y 9.
0 -> ceros de relleno a la izquierda que deben aparecer.
. -> punto decimal.

Ejemplo:
9.9 -> 1.0
s9.9 -> +1.0
s9.9e -> +1.0E+00
09.99 -> 01.00

• Formato string: compuesto por:

* -> cualquier cadena


? -> un carácter.
a -> cualquier carácter o número
A -> cualquier carácter en mayúsculas o número.
b -> cualquier carácter en mayúsculas o minúsculas.
B -> cualquier carácter en mayúsculas.
d -> signo + o -, punto decimal, espacio en blanco o número.
t -> separador (:,;) o espacio en blanco.
1 -> número 0 o 1
2 -> número 0, 1 o 2.
h -> carácter hexadecimal.

• Formato hexadecimal:

f -> carácter hexadecimal.


0 -> cero de relleno a la izquierda de caracteres hexadecimales.

77
Aprende WinCC

• Apply on full: Determina si el valor introducido se da por validado cuando se


han completado todos los dígitos del campo de manera automática, o es
necesario presionar enter o cambiar de campo activo con tab para que se
considere validado el campo.
• Apply on exit: Fuerza al sistema a dar como validado el campo inmediatamente
después de que sea realizada la validación por el usuario (mediante enter o el
tabulador).
• Clear on new Input: Indica si cuando se va a introducir valores en el campo,
debe de borrarse el valor que existiera anteriormente, o se conserva y editamos
el nuevo valor sobre el anteriormente existente.
• Clear on invalid input: Indica si al introducir un valor no válido en la caja, debe
de borrarse de esta el valor erróneo para que sigamos introduciendo uno
correcto, o nos permite editar el valor erróneo para modificarlo y que sea válido
para el sistema.
• Hidden Input: Oculta el valor que se está introduciendo mediante caracteres de
*. Esta opción es útil para la solicitud de passwords al usuario.

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:

78
Aprende WinCC

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

79
Aprende WinCC

• Colors:
• Border Color: Color del borde de la barra.
• Border Background Color: Color del fondo del borde de la barra. Solo es
visible si el estilo del borde de la barra no es sólido.
• Background color: Color del fondo de la ventana de la barra.
• Fill Pattern color: Color de rellenado de la ventana de la barra. Solo es
visible si el estilo del fondo de la ventana no es sólido.
• Bar color: Color de la barra.
• Scale color: Color de la escala.
• Bar Background color: Color del fondo de la barra.
• Trend color: Color de la tendencia. La tendencia es un indicador que aparece
en la esquina inferior de la barra indicándonos el sentido del proceso
(creciente o decreciente).

• Styles:
o Border Weight: Anchura del borde de la ventana de la barra.
o Border Style: Estilo del borde de la ventana.
o Fill Pattern: Estilo de rellenado del fondo de la ventana de la barra.
o Bar Pattern: Estilo de rellenado de la barra.

80
Aprende WinCC

• Font:
o Font: Fuente de la escala e la barra.
o Font Size: Escala de la fuente de la escala de la barra.
o Bold: Si dicha fuente debe aparecer en negrita.

81
Aprende WinCC

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.

82
Aprende WinCC

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.

83
Aprende WinCC

LINEAL LOGARIT. NEG. LOGARIT. AUTOMATIC TANGENT CUADRATIC

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.

84
Aprende WinCC

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

85
Aprende WinCC

que la barra cambia de color cuando el valor del proceso está por encima del valor
estipulado como límite de alarma.

Como ya dijimos, todo objeto tiene su Configuration dialog, o resumen de


propiedades. En el caso de la barra son:

86
Aprende WinCC

Graphic Object.

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.

Los formatos que soporta el objeto son:


• Bmp
• Emf
• Wmf
• Dib.

Cuando se selecciona una imagen, esta se copia automáticamente en el subdirectorio


GraCS de nuestro proyecto, por lo que una vez la seleccionemos en algún objeto estará
disponible para todos los demás que realicemos.

87
Aprende WinCC

El Configuration Dialog del Graphic Object es el que se muestra en la imagen


siguiente.

88
Aprende WinCC

Status display.

El status display es el objeto a utilizar para mostrar animaciones en pantalla.


Estas animaciones se componen de hasta un máximo de 31 imágenes que se van
mostrando en función del valor que adopte una variable asignada.
El Configuration Dialog del status display es el siguiente:

Existen dos posibilidades a la hora de realizar la animación:


• que exista un valor que se va incrementando desde 0 hasta x. Esta opción suele ser
una variable interna, y se incrementa mediante una función en C desde WinCC.
• que exista un valor de comunicaciones que nos indica en que posición se encuentra
la máquina. Cada bit de la palabra muestra un estado de la máquina. En este caso
hay que utilizar el botón Add que nos irá incrementando el valor a chequear para el
cambio de imagen en potencias de 2.

89
Aprende WinCC

Algunas propiedades interesantes de este objeto son también:

90
Aprende WinCC

Text list.

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

• Asignement: Asignación de los textos a los diferentes valores numéricos.


• Bit number: Bit de la palabra que define el estado. Unicamente itene sentido para el
tipo list type:bit.
• Apply on exit: Aplica los cambios al abandonar el foco de dicho objeto, ya sea con la
tecla tab o pichando con el ratón en otro objeto, sin necesidad de pulsar la tecla enter
prteviamente.
• Number of visibles lines: Líneas de texto visibles al desplegar la ventana de
selección de valor.
91
Aprende WinCC

92
Aprende WinCC

Buttons.

El objeto button es el encargado de la asignación de las funciones típicas de


manejo por el programa de la aplicación (cambio de pantalla) y realización de funciones
predefinidas (activar una determinada bomba, etc...).
La ventana de configuration dialog de button es la siguiente:

El campo text es el texto que aparece sobre el botón.


• Hotkey es la función del teclado que se asigna a ese botón, de tal manera que
presionando dicha tecla se ejecuta la función que se haya asociado al mismo.

Destacar que la asignación del teclado no se limita a las teclas de función


pudiéndose asignar hasta la tecla de ESC o la de ENTER para salirse de las pantallas o
entrar a elllas como si se estuviese en una OP.

93
Aprende WinCC

• Password es el campo en el que indicamos el nivel de autorización requerido para


poder ejecutar la acción del botón.
• El campo inferior de la ventana está reservado por si deseamos darle al botón la
funcionalidad típica de cambiar de pantalla. Podemos asignar con el icono que
aparece a la derecha una de las pictures ya definidas

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

94
Aprende WinCC

Check box.

El control checkbox es la manera de seleccionar opciones no excluyentes entre sí


dentro de una selección requerida al usuario.

• Number of boxes: Cantidad de cajas de selección a introducir en el control.

95
Aprende WinCC

• Index: Indice actual dentro del array de cajas de control.


• Text: Texto asignado para este idioma y este índice de caja. Para cambiar los textos
de otras cajas, cambie el número de Index.
• X Alignement: Alineación en el eje X de los textos.
• Y Alignement: Alineación en el eje Y de los textos.

• Selected Boxes: Cajas que están activas por defecto según el array generado (en el
ejemplo solo la primera de las tres).

La visualización del control tal como lo hemos configurado es la siguiente:

96
Aprende WinCC

Option button.

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.

97
Aprende WinCC

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: Si se pincha copn el ratón en cualquier parte de la barra que no
sean los botones de subir y bajar, el valor se va directamente al mínimo o al máximo

98
Aprende WinCC

estando activado este parámetro. En caso contrario, se incrementa el valor en una


unidad cada vez que se pinche en la barra de desplazamiento.
• Operation steps: incrementos en que aumenta o disminuye la variable de proceso
cada vez que nos desplazamos por la barra.

Podemos asignar también colores a la barra y a los botones de máximo y mínimo


de manera individualizada, así como al fondo con respecto a lo que lleva y lo que queda
hasta el máximo.

99
Aprende WinCC

Round.

El objeto round está ideado como pulsador con enclavamiento o como


visualizador de estado (presionado o no presionado).

Las opciones más interesantes son:


• Latch Down: Mantiene el botón enclavado en función set/reset pese a no estar
presionándolo.
• Pressed: Valor actual del botón (0 = no presionado / 1 = presionado).

100
Aprende WinCC

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.

Dinamic Dialogs System Functions:

• 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:
• Exit Windows without restart:Apaga el sistema Windows NT, cerrando
todas las aplicaciones.
Código: DMExitWinCCEx(DM_SDMODE_SYSTEM);
• Exit WinCC: Sale de WinCC.
Código:DMExitWinCCEx (DM_SDMODE_WINCC);
• Exit WinCC and logon again: Sale de WinCC y vuelve a solicitar un nuevo
usuario de Windows NT.
Código:DMExitWinCCEx (DM_SDMODE_LOGOFF);
• Exit WinCC and restart Win dows: Sale de WinCC y rearranca Windows
NT.
Código: DMExitWinCCEx (DM_SDMODE_REBOOT);

101
Aprende WinCC

• Exit WinCC runtime: Sale de la runtime de WinCC, pero no del desarrollo de


WinCC si estuviese abierto.
Código: DeactivateRTProject ();
• 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 */

102
Aprende WinCC

• Start another aplication: Arranca otra aplicación que deseemos ejecutar.


Código: ProgramExecute("C:\\Archivos de programa\\Microsoft
Office\\Office\\EXCEL.EXE");

Standard Dinamics:

• 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.
• Color Dinamics:
• Color Dinamics with table:
• Copy tag value: incluye el código que copia una variable en otra. El código asociado
es el siguiente:
double VarInh;

{ VarInh=GetTagDouble(TAG_0);
SetTagDouble(TAG_1,VarInh);
}

Es importante tener en cuenta que únicamente se copian variables de tipo word,


no apareciendo la posibilidad de copiar las de otro tipo. Cuando sea necesario copiar
una variable en otra, es mejor realizarlo “a mano” en C.

103
Aprende WinCC

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

104
Aprende WinCC

• Make a property dinamic: dinamizar una propiedad.


• Move object: dinamiza las coordenadas de un objeto seleccionado de acuerdo a dos
variables definidas de tal manera que en función de las variables se moverá la
posición del objeto.

105
Aprende WinCC

• Display error: muestra una ventana de error en pantalla. Este Wizard es muy útil
para sacar mensajes al operario frente a error de manejo.

106
Aprende WinCC

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.

107
Aprende WinCC

• Single picture change: abrir una ventana. Equivale a Openpicture();

108
Aprende WinCC

Dinamización de propiedades

Dinamización a través de una variable

Las dinamización de las propiedades de un objeto se puede realizar de diferentes


maneras. La más sencilla de todas reside en conectar la propiedad a una variable de
manera directa, de tal forma que el valor que posea la variable será el que tenga la
propiedad, y viceversa.

La representación de una asignación directa a una variable se realiza con una


bombilla verde.

Dinamización a través de dinamic dialog

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.

Dinamización mediante código C

La última forma de poder dinamizar una propiedad es directamente programar


en C una operación que nos debe de devolver el valor que controlará la propiedad. Solo
es necesaria esta solución en casos de cálculos matemáticos muy complejos.

La representación de su asignación se realiza por un rayo verde.

Dinamización indirecta de una propiedad

109
Aprende WinCC

Además de poder dinamizar una propiedad asignándole un valor, ya sea a través


de una variable o del resultado de operaciones matemáticas, podemos realizar una
asignación indirecta del valor de la propiedad.
Supongamos que tenemos una caja de I/O y queremos mostrar la temperatura de
la sala. Dependiendo de una serie de botones, podremos seleccionar una sala u otra. La
caja de I/O deberá cada vez estar asociada a una variable distinta. Para conseguir esto,
se asocia una variable de tipo texto a la propiedad en cuestión (en nuestro caso Output
Value). Todas las propiedades tienen una caja de asignación a la derecha llamada
indirect. Seleccionándola, el valor de la cadena VAR_TEXTO indica el nombre de la
variable que debe de conectarse a la salida de la caja. Por lo tanto, cambiando
VAR_TEXTO cambiamos la variable conectada en dicha propiedad.

Programación de eventos

Los eventos de un objeto deben de programarse en C. Sin embargo, existe un


pequeño asistente que nos puede evitar en algunas circunstancias tener que recurrir a la
programación para realizar nuestras acciones en los eventos.
En WinCC este asistente se denomina Direct connection y tiene el aspecto
inferior:

110
Aprende WinCC

Cuando se realiza un direct connection a un evento queda indicado mediante un


rayo azul:

Programación en C de eventos

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:

Sin embargo, no siempre la programación en C que realicemos será correcta.


Cuando el código asociado contenga errores y no pueda ser compilado por WinCC, se
nos indicará mediante un rayo amarillo. Tenemos que tener en cuenta que en esta
circunstancia no se ejecutará el código aunque se produzca el evento.

111
Aprende WinCC

Caappííttuulloo 4..
C

A
Allaarrm
maass:: A
Allaarrm
m LLooggggiinngg

Diferentes tratamientos de las alarmas.

Las alarmas en WinCC las podemos utilizar para enterarnos de más cosas que
exclusivamente si ha saltado un diferencial. Esto ya lo pusimos en práctica al principio,
utilizándolas para almacenar un histórico de usuarios con el que poder determinar que
operarios tenían el control del sistema en cada intervalo de tiempos del día.
En el presente capítulo las vamos a utilizar para lo que están principalmente
diseñadas:
9 Detección de alarmas actuales en la instalación.
9 Histórico de alarmas de la misma, y
9 Detección de fallos internos de programación y mensajes internos del
compilador del sistema WinCC.

El almacenamiento del histórico de alarmas puede realizarse en formato de


tambor, o de manera ilimitada. En este segundo caso, será necesario a la larga borrar “a
mano” el histórico de la base de datos runtime. Como existe la limitación de que
únicamente se permiten visualizar en WinCC 1000 alarmas en la ventana de alarmas,
nos encontraríamos si utilizásemos el segundo tipo de almacenamiento con el problema
de tener un histórico muy potente, pero tener que realizar filtros de selección por fechas
para poder observar dichos valores constantemente, a la vez que estar obligados a borrar
el histórico cada cierto tiempo.
Es por esto que en el ejemplo vamos a utilizar el almacenamiento por tambor,
que es mas práctico y produce casi el mismo resultado. La perdida de alarmas con el
paso del tiempo se puede solventar a través de Access si lo deseamos, como veremos
más adelante.

Diseño de las alarmas.

Una alarma se compone de bloques como sabemos, por lo que vamos a definirlos en
primer término. Entramos al Alarm Logging y definimos los siguientes bloques de
sistema:

112
Aprende WinCC

Como bloques de usuario:

Pasamos a las clases de aviso. Esta vez no vamos a crear una nueva clase de aviso, sino
que utilizaremos la que ya viene prediseñada en el WinCC, llamada Error. En las
propiedades de la clase definiremos los textos que deseamos que identifiquen sus
diferentes apariciones y desapariciones.

Vamos a utilizar el tipo de alarma “Alarma”, por lo que entramos a sus propiedades y
realizamos la siguiente asignación de colores:

Ya estamos en disposición de definir nuestras primeras alarmas. Las alarmas deben


dentro de la memoria del PLC de agruparse en palabras de 32 bits para ahorrar tiempo
de lectura de comunicaciones y variables a adquirir en el runtime. Lo recomendable es
crear dentro del PLC una DB, en la cual cada uno de los bits de la misma identifica una
alarma del proceso, y otra DB para los avisos del sistema que no requieren acuse. En
nuestro ejemplo, para poder mostrar mejor todas las posibilidades, vamos a crear una
variable interna de 32 bits que llamaremos “ALARMAS”.

113
Aprende WinCC

De nuevo en el Alarm Logging definimos una nueva alarma, que posee las siguientes
características:

Observemos que la hemos asignado al tipo alarma de la clase Error, que deseamos que
se archive (para que aparezca posteriormente en el histórico de alarmas), y que active
una acción. ¿Qué es activar una acción y para qué lo vamos a utilizar?. Bien, mas
adelante vamos a desear que suene un sonido por los altavoces del pc cada vez que
aparezca una nueva alarma en la instalación. Luego necesitaremos que se ejecute una
acción en c ante la llegada de una nueva alarma. El activar esta casilla indica a WinCC
que ante cualquier evento de dicha alarma (que aparezca, desaparezca, sea reconocida),
entre a un función ya definida en WinCC que se llama gmsgfunc.fct.
Un tema muy importante sobre esto que estamos comentando es el hecho de que dicha
función no reside dentro de nuestro proyecto, sino en el subdirectorio
c:\Siemens\WinCC\aplib\alarm. ¿Y qué importa?. Nada, si tenemos esto en cuenta a la
hora de llevarnos la aplicación a otra instalación, o de nuestra oficina al ordenador de la
fábrica. Cuando copiamos todo el subdirectorio de nuestro proyecto, deberemos de tener
la precaución de copiar este archivo también, para posteriormente copiarlo en le mismo
subdirectorio de WinCC del pc destino de nuestro proyecto, o no servirá para nada que
tengamos activada la opción “activa un acción”, ya que acudirá al gmscgfunc.fct, pero
no tendrá código, estará vacío.

114
Aprende WinCC

Continuando con la explicación, vemos también que hemos asignado la variable interna
“alarmas”, y que deseamos que el bit 0 de la misma active la presente alarma.
Los textos de la alarma los introducimos de lo más clarificadores para este ejemplo:

Y en el bloque usuario esta vez no vamos a colocar nada, ya que para esta alarma no lo
vamos a gastar.

Definimos dos alarmas más, una con el bit 1 y otra con el 2 de la variable
alarmas, cambiando los textos para poder posteriormente identificarlas de una manera
sencilla. Recuerda que puedes seleccionar la que acabas de realizar copiarla y pegarla
para crear las dos nuevas.

Ya hemos finalizado con el Alarm Logging. Activamos la parte de runtime de alarmas


de nuestro equipo y ya estamos en disposición de ir al Graphic Designer.

115
Aprende WinCC

Histórico de alarmas.

Copiamos la pdl start.pdl y la renombramos como alarmas.pdl.


En bottom.pdl introducimos el siguiente botón de la biblioteca:

El código asociado al mismo será el siguiente en el evento clic del ratón:

OpenPicture("ALARMAS.PDL"); //Tipo de retorno :void

Observemos que en cuanto ejecutemos este código nos vamos a ir a la pdl alarmas,
abandonando la pdl start. ¿Y luego como volvemos?. Es necesario en este punto poseer
un sistema de navegación por ventanas. Para ello diseñamos al principio top.pdl, para
colocar en ella botones de acceso a las diferentes pantallas de nuestra instalación. Pero
ahora mismo no vamos a utilizar este método de navegación, sino unas funciones en c
que nos permite ir a la pantalla inicial a la de la que veníamos, o regresar a la que
fuimos, fuese en cada momento la que fuese. Para observar esta funcionalidad en
bottom introduciremos los siguientes botones de la biblioteca a la izquierda de la pdl:

Estos botones de la biblioteca ya poseen las siguientes funciones asociadas (que


podríamos asignar a cualquier otro botón para conseguirlas):

OpenPrevPicture();
OpenHomePicture();
OpenNextPicture();

Estas funciones se encuentran en el siguiente subdirectorio de funciones c:

116
Aprende WinCC

Ya podemos por lo menos ir a larmas.pdl y volver a start.pdl. Vamos adefinir la ventana


de alarmas. Abrimos alarmas.pdl e introducimos un objeto de tipo

La ventana tendrá el siguiente aspecto:

Te estarás preguntando que qué son los botones de la derecha que aparecen sobre la
ventana de alarmas. Vamos a colocarlos, para poder activar y desactivar bits de la

117
Aprende WinCC

variable alarmas, con lo que en realidad estaremos generando y haciendo desaparecer


nuestras tres alarmas anteriormente creadas a voluntad desde esta pantalla.

Para poder activar o desactivar bits utilizaremos un wizard de WinCC como muestra la
figura:

Repetimos la operación para los otros 5 botones y ya estamos en disposición de hacer


aparecer alarmas en la ventana de alarmas.
Vamos a editar las propiedades de la ventana de alarmas (clickeando dos veces sobre la
misma, que es una forma más cómoda de observarlas que utilizar el boton derecho del
ratón y seleccionar propiedades).
Esta ventana va a servirnos para ver el histórico de alarmas, por lo que seleccionaremos
Ventana de archivo temporal, que es una desafortunada traducción de ventana de
archivo en formato tambor.

118
Aprende WinCC

Si le pones titulo a la ventana de alarmas el WinCC la hace automáticamente


movible, y que puede ser cerrada, por lo que desactivamos ver titulo de ventana
Una de las cosas más importantes que deberemos de realizar en esta solapa es
realizar un filtrado de selección de alarmas. ¿Porqué?. Bien, recordemos que
habiamos utilizado las alarmas para fallo de comunicaciones, y para registro de
usuarios. En esta en concreto no deseamos observar dichas alarmas, porque le
damos otro tratamiento distinto. Por todo esto, deberemos de presionar el botón
selección y definir que unicamente deseamos observar en esta pantalla las alarmas
de clase error.

119
Aprende WinCC

En la siguiente solapa definiremos la selección de la alarma por fila, y un


desplazamiento automático para que acuda a la última alarma cuando no nos quepan
en pantalla.

La barra de herramientas no poseerá todos los botones. Veamos los no deseados y el


porqué de su exclusión:
9 Obtener fichero histórico: hemos quedado que es mejor fichero circulante
para las alarmas, luego no tiene sentido tener un botón del mismo.
9 Función de informe: el tratamiento de informes lo realizaremos nosotros
para tener un mayor control sobre los mismos.

120
Aprende WinCC

Por último definimos los bloques que compondrán nuestra línea de alarmas y el
orden que poseerán en la misma

Ya podemos comprobar nuestra ventana de alarmas en el runtime.

121
Aprende WinCC

Alarmas Actuales.

Nuestro siguiente objetivo es poder mostrar en bottom.pdl una ventana en la que


aparezca reflejada la última alarma que ha aparecido en la instalación. Para ello
introduciremos un WinCC alarm control como muestra la figura:

Esta ventana de alarmas posee las siguientes propiedades:


9 El tipo de ventana es de aviso.
9 Tambien aplicamos aquí una selección para que únicamente nos muestre las
alarmas de tipo error.
9 En la solapa parámetros no aplicamos selección, ni mostramos título de columna
ni título de fila.

9 No mostramos ni barra de herramientas, ni barra de estado.


9 Por último seleccionamos los siguientes bloques para la ventana de alarmas.
Aquí no son necesarios ni el número de alarma, ni la duración, ni el usuario,
que quedan para la ventana del histórico.

122
Aprende WinCC

Si lo ejecutamos y activamos alguna alarma comprobamos que falta algo: como


acusarlas desde la propia bottom.pdl. Tenemos que ir a acusarlas a alarmas.pdl.
Debemos pues de poner un botón como muestra la figura en bottom que nos permita
acusar las alarmas actuales desde cualquier pantalla.

A la ventana de alarmas de bottom.pdl la nombraremos como


“VENTANA_ALARMAS_ACTUALES”. Hecho esto deberemos de asociar el
siguiente código al botón de acuse de alarmas:

AXC_OnBtnSinglAckn(lpszPictureName,"VENTANA_ALARMAS_ACTUALES");

Ya podemos comprobar como queda en nuestro proyecto la nueva ventana de


alarmas en la parte inferior de nuestras ventanas.

123
Aprende WinCC

Un indicador de nueva alarma.

Puede que nos interese hacer un indicador al estilo de los paneles de operador,
de tal manera que cuando aparezca una nueva alarma parpadee en la pantalla hasta que
presionemos el botón de acuse, indicándonos que tenemos una alarma pendiente de
acusar que aún no hemos atendido.
Una idea podría ser esta que vamos a desarrollar a continuación. Vamos a crear
una nueva variable interna de tipo bool denominada ACUSE. En la pdl bottom.pdl
introducimos el siguiente icono de la librería:

En la propiedad del objeto visualización asociamnos la variable booleana.

También activamos la opción de parpadeo con velocidad media para que


parpadee cada medio segundo cuando sea visible.
Volvemos al Alarm Logging. Nuestro objetivo va a ser que cuando aparezca una
nueva alarma de tipo error se active el bool ACUSE y se desactive con el botón de
acuse que hemos colocado a la derecha de la ventana. Lo primero que hacemos es esta
asociación, que conseguimos si pulsamos el botón derecho sobre clase de avisos->error,
en la segunda solapa, como muestra la figura:

124
Aprende WinCC

El truco está en asociar en acuse del señalizador central la variable anterior. Además de
realizar este proceso, es necesario que las alarmas de dicha clase (error) tengan activada
la opción activa el señalizador central.

Ya podemos comprobar como nos queda nuestra imitación de panel de operador.

125
Aprende WinCC

Imprimir las alarmas en papel.

A la hora de realizar Reports de alarmas nos interesa disponer de dos:


9 Alarmas actuales
9 Histórico de alarmas.
Comenzaremos por realizar los dos Report con el Report Designer que nos permitirán
realizar estas tareas.
Podemos crear uno desde cero o abrir el Report @ccalgrtonlinemessages.rpl y
renombrarlo. Crearemos primero un Report denominado alarmas_actuales.rpl.
Las propiedades de la parte dinámica serán:

Si editamos la selección podremos seleccionar tanto los bloques que compondrán


nuestra línea de alarmas como la selección de la clase de alarmas a mostrar.

126
Aprende WinCC

Ya tenemos nuestro Report. Necesitamos ahora realizar una nueva orden de


impresión, como la siguiente:

Ya podemos pasar al Report del histórico de alarmas. Creamos un nuevo Report con
la siguiente tabla dinámica:

Las propiedades de bloques de línea y selección son las mismas que anteriormente
para la de alarmas actuales. También realizamos una orden de impresión como la
siguiente:

Ya estamos en disposición de llamar a estos Report desde dos botones que


colocaremos sobre la ventana de alarmas de alarmas.pdl.

127
Aprende WinCC

El código que asociaremos al botón de alarmas actuales será el siguiente:

RPTJobPreview("ORDEN_ALARMAS_ACTUALES");

Mientras que el del botón de histórico será el siguiente:

RPTJobPreview("ORDEN_HISTORICO_ALARMAS");

El resultado final lo podemos apreciar en la imagen, en la que estamos


visualizando el Report del histórico de alarmas.

128
Aprende WinCC

Filtrados de selección de alarmas.

Cuando comenzamos a tener muchas alarmas en el histórico necesitaremos hacer


filtrados de las mismas para poder saber, p. Ej. Las que se produjeron hace 3 meses, o
todas las que conciernen a un determinado número de alarma.
Esto se puede realizar de una manera sencilla desde el botón de selección de la ventana
de alarmas. En el ejemplo de la figura estamos filtrando en la ventana de alarmas
únicamente

Esto mismo que estamos realizando por la ventana de selección también lo podemos
realizar a través de código C. Veamos este mismo ejemplo, pero a través de un botón
que nos filtra las alarmas de número 4 (igual que el ejemplo anterior, pero esta vez en
C).

BOOL ret;
MSG_FILTER_STRUCT Filter;
CMN_ERROR Error;

( &Filter, 0, sizeof( MSG_FILTER_STRUCT ) );

( Filter.szFilterName, " Ventana_Alarmas ");

Filter.dwFilter = MSG_FILTER_NR_FROM | MSG_FILTER_NR_TO;


Filter.dwMsgNr[0] = 4;
Filter.dwMsgNr[1] = 4;
ret = AXC_SetFilter(lpszPictureName,"Ventana_Alarmas",&Filter,&Error);

Si queremos mediante un botón volver a mostrar todas las alarmas de clase error el
código sería:

char cadena[200];

strcpy(cadena,"MSGNR >= 4 AND MSGNR <= 4 AND CLASS IN( 1 ) AND TYPE IN( 1 ,2 ,3 )");
SetPropChar(lpszPictureName,"Ventana_Alarmas","MsgFilterSQL",cadena);

En la primera parte del código creo que queda claro como se define el rango de
selección. La pregunta surge con la segunda parte, con la asignación a la cadena de
texto “cadena”. ¿Cómo podemos saber que cadena de texto es la que realiza el filtrado
que nosotros deseamos. Es bastante sencillo. Unicamente tenemos que realizar dicho
129
Aprende WinCC

filtrado con la ventana de selección de WinCC (como al principio del presente capítulo),
aceptar dicha ventana y volver a abrirla. En la parte inferior, seleccionamos la consulta
que nos indica y la copiamos al portapapeles con ctrl.+c, para después pegarla en
nuestra subrutina.

130
Aprende WinCC

Hacer sonar la alarma por los altavoces.

Ahora nos interesa que suene un sonido wav cada vez que aparece una nueva alarma en
la instalación, para que si no estamos mirando la pantalla la detectemos de manera
acústica.
Para ello primeramente necesitamos un sonido en formato wav (o varios, ya que
podemos hacer que suene uno diferente para cada alarma, o para unas cuantas). En
nuestro proyecto nos vamos a windows, y con el explorador de windows creamos una
nueva carpeta que llamamos wav como muestra la figura:

En esta carpeta copiamos el wav que deseamos que suene. Ya podemos volver a
WinCC. Ahora necesitamos recordar un concepto que vimos anteriormente: cuando
se activa una alarma podemos hacer que entre automáticamente el WinCC a una
función del sistema llamada gmsgfunc.fct.
Vamos al Global Script, y en funciones estándar->alarm disponemos de esta
función.
Deberemos de introducir el siguiente código en la misma:

BOOL GMsgFunction( char* pszMsgData)


{
MSG_RTDATA_STRUCT mRT;
memset( &mRT, 0, sizeof( MSG_RTDATA_STRUCT ) );

if( pszMsgData != NULL )


{
sscanf( pszMsgData, "%ld,%ld,%04d.%02d.%02d,%02d:%02d:%02d:%03d,%ld, %ld,
%ld, %d,%d",
&mRT.dwMsgNr, // mensaje de alarma
&mRT.dwMsgState,
&mRT.stMsgTime.wYear, // año
&mRT.stMsgTime.wMonth, // Mes
&mRT.stMsgTime.wDay, // dia
&mRT.stMsgTime.wHour, // hora
&mRT.stMsgTime.wMinute, // Minuto
&mRT.stMsgTime.wSecond, // Segundo
131
Aprende WinCC

&mRT.stMsgTime.wMilliseconds, // Milisegundo
&mRT.dwTimeDiff, // Diferencia de tiempo
&mRT.dwCounter, // Contador interno de alarmas
&mRT.dwFlags, // Marca interna
&mRT.wPValueUsed,
&mRT.wTextValueUsed );
}

printf("Alarma Nr : %d, Estado: %x, Fecha:%d-%d-%d Hora:%d:%d:%d.%d, Dur: %d, Cnt


%d, Fl %d\r\n" ,
mRT.dwMsgNr, mRT.dwMsgState, mRT.stMsgTime.wDay, mRT.stMsgTime.wMonth,
mRT.stMsgTime.wYear,
mRT.stMsgTime.wHour, mRT.stMsgTime.wMinute, mRT.stMsgTime.wSecond,
mRT.stMsgTime.wMilliseconds, mRT.dwTimeDiff,
mRT.dwCounter, mRT.dwFlags ) ;

if (mRT.dwMsgState==MSG_STATE_COME) // Si la alarma aparece sonará


{
#pragma code("Winmm.dll");
VOID WINAPI PlaySoundA(char* pszSound, char* hmode, DWORD dwFlag);
#pragma code();

unsigned long nummer=mRT.dwMsgNr; // variable del número de alarma

if(nummer==3)
{
PlaySoundA("C:\\siemens\\WinCC\\WinCCProjects\\dunkerdemo_v51\\Wave\\Sound136.wa
v",NULL,1);
}

if(nummer==4 )
{
PlaySoundA("C:\\siemens\\WinCC\\WinCCProjects\\dunkerdemo_v51\\Wave\\ringin.wav",N
ULL,1);
}
}
return( TRUE );
}

Como podemos apreciar, utilizamos una función API que declaramos llamada
PlaySoundA para hacer sonar el wav cuando aparezca la alarma. En este ejemplo
hacemos sonar el wav sound136.wav cuando aparece la alarma 3, y el ringin.wav
cuando aparece la alarma 4.
Si no queremos complicarnos la vida podemos modificar el ejemplo para que
siempre que aparezca cualquiera suene el mismo wav.
Aunque parece un poco complicado, si estudias el código verás que no tiene mayor
complicación que hacerlo una vez para tu proyecto y te valdrá para siempre.

132
Aprende WinCC

Controlar las alarmas desde Access.

Si utilizamos el formato tambor para las alarmas no necesitaríamos este capítulo, ya que
cuando llega al valor predeterminado para el tambor nunca lo sobrepasa. Pero en el caso
de que deseemos almacenarlas secuencialmente necesitaremos borrarlas con el paso del
tiempo. La forma más sencilla es a travñes de un enlace odbc desde Access. Inicializar
la base de datos de runtime no es posible, ya que dentro de dicha base se guardan
también los históricos de gráficas, que perderíamos si utilizásemos este método (el de
cargarnos la rt.db de nuestro proyecto).
El primer problema radica en conocer donde se encuentran las alarmas dentro de la base
rt.db. Para ello vamos a crear una nueva base de datos desde Access (no importa el
nombre que le des), y en el menu seleccionamos archivos->obtener datos externos-
>vincular.
En tipo de archivo seleccionamos odbc y seleccionamos la runtime de nuestro proyecto,
como muestra la figura:

Hay dos tablas que nos interesan:


9 Dba.msarchlong para alarmas secuenciales, y
9 Dba.msarchshort para alarmas formato tambor.

133
Aprende WinCC

Nos aparece una tabla de Access en la que vemos el histórico de alarmas de nuestra
runtime. Ahora ya podemos borrarlas, o hacer lo que deseemos con ellas utilizando las
herramientas de Access. No es conveniente realizar esta operación con el runtime en
marcha, ya que puede que WinCC intente generar una alarma mientras estamos
borrando el histórico y tengamos problemas, por lo que sería conveniente para
previamente la parte de runtime.

134
Aprende WinCC

Alarmas internas del sistema.

El código interno de WinCC tiene la posibilidad de enviarnos unas alarmas predefinidas


por el mismo para indicarnos errores internos que se estén produciendo en el código. No
está de más que utilicemos dicha funcionalidad en nuestro ejemplo, aunque no llega a
ser todo lo útil que deseamos, ya que frente a la llamada por código de una variable que
no exsite, o la ejecución de un Report erróneo no nos genera una alarma de sistema,
siendo necesario recurrir a la ventana de depuración de c que vimos en anteriores
capítulos.
Lo pruimero que necesitaremos será generar las alarmas del sistema de WinCC.
Acudimos al Alarm Logging y en el menú herramientas->avisos del sistema WinCC
podemos crear las alarmas internas de WinCC.

Los mensajes son creados a partir del número de alarma 1.000.000 para que no nos
machaque alguno que hubiesemos generado nosotros previamente.

Ya hemos finalizado en el Alarm Logging. Vamos a editar la pdl de alarmas que


realizamos anteriormente para poder observar dichas alarmas cuando se produzcan.
Observar que las alarmas del sistema de WinCC son sin acuse y se almacenan en el
tambor de alarmas.

135
Aprende WinCC

Para poder visualizar las alarmas del sistema en nuestra ventana de alarmas vamos a
colocar los siguientes botones en la misma:

El botón amarillo se denominará BOTON_ALARMAS, mientras que el gris


BOTON_INTERNAS. ¿Porqué hemos pintado el color de fondo del botón
boton_alarmas de amarillo?. Vamos a utilizarlos para seleccionar un tipo de alarmas u
otro en la ventana de alarmas, y necesitaremos saber en cada momento cual es la
selección de alarmas que se está visalizando. Por lo tanto, tenemos dos trabajos:
1 . Cambiar el color de fondo a amarillo en el botón que seleccionemos en cada
momento.
2 . Realizar un filtrado de selección de alarmas, según deseemos ver las de clase error
(nuestras alarmas) o sin acuse (la clase que utiliza WinCC para mostrar las alarmas
internas).

El código que realiza esta operación en el botón BOTON_INTERNAS será el siguiente:

char cadena[200];

strcpy(cadena,"CLASS IN( 18 ) AND TYPE IN( 273 ,274 )");


SetPropChar(lpszPictureName,"Ventana_Alarmas","MsgFilterSQL",cadena);

SetBackColor(lpszPictureName,"BOTON_ALARMAS",CO_LTGRAY);
SetBackColor(lpszPictureName,"BOTON_INTERNAS",CO_YELLOW

Observemos que primeramente hemos realizado un filtro SQL a la ventana de alarmas


(la sentencia SQL contenida en la variable cadena la hemos obtenido previamente en el
runtime realizando la selección de la clase sin acuse como muestra la figura inferior.

136
Aprende WinCC

El código para el botón BOTON_ALARMAS será el siguiente:

char cadena[200];

strcpy(cadena,"CLASS IN( 1 ) AND TYPE IN( 1 ,2 ,3 )");


SetPropChar(lpszPictureName,"Ventana_Alarmas","MsgFilterSQL",cadena); //Tipo de retorno :BOOL

SetBackColor(lpszPictureName,"BOTON_INTERNAS",CO_LTGRAY);
SetBackColor(lpszPictureName,"BOTON_ALARMAS",CO_YELLOW);

Con esto ya podemos observar nuestras alarmas, o las del sistema interno de errores de
windows de una manera sencilla con dos simples botones. La cuestión que se habrá
preguntado es: ¿cómo conozco el color que debo de pasar como parámetro a la función
SetBackColor?. WinCC posee una serie de colores ya predefinidos con unas constantes
(hemos utilizado ya dos de ellos). La tabla completa de dichos colores es la siguiente:

Color VALOR COLOR (Hex) CONSTANTE


ROJO 0x000000FF CO_RED
ROJO OSCURO 0x00000080 CO_DKRED
VERDE 0x0000FF00 CO_GREEN
VERDE OSCURO 0x00008000 CO_DKGREEN
AZUL 0x00FF0000 CO_BLUE
AZUL OSCURO 0x00800000 CO_DKBLUE
CYAN 0x00FFFF00 CO_CYAN
CYAN OSCURO 0x00808000 CO_DKCYAN
AMARILLO 0x0000FFFF CO_YELLOW
AMARILLO OSCURO 0x00008080 CO_DKYELLOW
MAGENTA 0x00FF00FF CO_MAGENTA
MAGENTA OSCURA 0x00800080 CO_DKMAGENTA
GRIS CLARO 0x00C0C0C0 CO_LTGRAY
GRIS 0x00808080 CO_DKGRAY
NEGRO 0x00000000 CO_BLACK
BLANCO 0x00FFFFFF CO_WHITE

Si no desea uno des estos colores sino uno personalizado, asignelo previamente a un
botón, y consulte su valor con GetBackColor, asociándolo a una variable y
observándola. Nos devolverá un doble entero que identifica a dicho color personalizado.

137
Aprende WinCC

Caappííttuulloo 5
C

TTaagg LLooggggiinngg..

El Tag Logging es el editor de 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:

138
Aprende WinCC

Propiedades del proyecto

Si pulsamos sobre el nombre de nuestro proyecto con el botón derecho, podemos


seleccionar sus propiedades.

Exportar variables en formato Dbase III

La opción más interesante es que podemos seleccionar el almacenar las variables


de un archivo Short-term que generemos en formato Dbase III. Esta opción es
especialmente aconsejable cuando queramos disponer de un archivo de tambor que deba
disponer de un gran número de variables, ya que el acceso en formato Dbase III es más
rápido. También es una elección aconsejable cuando necesitemos exportar nuestros
valores a otra base de datos que no sea la del propio WinCC.
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.

En la imagen se puede apreciar un archivo exportado automáticamente a Dbase III y


abierto con Excel.
139
Aprende WinCC

Observar que el campo fecha, en realidad es 1999-01-02 y 19:40:34:990, es


decir, el 2 de enero de 1999 a las 19:40:34 y 990 milisegundos. Esta descomposición es
necesaria realizarla a mano, ya que no almacena cada valor en un campo de la base de
datos. Sin embargo, es posible su tratamiento debido a que siempre se encuentran los
datos de fecha, hora, etc.. en las mismas posiciones de la cadena de texto. Nota: Hay
que observar que la notación de la fecha es estilo americano (año, mes, día), no europeo.

140
Aprende WinCC

Tiempos de adquisición de valores

Podemos definir timers, es decir, temporizadores de proceso, que posteriormente


podremos utilizar para la adquisición o el almacenamiento de valores de proceso a
intervalos propios.

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:

141
Aprende WinCC

• Que se dispare el temporizador solo entrar a WinCC, pese a que no le corresponda


aún.
• Que se dispare el temporizador al salir de 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.

142
Aprende WinCC

Crear archivos de valores en el disco duro

La opción archives de la ventana del Tag Logging es la que se encarga de la


configuración de los archivos de almacenamiento de valores en el disco duro. Para
realizar la configuración de los mismos disponemos de un Wizard que aparece en el
menú contextual presionando sobre archives con el botón derecho.

Archive Wizard

Lo primero que se nos pide en el Wizard es el nombre de nuestro archivo. Dicho


nombre debe de ser una única palabra, por lo que si queremos hacerla significativa
deberemos generalmente de separar varias palabras con subrayados, como muestra la
figura.

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
143
Aprende WinCC

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.

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.

Propiedades de los archivos de valores

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.

144
Aprende WinCC

• 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.
Hay que tener en cuenta que si no se ha creado por lo menos un usuario en el
User Administrator, lógicamente no aparecerá la ventana de niveles de usuario al
presionar el botón select. Para poder seleccionar los niveles de lectura, o
escritura en archivos de proceso, primeramente deberá ir al capítulo dedicado a
User Administrator y generar por lo menos un usuario nuevo, asignándole unos
niveles que sean de leer archivos y otro de escribir en archivos. Al volver a esta
pantalla, ya podrá seleccionar el nivel deseado en la misma.

145
Aprende WinCC

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

En la solapa archive parameters, podemos definir:


• si el archivo seleccionado es short-term el tambor de valores deseado.
• 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:

Memoria RAM consumida=Numero de valores de proceso * 28 bytes

Si no se dispone de un SAI en la instalación no es recomendable almacenar en la


memoria del ordenador, ya que si se desconecta la alimentación los datos almacenados
se pierden. Solo sería interesante esta opción cuando necesitamos leer muchos valores
rápidamente y o no los vamos a almacenar de manera permanente, o solo deseamos
obtener en pantalla una representación p. Ej,. de una curva de temperaturas en los
últimos 20 segundos con una lectura cada medio segundo. En estos casos, el
almacenamiento en el disco duro produciría un acceso constante al mismo, por lo que el
WinCC sería ingobernable si no se accede a memoria.
• Action for exporting the short-term archive: Acción en C que se tiene que ejecutar
para exportar el archivo short-term. Cuando se llega al final del tambor, se ejecutará
automáticamente esta acción en C, en la cual debemos de incluir nuestra
146
Aprende WinCC

programación para el almacenamiento de dichos valores en otro archivo. Si no


incluimos en este punto dicha acción, el tambor da la vuelta y comienza a machacar
el primer valor que almacenó con el nuevo adquirido, y así sucesivamente.
• Archive type: Los archivos pueden ser una vez definido su tipo (de proceso,
comprimido o de usuario) de dos tipos:
• Short-term: archivos de tambor.
• Sequence: archivos lineales.

Adquirir variables de archivo

Propiedades de variables de archivo

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.

147
Aprende WinCC

Las propiedades de una variable almacenada dentro de un archivo son:


• Name of the archive tag: podemos dar un nombre distinto a la variable almacenada
que el respectivo de la variable de proceso.
• Name of the process tag: Valor de proceso que se está almacenando en dicha
variable de archivo. Desde esta ventana también podemos cambiar de variable de
proceso a almacenar a posteriori.
• Comments: Un comentario individualizado para cada variable de archivo.
• Supplying tags: Se puede seleccionar la adquisición de datos desde el administrador
de variables hasta el archivo de manera:
• Automatic: los valores se transfieren de uno a otro de manera automática.
• Manual: Los valores requieren de una orden para ser transferidos desde el
administrador hasta el archivo.
• Archiving at system starts: Comenzar a guardar valores en esta variable de archivo
automáticamente al arrancar la runtime de WinCC o no.
• Archiving type: Existen tres tipo de almacenamiento para una variable de proceso:
• Acyclic: Se almacenan valores de proceso cuando arranca la habilitación del
mismo y cuando se deshabilita.
• Cyclic-Continous: Se almacenan valores de proceso desde que se habilita el
mismo, con una frecuencia marcada por el ciclo de almacenamiento, hasta que
se deshabilita.
• Cyclic Selective: Igual que el ciclo continuo, con la diferencia de que además se
puede gobernar cuando debe durante el tiempo de habilitación de
almacenamiento mediante una función que determina el comienzo de lectura y la
finalización de la misma.
• Upopn change:

Este apartado es el más importante de una variable de archivo, ya que determina


su funcionamiento. ¿Cuándo gastar cada uno de ellos?, depende del uso que deseemos
darle a la variable, claro está.

Variables Acyclic: Valores que solo deseamos guardar en el disco duro cuando
un bit se active en el PLC (p. Ej. guardar los valores de presión cuando una pieza pase
por el horno).
El problema con este tipo de variables es que almacenan dicho valor cuando
aparece el bit y cuando desaparece (por flanco positivo y por flanco negativo), por lo
que nos duplica el valor deseado, con el agravante de que el valor al aparecer el bit no
necesariamente debe ser igual al que almacena cuando desaparece el bit. La solución
esta en almacenar la media de los valores leídos durante el tiempo que el bit está activo.
En cualquier caso, no solventa este tipo de variable de archivo el problema, ya que el
duplicar las variables hace prácticamente ingobernable el posterior estudio del archivo
en el disco duro.

148
Aprende WinCC

Para solventar este problema se puede utilizar una función de telerruptor en el


PLC, de tal manera que cada vez que se da un pulso positivo, se obtiene una variación
en la salida, pasando de 0 a 1 y viceversa, pero en cualquier caso, la solución viene a
través de programación en el PLC.

149
Aprende WinCC

Variables Cyclic-Continous: Valores que deseamos guardar siempre en el


WinCC cada x tiempo.

150
Aprende WinCC

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

151
Aprende 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.
• Cycle acquisition: Este tiempo indica cada cuanto debe ser leído el valor de proceso
del administrador de variables para pasar a la variable de archivo.
• Cycle Archiving: Este tiempo indica cada cuanto debe ser almacenada la variable
de archivo en el disco duro (o en la memoria de WinCC, si así se decidió). El valor
que se almacena depende del método que se utilice para su procesamiento (véase
Processing).

En la solapa parameters podemos definir:


• Processing: Método de cálculo para el almacenamiento de la variable de archivo.
Las opciones posibles son:
• Actual Value: Almacena el último valor adquirido, despreciando si los hubiera
otros valores que se hubieran adquirido pero aún no se hubieran almacenado.
• Sum: Suma todos los valores adquiridos y los almacena.
• Maximum value: Almacena el valor mayor de todos los adquiridos durante el
período de tiempo entre el último almacenamiento y éste.ç
• Mean Value: Calcula la media de todos los valores adquiridos y almacena dicho
valor. Es el ideal para la mayoría de los procesos.
• Action: Realiza una acción en C cada vez que deba almacenar el valor de
archivo en el disco duro. Esta opción es ideal para cálculos complejos de
estadística que no sean la suma, el máximo o la media, que ya son contemplados

152
Aprende WinCC

por el propio WinCC. El botón select permite seleccionar que acción es la que se
realizará.
• Minimum value: Almacena el valor menor de todos los adquiridos durante el
período de tiempo entre el último almacenamiento y éste.

• Unit: The unit for the entered time value is either entered here directly or the
associated unit of the tag is selected via a structure element. This entry is used
primarily for tag display.
• 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.

153
Aprende WinCC

En display podemos definir:


• No display limitation: almacena en la variable de archivo cualquier valor que
provenga de la variable de proceso asignada.
• Configured directly:. Si la variable de proceso ha alcanzado un límite máximo o
mínimo, permite configurar el valor a almacenar en la variable de archivo de manera
independiente al valor que proviene del proceso. Esta opción es interesante cuando
deseamos ante un valor que se ha salido de escala presentar en la gráfica un valor 0.

154
Aprende WinCC

La ventana events nos permite configurar:


• Start Events: La función en C que permite habilitar el almacenamiento de variables
de archivo en el disco duro.
• Stop Events: La función en C que deshabilita el almacenamiento de variables de
archivo en el disco duro.
• Dynamic: La función que se ejecuta cada vez que un valor de archivo es
almacenado en el disco duro.

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.

155
Aprende WinCC

int Arrancar_Grafica()
{
if (GetTagBit("NewTag")==TRUE)
{
return(1);
}
else
{
return(0);
}
}

La función para parar el almacenamiento en el archivo es el siguiente:

Int Parar_Grafica()
{
if (GetTagBit("NewTag")==FALSE)
{
return(1);
}
else
{
return(0);
}
}

Presettings de variables de archivo

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

156
Aprende WinCC

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.

157
Aprende WinCC

• Compressed tag: Preconfiguración para los valores comprimidos dentro de


archivos comprimidos. Las características de los mismos difieren ligeramente de los
archivos normales (ver imagen inferior).

158
Aprende WinCC

Archivos comprimidos.

Los archivos comprimidos son como los archivos normales, salvo que se realiza
una compresión de la información antes de ser almacenada.
La única diferencia es que en ellos vamos a poder determinar:
• El tipo de compresión de los datos.
• El tiempo de que se dispone para comprimir los datos (compresión cada día, cada
hora, etc..).
• Se permite indicar un mensaje cuando el disco duro esté lleno de datos.

Los archivos comprimidos son siempre long-term, por lo que no se permite realizar
tambor en los datos.

159
Aprende WinCC

Curvas de valores

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.

Cómo crear una curva de valores.

En esta versión de WinCC las curvas de valores, a diferencia de versiones


anteriores, no se realiza desde el Tag Logging, sino desde el Graphic Designer,
insertando un objeto WinCC online trend.

Propiedades de la ventana de tendencias

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.

160
Aprende WinCC

Las propiedades de general information son:

• Window title: nombre descriptivo de la curva (p. Ej: presión zona 1).
• Display: Muestra o no la curva o tendencia definida.
• Open screen:
• Display ruler: mostrar la regla de posición al entrar a la picture donde esté la
ventana de curvas.
• 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.
• Common X axis: Si en la primera de las tendencias se selecciona esta casilla,
todos los ejes X de las tendencias serán comunes. Es decir todos los valores
representados en un punto del eje X fueron o están siendo generados en el
mismo instante de tiempo. Si no se selecciona, cada tendencia muestra su
propio eje de tiempos, por lo que no se tiene que producir necesariamente
una correspondencia temporal entre dos curvas mostradas en la pantalla a
una misma altura del eje X.
• Common Y Axis: Ejecuta la misma acción que antes, pero para el eje Y. Esto
es interesante cuando los valores del proceso a mostrar no presentan una
correspondencia en unidades (una es presión y otra es temperatura), pero sí
en temporalidad (las dos variables es interesante mostrarlas a la vez en la
misma pantalla para compararlas en el tiempo).
• Sizeable: la ventana puede ser dimensionada durante el runtime.
• Can be closed: la ventana puede ser cerrada durante el runtime.
• Data source: Los datos a mostrar en la gráfica pueden proceder de un archivo en el
disco duro, o no, con lo que tal como se lean del proceso se mostrarán en pantalla.

161
Aprende WinCC

162
Aprende WinCC

• 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 visualización, siempre y cuando se haya tenido la precaución de almacenar
el valor reserva de proceso en un archivo de valores.

163
Aprende WinCC

En este pestaña podremos crear las curvas que van a componer nuestra ventana
de curvas. Podemos configurar:
• Name: nombre de cada una de las curvas.
• Display: mostrar o no la curva en cuestión.
• Color: color asignado a la curva actual.
• Selection of archives: seleccionar el archivo o la variable de la que tomaremos el
valor a representar.
• Display type: tipo de unión entre los valores representados (barras, lineas,
puntos,…).

Botones de la barra de herramientas: podemos definir que botonos deberán


aparecer en la barra de herramientas, así como la tecla de acceso directo que se les
asigna a cada uno de ellos.

164
Aprende WinCC

En esta solapa definiremos las propiedades del eje X de tiempos. Recordar que
no es posible otro tipo de gráfica que no sea temporal.
• Display:
o Coarse Grid: muestra una línea de división en el eje y cada x valores del eje.
El valor de x se puede introducir por el campo que aparece a la derecha de
dicha opción.
o Fine grid: muestra una línea de subdivisión al igual que la línea coarse, pero
con la diferencia de que esta es más estrecha, y no presenta número de
escala.
o Time:
o Selection: Selección del rango del eje X a mostrar en pantalla. Existen dos
posibilidades:
ƒ Seleccionar un time range, con lo cual veremos elúltimo x tiempo,
siendo x el valor de factor x área.
ƒ O seleccionar una cantidad de puntos de medida a visualizar.

165
Aprende WinCC

En esta solapa configuraremos el eje Y de cada curva. Podemos definir:


• Si disponemos de división “gruesa” en el eje Y.
• Si disponemos de división “fina” entre cada división coarse grid.
• Si deben presentarse lineas de ejes y como fondo de gráfica.
• Decimal places: cantidad de decimales a mostrar en el eje Y
• Label: como denominar a cada una de las curvas.
• Range selection: selección de la escala en el eje Y. Existen dos posibilidades:
o Automatic, con lo cual estará en función del valor máximo a representar en
cada momento.
o Definido por el programador, con lo cual no variará sea cual sea el valor a
mostrar. En este caso, si el valor a mostrar sobrepasa los límites indicados
para el eje será limitado al máximo del eje Y configurado.

166
Aprende WinCC

En esta solapa definiremos los cambios de colores de las curvas frente a:


• Nivel inferior al indicado.
• Nivel superior al indicado.
• Solapamiento de valor en el tiempo (overlap).
• Saltos en el tiempo sin valores (timejump).

• Overlamp: cambio de color de la curva cuando se produce un solapamiento de


tiempos (se vuelve a repetir el mismo tiempo en el sistema que ya hubo.
• Jump: Salto del tiempo del sistema. Se ha realizado un salto temporal, adelantando
el tiempo del sistema.

167
Aprende WinCC

Con respecto a la unión de los valores en la curva, existen las siguientes


posibilidades:

• Stepped trend: mediante escalones cuadrados que unen nuestros puntos.

• Show only dots: une los puntos con líneas discontinuas.

• Connect dots linearly: Conecta los puntos mediante líneas.

168
Aprende WinCC

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

169
Aprende WinCC

Adición y borrado de curvas

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:

• Name of the template: Nombre identificativo de la ventana de curvas.


• Title bar: Muestra sobre la ventana un título con el nombre de la ventana.
• 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
170
Aprende WinCC

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.

Barra de herramientas

Mediante la opción configure podemos configurar la barra de herramientas que


nos aparece en la ventana de curvas.

Las opciones posibles son:


Online help system: ayuda en pantalla sobre las opciones más importantes para
poder configurar la ventana de curvas.
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.

• Persistentes en el runtime: seleccionando esta opción las modificaciones


que realice el usuario se mantendrán siempre que no desactive el WinCC.
Cuando desactive la runtime de WinCC, o apague el ordenador y lo encienda
de nuevo, restablecerá la configuración original.
171
Aprende WinCC

• Persistentes en el Runtime y el CS: seleccionando esta opción las


modificaciones que realice el usuario serán permanentes.

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.

Ultimo dato: se posiciona en el último dato del archivo.

Regla: muestra la regla de referencia y la ventana de valores.

Lupa: realiza una ampliación de una zona que determinemos de la gráfica.

Restablecer tamaño: restablece el tamaño de la gráfica después de haber hecho


un zoom.

Modificación de la variable de archivo seleccionada: mediante esta opción


podemos modificar en el runtime la variable de archivo que asignamos a una
determinada curva. La ventana de diálogo es la siguiente:

Mostrar curvas: mediante esta opción podemos seleccionar que curvas


deseamos observar en la ventana La ventana de diálogo aparece abajo indicada..

172
Aprende WinCC

Seleccionar el rango de tiempos: con esta opción se puede seleccionar el rango


de tiempos para cada una de las curvas de la ventana.

Curva previa al frente: esta opción trae la curva que tengamos en segundo plano
al primero y viceversa.

Deshacer Curva previa al frente: Esta opción deshace la acción anterior.

Start/Stop: arranque/parada de la actualización de los datos en la ventana.


Destacar que la parada no significa que se deje de guardar los valores en la base
de datos. Estos continúan siendo almacenados de igual manera.

173
Aprende WinCC

Tablas de valores

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.

Crear una tabla de valores

Como pasaba con las gráficas, para generar tablas en la versión 5.1 de WinCC es
necesario acceder al Graphic Designer donde podremos insertar un objeto de tipo
Online table control.

174
Aprende WinCC

En esta ventana podremos generar las columnas que deseemos para nuestra tabla
de valores. A su vez, podemos determinar cual va a ser la fuente de datos (de un fichero
o de una variable) de la que adquiriremos los datos paramostrarlos en cada una de las
columnas.

En esta solapa podemos definir las propiedades de nuestra ventana, como son el
título, si debe cargar los datos automáticamente al entrar a la picture donde se encuentre,
si es dimensionable durante el runtime, etc..
El parámetro common time determina si se utiliza un timepo común para los valores
mostrados en las columnas.

175
Aprende WinCC

176
Aprende WinCC

Con respecto a la barra de herramientas, sus posibilidades y parametrización son


similares a las de las curvas, salvo por las siguientes nuevas opciones:

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.

Invierte la acción del anterior icono.

Nivel de password: permite introducir un nivel de password.

Insertar fila: en los archivos de usuario, es posible insertar una fila.

Borrar fila: en los archivos de usuario, es posible borrar una fila.

177
Aprende WinCC

Gráficas.
Gráficas continuas.

Nuestro siguiente paso en la realización del proyecto ejemplo que estamos


desarrollando será trabajar con gráficas continuas. Las graficas continuas se basan en
adquirir de proceso unos valores y almacenarlos al disco duro cada cierto tiempo. Existe
un tiempo de adquisición y otro (mayor por lo general) de almacenamiento. Se suele
gastar un tiempo de adquisición de segundos y otro de almacenamiento de minutos, para
no sobrecargar al sistema con los frecuentes accesos al disco duro del PC.

En el cronograma se puede observar como frente a una adquisición de un valor de


proceso, se está almacenando la media de los valores adquiridos durante el periodo de
muestreo, o el valor instantáneo en el mismo instante que se cumple el periodo de
archivado.

178
Aprende WinCC

En este primer apartado vamos a trabajar con gráficas continuas, realizando


diferentes ejemplos de programación con gráficas desde c, para al final del capítulo ver
los otros tres tipos de gráficas de que dispone WinCC, cuya clasificación se realiza en
función del evento que genera el almacenamiento de los valores de proceso.
Para ello lo primero que necesitaremos será un botón en bottom.pdl que nos
acceda a las gráficas de nuestro proyecto. Tomaremos el siguiente de la biblioteca:

Dicho botón nos servirá para entrar a un menú que el desarrollo del presenta
capítulo nos permitirá navegar por las pantallas que tienen que ver con los diferentes
tipos de gráficas. De momento vamos a comenzar renombrando la pdl salir.pdl, como
graficas.pdl, y dejándola con el siguiente aspecto:

179
Aprende WinCC

El código que asignaremos al botón de bottom.pdl será el siguiente:

SetPropChar(GetParentPicture(lpszPictureName),"VENTANA_SALIR","PictureName"

,"GRAFICAS.PDL");

SetPropChar(GetParentPicture(lpszPictureName),"VENTANA_SALIR","CaptionText","GRAFICAS");
SetPropBOOL(GetParentPicture(lpszPictureName),"VENTANA_SALIR","Visible",TRUE);

Mientras que el código que asociaremos al primero botón de graficas.pdl será el


siguiente:
OpenPicture("GRAFICA_CONTINUA.PDL");

Ahora vamos a copiar start.pdl y renombrarla como grafica_continua.pdl.


Ya tenemos la estructura de ventanas como para empezar a trabajar con las gráficas. De
momento hemos finalizado con el Graphic Designer.
Podríamos trasbajar con variables de comunicaciones para este ejemplo o con variable
internas. Elegimos esta segunda opción por ser más faciles de simular desde WinCC.
Para ello, vamos a generar 3 nuevas variables internas, llamadas respectivamente
curva_1, curva_2 y curva_:3, de 32 bits de coma flotante. Estas variables son cuyos
valores alamacenaremos en nuestras curvas dentro de nuestro archivo.
Vamos ahora al Tag Logging, a desarrollar nuestro fichero de curvas.

Vamos a crear un fichero de valores de proceso, en que incluiremos 3 curvas, cada una
asignada a las variables internas definidas previamente.
Si pulsamos con el botón derecho sobre el nombre de nuestro proyecto, podremos
seleccionar sus propiedades. En dichas propiedades podemos activar la exportación de
los valores que vamos a lmacenar en nuestra runtime automáticamente a ficheros
externos en formato csv. Esto nos permitirá más adelante poder trabajar desde Access
con dichos valores de una manera sencilla. Si esta operación la efectuaramos a
posteriori perderíamos el histórico de valores que se hubiese realizado hasta ese
momento.

180
Aprende WinCC

En las propiedades de nuestro fichero de curvas podremos definir el tamaño del tambor
de nuestro archivo circulante. ¿Cuál debería de ser dicho valor?. Bien, para ello vamos a
poner un ejemplo, y cada uno podrá sustituir sus propios parámetros por los que aquí se
muestran.
Supongamos que deseo alamacenar la temperatura de una sala, y deseo tener un
histórico de 1 año. La temperatura la alamacenaré cada hora. Como en 1 día hay 24
horas, y en 1 año hay 365 días, el resultado será:

24 valores por día * 365 días =8760 datos de archivo circulante.

Las curvas para esta instalación de ejemplo, deberían de guardarse cada hora, pero
podemos realizar una lectura del valor cada minuto, y alamacenar al disco duro la media
de los 60 valores obtenidos durante la hora para obtener un valor mas estable de
evolución.

181
Aprende WinCC

En nuestro ejemplo de este libro, vamos a seleccionar 1 segundo de adquisición y 1


segundo de archivado, ya que de otra manera sería inviable mostrar una evolución
rápida (deberíamos de esperar 1 hora para ver 1 valor en la pantalla).
En la solapa parámetros podemos definir que calcule la media de los valores obtenidos
antes de realizar el almacenamiento al disco duro.

Ya disponemos de nuestra base de datos. Deberemos ahora de volver al Graphic


Designer para trabajar con dicha base a través de nuestra ventana de curvas. Para ello,
abrimos de nuevo la pdl grafica_continua.pdl, e insertamos el objeto online trend.

Clickeando dos veces sobre dicho objeto en el Graphic Designer podemos editar sus
propiedades, y definir tres curvas (procedentes de nuestro archivo anterior). Para ello,
iremos seleccionándolas con el botón de selección que nos muestra la base de datos
creada y las tendencias de que dispone.

182
Aprende WinCC

A continuación desactivamos el título de la ventana. Esto es así debido a que en caso


contrario la ventana será desplazable por el operario, y deseamos que sea fija en la
pantalla. Puedes comprobar esto que estamos explicando activándola y desactivándola
posteriormente y observando el efecto del título sobre la movilidad de la pantalla.
Asignaremos un eje x común y un eje y común. El fondo de la ventana de gráficas es
mejor dejarlo de color blanco si el cliente lo permite (luego lo comprenderemos cuando
veamos la impresión de gráficas).

183
Aprende WinCC

En la solapa del eje de tiempos vamos a realizar una asignación orientada a poder
mostrar una gráfica lo más rápidamente ahora que se encuentra parendiendo las
nociones de WinCC. La idea es mostrar en 1 minuto valores que van evolucionando.
Evidentemente, en una instalación real, generalmente definiremos como intervalo de
tiempo 1 día o más, para poder percibir una evolución de datos significativos. Es
importante observar como en formato deberemos de seleccionar el formato de tiempos
adecuados (milisegundos carecen de sentido en instalaciones reales).

Pasamos ahora al eje y de la gráfica. Como hemos indicado que deseamos un eje y
común, el WinCC nos va a mostrar un único eje, pero en realidad el continua con un eje
y diferente para cada curva. Es por esto que cuando copie los valores que va a ver en la
siguiente imagen, deberá de repetirlos volviendo a seleccionar cada una de las curvas en
esta pantalla, y volviendo a introducir dichos valores.

184
Aprende WinCC

Si no introduce los mismos valores para los tres ejes y de las tres curvas, no le
funcionarán correctamente las parametrizaciones de código c que posteriormente vamos
a realizar.
Con esto ya hemos finalizado nuestra ventana de gráficas. Si arrancáramos ahora el
runtime, veríamos que ya disponemos de la misma, pero no poseemos valores, y por lo
tanto las curvas se encuentran en el punto 0. Para tener datos que visualizar, a la hora de
aprender a manejar el WinCC, es muy útil utilizar el simulador de variables que lo
acompaña. Dicho simulador de variables es una opción de la instalación, por lo que si
no dispone del mismo en Inicio->Simatic->WinCC->Tools->WinCC variable simulator
deberá de recurrir al cd-rom de WinCC para instalarlo.
Suponemos que ya se encuentra instalado en nuestro disco duro, por lo que podríamos
ejecutarlo a través del menú inicio de windows. Pero en nuestro ejemplo vamos a incluir
un botón en nuestra pdl de graficas que permita ejecutar el simulador desde nuestro
proyecto directamente. Incluimos a la drecha de nuestra pdl el siguiente objeto de la
biblioteca:

En el evento hacer clic de dicho objeto introducimos el siguiente código:

ProgramExecute("C:\\SIEMENS\\WinCC\\SmartTools\\Simulator\\Simulation.exe");

Esto nos permitirá arrancar el simulador desde la runtime de WinCC. Al arrancarlo


definimos las siguientes funciones matemáticas para cada una de las variables internas
que utilizamos para simular nuestras curvas:
Curva 1: seno de amplitud 50, paso por cero 50, y periodo de oscilación de 25.
Curva 2: valor random (aleatorio) de 0 a 100.
Curva 3: valor incremental de 0 a 100.

Evidentemente tendremos que ir añadiendo dichas variables en le simulador desde el


menu de edición. Con esto ya podemos comenzar la simulación con el botón de start de
la primera solapa del simulador.

185
Aprende WinCC

El resultado debería de parecerse al de la figura:

186
Aprende WinCC

Juntar y separar curvas.

WinCC permite de una manera sencilla juntar y separar diferentes curvas dentro de una
misma ventana. En el siguiente ejemplo podremos apreciarlo claramente. Para su
realización vamos a utilizar un botón que colocaremos a la izquierda de nuestra pdl
como muestra la figura:

Dicho botón se denominará BOTON_SEPARAR y poseerá el siguiente código:

BOOL valor;
valor=GetPropBOOL(lpszPictureName,"GRAFICA","RelayCurves"); //Tipo de retorno :BOOL

if (valor==FALSE)
{
SetPropBOOL(lpszPictureName,"GRAFICA","RelayCurves",TRUE); //Tipo de retorno :BOOL
SetPropBOOL(lpszPictureName,"GRAFICA","CommonX",FALSE); //Tipo de retorno :BOOL
SetPropBOOL(lpszPictureName,"GRAFICA","CommonY",FALSE); //Tipo de retorno :BOOL
SetPropChar(lpszPictureName,"BOTON_SEPARAR","Text","JUNTAR"); //Tipo de retorno :BOOL

}
else
{
SetPropBOOL(lpszPictureName,"GRAFICA","RelayCurves",FALSE); //Tipo de retorno :BOOL
SetPropBOOL(lpszPictureName,"GRAFICA","CommonX",TRUE); //Tipo de retorno :BOOL
SetPropBOOL(lpszPictureName,"GRAFICA","CommonY",TRUE); //Tipo de retorno :BOOL
SetPropChar(lpszPictureName,"BOTON_SEPARAR","Text","SEPARAR"); //Tipo de retorno :BOOL

Veamos que hace el código anterior:


1 . Primeramente conocemos el estado de la propiedad realycurves, que nos indica si ya
están separadas las curvas o se encuentran juntas.
2. Si se encuentran juntas, las separa, y además deshabilita eje x y eje y comunes, ya
que en caso contrario no surte efecto la separación. Además cambiamos el texto del
botón, para saber que la siguiente vez que pulsemos lo que vamos ha relizar es lo
contrario, es decir, juntarlas.

187
Aprende WinCC

3 . Si se encuentran separadas las junta y coloca los ejes x e y comunes, a la vez que
coloca el texto de separar al botón para que sepamos que la siguiente vez que lo
pulsemos se van a juntar las curvas.

El resultado de cada una de las pulsaciones podemos apreciarlo en las siguientes


pantallas:

188
Aprende WinCC

Mostrar la guía por programación.

A continuación vamos a mostrar la guía de la gráfica a través de programación en C.


Para ello colocaremos otro botón como muestra la figura:

Dicho botón lo denominaremos BOTON_GUIAS, y poseerá el siguiente código:

BOOL valor;

SetPropWord(lpszPictureName,"GRAFICA","Index",0); //Tipo de retorno :BOOL


valor=GetPropBOOL(lpszPictureName,"GRAFICA","GridLines"); //Tipo de retorno :BOOL
if (valor==FALSE)
{

SetPropBOOL(lpszPictureName,"GRAFICA","GridLines",TRUE); //Tipo de retorno :BOOL


SetPropChar(lpszPictureName,"BOTON_GUIAS","Text","OCULTAR GUIAS"); //Tipo de retorno
:BOOL
}
else
{
SetPropBOOL(lpszPictureName,"GRAFICA","GridLines",FALSE);//Tipo de retorno :BOOL
SetPropChar(lpszPictureName,"BOTON_GUIAS","Text","MOSTRAR GUIAS"); //Tipo de retorno
:BOOL
}

Igual que anteriormente, cambiamos el texto del botón para saber que acción es la que
realizará el botón en cada una de las pulsaciones.
Las guías del fondo de la pantalla nos permitirán referencias nuestros datos de una
manera más sencilla.

189
Aprende WinCC

190
Aprende WinCC

Mostrar u ocultar curvas por programación C.

Continuando con nuestro ejemplo de gráficas, vamos a crear tres botones, cada
uno de ellos con la finalidad de poder mostrar u ocultar las respectivas curvas de nuestra
ventana de gráficas. Cada uno de los botones se denominará BOTON_MOSTRAR1 a
BOTON_MOSTRAR3.
El código para el primer botón será el siguiente:

BOOL valor;

SetPropWord(lpszPictureName,"GRAFICA","Index",0); //Tipo de retorno :BOOL


valor=GetPropBOOL(lpszPictureName,"GRAFICA","ItemVisible"); //Tipo de retorno :BOOL
if (valor==FALSE)
{
SetPropBOOL(lpszPictureName,"GRAFICA","ItemVisible",TRUE); //Tipo de retorno :BOOL
SetPropChar(lpszPictureName,"BOTON_MOSTRAR1","Text","OCULTAR CURVA 1");
}
else
{
SetPropBOOL(lpszPictureName,"GRAFICA","ItemVisible",FALSE); //Tipo de retorno :BOOL
SetPropChar(lpszPictureName,"BOTON_MOSTRAR1","Text","MOSTRAR CURVA 1");
}

Es importante observar como colocamos el indice de la grafica a 0 para ocultar la curva


1. También cambiamos el texto del botón comovenimos haciendo en los anteriores
ejemplos.
Para el botón segundo el código sería:

BOOL valor;

SetPropWord(lpszPictureName,"GRAFICA","Index",1); //Tipo de retorno :BOOL


valor=GetPropBOOL(lpszPictureName,"GRAFICA","ItemVisible"); //Tipo de retorno :BOOL
if (valor==FALSE)
{
SetPropBOOL(lpszPictureName,"GRAFICA","ItemVisible",TRUE); //Tipo de retorno :BOOL
SetPropChar(lpszPictureName,"BOTON_MOSTRAR2","Text","OCULTAR CURVA

2"); //Tipo de retorno :BOOL

}
else
{
SetPropBOOL(lpszPictureName,"GRAFICA","ItemVisible",FALSE); //Tipo de retorno :BOOL
SetPropChar(lpszPictureName,"BOTON_MOSTRAR2","Text","MOSTRAR CURVA 2"); //Tipo
de retorno :BOOL
}

Con esta funcionalidad podemos abrir por ejemplo una ventana al operario en la que
decida que curvas deben de visualizarse en cada momento.

191
Aprende WinCC

Imprimir gráficas mediante Reports.

Existen dos formas de imprimir gráficas, mediante el uso de un Report o por impresión
directa de la pantalla actual. Vamos a estudiar en este apartado el metodo primero, que
aun siendo más elegante, presenta el inconveniente de no poder parametrizar el eje de
tiempos de una manera sencilla. Es por ello, que en función de la exigencia del cliente a
la hora de mostrar en papel la gráfica será preferible un método u otro.
Comenzaremos creando lógicamente creando con el Report Designer un formato de
página que denominaremos curva_continua.rpl.
Lo primero que haremos será darle tamaño apaisado, para que nuestra gráfica ocupe
toda la hoja. Esto podemos conseguirlo seleccionando con el botón derecho las
propiedades de la hoja en la parte gris externa al propio Report, como muestra la figura:

En formato->geometría->orientación seleccionaremos landscape (apaisado).


En la parte dinámica de nuestro Report introduciremos un objeto de tipo metaarchivo
dinámico, con las siguientes propiedades:

A continuación editaremos el intervalo de tiempo, seleccionando el que nos convenga.


El problema de este método es que no s permite mostrar todos los datos del tambor, o
un tiempo determinado (1 día, 1 hora, etc..) pero siempre a partir de la fecha actual del
reloj del pc. Es por esto que si el cliente desea mostrar otro rango de fechas (por

192
Aprende WinCC

ejemplo, la gráfica de la evolución de la semana pasada) no podrá utilizar este método


teniendo que recurrir al expuesto en el siguiente capítulo.
En nuestro ejemplo vamos a mostrar los últimos 10 minutos de evolución, pero siempre
a partir de la fecha actual del pc hacia atrás.

En selección de variables seleccionaremos nuestras curvas.

Y por último en formato seleccionaremos ejes y comunes.

El Report finaliza introduciendo una parte estática con nuestro logotipo de empresa y el
nombre de nuestro proyecto y formulario.
Ya podemos salir y crear una orden de impresión como la que muestra la figura:

193
Aprende WinCC

Ya estamos finalizando. Nos queda volver al Graphic Designer y en nuestra pdl de


gráficas crear un botón, denominado IMPRIMIR, que posea el siguiente código:

RPTJobPreview("ORDEN_CURVA_CONTINUA"); //Tipo de retorno :BOOL

El resultado a la hora de imprimir la gráfica debería de ser similar al siguiente:

194
Aprende WinCC

Imprimir gráficas con hardcopy.

El truco está en imprimir la pantalla, pero modificándola antes de imprimirla


para que parezca un Report, y dejándola como estaba posteriormente.
Comenzaremos por enviar la ventana de aplicación TOP que tenemos insertada
en la parte superior de la pdl grafica_continua.pdl a la capa 1, desactivando dicha capa
con la barra de herramientas del Graphic Designer. En la posición donde se encontraba
la ventana podemos escribir textos estáticos, como el nombre de la gráfica, etc... Luego
volvemos a activar la capa 1, con lo que los textos por defecto quedarán ocultos por
dicha ventana.
Ahora colocamos un botón de imprimir gráfica, al que le asociamos el siguiente
código:

SetPropBOOL(lpszPictureName,"TOP","Visible",FALSE); //Tipo de retorno :BOOL


SetPropBOOL(lpszPictureName,"BOTTOM","Visible",FALSE); //Tipo de retorno :BOOL
SetPropWord(lpszPictureName,"GRAFICA","Top",100); //Tipo de retorno :BOOL
SetPropWord(lpszPictureName,"GRAFICA","Height",660); //Tipo de retorno :BOOL
SetPropBOOL(lpszPictureName,"GRAFICA","Toolbar",FALSE); //Tipo de retorno :BOOL

WinExec("PRTSCR.EXE -hardcopy",SW_SHOWNORMAL);

SetPropBOOL(lpszPictureName,"TOP","Visible",TRUE); //Tipo de retorno :BOOL


SetPropBOOL(lpszPictureName,"BOTTOM","Visible",TRUE); //Tipo de retorno :BOOL
SetPropWord(lpszPictureName,"GRAFICA","Top",170); //Tipo de retorno :BOOL
SetPropWord(lpszPictureName,"GRAFICA","Height",490); //Tipo de retorno :BOOL
SetPropBOOL(lpszPictureName,"GRAFICA","Toolbar",TRUE); //Tipo de retorno

Estudiemos el código. Primeramente ocultamos la ventana top y bottom.


Después estiramos la gráfica hasta el antiguo borde de la ventana top por la parte
inferior, con lo que “tapamos” los botones superiores de la ventana de gráficas, y nos
ahorramos ocultarlos uno a uno. A continuación estiramos la gráfica hasta la parte
inferior de la pantalla del ordenador, ocupando la antigua posición de la ventana bottom,
que ya no es visible. Y por último ocultamos la barra de herramientas de la ventana de
gráficas. En esta situación, la pantalla debe de tener el aspecto de la imagen posterior.
Una vez tenemos la pantalla en la situación adecuada, la imprmimos con la
función externa PRTSCR.
Posteriormente, volvemos a dejar todo como estaba. Si el fondo de la ventana de
gráficas no es de color gris gastaremos mucha tinta, por lo que recomendamos se
parametrice desde un principio de color blanco, para no tener que cambiarle el color
cuando se imprime la pantalla, además del efecto visual de pantallazo al cambiar de
color.
Lógicamente antes de imprimir la pantalla podemos seleccionar el rango de
fechas deseado desde la barra de herramientas de la ventana de gráficas.

195
Aprende WinCC

196
Aprende WinCC

Control sobre la barra de herramientas de las gráficas.

Disponemos de la propiedad ToolbarButtons que nos indica mediante un valor


numérico qué botones se están mostrando actualmente. Cada uno de los bits de dicha
propiedad es un botón, siguiendo el siguiente esquema:

Por lo tanto, asignando una variable interna de tipo unsigned int a dicha
propiedad, podremos realizar adiciones y extracciones de bits en función de qué botón
deseamos o no mostrar en la barra de toolbar de la ventana de gráficas.

197
Aprende WinCC

Cambiar de forma de representación de gráfica.

Como sabemos podemos tener diferentes tipos de curvas en una gráfica. Los
diferentes tipos son:

Curva escalonada:

Mostrar solo puntos:

Unir linealmente los puntos:

Rellenar superficie curva interpolada: igual que la anterior pero rellenando el área.
Rellenar superficie curva escalonada: igual que la primera pero rellenado el área.

Teniendo claros los tipos, vamos a hacer que podamos cambiar de tipo desde
unos botones externos a la ventana de gráficas. Para ello vamos a utilizar una variable
interna de tipo unsigned 8 bits value, que denominaremos tipo_de_curva.
Teniendo esta variable, accedemos a la ventana de gráficas, y en las propiedades
de la misma asignamos la variable tipo_de_curva a la propiedad curveform. Dicha
propiedad de una ventana de gráficas permite cambiar de tipo e curva según el siguiente
baremo (atención, los valores se muestran en hexadecimal):

198
Aprende WinCC

Por lo tanto,  a únicamente tendremos que colocarnos varios botones, que


posean una función de C que asigne:
• Para gráfica de líneas: valor a 20, que es un 14 en hexadecimal.
• Para gráficas de puntos: valor a 18 que es un 12 en hexadecimal.
• Para gráfica de barras: valor a 17 que es un 11 en hexadecimal.
• Para gráfica de líneas rellenas: 33, que es un 21 de hexadecimal.
• Para gráfica de barras rellenas: valor de 34, que es un 22 en hexadecimal.

199
Aprende WinCC

Control de gráfica con botones externos.

Otra acción que podemos desear es arrancar y parar la gráfica igual que hacemos
con el botón de la barra de toolbar. El tema está en que debemos de dar un título a
nuestra ventana de gráficas. Pinchamos dos veces en la ventana, y parametrizamos el
titulo que debe de poseer:

No es necesario que se vea, y en realidad nosotros no vamos a mostrarlo, ya que


si no tendremos que hacer movible la ventana Otro tema de los que ponen a uno
contento de verdad es que distingue entre mayúsculas y minúsculas, o sea que como
pongas en minúsculas la llamada que va debajo no te va ni para atrás.
Las funciones a asociar la botón externo son:

Parar/Arrancar la gráfica.

Set_Focus(lpszPictureName,"ventana_grafica");
TlgTableWindowPressStartStopButton(“TITULO_GRAFICA");

Con una pulsación para la gráfica y con otra arranca la misma.

Mostrar la regla.

Aunque ya sabemos que hay un botón en la barra de herramientas de la ventana


de gráficas que nos permite mostrar una regla con la que podemos desplazarnos por la
misma y observar de qué valores disponemos en cada momento en cada una de las
curvas, puede ser que deseemos mostrarla a través de un botón externo (uno de los
motivos puede ser para poder protegerlo con un nivel de usuario, cosa que de otra
manera no es posible).
Esto es bastante sencillo incluyendo en el botón las siguientes instrucciones C:

Set_Focus(lpszPictureName,"ventana_grafica");
TlgTrendWindowPressLinealButton("TITULO_GRAFICA");

Hacer un zoom a una parte de la gráfica.

Set_Focus(lpszPictureName,"ventana_grafica");
TlgTrendWindowPressZoomInButton ("TITULO_GRAFICA");

200
Aprende WinCC

Ir al último valor de la gráfica.

Set_Focus(lpszPictureName,"ventana_grafica");
SetPropWord(lpszPictureName,"ventana_grafica","Index",0);
TlgTrendWindowPressLastButton("TITULO_GRAFICA");

Avanzar hacia adelante en la gráfica.

#pragma code ("Kernel32.dll");


void WINAPI Sleep(DWORD dwMilliseconds);
#pragma code();

Set_Focus(lpszPictureName,"Ventana_grafica");
SetPropWord(lpszPictureName,"Ventana_grafica","Index",0);

TlgTrendWindowPressNextButton("TITULO_GRAFICA ");
Sleep(5000);
TlgTrendWindowPressNextButton("TITULO_GRAFICA ");

Avanzar un poco hacia adelante en la gráfica.

Set_Focus(lpszPictureName,"Ventana_grafica");
SetPropWord(lpszPictureName,"Ventana_grafica","Index",0);

TlgTrendWindowPressNextButton("TITULO_GRAFICA ");

Retroceder un poco hacia atrás en la gráfica.

Set_Focus(lpszPictureName,"Ventana_grafica");
SetPropWord(lpszPictureName,"Ventana_grafica","Index",0);
TlgTrendWindowPressPrevButton("TITULO_GRAFICA ");

Retroceder en la gráfica.

#pragma code ("Kernel32.dll");


void WINAPI Sleep(DWORD dwMilliseconds);
#pragma code();

Set_Focus(lpszPictureName,"Ventana_grafica");
SetPropWord(lpszPictureName,"Ventana_grafica","Index",0);
TlgTrendWindowPressPrevButton("TITULO_GRAFICA ");
Sleep(5000);
TlgTrendWindowPressPrevButton("TITULO_GRAFICA ");

201
Aprende WinCC

Archivo acíclico de valores.

Una vez visto el almacenamiento cíclico pasamos al segundo tipo de alamacenamiento:


el acíclico. Como su nombre indica, su forma de almacenamiento del valor de proceso
no se basa en un período de tiempo determinado, sino por el cambio de una variable
binaria de control. Es importante que observe como tanto frente a los cambios por
flanco positivo como por negativo se producen alamacenamientos en el disco duro en
este tipo de archivado.

Es por este motivo que será necesario realizar una función de telerruptor en el
plc en el caso de que se desee almacenar únicamente por flanco positivo. Un ejemplo
típico de este tipo de almacenamiento acíclico sería el caso de un transfer de piezas.
Únicamente cuando una pieza se encuentra frente a la sonda de medida tiene sentido el
almacenar una de sus propiedades (el tamaño de la pieza, p. Ej). Una barrera
fotoeléctrica o un detector inductivo podrían ser esta variable de control que nos dispara
el almacenamiento de dicho valor.
La función del telerruptor necesaria en el plc podría tener el siguiente aspecto en
Step 7 (atención, esto es un ejemplo de programación para sep 7, no para programar en
el WinCC):

202
Aprende WinCC

En nuestro ejemplo, para poder gobernar fácilmente la variable, vamos a crear


una variable interna de tipo bool, que denominaremos ACICLICA en WinCC. Abrimos
el Global Script, y creamos una nueva función de proyecto, que denominaremos
ACICLICA, y que tiene el siguiente aspecto:
BOOL ACICLICA()
{

BOOL valor;

valor=GetTagBit("ACICLICA"); //Return - Type :BOOL


return(valor);

La función lo único que nos hace es devolvernos un valor booleano en función


del valor de la variable interna. Es necesario realizar esta función porque realmente el
archivado acíclico se realiza en función del valor devuelto por una función de tipo
booleano.
A continuación cerramos el Global Script y abrimos el Tag Logging, editando
las propiedades de la curva 1. Vamos a cambiar su forma de almacenamiento de
continuo a acíclico. Observar como ya carece de importancia el ciclo de adquisición y
de almacenamiento al realizar dicha selección (ver imagen adjunta).

203
Aprende WinCC

En la solapa eventos deberemos de asociar la función de proyecto que acabamos


de realizar.

Ya podemos cerrar el Tag Logging y abrimos la pdl grafica_continua.pdl. La


renombramos como grafica_aciclica.pdl, borrando de la ventana de alarmas todas las
curvas salvo la primera. Vamos a incluir un botón como muestra la figura:

204
Aprende WinCC

Lo que deseamos es que cuando pulsemos una vez dicho botón se active la
variable “ACICLICA”, y cuando pulsemos de nuevo se desactive, para poder realizar la
simulación acíclica.
El código para realizar esto es el siguiente:

BOOL valor;

valor=GetTagBit("ACICLICA");
if (valor==TRUE)
{
SetTagBit("ACICLICA", FALSE);
}
else
{
SetTagBit("ACICLICA",TRUE);
}

Nos queda crear un botón en el menú GRAFICAS.PDL que nos acceda a


GRAFICA_ACICLICA.PDL como muestra la figura:

205
Aprende WinCC

Archivado ciclo selectivo.

El archivado de ciclico selectivo es igual que el archivado de ciclo contínuo,


diferenciándose únicamente en que se comienza a archivar a través de una función de
proyecto que devuelve un true, y se para por otro de igual manera.

Un ejemplo de este tipo de almacenamiento sería el caso de una prensa, que se


encuentra en reposo normalmente, pero que frente a un evento de inicio de ciclo debe de
registrarse durante el tiempo que dura la prensada una magnitud (temperatura de
material, p. Ej). Dispondremos en el plc de una marca que nos indica el ciclo de
prensado, y deberemos de detectar cuando aparece dicha variable para almacenar los
valores de proceso cada x tiempo, hasta que caiga dicha señal en el plc.
Creamos una nueva variable interna de tipo bool denominada SELECTIVA.
Nuestro primer cometido será realizar dos funciones de proyecto, una con el siguiente
código:

BOOL ARRANCA_CICLO_SELECTIVO()
{
BOOL valor;

valor=GetTagBit("SELECTIVA");
206
Aprende WinCC

return(valor);

Y la función de parada la siguiente:

BOOL PARA_CICLO_SELECTIVO()
{
BOOL valor;

valor=GetTagBit("SELECTIVA");
return(!valor);
}

Cerramos el Global Script y acudimos al Tag Logging. Igual que hicimos antes, vamos
a trabajar sobre la curva 1, que editamos y cambiamos su forma de archivado a ciclo
selectiva.

En la solapa eventos deberemos de asociar los dos eventos realizados:

Como anteriormente, con el Graphic Designer abrimos la pdl grafica_ciclica.pdl y la


renombramos como grafica_selectiva.pdl. Vamos a colocar un botón que nos active la
variable SELECTIVA definida anterirmente.
207
Aprende WinCC

El código asociado a dicho botón será el siguiente:

BOOL valor;

valor=GetTagBit("SELECTIVA");
if (valor==TRUE)
{
SetTagBit("SELECTIVA", FALSE);
SetPropChar(lpszPictureName,"BOTON _SELECTIVO","Text","ARRANCAR SELECTIVO");
}
else
{
SetTagBit("SELECTIVA",TRUE);
SetPropChar(lpszPictureName,"BOTON _SELECTIVO","Text","PARAR SELECTIVO");
}
}

Lógicamente tendremos que poner un botón en graficas.pdl para que podamos acceder a
esta nueva pdl generada. Ya podemos probar el ejemplo y controlar el almacenamiento
desde el botón generado.

208
Aprende WinCC

Archivado al cambiar.

Existe un último método de almacenamiento denominado al cambiar. Es igual al


ciclo continuo (el primero que vimos), salvo por dos diferencias:
1. El tiempo de adquisición de la variable de proceso está asignado a 1 segundo.
2. No se almacenan valores si no cambia el valor de proceso.

Es por este motivo que este tipo de almacenamiento es muy interesante para la
mayoría de las adquisiciones de una instalación, ya que libera al sistema de tener que
almacenar valores repetidos con el ahorro de tiempo al acceder al disco duro, y de
espacio en el mismo.

209
Aprende WinCC

Almacenando históricos de evolución.

Si deseamos almacenar cada minuto muchos valores, y queremos tener un


histórico de los mismos durante años, podemos tener la seguridad de que el sistema no
va a poder con el archivo resultante, no solo por el espacio en disco duro, sino por el
acceso a los datos, que cuanto mas grande es el archivo mas tiempo tarda en almacenar
los datos en el mismo.
Como hemos visto la solución pasa por utilizar un tambor de datos y decidir cual
es el histórico mínimo que deseamos. Sin embargo, si lo que nos interesa es un histórico
para observar la evolución a lo largo de un gran espacio de tiempo, viendo los datos
desde una visión global, aun perdiendo el valor en concreto en una fecha determinada se
pueden utilizar ficheros comprimidos, denominación que se utiliza en WinCC a calcular
la media de los valores durante un tiempo, y almacenando dicho valor en representación
de todos los de ese espacio de tiempo. Casos posibles sería la evolución de las pérdidas
energéticas en un sistema de intercambio de energía. Tendremos nuestro histórico en
formato tambor de los últimos 6 meses, pero además podemos tener un archivo
comprimido en el que observemos la evolución de nuestro intercambio energético a lo
largo de años, siendo cada unos de los valores de dicho archivo comprimido un día.
Por lo tanto, para poder disponer de un fichero comprimido es necesario
previamente disponer de un fichero de valores de proceso en el Tag Logging. Como
nosotros ya disponemos del fichero curvas, vamos a crear un nuevo fichero, pero esta
vez será de tipo comprimido.

A continuación realizaremos la asignación de nuestros valores del fichero a


nuestro histórico. Esto lo conseguiremos seleccionando con el botón derecho del ratón
sobre nuestro fichero comprimido->variable de selección.

En las propiedades de nuestro fichero comprimido podemos especificar como debe de


agrupar los valores a la hora de comprimirlos (cada minuto, cada hora, cada día).

210
Aprende WinCC

Vamos a seleccionar 1 minuto para el cálculo, para poder observar en tiempo real una
evolución dentro de dicho archivo sin tener que esperar días para obtener resultados.
Ya podemos hacernos una nueva pdl, renombrando grafica_continua.pdl, que
denominaremos historial.pdl, y cuya única modificación importante es la asignación de
la variable a mostrar en la ventana gráfica:

Solo tenemos que poner un botón de acceso en graficas.pdl, y podremos observar como
hasta que no pasa 1 minuto no obtenemos valores en dicho fichero.

211
Aprende WinCC

Exportación de archivos a Access o Excel.

Para poder exportar a una herramienta externa los archivos que se encuentran dentro de
la base de runtime de nuestro proyecto, la mejor opción probablemente sea la
exportación en paralelo de dichos datos a ficheros externos en formato dbaseIII. El
WinCC dispone de una opción de exportación de datos a dicho formato, con lo que cada
vez que almacena datos en un archivo dentro de la base de runtime lo ejecuta también
en un fichero externo.
Deberemos abrir el Tag Logging y seleccionando con el botón derecho sobre el nombre
de nuestro proyecto->propiedades podemos activar esta opción.

Es importante tener en cuenta que al activar esta opción se borran todos los datos
del histórico de la base de datos de runtime, por lo que es aconsejable realizar dicha
selección al principio del proyecto, en la puesta en marcha.
Los datos nos los almacena en el subdirectorio de nuestro proyecto PDE,
generando un subdirectorio por cada archivo, y un fichero por cada tendencia.
Cada uno de los archivos 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 control interno. Sin relevancia para nosotros.

212
Aprende WinCC

Exportación de datos via consulta Sql.

El motor de la base de datos de Sybase, núcleo del sistema de almacenamiento


de valores de WinCC posee una herramienta que permite manejar tanto la base de datos
de runtime como la de desarrollo.
Podemos utilizar esta posibilidad para incluir un botón dentro de nuestra pdl de
gráficas que nos permita exportar a un fichero en formato csv una curva que deseemos.
En realidad es lo mismo que ya nos realiza automáticamente en Dbase III, pero esta
posibilidad va mas allá ya que permite consultas sql con rango de fechas, consulta a
varias tablas, etc..
Supongamos que hemos incluido un botón en la pdl grafica_continua.pdl. El
código que deberemos de asignar a dicho botón para que nos exporte una curva será el
siguiente:

char cadena[200];

strcpy(cadena,"DBISQLC.EXE -q -b -c
UID=dba;PWD=sql;DBF=C:\SIEMENS\Step7\S7proj\Dunkerde\wincproj\DUNKERDEMO_V51\DUN
KERDEMO_V51rt.db;DBN=CC_DUNKERDE_02-06-27_18:20:38R; select t,v from
PDE#HD#CURVAS#CURVA_1 order by t ASC; output to c:\\pepe.csv format ascii");

ProgramExecute(cadena); //Tipo de retorno :unsigned long int

Lógicamente vamos a estudiar paso por paso la composición de la cadena de


texto que realiza la exportación:

DBISQLC.EXE : es el programa gestor de bases de datos sybase sqlanywhere 7.


UID=dba . Identificación de usuario. Es siempre dba.
PWD=sql . Password. Es siempre sql.
DBF= Ruta y nombre del fichero donde se encuentra la base de datos. Como lo que
queremos es acceder a la base de datos de runtime, que es donde se encuentran las
tablas de los históricos de curvas, escribiremos el path completo de nuestro archivo
rt.db.
DBN= Nombre de la base de datos desde el punto de vista de administración odbc. Para
saber cual es dicho nombre, en Inicio->Configuración->Panel de control->Herramientas
administrativas->origenes de datos odbc podemos saber el nombre de nuestra base de
datos.
Lo siguiente ya es la consulta sql, que se compone de:
Select t,v : selecciona los campos tiempo y valor
From pde#hd#curvas#curva_1 : de la tabla ...de la runtime. Para poder saber cual es la
tabla interna dentro de la base de datos de runtimesolo tenemos que sustituir la palabra
curva por el nombre del archivo, y curva_1 por el nombre de la tendencia.
Order by t : ordenados los campos por fecha de menor a mayor.
ASC: ascendente (podria ser descendente).
Output to c\\pepe.csv format ascii : el resultado de la consulta sql lo deja en el fichero
c:\pepe .csv en formato de texto separado por punto y coma.

213
Aprende WinCC

AR_SEND.

Existen situaciones en las cuales la lectura y almacenamiento de valores de proceso se


realiza en un determinado instante y posteriormente deben ser adquiridos por el scada
dichos valores mostrándolos en el instante en que fueron adquiridos, y no en el que son
leídos desde el scada. Dos casos podrían ser:
9 Un valor que es almacenado en una db cada medio segundo durante 1 minuto y
que no va a recibir más valores hasta pasadas unas horas. Si adquiriéramos los
valores en tiempo real desde el scada correríamos el riesgo de perder valores o
ralentizar durante ese minuto en demasía el PC al estar guardando en el disco
duro cada tan corto espacio detiempo.
9 En sinaut, una remota almacena valores que son requeridos por la maestra cada x
horas. Dichos valores son adquiridos por el scada desde la maestra un par de
horas después de haber sido generados en la remota.
En estas situaciones es necesario recurrir a la funciín AR_SEND, que se encarga de
enviar dichos valores a un archivo en el scada guardándolos en el tiempo en que
indiquemos en dicha función, y no en la hora actual del pc del scada.
Esta función AR_SEND únicamente está disponible en los equipos S7 400, no
siendo posible generarla en los equipos S7 300.

Supongamos que tenemos un proyecto de S7 con un equipo 400 conectado al scada


por TCP/IP. Nuestro objetivo es transferir 100 valores que han sido almacenados
cada hora a partir de una fecha y hora determinada al scada de una sola vez, y que
este los guarde en el orden correcto.
Lo primero que necesitamos es una DB con una estructura de datos determinada por
el tipo de utilidad que le vamos a dar a la función ar_send. Dicha estructura es la
siguiente:

214
Aprende WinCC

Creamos una DB10 que posee la siguiente estructura:

Veamos que significado tienen cada uno de los parámetros:

Tipo_de_cabecera:

Tipo de Tiempo de referencia AR_ID Subnumero


cabecera
0 Cabecera sin tiempo de referencia Cabecera sin AR_ID subnumero
1 Cabecera con tiempo de referencia Cabecera con AR_ID subnumero
8 Cabecera sin tiempo de referencia Cabecera sin AR_ID subnumero
9 Cabecera con tiempo de referencia Cabecera con AR_ID subnumero

215
Aprende WinCC

Caappííttuulloo 6
C

R
Reeppoorrtt D
Deessiiggnneerr..

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

Partes del Report Designer

Dentro del apartado Report Designer existen tres subdivisiones, cada una con una
finalidad distinta.

• Layout: Un layout es el propio documento que queremos imprimir. En layout


podemos generar dicho documento, diseñarlo como deseemos y asociar los campos
a la base de datos. Todos los propios del sistema WinCC vienen identificados por el
signo @ al comienzo del nombre.
• Line printer layout: a veces no deseamos enviar todo un informe a la impresora,
sino más bien ir imprimiendo un determinado estado en tiempo real (cada vez que se
imprima una alarma, sacarla por impresora). En este caso, en lugar de enviar un
layout, deberemos configurar un line printer layout, que se encarga de configurar el
diseño de la línea que debe de salir por la impresora.
• Print Job: Un layout como tal no puede imprimirse, sólo ser asignado a un job o
tarea, que reúne los datos del layout o documento a imprimir, la impresora por la
que deseamos realizarlo, y cada cuanto tiempo queremos hacerlo. Es por tanto el job
el verdadero Report, pero previamente debe necesariamente haberse generado un
layout o un line printer layout para poder ejecutarse.

216
Aprende WinCC

Layout

Características generales

El WinCC, en el momento de generar el proyecto por primera vez, copia en el


subdirectorio prt una serie de layouts de sistema. Estos layouts pueden ser modificados
por el usuario, pero no deben ser borrados, ya que el WinCC los utiliza a la hora de
imprimir la documentación en sus diversas partes de desarrollo (curiosamente el nombre
puede cambiarse sin problemas, el sistema lo identifica internamente y no por el nombre
del layout).

217
Aprende WinCC

Todos los layouts poseen la extensión rpl y se encuentran en el subdirectorio prt


de nuestro proyecto, por lo que pasar layouts de un proyecto a otro es copiar dicho
fichero.
El editor de layouts tiene el aspecto que muestra la figura. Si generamos un
nuevo layout, podemos observar que nuestro documento se divide en dos partes, una de
color gris y otra central de blanco. La parte gris corresponde a la cabecera y pie de
página del documento, que puede contener campos de la base de datos, pero que será
común a todas las hojas que compongan el layout. La parte central será donde se
almacenen los datos del Report.

Partes de un layout.

Un layout se divide en:

• página de cubierta (cover-sheet)


• contenido del layout o Report.
• Página de contraportada (final page).

Las partes del área de un layout son:

• Área no impimible.
• Área imprimible (donde se encuentra la parte estática del documento).
• Cuerpo del documento (donde se encuentra la parte dinámica del Report).

La parte estática del documento está compuesta por campos cuyo valor va a ser
común para todo el Report o son aportados por el sistema, como son la fecha, hora, el
nombre del proyecto o el número de página actual. La parte dinámica está compuesta
por los datos a mostrar en dicho Report, e irá en función del tipo de datos dinámicos que
deseemos mostrar.

218
Aprende WinCC

Páginas de portada y contraportada.

La página de portada de un layout debe atender a las siguientes reglas:


• únicamente puede ocupar una página.
• Pese a que está permitidos campos dinámicos en la misma, no son aconsejables, ya
que en determinadas ocasiones pueden presentarse cercenados.

Propiedades del layout

Si presionamos con el botón derecho sobre el layout, podemos ver sus


propiedades. Repasemos las más importantes:
• Layout:
o Name: nombre del objeto layout.
o 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:
o Width: ancho de la página.
o Height: alto de la página.
o Paper size: formato de tamaño del papel en que se imprime el layout (carta,
A4,etc..)
o Orientación: Vertical o apaisado.
o Left print margin: margen izquierdo a partir del que se empieza a imprimir.
o 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).
219
Aprende WinCC

• Miscelaneous:
o 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.
o Final page: lo mismo, pero con una página de finalización de documento.

220
Aprende WinCC

Barra de herramientas del layout

La barra de herramientas, además de varias funciones ya comentadas


anteriormente, posee una serie de botones específicos, que son:

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.

Visualizar portada del documento.

Visualiza parte central del documento.

Visualiza contraportada del documento.

Objetos del layout

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.

Objetos estáticos: su valor es el mismo independientemente del momento en


que se imprima el layout (p. Ej. El nombre de nuestra empresa, la persona que lo diseña,
la instalación, etc…).

221
Aprende WinCC

Objetos dinámicos: su valor está en función del momento en que se imprima el


documento, ya que es entonces cuando toman el valor de la base de datos.

Dynamic metafile: realiza una impresión gráfica o de una determinada pantalla que
hayamos diseñado con el Graphic Designer, o de una gráfica.

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.

222
Aprende WinCC

• Una gráfica: deberemos seleccionar Trend.

Las propiedades de la curva a mostrar que podemos parametrizar son:

• Time range: rango de tiempo que debe aparecer en la gráfica.

223
Aprende WinCC

• Tag selection: archivo del que hay que sacar los datos y tendencias a mostrar en la
gráfica.

• Format: fuente de los textos que componen 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.

224
Aprende WinCC

En las propiedades de la conexión podemos determinar la selección de los datos


a mostrar en la tabla, seleccionando el archivo origen de dichos datos.
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.

Continuando con los objetos que podemos utilizar tenemos:

• Dynamic text: Si disponemos un texto que puede cambiar de manera dinámica en


cualquier picture mediante este objeto podemos imprimir el valor actual en un
Report.
• Embedded layout: mostrar otro layout ya configurado dentro de una ventana.
• Tag: Mostrar el valor de un tag dentro de una celda. Se puede aplicar desde las
propiedades el formato deseado y el tipo de representación (decimal, texto,
hexadecimal, etc…). Este objeto es el ideal para realizar Reports a impresora de un
grupo de valores de proceso en un instante determinado.

System Objects: Son campos que rellenará el WinCC de su propio sistema, no de la


base de datos del proyecto. Estos objetos sólo pueden introducirse en la parte estática
del documento, no en la dinámica.
• Date/Time: Permite introducir la fecha y la hora dentro de un Report.
• Page Number: número de página.
• Project name: nombre del proyecto.
• Layout name: nombre del layout que se está imprimiendo.
225
Aprende WinCC

Line printer layout

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.

226
Aprende WinCC

227
Aprende WinCC

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 el 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:

228
Aprende WinCC

• Name: nombre del trabajo.


• Project: proyecto en el que se encuentra el trabajo (solo lectura).
• Layout: Layout al que está asociado el trabajo.
• Last printout: última impresión realizada en este trabajo (solo lectura en tiempo de
runtime).
• Next printout: próxima impresión realizada en este trabajo (solo lectura en tiempo
de runtime).
• Start time: hora de comienzo de las impresiones si se desean cíclicas.
• Cycle: Cada cuanto tiempo debe imprimirse el layout.

• Page range: rango de páginas a imprimir del trabajo.


• Time range: el rango de tiempo que debe mostrar en datos que dependan del tiempo
(gráficas, tablas de valores). Puede ser:
• Relative: relativo al inicio del arranque de la runtime.
• Absolute: indica el comienzo y la finalización del periodo de tiempo a mostrar
en los datos del job.

229
Aprende WinCC

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.

230
Aprende WinCC

Diagnosis de la impresión de Reports.

El WinCC dispone de una serie de ventanas de diagnosis para poder saber que
Report se están imprimiendo, y cada cuanto tiempo.
Para poder insertar estos objetos, en cualquier pdl, deberemos de seleccionar
aplication window->jobs.

All jobs.

Muestra el estado de todos los Reports en una sola pantalla.

Job detail view.

Muestra el estado actual del Report que seleccionemos en el desplegable.

231
Aprende WinCC

232
Aprende WinCC

Caappííttuulloo 7
C

G
Glloobbaall S
Sccrriipptt..

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.

Tipos de funciones en Global Script

Dentro del compilador de Global Script podemos observar que existen cuatro
tipos de clases o categorías de funciones:

• Project functions: funciones de proyecto. Son aquellas funciones que deben ser
llamadas desde otras partes del programa para devolver valores después de realizar
alguna operación en C. Anteriormente vimos como arrancábamos una gráfica y la
parábamos con dos funciones de proyecto. Las funciones de proyecto quedan
almacenadas automáticamente en el subdirectorio Library de nuestro proyecto, con
la extensión fct. Para traerse una función de proyecto de un proyecto a otro
deberemos de copiar dicho archivo en dicho subdirectorio del proyecto fuente al
destino.

233
Aprende WinCC

• Standard Functions: Son las funciones standard del propio WinCC, que no residen
en nuestro proyecto, sino en el subdirectorio aplib de WinCC. Estas funciones
estándar se pueden modificar, pero dicha modificación es permanente hasta que no
se reinstale el WinCC, ya que como se dijo los archivos fct de standard functions
son comunes para todos nuestros proyectos. Si deseamos generar subrutinas que
sean utilizadas por todos los proyectos en que trabajemos, solo tenemos que
copiarlas en el subdirectorio aplib. Cuando volvamos al Global Script no nos
aparece en el árbol la función hasta que no seleccionamos en el menú Options->
Regenerate Header.
• Internal Functions: Funciones que realizan acciones predeterminadas, como son
proporcionar un valor de una variable, o asignar un valor a una variable. Estas
funciones son por supuesto comunes, y no pueden ser modificadas.
• Actions: Una acción es una subrutina que no se ejecuta cuando sea llamada por un
evento, sino cuando un trigger o disparo, ya sea por tiempo o por cambio de variable
ocurra. Las actions no se pueden cambiar de nombre (siempre se llaman gscaction),
y generan un fichero de extensión pas que se guarda en el subdirectorio pas, ya sea
del ordenador en cuestión (monopuesto) o de manera global para todos los
ordenadores (multipuesto). El fichero pas por defecto se llama gsccs1.pas, pero se
puede renombrar a posteriori.

Project Functions

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 Suma_Dos_Valores(int Valor_1, int Valor_2)


{
int Temporal;

Temporal=Valor_1+Valor_2;
return(Temporal);
}

A continuación asociaremos en el evento action mouse de un botón el código


siguiente, el cual realiza la llamada a la Project Function generada por nosotros,
tomando dos parámetros de entrada y devolviendo un resultado.

234
Aprende WinCC

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
int Temporal;
int temp1,temp2;

temp1=GetTagSWord("CANTIDAD_1"); //Return-Type :short int


temp2=GetTagSWord("CANTIDAD_2"); //Return-Type :short int

Temporal=Suma_Dos_Valores(temp1,temp2); //Return-Type :long int

SetTagSWord("VAR_1",Temporal); //Return-Type :BOOL

Cualquier Project function que definamos en nuestro proyecto se almacenará en


un fichero de extensión fct en el subdirectorio Library de nuestro proyecto. Esto es
interesante a la hora de reutilizar funciones ya generadas anteriormente.
Para utilizar una función generada en otro proyecto, sólo tendremos que copiar
el fichero fct en el subdirectorio indicado, y posteriormente desde el Global Script
seleccionar en el menú Options->Regenerate Header, que nos actualiza el árbol de
funciones de la ventana del Global Script.
Resumiendo, las funciones de proyecto son las típicas subrutinas de cualquier
lenguaje de programación, dentro de las cuales podemos programar en C y utilizar las
funciones incorporadas en el propio WinCC. Este código se almacena en un fichero de
texto de extensión fct y puede ser llamada la función desde un evento de un objeto, o
desde una acción.

235
Aprende WinCC

Standard Functions

Las funciones standard son funciones de proyecto (subrutinas de programación


en C) también de extensión fct, pero con la particularidad de que vienen generadas por
el propio sistema, y no se encuentran en nuestro proyecto, sino en el subdirectorio aplib
de WinCC.
La estructura del árbol que cuelga de standard function se basa en los
subdirectorios que cuelgan del directorio aplib, pudiendo nosotros modificarlo a nuestro
gusto, e incluir project functions que sean accesibles a todos los proyectos.
Es decir, por un lado podemos acceder al código de las funciones por defecto o
standard simplemente realizando click sobre ellas, modificándolas o borrándolas si no
nos interesan (la modificación será para todos los proyectos, ya que son funciones
comunes a los mismos).
Por otro lado, podemos incluir en un directorio nuestro archivo fct y será
accesible a todos los proyectos a partir de ese momento. Se debe recordar que para que
se actualice el árbol del Global Script hay que realizar la acción compile header, como
se vio anteriormente.
Resumiendo, una función standard es como una función de proyecto, con la
diferencia de que es accesible a todos los proyectos, ya que existe en un subdirectorio
fuera del propio del proyecto actual.

Internal functions

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.

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
236
Aprende WinCC

almacena en el subdirectorio pas de nuestro proyecto. Esto significa que las acciones
locales solo se ejecutarán cuando el proyecto sea multiusuario en el equipo donde se
crearon, y no será posible realizar dicha acción en otro equipo del proyecto.
Cada dez que se genera una nueva acción, el fichero apdefap.h es integrado
automáticamente en el subdirectorio library 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.

237
Aprende WinCC

Funciones en C.

Partes de las acciones.

Una acción o función de C se divide en 4 partes:


• Cabecera de función: En la lisma se recoge la declaración de la cabecera h en la
cual se encuentran declaradas las funciones a utilizar, un puntero de texto que
contiene el nombre de la picture desde donde es llamada la función, un puntero con
el nombre del objeto actual, y de la propiedad que ejecuta la función.

#include “apdefap.h”
long _main(char *lpszPicturename, char *lpzObjectName, char *PropertyName)

• Declaración de constantes para tags: En estas líneas se definen constantes para las
variables que vayamos a utilizar. En la versión 5.1 de WinCC estas constantes y el
lugar donde se declaran son necesarias para posteriormente poder realizar una
sustitución completa de una variable por otra mediante cross reference.

// WINCC: TAGNAME_SECTION_START
// syntax #define Tagnameinaction “Tagname”
#define Variable_1 “MW10_TiempoPresion”
// next TagID: 1
// WINCC: TAGNAME_SECTION_END

• Declaración de constantes para pictures: Lo mismo de antes pero para los


nombres de las pictures que vayamos a utilizar dentro de nuestra función C.

// WINCC: PICNAME_SECTION_START
// syntax #define PicNameInAction “Picturename”
#define Picture_1 “Picture_Consignas_Tiempo”
// next PicID: 1
// WINCC: PICNAME_SECTION_END

• Declaración de variables:
Int pepe=0;
BOOL juan=FALSE;

• Código C de nuestra función:


If(juan==TRUE)
{ pepe=3;}

• Retorno de la función:
Return pepe;

Printf.

La instrucción printf posee la siguiente estructura:

238
Aprende WinCC

printf(“El valor vale %d pesetas”,valor)

Los parámetros de variables a utilizar son:

%d: entero.
%ld: doble entero
%c: carácter.
%x: hexadecimal
%o: octal
%u: entero sin signo.
%f: real en formato de coma flotante
%e: real en formato de exponencial.
%s: cadena de texto
%le: real en formato exponencial de 64 bits.
%%: carácter %
\n: cambio de linea de texto (como el return)
\r: ir a primera posición. Generalmente cuando se utiliza \n se sigue de un \r para
ponerse en el primer carácter de la nueva linea.
\t: tabulación.
\\: carácter \.

La función prinf es muy interesante para mostrar mensajes por el objeto Global
Script diagnose que nos informen de acciones en las funciones que se están ejecutando
en C.

239
Aprende WinCC

Definición de variables en C.

Los tipos de variables que podemos definir en C son los siguientes:

Data Type Value Range

Int -2 147 483 648 to 2 147 483 647


unsigned int 0 to 4 294 967 295
short -32 768 to 32 767
unsigned short 0 to 65 535
long -2 147 483 648 to 2 147 483 647
unsigned long 0 to 4 294 967 295
char -128 to 127 (all ASCII characters)
unsigned char 0 to 255 (all ASCII characters)
float -10 ^38 to 0 ^38
double -10 ^308 to 0 ^308

Operadores matemáticos en C.

Los operadores que podemos utilizar para nuestras operaciones matemáticas y


lógicas son los siguiente:

Operaciones matemáticas:

+ Suma valor=uno+dos
- Resta valor=uno-dos
* Multiplicacion valor=uno*dos
/ División valor=uno/dos
% Modulo (resto de una división) valor=uno%dos
++ Incrementar ++valor
-- Decrementar --valor

Operaciones con bits

& Bit-a-Bit AND valor=uno&dos


| Bit-a-Bit OR valor=uno|dos
^ Bit-a-Bit XOR valor=uno^dos
~ Bit-a-Bit inversion valor=uno~dos
<< Mueve los bits a la izquierda valor=uno<<8
>> Mueve los bits a la derecha valor=uno>>8

Operaciones lógicas:

> Mayor que if(uno>dos)


>= Mayor o igual que if(uno>=dos)
== Igual que if(uno==dos)
!= Distinto de if(uno!=dos)
<= Menor o igual que if(uno<=dos)
240
Aprende WinCC

< Menor que if(uno<dos)


&& AND lógica if(uno&&dos)
|| OR lógica if(uno!!dos)
! inversion lógica if(!uno)

241
Aprende WinCC

Disparo de acciones

El disparo de acciones se realiza seleccionando la acción y en el menú Edit-


>Info.
En la solapa info podemos indicar:
• Quién y cuando realizó la acción (la programó o la modificó).
• Podemos proteger nuestra acción para que solo nosotros podamos visualizar su
contenido. Esto permite proteger el know-how del desarrollador y poder ser
utilizada por el usuario.
• Podemos indicar un número de versión y un comentario.

Curiosamente, si no se aprieta el botón de aplicar antes de salir, aunque se


acepte, las modificaciones realizadas se pierden. Atención con este error de
programación que puede hacer perder el trabajo introducido.
En la solapa trigger definimos el disparo de la acción, disponiendo de tres tipos
posibles de disparo (que no son excluyentes los unos de los otros):
• Acíclico: El disparo de la acción se realiza sólo una vez un día y a una hora
determinada. Pulsando sobre Add podemos definir la fecha y hora, así como el
nombre del disparo.

242
Aprende WinCC

243
Aprende WinCC

• Cíclico: La acción se realizará cada x tiempo de manera automática en el PC a partir


de que arranque la runtime y hasta que pare.

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.

244
Aprende WinCC

• Tag: Podemos disparar una acción cuando alguna o varias variables cambien de
valor.

Compilación de funciones externas a través de DLL’s.

Si deseamos utilizar funciones ya realizadas por nosotros en alguna de nuestras


subrutinas desde WinCC, deberemos primeramente compilarlas en formato DLL desde
nuestro compilador original (Visual C, Visual Basic, Delphi).
Una vez dispongamos de dichas funciones a utilizar dentro de una DLL de 32
bits compilada, deberemos de declarar las funciones en nuestro código C de WinCC
para poderlas utilizar.
Al principio de la subrutina donde vayamos a realizar la llamada a la función
externa, deberemos de escribir la siguiente declaración:

#pragma code(“NOMBRE_DE_LA_DLL.DLL”)
#include “NOMBRE_DE_LA_CABECERA.h”
#pragma code()

Esta declaración indica al precompilador de C que añada a su biblioteca de


funciones las incluidas en NOMBRE_DE_CABECERA.h, que se encuentran en
NOMBRE_DE_LA_DLL.DLL.

Definición de variables globales y variables locales

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.
245
Aprende WinCC

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.

Exportar acciones.

A veces puede ser interesante exportar una acción de un proyecto a otro, p. Ej.,
en el caso de haber realizado una función que nos calcule cuando debemos de salvar
datos a una gráfica, y queremos implementarla en un nuevo proyecto que hayamos
realizado (si copiáramos el código C a través del portapapeles los datos de disparo,
autor, password, etc… se deberían de volver a crear).

Para ello, pulsamos en el botón de esportación en la barra de herramientas del


Global Script, grabando la acción con la extensión act.

Para importar la acción, cerramos el proyecto fuente y abrimos el proyecto


destino. Dentro del Global Script tenemos el botón de importar y capturamos el fichero
anteriormente generado.

246
Aprende WinCC

Diagnóstico de funciones C.

Una de las tareas más importantes a la hora de trabajar con funciones C es poder
realizar diagnóstico de las mismas durante su ejecución, ya que a menudo las acciones
que realizan no poseen un control “visual” de su ejecución, y no podemos saber si se
están ejecutando bien, y porqué en el caso de que lo realicen mal.
Vamos a estudiar las posibilidades de diagnóstico que soporta WinCC V5.1.

Global Script runtime.

Durante el runtime, podemos colocar un objeto Global Script runtime en


cualquier picture, que nos indicará que funciones se están ejecutando, el tiempo de
proceso que se está dedicando a cada una de ellas, cuando arrancaron y los valores de
retorno y de error que están devolviendo las mismas en el momento actual.

seleccionar Window contents->Global Script->GSC Runtime. Es importante


recordar que si no se activa la parte de runtime de Global Script no se ejecutará
lógicamente este objeto.

Global Script diagnostic.

Otra posibilidad muy interesante es utilizar el Global Script diagnostics, una


ventana en la que podremos observar los errores o avisos internos del sistema WinCC,
alamacenándolos automáticamente en un fichero que se puede guardar en formato texto.
Además es posible enviar mensajes a dicha ventana para que nosotros mismos nos
indiquemos que estamos realizando una acción concreta.
Hay dos formas de utilizar esta ventana: como una ventana de WinCC o como
un ocx incrustado. En este apartado vamos a verlo como una ventana de WinCC,
explicando el segundo método en el capítulo “controles ocx de WinCC”.
Para insertar la ventana Global Script runtime en una picture, es necesario
seleccionar Window contents->Global Script->GSC Diagnostics. Es importante
recordar que si no se activa la parte de runtime de Global Script no se ejecutará
lógicamente este objeto.
Para enviar mensajes a la ventana basta con ejecutar una función printf de C
dentro de nuestra acción.

247
Aprende WinCC

Funciones standard.

A continuación repasaremos las funciones standard que acompañan a WinCC.

Standard Alarm.

Las funciones disponibles para el manejo de la ventana de alarmas son las


siguientes:

• AXC_OnBtnArcLong: Activar la ventana de archivo continuo de alarmas.


• AXC_OnBtnArcShort: Activar la ventana del archivo de tambor de alarmas.
• AXC_OnBtnComment: Activar la ventana de comentarios sobre la alarma
seleccionada.
• AXC_OnBtnEmergAck: Activar el acuse de emergencia de alarma.
• AXC_OnBtnHornAck: Activar el acuse de Horn Alarm.
• AXC_OnBtnInfo: Activar la ayuda infor sobre la alarma seleccionada.
• AXC_OnBtnLock: Activar la ventana de bloqueo de alarmas.
• AXC_OnBtnLoop: Activar el salto a la picture asociada a la alarma actual
mediante loop in alarm.
• AXC_OnBtnMsgFirst: Ir a la primera alarma de la ventana.
• AXC_OnBtnMsgLast: Ir a la última alarma de la ventana.
• AXC_OnBtnMsgNext: Ir a la siguiente alarma de la ventana.
• AXC_OnBtnMsgPrev: Ir a la alarma anterior de la ventana.
• AXC_OnBtnMsgWin: Activar la ventana de alarmas actuales.
• AXC_OnBtnPrint: Imprimir las alarmas actuales en un Report.
• AXC_OnBtnScroll: Activar el scroll para poder desplazarse por la ventana de
alarmas.
• AXC_OnBtnSelect: Activar la ventana de selección de alarmas.
• AXC_OnBtnMsgFirst: Ir a la primera alarma de la ventana.
• AXC_OnBtnSinglAckn: Reconocer la alarma actual seleccionada.
• AXC_OnBtnVisibleAckn: Reconocer todas las alarmas de la pantalla de alarmas
actuales.
• AXC_OnBtnSetFilter: Activar la ventana de selección de filtro de alarmas.
• GmsgFunction:
• OnBtn...: Realizan la misma funcionalidad que las homólogas AXC_OnBtn.. que
acabamos de estudiar. Sin embargo, en futuras versiones de WinCC únicamente se
soportarán las primeras, por lo que no es recomendable utilizarlas.

248
Aprende WinCC

Standard Graphics.

• void AcknowledgeMessage(DWORD MsgNr): Reconoce un mensaje de sistema


de número x.
• char* GetLinkedVariable(char* lpszPictureName, char* lpszObjectName,
char* lpszPropertyName): La función GetLinkedVariable devuleve un puntero a
una cadena de texto en la que se encuentra la variable asociada a una propiedad de
un objeto. Supongamos que el objeto I/O posee la propiedad value asociada a una
variable denominada valor. Esta función nos devolverá la cadena valor si en
ObjectName le pasamos I/O y en PropertyName value.
• char* GetLocalPicture(char* lpszPictureName): Devuelve un puntero a una
cadena de texto en la que se encuentra el nombre de la picture que se le pasa como
argumento, pero sin la extensión pdl.
• char* GetParentPicture(char* lpszPictureName): Devuelve un puntero a una
cadena de texto en la que se encuentra el nombre de la picture padre desde la que se
llamó a la que se le pasa como argumento, pero sin la extensión pdl.
• char* GetParentPictureWindow(char* lpszPictureName): Devuelve un puntero
a una cadena de texto en la que se encuentra el nombre de la picture en la que se
encuentra la window actual.
• void OpenPicture(char* lpszPictureName): Salta a una picture especificada.
• char* Registry2(char* mode, char* String0, char* String1): Mediante esta
función podemos utilizar un par de cadenas de texto para almacenar valores. Las
diferentes posibilidades son:
• Registry2("set", "[String0]", "[String1]"):introduce las dos cadenas en la
lista.
• Registry2("get", "[String0]", ZERO):returns the first string pair partner
[String1], which belongs to the passed [String0] and then deletes the string
pair from the list
• Registry2("reset", ZERO, ZERO):deletes all the string pairs in the list
• Registry2("display", ZERO, ZERO):displays the string pairs stored in the
list in a Global Script diagnostics window.

249
Aprende WinCC

Standard Reports.

• void ReportJob(LPSTR lpJobName, LPSTR lpMethodName): Ejecuta un


Report. Dependiendo del parámetro lpMethodName ejecutará una función u otra,
adoptando los valores:
• "PRINT": imprime el job.
• "PREVIEW" : ejecuta la visualización previa del job.
• BOOL RPTJobPreview(LPSTR lpJobName): Ejecuta una previsualización de un
job.
• BOOL RPTJobPrint(LPSTR lpJobName): Imprime un job.
• void RptShowError(LPCSTR pszFailedFunction, CMN_ERRORA*
pCmnErrorA): si se produce un error a la hora de imprimir un job, mediante esta
función podremos obtener una estructura de datos que nos indiquen la causa del
error. En pszFailedFunction deberemos de indicar la función que estamos utilizando
para imprimir el job. La estructura de error posee la siguiente declaración:
typedef struct {

DWORD dwError1,
DWORD dwError2,
DWORD dwError3,
DWORD dwError4,
DWORD dwError5;
TCHAR szErrorText[MAX_ERROR_LEN];
}
CMN_ERROR, *PCMN_ERROR;

Siendo:
• dwError1 a dwError5: valores de error devueltos por la API de
Windows.
• SzErrorText: cadena de texto que contiene el mensaje de error
devuelto por el sistema.

250
Aprende WinCC

Caappííttuulloo 8
C

TTeexxtt LLiibbrraarryy..
Text Library es la parte de 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 de
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.

251
Aprende WinCC

Idiomas
¿Cómo crear un nuevo idioma?

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.

¿Cómo borrar un idioma?


Para borrar un idioma, en el menú Options->Delete language podemos
deshacernos de un idioma no deseado. Hay que tener en cuenta que se pierden todos los
mensajes configurados bajo ese idioma de manera irrevocable.

252
Aprende WinCC

¿Cómo cambiar de idioma desde el Graphic Designer?

En el menú View->Language podemos seleccionar el código de idioma activo


actualmente para los objetos de nuestra picture. Podemos escribir los textos
modificando su propiedad de texto objeto a objeto, aunque es más cómodo insertar
todos los objetos en un determinado idioma, y una vez finalizada la picture, ir al Text
Library, rellenando allí la columna correspondiente al nuevo idioma. Si posteriormente
aparece un nuevo objeto, se puede utilizar el método visto en este punto para
configurarle los dos idiomas, sin necesidad de recurrir esta vez al Text Library.

253
Aprende WinCC

Caappííttuulloo 9
C

U
Usseerr A
Addm
miinniissttrraattoorr..
El apartado de WinCC denominado User Administrator se encarga de la
administración de los usuarios que van a trabajar en el runtime del sistema WinCC.
La principal diferencia que hay que observar en la filosofía de usuarios de
WinCC con respecto al típico control de privilegios por niveles es que en el WinCC el
disponer de privilegio o nivel para realizar algo que los demás no estén autorizados no
implica que se permita acceder a todo lo que los demás usuarios son capaces de realizar.

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.
Hasta un total de 999 niveles de privilegios pueden ser creados en WinCC V5.1.

254
Aprende WinCC

Usuarios.

¿Cómo crear un nuevo grupo de usuarios?

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.

La caja de diálogo que configura un nuevo usuario nos pide:


• Login: Nombre identificativo del usuario en cuestión (sólo puede ser una palabra, p.
Ej. Juan_Perez).
• Password: Cadena de texto de un mínimo de 6 caracteres, que puede incluir
espacios y números y letras indistintamente.
• Verify password: La misma cadena del password debemos de repetirla para
confirmar que no hemos introducido ninguna letra por equivocación.
• Copy group settings also: Se puede preestablecer una configuración para todos los
nuevos usuarios que se generen dentro de un grupo. Con esta casilla se activa el
hecho de que un nuevo usuario copia las características predefinidas de su grupo.

El número máximo de grupos que pueden ser generados es de 10. El número


máximo de usuarios es de 128.

255
Aprende WinCC

Passwords.

¿Cómo asignar un nivel de password a un nuevo usuario?

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.

¿Cómo crear una nueva capacidad?

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.

¿Cómo borrar una nueva capacidad?

Para borrar una capacidad o bloqueo ya existente simplemente seleccione


primeramente el nivel de bloqueo que desea borrar realizando un click sobre él.
Seleccione del menú Table->Delete Authorization Level, y confirme el borrado del
mismo.
Los niveles de autorización son comunes para todos los usuarios y grupos, por lo
que el borrar un nivel en un grupo lo borra de los demás.
No se puede borrar el nivel 1 User Administrator, ya que es el propio del
administrador del sistema.

256
Aprende WinCC

¿Cómo cambiar el password de un usuario?

Si un determinado usuario desea cambiar el password que ya dispone, no es


necesario borrarlo y volver a generarlo. Presionando el botón derecho sobre el usuario,
y seleccionando del menú Change password podemos cambiar su password, siempre uy
cuando conociésemos de antemano el password a cambiar.

Si no conocemos su password, deberemos necesariamente darlo de baja.

¿Cómo cambiar el login de un usuario?

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.

Desactivación automática de un usuario

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.

Si la casilla es distinta de cero, pasados dichos minutos automáticamente el


sistema desconecta al usuario, por lo que si quiere utilizar de nuevo el sistema WinCC
con sus privilegios deberá de volver a darse de alta en el mismo. Este tiempo es
independiente de si el usuario está utilizando el sistema o no.
257
Aprende WinCC

Nota: si se habilita la opción Chipcard, aparece una casilla que nos permite
realizar los logins de los operarios a través de la tarjeta chipcard.

¿Cómo asignar un nivel de password a una acción?

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.

Passwords estándar.

El WinCC al crear un nuevo proyecto ya genera por defecto una serie de niveles
de password estándar. El significado de los mismos es el siguiente:
• User administration: si este nivel está activo, se permite la entrada al módulo user
administration y realizar cambios en el mismo.
• Tag entering: cuando está activo este nivel, se permite introducir valores de manera
manual en los campos de I/O.
• Process controlling: permite al operario realizar cambios del tipo
manual/automático.
• Picture editing: Permite ejecutar el grapich Designer para realizar cambios en las
pantallas.
• Change Picture: Permite al operario realizar cambios en las pantallas durante el
runtime.
• Windows Selection: Permite al operario cambiar a las aplicaciones Windows que se
estuvieran ejecutando en background junto con el WinCC.
• Hardcopy: Habilita que se puedan realizar hardcopys de la pantalla.
• Confirm alarm: Habilita que el operario pueda confirmar alarmas.
258
Aprende WinCC

• Lock alarms: Habilita que el operario pueda bloquear alarmas para que no vuelvan
a aparecer.
• Free alarms: Habilita que el operario pueda liberar alarmas que estuviesen
bloqueadas previamente.
• Project alarms: Permite al operario acceder al Alarm Logging para cambiar
alarmas.
• Start archive: Permite al operario arrancar un archivo de proceso.
• Stop archive: Permite al operario parar un archivo de proceso.
• Edit archive value: Permite al operario editar un valor de un archivo desde una
tabla.
• Project archive value: Si stá activa, permite al operario configurar los archivos en el
Tag Logging.
• Project manager: Habilita al operario para poder salir al Explorador de WinCC.

Como activar odesactivar a un usuario mediante C.

Para poder dar de alta o baja a un usuario es necesario asignar una hotkey a la
ventana de usuarios. Existe un método mediante una acción de C que nos permite
asignar a un botón la apertura de la ventana de activación.
El código a añadir al botón es el siguiente:

#pragma code(“USEADMIN.DLL”)
#include “PWRT_API.H”
#pragma code()

PWRTLogin(‘1’);

Siendo 1 la tecla que activa la visualización del cuadro de diálogo de activación e


usuarios.

Para dar de baja a un usuario el código es el siguiente:

#pragma code(“USEADMIN.DLL”)
#include “PWRT_API.H”
#pragma code()

PWRTLogout();

259
Aprende WinCC

Addons.

Variable login.

La opción variable login permite asignar un valor concreto a una variable de


usuario. De esta manera esposible asignar un nivel de password de manera directa
simplemente presionando una tecla.
Los pasos a seguir para realizar esta acción son los siguientes:
• Asignar a un ordenador una variable de usuario.
• Especificar un valor mínimo y máximo para dicha variable de usuario.
• Asignar una tag a la variable de usuario.

Si se asigna el valor logout a la tag asignada a la variable de usuario se podrá dar de


baja un operario de manera directa. En el momento que un operario se da de alta en el
sistema mendiante el metodo variable login no es posible que otro lo haga con la
ventana de user dialog que aparece al presionar la hotkey de login. Esto será así hasta
que el usuario primero se dé de baja con logout.

Asignar un ordenador a una tag.

La opción del menú Computer assignement… perimte realizar esta acción.

El tipo de variable debe de ser entero, para comprender un valor que irá desde 0
a 10.

Configuration

En la opción configuration…podremos seleccionar el valor mínimo y máximo


que puede adoptar la variable seleccionada como variable login.

260
Aprende WinCC

Asignar un valor de usuario.

La opción del menú User assignement…permite asignar un valor de vairable a


un determinado usuario.

Chipcard.

Es posible dar de alta a operarios mediante tarjetas magnéticas que se pasan por
un aparato denominado chipcard que se conecta al puerto serie del PC. Este software
más hardware es una opción de WinCC, cuyo funcionamiento se explica a continuación.
Suponemos que se ha instalado el software opcional Chipcard y conectado el
lector/escritor al puerto serie del PC.

Parametrizar el Chipcard.

En el panel de control de Windows NT disponemos de un icono


denominadoChipcard que nos permite configurar el modo de funcionamiento de la
lectora chipcard.

261
Aprende WinCC

A partir de su activación en el User Administrator disponemos de la opción


chipcard para trabajar con el lector/escritor.

Escribir en una tarjeta desde la chipcard.

La primera posibilidad de que disponemos es la escritura en una tarjeta que


dispongamos dentro de la lectora/escritora.

Lo único que tenddremos que seleccionar es el usuario a grabar en la tarjeta. La


grabación borra cualquier dato que pudiese existir previamente en la tarjeta.
Existe la posibilidad de adicionalmente a la tarjeta, obligar al operario a
introducir la clave (para el caso de que se le sustrayese la tarjeta a un operario). Para
ello, es necesario seleccionar la casilla Aditional manual password requiered.

Chequear una tarjeta chipcard.

Mediante esta opción podemos leer el usuario grabado en la tarjeta, con el objeto
de comprobar que se ha grabado correctamente.

Activación mediante una chipcard durante el runtime.

Al insertar la tarjeta en la lectora chipcard automáticamente se da de alta el


usuario. Ningún otro operario puede darse de alta hasta que no se retira la tarjeta del
lector. En dicho momento automáticamente se da de baja el usuario.
Si un usuario se activa mediante la tarjeta chipcard no influye el tiempo de
logout, sino que está activo mientras la tarjeta se encuentre en el lector.

262