Interfaces W&T
para TCP/IP, Ethernet, RS-232, RS-485, USB, 20mA
FO de vidrio y plástico, http, SNMP, OPC, I/O digital, I/O analógico ISA, PCI, ...?
      Productos
Home Contacto   Distribuidores por todo el mundo
Idiomas:
DE

US

ES

IT

RU
Medición de datos climáticos
Web-Termógrafo
WuTooth
Web-IO
Digital
Analógico
Espacial
Servidor de datos
Motherbox 2
pure.box 2
Memoria de red
Servidores Ethernet TCP/IP
Com-Server (serial)
Servidor USB
Interfaces serie
USB, RS232, RS485, 20mA
Aisladores & fibra óptica
USB, RS232, RS485, 20mA
Tarjetas PC
PCI Express, PCI y
Bus ISA
...
Interfaces de impresora
Accesorios
Descargas
Viejos
Cesta de compra Su cesta de compra

 
      Conocimientos técnicos
Libros, disertaciones, glosarios...
Información técnica básica
Aplicaciones a los Com-Servers,
Servidor USB
, Web-IO,
Termómetros Web,
Motherbox y pure.box
 
Aplicación al Web-IO digital:

Dirigir y supervisar Web-IO digital con Delphi




 Enlaces superiores: Resumen de productos Sinopsis de aplicaciones Versión para impresión


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

Dirigir Web-IO con Delphi

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   Al pedido muestra  

Preparativos
Ya ha abastecido su Web-IO Digital
1. Recopilación de los diferentes elementos de manejo y objetos de visualización en formato Delphi

Elementos de manejo Delphi

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.
procedure Twebio_ascii_client.FormCreate(Sender: TObject);
begin
  StatusBar1.SimpleText := 'No Connection';
  bt_disconnect.Enabled := False;
  gb_io.Enabled := False;
end;

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.
procedure Twebio_ascii_client.bt_connectClick(Sender: TObject);
begin
  if ed_ip.Text <> '' then
  begin
    ClientSocket1.Host := ed_ip.Text;
    ClientSocket1.Port := strtoint(ed_port.Text);
    ClientSocket1.Active := True;
  end;
end;
  • La conexión
    Para la tramitación del manejo TCP/IP la utiliza el elemento de mando CientSocket de Delphi.
    Este elemento de mando permite prefijar e iniciar procedimientos al aparecer diversos estados de conexión, como por ejemplo aquí para el ensayo de una conexión. El procedimiento registra un mensaje correspondiente en la línea de estado y desactiva el botón bt_connect, para que el usuario no pueda realizar ningún segundo intento de conexión, mientras funciona todavía el primero.
procedure Twebio_ascii_client.ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
  StatusBar1.SimpleText := 'Try to connect to ' + ed_ip.Text;
  bt_connect.Enabled := False;
end;
  • Se establece la conexión
    Tan pronto como el Web-IO acepta la conexión, el elemento de mando ClintSocket 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.
procedure Twebio_ascii_client.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
  StatusBar1.SimpleText := 'Connected to ' + ed_ip.Text;
  bt_disconnect.Enabled := True;
  gb_io.Enabled := True;
end;
  • 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.
procedure Twebio_ascii_client.bt_disconnectClick(Sender: TObject);
begin
  ClientSocket1.Active := False;
end;

 

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

procedure Twebio_ascii_client.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
  ClientSocket1.Active := False;
  StatusBar1.SimpleText := 'No Connection';
  bt_connect.Enabled := True;
  bt_disconnect.Enabled := False;
  gb_io.Enabled := False;
end;

 

  • Error de conexión
    En el caso de un error de conexión el elemento de mando ClientSocket 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 y el ErrorCode se pone finalmente a 0 para que no se dé un error de funcionamiento.
procedure Twebio_ascii_client.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
  ClientSocket1.Active := False;
  StatusBar1.SimpleText := 'Error ' + inttostr(ErrorCode) + ' - No Connection';
  ErrorCode := 0;
  bt_connect.Enabled := True;
  bt_disconnect.Enabled := False;
  gb_io.Enabled := False;
