Screenshot oscilloscopi RIGOL DS1xxxZ

Riferimenti utili e pratici per la progettazione: formule, tabelle, calcoli
Rispondi
Avatar utente
Jack123
Messaggi: 22
Iscritto il: gio 29 set 2022, 16:59

Screenshot oscilloscopi RIGOL DS1xxxZ

Messaggio da Jack123 »

Ciao a tutti

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
Allegati
RigolScreenshot.zip
Il programma risulta privo di virus, tuttavia non fidatevi mai di un eseguibile ed eseguite sempre una scansione con il vostro antivirus prima di aprire file sospetti!
(5.63 KiB) Scaricato 80 volte
Avatar utente
blue3121
Messaggi: 879
Iscritto il: dom 24 gen 2021, 7:22

Re: Screenshot oscilloscopi RIGOL DS1xxxZ

Messaggio da blue3121 »

Bella idea.
Molti oscilloscopi hanno solo l'interfaccia USB.
Si potrebbe fare la versione per USB ;)
“...dentro i confini del computer, sei tu il creatore. Controlli - almeno potenzialmente - tutto ciò che vi succede. Se sei abbastanza bravo, puoi essere un dio. Su piccola scala.”
L. Torvalds
_________________
Guido C.
Avatar utente
Jack123
Messaggi: 22
Iscritto il: gio 29 set 2022, 16:59

Re: Screenshot oscilloscopi RIGOL DS1xxxZ

Messaggio da Jack123 »

La versione USB (porta USB-B posteriore connessa al PC) richiede per forza di aver installato i driver della periferica, che credo siano parte integrante di tutto il software Rigol.

Proverò a controllare se si riesce ad installare solo i driver e questi presentano una API standard (o almeno una porta COM virtuale) con cui interagire per ottenere lo screenshot, ma penso non sia facile come per la versione ethernet.

Per salvare invece lo screenshot su un pendrive USB (collegato alla porta USB-A anteriore) basta configurare il tasto PRINT per salvare lo screenshot.
Avatar utente
Pier Aisa
Amministratore
Messaggi: 2530
Iscritto il: ven 16 mar 2018, 9:43
Località: Bologna
Contatta:

Re: Screenshot oscilloscopi RIGOL DS1xxxZ

Messaggio da Pier Aisa »

Davvero un bellissimo lavoro e poi la cosa che ADORO è il fatto che tu abbia condiviso questa esperienza e il codice a beneficio di tutti coloro che ne potranno usufruire..... grandissimo!
Avatar utente
blue3121
Messaggi: 879
Iscritto il: dom 24 gen 2021, 7:22

Re: Screenshot oscilloscopi RIGOL DS1xxxZ

Messaggio da blue3121 »

Puro spirito di condivisione (F.L.O.S.S. al 100%).

Jack123 ti meriteresti un "salto quantico" cambiando O.S. :roll: :roll: :roll:
“...dentro i confini del computer, sei tu il creatore. Controlli - almeno potenzialmente - tutto ciò che vi succede. Se sei abbastanza bravo, puoi essere un dio. Su piccola scala.”
L. Torvalds
_________________
Guido C.
Avatar utente
Jack123
Messaggi: 22
Iscritto il: gio 29 set 2022, 16:59

Re: Screenshot oscilloscopi RIGOL DS1xxxZ

Messaggio da Jack123 »

Beh non mi sono inventato nulla, ho semplicemente scritto in vb.net quello che su linux si può ottenere con un semplice:

Codice: Seleziona tutto

echo ':DISPLAY:DATA? ON,OFF,PNG' | netcat -w 20 192.168.x.x 5555 | tail -c +12 > immagine.png
Quando lo avevo scritto per windows c'era solo una versione in python, ma quasi nessuno ce l'ha installato...

