SlideShare a Scribd company logo
1 of 10
Download to read offline
Comenzar un proyecto
Capitulo 1
Comenzar un proyecto.
Introducción.
¿Cansado de leer libros que no te dicen nada, y solo hacen que repetir lo que
pone en los menús?. ¡Pues eso se va a acabar!. Con el presente libro, “Un ejemplo para
WinCC”, seguirás sin tener ni idea probablemente de lo que deseabas saber, pero te
aseguro que por lo menos te lo pasarás bien.
Si estás harto de ver como los pdl son mas estáticos que los ojos de espinete, o
que te queden mas horribles que Jesús Gil en bañador, descubre con este libro como
realizar todas esas acciones que convierten tu scada en uno de los más admirados (por ti,
claro).
Para trabajar con este libro se requiere disponer primeramente de:
• Conocimientos de WinCC básicos o medios1
,
• Tener instalado WinCC, y para algunos capítulos además Step 7.
• Tener un PC2
Si dispones de todo esto, y tiempo para realizar este proyecto, vamos para
adelante como los de Alicante, que el ejemplo tiene tela.
1
Si no dispones de estos conocimientos, ver mi libro anterior “Manual WinCC V4.02”
2
¿Qué qué es un PC?. Bien, este no es tu libro, deja de leer ahora mismo y saldrás ganando.
Página 1/10
Comenzar un proyecto
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
picture window de tamaño 1024x100, y seleccionamos en picture window-
>miscelaneous->picture name: top.pdl. También activamos aquí border: yes.
Realizamos la misma acción para la ventana de abajo, colocando otra picture
window, pero esta vez en sus propiedades ponemos position y:668, y como picture
name bottom.pdl. También ponemos el borde activo. Así, dispondremos de nuestra
primera ventana, mas simple que el funcionamiento de un botijo, pero la base sobre la
que vamos a trabajar. Debe tener el siguiente aspecto:
Página 2/10
Comenzar un proyecto
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 en bottom.pdl. La función para salir puede ser:
• DeactivateRTProject(); Sale del runtime de WinCC
• DMExitWinCCEx (DM_SDMODE_SYSTEM); sale de Windows y
apaga el ordenador.
• DMExitWinCCEx (DM_SDMODE_REBOOT); sale de Windows y
reinicia el ordenador.
Como este es un proyecto serio (jeje), pondremos en el botón de exit, que se
encuentra n la biblioteca, y le asociamos la función DMExitWinCCEx
(DM_SDMODE_SYSTEM).
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 de wincc” y otro como “apagar
el ordenador”.
Les ponemos un automatic logout, para que si no se desactivan ellos, los
desactive el sistema pasados x minutos.
Bien, ya tenemos nuestros usuarios, queda asignar el nivel de protección al
botón de salir de la picture start.pdl. Volvemos a ella, y en la propiedad miscelaneous-
>authorization seleccionamos apagar el ordenador.
Ahora ya no podrá salir del wincc cualquiera, sino solo los que tengan el
privilegio de apagar el ordenador, y cuando se logen y pulsen el botón se apagará el
ordenador automáticamente.
Página 3/10
Comenzar un proyecto
Pero: ¿cómo se logan3
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 logout (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 cagao, 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
colocaremos un botón en la picture 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 actino:
#pragma code("useadmin.dll")
#include "PWRT_api.h"
#pragma code()
long pepe;
pepe=strcmp(GetTagCharWait("@CurrentUser"),"");
printf("pepe: %d",pepe);
if(pepe)
{
PWRTLogout();
}
else
3
Logarse: darse de alta en un sistema protegido, introduciendo tu nombre y tu password.
Página 4/10
Comenzar un proyecto
{
PWRTLogin('c');
}
Con esta función te logas y deslogas con el mismo botón (ha sido fácil, eh?).
Para acabar de rematar la faena, pondremos en top.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("D:SIEMENSWINCCBINPASSCS.EXE");
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.
Realizando nuestra primera picture
Ya estamos en condiciones de comenzar nuestra primera picture. Hasta ahora,
todo lo hemos hecho en start.pdl. Vamos a utilizarla como plantilla para las demás
pictures que generemos (también puede guardarla como plantilla.pdl, y a partir de
entonces, en vez de hacer una nueva picture, abres la plantilla,pdl y la guardas con otro
nombre.
La primera picture la llamaremos Tuberías.pdl, y lo primero que tendremos que
hacer es llamarla desde nuestra ventana start.pdl. Lo haremos poniendo un boton en
top.pdl, pero atención, si no llamamos a la picture tuberías mediante la función
openpicture de C, sino a través de la ventana configuration dialog, no nos funcionará el
salto, ya que estamos realizando la llamada desde un botón que está incrustado en una
picture window. Por lo tanto, lo que haremos será poner nuestro botón, y en el evento
mouse actino colocaremos la instrucción:
OpenPicture("tuberias.PDL"); //Return-Type :void
Ya tenemos el botón para entrar. Ahora necesitamos un botón para volver a la
página principal. Pondremos en la picture top.pdl una imagen a la derecha con el logo
de la empresa. Cuando se pinche en el logo, saltaremos a la página inicial con la
instrucción:
OpenPicture("start.PDL"); //Return-Type :void
Página 5/10
Comenzar un proyecto
Comenzaremos con una simple válvula, que sacaremos de la biblioteca de WinCC. Con
la versión 5.0 se ha añadido una librería muy interesante de objetos dentro de Simatic
HMI symbols library 1.2. Dentro de la carpeta valves disponemos de una válvula como
la figura:
Vamos a generar tres variables, todas unsigned 32 bits. En la picture, colocamos
tres I/O box asociadas a estas tres variables. La primera de ellas será estados_válvulas, y
contendrá el estado actual (en marcha o parada) de 32 válvulas. La segunda será
alarmas_válvulas, y la tercera manual_válvulas (manual válvulas indica si la válvula se
encuentra gobernada en manual o en automático).
¿Qué buscamos?. Simplemente visualizar el estado de una válvula, pero sin
utilizar una variable para cada estado, sino con 3 variables poder, consultando los bits
de que consta la doble palabra, disponer de 32 .
Volvemos a las propiedades de la válvula que hemos colocado al principio desde
la librería. La variable symbolapperance nos indicará si la válvula se encuentra en
marcha o parada. La variable blinkmode nos indicará si tiene alarma, mientras que la de
forecolor si está en manual o automático.
Página 6/10
Comenzar un proyecto
Veamos que colocaremos en symbolapperance:
En la propiedad blinkmode realizaremos el siguiente dinamyc dialog:
Y por último, para la propiedad forecolor realizaremos un dinamyc dialog que
nos identifique cuando la válvula está en manual y cuando en automático.
Página 7/10
Comenzar un proyecto
Con esto tenemos solventado el tema de una válvula. Vamos a dibujarnos unas
cuantas mas, junto con alguna que otra tubería (todas salen de la biblioteca
anteriormente mencionada).
Página 8/10
Comenzar un proyecto
El problema viene en el momento queremos colorear la tubería señalada con una
flecha en la imagen. ¿Por qué?. Fácil, porque depende de tres válvulas. Por lo tanto no
debe de colorearse cuando esté un bit, sino tres. Para ello, necesitaremos realizar una
pequeña instrucción en C, que nos devolverá un valor entre 0 a 1.
En lugar de utilizar un dinamic dialog, en el evento symbolapperance asociamos
una función C como la siguiente:
long valor1,valor2,valor3,resultado;
double var1,var2,var3;
var1=GetTagDWordWait("estados_valvulas");
valor1=var1 && 2;
valor2=var1 && 4;
valor3=var1 && 8;
if (valor1 | valor2 | valor3) resultado=1;
else resultado=0;
return(resultado);
Como podemos ver, esta función devuelve un 1 si se activa el bit 1, el 2 o el 3 de
la doble palabra estados_válvulas. Aunque esta función se ejecuta correctamente, sería
mejor no hacer este tipo de “cosas”4
en el scada, y utilizar una marca en el plc para las
tuberías, con lo que no haría falta consultar esta función de C sino realizar una
asignación como se hizo en la válvula inicial.
Bien con todo esto hemos aprendido:
• A entrar y salir del wincc de manera decente.
• A controlar quien se nos activa y quien no en el sistema, para poder echarle la
culpa a alguien de que las cosas no van bien.
• A animar algo los objetos para que se muevan algo mas que epi y blas en una
cama de velcro.
4
Léase cochinadas, marranadas y demás porquerías que se programan en un plc.
Página 9/10
Comenzar un proyecto
Saber en que picture estamos.
Mas adelante vamos a realizar muchas pantallas, a cual mas cutre, pero no por ello
pantallas. Es muy interesante que sepamos en cual estamos en cada momento. Ahora es
fácil, pero cuando el proyecto posee 50, recordar el nombre la que estamos en ese
momento se vuelve tarea vergonzosa, porque siempre se oye la voz maliciosa “¿pero no
lo habías hecho tu?” cuando buscas desesperadamente la picture en el graphics designer.
La solución está en poner el nombre de la picture actual en la pantalla, de tal manera
que encontrarla luego para modificarla sea muy sencillo. Claro, esto además tiene la
ventaja de que te corrije esa tendencia escatológica a llamar a las cosas cuando se está
desarrollando caca o pedo o mierda, o cosas peores, que luego aflorar una vez el
proyecto está acabado.
Como se hace esto es muy sencillo, siempre que lo hagas al principio del proyecto.
Luego es mas complejo porque habrá que modificar todas las pictures.
Hay dos maneras, una fácil y mala y otra algo mas compleja y buena (como todo en
la vida).
Vamos con la mala:
Abrimos la picture top.pdl. Colocamos a la derecha de la I/O de user_actual, un
texto que en su propiedad font->text tendrá el siguiente código C:
return(GetParentPicture(lpszPictureName)); //Return-Type :char*
Lo que hacemos en realidad es asignarle a dicho texto no el nombre de la picture en
la que está, que evidentemente siempre será top.pdl, sino el nombre de la ventana padre
en la cual e aloja top.pdl, que según estemos en una será una, y en otra será otra.
Que fácil, ¿no?. Pues no. El problema radica en que esta comprobación del nombre
de la ventana padre lo controlas, porque observa cuando hagas el código C que arriba
tienes un trigger, que debes poner a uno o dos segundos. Pero es un poco tonto perder
tiempo en chequear de manera cíclica si has cambiado de pantalla, sobre todo porque el
que cambia eres tu, y dispones en le sistema de ese evento. Estamos cargando al sistema
de una tarea que no es necesaria, ya que solo queremos que cambie el nombre en dicho
texto cuando cambiemos de pantalla, no cada un segundo.
Vamos pues con la solución buena. Consiste en la picture plantilla colocarse en el
evento open picture el siguiente código:
SetTagCharWait("PANTALLA_ACTUAL",lpszPictureName);
Con esto copiamos el nombre de la pantalla actual a una variable interna, que hemos
definido previamente, pantalla_actual, y que es de tipo texto de 8 bits.
Ya solo tenemos que asociar en top.pdl al texto anterior, en la propiedad font->text
la variable pantalla_actual con trigger upon change. Claro está, las pantallas que hemos
hecho ya, como son start y planta deneremos de ponerle el mismo código en el evento
open picture que ha plantilla. Pero a partir de ahora ya no será necesario, porque todas
las pictures las vamos a sacar de plantilla.
A mi me gusta mas la segunda opción, pero tu mismo, te doy las dos.
n el siguiente capítulo vamos a hacer algo que nos sale muy bien: generar alarmas,
pero esta vez no entre los que nos rodean, sino dentro del WinCC.
Página 10/10

More Related Content

What's hot (15)

Programando bajo el paradigma orientado a objetos, parte uno
Programando bajo el paradigma orientado a objetos, parte unoProgramando bajo el paradigma orientado a objetos, parte uno
Programando bajo el paradigma orientado a objetos, parte uno
 
Opencv entrenamiento(1/2)
Opencv entrenamiento(1/2)Opencv entrenamiento(1/2)
Opencv entrenamiento(1/2)
 
Interfaz gráfica de usuario
Interfaz gráfica de usuarioInterfaz gráfica de usuario
Interfaz gráfica de usuario
 
Manual de la ventana ejecutar
Manual de la ventana ejecutarManual de la ventana ejecutar
Manual de la ventana ejecutar
 
Multitarea e hilos en java
Multitarea e hilos en javaMultitarea e hilos en java
Multitarea e hilos en java
 
Que es action scrip 3
Que es  action scrip 3Que es  action scrip 3
Que es action scrip 3
 
Multitaréa e hilos
Multitaréa e hilosMultitaréa e hilos
Multitaréa e hilos
 
Que es action scrip 3
Que es  action scrip 3Que es  action scrip 3
Que es action scrip 3
 
Expansionmultimediaguiados
ExpansionmultimediaguiadosExpansionmultimediaguiados
Expansionmultimediaguiados
 
Guia para e insertar codigo en mi proyecto
Guia  para e insertar codigo en mi  proyectoGuia  para e insertar codigo en mi  proyecto
Guia para e insertar codigo en mi proyecto
 
Auto play
Auto playAuto play
Auto play
 
Manual de Lenguaje Batch
Manual de Lenguaje BatchManual de Lenguaje Batch
Manual de Lenguaje Batch
 
Programacion en JAVA 2
Programacion en JAVA 2Programacion en JAVA 2
Programacion en JAVA 2
 
Todo Javascript para canibales
Todo Javascript para canibalesTodo Javascript para canibales
Todo Javascript para canibales
 
Java Script de canibaless
Java Script de canibalessJava Script de canibaless
Java Script de canibaless
 

Viewers also liked (10)

Giaotrinh wincc
Giaotrinh winccGiaotrinh wincc
Giaotrinh wincc
 
Ctai Ingeniería - Curso Win CC
Ctai Ingeniería - Curso Win CCCtai Ingeniería - Curso Win CC
Ctai Ingeniería - Curso Win CC
 
Bai32 wincc
Bai32 winccBai32 wincc
Bai32 wincc
 
08 win cc - programación elemental (1)
08   win cc - programación elemental (1)08   win cc - programación elemental (1)
08 win cc - programación elemental (1)
 
Automatizacion
AutomatizacionAutomatizacion
Automatizacion
 
Ideas In Wincc Toolset
Ideas In Wincc ToolsetIdeas In Wincc Toolset
Ideas In Wincc Toolset
 
Introduccion hmi
Introduccion hmiIntroduccion hmi
Introduccion hmi
 
DMC Siemens Automation Summit 2014 Presentation: Getting the Most Out of WinC...
DMC Siemens Automation Summit 2014 Presentation: Getting the Most Out of WinC...DMC Siemens Automation Summit 2014 Presentation: Getting the Most Out of WinC...
DMC Siemens Automation Summit 2014 Presentation: Getting the Most Out of WinC...
 
Sistema scada
Sistema scadaSistema scada
Sistema scada
 
Siemens Wincc
Siemens WinccSiemens Wincc
Siemens Wincc
 

Similar to Ewcc1

Un proyecto con fujitsu power cobol
Un proyecto con fujitsu power cobolUn proyecto con fujitsu power cobol
Un proyecto con fujitsu power cobol
Paralafakyou Mens
 
Taller 1 y 2 jenny
Taller 1 y 2 jennyTaller 1 y 2 jenny
Taller 1 y 2 jenny
jennyway21
 
Electrónica: Proteus primeros pasos con la pestana diseñador grafico parte 2
Electrónica: Proteus primeros pasos con la pestana diseñador grafico parte 2Electrónica: Proteus primeros pasos con la pestana diseñador grafico parte 2
Electrónica: Proteus primeros pasos con la pestana diseñador grafico parte 2
SANTIAGO PABLO ALBERTO
 
sistema operativo grafico de windows XP
sistema operativo grafico de windows XPsistema operativo grafico de windows XP
sistema operativo grafico de windows XP
guest162190
 
Taller no. 1 udes windows 7
Taller no. 1 udes   windows 7 Taller no. 1 udes   windows 7
Taller no. 1 udes windows 7
josephhjj23
 

Similar to Ewcc1 (20)

Un proyecto con fujitsu power cobol
Un proyecto con fujitsu power cobolUn proyecto con fujitsu power cobol
Un proyecto con fujitsu power cobol
 
Trucos windows-7
Trucos windows-7Trucos windows-7
Trucos windows-7
 
Taller 1 y 2 jenny
Taller 1 y 2 jennyTaller 1 y 2 jenny
Taller 1 y 2 jenny
 
Sessió 2
Sessió 2Sessió 2
Sessió 2
 
PLC y Electroneumática: Codesys Grafcet
PLC y Electroneumática: Codesys GrafcetPLC y Electroneumática: Codesys Grafcet
PLC y Electroneumática: Codesys Grafcet
 
Empezando con mac
Empezando con macEmpezando con mac
Empezando con mac
 
Electrónica: Proteus primeros pasos con la pestana diseñador grafico parte 2
Electrónica: Proteus primeros pasos con la pestana diseñador grafico parte 2Electrónica: Proteus primeros pasos con la pestana diseñador grafico parte 2
Electrónica: Proteus primeros pasos con la pestana diseñador grafico parte 2
 
Manual mind+
Manual mind+Manual mind+
Manual mind+
 
Diseño de páginas web
Diseño de páginas webDiseño de páginas web
Diseño de páginas web
 
6 curso
6 curso6 curso
6 curso
 
Curso de power cobol
Curso de power cobolCurso de power cobol
Curso de power cobol
 
Folleto de visual basic
Folleto de visual basicFolleto de visual basic
Folleto de visual basic
 
Trabajo tic. xabi y jesús
Trabajo tic. xabi y jesúsTrabajo tic. xabi y jesús
Trabajo tic. xabi y jesús
 
sistema operativo grafico de windows XP
sistema operativo grafico de windows XPsistema operativo grafico de windows XP
sistema operativo grafico de windows XP
 
DAM_18520450_Trabajando con React Native.pdf
DAM_18520450_Trabajando con React Native.pdfDAM_18520450_Trabajando con React Native.pdf
DAM_18520450_Trabajando con React Native.pdf
 
Guía interfaz inicial
Guía  interfaz  inicialGuía  interfaz  inicial
Guía interfaz inicial
 
Netbeans
Netbeans Netbeans
Netbeans
 
Herramientas para programar en C
Herramientas para programar en CHerramientas para programar en C
Herramientas para programar en C
 
Taller no. 1 udes windows 7
Taller no. 1 udes   windows 7 Taller no. 1 udes   windows 7
Taller no. 1 udes windows 7
 
programacion.en android.joseluis.yama.may.isc.j4
programacion.en android.joseluis.yama.may.isc.j4programacion.en android.joseluis.yama.may.isc.j4
programacion.en android.joseluis.yama.may.isc.j4
 

Recently uploaded

INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
evercoyla
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
gustavoiashalom
 

Recently uploaded (20)

INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
 
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der RoheAportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
 
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
 
Matrices Matemáticos universitario pptx
Matrices  Matemáticos universitario pptxMatrices  Matemáticos universitario pptx
Matrices Matemáticos universitario pptx
 
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf  PARA TRABAJO SEGUROATS-FORMATO cara.pdf  PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
 
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdfCONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
 
Desigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdfDesigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdf
 
Presentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptxPresentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptx
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdf
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdfDISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdf
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdf
 
Ficha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelosFicha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelos
 
libro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operacioneslibro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operaciones
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalación
 
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVOESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJODIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
 

Ewcc1

  • 1. Comenzar un proyecto Capitulo 1 Comenzar un proyecto. Introducción. ¿Cansado de leer libros que no te dicen nada, y solo hacen que repetir lo que pone en los menús?. ¡Pues eso se va a acabar!. Con el presente libro, “Un ejemplo para WinCC”, seguirás sin tener ni idea probablemente de lo que deseabas saber, pero te aseguro que por lo menos te lo pasarás bien. Si estás harto de ver como los pdl son mas estáticos que los ojos de espinete, o que te queden mas horribles que Jesús Gil en bañador, descubre con este libro como realizar todas esas acciones que convierten tu scada en uno de los más admirados (por ti, claro). Para trabajar con este libro se requiere disponer primeramente de: • Conocimientos de WinCC básicos o medios1 , • Tener instalado WinCC, y para algunos capítulos además Step 7. • Tener un PC2 Si dispones de todo esto, y tiempo para realizar este proyecto, vamos para adelante como los de Alicante, que el ejemplo tiene tela. 1 Si no dispones de estos conocimientos, ver mi libro anterior “Manual WinCC V4.02” 2 ¿Qué qué es un PC?. Bien, este no es tu libro, deja de leer ahora mismo y saldrás ganando. Página 1/10
  • 2. Comenzar un proyecto 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 picture window de tamaño 1024x100, y seleccionamos en picture window- >miscelaneous->picture name: top.pdl. También activamos aquí border: yes. Realizamos la misma acción para la ventana de abajo, colocando otra picture window, pero esta vez en sus propiedades ponemos position y:668, y como picture name bottom.pdl. También ponemos el borde activo. Así, dispondremos de nuestra primera ventana, mas simple que el funcionamiento de un botijo, pero la base sobre la que vamos a trabajar. Debe tener el siguiente aspecto: Página 2/10
  • 3. Comenzar un proyecto 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 en bottom.pdl. La función para salir puede ser: • DeactivateRTProject(); Sale del runtime de WinCC • DMExitWinCCEx (DM_SDMODE_SYSTEM); sale de Windows y apaga el ordenador. • DMExitWinCCEx (DM_SDMODE_REBOOT); sale de Windows y reinicia el ordenador. Como este es un proyecto serio (jeje), pondremos en el botón de exit, que se encuentra n la biblioteca, y le asociamos la función DMExitWinCCEx (DM_SDMODE_SYSTEM). 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 de wincc” y otro como “apagar el ordenador”. Les ponemos un automatic logout, para que si no se desactivan ellos, los desactive el sistema pasados x minutos. Bien, ya tenemos nuestros usuarios, queda asignar el nivel de protección al botón de salir de la picture start.pdl. Volvemos a ella, y en la propiedad miscelaneous- >authorization seleccionamos apagar el ordenador. Ahora ya no podrá salir del wincc cualquiera, sino solo los que tengan el privilegio de apagar el ordenador, y cuando se logen y pulsen el botón se apagará el ordenador automáticamente. Página 3/10
  • 4. Comenzar un proyecto Pero: ¿cómo se logan3 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 logout (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 cagao, 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 colocaremos un botón en la picture 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 actino: #pragma code("useadmin.dll") #include "PWRT_api.h" #pragma code() long pepe; pepe=strcmp(GetTagCharWait("@CurrentUser"),""); printf("pepe: %d",pepe); if(pepe) { PWRTLogout(); } else 3 Logarse: darse de alta en un sistema protegido, introduciendo tu nombre y tu password. Página 4/10
  • 5. Comenzar un proyecto { PWRTLogin('c'); } Con esta función te logas y deslogas con el mismo botón (ha sido fácil, eh?). Para acabar de rematar la faena, pondremos en top.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("D:SIEMENSWINCCBINPASSCS.EXE"); 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. Realizando nuestra primera picture Ya estamos en condiciones de comenzar nuestra primera picture. Hasta ahora, todo lo hemos hecho en start.pdl. Vamos a utilizarla como plantilla para las demás pictures que generemos (también puede guardarla como plantilla.pdl, y a partir de entonces, en vez de hacer una nueva picture, abres la plantilla,pdl y la guardas con otro nombre. La primera picture la llamaremos Tuberías.pdl, y lo primero que tendremos que hacer es llamarla desde nuestra ventana start.pdl. Lo haremos poniendo un boton en top.pdl, pero atención, si no llamamos a la picture tuberías mediante la función openpicture de C, sino a través de la ventana configuration dialog, no nos funcionará el salto, ya que estamos realizando la llamada desde un botón que está incrustado en una picture window. Por lo tanto, lo que haremos será poner nuestro botón, y en el evento mouse actino colocaremos la instrucción: OpenPicture("tuberias.PDL"); //Return-Type :void Ya tenemos el botón para entrar. Ahora necesitamos un botón para volver a la página principal. Pondremos en la picture top.pdl una imagen a la derecha con el logo de la empresa. Cuando se pinche en el logo, saltaremos a la página inicial con la instrucción: OpenPicture("start.PDL"); //Return-Type :void Página 5/10
  • 6. Comenzar un proyecto Comenzaremos con una simple válvula, que sacaremos de la biblioteca de WinCC. Con la versión 5.0 se ha añadido una librería muy interesante de objetos dentro de Simatic HMI symbols library 1.2. Dentro de la carpeta valves disponemos de una válvula como la figura: Vamos a generar tres variables, todas unsigned 32 bits. En la picture, colocamos tres I/O box asociadas a estas tres variables. La primera de ellas será estados_válvulas, y contendrá el estado actual (en marcha o parada) de 32 válvulas. La segunda será alarmas_válvulas, y la tercera manual_válvulas (manual válvulas indica si la válvula se encuentra gobernada en manual o en automático). ¿Qué buscamos?. Simplemente visualizar el estado de una válvula, pero sin utilizar una variable para cada estado, sino con 3 variables poder, consultando los bits de que consta la doble palabra, disponer de 32 . Volvemos a las propiedades de la válvula que hemos colocado al principio desde la librería. La variable symbolapperance nos indicará si la válvula se encuentra en marcha o parada. La variable blinkmode nos indicará si tiene alarma, mientras que la de forecolor si está en manual o automático. Página 6/10
  • 7. Comenzar un proyecto Veamos que colocaremos en symbolapperance: En la propiedad blinkmode realizaremos el siguiente dinamyc dialog: Y por último, para la propiedad forecolor realizaremos un dinamyc dialog que nos identifique cuando la válvula está en manual y cuando en automático. Página 7/10
  • 8. Comenzar un proyecto Con esto tenemos solventado el tema de una válvula. Vamos a dibujarnos unas cuantas mas, junto con alguna que otra tubería (todas salen de la biblioteca anteriormente mencionada). Página 8/10
  • 9. Comenzar un proyecto El problema viene en el momento queremos colorear la tubería señalada con una flecha en la imagen. ¿Por qué?. Fácil, porque depende de tres válvulas. Por lo tanto no debe de colorearse cuando esté un bit, sino tres. Para ello, necesitaremos realizar una pequeña instrucción en C, que nos devolverá un valor entre 0 a 1. En lugar de utilizar un dinamic dialog, en el evento symbolapperance asociamos una función C como la siguiente: long valor1,valor2,valor3,resultado; double var1,var2,var3; var1=GetTagDWordWait("estados_valvulas"); valor1=var1 && 2; valor2=var1 && 4; valor3=var1 && 8; if (valor1 | valor2 | valor3) resultado=1; else resultado=0; return(resultado); Como podemos ver, esta función devuelve un 1 si se activa el bit 1, el 2 o el 3 de la doble palabra estados_válvulas. Aunque esta función se ejecuta correctamente, sería mejor no hacer este tipo de “cosas”4 en el scada, y utilizar una marca en el plc para las tuberías, con lo que no haría falta consultar esta función de C sino realizar una asignación como se hizo en la válvula inicial. Bien con todo esto hemos aprendido: • A entrar y salir del wincc de manera decente. • A controlar quien se nos activa y quien no en el sistema, para poder echarle la culpa a alguien de que las cosas no van bien. • A animar algo los objetos para que se muevan algo mas que epi y blas en una cama de velcro. 4 Léase cochinadas, marranadas y demás porquerías que se programan en un plc. Página 9/10
  • 10. Comenzar un proyecto Saber en que picture estamos. Mas adelante vamos a realizar muchas pantallas, a cual mas cutre, pero no por ello pantallas. Es muy interesante que sepamos en cual estamos en cada momento. Ahora es fácil, pero cuando el proyecto posee 50, recordar el nombre la que estamos en ese momento se vuelve tarea vergonzosa, porque siempre se oye la voz maliciosa “¿pero no lo habías hecho tu?” cuando buscas desesperadamente la picture en el graphics designer. La solución está en poner el nombre de la picture actual en la pantalla, de tal manera que encontrarla luego para modificarla sea muy sencillo. Claro, esto además tiene la ventaja de que te corrije esa tendencia escatológica a llamar a las cosas cuando se está desarrollando caca o pedo o mierda, o cosas peores, que luego aflorar una vez el proyecto está acabado. Como se hace esto es muy sencillo, siempre que lo hagas al principio del proyecto. Luego es mas complejo porque habrá que modificar todas las pictures. Hay dos maneras, una fácil y mala y otra algo mas compleja y buena (como todo en la vida). Vamos con la mala: Abrimos la picture top.pdl. Colocamos a la derecha de la I/O de user_actual, un texto que en su propiedad font->text tendrá el siguiente código C: return(GetParentPicture(lpszPictureName)); //Return-Type :char* Lo que hacemos en realidad es asignarle a dicho texto no el nombre de la picture en la que está, que evidentemente siempre será top.pdl, sino el nombre de la ventana padre en la cual e aloja top.pdl, que según estemos en una será una, y en otra será otra. Que fácil, ¿no?. Pues no. El problema radica en que esta comprobación del nombre de la ventana padre lo controlas, porque observa cuando hagas el código C que arriba tienes un trigger, que debes poner a uno o dos segundos. Pero es un poco tonto perder tiempo en chequear de manera cíclica si has cambiado de pantalla, sobre todo porque el que cambia eres tu, y dispones en le sistema de ese evento. Estamos cargando al sistema de una tarea que no es necesaria, ya que solo queremos que cambie el nombre en dicho texto cuando cambiemos de pantalla, no cada un segundo. Vamos pues con la solución buena. Consiste en la picture plantilla colocarse en el evento open picture el siguiente código: SetTagCharWait("PANTALLA_ACTUAL",lpszPictureName); Con esto copiamos el nombre de la pantalla actual a una variable interna, que hemos definido previamente, pantalla_actual, y que es de tipo texto de 8 bits. Ya solo tenemos que asociar en top.pdl al texto anterior, en la propiedad font->text la variable pantalla_actual con trigger upon change. Claro está, las pantallas que hemos hecho ya, como son start y planta deneremos de ponerle el mismo código en el evento open picture que ha plantilla. Pero a partir de ahora ya no será necesario, porque todas las pictures las vamos a sacar de plantilla. A mi me gusta mas la segunda opción, pero tu mismo, te doy las dos. n el siguiente capítulo vamos a hacer algo que nos sale muy bien: generar alarmas, pero esta vez no entre los que nos rodean, sino dentro del WinCC. Página 10/10