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:

Dirigir y supervisar Web-IO digital con Visual Basic

Visualizar, controlar y dirigir


Como idioma fácil de aprender Visual Basic ofrece todo lo que es necesario para programar aplicaciones TCP/IP. Con ello Visual Basic es también un auxiliar apreciado para crear aplicaciones que comunican con el Web-IO digital. No se necesitan excitadores o DLLs adicionales.

Dirigir con Visual Basic

Con el ejemplo siguiente de programa puede representar su Web-IO Digital con sus Inputs y Outputs en una aplicación Windows. Además de ello puede conmutar los Outputs del 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

Recopilación de los diferentes elementos de manejo y objetos de visualización en formulario VB

Elementos de manejo Visual Basic

Al denominar cada uno de los objetos, es de gran ayuda usar nombres con sentido. En este ejemplo la primera parte del nombre describe la clase de objeto y la segunda la función.

1. Arranque de programa

Instalar los elementos de manejo

El grupo con los elementos de manejo para el Web-IO se bloquea primero para el manejo. En la línea de estado se visualiza que aún no hay conexión alguna.

							 Private Sub Form_Load()
							fr_io.Enabled = False
							bt_disconnect.Enabled = False
							StatusBar1.SimpleText = "No Connection"
							End Sub
						

2. El control de conexión

Introducir la conexión

La conexión se arranca entrando la dirección IP del Web-IO en el campo de texto ed_ip y chasqueando el botón bt_connect.

							 Private Sub bt_connect_Click()
							If ed_ip.Text <> "" Then
							winsock1.RemoteHost = ed_ip.Text
							winsock1.RemotePort = Val(ed_port.Text)
							winsock1.Connect
							End If
							End Sub
						
La conexión

Para tramitar el manejo TCP/IP se utiliza el elemento de mando Winsock de Visual Basic. Este elemento de mando permite prefijar e iniciar procedimientos al aparecer diversos estados de conexión.

Se establece la conexión

Tan pronto como el Web-IO acepta la conexión, el elemento de mando Winsock ejecuta el procedimiento correspondiente. En la línea de estado aparece la realización de la conexión, los elementos de manejo se liberan para el uso y puede manejarse el botón Disconnect. El botón Connect se bloquea para el manejo.

							 Private Sub winsock1_Connect()
							fr_io.Enabled = True
							bt_disconnect.Enabled = True
							bt_connect.Enabled = False
							StatusBar1.SimpleText = "Connected to " + ed_ip.Text
							End Sub
						
Separar la conexión

La conexión permanece tanto tiempo hasta que el usuario la finalice chasqueando el botón Disconnect o el Web-IO finalice la conexión.

							 Private Sub bt_disconnect_Click()
							winsock1.Close
							fr_io.Enabled = False
							bt_disconnect.Enabled = False
							bt_connect.Enabled = True
							StatusBar1.SimpleText = "No Connection"
							End Sub
						

En este caso el elemento de mando Winsock también llama un procedimiento correspondiente

							 Private Sub winsock1_Close()
							fr_io.Enabled = False
							bt_disconnect.Enabled = False
							bt_connect.Enabled = True
							StatusBar1.SimpleText = "No Connection"
							winsock1.Close
							End Sub
						
Error de conexión

En el caso de un error de conexión el elemento de mando Winsock también ejecuta un correspondiente procedimiento, que corresponde en general al del Disconnect. En la línea de estado se visualiza adicionalmente el número de error Winsock.

							 Private Sub winsock1_Error(ByVal Number As Integer, Description
							As String, _
							ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String,
							_
							
						
							ByVal HelpContext As Long, CancelDisplay As Boolean)
							fr_io.Enabled = False
							bt_disconnect.Enabled = False
							bt_connect.Enabled = True
							StatusBar1.SimpleText = "ERROR " + Str(Number) + " : " + Description
							winsock1.Close
							End Sub
						

3. Manejo y comunicación por parte del cliente

Tan pronto como se ha establecido la conexión con el Web-IO, el usuario puede enviar comandos al Web-IO manejando los correspondientes elementos de programa.

Poner Outputs
El usuario puede poner los Outputs a través de dos casillas de verificación cb_outputx. El programa utiliza para ello el suceso de MouseUP de este objeto. Si se registra un Mouse Up, es decir soltar la casilla de verificación Output, el programa realiza el correspondiente procedimiento y transmite el adecuado comando al Web-IO - según si está puesta la casilla o no.

						 Private Sub cb_output_MouseUp(Index As Integer, Button As Integer, _
						
					
						Shift As Integer, X As Single, Y As Single)
						If cb_output(Index).Value Then
							winsock1.SendData ("GET /outputaccess" + Trim(Str(Index)) + _
							"?PW=" + ed_password.Text + "&State=ON&")
							Else
							winsock1.SendData ("GET /outputaccess" + Trim(Str(Index)) + _
							"?PW=" + ed_password.Text + "&State=OFF&")
						End If
						End Sub
					

Solicitar estado de Output/Input
El usuario puede solicitar el estado de los Outputs e Inputs chasqueando el botón correspondiente.

						
							Private Sub bt_outputs_read_Click()
								winsock1.SendData ("GET /output?PW=" + ed_password.Text + "&")
							End Sub
						
					
						
						Private Sub bt_inputs_read_Click()
							winsock1.SendData ("GET /input?PW=" + ed_password.Text + "&")
						End Sub
					