end;


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 caja de chequeo Output, el programa realiza el correspondiente procedimiento y transmite el adecuado comando al Web-IO - según si está puesta la casilla o no.
procedure Twebio_ascii_client.cb_outputMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if sender = cb_output0 then
    if cb_output0.Checked then
      ClientSocket1.Socket.
      SendText('GET /outputaccess0?PW=' + ed_password.Text + '&State=ON&')
    else
      ClientSocket1.Socket.
      SendText('GET /outputaccess0?PW=' + ed_password.Text + '&State=OFF&')
  else
    if cb_output1.Checked then
      ClientSocket1.Socket.
      SendText('GET /outputaccess1?PW=' + ed_password.Text + '&State=ON&')
    else 
      ClientSocket1.Socket.
      SendText('GET /outputaccess1?PW=' + ed_password.Text + '&State=OFF&');
end;
  • Solicitar estado de Output/Input
    El usuario puede solicitar el estado de los Outputs e Inputs chasqueando el botón correspondiente.
procedure Twebio_ascii_client.bt_outputs_readClick(Sender: TObject);
begin
  ClientSocket1.Socket.SendText('GET /output?PW=' + ed_password.Text + '&');
end;

procedure Twebio_ascii_client.bt_inputs_readClick(Sender: TObject);
begin
  ClientSocket1.Socket.SendText('GET /input?PW=' + ed_password.Text + '&');
end;
  • Preguntar/borrar contadores
    También se pueden preguntar o borrar los estados de contador de los Input-Counter.

procedure Twebio_ascii_client.bt_counter_readClick(Sender: TObject);
begin
  if sender = bt_counter_read0 then
    ClientSocket1.Socket.SendText('GET /counter0?PW=' + ed_password.Text + '&')
  else
    ClientSocket1.Socket.SendText('GET /counter1?PW=' + ed_password.Text + '&');
end;

procedure Twebio_ascii_client.bt_counter_clearClick(Sender: TObject);
begin
  if sender = bt_counter_clear0 then
    ClientSocket1.Socket.
    SendText('GET /counterclear0?PW=' + ed_password.Text + '&')
  else
    ClientSocket1.Socket.
    SendText('GET /counterclear1?PW=' + ed_password.Text + '&');
end;

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

procedure Twebio_ascii_client.bt_counter_readallClick(Sender: TObject);
begin
  ClientSocket1.Socket.SendText('GET /counter?PW=' + ed_password.Text + '&')
end;

procedure Twebio_ascii_client.bt_counter_clearallClick(Sender: TObject);
begin
  ClientSocket1.Socket.
  SendText('GET /counterclear?PW=' + ed_password.Text + '&')
end;


3. 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 ClientSocket recibe datos, éste llama al procedimiento correspondiente
procedure Twebio_ascii_client.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var ReceiveString : String;
    OutputValue : word;
    InputValue : word;
begin
  ReceiveString := ClientSocket1.Socket.ReceiveText;
  if Receivestring[1] = 'o' then
  begin
    OutputValue := HextoInt(copy(ReceiveString,
    pos(';',ReceiveString)+1,length(ReceiveString)-pos(';',ReceiveString)-1));
    if OutputValue and 1 = 1 then
      cb_output0.Checked := True
    else
      cb_output0.Checked := False;
    if OutputValue and 2 = 2 then
      cb_output1.Checked := True
    else
      cb_output1.Checked := False;
  end;
  if Receivestring[1] = 'i' then
  begin
    InputValue := HextoInt(copy(ReceiveString,
    pos(';',ReceiveString)+1,
    length(ReceiveString)-pos(';',ReceiveString)-1));
    if InputValue and 1 = 1 then
      cb_input0.Checked := True
    else
      cb_input0.Checked := False;
    if InputValue and 2 = 2 then
      cb_input1.Checked := True
    else
      cb_input1.Checked := False;
  end;
  if Receivestring[1] = 'c' then
  begin
    if copy(ReceiveString, 8, 1) = '0' then
      ed_counter0.Text := copy(ReceiveString, 10,length(ReceiveString)-10);
    if copy(ReceiveString, 8, 1) = '1' then
      ed_counter1.Text := copy(ReceiveString, 10,length(ReceiveString)-10);
    if copy(ReceiveString, 8, 1) = ';' then
    begin
      ReceiveString[8] := ' ';
      ed_counter0.Text := copy(ReceiveString, 9, pos(';',ReceiveString)-9);
      ed_counter1.Text := copy(ReceiveString,
      pos(';',ReceiveString)+1,
      length(ReceiveString)-pos(';',ReceiveString)-1);
    end;
  end;
