W&T collega
Adattatori per TCP/IP, Ethernet, RS-232, RS-485, USB, 20 mA, Fibra ottica di vetro e plastica, http, SNMP, OPC, Modbus TCP, I/O digitale, I/O analogico, ISA, PCI

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.

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. 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

Preparativi

Avete già alimentato con corrente

Collocazione dei diversi elementi di comando e oggetti di visualizzazione nel modulo VB

Elementi di comando Visual Basic

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.

1. Avvio del programma

Inizializzazione degli elementi di comando

Il 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
						

2. 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()
							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 realizzato

Non 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
						

3. 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 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_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
						
					

4. 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.

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.

5. 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 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.

Download esempio di programma

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. 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