`
jetway
  • 浏览: 473420 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

实用的java 串口通信程序

    博客分类:
  • java
阅读更多

实用的java 串口通信程序
/******************************************
* 程序文件名称:SendComm.java
* 功能:从串行口COM1中发送数据
******************************************/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.comm.*;

class S_Frame extends Frame implements Runnable,ActionListener
{
/*检测系统中可用的通讯端口类 */
static CommPortIdentifier portId;
/*Enumeration 为枚举型类,在util中 */
static Enumeration portList;
OutputStream outputStream;
/*RS-232的串行口 */
SerialPort serialPort;
Thread readThread;
Panel p=new Panel();
TextField in_message=new TextField("打开COM1,波特率9600,数据位8,停止位1.");
TextArea out_message=new TextArea();
Button btnOpen=new Button("打开串口, 发送数据");
Button btnClose=new Button("关闭串口, 停止发送数据");
byte data[]=new byte[10240];
/*设置判断要是否关闭串口的标志*/
boolean mark;

/*安排窗体*/
S_Frame()
{ super("串口发送数据");
setSize(200,200);
setVisible(true);
add(out_message,"Center");
add(p,"North");
p.add(btnOpen);
p.add(btnClose);
add(in_message,"South");
btnOpen.addActionListener(this);
btnClose.addActionListener(this);
} //R_Frame() end

/*点击按扭打开串口.*/
public void actionPerformed(ActionEvent event) {
if (event.getSource()==btnClose){
serialPort.close(); //关闭串口
mark=true; //用于中止线程的run()方法
in_message.setText("串口COM1已经关闭,停止发送数据.");
}
else { mark=false;
/*从文本区按字节读取数据*/
data=out_message.getText().getBytes();
/*打开串口*/
start();
in_message.setText("串口COM1已经打开,正在每2秒钟发送一次数据.....");
}
} //actionPerformed() end

/*打开串口,并调用线程发送数据*/
public void start(){
/*获取系统中所有的通讯端口 */
portList=CommPortIdentifier.getPortIdentifiers();
/* 用循环结构找出串口 */
while (portList.hasMoreElements()){
/*强制转换为通讯端口类型*/
portId=(CommPortIdentifier)portList.nextElement();
if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){
if (portId.getName().equals("COM1")) {
/*打开串口 */
try {
serialPort = (SerialPort) portId.open("ReadComm", 2000);
}
catch (PortInUseException e) { }
/*设置串口输出流*/
try {
outputStream = serialPort.getOutputStream();
}
catch (IOException e) {}
} //if end
} //if end
} //while end
/*调用线程发送数据*/
try{
readThread = new Thread(this);
//线程负责每发送一次数据,休眠2秒钟
readThread.start();
}
catch (Exception e) { }
} //start() end

/*发送数据,休眠2秒钟后重发*/
public void run() {
/*设置串口通讯参数*/
try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
}
catch (UnsupportedCommOperationException e) { }
/*发送数据流(将数组data[]中的数据发送出去)*/
try {
outputStream.write(data);
}
catch (IOException e) { }
/*发送数据后休眠2秒钟,然后再重发*/
try { Thread.sleep(2000);
if (mark)
{return; //结束run方法,导致线程死亡
}
start();
}
catch (InterruptedException e) { }
} //run() end
} //类S_Frame end

public class SendComm
{public static void main(String args[])
{ S_Frame S_win=new S_Frame();
S_win.addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e)
{System.exit(0); }
});
S_win.pack();
}
}


/******************************************
* 程序文件名称:ReadComm.java
* 功能:从串行口COM1中接收数据
******************************************/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.comm.*;

class R_Frame extends Frame implements Runnable,ActionListener,SerialPortEventListener
{
/* 检测系统中可用的通讯端口类 */
static CommPortIdentifier portId;
/* Enumeration 为枚举型类,在java.util中 */
static Enumeration portList;
InputStream inputStream;
/* 声明RS-232串行端口的成员变量 */
SerialPort serialPort;
Thread readThread;
String str="";
TextField out_message=new TextField("上面文本框显示接收到的数据");
TextArea in_message=new TextArea();
Button btnOpen=new Button("打开串口");

/*建立窗体*/
R_Frame()
{
super("串口接收数据");
setSize(200,200);
setVisible(true);
btnOpen.addActionListener(this);
add(out_message,"South");
add(in_message,"Center");
add(btnOpen,"North");
} //R_Frame() end

/*点击按扭所触发的事件:打开串口,并监听串口. */
public void actionPerformed(ActionEvent event)
{
/*获取系统中所有的通讯端口 */
portList=CommPortIdentifier.getPortIdentifiers();
/* 用循环结构找出串口 */
while (portList.hasMoreElements()){
/*强制转换为通讯端口类型*/
portId=(CommPortIdentifier)portList.nextElement();
if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){
if (portId.getName().equals("COM1")) {
try {
serialPort = (SerialPort) portId.open("ReadComm", 2000);
out_message.setText("已打开端口COM1 ,正在接收数据..... ");
}
catch (PortInUseException e) { }

/*设置串口监听器*/
try {
serialPort.addEventListener(this);
}
catch (TooManyListenersException e) { }
/* 侦听到串口有数据,触发串口事件*/
serialPort.notifyOnDataAvailable(true);
} //if end
} //if end
} //while end
readThread = new Thread(this);
readThread.start(); //线程负责每接收一次数据休眠20秒钟
} //actionPerformed() end

/*接收数据后休眠20秒钟*/
public void run() {
try {
Thread.sleep(20000);
}
catch (InterruptedException e) { }
} //run() end

/*串口监听器触发的事件,设置串口通讯参数,读取数据并写到文本区中*/
public void serialEvent(SerialPortEvent event) {
/*设置串口通讯参数:波特率、数据位、停止位、奇偶校验*/
try {
serialPort.setSerialPortParams(9600,
  SerialPort.DATABITS_8,
  SerialPort.STOPBITS_1,
  SerialPort.PARITY_NONE);
}
catch (UnsupportedCommOperationException e) {   }
byte[] readBuffer = new byte[20];
try {
inputStream = serialPort.getInputStream();
}
catch (IOException e) {}
try {
   /* 从线路上读取数据流 */
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
} //while end
str=new String(readBuffer);
/*接收到的数据存放到文本区中*/
in_message.append(str+"\n");
}
catch (IOException e) { }
} //serialEvent() end
} //类R_Frame end

public class ReadComm
{
public static void main(String args[])
{
/* 实例化接收串口数据的窗体类 */
R_Frame R_win=new R_Frame();
/* 定义窗体适配器的关闭按钮功能 */
R_win.addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e)
{System.exit(0); }
});
R_win.pack();
}
}
分享到:
评论
1 楼 zyzyzy123 2015-12-23  
请问有工程吗,我现在正在实现打电话的功能,但是一直不通,怀疑是没有设置数据位的问题,谢谢

相关推荐

    Java串口通信程序

    Java串口通信程序 对于JVM来说,要正确的识别串口,将这几个文件放在系统中合适的位置使很重要的。 comm..jar应该放在以下目录中 %JAVA_HOME%/lib %JAVA_HOME%/jre/lib/ext win32com.dll应该放在以下目录中

    linux系统下用java开发串口通信程序.rar

    Linux系统下用Java开发串口通信程序的类库,从Arduino的IDE中扒出来的,比官方的更加好用,Bug少,支持Arduino设备与Linux之间的串口通信;Linux系统下用Java开发串口通信程序的类库,从Arduino的IDE中扒出来的,比...

    Java串口通信程序(程序及注释)可编译运行[归类].pdf

    Java串口通信程序(程序及注释)可编译运行[归类].pdf

    java串口通信及例子程序

    java串口通信及例子程序java串口通信及例子程序java串口通信及例子程序java串口通信及例子程序java串口通信及例子程序java串口通信及例子程序

    java串口通信程序

    java语言编写的串口程序,同时利用java的GUI实现界面化

    Java串口通讯程序

    这是用Java编写的一些串口通讯程序,有需要的自己下一下!

    java 串口通讯 rs232

    eclipse导入可以直接运行 测试代码在Test.java文件中

    Java串口通信程序程序及注释可编译运行.pdf

    Java串口通信程序程序及注释可编译运行.pdf

    JAVA串口通信程序(windows)

    本程序有详细的注释,包含功能:可以设置数据位、停止位、奇偶校验等,可以搜索串口,并选择串口,接受串口来的数据以及发送数据。...请注意:在导入工程后,可能需要JAVA串口驱动包--commapi,已经打包在一起了。

    java串口通信

    java串口通信实例,仅供大家学习参考。Java串口,本实例大致工作流程是:将以下的所有java类都放在一个包下面,run as ---java application ,打开的是一个图形化界面,最上面的是一个输入文本框(也就是你要发射的...

    Java语言在西门子PLC串口通信程序中的应用

    可编程控制器(PLC)是一种数字运算操作的电子系统,专为在...近年来,Java语言在串口通信程序设计方面,也有了重要应用。以西门子公司生产的S7-200型PLC为基础,给出了PLC与计算机通讯时上位机和下位机之间相应的简单程序。

    Java串口通信程序详解

    Java串口通信发生大幅多少发生的发生的发生的发生的发生

    JAVA串口程序源码

    JAVA串口程序源码,可以通过串口进行数据的发送与接收

    笔记本ubuntu系统Java开发串口程序

    个人精心搜集编写的,针对笔记本没有串口的情况下在ubuntu系统中开发串口通讯程序的例子,包括环境配置和例子程序,绝对经典

    Java串口通信RXTX程序

    Java串口通信RXTX程序(serialPort.rar),对tangjunchf的程序有点改动,将输出曲线部分改成串口信息打印。1. 能够接受下位机数据。 2. 保存接受的数据。 3. 把接收到合法的数据打印出来 4. 能够发送数据。 5. ...

    java串口通信官网例子程序

    java串口通信官网例子程序 压缩包是一个java串品通信的例子,如果对java串口通信有兴趣可以下载后改写里面的代码,做自子的开发

    Java串口通信RXTX程序(serialPort.rar)

    Java串口通信RXTX程序(serialPort.rar),对tangjunchf的程序有点改动,将输出曲线部分改成串口信息打印。1. 能够接受下位机数据。 2. 保存接受的数据。 3. 把接收到合法的数据打印出来 4. 能够发送数据。 5. 程序...

    java串口通讯 短信测试 comm编程 PDU编码 进制转换 AT命令

    KEIL中如何用虚拟串口调试串口程序.doc Message PDU编码规则.doc QHDQ-29DDDAD3A0.LOG SMSLib串口通信.doc 串口常用参数.doc 关于java使用javacomm20.doc 常见的进制转换方法.doc 浅谈Java串行端口技术协议.doc 短信...

    Mac 创建虚拟串口 Java 程序让 RXTXcomm 使用

    Mac 在创建虚拟串口上没有 Windows 方便,windows 有 VSPD 用起来非常方便,但是 Mac 就没有那么方便了,本 java 程序基于 socat 和 jdk8,可以自动创建一对虚拟串口,以供 RXTX comm 调试使用

Global site tag (gtag.js) - Google Analytics