Ho realizzato un semplicissimo programmino in VB.Net per salvare l'immagine dal mio oscilloscopio RIGOL DS1074Z (dovrebbe funzionare con molti altri modelli) attraverso la connessione di rete, senza avere installata tutta la suite Rigol che è molto invasiva sul pc.
Il programma si connette alla porta TCP/5555 dell'oscilloscopio, richiede lo screenshot, lo salva su file ed esce: niente da tenere sempre attivo sul pc.
Per l'utilizzo, basta richiamare il programma seguito dall'IP dell'oscilloscopio e, eventualmente, dal nome del file. Se il nome non è specificato, verrà aperta la finestra di salvataggio.
Io ho creato un link sul desktop così per salvare l'immagine basta un doppio click.
Codice: Seleziona tutto
Imports System.Net.Sockets
Imports System.IO
Imports System.Text
Imports System.Windows.Forms
Module Module1
Sub Main()
Dim arrTmp = Split(Command, " ", 2)
If Len(arrTmp(0)) < 1 Then
Console.WriteLine("Usage: RigolSaveScreen IpAddress [filename.png]")
Console.WriteLine("Usage: IpAddress: Address of oscilloscope")
Console.WriteLine("Usage: filename.png: Optional; File name of the target image.")
Console.WriteLine("Usage: (If missing, a Commondialog prompt will open.)")
Else
Dim clientSocket As TcpClient = New TcpClient
Try
Console.WriteLine("Connecting to " & Left(arrTmp(0), 60))
clientSocket.Connect(Left(arrTmp(0), 60), 5555)
Dim serverStream As NetworkStream = clientSocket.GetStream()
Console.WriteLine("Asking for screenshot...")
Dim outStream As Byte() = System.Text.Encoding.UTF8.GetBytes(":DISPLAY:DATA? ON,OFF,PNG" & vbLf)
serverStream.Write(outStream, 0, outStream.Length)
serverStream.Flush()
Console.WriteLine("Receiving...")
Dim aspetta As Integer = 0
Do While clientSocket.ReceiveBufferSize < 11 Or aspetta = 30
aspetta += 1
Threading.Thread.Sleep(10)
Loop
If aspetta < 30 Then
Dim Immagine(10) As Byte
serverStream.Read(Immagine, 0, 11) ' li butto via
Immagine = {}
aspetta = 0
Do While serverStream.DataAvailable Or aspetta = 30
If aspetta > 0 Then
Threading.Thread.Sleep(10)
End If
Dim Dimensione As Integer
aspetta += 1
Dim inStream(clientSocket.ReceiveBufferSize - 1) As Byte
Dimensione = serverStream.Read(inStream, 0, clientSocket.ReceiveBufferSize)
Array.Resize(inStream, Dimensione)
Immagine = Immagine.Concat(inStream).ToArray
Loop
Array.Resize(Immagine, UBound(Immagine))
clientSocket.Close()
If UBound(Immagine) > 20000 Then
If UBound(arrTmp) = 1 Then
Console.WriteLine("Saving...")
File.WriteAllBytes(arrTmp(1), Immagine)
Else
Dim SaveFileDlg As New SaveFileDialog
SaveFileDlg.FileName = "" ' Default file name
SaveFileDlg.DefaultExt = ".png" ' Default file extension
SaveFileDlg.Filter = "PNG Images (*.png)|*.PNG"
SaveFileDlg.RestoreDirectory = True
If SaveFileDlg.ShowDialog() Then
Console.WriteLine("Saving...")
File.WriteAllBytes(SaveFileDlg.FileName, Immagine)
End If
End If
Else
Console.WriteLine("Error getting image...")
End If
Else
Console.WriteLine("Error getting image...")
End If
Catch Ex As Exception
Console.WriteLine("Unexpected error: " & Ex.Message)
End Try
End If
End Sub
End Module