Java House
Crovatto - Serial Analyzer
Italiano     English

Serial Analyzer Versione 2.8.0

Maggio 2017, by Crovy

Serial Analyzer è un software nato nel 2001 per monitorare i dati scambiati da due apparecchiature sulla linea seriale. Ora si è evoluto integrando connessioni tcp/ip client e server oltre a poter richiamare script in BeanShell utili per comporre veri e propri programmi o semplicemente per calcolare il checksum del frame da trasmettere. Questo software, a causa dei driver per gestire la linea seriale, può funzionare solo sui sistemi operativi Windows, Linux e MacOsX.

Vi sono tanti modi per definire questo software:
  • Analizzatore linea seriale RS232, RS422 e RS485;
  • Sniffer linea seriale RS232, RS422 e RS485;
  • Monitor linea seriale RS232, RS422 e RS485;
  • Software di comunicazione;
  • Terminale Seriale;
  • Client Tcp/Ip;
  • Server Tcp/Ip;
  • Client UDP;
  • Server UDP;
  • Bridge Tcp/Ip con linea seriale;


Le principali caratteristiche sono:

  • Connessione di tipo "Client" con connessione Seriale, Tcp/IP o UDP;
  • Visualizzazione e impostazione segnali di controllo della linea seriale;
  • Varie modalità di visualizzazione dei dati ricevuti/trasmessi:
    • ASCII visualizza dati con codifica Ascii. In questa modalità eventuali caratteri di controllo (tipo CR o LF) vengono interpretati visualmente secondo le loro caratterstiche (ad esempio il CR manda a capo);
    • HEX visualizza dati con codifica esadecimale;
    • DECIMAL visualizza dati con codifica decimale;
    • CTRL -->HEX i dati compresi tra 0x20 (spazio) e 0x7E (~) sono visualizzati con codifica Ascii, gli altri dati sono visualizzati con codifica esadecimale;
    • ASCII & HEX i dati sono visualizzati sia con codifica esadecimale che Ascii (i dati minori di 0x20 e maggiori di 0x7E sono visualizzati come uno spazio);
  • Differente colorazione per i dati trasmessi e quelli ricevuti;
  • Dalla versione 2.7.1 è possibile sostituire i caratteri di controllo (da 0x00 a 0x1F) con il nome usato nella tabella ASCII. Ad esempio il carattere 0x02 può essere visualizzato come STX;
  • Riconoscimento, opzionale, di due diversi "frame header" in modo da facilitare l'interpretazione dei dati. Il messaggio di "Nuovo frame" è visualizzato con un diverso colore, inoltre si può scegliere se visualizzare anche la data e ora o la differenza in ms dal frame precedente o il tempo assoluto in ms;
  • Risposta automatica ad un frame identificato con un frame definibile dall'utente che può includere anche parte dei dati ricevuti. Dalla versione 2.7.0 è possibile definire tante risposte automatiche riconoscendo i dati ricevuti;
  • Dodici campi dove impostare sequenze di dati da trasmettere semplicemente premendo il relativo tasto di funzione. Dalla versione 2.7.0 è possibile associare una sequenza ad ogni tasto abilitando la Modalità Comandi (Command Mode);
  • Salvataggio su file di tutto quello che viene ricevuto e trasmesso;
  • Ricerca testuale nell'area terminale;
  • Copia di dati dall'area termiale nella ClipBoard;
  • Trasmissione dei dati contenuti nella ClipBoard;
  • Blocco scorrimento visualizzazione;
  • Funzionalità come Server Tcp/Ip o Udp, dall'elenco dei client connessi è possibile escludere specifiche connessioni tramite check box.

    Per il server Tcp/Ip sono previste tre differenti modalità:
    • TERMINAL lo stesso Server funge anche da terminale (la connessione client viene disabilitata) e i dati trasmessi vengono inviati a tutti i client connessi;
    • ECHO, come il modo TERMINAL solo che i dati ricevuti da un client vengono inviati anche a tutti gli altri client connessi;
    • BRIDGE, come il modo ECHO con in più la possibilità di effettuare anche una connessione client.

      In questo modo è possibile effettuare un bridge tra un server Tcp/Ip e una connessione seriale.
    Per il server Udp è previsto solo il modo TERMINAL che funziona come per il server Tcp/Ip;
  • Tabella codifica Ascii integrata;
  • Tutte le impostazioni sono salvate su un file di properties;
  • Modalità programmazione per facilitare operazioni ripetitive;
  • Interfacciamento con BeanShell che permette di creare dei veri e propri programmi in Java da eseguire da "HotKeys" o da apposito menu.

    Di seguito alcune tipiche applicazioni in BeanShell:
    • Calcolo del checksum del frame dati da inviare;
    • Verifica del calcolo del checksum dei dati ricevuti;
    • Programma per l'upload/download di dati;
    • Connessione client Tcp/Ip in bridge con una connessione seriale;
  • Opzione "Line Mode" per inviare i dati solo dopo aver premuto l'Enter;