end;

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. Puesto que el estado de Output se transmite hexadecimal, primero es necesario una conversión en un valor íntegro para calcular otros pasos más. Para la conversión se integró una función correspondiente en el programa. 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).

function HexToInt(HexString : String) : longWord;
var CharCount : integer;
    HexCharValue : longWord;
    HexValue : longWord;
begin
  HexValue := 0;
  HexString := UpperCase(HexString);
  for CharCount := 1 to length(HexString) do
  begin
    HexCharValue := ord(HexString[CharCount]);
    if HexCharValue > 57 then
      HexCharValue := HexCharValue - 55
    else
      HexCharValue := HexCharValue - 48;
    HexCharValue := HexCharValue shl ((length(HexString) - CharCount) * 4);
    HexValue := HexValue or HexCharValue;
  end;
  HexToInt := HexValue;
end;

4. 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.
procedure Twebio_ascii_client.timer_pollingTimer(Sender: TObject);
begin
  if ClientSocket1.Active and cb_output_polling.Checked then
    ClientSocket1.Socket.SendText('GET /output?PW=' + ed_password.Text + '&');
  if ClientSocket1.Active and cb_input_polling.Checked then
    ClientSocket1.Socket.SendText('GET /input?PW=' + ed_password.Text + '&');
  if ClientSocket1.Active and cb_counter_polling.Checked then
    ClientSocket1.Socket.SendText('GET /counter?PW=' + ed_password.Text + '&');
end;

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

procedure Twebio_ascii_client.ed_intervalChange(Sender: TObject);
begin
  timer_polling.Interval := strtoint(ed_interval.Text);
end;

 

El programa ejemplo asiste todas las funciones corrientes del Web-IO en el modo String de comando, optimado para el Web-IO 2x Digital Input, 2x Digital Output PoE . 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.


 
    Otros ejemplos de aplicación para Web-IO Digital
Técnicas web
     
     
     
     
  Páginas web propias
       
        PHP y AJAX - páginas web dinámicas también para varios Web-IO
        Páginas web Mashup - visualización de valores en los mapas de Google Maps
        Java-Applet - uso de Applet integrado
        Java-Applet - ejemplo: visualización de entradas y salidas
        Java-Applet - ejemplo: visualización de entradas y salidas y control de salidas
        Java-Applet - ejemplo: visualización de los contadores
        Java-Applet - ejemplo: abrir puertas y encender o apagar luces en el navegador
        Web-IO con iPhone - visualización y control
        Web-IO con iPhone - ejemplo: control de persianas
        Web-IO con iPhone - ejemplo: control de clima
        Web-IO con iPhone - ejemplo: visualización de valores de medición
Integración de sistemas
     
     
     
     
     
      Box-to-Box
Registro de datos
     
      Logger de datos FTP - ejemplo
Temporizador
     
      Temporizador CRON (Linux)
      Taskplaner como temporizador
Programación individual
     
      Visual Basic.Net 2005/2008/2010
      Visual Basic.Net 2005/2008/2010 con WuTdevice.dll
      Visual C++
      Visual C#
      Visual C# con WuTdevice.dll
      Visual C++ (Linux con QT-Designer)
      Visual Delphi
      Visual Delphi.Net (2005)
      Lazarus / FreePascal
      Java
      Control con VBScript
Sistema Web-IO
     
     
      Motherbox - activar varios Web-IO
      Motherbox - enlace lógico de Web-IO
      Control de valores límite
  Web-IO - opciones de conexión a redes
       
        DSL
        UMTS/GPRS/red de móvil
        Señal por satélite

 
  • Mister Wong
  • Marcadores de Google
  • Twitter
  • Facebook
  • Digg
   Impreso
Estamos a su disposición personalmente. Wiesemann & Theis GmbH Tf.: +49-202/2680-110 (Lu-Vi, 8-17 horas)
Porschestr. 12 Fax: +49-202/2680-265
42279 Wuppertal individual por E-Mail

© Wiesemann & Theis GmbH, Reservados los errores y cambios: Dado que podemos hacer fallos, no se deben usar nuestras afirmaciones sin haberlas controlado antes. Por favor, infórmenos de todos los errores o malentendidos que le sean conocidos, para que podamos reconocerlos y solucionarlos lo antes posible.