W&T conecta
Interfaces para TCP/IP, Ethernet, RS-232, RS-485, USB, 20mA, fibra óptica de vidrio y de plástico, http, SNMP, OPC, Modbus TCP, I/O digital, I/O analógico, ISA, PCI

Aplicación al Web-IO digital:

Conexión automática con VBScript y Batch-Jobs


En tareas de conexión pequeñas abundantes no merece la pena crear un software especial de aplicación o comprar herramientas complicadas de automatización. Es suficiente con arrancar el proceso deseado de conexión con un chasquido en el icono o entrando un comando. Con el Web-IO Digital y pequeñas VBScripts se pueden realizar tales soluciones con pocas líneas de órdenes.

Conmutación automática con VBScript

VBScript es un idioma de interpretación fácil de programar, que es apoyado de manera estándar por Windows 2000, XP y Vista. Tal y como hace suponer el nombre (Visual Basic Script), la sintaxis de VBScript está orientada a la de Visual Basic. No es necesario un ambiente especial de desarrollo para la creación de VBScripts- es suficiente un editor de texto. Se recomienda el Editor gratis PSPAD (www.pspad.com), que posee una acentuación de la sintaxis para VBScript. Al salvar VBScripts se utiliza el sufijo de archivo ".vbs".

Los ejemplos descritos a continuación muestran la relación entre VBScript y Web-IO.

¿No tiene todavía un Web-IO® y quiere probar el ejemplo presentado?

No hay problema: Le ponemos a disposición el Web-IO Digital 2xInput, 2xOutput gratis durante 30 días. Rellene sencillamente un pedido muestra y le enviaremos el Web-IO para probar a cuenta abierta. Si nos devuelve el aparato dentro de los 30 días, le abonamos la factura completa.

Al pedido muestra

Preparativos

Ya ha abastecido su Web-IO Digital

1. Poner un Output con VBScript

La escritura siguiente pone al llamarla un Output 0 del Web-IO con la dirección IP 10.40.22.101.


							' VB Script Document
							option explicit

							Dim objHttp
							Set objHttp = WScript.CreateObject("WinHttp.WinHttpRequest.5.1")
							If objHttp Is Nothing Then Set objHttp = WScript.CreateObject("WinHttp.WinHttpRequest")
							objHttp.Option(4) = 256 + 512 + 4096 + 8192
							objHttp.SetTimeouts 0, 5000, 10000, 10000
							objHttp.Open "GET", "http://10.40.22.101/outputaccess0?PW=&State=ON&",
							FALSE
							objHttp.setRequestHeader "User-Agent",
							WScript.ScriptName
							objHttp.Send ""
							If Not (objHttp.statusText = "OK")
							Then
								WScript.Echo "Error: " & objHttp.statusText
								WScript.Quit 1
							Else
								WScript.Echo objHttp.ResponseText
							End If
						

El núcleo de esta escritura es el objeto WinHttp, que se usa para enviar órdenes al Web-IO. La entrega propia de orden tiene lugar con objHttp.Open.

http://10.40.22.101/outputaccess0?PW=&State=ON& determina que el Output 0 de Web-IO 10.40.22.101 debe pasar al estado ON

Con objHttp.ResponseText se lee la respuesta del Web-IO. En el caso del comando outputaccess el Web-IO devuelve un string compuesto de la palabra output, de un punto y coma y del estado de Output.

Ejemplo output;1

Una descripción detallada de los posibles comandos Web-IO la encontrará en las instrucciones al Web-IO a partir de la página 102.

2. Llamar VBScripts de Batch-Jobs

Batch-Jobs en Windows fueron pensados en un principio para llamar automáticamente comandos Windows. Un ejemplo clásico es también Autoexec.bat en ambientes viejos DOS. En el archivo Batch se introduce una lista con órdenes que al llamarla se procesan consecutivamente.

En sistemas Windows pueden automatizarse así también Scripts y llamadas de programa. Si p. ej. se deben conectar Outputs de diferentes Web-IOs con una sola llamada, también se puede realizar con un Batch-Job.

Los nombres correspondientes de las VBScripts tienen que escribirse uno debajo de otro en el archivo Batch. En Scripts como el indicado arriba, es necesario crear una escritura propia para cada tarea de conexión.

Precisamente en Batch-Jobs es más conveniente crear una escritura de uso universal, que se entrega al llamarla a través de parámetros adicionales, tal como parece la tarea de conexión. En la VBScritp mostrada a continuación pueden entregarse estos parámetros al llamarla:

IP Dirección IP del Web-IO
PORT Puerto TCP del Web-IO Este parámetro es opcional; si no se entrega la escritura utiliza el puerto 80
PW Contraseña del administrador o del operador del Web-IO Este parámetro es opcional; si no se entrega la escritura trabaja sin contraseña
MASK indica en escritura hexadecimal qué Outputs deben ponerse Este parámetro es opcional; si no se entrega la escritura trabaja con todos los Outputs
STATE indica en escritura hexadecimal en qué estado deben ponerse los Outputs

La llamada de la escritura tiene este aspecto:

