Adattatori W&T
per TCP/IP, Ethernet, RS-232, RS-485, USB, 20 mA
Fibra ottica di vetro e di plastica, http, SNMP, OPC, I/O digitale, I/O analogico, ISA, PCI, ecc.?
      Prodotti
Pagina iniziale Contatti   Distributori nel mondo
Lingue:
DE

US

ES

IT

RU
Misurazione climatica
Termografo web
WuTooth
Web-IO
Digitale
Analogico
Area speciale
Server dati
Motherbox 2
pure.box 2
memoria di rete
Server Ethernet TCP/IP
Com-Server (seriali)
Server USB
Adattatori seriali
USB, RS232, RS485, 20 mA
Isolatori & fibra ottica
USB, RS232, RS485, 20 mA
Schede PC
PCI Express, bus PCI e
Bus ISA
...
Adattatori stampanti
Accessori
Download
Cose vecchie
Carrello Il vostro carrello

 
      Conoscenze tecniche
Libri, articoli, glossari...
Informazione tecnica di base
Applicazioni per Com-Server,
Server USB
, Web-IO,
termometro web,
Motherbox e pure.box
 
Applicazione relativa al Web-IO digitale:

Web-IO digitale con VB 2005 / 2008 / 2010 controllo e monitoraggio




 Ulteriori link: Ulteriori applicazioni Panoramica del prodotto Versione per la stampa


Come successore di MS Visual Basic e VB.Net è ora disponibile VB 2005 o 2008. Anche Visual Basic 2005 / 2008 offre tutto ciò che è necessario per la programmazione delle applicazioni TCP/IP. In tal modo Visual Basic 2005 / 2008 è uno strumento ausiliario prediletto per la creazione di applicazioni che comunicano con il Web-IO digitale soprattutto perché per la versione Express di VB2008 viene offerto al momento presso Microsoft il download gratuito. Ulteriori driver o DLL non saranno necessari.

Controllo con Visual Basic

Con il seguente esempio di programma potete riprodurre il vostro Web-IO digitale con i suoi input e output in un’applicazione Windows. Inoltre potete collegare gli output del Web-IO.


Non disponete ancora di un Web-IO® e desiderate semplicemente provarne il funzionamento come nell’esempio illustrato?

Nessun problema: vi mettiamo a disposizione gratuitamente per 30 giorni il Web-IO digitale 2x input, 2x output PoE. Non dovete far altro che compilare l’ordinazione del campione e vi forniremo il Web-IO in prova in conto aperto. Se ci restituite l’apparecchio entro 30 giorni, vi accreditiamo completamente la fattura.

All’ordinazione del campione   All’ordinazione del campione  

Preparativi
Avete già alimentato con corrente
1. Collocazione dei diversi elementi di comando e oggetti di visualizzazione nel modulo VB.net

Elementi di comando Visual Basic

Oltre agli oggetti qui mostrati il programma necessita di un ulteriore timer per il polling (timer_polling).

Nella denominazione dei singoli oggetti è utile utilizzare nomi che ne riprendono il significato. In questo esempio la prima parte del nome descrive il tipo dell’oggetto e la seconda parte la funzione.


2. Avvio del programma

Mentre la costruzione delle interfacce utente grafiche in Visual Basic 2005 Express è ugualmente facile da realizzare come con le versioni precedenti, gli altri compiti hanno bisogno innanzitutto di una fase di rodaggio.

VB 2005 ad es. non mette più a disposizione l’elemento di controllo Winsock presente in VB5 e VB6.

Per l’accesso alla rete mediante la proposizione Import deve invece essere istanziato nell’intestazione del testo sorgente il namespace per le classi socket utilizzate. Inoltre deve essere creato il socket, su cui deve svolgersi la comunicazione, e deve essere definito un buffer per i dati di ingresso.

Inoltre l’incapsulamento dei singoli oggetti in VB 2005 è stato talmente accentuato che gli oggetti, che sono applicati all’interno di un thread, non consentono l’accesso a partire da un altro thread. Così ad es. una casella di spunta, che era stata creata nel thread A, non può essere impostata dal thread B.

