900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > java获取已经打开的串口的输出流_使用Java读取串口的程序(转)

java获取已经打开的串口的输出流_使用Java读取串口的程序(转)

时间:2022-08-31 16:11:22

相关推荐

java获取已经打开的串口的输出流_使用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. *

[@more@]

来自 “ ITPUB博客 ” ,链接:/9650775/viewspace-923907/,如需转载,请注明出处,否则将追究法律责任。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。