rs232串口定义 通过JAVA与串口(RS232)通信实例
通过JAVA与串口(RS232)通信实例
最近了解到的需求是需要需激光打刻机进行(RS )串口通信 这里使用的是RXTX开源包实现的
之前并没有用java做过串口通信 而且这方面资料不是很多
项目实际应用中可能会采用VB开发(这个我就不会了)
只不过用java尝试一下 记个笔记 希望可以对相关开发用些帮助
下面是实现代码
Java代码
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 );
} 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( SerialPort DATABITS_ // 设置串口读写参数
SerialPort STOPBITS_ 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[ ];
try {
while (inputStream available() > ) {
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代码
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 m = new CommUtil(portList );
int i = ;
while(i< )
{
Thread sleep( );
m send( hello );
i++;
}
m ClosePort();
}
lishixinzhi/Article/program/Java/hx/201311/25965