Preguntar/borrar contadores
También se pueden preguntar o borrar los estados de contador de los input-Counter.

						 Private Sub bt_counter_read_Click(Index As Integer)
							winsock1.SendData ("GET /counter" + Trim(Str(Index)) + _
							"?PW=" + ed_password.Text + "&")
						End Sub
						
					
						
							Private Sub ed_counter_clear_Click(Index As Integer)
								winsock1.SendData ("GET /counterclear" + Trim(Str(Index)) + _
								"?PW=" + ed_password.Text + "&")
							End Sub
						
					

Naturalmente también se pueden leer o borrar al mismo tiempo todos los contadores.

						
							Private Sub cb_counter_readall_Click()
								winsock1.SendData ("GET /counter?PW=" + ed_password.Text + "&")
							End Sub
						
					
						
							Private Sub cb_counter_clearall_Click()
								winsock1.SendData ("GET /counterclear?PW=" + ed_password.Text + "&")
							End Sub
						
					

4. Recepción de datos del Web-IO

Evaluar e indicar los datos recibidos
Todos los comandos y solicitudes al Web-IO se confirman con un String de respuesta. Aquí las respuestas presentan una estructura específica según el tipo.

Para los Outputs: output;<valor binario del estado de salida en formato hexadecimal>
Para los Inputs: input;<valor binario del estado de salida en formato hexadecimal>
Para los contadores: counterx;<estado decimal de contador >
o counter;<estado decimal de contador 0 >; <estado decimal de contador 0 >; ...... si todos los contadores se deben leer de una sola vez.
Todos los Strings de respuesta se finalizan con un Byte 0.

Si el elemento de mando Winsock recibe datos, éste llama al procedimiento correspondiente.

						
							Private Sub winsock1_DataArrival(ByVal bytesTotal As Long)
								Dim receivestring As String
								winsock1.GetData receivestring
								Select Case Left(receivestring, 1)
								Case "i"
								If (Val(Mid(receivestring, 7, 1)) And 1) = 1 Then
									cb_input(0).Value = 1
								Else
									cb_input(0).Value = 0
								End If
								If (Val(Mid(receivestring, 7, 1)) And 2) = 2 Then
									cb_input(1).Value = 1
								Else
									cb_input(1).Value = 0
								End If
								Case "o"
								If (Val(Mid(receivestring, 8, 1)) And 1) = 1 Then
									cb_output(0).Value = 1
								Else
									cb_output(0).Value = 0
								End If
								If (Val(Mid(receivestring, 8, 1)) And 2) = 2 Then
									cb_output(1).Value = 1
								Else
									cb_output(1).Value = 0
								End If
								Case "c"
								Dim tabpos
									If Mid(receivestring, 8, 1) = "0" Then
									ed_counter(0).Text = Mid(receivestring, 10, Len(receivestring) - 10)
									End If
									If Mid(receivestring, 8, 1) = "1" Then
									ed_counter(1).Text = Mid(receivestring, 10, Len(receivestring) - 10)
									End If
									If Mid(receivestring, 8, 1) = ";" Then
									tabpos = InStr(9,receivestring, ";")
									ed_counter(0).Text = Mid(receivestring,9, tabpos - 9)
									ed_counter(1).Text = Mid(receivestring,tabpos + 1, _
									Len(receivestring) - tabpos - 1)
								End If
								End Select
							End Sub
						
					

El procedimiento de recepción verifica según el primer signo de los datos de recepción, si se trata de un Input, Output o de mensajes del contador. Dependiendo de ello se constata p. ej. qué Output tiene qué estado. En los contadores es posible tanto preguntar valores de contador separados como también leer todos los contadores de un viaje. Cada uno de los estados de contador se emiten decimalmente separados por punto y coma en una cadena (String).

5. Polling

Solicitud cíclica de determinados valores
A fin de posibilitar una actualización automática de la indicación, se utiliza un Timer. Dependiendo de las casillas de verificación para el Polling de Output, Input y Counter se llaman las informaciones correspondientes a un intervalo ajustado del Web-IO.

						
							Private Sub timer_polling_Timer()
								If winsock1.State = sckConnected Then
								If cb_output_polling.Value Then
									winsock1.SendData ("GET /output?PW="+ ed_password.Text + "&")
								End If
								If cb_input_polling.Value Then
									winsock1.SendData ("GET /input?PW="+ ed_password.Text + "&")
								End If
								If cb_counter_polling.Value Then
									winsock1.SendData ("GET /counter?PW="+ ed_password.Text + "&")
								End If
								End If
							End Sub
						
					

El intervalo deseado puede entrarse en el campo correspondiente de texto. En caso de un cambio el intervalo del Timer se adapta automáticamente.

						
							Private Sub ed_interval_Change()
								timer_polling.Interval = Val(ed_interval)
							End Sub
						
					

Naturalmente, también se puede configurar el Web-IO de tal modo que envíe de por si mismo mensajes al programa si cambia algo en uno de los Inputs.

El programa ejemplo asiste todas las funciones corrientes del Web-IO en el modo String de comando, optimado para el Web-IO 2x entradas digitales, 2x salidas digitales. Para los otros modelos Web-IO tienen que realizarse en caso necesario adaptaciones en el programa. 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 de la interfaz del zócalo de los modelos Web-IO digitales la encontrarán 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