您好,登录后才能下订单哦!
小编给大家分享一下如何使用Java读取串口的程序(转),希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
															这个简单的程序包括以下文件:
IMU.java (主程序)
ReadBuffer.java 
(从缓冲区读取一个消息)
ReadSerial.java (读取串口数据并放入缓冲区)
SerialBuffer.java 
(缓冲区)
WriteSerial.java (不断的往串口送星号´*´)
测试程序:
SendCom.java 
(将一个数据文件往串口发送)
SEND.TXT 
(供测试用的数据文件)
在这个通讯程序中使用了一个简单的协议,既不同的消息之间用星号´*´作为分隔。这个程序中的问题是ReadSerial进程和WriteSerial进程不能够同时启动,出错信息是不能够打开串口,因为同样一个串口不能够同时被打开两次(在ReadSerial中声明了FileReader
测试程序:
SendCom.java 
(将一个数据文件往串口发送)
SEND.TXT 
(供测试用的数据文件)
在这个通讯程序中使用了一个简单的协议,既不同的消息之间用星号´*´作为分隔。这个程序中的问题是ReadSerial进程和WriteSerial进程不能够同时启动,出错信息是不能够打开串口,因为同样一个串口不能够同时被打开两次(在ReadSerial中声明了FileReader和在WriteSerial中声明了FileWriter)。这样是不能够实现全双工通讯的。
------------------------------------------
import 
java.io.*;
class IMU
{
public static void main(String[] 
args)
{
//TO DO: Add your JAVA codes here
File ComPort = new 
File("COM1");
SerialBuffer SB = new SerialBuffer();
ReadSerial r1 = 
new ReadSerial(SB, ComPort);
ReadBuffer r2 = new 
ReadBuffer(SB);
WriteSerial r3 = new 
WriteSerial(ComPort);
r1.start();
r2.start();
r3.start();
}
}
---------------------------------------------
import 
java.io.*;
public class ReadBuffer extends Thread
{
private 
SerialBuffer ComBuffer;
public ReadBuffer(SerialBuffer 
SB)
{
ComBuffer = SB;
}
public void run()
{
String 
Msg;
while (true)
{
Msg = 
ComBuffer.GetMsg();
System.out.println(Msg);
}
}
}
-----------------------------------------------
import 
java.io.*;
public class ReadSerial extends Thread
{
private 
SerialBuffer ComBuffer;
private File ComPort;
public 
ReadSerial(SerialBuffer SB, File Port)
{
ComBuffer = SB;
ComPort = 
Port;
}
public void run()
{
int c;
try
{
FileReader in 
= new FileReader(ComPort);
while (true)
{
c = 
in.read();
ComBuffer.PutChar(c);
}
try
{
FileReader in = new 
FileReader(ComPort);
while (true)
{
c = 
in.read();
ComBuffer.PutChar(c);
}
} catch (IOException e) 
{}
}
}
------------------------------------------------
public class 
SerialBuffer
{
private String Content = "";
private String CurrentMsg, 
TempContent;
private boolean available = false;
public synchronized 
String GetMsg()
{
int SepMark;
if ((SepMark = Content.indexOf(´*´)) 
== -1) 
{
available = false;
while (available == 
false)
{
try
{
wait();
} catch (InterruptedException e) { 
}
}
SepMark = Content.indexOf(´*´);
}
CurrentMsg = 
Content.substring(0, SepMark);
TempContent = 
Content.substring(SepMark+1);
Content = 
TempContent;
notifyAll();
return CurrentMsg;
}
public 
synchronized void PutChar(int c)
{
Character d = new Character((char) 
c);
Content = Content.concat(d.toString());
if (c == 
´*´)
{
available = 
true;
}
notifyAll();
}
}
-------------------------------------------------
import 
java.io.*;
public class WriteSerial extends Thread
{
private 
SerialBuffer ComBuffer;
private File ComPort;
public WriteSerial(File 
Port)
{
ComPort = Port;
}
public void run()
{
int 
c;
try
{
FileWriter out = new FileWriter(ComPort);
while 
(true)
{
out.write(´*´);
}
} catch (IOException 
e)
{
System.out.println(e.getMessage());
}
}
}
-----------------------------------------------
import 
java.io.*;
public class SendCom
{
public static void main(String[] 
args)
{
File OutFile = new File("SEND.TXT");
File ComPort = new 
File("COM2");
int c;
try
{
FileReader in = new 
FileReader(OutFile);
FileWriter out = new FileWriter(ComPort);
while ((c = 
in.read()) != -1)
out.write(c);
in.close();
out.close();
} catch 
(IOException e) 
{}
}
}
----------------------------------------------
SEND.TXT*
This 
is a sample of the data file for program testing. *
It should be in the 
same directory as the SendCom.class file.*
When you run this sample 
program, connect your COM1 and COM2 with a
serial cable so that you can test 
this program on one machine. If
you have two machines, you can connect the 
two machine via a serial
cable and test it. Modified the definition of 
ComPort in the program
if necessary. *
看完了这篇文章,相信你对“如何使用Java读取串口的程序(转)”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。