setoutput.vbs IP=<IP address> [PORT=<portno.>] [PASSWORD=<password>] [MASK=<hex value>] STATE=<hex value>

								' VB Script Document
								option explicit

								Dim objArgs, strArg, strArgall
								Dim IP, PORT, PASSWORD, MASK, STATE, URLStr
								Dim objHttp
								Set objArgs = WScript.Arguments

								'# Make sure that script starts as console application (best way "cscript //h:cscript")
								Dim WshShell : Set WshShell = WScript.CreateObject("WScript.Shell")
								If Right(WScript.FullName, Len(WScript.Fullname) - Len(WScript.Path) -1) _ = "WScript.exe"
								Then
								For each strArg in objArgs
									strArgall = strArgall & " " & strArg
								next
								WshShell.Run "cmd /k cscript " & Chr(34) & WScript.ScriptFullName _ & Chr(34) & strArgall
								WScript.Quit
								End If

								'# Check if there are Parameters
								If WScript.Arguments.count < 1 Then
								WScript.Echo "***********************************"
								WScript.Echo "* Not enough arguments *"
								WScript.Echo "***********************************"
								WScript.Echo ""
								WScript.Echo "Syntyx: setoutput.vbs
								IP=<IP address> [PORT=<portno.>] _

								[PASSWORD=<password>] [MASK=<hex value>] STATE=<hex value>"
								WScript.Quit
								End If

								'# Read the Parameters
								for each strArg in objArgs
								If Left(strArg,3) = "IP="
								then
									IP = Mid(strArg, 4, Len(strArg) - 3)
								End If

								If Left(strArg,5) = "PORT="
								then
									PORT = Mid(strArg, 6, Len(strArg) - 5)
								End If

								If Left(strArg,9) = "PASSWORD="
								then
									PASSWORD = Mid(strArg, 10, Len(strArg) - 9)
								End If

								If Left(strArg,5) = "MASK="
								then
									MASK = Mid(strArg, 6, Len(strArg) - 5)
								End If

								If Left(strArg,6) = "STATE="
								then
									STATE = Mid(strArg, 7, Len(strArg) - 6)
								End If
								Next

								'# Mount the command String
								If IP <> ""
								then
								URLStr = "http://" & IP
								else
								WScript.Echo "***********************************"
								WScript.Echo "* Not enough arguments : IP *"
								WScript.Echo "***********************************"
								End If

								If PORT <> ""
								then
								URLStr = URLStr & ":" & PORT
								End If

								URLStr = URLStr & "/outputaccess?PW=" & PASSWORD & "&"

								If MASK <> ""
								then
								URLStr = URLStr & "Mask=" & MASK & "&"
								End If

								If STATE <> "" then
								URLStr = URLStr & "State=" & STATE & "&"
								else
								WScript.Echo "***********************************"
								WScript.Echo "*  Not
								enough arguments : STATE   *"
								WScript.Echo "***********************************"
								End If

								'# Send the Command String via HTTP object
								Set objHttp = WScript.CreateObject("WinHttp.WinHttpRequest.5.1")
								If objHttp Is Nothing Then Set objHttp = WScript.CreateObject("WinHttp.WinHttpRequest")
								objHttp.Option(4) = 256 + 512 + 4096 + 8192
								objHttp.SetTimeouts 0, 5000, 10000, 10000
								objHttp.Open "GET", URLStr,
								FALSE
								objHttp.setRequestHeader "User-Agent",
								WScript.ScriptName
								objHttp.Send ""
								If Not (objHttp.statusText = "OK")
								Then
								WScript.Echo "Error: "& objHttp.statusText
								WScript.Quit 1
								else
								WScript.Echo objHttp.ResponseText
							End If
						

Después de realizada la acción elegida, la escritura devuelve el estado de los Outputs.

p. ej. output:0100

El mesaje de estado se compone de la palabra output, de un punto y coma x del estado del Output en escritura hexadecimal.

CONSEJO: El Windows Scripting Host, existente en dos variantes en cualquier PC Windows, es responsable de ejecutar las VBScripts. Las dos variantes WScript y CScript se diferencian en primer lugar en el tipo de la entrega de datos. Si no está configurado de otra manera, se procesan las escrituras de WScript y se editan los mensajes de texto en una caja diálogo Windows. La desventaja de esto es que el usuario tiene que confirmar cada mensaje para que la escritura continúe. Este tipo de procesamiento es desfavorable para el uso en Batch-Jobs.

Entrando el comando wscrit //H:cscript se define CScript como escritura Host estándar. CScript edita todos los mensajes en una DOSBOX y no espera la confirmación.

La escritura arriba mostrada controla qué Scripthost está activo y se corta si está activa la WSript y se reinicia con la CScript.

A fin de que la escritura pueda trabajar más rápido, se recomienda cambiar en general a la CScript.

Otros ejemplos de programa para la programación del zócalo los encontrarán en las páginas de herramientas al Web-IO. Una descripción detallada sobre los comandos de los modelos Web-IO digitales la encontrará en el manual de referencia.

Descargar el programa ejemplo

¿No tiene todavía un Web-IO® y quiere probar el ejemplo presentado?

No hay problema: Le ponemos a disposición el Web-IO Digital 2xInput, 2xOutput gratis durante 30 días. Rellene sencillamente un pedido muestra y le enviaremos el Web-IO para probar a cuenta abierta. Si nos devuelve el aparato dentro de los 30 días, le abonamos la factura completa.

Al pedido muestra