Dieser Artikel teilt den spezifischen Code für Java zur Implementierung serieller Kommunikation als Referenz. Der spezifische Inhalt ist wie folgt
1. Einführung
Das von Java implementierte serielle Kommunikationsprogramm unterstützt das Senden und Empfangen von Hexadezimaldaten.
Quellcode: SerialportDemo
Die Renderings sind wie folgt:
2.RXTXCOMM
Java Serienkommunikationsabhängigkeit JAR -Paket rxtxcomm.jar
Download -Adresse: http://download.csdn.net/detail/kong_gu_you_lan/9611334
Enthält 32-Bit- und 64-Bit-Versionsnutzung:
Kopieren Sie rxtxcomm.jar in das java_home/jre/lib/ext -Verzeichnis;
Kopieren Sie rxTxserial.dll in das Verzeichnis java_home/jre/bin;
Kopieren Sie rxtxparallel.dll in das Verzeichnis java_home/jre/bin;
Java_Home ist der JDK -Installationspfad
1. Kommunikationsmanagement für Serienport
SerialportManager implementiert die Verwaltung der seriellen Portkommunikation, einschließlich der Suche nach verfügbaren Ports, das Öffnen und Schließen des seriellen Ports sowie das Senden und Empfangen von Daten.
Paket com.yang.Serialport.Manage; Import gnu.io.commport; import gnu.io.commportidentifier; import gnu.io.nosuchportexception; import gnu.io.portinusexception; import Gnu.io.Serialport; Java.io.ioException; Import Java.io.inputstream; Import Java.io.outputStream; Import Java.util.ArrayList; Import Java.util.Enumeration; Import Java.util.Toomanylistensexception; Imporporial. com.yang.serialport.exception.portinuse; import com.yang.serialport.exception.readdatafromserialportfailure; import com.yang.serialport.exception com.yang.Serialport.Exception.SerialPortputStreamClosefailure; import com.yang.serialport.exception.SerialPortParameterFailure; Verfügbare Portnamen*/ @Suppresswarnings ("Deaktiviert") public static Final ArrayList <string> findPort () {// Alle aktuell verfügbaren seriellen Ports Enumeration <Kommportidener> portlist = commportidentifier .getPortIdentifikatoren (); ArrayList <string> portnamelist = new ArrayList <string> (); // den verfügbaren seriellen Portnamen zur Liste hinzufügen und die Liste zurückgeben (portlist.hasmoreElements ()) {String portname = portlist.nextElement (). GetName (); portnamelist.add (portname); } return portnamelist; } /*** SERIAL -Port öffnen** @param portname* Portname* @param Baudrate* Baud Rate* @return serielle Port -Objekt* @Throws SerialPortParameterFailure* fehlgeschlagen, serielle Portparameter zu setzen. besetzt*/ public static Final Serialport OpenPort (String Portname, int BaudRate) löscht SerialPortParameterFailure, Notaserialport, NoSuchport, Portinuse {try {// Port -Name Identifizieren Sie Portname Identifizieren Sie den Portnamen Identifizieren. // den Port öffnen, den Portnamen und die Zeitüberschreitung (Zeitüberschreitungszeit des Öffnungsbetriebs) commport commport = portIdentifier.open (Portname, 2000) festlegen; // Bestimmen Sie, ob es sich um einen seriellen Port handelt, wenn (comportinstance von serialport) {serialport serialport = (serialport) comport; Versuchen Sie {// Setzen Sie die Baud -Rate und andere Parameter des seriellen Ports serialport.setSerialPortParams (BauDrate, serialport.databits_8, serialport.stopbits_1, serialport.parity_none); } catch (nicht unterstütztescommoperationException e) {neue SerialportParameterFailure () werfen; } return serialport; } else {// nicht der serielle Port werfen neuer notaserialport (); }} catch (NoSuchportException e1) {throw New NoSuchport (); } catch (portinusexception e2) {throw New Portinuse (); }} / *** Schließen Sie den seriellen Port** @param serialport* serielles Port -Objekt, das geschlossen werden soll serialport = null; }} / *** Daten an den seriellen Port senden** @param serialport* Serial Port -Objekt* @param order* Daten zugesandt* @Throws SendDatatoSerialPortFailure* Versäumnis, Daten an den seriellen Port zu senden löscht sendDatatoSerialPortFailure, SerialportputStreamCloseFailure {outputStream out = null; try {out = serialport.getOutputStream (); out.write (order); out.flush (); } catch (ioException e) {throw New sendDatatoSerialPortFailure (); } endlich {try {if (out! = null) {out.close (); out = null; }} catch (ioException e) {neue SerialportputStreamClosefailure () werfen; }}} / *** Daten aus dem seriellen Port lesen** @param serialport* Das Serialport -Objekt mit der aktuell festgelegten Verbindung* @return Die Daten lesen* @throwsDatafromSerialPortFailure* Es ist ein Fehler beim Lesen von Daten aus dem Seriennport* @Throws SerialportInputStreamCloteFaile* Ein Fehler. ReadFromport (Serialport Serialport) löst ReadDatafromSerialPortFailure, serialportInputStreamClosefailure {InputStream in = null; byte [] bytes = null; try {in = serialport.getInputStream (); // Die Datenlänge in der Buffer bufflenth = in.Available () erhalten; while (bufflenth! in.read (Bytes); bufflenth = in.Available (); }} catch (ioException e) {neue readDatafromSerialPortfailure () werfen; } endlich {try {if (in! = null) {in.close (); in = null; }} catch (ioException e) {neue SerialportInputStreamClosefailure () werfen; }} return bytes; } / ** * Hörer hinzufügen * * @param port * Serial Port -Objekt * @param Hörer * Serienhörer * @throws toomanylistener * toomanylistener * toomylistener zu viele Hörklassenobjekte port.addeventListener (Hörer); // Setzen Sie den Thread des Weckhörs Empfang, wenn Daten port ankommen. // Setzen Sie den Wake-up Interrupt-Thread, wenn die Kommunikation unterbrochen wird. } catch (toomanylistenersException e) {werfen toomanylisteners (); }}}4. Programm Hauptfenster
/ * * Mainframe.java * * erstellt am 2016.8.19 */package com.yang.serialport.ui; import gnu.io.Serialport; import gnu.io.SerialPorpent; Java.awt.event.ActionEvent; Import Java.awt.event.ActionListener; Import Java.util.List; Import Javax.swing.Borderfactory; javax.swing.jpanel; import javax.swing.jscrollpane; import javax.swing.jtextarea; import javax.swing.jtextfield; import com.yang.Serialport.exception.Exception.NoSuchport; Imporation.Serialport.Exception.Exception.Noterialport; com.yang.serialport.exception.SendDatatoSerialPortFailure; Import com.yang.Serialport.Exception.SerialPortputStreamClosefailure; Import com.yang.Serialport.Exception.SerialPortParameterFailure; Import Com.yang.Serialport.Except. com.yang.Serialport.Manage.SerialPortManager; import com.yang.serialport.utils.Byteutils; import com.yang.Serialport / *** Programmschnittstellenhöhe*/ öffentliches statisches endgültiges int Höhe = 360; private jTextArea dataview = new JTextArea (); private jScrollPane scroldataview = new JScrollPane (Dataview); // Seriennort -Einstellungen Panel Private JPanel SerialportPanel = new Jpanel (); Private JLabel SerialportLabel = new JLabel ("Serienport"); private jlabel Baudratelabel = new Jlabel ("BauDrate"); private jcombobox commkoice = new JcomBobox (); private jcombobox BaudRatechoice = new jcomBobox (); // Operation Panel Private JPanel OperationPanel = new JPanel (); private jTextfield dataNput = new JTextField (); Private Jbutton Serialportoperate = New Jbutton ("Open Serial Port"); Private Jbutton sendData = new Jbutton ("Daten senden"); private list <string> commlist = null; Privates Serialport Serialport; public mainframe () {initView (); initcomponents (); ActionListener (); initdata (); } private void initView () {// Schließen Sie das Programm setDefaultCloseOperation (javax.swing.windowconstants.exit_on_close); // Verbot der Fenstermaximierung setResizable (false); // Setzen Sie das Programmfenster auf den Mittelpunkt p = graphicsumvironment.getLocalGraphicsumvironment () .getCenterPoint (); Setbounds (PX - Breite / 2, Py - Höhe / 2, Breite, Höhe); this.setLayout (null); Settitle ("Serienkommunikation"); } private void initComponents () {// data dataView.setfocuSable (false); scroldataview.setBounds (10, 10, 475, 200); add (scroldataview); // serialportpanel.setBorder (BorderFactory.CreateTitledBorder ("Serialportset")); serialportpanel.setBounds (10, 220, 170, 100); serialportpanel.setLayout (null); add (serialportpanel); serialportlabel.setforenground (color.gray); serialportlabel.setBounds (10, 25, 40, 20); serialportpanel.add (Serialportlabel); commcoice.setFocuSable (falsch); commkoice.setBounds (60, 25, 100, 20); serialportpanel.add (commkoice); Baudratelabel.setforenground (color.gray); Baudratelabel.SetBounds (10, 60, 40, 20); serialportpanel.add (Baudratelabel); BauDratechoice.setFocuSable (falsch); Baudratechoice.Setbounds (60, 60, 100, 20); serialportpanel.add (Baudratechoice); // Operation OperationPanel.SetBounds (200, 220, 285, 100); OperationPanel.SetLayout (NULL); add (OperationPanel); DataNput.SetBounds (25, 25, 235, 20); operationPanel.add (DataNput); serialportoperate.setFocuSable (falsch); serialportoperate.setbounds (45, 60, 90, 20); OperationPanel.Add (Serialportoperate); sendData.setFocuSable (falsch); sendData.setBounds (155, 60, 90, 20); operationPanel.add (sendData); } @SuppressWarnings ("deaktiviert") private void initdata () {commist = serialportManager.findport (); // Überprüfen Sie, ob ein serieller Port vorhanden ist, und fügen Sie ihn der Option hinzu, wenn (commlist == null || commist.size () <1) {showutils.warningMessage ("Kein gültiger serieller Port wurde gefunden!"); } else {for (string s: commlist) {commcoice.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 ("Open Serial -Port" .Equals (Serialportoperat.GetText ()) && serialport == null) {OpenSerialPort (E) {Openserial (E) {Openserial (E) {{OpenSerialPort (E); }); sendData.addactionListener (new ActionListener () {@Override public void actionPerformed (actionEvent e) {sendData (e);}}); } / *** SERIAL -Port öffnen** @param evt* klicken Sie auf Ereignis* / private void OpenSerialport (java.awt.event.ActionEvent evt) {// den seriellen Portnamen String Commname = (String) commkoice.getSelectedem (); // den Baud Rate int baudrate = 9600 erhalten; String bps = (String) BauDratechoice.getSelectedItem (); BauDrate = Integer.ParseInt (BPS); // Überprüfen Sie, ob der Name des seriellen Ports korrekt ist, wenn (commname == null || commname.equals ("")) {showutils.WarningMessage ("Kein gültiger serieller Port wurde gefunden!"); } else {try {serialport = serialportManager.openport (commname, BauDrate); if (serialport! serialportoperate.setText ("schließen Serialport"); }} catch (SerialPortParameterFailure e) {e.printstacktrace (); } catch (nosuchport e) {e.printstacktrace (); } catch (portinuse e) {e.printstacktrace (); Showutils.WarningMessage ("Der serielle Hafen wurde besetzt!"); }} try {serialportManager.addListener (Serialport, New SerialListener ()); } catch (toomanylistener e) {e.printstacktrace (); }} / *** Schließen Sie den seriellen Port** @param evt* klicken Sie auf Ereignis* / private void closseserialport (java.awt.event.ActionEvent evt) {serialportManager.closeport (serialport); Dataview.setText ("Seriell Port ist geschlossen" + "/r/n"); serialportoperate.setText ("offener serieller Port"); } / *** Daten senden** @param evt* klicken Sie auf Ereignis* / private void sendData (java.awt.event.actionEvent evt) {// Hexadezimalzeichen direkt im Eingabefeld eingeben, die Länge muss sogar String Data = datainput.getText (). TOStren () sein; try {serialportManager.sendToport (Serialport, byteutils.hexstr2Byte (data)); } catch (sendDatatoSerialPortFailure e) {e.printstacktrace (); } catch (serialportoutputStreamCloseFailure e) {e.printstacktrace (); }} private class SerialListener implementiert SerialPortEventListener { / *** Überwachte serielle Port -Ereignisse* / public void serilevent (serialPortEvent serialPortEvent) {switch (serialPortEvent.geventType ()) {case serialPortEvent.bi: // 10 Kommunikation unterruppt. brechen; Fall serialPortEvent.oe: // 7 Überlauf (Überlauf) Fehlerfall serialPortEvent.fe: // 9 Frame Fehler Fall SerialPortEvent.pe: // 8 Paritätsfehler Fall SerialPortEvent.cd: // 6 Carrier Detection Fall SerialPortEvent.CTS: // 3 klare serialer Indikationsfall serialPortEvent.output_Buffer_Empty: // 2 Der Ausgangspuffer wurde gelöscht; Fall serialPorteVent.data_available: // 1 verfügbare Daten sind auf dem seriellen Port -Byte [] data = NULL vorhanden; try {if (serialport == null) {showutils.errormessage ("Das serielle Portobjekt ist leer! Überwachung fehlgeschlagen!"); } else {// Lesen von seriellen Portdaten = serialportManager.readfromport (Serialport); Dataview.Append (byteutils.BytearrayTohexString (Daten, true) + "/r/n"); }} catch (Ausnahme e) {showutils.errormessage (e.toString ()); // das System beenden, nachdem ein Fehler angezeigt wird, wenn ein Lesefehler auftritt, system.exit (0); } brechen; }}} public static void main (String args []) {java.awt.eventqueue.invokelater (new Runnable () {public void run () {new mainframe (). setvisible (true);}}); }}5. am Ende geschrieben
Quellcode -Download -Adresse: SerialportDemo
Die Schüler können sich gerne beschweren und kommentieren. Wenn Sie der Meinung sind, dass dieser Blog für Sie nützlich ist, hinterlassen Sie eine Nachricht oder geben Sie ihm einen Kommentar (^-^).
Danke: Schreiben serieller Kommunikationstools basierend auf Java
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.