Artikel ini membagikan kode spesifik untuk Java untuk mengimplementasikan komunikasi serial untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
1. Pendahuluan
Program komunikasi serial yang diimplementasikan oleh Java mendukung pengiriman dan penerimaan data heksadesimal.
Kode Sumber: SerialportDemo
Rendering adalah sebagai berikut:
2.RXTXCOMM
Java Serial Communication Dependency Paket JAR RXTXCOMM.JAR
Alamat unduhan: http://download.csdn.net/detail/kong_gu_you_lan/9611334
Termasuk penggunaan versi 32-bit dan 64-bit:
Salin rxtxcomm.jar ke direktori java_home/jre/lib/ext;
Salin rxtxserial.dll ke direktori java_home/jre/bin;
Salin rxtxparallel.dll ke direktori java_home/jre/bin;
Java_home adalah jalur instalasi JDK
3. Manajemen Komunikasi Port Serial
SerialportManager mengimplementasikan manajemen komunikasi port serial, termasuk menemukan port yang tersedia, membuka dan menutup port serial, dan mengirim dan menerima data.
Paket com.yang.serialport.Manage; import gnu.io.commport; impor gnu.io.CommportIdentifier; impor gnu.io.nosuchportexception; impor gnu.io.portinusexception; impor gnu.io.serialport; impor gnu.io.serialporteVentenerer; impor GnUccepporporporporporporporporporporporporporporter; java.io.ioException; impor java.io.inputstream; impor java.out.outputStream; import java.util.arraylist; impor java.util.enumeration; impor java.util.toomanylistenersException; impor com.yang.serialport. exception.nosuchport; com.yang.serialport.exception.notaserialport; impor com.yang.serialport.exception.portinuse; import com.yang.serialport.exception.readdatafromserialportfailure; impor com.yang. com.yang.serialport.exception.serialportInputStreamCloseFailure; impor com.yang.serialport.exception.serialportOutputStreamCloseFailure; impor com.yang.serialport.exception.serialportparameterfailure; impor com.yang.serialport.exception.exceptionparameterfailure; impor com.yang.serialport.exception.exceptionparameterfailure; impor com.yang.serialport.Exception.exceptParameterfailure; impor com.yang.serialport.exception. @Author yangle*/kelas publik SerialportManager {/*** Temukan semua port yang tersedia** @return Daftar nama port yang tersedia*/@suppresswarnings ("Uncecked") Public Static Final ArrayList <String> findport () {// Get All Serial Ports yang tersedia saat ini ENUMERASI <PromporIdenIdentifier> Commport = Commport. Commport. ArrayList <String> portnamelist = ArrayList baru <string> (); // Tambahkan nama port serial yang tersedia ke daftar dan kembalikan daftar while (portlist.hasmoreElements ()) {string portName = portlist.nextElement (). GetName (); portnamelist.add (portname); } return portnelist; } /*** Buka port serial** @param portname* nama port* @param baudrate* baud rate* @return objek port serial* @Throws SerialportParameterFailure* Gagal mengatur parameter port serial* @throws noTaserialport* port yang menunjuk ke perangkat bukanlah jenis port serial* @throws noSerialport* port yang menunjuk ke perangkat bukanlah port serial* @throws noserialport* port yang menunjuk ke perangkat bukanlah port serial* @throws noSoSuchport* port yang menunjuk ke perangkat bukanlah port serial* @throws noSoCport* port this perangkat bukan jenis port serial* @throws noSoSuchport* port yang menunjuk ke perangkat bukanlah port serial* @throws nosucport* port -noShow* Openport Serialport Terakhir Statis Public Static (String PortName, Int Baudrate) melempar SerialPortParameterFailure, Notaserialport, Nosuchport, Portinuse {try {// Identifikasi port dengan nama port CommPortIdentifier PortIdentifier = CommportIdifier .GetportIdentifier (portName); // buka port, atur nama port dan batas waktu (waktu batas waktu operasi pembukaan) Commport = portIdentifier.open (portname, 2000); // Tentukan apakah itu port serial jika (Commport instance dari Serialport) {serialport serialport = (serialport) commport; coba {// atur baud rate dan parameter lain dari serial port serialport.seterialportParams (baudrate, serialport.databits_8, serialport.stopbits_1, serialport.parity_none); } catch (UnsupportedCommoperationException e) {lempar serialportParameterFailure baru (); } return Serialport; } else {// bukan port serial melempar notaserialport baru (); }} catch (nosuchportException e1) {lempar nosuchport baru (); } catch (portinuseException e2) {lempar portinuse baru (); }} / *** Tutup port serial** @param serialport* Objek port serial yang akan ditutup* / public static void closeport (serialport serialport) {if (serialport! = Null) {serialport.close (); Serialport = null; }} / *** Kirim data ke port serial** @param serialport* Objek port serial* @param pesanan* data yang akan dikirim* @throws sendDataToSerialportFailure* gagal mengirim data ke port serial* @Throws SerialportStreamclosEfailure* Tutup output streaming kesalahan port serial / serialport / soltial porsial outport* tutup output streaming kesalahan port serial / serialport / tyalporty publicort* melempar sendDataToSerialportFailure, serialportOutputStreamCloseFailure {outputStream out = null; coba {out = serialport.getoutputStream (); out.write (pesanan); out.flush (); } catch (ioException e) {lempar SendDataToSerialPortFailure baru (); } akhirnya {coba {if (out! = null) {out.close (); keluar = null; }} catch (ioException e) {lempar serialportOutputStreamCloseFailure baru (); }}} / *** Baca data dari port serial** @param serialport* Objek serialport dengan koneksi yang saat ini ditetapkan* @return data baca* @throws readDataFromserialportFailure* kesalahan yang terjadi saat membaca data port* @throws serialportInputStreamCloseFailure* Sebuah kesalahan wadah saat ini. ReadFortport (Serialport Serialport) melempar readdatafromserialportFailure, serialportInputStreamCloseFailure {inputStream in = null; byte [] bytes = null; coba {in = serialport.getInputStream (); // Dapatkan panjang data int dalam buffer bufflenth = in.available (); while (Bufflenth! = 0) {// inisialisasi array byte ke panjang data dalam bytes buffer = byte baru [BUFFLENTH]; in.read (bytes); Bufflenth = in.available (); }} catch (ioException e) {lempar readdatafromserialportFailure baru (); } akhirnya {coba {if (in! = null) {in.close (); di = null; }} catch (ioException e) {lempar SerialPortInputStreamCloseFailure baru (); }} return byte; } / ** * Tambahkan pendengar * * @param port * Objek port serial * @param listener * Serial port listener * @throws Toomyylisteners * Toomanylisteners * Toomanylistener terlalu banyak objek kelas mendengarkan * / public static addListener (Serialport Port, SerialportEventener Listener) Throwsing static Toomonerer (SerialPort, SerialPortEventener Listener) Throwsing Public MOMANDOMERNER (SERIALPORT, SERIALPORPENTER LENDENTERER LANDEREGER) Throwsery Toomoneren (SerialPort, SerialPortEventener Listener) Throwsing Toomeneryerser {Serialport {SerialPorterener) port.addeventlistener (pendengar); // Atur utas penerima mendengarkan bangun saat data tiba port.notifyondatavailable (true); // Atur utas interupsi bangun ketika komunikasi terputus port.notifyonbreakinterrupt (true); } catch (TOOMANYLISTENERSEXCEPTION E) {lempar TOOMANYLISTENERS (); }}}4. Program Jendela Utama
/ * * Mainframe.java * * dibuat pada 2016.8.19 */package com.yang.serialport.ui; impor gnu.io.serialport; import gnu.ial.serialportEvent; impor gnu.io.serialporteventener; java.awt.event.actionevent; impor java.awt.event.actionlistener; impor java.util.list; import javax.swing.borderfactory; impor javax.swing.jbutton; impor javax.swing.jcombobox; impor javax.swing.jframe; javax.swing.jpanel; import javax.swing.jscrollpane; impor javax.swing.jtextarea; impor javax.swing.jtextfield; impor com.yang.serialport.notasception.nosuchport; import com.yang.serialport.exception.notaserialport; com.yang.serialport.exception.sendDataToSerialportFailure; impor com.yang.serialport.exception.serialportOutputStreamCloseFailure; impor com.yang.serialport.exception.serialportparameterfailure; impor com.yang.serialport.exceptionrepParameterfailure; impor com.yang.serialport.exceptionrepPareMeterfailure; impor com.yang.serialport.exceptpeptionpareMeterfailure; impor com.yang.serialport.exceptpeptionparerfailure; impor com.yang.serialport.exceptionANrEnonSerSerRE; com.yang.serialport.manage.serialportManager; import com.yang.serialport.utils.byteutils; import com.yang.serialport.utils.showutils;/*** antarmuka utama* @author yangle*/mainframe public. / *** Tinggi Antarmuka Program*/ Public Static Final Int Height = 360; private jTextArea dataView = new jTextAreA (); scrollDataview jscrollpane pribadi = jscrollpane baru (dataview); // Panel Pengaturan Port Serial Private Jpanel SerialportPanel = JPanel baru (); Private Jlabel SerialportLabel = baru jlabel ("port serial"); Private Jlabel Baudratelabel = Jlabel baru ("Baudrate"); private jcomboBox commchoice = new jcombobox (); private jcombobox baudratechoice = new jcombobox (); // Panel Operasi Private JPanel OperatePanel = new jpanel (); private jTextField datainput = new jTextField (); Private JButton SerialPortOperate = New JButton ("Open Serial Port"); Private JButton SendData = JButton baru ("Kirim Data"); Daftar Pribadi <String> CommList = NULL; Serialport Serialport Pribadi; mainframe publik () {initview (); initcomponents (); actionListener (); initdata (); } private void initview () {// tutup program setDefaultCloseOperation (javax.swing.windowconstants.exit_on_close); // forbid window maximisasi setResizable (false); // Atur jendela program ke titik tengah p = graphicsEnvironment.getLocalgraphicsEnvironment () .getCenterPoint (); setBounds (px - lebar / 2, py - tinggi / 2, lebar, tinggi); this.setLayout (null); settitle ("komunikasi serial"); } private void initComponents () {// Data Display DataView.SetFocusable (false); scrollDataview.setbounds (10, 10, 475, 200); add (scrollDataview); // serialportpanel.setborder (borderfactory.createTitledborder ("serialportset")); serialportpanel.setbounds (10, 220, 170, 100); serialportpanel.setlayout (null); Tambahkan (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); // operasi operatePanel.setbounds (200, 220, 285, 100); operatePanel.setLayout (null); Tambahkan (OperatePanel); Datainput.setbounds (25, 25, 235, 20); operatePanel.add (datainput); SerialPortoperate.setFocusable (false); SerialPortOperate.setbounds (45, 60, 90, 20); OperatePanel.Add (SerialPortOperate); sendData.setFocusable (false); sendData.setbounds (155, 60, 90, 20); operatePanel.add (sendData); } @SuppressWarnings ("Uncecked") Private Void initData () {commlist = serialportManager.findport (); // Periksa apakah ada port serial, tambahkan ke opsi jika (comlist == null || commlist.size () <1) {showutils.warningmessage ("Tidak ada port serial yang valid ditemukan!"); } 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 (ActionListener baru () {@Override public void actionPerformed (ActionEvent e) {if ("Open Serial Port" .Sequals (SerialPortOperate.GEPTEXT ()) && Serialport == null) {OpenSerialport () (Serialport {OpenSerialport () () {{oPenserial {{o) {{oPenserial {o) {{o) {serialport {{o) }); sendData.AddActionListener (ActionListener baru () {@Override public void actionPerformed (actionEvent e) {sendData (e);}}); } / *** Buka port serial** @param evt* klik acara* / private void openSerialport (java.awt.event.actionevent evt) {// Dapatkan nama port serial string commname = (string) commchoice.getselectedItem (); // Dapatkan baud rate int baudrate = 9600; String bps = (string) baudratechoice.getSelectectedItem (); baudrate = integer.parseint (bps); // Periksa apakah nama port serial benar jika (commname == null || commname.equals ("")) {showutils.warningmessage ("Tidak ada port serial yang valid ditemukan!"); } else {coba {serialport = serialportManager.openport (commname, baudrate); if (serialport! = null) {dataview.setText ("Serialport dihidupkan" + "/r/n"); SerialPortoperate.SetText ("Tutup Serialport"); }} catch (serialportparameterfailure e) {e.printstacktrace (); } catch (nosuchport e) {e.printstacktrace (); } catch (portinuse e) {e.printstacktrace (); Showutils.warningmessage ("Pelabuhan serial telah ditempati!"); }} coba {SerialPortManager.AddListener (serialport, SeriAllistener baru ()); } catch (TOOMANYLISTENERS E) {E.PrintStackTrace (); }} / *** Tutup port serial** @param evt* klik Event* / Private void closeSerialport (java.awt.event.actionevent evt) {serialportManager.closeport (serialport); dataview.setText ("port serial ditutup" + "/r/n"); SerialPortoperate.setText ("Open Serial Port"); } / *** Kirim Data** @param EVT* Klik Event* / Private Void SendData (java.awt.event.actionevent evt) {// masukkan karakter hexadecimal secara langsung di kotak input, panjangnya harus bahkan string data = datainput.getText (). Tostring (); coba {serialportManager.sendtoport (serialport, byteutils.hexstr2byte (data)); } catch (sendDataToSerialportFailure e) {e.printstacktrace (); } catch (serialportOutputStreamCloseFailure e) {e.printstacktrace (); }} kelas pribadi SeriAllistener mengimplementasikan SerialPortEventListener { / *** menangani acara port serial yang dipantau* / public void serialevent (serialportEvent serialportEvent) {switch (SerialportEvent.getEventType ()) {case SerialportEvent.bi: // 10 Communication; "Communication" Communication () {case SerialportEvent.bi: // 10 Communication; "Commun communication" Communication "Communication. merusak; kasus serialportevent.oe: // 7 overflow (overflow) kesalahan kasus serialportevent.fe: // 9 frame error case SerialportEvent.pe: // 8 Parity error case SerialportEvent.cd: // 6 case deteksi serialportevent.cts: / 3 data yang jelas untuk dikirimkan. Kasus Indikasi SerialportEvent.output_buffer_empty: // 2 Buffer output telah dibersihkan; case serialportEvent.data_available: // 1 Data yang tersedia ada pada byte port serial [] data = null; coba {if (serialport == null) {showutils.errormessage ("Objek port serial kosong! Pemantauan gagal!"); } else {// baca data port serial = serialportManager.readfromport (serialport); dataview.append (byteutils.bytearraytoHexString (data, true) + "/r/n"); }} catch (Exception e) {showutils.errormessage (e.toString ()); // Keluar dari sistem setelah menampilkan kesalahan saat kesalahan membaca System.exit (0); } merusak; }}} public static void main (string args []) {java.awt.eventqueue.invokelater (runnable baru () {public void run () {baru mainframe (). setVisible (true);}}); }}5. ditulis di akhir
Alamat Unduh Kode Sumber: SerialportDemo
Siswa dipersilakan untuk mengeluh dan berkomentar. Jika menurut Anda blog ini berguna bagi Anda, maka tinggalkan pesan atau berikan komentar (^-^)
Terima kasih: Menulis alat komunikasi serial berdasarkan java
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.