Per il Serial Analyzer è stato fatto un apposito programma di installazione valido sia per Windows, Linux e in modo sperimentale per MacOsX. Basta estrarlo dall'archivio zip ed eseguirlo. Per l'installazione occorre essere "Amministratori" del sistema in quanto i driver per le linee seriali vengono installati nelle cartelle del Java che generalmente si trovano in sezioni accessibili solamente all'Amministratore (root) del sistema.

Questo che vedete è un esempio di connessione tcp/ip client.

Serial Analyzer Cliet

Questo che vedete è un esempio di connessione tcp/ip server.

Serial Analyzer Server

Per questo programma c'è un manuale in italiano e in inglese (che troverete integrati nell'applicativo).

Richiede J2SE 7.0 (versione 1.7) o superiore, non sono supportate le versioni inferiori.

Scarica Installer del Serial Analyzer 2.8.0

Se avete problemi con la gestione dei convertitori usb seriali con Linux, potete consultare il nostro corso dedicato ai convertitori usb seriale!

Dalla versione 2.7.0 il Serial Analyzer utilizza le librerie RXTX che gestiscono automaticamente (quindi senza creare il link) anche i convertitori usb-seriale, ovviamente il sistema operativo deve sempre gestire questi convertitori a livello di driver.

Cose da Fare Versione 2.8.0

Maggio 2017, by Crovy
  • implementare una struttura a plug-in;
  • poter cambiare i parametri della connessione dagli script in BeanShell;

Errori Noti Versione 2.8.0

