欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

java 串口編程

系統 1852 0

通過JAVA與串口(RS232)通信實例

文章分類: Java編程 關鍵字: java com 串口 rs232

最近了解到的需求是需要需激光打刻機進行(RS232)串口通信,
這里使用的是RXTX開源包實現的。
之前并沒有用java做過串口通信,而且這方面資料不是很多。
項目實際應用中可能會采用VB開發(這個我就不會了)

只不過用java嘗試一下,記個筆記,希望可以對相關開發用些幫助。

下面是實現代碼
Java代碼 復制代碼
  1. package ?test; ??
  2. ??
  3. import ?java.io.IOException; ??
  4. import ?java.io.InputStream; ??
  5. import ?java.io.InputStreamReader; ??
  6. import ?java.io.OutputStream; ??
  7. import ?java.util.Date; ??
  8. import ?java.util.Enumeration; ??
  9. import ?java.util.TooManyListenersException; ??
  10. ??
  11. import ?gnu.io.CommPortIdentifier; ??
  12. import ?gnu.io.PortInUseException; ??
  13. import ?gnu.io.SerialPort; ??
  14. import ?gnu.io.SerialPortEvent; ??
  15. import ?gnu.io.SerialPortEventListener; ??
  16. import ?gnu.io.UnsupportedCommOperationException; ??
  17. ??
  18. public ? class ?CommUtil? implements ?SerialPortEventListener?{ ??
  19. ??
  20. ????InputStream?inputStream;? //?從串口來的輸入流 ??
  21. ????OutputStream?outputStream; //?向串口輸出的流 ??
  22. ????SerialPort?serialPort;? //?串口的引用 ??
  23. ????CommPortIdentifier?portId; ??
  24. ??
  25. ???? public ?CommUtil(Enumeration?portList,?String?name)?{ ??
  26. ???????? while ?(portList.hasMoreElements())?{ ??
  27. ????????????CommPortIdentifier?temp?=?(CommPortIdentifier)?portList.nextElement(); ??
  28. ???????????? if ?(temp.getPortType()?==?CommPortIdentifier.PORT_SERIAL)?{ //?判斷如果端口類型是串口 ??
  29. ???????????????? if ?(temp.getName().equals(name))?{? //?判斷如果端口已經啟動就連接 ??
  30. ????????????????????portId?=?temp; ??
  31. ????????????????} ??
  32. ????????????} ??
  33. ????????} ??
  34. ???????? try ?{ ??
  35. ????????????serialPort?=?(SerialPort)?portId.open( "My" +name,? 2000 ); ??
  36. ????????}? catch ?(PortInUseException?e)?{ ??
  37. ??
  38. ????????} ??
  39. ???????? try ?{ ??
  40. ????????????inputStream?=?serialPort.getInputStream(); ??
  41. ????????????outputStream?=?serialPort.getOutputStream(); ??
  42. ????????}? catch ?(IOException?e)?{ ??
  43. ????????} ??
  44. ???????? try ?{ ??
  45. ????????????serialPort.addEventListener( this );? //?給當前串口天加一個監聽器 ??
  46. ????????}? catch ?(TooManyListenersException?e)?{ ??
  47. ????????} ??
  48. ????????serialPort.notifyOnDataAvailable( true );? //?當有數據時通知 ??
  49. ???????? try ?{ ??
  50. ????????????serialPort.setSerialPortParams( 2400 ,?SerialPort.DATABITS_8,? //?設置串口讀寫參數 ??
  51. ????????????????????SerialPort.STOPBITS_1,?SerialPort.PARITY_NONE); ??
  52. ????????}? catch ?(UnsupportedCommOperationException?e)?{ ??
  53. ????????} ??
  54. ????} ??
  55. ??
  56. ???? public ? void ?serialEvent(SerialPortEvent?event)?{ ??
  57. ???????? switch ?(event.getEventType())?{ ??
  58. ???????? case ?SerialPortEvent.BI: ??
  59. ???????? case ?SerialPortEvent.OE: ??
  60. ???????? case ?SerialPortEvent.FE: ??
  61. ???????? case ?SerialPortEvent.PE: ??
  62. ???????? case ?SerialPortEvent.CD: ??
  63. ???????? case ?SerialPortEvent.CTS: ??
  64. ???????? case ?SerialPortEvent.DSR: ??
  65. ???????? case ?SerialPortEvent.RI: ??
  66. ???????? case ?SerialPortEvent.OUTPUT_BUFFER_EMPTY: ??
  67. ???????????? break ; ??
  68. ???????? ??
  69. ???????? case ?SerialPortEvent.DATA_AVAILABLE: //?當有可用數據時讀取數據,并且給串口返回數據 ??
  70. ???????????? byte []?readBuffer?=? new ? byte [ 20 ]; ??
  71. ??
  72. ???????????? try ?{ ??
  73. ???????????????? while ?(inputStream.available()?>? 0 )?{ ??
  74. ????????????????????System.out.println(inputStream.available()); ??
  75. ???????????????????? int ?numBytes?=?inputStream.read(readBuffer); ??
  76. ????????????????????System.out.println(numBytes); ??
  77. ????????????????} ??
  78. ????????????????System.out.println( new ?String(readBuffer).trim()); ??
  79. ????????????}? catch ?(IOException?e)?{ ??
  80. ????????????????e.printStackTrace(); ??
  81. ????????????} ??
  82. ???????????? break ; ??
  83. ????????} ??
  84. ????} ??
  85. ???? public ? void ?send(String?content){ ??
  86. ???????? try ?{ ??
  87. ????????????outputStream.write(content.getBytes()); ??
  88. ????????}? catch ?(IOException?e)?{ ??
  89. ????????????e.printStackTrace(); ??
  90. ????????} ??
  91. ????} ??
  92. ???? ??
  93. ???? public ? void ?ClosePort()?{ ??
  94. ???????? if ?(serialPort?!=? null )?{ ??
  95. ??????????serialPort.close(); ??
  96. ????????} ??
  97. ??????} ??
  98. ??
  99. ???? ??
  100. }??
      package test;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Date;
