Java怎么labview读取串口数据据

1066人阅读
Java(16)
串口通信(1)
参考,开源中国社区
自己的使用经验:
1.ReadPort()虽然可以提供外部java读取数据,但最好添加一个延时,否则很容易出现读取若干次后程序没有响应,但又不报错的问题。
2.此程序中serialPort.addEventListener(this);有可能会产生触发不了数据接收程序。所以最好在本地建立本程序的实例,然后加载该实例就可以读取到数据了。
SerialBean serialBean = new SerialBean();
serialPort.addEventListener(serialBean);
3.信息的标志位这个还是自定义一下比较好。
import java.io.*;
import java.util.*;
import m.*;
public class SerialBean implements Runnable,SerialPortEventListener
String PortN
CommPortIdentifier portId;
SerialPort serialP
static OutputS
static InputS
String Buf=null;
boolean hasData=false;
StringBuilder buf=new StringBuilder(128);
Thread readT
public SerialBean(int PortID,int baud)
PortName="COM"+PortID;
this.baud=
public int Initialize()
int InitSuccess=1;
int InitFail=-1;
portId=CommPortIdentifier.getPortIdentifier(PortName);
serialPort=(SerialPort)portId.open("Serial_Communication",2000);
serialPort.setSerialPortParams(this.baud,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
catch(PortInUseException e)
return InitF
catch(TooManyListenersException e)
return InitF
catch(UnsupportedCommOperationException e)
return InitF
in=serialPort.getInputStream();
out=serialPort.getOutputStream();
catch(IOException e)
return InitF
catch(NoSuchPortException e)
return InitF
readThread=new Thread(this);
readThread.start();
return InitS
public boolean hasData()
return hasD
public String ReadPort()
if(hasData)
this.hasData=false;
return this.B
return null;
@SuppressWarnings("deprecation")
public void ClosePort()
if(readThread!=null )
readThread.stop();
if(serialPort!=null)
serialPort.close();
public void serialEvent(SerialPortEvent event)
* 事件类型:
* BI -通讯中断.    CD -载波检测.    CTS -清除发送.    DATA_AVAILABLE -有数据到达.   
* DSR-数据设备准备好.    FE -帧错误.    OE -溢位错误.    OUTPUT_BUFFER_EMPTY
* -输出缓冲区已清空.    PE -奇偶校验错. RI - 振铃指示.
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:
case SerialPortEvent.DATA_AVAILABLE:
while(in.available()&0)
b=(char)in.read();
buf.append(b);
int beg=0,end=0;
for(int i=0;;i++)
if(buf.length()&2)
if(buf.charAt(0)=='\r'&&buf.charAt(1)=='\n')
end=buf.indexOf("\r\n",beg);
if(end==-1)
Buf=buf.substring(beg,end);
buf.delete(0,end+2);
System.out.printf("--%s--\n",Buf);
this.hasData=true;
catch(IOException e)
public void run()
Thread.sleep(2000);
catch(InterruptedException e)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:36427次
排名:千里之外
原创:26篇
转载:26篇
(2)(1)(3)(16)(17)(1)(3)(1)(3)(6)匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。查看:3398|回复:2
用java写一个串口接收单片机的程序,如何将通过串口接收的数据直接转化为十进制?&&求高手给出程序实例
优秀技术经理
串口返回的数据,最起码会告诉是几位,有无符号位等等信息啊
对于0和1来说,必须在一定条件下才会有意义
接收的数据是什么结构啊,给个例子Java通过串口读取数据例子
下载m包后才能使用这些类。
// 功能:从串行口COM4中接收数据
import java.io.IOE
import java.io.InputS
import java.util.E
import java.util.TooManyListenersException;
import javax.swing.JF
public class SimpleReadForm extends JFrame implements Runnable,
SerialPortEventListener {
&&& public
SimpleReadForm() {
initComponents();
&editor-fold defaultstate="collapsed"
desc="Generated Code"&
&&& private void
initComponents() {
messageText = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
OpenButton = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
recText = new javax.swing.JTextArea();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("收到的数据:");
OpenButton.setText("打开串口");
OpenButton.addActionListener(new java.awt.event.ActionListener()
&&&&&&&&&&&
public void actionPerformed(java.awt.event.ActionEvent evt) {
&&&&&&&&&&&&&&&
OpenButtonActionPerformed(evt);
&&&&&&&&&&&
recText.setColumns(20);
recText.setRows(5);
jScrollPane1.setViewportView(recText);
javax.swing.GroupLayout layout = new
javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
&&&&&&&&&&&
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
&&&&&&&&&&&
.addGroup(layout.createSequentialGroup()
&&&&&&&&&&&&&&&
.addContainerGap()
&&&&&&&&&&&&&&&
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
&&&&&&&&&&&&&&&&&&&
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
&&&&&&&&&&&&&&&&&&&&&&&
.addComponent(OpenButton)
&&&&&&&&&&&&&&&&&&&&&&&
.addGap(127, 127, 127))
&&&&&&&&&&&&&&&&&&&
.addGroup(layout.createSequentialGroup()
&&&&&&&&&&&&&&&&&&&&&&&
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE,
331, Short.MAX_VALUE)
&&&&&&&&&&&&&&&&&&&&&&&
.addContainerGap())
&&&&&&&&&&&&&&&&&&&
.addGroup(layout.createSequentialGroup()
&&&&&&&&&&&&&&&&&&&&&&&
.addComponent(jLabel1)
&&&&&&&&&&&&&&&&&&&&&&&
.addContainerGap(269, Short.MAX_VALUE))
&&&&&&&&&&&&&&&&&&&
.addGroup(layout.createSequentialGroup()
&&&&&&&&&&&&&&&&&&&&&&&
.addComponent(messageText, javax.swing.GroupLayout.PREFERRED_SIZE,
322, javax.swing.GroupLayout.PREFERRED_SIZE)
&&&&&&&&&&&&&&&&&&&&&&&
.addContainerGap())))
layout.setVerticalGroup(
&&&&&&&&&&&
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
&&&&&&&&&&&
.addGroup(layout.createSequentialGroup()
&&&&&&&&&&&&&&&
.addGap(8, 8, 8)
&&&&&&&&&&&&&&&
.addComponent(messageText, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
&&&&&&&&&&&&&&&
.addPreferredGap(javax.ponentPlacement.RELATED)
&&&&&&&&&&&&&&&
.addComponent(jLabel1)
&&&&&&&&&&&&&&&
.addPreferredGap(javax.ponentPlacement.UNRELATED)
&&&&&&&&&&&&&&&
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
&&&&&&&&&&&&&&&
.addGap(18, 18, 18)
&&&&&&&&&&&&&&&
.addComponent(OpenButton)
&&&&&&&&&&&&&&&
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
&/editor-fold&
&&& private void
OpenButtonActionPerformed(java.awt.event.ActionEvent evt) {
&&&&&&&&&&&
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
&&&&&&&&&&&
&&&&&&&&&&&
portId = (CommPortIdentifier) portList.nextElement();
&&&&&&&&&&&
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
&&&&&&&&&&&&&&&
if (portId.getName().equals("COM3"))
{&&&&&&&//端口名
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
serialPort = (SerialPort) portId.open("ReadComm", 2000);
&&&&&&&&&&&&&&&&&&&&&&&
messageText.setText("已打开端口COM3 ,正在接收数据..... ");
&&&&&&&&&&&&&&&&&&&
} catch (PortInUseException e) {
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
serialPort.addEventListener(this);
&&&&&&&&&&&&&&&&&&&
} catch (TooManyListenersException e) {
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
serialPort.notifyOnDataAvailable(true);
&&&&&&&&&&&&&&&
} //if end
&&&&&&&&&&&
} //if end
} //while end
readThread = new Thread(this);
readThread.start(); //线程负责每接收一次数据休眠20秒钟
&&& public
static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
&&&&&&&&&&&
public void run() {
&&&&&&&&&&&&&&&
new SimpleReadForm().setVisible(true);
&&&&&&&&&&&
&&& public void
&&&&&&&&&&&
Thread.sleep(20000);
} catch (InterruptedException e) {
&&& } //run()
&&& public void
serialEvent(SerialPortEvent event) {
&&&&&&&&&&&
serialPort.setSerialPortParams(2400, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {
byte[] readBuffer = new byte[20];
int numBytes=0;
String readStr="";
&&&&&&&&&&&
inputStream = serialPort.getInputStream();
} catch (IOException e) {
&&&&&&&&&&&
&&&&&&&&&&&
while (inputStream.available() & 0) {
&&&&&&&&&&&&&&
numBytes = inputStream.read(readBuffer);
&&&&&&&&&&&
} //while end
&&&&&&&&&&&
str = new String(readBuffer);
&&&&&&&&&&&
iii=0;iii&numBiii++){&&
&&&&&&&&&&&&&
readStr=readStr +
Byte.toString(readBuffer[iii]);&&&&&&&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
recText.append(str + "\n");
&&&&&&&&&&&
recText.append(readStr+"\n");
} catch (IOException e) {
&&& static
CommPortIdentifier portId;
&&& static
Enumeration portL
&&& InputStream
&&& SerialPort
&&& Thread
&&& String str =
&&& // Variables
declaration - do not modify
&&& private
javax.swing.JButton OpenB
&&& private
javax.swing.JLabel jLabel1;
&&& private
javax.swing.JScrollPane jScrollPane1;
&&& private
javax.swing.JTextField messageT
&&& private
javax.swing.JTextArea recT
&&& // End of
variables declaration
PS:很奇怪,第一天调试的时候就是一直没出来,程序就是一直找不到串口,hasMoreElements()一直显示为false。第二天一打开就成功了。后来想了想,原因不外乎有二:一、那天刚安装了USB转串口的驱动,需要JVM找到串口的话也许需要重新启动电脑。二、RP问题。(Orz,其实还是不知道为什么,程序有时候就是这样犯贱。。。)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。您现在的位置:&&>>&&>>&&>>&&>>&正文
java读取串口信息(一)
&&& 最近在写一个串口程序,业务用要求要用java web从串口中读取数据,并显示在文本框中。具体串口中的信息是从一个能扫描条形码(Barcode)的手持设备上获取的,手持设备怎么扫描,怎么将信息写入串口我不用关心,我要做的就是从串口中讲信息读取出来。&&& &&& 经过这几天研究,以及参考各种资料,有些小小的收获,分享给大家。&&& &&& 第一个问题:我笔记本的串口在哪里?&&& &&& 说到串口,也许很多人都要怀疑,这都什么年代了,USB设备已经如此普及了,谁还能想起这个老掉牙的通信端口呀?其实,在现实生活中,串口正因为它老,才会在实际使用中经常用到它。举个简单的例子:工业制造及其设备与计算机之间的通讯、还有在各种电子工厂设备的过程中,都无一例外使用的串口。因为它可以不用像USB设备一样必须有软件驱动的支持才可以进行工作。现如今,台式电脑基本都还保留着一个串口甚至是两个串口,但是笔记本电脑上的串口,被越来越多的制造商所抛弃。有很多从事工控、等行业的工作人员,选购笔记本的时候,串口成了他们心中的永远的痛。看似一个简单的接口,对于他们来说是很重要的。&&& &&& 关于什么是串口,串口的分类,以及串口长的什么样子,大家可以去网上搜一下,上一段的主要信息就是要说明:我们现在的笔记本上没有串口 - -!…&&& &&& 第二个问题:没有串口,那我们怎么测试编写串口程序?&&& &&& 如今的市面上提供一种usb转串口的工具,具体可以在百度搜索usb转串口,我是去向隔壁部门借的,据说十几块钱一个,当然得需要两个,我们一般测试使用这种九针的就可以了,有了这个东西,那就开始动手吧!如图:我的和这个不一样,我的还带一根延长线。
&&&&&&& 1、插上u转串设备,安装u转串口的驱动,这时右击我的电脑,选择设备管理器,如果安装成功,就会出现"端口"选项,我的是win7,xp的没做测试。如图:&&& &&& 2、问题又来了,两个串口笔记本是能识别了,但是这两个串口怎么连接起来呢?对此可以去电脑耗材店买一种叫做"串口交叉线"的线,这种线能将两个usb转换出来的两个串口连接起来(两个usb转成的串口都是带针的口,也就是所谓的公口),这种"串口交叉线"的两头都是母口,所以正好能连接起来。可惜不幸的是,我转遍了学校周围,也没有找到"串口交叉线",人都没听过,没办法,他们一点也不专业,都不是卖电脑耗材的,本市有卖电脑耗材的地方,可是太远,来回半天,就只为了一根6块钱的线,不值得…[nextpge]&&& &&& 网上搜,发现两个串口可以简单的相连,就能达到通信的目的,具体请看下面的9针串口功能一览表&&& &&& 针脚 功能&&& &&& 1 载波检测 (DCD)&&& &&& 2 接收数据 (RXD)&&& &&& 3 发送数据(TXD)&&& &&& 4 数据终端准备好 (DTR)&&& &&& 5 信号地 (GND)&&& &&& 6 数据准备好 (DSR)&&& &&& 7 发送请求 (RTS)&&& &&& 8 发送清除 (CTS)&&& &&& 9 振铃指示 (RI)
&&&&&&& 我们做串口测试,只需要2口和3口就好了。意思是将A串口的2针接到B串口的3针,将A串口的3针接到B串口的2针,这就是所谓的串口交叉,另外一个就是5针是信号地,可以直连,也可以不连,剩下的针脚据说从开发出来至今还没用到。&&& &&& 那就好办了,我去找搞的同学问一下能不能做个串口交叉线,结果他给了我两根线,我不知道该怎么称呼这根线,那么我就贴图出来吧
&&&&&&& 有了这样的两跟线,可以很方便的讲2口和3口交叉相连
【责编:peter】
?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]
相关产品和培训
 友情推荐链接
 认证培训
 专题推荐
 ? ? ? ? ? ? ? ? ? ?
 今日更新
?&?&?&?&?&?&?&?&?&?&
 社区讨论
 博客论点
 频道精选
 Java 频道导航

我要回帖

更多关于 labview读取串口数据 的文章

 

随机推荐