Per rendere tuttavia accessibili le proprietà degli oggetti per altri thread, nel proprio thread devono essere applicate procedure sub per la modifica degli oggetti. Relativamente a queste procedure sub vengono quindi formati delegati mediante i quali gli altri thread possono accedere.

Ad es. per abilitare l’utilizzo degli elementi di comando del modulo dopo la creazione riuscita del collegamento oppure per bloccarli al termine del collegamento, ma anche per adattare agli stati IO effettivi le caselle di spunta degli input/output dopo la ricezione dei dati.

Imports System.Net.Sockets
Imports System.Net

Public Class Form1

  Public Structure IO_State
    Dim outputstate0 As Boolean
    Dim outputstate1 As Boolean
    Dim inputstate0 As Boolean
    Dim inputstate1 As Boolean
    Dim countervalue0 As Long
    Dim countervalue1 As Long
  End Structure

  Private Delegate Sub DelegateSub()
  Private connectenable As New DelegateSub(AddressOf connect_enable)
  Private disconnectenable As New DelegateSub(AddressOf disconnect_enable)
  Private formupdate As New DelegateSub(AddressOf form_update)
  Dim TCP_client As Socket
  Dim connection_ar As IAsyncResult
  Dim receivebuffer(511) As Byte
  Dim IOState As IO_State

  Private Sub connect_enable()
    bt_connect.Enabled = False
    gb_io.Enabled = True
    bt_disconnect.Enabled = True
    Timer_polling.Enabled = True
    ToolStripStatusLabel1.Text = "Connected to " + tb_ip.Text + " : " + tb_port.Text
  End Sub

  Private Sub disconnect_enable()
    bt_connect.Enabled = True
    gb_io.Enabled = False
    bt_disconnect.Enabled = False
    timer_polling.Enabled = False
    ToolStripStatusLabel1.Text = "No Connection"
  End Sub

  Private Sub form_update()
    If IOState.inputstate0 = True Then
      cb_input0.Checked = True
    Else
      cb_input0.Checked = False
    End If
    If IOState.inputstate1 = True Then
      cb_input1.Checked = True
    Else
      cb_input1.Checked = False
    End If
    If IOState.outputstate0 = True Then
      cb_output0.Checked = True
    Else
      cb_output0.Checked = False
    End If
    If IOState.outputstate1 = True Then
      cb_Output1.Checked = True
    Else
      cb_Output1.Checked = False
    End If
    tb_counter0.Text = IOState.countervalue0
    tb_counter1.Text = IOState.countervalue1
  End Sub

3. Controllo del collegamento
  • Inizializzazione del collegamento
    Immettendo l’indirizzo IP del Web-IO nel campo di testo ed_ip e facendo clic sul pulsante bt_connect viene avviata la creazione del collegamento

Private Sub bt_connect_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles bt_connect.Click
  Dim WebIOep As New IPEndPoint(IPAddress.Parse(tb_ip.Text), Val(tb_port.Text))

  If tb_ip.Text <> "" And tb_port.Text <> "" Then
    TCP_client = New Socket(AddressFamily.InterNetwork, SocketType.Stream, _     ProtocolType.Tcp)
    bt_connect.Enabled = False
    Try
      TCP_client.BeginConnect(WebIOep, New AsyncCallback(AddressOf callback_connect), _
      TCP_client)
    Catch ex As Exception
    End Try
  End If
End Sub

  • Creazione del collegamento
    Per lo svolgimento della gestione TCP/IP viene innanzitutto definito un IPEndPoint dall’indirizzo Ip e dalla porta TCP e con ciò viene inizializzato il socket TCP_client. Durante la richiesta di collegamento viene creato un rimando a una procedura di callback.
  • Collegamento realizzato
    Non appena il Web-IO accetta il collegamento, viene eseguita la procedura di callback. Mediante Invoke il delegato viene richiamato per la procedura che abilita gli elementi di comando e che visualizza lo stato di connessione nella riga di stato. Inoltre viene creato un rimando a una routine di callback per la ricezione dei dati.
