Java利用串口编程技术操作继电器(二)

2014-11-23 17:52:29 · 作者: · 浏览: 51
()); } 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