Maggio 2017, by Crovy
  • premedo il tasto "F10" da tastiera si apre il menu "File". Credo sia un problema del Java;
  • a volte quando si riavvia il server tcp/ip questo non accetta le connessioni (dalle ultime verifiche sembrerebbe più un problema di router/firewall per le connessioni dall'esterno);

Cronologia Revisioni

2.8.0 del 10.04.17
  • Aggiunto aggiornamento automatico delle periferiche "client" e delle "interfaccie di rete" quando si seleziona il TAB - CLIENT;
  • Dall'editor di programmazione, facendo un doppio click su una riga con l'istruzione "send" o su una riga del "modo comandi" si trasmette automaticamente la stringa dell'istruzione sul canale della connessione aperta.
  • Aggiunto la possibilità di caricare da linea di comando il file .properties e il file .sap.
    Non servono parametri, basta indicare il percorso e il nome completo (con estensione) del, o dei, file da caricare.
    Esempio: java -jar SerialAnalyzer.jar /home/fabio/test.properties /home/fabio/test.sap
  • Quando si modificano i dati degli HotKeys (dato da trasmettere e commento) vengono automaticamente aggiornati i tool tips degli HotKeys e anche tutti i dati del pannello esterno degli HotKeys. Prima bisognava salvare il file o aprire (o chiudere e aprire) la connessione;
  • Aggiunto funzione Drag&Drop per caricare i file di configurazione (*.properties e *.sap) semplicemente trascinandoli sulla applicazione;
  • Modificato impostazione indirizzo ip della connessione di rete in modo da accettare anche il nome dell'host (ad esempio "localhost" al posto di "127.0.0.1");
  • Modificato connessione UDP in modo da permettere la ricezione da qualsiasi porta del mittente. Prima il mittente doveva trasmettere dalla stessa porta utilizzata in ingresso;
  • Tolto dall'elenco delle interfacce di rete i nomi con i MAC address (nel caso di connessione multicast) ;
  • Corretto loop di eccezioni (che di fatto bloccavano ogni possibilità di continuare o chiudere il programma) quando si utilizzava un adattatore usb-seriale e questo veniva rimosso con la connessione aperta;
  • Corretto errore lettura parametro "enableDateTime" dal file di configurazione (*.properties);
  • Corretto errore invio dati da script in BeanShell con connessione UDP;
  • Corretto errore compilazione file ".sap" quando il file era in formato Windows (sequenza CR-LF al posto del solo LF per andare a capo);
  • Quando selezioni la finestra principale, se la finestra dello standard in/out è aperta questa viene messa in primo piano;
  • Aggiunto nel menu Command una opzione per aprire/chiudere automaticamente la connessione client quando la finestra principale è attiva/non attiva;
  • Aggiunto nel menu Tools una opzione per utilizzare il proxy di sistema nelle connessioni di rete. L'impostazione rimane memorizzata automaticamente a livello di programma;
  • Aggiunto opzione nei pannelli esterni HotKeys e ModemStatus per muoverli quando si muove la finestra principale;
  • Aggiunto nel menu Help la verifica se la versione in uso è aggiornata;
  • Aggiunto nel menu Help il link al sito web;
  • Aggiunto nel menu Help il link alla donazione;
  • Memorizzato, e ripristinato all'avvio, lo stato aperto/chiuso dei pannelli esterni HotKeys e ModemStatus;
  • visualizzato un messaggio più chiaro quando la porta di bind non è valida;
2.7.4 del 04.07.14
  • Aggiunto selezione BaudRate linea seriale 75, 110, 600, 56000, 128000, 153600 e 256000 (attenzione, non tutti i sistemi supportano questi BaudRate);
2.7.3 del 13.02.13
  • Aggiunto la selezione dell'interfaccia ethernet (tramite elenco di ip address) per la connessione MULTICAST;
2.7.2 del 08.02.13
  • Modificato Area Terminale per correggere errore di Java 7 che non manda a capo le stringhe più lunghe della finestra;
2.7.1 del 04.12.11
  • Aggiunto opzione per sostituire i caratteri di controllo (da 0x00 a 0x1F) con il nome usato nella tabella ASCII. Ad esempio il carattere 0x02 può essere visualizzato come STX;
  • Aggiunto opzione per evidenziare, personalizzando i colori, tutte le sequenze di caratteri corrispondenti alla sequenza di ricerca;
  • Modificato font definizione HotKeys e dell'editor di programmazione usando un font monospazio al posto del proporzionale;
  • Corretto errore inizializzazione personalizzazione colori. Quando si avviava il Serial Analyzer veniva impostato solo il colore di background;
  • Corretto errore gestione server UDP in modo Programmazione;
  • Corretto errore gestione server UDP, venivano visualizzati i dati ricevuti dalle connessioni escluse (impostato nel tab Server Status);
2.7.0 del 11.04.11
  • Aggiunto connessione client di tipo MULTICAST.
  • Aggiunto la possibilità di cambiare il colore dei caratteri dei dati trasmessi, ricevuti e dei messaggi di sistema;
  • Aggiunto la possibilità di cambiare il colore di sfondo dell'area terminale;
  • Aggiunto voce nel menu File per caricare l'ultimo file di properties usato nella precedente sessione;
  • Modificato gestione file di log. Adesso ogni volta che si avvia il log si deve selezionare il file dove salvare il log stesso (viene proposto automaticamente l'ultimo file usato).

    Per questo motivo è stato tolto il pulsante "NewLog";
  • Aggiunto la modalità Modo Comandi;
  • Aggiunto la gestione delle Risposte Automatiche;
  • Messo a disposizione degli script in BeanShell i seguenti metodi:
    • setLastBshFilePath;
    • getLastBshFilePath;
    • setLastBshFileName;
    • getLastBshFileName;
  • Sostituite le vecchie e non più supportate librerie JavaComm con le librerie RXTX.

    Questo permette di utilizzare il Serial Analyzer anche su computer Apple con Max Os X (solo x86 no ppc).
  • Modificato filtro sul tipo di file quando si carica un file di properties o di programma (.sap) non facendo distinzione tra maiuscolo e minuscolo;
  • Modificato la definizione e la gestione del FrameHeader e FrameTail in modo da poter scrivere direttamente in caratteri ASCII (prima bisognava usare la codifica decimale/esadecimale usata nel SerialAnalyzer) e di lunghezza indefinita (prima era limitata a 10 caratteri).
  • Modificato la gestione dei parametri di configurazione in modo da permettere alcuni cambiamenti senza dover ristabilire la connessione client/server;
  • Modificato la gestione dei parametri di configurazione client e server non pemettendo la modifica quando è attiva una connessione;
  • Aggiunto in Programmazione l'istruzione sendK per inviare la stringa associata ad un tasto del Modo Comandi;
  • Corretto errore parametri client: all'avvio con selezionata una connessione seriale si poteva modificare anche l'indirizzo ip e la porta;
  • Corretto errore: all'avvio non veniva impostato il font con la dimensione memorizzata nel file ini;
  • Corretto errore: poteva capitare che all'avvio la dimensione della finestra del programma era più grande di quella di default o addirittura più grande dello schermo stesso bloccando il programma.

    L'errore si presentava in presenza di un testo molto lungo assegnato ad un tasto di funzione e salvato nel file di properties di default o in quello indicato dalla riga di comando.
2.6.2 del 01.10.10
  • Corretto errore nella gestione del led di run nel caso di programma che richiama uno script. Il led rimaneva spento.
  • Corretto errore gestione salvataggio configurazione e programma quando si chiude il Serial Analyzer.

    Se si entrava nel dialogo del salvataggio file e si annullava l'operazione il Serial Analyzer si chiudeva.
  • Aggiunto opzione per non interpretare la codifica decimale nei dati inviati. Utile nel caso di dati in formato xml.
  • Aggiunto opzione "Line Mode" per inviare i dati solo dopo aver premuto l'Enter. Utile per inviare i comandi AT al modem, in questo modo è possibile correggere la stringa con il backspace.

    Funziona solo per i dati immessi da tastiera.
  • Aggiunto comando per inviare il segnale di "break" sulla linea seriale.
2.6.1 del 17.07.09
  • Corretto errore nella gestione delle dimensioni minime della finestra principale.

    Questo non permetteva il corretto ridimensionamento quando, ad esempio, si decideva di non visualizzare più i bordi o la StatusBar.
  • Corretto errore sulla apertura della connessione client da uno script in BeanShell.

    In pratica veniva aperta la connessione ma non venivano gestiti i dati inviati e ricevuti.
  • Corretto errore nella interpretazione della codifica dati codificati in decimale e in esadecimale.

    Una stringa "<abc>" veniva sempre interpretata come dato codificato in decimale e la stringa non veniva trasmessa.

    Ovviamente la stringa "<065>" viene sempre convertita in "A".

    Lo stesso errore era presente anche per la codifica esadecimale, la stringa "[1K]" non veniva trasmessa.
  • Corretto errore nella finestra "StdOut/Err" che non permetteva di selezionare e copiare il testo;
  • Aggiunto selezione BaudRate linea seriale 230400, 460800 e 921600 (attenzione, non tutti i sistemi supportano questi BaudRate).
  • Aggiunto visualizzazione messaggi nell'area terminale quando cambia lo stato dei segnali di controllo del modem.

    Questi messaggi sono registrati anche nel file di log.
  • Aggiunto opzione per visualizzare i messaggi di sistema nell'area terminale (che al momento sono solo i segnali di controllo del modem).
  • Messo a disposizione degli script in BeanShell il metodo "getApplicationDataString".
2.6.0 del 11.02.09
  • Modificato radicalmente la logica della funzione server in modo da creare facilmente un bridge tra connessioni differenti;
  • Modificato gestione connessione client tcp/ip per riconoscere quando il server chiude la connessione;
  • Aggiunto nella StatusBar un led per indicare quando è in esecuzione un Programma o uno script in BeanShell;
  • Aggiunto nel menu View l'opzione per selezionare il LookAndFeel da applicare al programma.

    La gestione del LookAndFeel è affidata al programma JcLafChooser utilizzato come libreria. Per aggiungere altri LookAndFeel fare riferimento alle istruzioni relative al JcLafChooser.

    L'informazione del LookAndFeel usato viene salvata in modo da riavviare il programma con l'ultimo utilizzato;
  • Aggiunto nel menu View la la selezione della dimensione del font utilizzato nell'area terminale.

    Questa informazione viene salvata in modo che anche riavviando il programma viene usata l'ultima dimensione di font selezionata;
  • Aggiunto un pannello, da affiancare al principale, contenente i dodici HotKeys con il nome preso dal commento. Il pannello si visualizza attraverso il menu View;
  • Aggiunto nel menu View l'opzione per mantenere il programma sempre in primo piano;
  • Aggiunto al menu View una opzione per disabilitare il controllo automatico della dimensione minima del frame in modo da poterlo ridurre più di quanto consentito;
  • Aggiunto al menu Tools la voce "Refresh Script Menu" per aggiornare il menu degli script in BeanShell senza dover riavviare il SerialAnalyzer;
  • Abilitato funzionamento dei tasti di funzione (quindi l'invio dei dati) quando è selezionato uno dei due tab HotKeys;
  • Aggiunto nella finestra About le informazioni sulla licenza;
  • Modificato gestione dimensioni minime del frame in modo da adattarle automaticamente al LookAndFeel utilizzato;
  • La gestione della finestra SystemInfo è affidata al programma JcProperties utilizzato come libreria;
  • Rifatto completamente tutti i layout in modo da non utilizzare più la libreria layouts.jar;
  • Aggiunto un bordo colorato di rosso a tutte le finestre di impostazione parametri;
  • Aggiunto un bordo colorato di verde alla finestra dello stato del modem e del server;
  • Aggiunto un pannello, da affiancare al principale, contenente lo stato del modem. Il pannello è lo stesso del tab Modem Status. La visualizzazione si attiva attraverso il menu View;
  • Modificato gestione "Nuova Istanza" per renderla compatibile anche con Windows Vista;
  • Corretto messaggio di errore visualizzato quando la versione di Java non e' compatibile. Veniva riportato il nome di un altro programma ... JcRename!;
2.5.2 del 16.09.08
  • Ottimizzato conversione dati nel formato di visualizzazione selezionato;
  • Corretto errore nel metodo intToString messo a disposizione degli script in BeanShell.

    Il metodo convertiva il dato intero in stringa ascii nella modalità di visualizzazione selezionata nei parametri del SerialAnalyzer invece di convertirla sempre nel formato CTRL -->HEX.

    Questo errore portava a trasmettere dati non corretti se nelle impostazioni non era selezionato il formato CTRL -->HEX in quanto erroneamente convertiti, ad esempio selezionando il formato DECIMALE 0x02 veniva trasmesso come 30 32;
2.5.1 del 01.07.08
  • Quando si esegue uno script in BeanShell viene verificata se è attiva l'opzione "AutoAnswer", se è attiva viene chiesto se si vuole disabilitare.

    Questo perché la funzione "AutoAnswer" può portare ad alterare il funzionamento dello script in BeanShell;
  • Quando si chiude l'applicativo o quando si carica un nuovo file di configurazione/programma oltre alle opzioni di salvare i file è stata aggiunta l'opzione di "Annulla";
  • Corretto errore nella sezione "Program".

    Quando si eseguiva un programma che richiamava uno script in BeanShell, ad esempio per il calcolo del checksum, si manifestavano i seguenti errori:
    • il cursore non rimaneva nel modo occupato;
    • le istruzioni enableSendDisplay e enableRxDisplay non funzionavano, i dati venivano sempre visualizzati;
2.5.0 del 18.03.08
  • Implementato client/server udp.

    La dimensione massima di un pacchetto udp è stata fissata in 2048 byte considerando che a livello mondiale il parametro Maximum Transmission Unit (MTU) è fissato a 1500 bytes. Per informazioni vedere Wikipedia.

    Nella tabella "Server Status" vengono registrate tutte le connessioni udp, i pacchetti udp vengono inviati a tutti i client che si sono connessi. Per eliminare un client selezionare la check box "Exclude" e alla prima trasmissione questo client viene eliminato dall'elenco.
  • Rifatto completamente la gestione del riconoscimento del Frame Header.

    Questo per risolvere i seguenti problemi:
    • Corretto errore nel riconoscimento del Frame Header dove non era possibile riconoscere un frame composto da caratteri Ascii visualizzabili (quindi da 0x20 a 0x7E compresi) e da caratteri non visualizzabili (quindi > di 0x20 e < 0x7E). In realtà il riconoscimento funzionava, ma poi la scritta ==== NEW FRAME === non compare nella posizione giusta;
    • Corretto errore nella scrittura del file di log quando erano da riconoscere due differenti Frame Header con differente lunghezza che causava una eccezione.
  • Corretto dimensione della finestra delle proprietà di sistema;
  • Corretto errore gestione tastiera quando si scrive direttamente nell'area terminale dove non venivano accettati i caratteri che sulla tastiera sono da digitare in combinazione con il tasto "Alt Gr" (come ad esempio @ e # nella tastiera Italiana).
  • Corretto errore che si manifesta quando viene aggiornata la Java Virtual Machine.

    Nelle precedenti versioni, il Serial Analyzer non si avviava e non venivano segnalati errori. Adesso viene visualizzato un messaggio di errore che indica come risolvere il problema.

    Questo accade perché quando si installa il Serial Analyzer vengono installate le librerie per la gestione delle linee seriali nella cartella della Java Virtual Machine utilizzata in quel momento, installando una nuova Java Virtual Machine queste librerie non ci sono.

    Per risolvere il problema occorre avviare il programma di installazione del Serial Analyzer e selezionare di installare solo le "System Library".

    Nelle precedenti versioni, per verificare se il problema è lo stesso, si può avviare il SerialAnalyzer da shell/dos con il comando "java -jar SerialAnalyzer.jar" se viene visualizzata la seguente eccezione: "Exception in thread "main" java.lang.NoClassDefFoundError: javax/comm/CommPortIdentifier" il problema è lo stesso.
  • All'avvio aggiunto controllo sulla versione del Java, nel caso di versioni non supportate (< 1.5) viene visualizzato un messaggio di errore;
2.4.3 del 12.02.08
  • Aggiunto menu "View" con i comandi per scegliere quali componenti visualizzare e se visualizzare i dati trasmessi.

    Di default tutti le voci sono abilitate e di conseguenza tutti i componenti sono visualizzati.

    Se si vogliono ridurre le dimensioni minime della finestra del programma si può decidere di disabilitare la visualizzazione di qualche componente.

    Unica eccezione, se la risoluzione verticale del display è minore di 480 pixel i bordi dei pulsanti vengono disabilitati di default.

    Questa modifica è stata studiata per eseguire il "SerialAnalyzer" sul "Eee PC" della Ausus che ha una ridotta risoluzione verticale del display.
  • Modifiche minori al layout per ridurre le dimensioni minime dell'applicativo.

    Inoltre, per ottimizzare le dimensioni minime dell'applicativo, si consiglia di installare (opzione prevista nel programma di installazione) il LookAndFeel "Liquid";
  • Modifiche minori per ottimizzare la gestione server tcp/ip;
2.4.2 del 13.12.07
  • La stringa dei parametri di connessione, visualizzata in basso a sinistra, visualizza i parametri della connessione attiva, quindi quella client o quella server, prima venivano visualizzati solo i dati della connessione client.

    I parametri si distinguono dalla lettera che precede i dati: "S" per la connessione server e "C" per la connessione client.

    Nel caso il server venga utilizzato in una modalità che permette di attivare anche una connessione client, i dati visualizzati si riferiscono alla connessione client;
  • Aggiunto alla connessione client tcp/ip l'opzione per la modalità "bind" dove si dichiara la porta utilizzata dal client per la connessione;
  • Aggiunto compilazione del programma prima dell'esecuzione. Questo risulta utile nel caso di piccole modifiche da eseguire rapidamente;
  • In programmazione è stato modificato il tempo minimo impostabile per le istruzioni setSleep e wait da 100 a 10mS.

    Il tempo di default per l'istruzione setSleep rimane da 100mS;
  • All'interfaccia BeanShell sono stati aggiunti i seguenti metodi:
    • clearTerminalArea per cancellare l'area terminale;
    • clientIsOpen per verificare se la connessione client è aperta;
    • clientOpen per aprire la connessione client;
    • clientClose per chiudere la connessione client;
  • Corretto errore sulla risposta automatica. Quando il timer di ritardo era impostato a zero poteva capitare che la risposta automatica non funzionasse più. Per ripristinarne il funzionamente era necessario riavviare il Serial Analyzer;
2.4.1 del 01.10.07
  • Rilascio prima versione sul sito, per le precedenti versioni vedere il manuale del Serial Analyzer;