Para la creación de aplicaciones Windows, Visual C++ ha sido hasta hace poco una de las plataformas de desarrollo más utilizadas. Entre tanto trabajan cada vez más programadores con el .Net Framework y crean sus aplicaciones en C# (C Sharp).
Con el ejemplo siguiente de programa C# puede representar su Web-IO Digital con sus Inputs y Outputs en una aplicación Windows. Además de ello puede conectar 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.
dotado con una dirección IP - con WuTility no hay problemas
1. Recopilación de los diferentes elementos de manejo y objetos de visualización en formulario
2. Importar recursos y declaración de variables de miembros
En primer lugar se importan todas las clases necesarias para la conexión de red y la GUI(Graphical User Interface).
using
System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Net; using System.Net.Sockets; using System.Text;
A continuación se declaran los componentes de la aplicación y las variables importantes para una conexión TCP como variables de miembros de la clase, teniendo acceso así a los métodos de la clase.
Instalar los elementos de manejo El grupo con los elementos de manejo para el Web-IO se bloquea primero para el manejo. Tan pronto como se establezca una conexión, se da línea libre a todos los elementos, que poseen una versión conveniente.
El nombre del elemento respectivo de manejo se deriva del elemento mismo según el contexto. Los dos primeros signos del nombre significan el tipo del elemento (cb -> Checkbox, bt -> Button, gb -> Groupbox y tb-> TextBox).
Introducir la conexión Entrando la dirección IP del Web-IO en el campo de texto tb_IP y en el puerto 80 en el campo de texto tb_Port se puede establecer una conexión activando el botón bt_Connect. Si no se entra ninguna dirección IP o ningún puerto, se da un mensaje por la aplicación en la barra de estado.
La conexión Para poder establecer una conexión TCP se inicializa la variable ya declarada de zócalo. Aquí se le entrega un Stream y la clase de conexión. Además se crea una variable, que salva el puerto y la dirección IP.
Para que el programa pueda trabajar asincrónicamente, no espera a sucesos sino que trabaja con rutinas Callback. Se inicializan métodos Callback, si se arranca un proceso y se solicita, si llega a darse el suceso correspondiente, p. ej. al establecer la conexión, al enviar o al recibir.
private void bt_Connect_Click(object
sender, System.EventArgs e)
{ try
{ if((tb_IP.Text != "")
&& (tb_Port.Text == "80"))
{
client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipep = new
IPEndPoint(IPAddress.Parse(tb_IP.Text), int.Parse(tb_Port.Text));
client.BeginConnect(ipep,
new AsyncCallback(connectCallback), client);
} else
statusBar.Text = "IP
and Port needed!";
} catch(SocketException)
{ statusBar.Text = "Connection not possible!";
}
}
A continuación se representa la rutina Callback, que se llama al darse la conexión. Tras una conexión positiva se da línea libre a todos los elementos de manejo útiles de la aplicación y se desactiva el botón Connect. Además la aplicación comienza inmediatamente a pasar a disposición de recepción. Para ello se inicializa la rutina Callback "receiveCallback", que se explicará más abajo.
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. Después de pulsar el botón se emite un mensaje de que se va a finalizar la conexión.
Si se separa la conexión, tienen que colocarse de nuevo todos los elementos en la posición de partida. Entonces debe ser imposible pulsar el botón Disconnect.
gb_ioControlBox.Enabled = false; bt_Disconnect.Enabled = false; bt_Connect.Enabled = true; } catch(Exception) { statusBar.Text = "Not able to disconnect!";
}
}
Ahora se ha finalizado la conexión y la aplicación ha retrocedido a su estado de partida.
5. 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.
Al enviar una noticia al Web-IO se solicita una rutina Callback igual como al recibirla.
Poner Outputs Los Outputs del Web-IO pueden conectarse con ayuda de las dos cajas de chequeo cb_Output0 y cb_Output1. La caja de chequeo dispara una acción si se chasquea. Dependiendo de si la caja de chequeo ya está puesta, el Output se pone a On o a OFF.
Puesto que todos los estados de contador se pueden leer o reponer a cero con un sólo comando, tiene que implementarse todavía un método, que procese el string de respuesta del Web-IO y que asigne su estado específico a cada contador en la aplicación.
Todos los comandos y solicitudes al Web-IO se confirman con un String de respuesta. 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 un Output especial: outputx;<ON u OFF>
Para los Inputs: input;<valor binario del estado de salida en formato hexadecimal> Para un Input especial: inputx;<ON u OFF>
Después hay también el string de respuesta para un contador que tiene el siguiente aspecto.
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.
En nuestra aplicación se llama el método receiveCallback() para recibir una noticia tal. En este método se lee y procesa el string de respuesta. Lo importante de esta función es la llamada dirigida por el evento, que se da tan pronto como el Web-IO envíe datos a la aplicación.
Solicitud cíclica de determinados valores Es de desear que el estado de un sólo componente se actualice por mí mismo y así la aplicación siempre presente el estado actual. Para ello se utiliza un temporizador en este programa, que envía consultas al Web-IO cíclicamente en un intervalo de tiempo fijado por el usuario.
El intervalo de tiempo puede fijarse en el campo IDC_POLLINGTEXT.
Naturalmente también se captura en el caso de que el usuario realice una entrada absurda, como p. ej. un valor negativo de tiempo.
Para realizar ahora también la solicitud cíclica de los estados del Web-IO, lo que se llama también Polling, existe la elección entre el Polling de los Outputs, de los Inputs o de los contadores.
Se inicializa un temporizador propio por variante de Polling.
Si se activa la caja de chequeo cb_Polling_Outputs se aplica el Polling a los Outputs. Para ello se inicializa el temporizador correspondiente.
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.