Buongiorno a tutti i forumisti. Apro questo topic per chiedere un piccolo aiuto su un programma in Java che sto cercando di sviluppare.
Il mio scopo è un'applicazione Java che permetta la comunicazione tra porte seriali, argomento che ho da poco iniziato a studiare. In pratica, come dovrei fare, una volta aperto il flusso di ingresso, per inviare i dati alla porta? Allego il testo del programma, e preciso che esso gira come da previsioni fino al momento di aprire il flusso di ingresso... poi, si ferma dando una IOException: Stream closed, e dicendo "Operazione non riuscita."
Per quanto credo di aver capito, il problema è che non riesce ad aprire il flusso di comunicazione con la porta COM2, ma non essendo molto pratico di porte seriali, non sono sicuro al 100%...
codice:import gnu.io.*; import java.io.*; import java.util.*; public class TestPorte { public static void main (String [] args) { try { System.out.println ("Nome porta specificato."); // Specifica di un nome per la porta che desideriamo. String portaCercata = "COM1"; System.out.println ("Enumerazione iniziata."); // enumerazione di tutte le porte che JavaComm conosce. Enumeration identificatoriPorte = gnu.io.CommPortIdentifier.getPortIdentifiers(); System.out.println ("Esaminare ID porte. Individuare porta seriale corrispondente al nome " + portaCercata); // Ogni identificatore di porta viene poi esaminato per vedere se identifica una porta seriale, e se il nome è // quello che stiamo cercando. CommPortIdentifier idPorta = null; // verrà settata una volta che sarà stata trovata la porta che vogliamo. while (identificatoriPorte.hasMoreElements()) { CommPortIdentifier pid = (CommPortIdentifier) identificatoriPorte.nextElement(); if (pid.getPortType()==CommPortIdentifier.PORT_SERIAL && pid.getName().equals(portaCercata)) { idPorta = pid; System.out.println ("Trovato elemento."); break; } } if (idPorta == null) { System.err.println ("Porta " + portaCercata + " non trovato."); System.exit(1); } // Per acquisire la porta, si usa l'identificatore associato. SerialPort porta = null; System.out.println ("Tentativo acquisizione della porta."); try { porta = (SerialPort) idPorta.open("nome", 10000); // Nome dell'applicazione a cui serve la porta, // attesa massima in millisecondi } catch (gnu.io.PortInUseException e) { System.err.println ("Porta già in uso: " + e); System.exit(1); } System.out.println ("Porta acquisita. Accesso esclusivo."); // Ora che la porta è stata acquisita, e abbiamo accesso esclusivo ad essa, possiamo configurarla in // modo da ottenere i flussi di ingresso e di uscita. Settare i parametri. try { porta.setSerialPortParams(115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { System.err.println ("Operazione non supportata. " + e); System.exit(1); } // Aprire il lettore dei flussi di ingresso e uscita. System.out.println ("Aprire lettore flussi."); BufferedReader ingresso = null; PrintStream uscita = null; System.out.println ("Preparazione flussi ingresso/uscita."); try { ingresso = new BufferedReader (new InputStreamReader(porta.getInputStream())); } catch (IOException e) { System.err.println ("Apertura flusso di input impossibile: sola scrittura."); ingresso = null; } System.out.println ("Aperto flusso ingresso."); uscita = new PrintStream(porta.getOutputStream(), true); // La comunicazione vera e propria dei dati avviene a questo punto. Bisogna poi chiudere nuovamente // i flussi di ingresso-uscita in modo che le risorse possano in seguito essere assegnate di nuovo. if (ingresso != null) ingresso.close(); if (uscita != null) uscita.close(); if (porta != null) porta.close(); // Scrittura in uscita uscita.print("AT"); uscita.print("\r\n"); // Line feed ingresso.readLine(); // La prima lettura contiene il comando di eco "AT". ingresso.readLine(); // La seconda rimuove il line feed che AT genera come output. // Lettura di dati String risposta = ingresso.readLine(); // se è stato inviando "AT", risposta è "OK" } catch (Exception e) { System.err.println ("Operazione non riuscita. " + e); } } }
Ringrazio fin d'ora per l'aiuto, e spero di non aver disturbato.

Rispondi quotando

