Java利用串口编程技术操作继电器(二)
());
} catch (IOException e) {
throw new RuntimeException("获取端口的OutputStream出错:" + e.getMessage());
}
try {
outputStream.write(message.getBytes());
log("信息发送成功!");
} catch (IOException e) {
throw new RuntimeException("向端口发送信息时出错:" + e.getMessage());
} finally {
try {
outputStream.close();
} catch (Exception e) {
}
}
}
/**
* @方法名称 :startRead
* @功能描述 :开始监听从端口中接收的数据
* @返回值类型 :void
* @param time
* 监听程序的存活时间,单位为秒,0 则是一直监听
*/
public void startRead(int time) {
checkPort();
try {
inputStream = new BufferedInputStream(serialPort.getInputStream());
} catch (IOException e) {
throw new RuntimeException("获取端口的InputStream出错:" + e.getMessage());
}
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {
throw new RuntimeException(e.getMessage());
}
serialPort.notifyOnDataAvailable(true);
log(String.format("开始监听来自'%1$s'的数据--------------", commPort.getName()));
if (time > 0) {
this.threadTime = time * 10;
Thread t = new Thread(this);
t.start();
log(String.format("监听程序将在%1$d秒后关闭。。。。", threadTime));
}
}
/**
* @方法名称 :close
* @功能描述 :关闭 SerialPort
* @返回值类型 :void
*/
public void close() {
serialPort.close();
serialPort = null;
commPort = null;
}
public void log(String msg) {
System.out.println(appName + " --> " + msg);
}
/**
* 数据接收的监听处理函数
*/
@Override
public void serialEvent(SerialPortEvent arg0) {
switch (arg0.getEventType()) {
case SerialPortEvent.BI:/* Break interrupt,通讯中断 */
case SerialPortEvent.OE:/* Overrun error,溢位错误 */
case SerialPortEvent.FE:/* Framing error,传帧错误 */
case SerialPortEvent.PE:/* Parity error,校验错误 */
case SerialPortEvent.CD:/* Carrier detect,载波检测 */
case SerialPortEvent.CTS:/* Clear to send,清除发送 */
case SerialPortEvent.DSR:/* Data set ready,数据设备就绪 */
case SerialPortEvent.RI:/* Ring indicator,响铃指示 */
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:/*
* Output buffer is
* empty,输出缓冲区清空
*/
break;
case SerialPortEvent.DATA_AVAILABLE:/*
* Data available at the serial
* port,端口有可用数据。读到缓冲数组,输出到终端
*/
byte[] readBuffer = new byte[1024];
String readStr = "";
String s2 = "";
try {
while (inputStream.available() >
0) {
inputStream.read(readBuffer);
readStr += new String(readBuffer).trim();
}
s2 = new String(readBuffer).trim();
log("接收到端口返回数据(长度为" + readStr.length() + "):" + readStr);
log(s2);
} catch (IOException e) {
}
}
}
@Override
public void run() {
try {
Thread.sleep(threadTime);
serialPort.close();
log(String.format("端口''监听关闭了!", commPort.getName()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
还有就是
package com.serial;
public class TestSerial {
public static final String PORT_NAME = "COM1";
public static void main(String[] args) {
DSerialPort sp = new DSerialPort();
sp.listPort();
sp.selectPort(PORT_NAME);
sp.write("O(00,20,0)E");
sp.startRead(5);
}
}
要是在web上使用的话 就要建一web service工程
建议用eclipse j2ee版的,然后建一个web项目
然后创建相同的类放里面,然后再创建一个servlet
package com.serial.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.serial.DSerialPort;
/**
* Servlet implementation class RunServlet
*/
public class RunServlet extends HttpServlet {
private stati