import java.util.Enumeration;
import java.util.TooManyListenersException;

import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;

public class CommUtil implements SerialPortEventListener {

	InputStream inputStream; // 從串口來的輸入流
	OutputStream outputStream;// 向串口輸出的流
	SerialPort serialPort; // 串口的引用
	CommPortIdentifier portId;

	public CommUtil(Enumeration portList, String name) {
		while (portList.hasMoreElements()) {
			CommPortIdentifier temp = (CommPortIdentifier) portList.nextElement();
			if (temp.getPortType() == CommPortIdentifier.PORT_SERIAL) {// 判斷如果端口類型是串口
				if (temp.getName().equals(name)) { // 判斷如果端口已經啟動就連接
					portId = temp;
				}
			}
		}
		try {
			serialPort = (SerialPort) portId.open("My"+name, 2000);
		} catch (PortInUseException e) {

		}
		try {
			inputStream = serialPort.getInputStream();
			outputStream = serialPort.getOutputStream();
		} catch (IOException e) {
		}
		try {
			serialPort.addEventListener(this); // 給當前串口天加一個監聽器
		} catch (TooManyListenersException e) {
		}
		serialPort.notifyOnDataAvailable(true); // 當有數據時通知
		try {
			serialPort.setSerialPortParams(2400, SerialPort.DATABITS_8, // 設置串口讀寫參數
					SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
		} catch (UnsupportedCommOperationException e) {
		}
	}

	public void serialEvent(SerialPortEvent event) {
		switch (event.getEventType()) {
		case SerialPortEvent.BI:
		case SerialPortEvent.OE:
		case SerialPortEvent.FE:
		case SerialPortEvent.PE:
		case SerialPortEvent.CD:
		case SerialPortEvent.CTS:
		case SerialPortEvent.DSR:
		case SerialPortEvent.RI:
		case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
			break;
		
		case SerialPortEvent.DATA_AVAILABLE:// 當有可用數據時讀取數據,并且給串口返回數據
			byte[] readBuffer = new byte[20];

			try {
				while (inputStream.available() > 0) {
					System.out.println(inputStream.available());
					int numBytes = inputStream.read(readBuffer);
					System.out.println(numBytes);
				}
				System.out.println(new String(readBuffer).trim());
			} catch (IOException e) {
				e.printStackTrace();
			}
			break;
		}
	}
	public void send(String content){
		try {
			outputStream.write(content.getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void ClosePort() {
	    if (serialPort != null) {
	      serialPort.close();
	    }
	  }

	
}


    


測試
Java代碼 復制代碼
  1. package ?test; ??
  2. ??
  3. import ?gnu.io.CommPortIdentifier; ??
  4. ??
  5. import ?java.util.Enumeration; ??
  6. ??
  7. public ? class ?Test?{ ??
  8. ??
  9. ???? public ? static ? void ?main(String[]?args)? throws ?InterruptedException?{ ??
  10. ????????Enumeration?portList?=?CommPortIdentifier.getPortIdentifiers();? //得到當前連接上的端口 ??
  11. ???????? ??
  12. ????????CommUtil?comm3?=? new ?CommUtil(portList, "COM3" ); ??
  13. ???????? int ?i?=? 0 ; ??
  14. ???????? while (i< 5 ) ??
  15. ????????{ ??
  16. ????????????Thread.sleep( 3000 ); ??
  17. ????????????comm3.send( "hello" ); ??
  18. ????????????i++; ??
  19. ????????} ??
  20. ????????comm3.ClosePort(); ??
  21. ????} ??
  22. ??
  23. }??
      package test;

import gnu.io.CommPortIdentifier;

import java.util.Enumeration;

public class Test {

	public static void main(String[] args) throws InterruptedException {
		Enumeration portList = CommPortIdentifier.getPortIdentifiers(); //得到當前連接上的端口
		
		CommUtil comm3 = new CommUtil(portList,"COM3");
		int i = 0;
		while(i<5)
		{
			Thread.sleep(3000);
			comm3.send("hello");
			i++;
		}
		comm3.ClosePort();
	}

}

    

?

java 串口編程


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产中文视频 | 精品卡1卡二卡3卡 | 免费久久精品国产片香蕉 | 国产精品国产精品国产专区不卡 | 狠狠操电影 | 成人毛片视频在线播放 | 亚洲国产午夜精品乱码 | 久久一区二区三区四区 | 香蕉久| 久久99国产精一区二区三区 | 麻豆精品传媒一二三区在线视频 | 九九久久精品这里久久网 | 精品午夜久久网成年网 | 久草网站 | 黄色免费av| 999精品免费视频观看 | 97国产精品人妻无码久久久 | 97色伦网| 国产色婷婷视频在线观看 | 浮力影院最新地址 | av在线一区二区三区 | 欧洲精品色 | 午夜激情视频免费 | 九热精品 | 精品一区二区三区网站 | 香蕉视频观看 | 欧美激情在线观看一区二区三区 | 国产视频一 | 99je全部都是精品视频在线 | 亚洲精品在线第一页 | 国产精品亚洲综合第一区 | 精品中文字幕在线观看 | 久久夜色精品国产亚洲噜噜 | 九九毛片 | 婷婷97狠狠的狠狠的爱 | 日本中文字幕网站 | 艹逼网 | 国产精品丝袜视频 | 青娱乐免费视频观看 | 日韩欧美在线视频不卡免费视频 | 欧美一区二区三区四区视频 |