WinCC - GetTagRaw / SetTagRaw en VBScript

Primero de todo un poco de literatura... Variable de datos sin formato, este tipo de datos, valga la redundancia para el Driver 1200-1500 con la versión de WinCC 7.3 no estaba disponible, a partir de la versión v7.4 esta disponible para los PLC 1200/1500.

Si leemos la documentación de este tipo de datos, observamos que necesitamos las funciones GetTagRaw / SetTagRaw en el Global Script, tambien habría que añadir las funciones GetTagRawWait / SetTagRawWait.

Pero nosotros vamos a ver como podemos utilizar estas funciones pero en VBScript, que teoricamente no hay ninguna función disponible que conste en la documentación.

Vamos a por el ejemplo... Si quieres ver un ejemplo de GetTagRaw mira aquí.

 

Tenemos un Array de Bytes, en este caso de 10 elementos, que es un código de Barras, como se puede observar esta en el DB300 y el primer elemento es la direccion DBB28

 

Ahora vamos al WinCC, y vamos a crear una nueva variable , como puede observarse es del tipo de datos sin formato.

 

Y en la dirección especificamos, Nº del DB (300) dirección del primer elemento, como hemos visto el 28 y posteriormente la longitud de Bytes que consta nuestra variable, en mi ejemplo son 10 Bytes.

Con esto ya hemos configurado nuestra variable.

 

Ahora vamos a ver, como podemos LEER esta variable con VBScript:

1.- Creamos las variables internas.

2.- Creamos una instancia de nuestra variable [Set QR = HMIRuntime.Tags("NombreVariable")]

3.- Vamos ha realizar una Lectura Síncrona de la variable [QR.Read(1)] , para hacer una lectura Síncrona hay que especificar el (1) y la asignamos a la variable MyArray

4.- Posteriormente, si hemos realizado una lectura correcta, vamos a tener un QualityCode de 128.

5.- Si la lectura ha sido correcta, vamos a comprobar que la variable MyArray, es precisamente un Array con la función IsArray, si es correcto, ya podemos manipular los datos como nos interese... yo para el ejemplo los voy a sacar por pantalla.

 

Para realizar una ESCRITURA vamos a proceder de forma similar, es decir , vamos a realizar una lectura para comprobar que es correcto y posteriormente vamos a escribir, para crear el array utilizamos la funcion Split, donde vamos a crear un Array a partir de la variable NuevoValor, utilizando como delimitador #. Aquí hay que adaptarlo a las necesidades del programa.

Posteriormente vamos a realizar una Escritura Sincrona, a la hora de realizar la escritura la sintaxis es:

QR.Write ValorDeLaVariable , 1

 

Pues vamos a pasar al Runtime y vamos a comprobar el funcionamiento. Primero de todo he ejecutado la funcion de escribir, y posteriormente he ejecutado la lectura y podemos observar, que funciona correctamente.

 

Y si comprobamos en el Administrador de Variables, observamos que el Quality Code es correcto y obsevamos el valor perfectamente.

 

Y para finalizar, comprobamos en el PLC y perfecto.

 

Como conclusión si tenemos que utilizar por cualquier motivo en VBScript la lectura/escritura de una variable sin formato, lo podemos realizar y funciona correctamente, ya con la versión de WinCC v7.0 SP3 y con un S7-300 ya funcionaba perfectamente y con el 1200/1500 funciona perfecto. No obstante, si se puede realizar en ANSI C, habría que realizarlo, ya que es lo que la documentación oficial especifica.

Como nota importante, es que debemos realizar tanto la lectura como la escritura de forma Sincrona

21 de Enero del 2018

"La gratitud en silencio no sirve a nadie". Gladys Bronwyn Stern