Per il discorso di cambiare OS, beh, ci sono tanti motivi per cui sto ancora usando windows 7, ma il principale è che invecchiando si diventa abitudinari...
Avatar utente
blue3121
Messaggi: 879
Iscritto il: dom 24 gen 2021, 7:22

Re: Screenshot oscilloscopi RIGOL DS1xxxZ

Messaggio da blue3121 »

Jack123 ha scritto: mer 16 nov 2022, 18:13 Beh non mi sono inventato nulla, ho semplicemente scritto in vb.net quello che su linux si può ottenere con un semplice:

Codice: Seleziona tutto

echo ':DISPLAY:DATA? ON,OFF,PNG' | netcat -w 20 192.168.x.x 5555 | tail -c +12 > immagine.png
Ottimo contributo... il pinguino risolve le cose con una sola linea di comando, magari "messa" in un file da dare in pasto alla bash, se non si ricorda la sintassi (a me capita) o da richiamare con un TAB se la si usa spesso (grande Jack123 !)
Jack123 ha scritto: mer 16 nov 2022, 18:13 Quando lo avevo scritto per windows c'era solo una versione in python, ma quasi nessuno ce l'ha installato...
Troppo "tosto" da "applicare" in quell'ambito :lol: :lol: :lol:
Jack123 ha scritto: mer 16 nov 2022, 18:13 Per il discorso di cambiare OS, beh, ci sono tanti motivi per cui sto ancora usando windows 7, ma il principale è che invecchiando si diventa abitudinari...
Modalità NERD: ON

L'abitudite "ingabbia". Bisogna sentirsi liberi per non esserlo. Osando. E... "scoprendo" cosa vuol dire essere "non essere ingabbiati".
La pigrizia "ingabbia", mettersi a confronto con se stesssi, libera.
Secondo me hai tutte le carte in regola per fare "il passo".

Mi sembri il sottoscritto più di ventanni fa, fra un vaff... ricorrente e chica...melofare "tanto è la stessa cosa" ripetitivo, e ci mettevo pure "è meglio...".
E ora so che non avevo capito una amata-min... :lol:

Modalità NERD: OFF

-----------------------------------

P.S. Credo di essere più vecchio di te.
“...dentro i confini del computer, sei tu il creatore. Controlli - almeno potenzialmente - tutto ciò che vi succede. Se sei abbastanza bravo, puoi essere un dio. Su piccola scala.”
L. Torvalds
_________________
Guido C.
Avatar utente
pgv
Messaggi: 484
Iscritto il: gio 17 set 2020, 13:16
Località: Ginevra

Re: Screenshot oscilloscopi RIGOL DS1xxxZ

Messaggio da pgv »

La feature di Windows 10 che ti perdi restando con Windows 7 e' WSL, Windows (Sub)System for Linux, che ti permette di girare Linux (distro a scelta, anche multiple) dentro una PowerShell e che e' molto, molto meglio di CygWin. Io ho ancora un PC che gira Windows XP perche' non ce la farebbe a girare altro... (vabbe' ho anch edue laptop che girano DOS, e allora?) ma sulla workstation di tutti i giorni ho Windows 10 e WLS attivo con una bella immagine XXX (non voglio fomentare una guerra di religione citando una distro precisa).
Avatar utente
blue3121
Messaggi: 879
Iscritto il: dom 24 gen 2021, 7:22

Re: Screenshot oscilloscopi RIGOL DS1xxxZ

Messaggio da blue3121 »

Nessun flame, ma solo condivisione di pareri e impressioni.
Del resto la libertà è ancora una delle cose più importanti che abbiamo nell'uso dei dispositivi (... a parte Android, iOS, e... mi fermo qui :lol: :lol: :lol: ).