Private Sub callback_connect(ByVal ar As IAsyncResult)
  Invoke(connectenable)
  connection_ar = ar
  Try
    TCP_client.EndConnect(ar)
    TCP_client.BeginReceive(receivebuffer, 0, 512, SocketFlags.None, _
    New AsyncCallback(AddressOf callback_readdata), TCP_client)
  Catch ex As Exception
    closeconnections()
  End Try
End Sub
  • Disinserzione del collegamento
    Il collegamento rimane fino a quando non viene terminato dall’utente facendo clic sul pulsante Disconnect oppure il Web-IO termina il collegamento.
Private Sub bt_disconnect_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles bt_disconnect.Click
  Invoke(disconnectenable)
  closeconnections()
End Sub

 

In questo caso viene richiamata la corrispondente procedura.

Private Sub closeconnections()
  Try
    TCP_client.EndReceive(connection_ar)
  Catch ex As Exception
  End Try
  Try
    TCP_client.Shutdown(SocketShutdown.Both)
  Catch ex As Exception
  End Try
  Try
    TCP_client.Close()
  Catch ex As Exception
  End Try
  Invoke(disconnectenable)
End Sub

 

  • Errore di collegamento
    Tutte le azioni che riguardano la comunicazione TCP/IP vengono eseguite nell’ambito dell’istruzione Try. Se compaiono errori, viene richiamata anche la procedura CloseConnection.


4. Utilizzo e comunicazione delle parte client

Non appena viene realizzato un collegamento con il Web-IO, l’utente può inviare comandi al Web-IO utilizzando i corrispondenti elementi del programma.

Private Sub sendcommand(ByVal sendstring As String)
  Dim senddata As Byte() = System.Text.Encoding.ASCII.GetBytes(sendstring)
  Try
    TCP_client.Send(senddata)
  Catch ex As Exception
    closeconnections()
  End Try
End Sub

  • Impostazione degli output
    L’impostazione degli output è resa possibile all’utente da due caselle di spunta cb_outputx. Il programma utilizza a tale scopo l’evento MouseUP di questo oggetto. Se viene registrato un MouseUp, ossia un abbandono della casella di spunta degli output, il programma esegue la corrispondente procedura e inoltra al Web-IO, in base all’eventuale impostazione della casella di spunta, il comando adatto.

