VBScript en WinCC V.7

La siguiente práctica se trata de sacarle rendimiento a VB Script en WinCC V.7  para darle solución a los nuevos requerimientos para la modificación de un  sistema de recetas ya implementado.

La modificación trata de lo siguiente:

Un ejemplo de una receta producida por el programa "RECIPES" seria la siguiente imagen, ahora bien, si analizamos podemos observar que la receta tiene un código y su nombre en la primera linea, a continuación, los ingredientes referenciados con su código seguido del peso.

Según las indicaciones nuestro programa tiene que ser capaz de diferenciar entre ingredientes/componentes mayores y menores, su diferencia es la siguiente, los mayores son los que se introducen directamente a nuestro sistema Scada y no permite posible manipulación de datos, son los que se van a introducir su peso como setPoint en las diferentes tolvas, actualmente hay 9 tolvas para ingredientes mayores.

Los ingredientes menores son los que se van a dosificar manualmente, con lo cual de los 20 ingredientes que consta nuestra receta tenemos que diferenciarlos, como lo vamos a realizar. He creado una base de datos en el Sistema Gestor de Bases de Datos SQL Server 2005, prerequisito para la instalación de WinCC, con lo cual vamos a hacer uso de ella,  hay una tabla dedicada a los ingredientes y que consta de los siguientes campos

En esta tabla será un requisito tener todos los ingredientes, ya con en el campo IngredienteTolva, haremos la diferencia entre ingrediente mayor o menor.

Volviendo al archivo *.txt excepto la primera y última linea, siempre se sigue el mismo patrón, y lo que mas adelante vamos ha hacer es extraer de la primera linea el código de la receta y su nombre, de las demás, extraeremos el código del ingrediente y el peso, de cada ingrediente tendremos que hacer una consulta a la base de datos para saber si está registrado y si es así, saber si es un ingrediente considerado de los Mayores o menores.

A su vez como tenemos 20 Ingredientes, tendremos que ordenarlos, los nueve primeros serán los que van directamente a la tolva y los restantes son los Menores, pero estó será en una segunda parte para no extenderse demasiado en está.

Vamos a empezar a ver la configuración y programación que hemos realizado, lo primero que vamos a ver son las variables que hemos creado, consiste en dos partes, he creado una nueva estructura para tener los datos de una tolva, como es el código de la tolva, el peso del producto o el porcentaje,  a su vez unas variables internas para dar de alta un nuevo ingrediente.

Retomanto los requisitos, la receta se pasara al PC donde esta el WinCC a través de un dispositivo extraible, esto nos obliga ha realizar una primera función para obtener la ruta donde esta el archivo y el nombre del mismo, debo decir, que esta parte realizarla en VB Script me ha costado buscar bastante información y he encontrado la solución en el siguiente blog

El programa esta estructurado de la siguiente manera, todo lo que es posible realizarlo en funciones o prodecimientos se hara así y luego reutilizaremos estas funciones, procedimientos con sus respectivas llamadas, aquí la llamada a la fúncion para seleccionar la ruta del archivo.

Y una vez seleccionado el archivo, tenemos guardada la ruta en la variable ruta, siguiendo con el código, una primera parte es crear una instancia de un Objeto del tipo FileSystemObject y abrir nuestro archivo para lectura, una vez abierto lo que vamos ha hacer es un bucle Do Until objText.File.AtEndOfStream para recorrerlo.

Cada linea que leemos, la guardamos en una variable, a su vez el contenido de la linea lo vamos a guardar en un array (arrList) haciendo uso de la función Split , cada "," que encontremos en nuestra linea será el delimitador para cada elemento del array, el ejemplo de la primera linea seria el siguiente:

strNextLine =" ""F"",""005062"","" "",""RECETA_TEST"",""082611"""

arrList(0)=" ""F"" ; arrList(1)=""005062"" ; arrList(2)="" "" ; arrList(3)=""RECETA_TEST"" ; arrList(4)=""082611"""

El condicional If firtline = 0 lo uso solo para obtener los datos de esta primera linea y en el resto del bucle aquí no vuelvo a entrar, ya que cambio el estado de la variable firtline a 1, esto quiere decir que para el resto de lineas entraremos en el else

Una vez que hemos entrado en el else, un ejemplo de la lectura de una linea seria el siguiente:

strNextLine =" ""I"",""000038"",""04529.500"""

arrList(0)=" ""I"" ; arrList(1)=""000038"" ; arrList(2)=""04529.500""" ;

Aqui vamos a hacer un bucle For para recorrer el array empezando por el indice 1 que este seria el codigo de nuestro ingrediente, como el arrList solo tiene 2 elementos contando el 0 y hemos empezado por el 1 solo nos queda otro elemento, de hay que con el siguiente condicional if i= 1 leeremos el codigo y con su else leeremos el peso/proporcion.

Aquí tenemos la llamada a otra función SearchIngredientes(xxx) , esta función lo que va ha realizar es comprobar si el codigo esta registrado en la base de datos, su resultado lo obtendremos en la variable result que utilizaremos posteriormente.

Aqui nuestra función SearchIngredientes pasandole como argumentos el codigo a buscar, que es lo que puede pasar? que esté registrado o no, pero sino está vamos a dar la posibilidad de ingresarlo si el operario selecciona que si.

Ahora seguimos con el código principal, y obtenemos el resultado de la función en la variable result, y entramos en otro condicional para cubrir todas la posibilidades que pueden ser:

Lo vamos a registrar result = 6 hacemos visible una ventana de imagen donde esta un pequeño formulario y todos los valores que hemos guardado en las variable los volvemos a poner a 0 ya que no se puede cargar la receta hasta que este registrado el ingrediente y salimos de la función

si result = 7 el usuario no quiere registrar el ingrediente y volvemos a poner todos los valores a 0 y salimos de la función, por último si nuestro ingrediente si que está, entramos en el else, y en esté tenemos que saber si el ingrediente es de los considerados Mayores o Menores, para ir a la tolva o no, tenemos que hacer uso de la función OrderIngredients, el cual hará otra consulta a la base de datos para saber que tipo de ingrediente es, una vez que obtenemos su resultado, si es de los Mayores lo escribimos en la tolva correspondiente y a su vez en un array donde tenemos que guardar todos los ingredientes por orden para posteriormente imprimirlos, si es Menor, solamente se guarda en el array para imprimirlo.

La función OrderIngredients es la siguiente, y como resultado nos dara el "Verdadero" o "Falso"

Con todo esto hasta el momento hemos finalizado en el primer condicional if i= 1, hemos estado analizando el Codigo del Ingrediente, ahora pasamos al else que equivale al tercer y último elemento del arrList y es el Peso

Ahora vamos a ver en funcionamiento esta primera parte en un pequeño video, solo nos faltaria guardar esta receta en la base de datos para su posterior uso y poder imprimirla, pero eso lo haremos en la siguiente.

Cuando confirmamos querer dar de alta el nuevo ingrediente, la siguiente imagen seria el formulario, donde el campo de entrada/salida del codigo es solo de salida y obtenemos el codigo de la función principal. Un campo de entrada para introducir el nombre del ingrediente y un radiobutton para saber como procesarlo, si es considerado de los Mayores, será en automatico, de lo contrario en manual.

En el boton Agregar, tenemos el siguiente código:

13 de Mayo del 2013

Si te ha gustado o la información te ha sido útil, compartelo ...