Applicazione relativa al Web-IO digitale:
Web-IO digitali controllo e monitoraggio con Visual Basic
Visualizzazione, verifica e controllo
Come linguaggio di alto livello di facile apprendimento, Visual Basic offre tutto ciò che è necessario per la programmazione di applicazioni TCP/IP. In tal modo anche Visual Basic è uno strumento ausiliario prediletto per la creazione di applicazioni che comunicano con il Web-IO digitale. Ulteriori driver o DLL non saranno necessari.
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.
Preparativi
- Mettere sotto tensione il Web-IO e collegare gli IO
- Collegare il Web-IO alla rete
- Assegnazione di indirizzi IP
Nel Web-IO nell’area Vie di comunicazione >> API socket Attivare i socket ASCII TCP e autorizzare gli output per l’attivazione
Collocazione dei diversi elementi di comando e oggetti di visualizzazione nel modulo VB
Nella denominazione dei singoli oggetti è utile utilizzare nomi che ne riprendono il significato. In questo esempio la prima parte del nome descrive il tipo di oggetto e la seconda parte la funzione.
Avvio del programma
Inizializzazione degli elementi di comandoIl gruppo con gli elementi di comando per il Web-IO viene innanzitutto bloccato per l’uso. Nella riga di stato viene visualizzato che non sussiste ancora alcun collegamento.
Private Sub Form_Load()
fr_io.Enabled = False
bt_disconnect.Enabled = False
StatusBar1.SimpleText = "No Connection"
End Sub
Controllo del collegamento
Inizializzazione del collegamentoImmettendo 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()
If ed_ip.Text <> "" Then
winsock1.RemoteHost = ed_ip.Text
winsock1.RemotePort = Val(ed_port.Text)
winsock1.Connect
End If
End Sub
Creazione del collegamento
Per lo svolgimento della gestione TCP/IP viene utilizzato l’elemento di controllo Winsock di Visual Basic. Questo elemento di controllo permette, al verificarsi di diversi stati di collegamento, di prestabilire e avviare procedure.
Collegamento realizzatoNon appena il Web-IO accetta il collegamento, l’elemento di controllo Winsock esegue la corrispondente procedura. Nella riga di stato viene visualizzata la realizzazione del collegamento, gli elementi di comando vengono abilitati per l’utilizzo e il pulsante Disconnect risulta utilizzabile. Il pulsante Connect viene bloccato per l’uso.
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
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()
winsock1.Close
fr_io.Enabled = False
bt_disconnect.Enabled = False
bt_connect.Enabled = True
StatusBar1.SimpleText = "No Connection"
End Sub
Anche in questo caso l’elemento di controllo Winsock richiama la corrispondente procedura
Private Sub winsock1_Close()
fr_io.Enabled = False
bt_disconnect.Enabled = False
bt_connect.Enabled = True
StatusBar1.SimpleText = "No Connection"
winsock1.Close
End Sub
Errore di collegamento
Anche nel caso di un errore di collegamento l’elemento di controllo Winsock esegue una corrispondente procedura che corrisponde a grandi linee alla procedura di disconnessione. Nella riga di stato viene inoltre visualizzato il numero di errore 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
Utilizzo e comunicazione della 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.
Impostazione degli outputL’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_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
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()
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
Interrogazione/cancellazione dei counter
È possibile interrogare o cancellare anche gli stati dei counter degli input.
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 è possibile leggere o cancellare contemporaneamente anche tutti i counter.
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
Ricezione dei dati dal Web-IO
Analisi e visualizzazione dei dati ricevutiTutti 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.
Se l’elemento di controllo Winsock riceve dati, esso richiama la corrispondente procedura
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
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 interrogare 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.
Polling
Interrogazione ciclica di determinati valoriPer 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 richiamate dal Web-IO nell’intervallo impostato.
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
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 ed_interval_Change()
timer_polling.Interval = Val(ed_interval)
End Sub
Naturalmente è possibile configurare il Web-IO anche in modo tale che invii da sé messaggi al programma, se si verifica una modifica su uno degli input.
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 di Web-IO devono eventualmente essere eseguiti adattamenti al programma. Ulteriori esempi di programma per la programmazione socket sono riportati nelle pagine dei tool per il Web-IO. Una descrizione dettagliata sull’interfaccia socket dei modelli Web-IO digitali è riportata nel manuale di riferimento.