Private Sub cb_output0_MouseUp(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles cb_output0.MouseUp
  If cb_output0.Checked Then
    sendcommand("GET /outputaccess0?PW=" + tb_password.Text + "&State=ON&")
  Else
    sendcommand("GET /outputaccess0?PW=" + tb_password.Text + "&State=OFF&")
  End If
End Sub


Private Sub cb_output1_MouseUp(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles cb_output1.MouseUp
  If cb_output1.Checked Then
    sendcommand("GET /outputaccess1?PW=" + tb_password.Text + "&State=ON&")
  Else
    sendcommand("GET /outputaccess1?PW=" + tb_password.Text + "&State=OFF&")
  End If
End Sub

  • Interrogazione dello stato degli output/input
    L’utente può richiedere lo stato degli output e degli input facendo clic sul relativo pulsante.
Private Sub bt_outputs_read_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles bt_outputs_read.Click
  sendcommand("GET /output?PW=" + tb_password.Text + "&")
End Sub

Private Sub bt_inputs_read_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles bt_inputs_read.Click
  sendcommand("GET /input?PW=" + tb_password.Text + "&")
End Sub
  • Interrogazione/cancellazione dei counter
    È possibile interrogare o cancellare anche gli stati dei counter degli input.

Private Sub bt_counter_read0_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles bt_counter_read0.Click
  sendcommand("GET /counter0?PW=" + tb_password.Text + "&")
End Sub


Private Sub bt_counter_read1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles bt_counter_read0.Click
  sendcommand("GET /counter1?PW=" + tb_password.Text + "&")
End Sub


Private Sub bt_counter_clear0_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles bt_counter_clear0.Click
  sendcommand("GET /counterclear0?PW=" + tb_password.Text + "&")
End Sub


Private Sub bt_counter_clear1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles bt_counter_clear0.Click
  sendcommand("GET /counterclear1?PW=" + tb_password.Text + "&")
End Sub

Naturalmente è possibile leggere o cancellare contemporaneamente anche tutti i counter.

Private Sub bt_counter_readall_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles bt_counter_readall.Click
  sendcommand("GET /counter?PW=" + tb_password.Text + "&")
End Sub

Private Sub bt_counter_clearall_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles bt_counter_clearall.Click
  sendcommand("GET /counterclear?PW=" + tb_password.Text + "&")
End Sub


5. Ricezione dei dati dal Web-IO
  • Analisi e visualizzazione dei dati ricevuti
    Tutti i comandi e le richieste al Web-IO vengono confermati con una stringa di risposta. Le risposte hanno una struttura specifica in base al tipo.

    Per gli output: output;<valore binario dello stato degli output in formato esadecimale>

    Per gli input: input;<valore binario dello stato degli input in formato esadecimale>

    Per i counter: counterx;<stato del conteggio decimale>

    oppure counter;<stato del conteggio decimale 0 >; <stato del conteggio decimale 0 >; ... se tutti i counter devono essere letti in un’unica volta.

    Tutte le stringe di risposta terminano con 0 byte.

    Alla ricezione dei dati viene richiamata la corrispondente procedura di callback
Private Sub callback_readdata(ByVal ar As IAsyncResult)
  If TCP_client.Connected Then
  Dim bytesread As Integer
  Try
    bytesread = TCP_client.EndReceive(ar)
  Catch ex As Exception
  End Try
  If bytesread = 0 Then
    closeconnections()
  Else
    Dim receivestring As String
    receivestring = System.Text.Encoding.ASCII.GetString(receivebuffer, 0, _
    receivebuffer.Length)
    receivebuffer.Clear(receivebuffer, 0, 512)
    Try
      TCP_client.BeginReceive(receivebuffer, 0, 512, SocketFlags.None, New       AsyncCallback(AddressOf callback_readdata), TCP_client)
    Catch ex As Exception
      closeconnections()
    End Try
    Select Case Mid(receivestring, 1, 1)
    Case "i"
      If (Val(Mid(receivestring, 7, 1)) And 1) = 1 Then
        IOState.inputstate0 = True
      Else
        IOState.inputstate0 = False
      End If
      If (Val(Mid(receivestring, 7, 1)) And 2) = 2 Then
        IOState.inputstate1 = True
      Else
        IOState.inputstate1 = False
      End If
    Case "o"
      If (Val(Mid(receivestring, 8, 1)) And 1) = 1 Then
        IOState.outputstate0 = True
      Else
        IOState.outputstate0 = False
      End If
      If (Val(Mid(receivestring, 8, 1)) And 2) = 2 Then
        IOState.outputstate1 = True
      Else
        IOState.outputstate1 = False
      End If
    Case "c"
      Dim tabpos
        If Mid(receivestring, 8, 1) = "0" Then _
          IOState.countervalue0 = Mid(receivestring, 10)
        If Mid(receivestring, 8, 1) = "1" Then _
          IOState.countervalue1 = Mid(receivestring, 10)
        If Mid(receivestring, 8, 1) = ";" Then
          tabpos = InStr(9, receivestring, ";")
          IOState.countervalue0 = Val(Mid(receivestring, 9, tabpos - 9))
          IOState.countervalue1 = Val(Mid(receivestring, tabpos + 1, _
          Len(receivestring) - tabpos - 1))
        End If
      End Select
    Invoke(formupdate)
    End If
  End If
End Sub

La procedura di ricezione controlla sulla base del primo carattere dei dati ricevuti se si tratta di messaggi degli input, degli output o dei counter. In base a ciò viene ad es. stabilito quale stato ha quale output. Nei counter è possibile sia richiamare i valori dei singoli contatori che leggere tutti i counter contemporaneamente. Gli stati dei singoli contatori vengono visualizzati in una stringa in decimali separati mediante punto e virgola.


6. Polling
  • Interrogazione ciclica di determinati valori
    Per permettere anche un aggiornamento automatico della visualizzazione, viene utilizzato un timer.
    In base alle caselle di spunta per il polling degli output, degli input e dei counter le corrispondenti informazioni vengono interrogate dal Web-IO nell’intervallo impostato.
Private Sub timer_polling_Elapsed(ByVal sender As System.Object, _
ByVal e As System.Timers.ElapsedEventArgs) Handles timer_polling.Elapsed
  If (cb_input_polling.Checked And TCP_client.Connected) Then
    sendcommand("GET /input?PW=" + tb_password.Text + "&")
  End If
  If (cb_output_polling.Checked And TCP_client.Connected) Then
    sendcommand("GET /output?PW=" + tb_password.Text + "&")
  End If
  If (cb_output_polling.Checked And TCP_client.Connected) Then
    sendcommand("GET /output?PW=" + tb_password.Text + "&")
  End If
  If (cb_counter_polling.Checked And TCP_client.Connected) Then
    sendcommand("GET /counter?PW=" + tb_password.Text + "&")
  End If
End Sub

L’intervallo desiderato può essere immesso nel corrispondente campo di testo. In caso di una modifica l’intervallo del timer viene adattato automaticamente.

Private Sub tb_interval_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles tb_interval.TextChanged
  timer_polling.Interval = Val(tb_interval.Text)
End Sub

 

Il programma esempio supporta tutte le comuni funzioni del Web-IO nella modalità stringa di comando, ottimizzata per il Web-IO 2x input digitale, 2x output digitale. Per gli altri modelli dei Web-IO devono eventualmente essere eseguiti adattamenti al programma. Ulteriori esempi di programma per la programmazione socket sono riportati nelle pagine dei tool relative al Web-IO. Una descrizione dettagliata sull’interfaccia socket dei modelli Web-IO digitali è riportata nel manuale di riferimento.

All’ordinazione del campione   All’ordinazione del campione Download esempio di programma   Al download

 
    Altri esempi applicativi per Web-IO digitale
Tecniche web
     
     
     
     
  Siti web propri
       
        PHP e AJAX - pagine web dinamiche anche per diversi Web-IO
        Pagine web Mashup con visualizzazione dei valori nelle carte geografiche di Google Maps
        Java-Applet - utilizzare l’applet integrata
        Java-Applet. Esempio: visualizzazione degli input e degli output
        Java-Applet. Esempio: visualizzazione degli input e degli output e controllo degli output
        Java-Applet. Esempio: visualizzazione dei counter
        Java-Applet. Esempio: aprire le porte e accendere le luci nel browser
        Visualizzare e controllare il Web-IO con l’iPhone
        Web-IO con iPhone. Esempio: comando delle tapparelle
        Web-IO con iPhone. Esempio: monitoraggio del clima
        Web-IO con iPhone. Esempio: visualizzazione valori di misura
Integrazione sistema
     
     
     
     
     
      Box-to-box
Acquisizione dati
     
      datenlogger FTP - esempio
Timer
     
      Timer CRON (Linux)
      Taskplaner come timer
Programmazione personalizzata
     
      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
      comandare con VBScript
sistema Web-IO
     
     
      Motherbox - attivare diversi Web-IO
      Motherbox - collegare logicamente i Web-IO
      Controllo dei valori limite
  Web-IO - Possibilità della connessione di rete
       
        DSL
        UMTS/GPRS/rete di telefonia mobile
        Radio satellitare

 
  • Mister Wong
  • Bookmark Google
  • Twitter
  • Facebook
  • Digg
   Colophon
Saremo lieti di fornirvi una consulenza personale! Wiesemann & Theis GmbH Tel.:: 0202/2680-110 (lun.-ven., ore 8-17)
Porschestr. 12 Fax: 0202/2680-265
42279 Wuppertal E-mail personale:

© Wiesemann & Theis GmbH, con riserva di errori e modifiche: poiché possono verificarsi errori, nessuna nostra informazione deve essere utilizzata senza essere stata verificata. Vi preghiamo di comunicarci tutti gli errori o gli equivoci che avete rilevato in modo tale che possiamo riconoscerli ed eliminarli quanto prima.