Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Programma Java di comunicazione seriale

    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.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315

    Moderazione

    Quando si posta del codice lo si deve includere nei tag CODE, non in quelli QUOTE.

    Ho sistemato io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Ouch. Chiedo scusa, dovevo leggere meglio il regolamento...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.