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.
VBScript es un idioma de interpretación fácil de programar, que es apoyado de manera estándar por las versiones actuales de Windows. 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.
Preparativos
- Conectar la tensión para Web-IO y cablear las IO
- Conectar el Web-IO a la red
- Asignar direcciones de IP
En Web-IO, dentro de la sección Vías de comunicación >> Web-API activar la opción Permitir peticiones HTTP y habilitar las salidas a conmutar
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.