IMHO
pgv ha scritto: gio 17 nov 2022, 3:49 La feature di Windows 10 che ti perdi restando con Windows 7 e' WSL, Windows (Sub)System for Linux, che ti permette di girare Linux (distro a scelta, anche multiple) dentro una PowerShell e che e' molto, molto meglio di CygWin.
eehhhmmm... è un accrocchio che è bel lungi dalle distro native, il corrispettivo di Wine sotto GNU/Linux (ben più longevo come idea e stabile, MS ormai "insegue") che ti permette di far girare molto (ma non tutto) con prestazioni scadenti (mi riferisco sia a Wine che WSL, prova a fare girare SW per rendering o modellazione 3D nativo GNU/Linux e poi mi dici).
LTSpice io lo utilizzo con Wine sotto (si dovrebbe dire "sopra") GNU/Linux e gira alla grande.
Se volessi installare MSOffice sarebbero dolori. Non ne ho bisogno: uso LibreOffice.

Poi, vi siete mai chiesto il perchè dell'esistenza di questa nuova feature WSL ? Che necessità c'era visto che il 99% del software prodotto è solo per Win ?

Molto meglio una versione Win su VirtualBox (faccio così quelle rarissime volte che ne ho bisogno) con prestazioni molto più elevate in termini di velocità rispetto a Win che gira sulla stessa macchina in modo non emulato (provare per credere).
pgv ha scritto: gio 17 nov 2022, 3:49 Io ho ancora un PC che gira Windows XP perche' non ce la farebbe a girare altro... (vabbe' ho anch edue laptop che girano DOS, e allora?) ...
Distro "leggera" e risolvi.
pgv ha scritto: gio 17 nov 2022, 3:49 ...ma sulla workstation di tutti i giorni ho Windows 10 e WLS attivo con una bella immagine XXX (non voglio fomentare una guerra di religione citando una distro precisa).
Tra gli utilizzatori di GNU/Linux non esistono guerre di religione (almeno tra quelli intelligenti): è una questione di "gusti" e utilizzo che si fa.
Il cuore che batte sotto tutte le distro è lo stesso.
Cambia il "target" della distro (es. server), il sistema di pacchettizzazione, "cosmesi" delle interfacce (Gnome, KDE, xfce, ecc le trovi in ogni distro) e poco altro ancora.
Più che altro è una questione di supporto, ma le distro "madri" da cui sono derivate tutte le altre migliaia son sempre le stesse, le conti sulle dita di una mano mozza.

------------------------------------------------------------

Il discorso non sta in questo, assolutamente, ma nei principi del FLOSS: Free Libre Open Source Software.
Provate a cercare i sorgenti di un prodotto sw per Win e poi mi dite.
E' un piccolo dettaglio che, se ignorato (quasi sempre) fa solo scoppiare inutili "guerre di religione" e inutili flame ben lontane da:
Free
Libre
Open Source

Poi ci sarebbero da "scomodare" le quattro libertà fondamentali del software libero:
-Usare liberamente
-Studiare liberamente
-Modificare liberamente
-Condividere liberamente
che devo essere tutte appartenenti al codice che costituisce il sw (non per niente esiste la licenza GPL).

Mi direte che sono solo un illuso esaltato sognatore, ma se non fosse così oggi come oggi non esisterebbe Android (giusto per fare un solo esempio).

E... LAST BUT NOT LEAST... il progetto Arduino & C. non sarebbe quello che è se non ci fossero alla base questi principi, sia sul sw che sul hw.
Cosa non da poco, esempio che le 4 libertà che ho citato prima possono essere applicate anche all'hardware con i risultati che sappiamo!

---------------------------------------------------------------
EDIT

P.S. A tal proposito dimenticavo una cosa: sapete qual'è la "genesi" di Edge il nuovo browser di MS ?
Non lo scrivo, ma se siete curiosi, googlate... ;)
“...dentro i confini del computer, sei tu il creatore. Controlli - almeno potenzialmente - tutto ciò che vi succede. Se sei abbastanza bravo, puoi essere un dio. Su piccola scala.”
L. Torvalds
_________________
Guido C.
Rispondi