Este artigo compartilha o código específico para o Java para implementar a comunicação serial para sua referência. O conteúdo específico é o seguinte
1. Introdução
O programa de comunicação serial implementado pelo Java suporta o envio e o recebimento de dados hexadecimais.
Código -fonte: SerialPortDemo
As renderizações são as seguintes:
2.RXTXCOMM
Java Comunicação serial dependência Jar pacote rxxcomm.jar
Endereço para download: http://download.csdn.net/detail/kong_gu_you_lan/9611334
Inclui uso de versão de 32 e 64 bits:
Copie rxxcomm.jar para o diretório java_home/jre/lib/ext;
Copie rxxserial.dll no diretório java_home/jre/bin;
Copie rxxparallel.dll no diretório java_home/jre/bin;
Java_home é o caminho de instalação do JDK
3. Gerenciamento de comunicação portuária em série
SerialPortManager implementa o gerenciamento da comunicação portuária serial, incluindo encontrar portas disponíveis, abrir e fechar a porta serial e enviar e receber dados.
pacote com.yang.serialport.Manage; importar gnu.io.commport; importar gnu.io.ComportIdentifier; importar gnu.io.nosuchportException; importar gnu.io.portinUseexception; import gnu.io.Serialport; ImmonuM.io.PerialCorporeMeMeMextEner; java.io.ioException; importar java.io.inputStream; importar java.io.OutputStream; importar java.util.ArrayList; importar java.util.enumeration; importação java.util.toomanylistenerSexception; import.yanger.serialport.exception.NosuClorth; com.yang.serialport.exception.portinuse; importar com.yang.serialport.exception.readDataFromSerialPortFailure; importação com.yang.serialport.exception.sendDatoserialPortFailure; import.yang.serialport.exception.serialportInputStreamFailre; com.yang.serialport.exception.SerialPortutputStreamCloseFailure; import com.yang.serialport.exception.SerialPortParameterFailure; importar com.yang.serialport.exception.toomanylistenners;/*** portão serial*** @author yenning*/public Class Serialr; nomes de porta*/ @suppresswarnings ("desmarcados") public static final ArrayList <String> findport () {// obtenha todos os portas seriais atualmente disponíveis <uumeração <somportIdentifier> portList = comitermentIdentifier .getSportIdentifiers (); ArrayList <String> portNounElist = new ArrayList <String> (); // Adicione o nome da porta serial disponível à lista e retorne a lista while (PortList.hasmoreElements ()) {string portName = portList.nextElement (). GetName (); PortNounElist.add (PortName); } retornar portnamelist; } /*** Abra a porta serial** @Param PortName* Nome da porta* @param baudrate* taxa de transmissão* @return Objeto de porta serial* @throws SerialPortParameterFailure* falhou em definir parâmetros de porta serial* @THOWSOWSUNHSUTHPORT* portão* Pontoning para o dispositivo não é o tipo de porto* @portão* porthrows Nosuchport* portinport* portão não é o que não é o que não é o portão* @Trowsuch Nosuchport* porthort. Ocupado*/ public static final SerialPort Openport (String PortName, Int Baudrate) lança serialportParameterFailure, Notaserialport, Nosuchport, portinuse {Try {// Identify Port by Port Name CommportIdIdier Atentifier = CommportIdentifier .GetentIFIER (PortName); // Abra a porta, defina o nome da porta e o tempo limite (tempo limite da operação de abertura) Commport Commport = PortIdentifier.open (PortName, 2000); // Determine se é uma porta serial se (commport instanceof serialport) {serialport serialport = (serialport) commport; tente {// Defina a taxa de transmissão e outros parâmetros da porta serial serialport.SetSerialPortParams (Baudrate, Serialport.databits_8, serialport.stopbits_1, serialport.parity_none); } catch (não suportadoCommoperationException e) {lança novo serialportParameterFailure (); } retornar serialport; } else {// não a porta serial lança novo notaRialport (); }} catch (nosuchportException e1) {throw new nosuchport (); } catch (portinuseexception e2) {tiro new Portinuse (); }} / *** Feche a porta serial** @param serialport* Objeto de porta serial a ser fechado* / public static void Closeport (serialport serialport) {if (serialport! = Null) {serialport.close (); serialport = nulo; }} / *** Envie dados para a porta serial** @param serialport* objeto de porta serial* @param order* Os dados a serem enviados* @throws sendDatatoserialPortFailure* Falha ao enviar dados para a porta serial* @THOWSOWS SERIALPORTUTSTREAMCLOSEFALURE* feche o erro de transmissão da saída da porta serial* lança sendDatatoSerialPortFailure, serialportOutputStreamCloseFailure {outputStream out = null; tente {out = serialport.getOutputStream (); out.Write (Order); out.flush (); } catch (ioexception e) {lança novo sendDatatoSerialPortFailure (); } finalmente {tente {if (out! = null) {out.close (); out = null; }} catch (ioexception e) {lança novo serialportOutputStreamCloseFailure (); }}} / *** Leia os dados da porta serial** @param serialport* O objeto serialport com a conexão atualmente estabelecida* @return os dados Leia* @Throws readDataFromSerialPortFailure* Um erro ocorreu com a letra de dados da porta de serial quando a portão de serial / shreampatratratratratratratratratratration*, por meio de um erro, quando a portão da serial quando o objeto de serial), por exemplo, o que está seriamente para a letra, quando a portão da serial, a portão, a portão, o que é o que é o que é o que você está sendo realizado com a base de dados readfromport (serialport serialport) lança readDataFromSerialPortFailure, serialportInputStreamCloseFailure {inputStream in = null; byte [] bytes = null; tente {in = serialport.getInputStream (); // Obtenha o comprimento dos dados int no buffer bufflenth = in.Available (); while (bufflenth! = 0) {// inicialize a matriz de bytes com o comprimento dos dados nos buffers bytes = novo byte [bufflenth]; in.read (bytes); bufflenth = in.Available (); }} catch (ioexception e) {tiro novo readDataFromSerialPortFailure (); } finalmente {tente {if (in! = null) {in.close (); in = null; }} catch (ioexception e) {lança nova serialorporinputStreamCloseFailure (); }} retornar bytes; } / ** * Adicionar ouvinte * * @param porta * Objeto de porta serial * @param ouvinte * ouvinte de porta serial * @throws toomanylisteners * ToomanyListeners * ToomanyListener Muitos objetos de escuta * / public static void addlistener (portão serialporteventlistner / ouvister) staid slowistner (portão serialporteventlistner) staid (portador de serialporteventlister) ous). port.addeventListener (ouvinte); // Defina o tópico de recebimento de audição de despertar quando os dados chegarem à porta.NotifyOndataAVALELable (true); // Defina o encadeamento de interrupção de despertar quando a comunicação é interrompida port.NotifyOnBreakInterrupt (true); } catch (toomanylistenerSexception e) {lança novos toomanyListeners (); }}}4. Janela principal do programa
/* * MainFrame.java * * Created on 2016.8.19 */package com.yang.serialport.ui;import gnu.io.SerialPort;import gnu.io.SerialPortEvent;import gnu.io.SerialPortEventListener;import java.awt.Color;import java.awt.GraphicsEnvironment;import java.awt.Point;import Java.awt.event.actionEvent; importar java.awt.event.actionListener; importar java.util.list; importar javax.swing.borderFactory; importar javax.swing.jbutton; importação javax.swing.jcombobox; import.swing.jbutton; importação; importação; javax.swing.jpanel; importar javax.swing.jscrollpane; importar javax.swing.jtextarea; importar javax.swing.jtextfield; importar com.yang.seriCort.exception.noschport; importar com.erialerport.exception.portialport.memport.mport.mportyport.mportyport.mportsking.mportymyport.mportymyport.mportsking.memuchport; importação; com.yang.serialport.exception.sendDatatoserialPortFailure; importação com.yang.serialport.exception.SerialPortUttStreamCloseFailure; import com.yang.serialport.exception.exception.SerialportParameterFailre; com.yang.serialport.manage.SerialPortManager; import com.yang.serialport.utils.byteutils; importar com.yang.serialport.utils.showutils;/*** interface principal********************************************************************************************************************************************************************************************************************************. / *** Altura da interface do programa*/ public static final int altura = 360; private jtextarea dataaview = new jtextarea (); private jscrollPane scrolldataview = novo jscrollPane (dataView); // Painel de configurações de porta serial private jpanel serialportPanel = new jpanel (); private Jlabel serialportLabel = new jlabel ("porta serial"); Privado Jlabel Baudratelabel = New Jlabel ("Baudrate"); Private JCOMBOBOX COMMCHOICE = novo JCOMBOBOX (); private JCOMBOBOX BAUDRATECHOICE = novo JCOMBOBOX (); // Painel de operação Private JPanel OperatePanel = new JPanel (); Private JTextField DataAinput = new JTextField (); private jbutton serialpoportOperate = new jbutton ("porta serial aberta"); private JButton sendData = new jbutton ("enviar dados"); Lista privada <String> CommList = null; Serialport privado Serialport; public mainframe () {initView (); initComponents (); ActionListener (); initdata (); } private void initView () {// feche o programa setDefaultCloseoperation (javax.swing.windowconstants.exit_on_close); // proíbe maximização de janelas setResizable (false); // Defina a janela do programa para o ponto central p = graphicsenvironment.getLocalGraphicSenvironment () .getCenterPoint (); Setbounds (px - largura / 2, py - altura / 2, largura, altura); this.setLayout (nulo); Settitle ("Comunicação serial"); } private void initComponents () {// Data DataView.SetFocusable (false); scrolldataview.setbounds (10, 10, 475, 200); add (scrolldataview); // serialportPanel.setborder (borderfactory.createTitledDorder ("serialportset"); serialportPanel.setbounds (10, 220, 170, 100); serialportPanel.setLayout (nulo); add (serialportPanel); serialportLabel.setforeground (color.gray); serialportlabel.setbounds (10, 25, 40, 20); serialportPanel.add (SerialPortLabel); CommChoice.setFocusable (false); CommChoice.setbounds (60, 25, 100, 20); serialportPanel.add (CommChoice); baudratelabel.setforeground (color.gray); Baudratelabel.setbounds (10, 60, 40, 20); serialportPanel.add (Baudratelabel); BaudrateChoice.setFocusable (false); Baudratechoice.setbounds (60, 60, 100, 20); serialportPanel.add (Baudratechoice); // operação operatePanel.setbounds (200, 220, 285, 100); operatePanel.setLayout (null); add (operatePanel); Datainput.setBounds (25, 25, 235, 20); operatePanel.add (Datainput); serialPortoperate.setFocusable (false); serialPortoPerate.Letbounds (45, 60, 90, 20); operatePanel.add (serialpoportoperate); sendData.setFocusable (false); sendData.setbounds (155, 60, 90, 20); operatePanel.add (sendData); } @Suppresswarnings ("desmarcado") private void initData () {commList = serialportManager.findport (); // Verifique se existe uma porta serial, adicione -a à opção if (CommList == null || commList.size () <1) {Showutils.warningMessage ("Nenhuma porta serial válida foi encontrada!"); } else {for (string s: Commlist) {CommChoice.additem (s); }} BaudrateChoice.additem ("9600"); Baudratechoice.additem ("19200"); Baudratechoice.additem ("38400"); Baudratechoice.additem ("57600"); Baudratechoice.additem ("115200"); } private void actionListener () {serialPortoPerate.addactionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent E) {if ("aberto porta serial" .Equals (serialportPerate.getText () & & s) }); sendData.addactionListener (new ActionListener () {@Override public void ActionPormed (ActionEvent e) {sendData (e);}}); } / *** Abra a porta serial** @param evt* clique em Evento* / private void OpenSerialPort (java.awt.event.actionEvent evt) {// obtenha o nome da porta serial string commName = (string) CommChoice.getSelectedItem (); // Obtenha a taxa de transmissão int Baudrate = 9600; String bps = (string) baudratechoice.getSelectedItem (); Baudrate = Integer.parseint (BPS); // Verifique se o nome da porta serial está correto se (commName == null || commName.equals ("")) {showutils.warningMessage ("Nenhuma porta serial válida foi encontrada!"); } else {try {serialport = serialportManager.openport (commName, Baudrate); if (serialport! = null) {dataView.settext ("Serialport está ligado" + "/r/n"); serialPortoperate.Settext ("Close Serialport"); }} catch (serialportParameterFailure e) {e.printStackTrace (); } catch (nosuchport e) {e.printStackTrace (); } catch (portinuse e) {e.printStackTrace (); Showutils.warningMessage ("A porta serial foi ocupada!"); }} tente {serialportManager.addlistener (serialport, new SerialListener ()); } catch (ToomanyListeners e) {E.PrintStackTrace (); }} / *** Feche a porta serial** @param evt* clique em Evento* / private void Closerialport (java.awt.event.actionEvent evt) {serialportManager.closeport (serialport); DataView.settext ("Porta serial está fechada" + "/r/n"); serialPortoPerate.Settext ("Porta serial aberta"); } / *** Envie dados** @param evt* clique em Evento* / private void sendData (java.awt.event.actionEvent evt) {// Digite caracteres hexadecimal diretamente na caixa de entrada, o comprimento deve ser até string dados = datainput.getText (). Tostring (); tente {serialportManager.sendToport (serialport, byteutils.hexstr2byte (dados)); } catch (sendDatAtoserialPortFailure e) {E.PrintStackTrace (); } catch (serialportoutputStreamCloseFailure e) {e.printStackTrace (); }} classe privada SerialListener implementa serialportEventListener { / *** manipula eventos de porta serial monitorada* / public void serrievent (serialportEvent serialportEvent) {switch (serialportEvent.GeteventType ()) {case serialportEvent.bi: // 10 comunicação Showutils. quebrar; Caso serialorporevent.oe: // 7 Overflow (Overflow) Caso de erro serialportEvent.fe: // 9 Erro de quadro Caso serialportEvent.pe: // 8 Caso de erro de paridade serialportEvent.cd: // 6 de detecção de portador.dsrortevent. caso serialportEvent.output_buffer_empty: // 2 O buffer de saída foi limpo; Case serialportEvent.data_available: // Os dados disponíveis existem no byte da porta serial [] dados = null; tente {if (serialport == null) {showutils.errorMessage ("O objeto da porta serial está vazio! O monitoramento falhou!"); } else {// leia dados de porta serial dados = serialportManager.readFromport (serialport); DataView.append (byteutils.byteArraytohexString (dados, true) + "/r/n"); }} Catch (Exceção e) {Showutils.errorMessage (e.toString ()); // Saia do sistema após exibir um erro quando ocorre um erro de leitura System.Exit (0); } quebrar; }}} public static void main (string args []) {java.awt.eventqueue.invokelater (new runnable () {public void run () {new mainframe (). setVisible (true);}}); }}5. Escrito no final
Endereço do download do código -fonte: SerialportDemo
Os alunos podem reclamar e comentar. Se você acha que este blog é útil para você, deixe uma mensagem ou faça um comentário (^-^)
Obrigado: Escrever ferramentas de comunicação serial baseadas em java
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.