PDA

View Full Version : Simulare rs232


MEMon
01-06-2008, 18:01
Ho una richiesta un pò strana, devo creare un programma che interfacci un pc ad un dispositivi tramite seriale.
Sul pc di casa non ha la seriale, esiste un modo per vedere quello che mando sulla seriale simulandola?

Cioè esiste qualcosa che crei un finta porta seriale sulla quale posso lavorare con vari linguaggi(credo di utilizzare java) come se fosse una vera porta seriale?

In poche parole mi interessa avere subito un riscronto visivo di quello che spedisco sulla seriale.

U-Boat
01-06-2008, 19:25
Una possibilità è quella di installare un driver della famiglia "virtual serial port", ce ne sono di vari tipi: sul pc del lavoro ho installato un driver che crea una seriale virtuale e poi ridirige tutto verso un socket, utile per tutte quelle volte in cui si usa un serial/ip server. Se giri un attimo su Google trovi anche quelli che creano porte virtuali in grado di comunicare con altre porte virtuali sullo stesso sistema: in quel caso ti basta aprire hyperterminal (o equivalente) e metterlo in comunicazione con il tuo processo.
Questo è particolarmente utile prima di scrivere il software di controllo per "giocare" un po' con il dispositivo per capire bene come funziona il protocollo e alla fine per vedere se quello che è stato scritto in effetti funziona o per il tuning degli ultimi parametri; durante la scrittura del software è decisamente più funzionale astrarre la comunicazione.

Crea un'interfaccia tipo questa:

public interface Connection {
public void sendData(String data);
}

e la fai implementare ad almeno due classi: una incapsula effettivamente la seriale, l'altra ridirige quello che invii e ricevi su console: durante le tue prove usi la seconda così vedi esattamente cosa invii.
Io ti consiglio caldamente, a quel punto, di fare anche una terza classe che usi per i test di unità.

Nota che nell'interfaccia che ho riportato non è specificato il comportamento in ricezione: se preferisci una gestione sincrona avrai anche un metodo readData, se preferisci l'approccio asincrono dovrai aggiungere un metodo per la registrazione dei listener.