亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ttys_java.txt

?? 基于LINUX操作系統(tǒng)下的各種詳細(xì)配置(如FTP
?? TXT
字號:
利用Java實(shí)現(xiàn)串口全雙工通訊 
 
2003-03-17· ·ptboy··天極論壇

 
1 2  下一頁

  一個(gè)嵌入式系統(tǒng)通常需要通過串口與其主控系統(tǒng)進(jìn)行全雙工通訊,譬如一個(gè)流水線控制系統(tǒng)需要不斷的接受從主控系統(tǒng)發(fā)送來的查詢和控制信息,并將執(zhí)行結(jié)果或查詢結(jié)果發(fā)送回主控系統(tǒng)。本文介紹了一個(gè)簡單的通過串口實(shí)現(xiàn)全雙工通訊的Java類庫,該類庫大大的簡化了對串口進(jìn)行操作的過程。

  本類庫主要包括:SerialBean.java (與其他應(yīng)用程序的接口), SerialBuffer.java(用來保存從串口所接收數(shù)據(jù)的緩沖區(qū)), ReadSerial.java (從串口讀取數(shù)據(jù)的程序)。另外本類庫還提供了一個(gè)例程SerialExample.java 作為示范。在下面的內(nèi)容中將逐一對這幾個(gè)部分進(jìn)行詳細(xì)介紹。

  1. SerialBean

  SerialBean是本類庫與其他應(yīng)用程序的接口。該類庫中定義了SerialBean的構(gòu)造方法以及初始化串口,從串口讀取數(shù)據(jù),往串口寫入數(shù)據(jù)以及關(guān)閉串口的函數(shù)。具體介紹如下:


  public SerialBean(int PortID) 

  本函數(shù)構(gòu)造一個(gè)指向特定串口的SerialBean,該串口由參數(shù)PortID所指定。PortID = 1 表示COM1,PortID = 2 表示COM2,由此類推。

  public int Initialize() 

  本函數(shù)初始化所指定的串口并返回初始化結(jié)果。如果初始化成功返回1,否則返回-1。初始化的結(jié)果是該串口被SerialBean獨(dú)占性使用,其參數(shù)被設(shè)置為9600, N, 8, 1。如果串口被成功初始化,則打開一個(gè)進(jìn)程讀取從串口傳入的數(shù)據(jù)并將其保存在緩沖區(qū)中。

  public String ReadPort(int Length) 

  本函數(shù)從串口(緩沖區(qū))中讀取指定長度的一個(gè)字符串。參數(shù)Length指定所返回字符串的長度。

  public void WritePort(String Msg) 

  本函數(shù)向串口發(fā)送一個(gè)字符串。參數(shù)Msg是需要發(fā)送的字符串。

  public void ClosePort() 

  本函數(shù)停止串口檢測進(jìn)程并關(guān)閉串口。

  SerialBean的源代碼如下:

package serial;

import java.io.*;
import java.util.*;
import javax.comm.*;

/**
*
* This bean provides some basic functions to implement full dulplex
* information exchange through the srial port.
*
*/

public class SerialBean
{
 static String PortName;
 CommPortIdentifier portId;
 SerialPort serialPort;
 static OutputStream out;
 static InputStream in;

 SerialBuffer SB;
 ReadSerial RT;

 /**
 *
 * Constructor
 *
 * @param PortID the ID of the serial to be used. 1 for COM1,
 * 2 for COM2, etc.
 *
 */

 public SerialBean(int PortID)
 {
  PortName = "COM" + PortID;
 }

 /**
 *
 * This function initialize the serial port for communication. It starts a
 * thread which consistently monitors the serial port. Any signal captured
 * from the serial port is stored into a buffer area.
 *
 */

 public int Initialize()
 {

  int InitSuccess = 1;
  int InitFail = -1;

  try
  {

   portId = CommPortIdentifier.getPortIdentifier(PortName);

   try
   {
    serialPort = (SerialPort)
    portId.open("Serial_Communication", 2000);
   } catch (PortInUseException e)
   {
    return InitFail;
   }

   //Use InputStream in to read from the serial port, and OutputStream
   //out to write to the serial port.

  try
  {
   in = serialPort.getInputStream();
   out = serialPort.getOutputStream();
  } catch (IOException e)
  {
   return InitFail;
  }

 //Initialize the communication parameters to 9600, 8, 1, none.

  try
  {
   serialPort.setSerialPortParams(9600,
   SerialPort.DATABITS_8,
   SerialPort.STOPBITS_1,
   SerialPort.PARITY_NONE);
  } catch (UnsupportedCommOperationException e)
  {
   return InitFail;
  }
 } catch (NoSuchPortException e)
 {
  return InitFail;
 }

 // when successfully open the serial port, create a new serial buffer,
 // then create a thread that consistently accepts incoming signals from
 // the serial port. Incoming signals are stored in the serial buffer.

 SB = new SerialBuffer();
 RT = new ReadSerial(SB, in);
 RT.start();

 // return success information
 
 return InitSuccess;
 }

 /**
 *
 * This function returns a string with a certain length from the incoming
 * messages.
 *
 * @param Length The length of the string to be returned.
 *
 */

 public String ReadPort(int Length)
 {
  String Msg;
  Msg = SB.GetMsg(Length);
  return Msg;
 }

 /**
 *
 * This function sends a message through the serial port.
 *
 * @param Msg The string to be sent.
 *
 */

 public void WritePort(String Msg)
 {
  int c;
  try
  {
   for (int i = 0; i < Msg.length(); i++)
    out.write(Msg.charAt(i));
  } catch (IOException e) {}
 }

 /**
 *
 * This function closes the serial port in use.
 *
 */

 public void ClosePort()
 {
  RT.stop();
  serialPort.close();
 }
} 

2. SerialBuffer

  SerialBuffer是本類庫中所定義的串口緩沖區(qū),它定義了往該緩沖區(qū)中寫入數(shù)據(jù)和從該緩沖區(qū)中讀取數(shù)據(jù)所需要的函數(shù)。

  public synchronized String GetMsg(int Length) 

  本函數(shù)從串口(緩沖區(qū))中讀取指定長度的一個(gè)字符串。參數(shù)Length指定所返回字符串的長度。

  public synchronized void PutChar(int c) 

  本函數(shù)望串口緩沖區(qū)中寫入一個(gè)字符,參數(shù)c 是需要寫入的字符。

  在往緩沖區(qū)寫入數(shù)據(jù)或者是從緩沖區(qū)讀取數(shù)據(jù)的時(shí)候,必須保證數(shù)據(jù)的同步,因此GetMsg和PutChar函數(shù)均被聲明為synchronized并在具體實(shí)現(xiàn)中采措施實(shí)現(xiàn)的數(shù)據(jù)的同步。

  SerialBuffer的源代碼如下:

package serial;

/**
*
* This class implements the buffer area to store incoming data from the serial
* port.
*
*/

public class SerialBuffer
{
 private String Content = "";
 private String CurrentMsg, TempContent;
 private boolean available = false;
 private int LengthNeeded = 1;

 /**
 *
 * This function returns a string with a certain length from the incoming
 * messages.
 *
 * @param Length The length of the string to be returned.
 *
 */

public synchronized String GetMsg(int Length)
{
 LengthNeeded = Length;
 notifyAll();

 if (LengthNeeded > Content.length())
 {
  available = false;
  while (available == false)
  {
   try
   {
    wait();
   } catch (InterruptedException e) { }
  }
 }

 CurrentMsg = Content.substring(0, LengthNeeded);
 TempContent = Content.substring(LengthNeeded);
 Content = TempContent;
 LengthNeeded = 1;
 notifyAll();
 return CurrentMsg;
}

/**
*
* This function stores a character captured from the serial port to the
* buffer area.
*
* @param t The char value of the character to be stored.
*
*/

public synchronized void PutChar(int c)
{
 Character d = new Character((char) c);
 Content = Content.concat(d.toString());
 if (LengthNeeded < Content.length())
 {
  available = true;
 }
 notifyAll();
}
}
 

  3. ReadSerial

  ReadSerial是一個(gè)進(jìn)程,它不斷的從指定的串口讀取數(shù)據(jù)并將其存放到緩沖區(qū)中。

  public ReadSerial(SerialBuffer SB, InputStream Port) 

  本函數(shù)構(gòu)造一個(gè)ReadSerial進(jìn)程,參數(shù)SB指定存放傳入數(shù)據(jù)的緩沖區(qū),參數(shù)Port指定從串口所接收的數(shù)據(jù)流。

  public void run() 

  ReadSerial進(jìn)程的主函數(shù),它不斷的從指定的串口讀取數(shù)據(jù)并將其存放到緩沖區(qū)中。

  ReadSerial的源代碼如下:

package serial;

import java.io.*;

/**
*
* This class reads message from the specific serial port and save
* the message to the serial buffer.
*
*/

public class ReadSerial extends Thread
{
 private SerialBuffer ComBuffer;
 private InputStream ComPort;

/**
*
* Constructor
*
* @param SB The buffer to save the incoming messages.
* @param Port The InputStream from the specific serial port.
*
*/

public ReadSerial(SerialBuffer SB, InputStream Port)
{
 ComBuffer = SB;
 ComPort = Port;
}

public void run()
{
 int c;
 try
 {
  while (true)
  {
   c = ComPort.read();
   ComBuffer.PutChar(c);
  }
 } catch (IOException e) {}
}
} 

  4. SerialExample

  SerialExample是本類庫所提供的一個(gè)例程。它所實(shí)現(xiàn)的功能是打開串口COM1,對其進(jìn)行初始化,從串口讀取信息對其進(jìn)行處理后將處理結(jié)果發(fā)送到串口。

import serial.*;
import java.io.*;

/**
*
* This is an example of how to use the SerialBean. It opens COM1 and reads
* six messages with different length form the serial port.
*
*/

class SerialExample
{
 public static void main(String[] args)
 {
  //TO DO: Add your JAVA codes here

  SerialBean SB = new SerialBean(1);
  String Msg;
 
  SB.Initialize();
  for (int i = 5; i <= 10; i++)
  {
   Msg = SB.ReadPort(i);
   SB.WritePort("Reply: " + Msg);
  }
  SB.ClosePort();
 }
}
 

  5. 編譯與調(diào)試

  本類庫中使用了Java Communication API (javax.comm)。這是一個(gè)Java擴(kuò)展類庫,并不包括在標(biāo)準(zhǔn)的Java SDK當(dāng)中。如果你尚未安裝這個(gè)擴(kuò)展類庫的話,你應(yīng)該從Sun公司的Java站點(diǎn)下載這個(gè)類庫并將其安裝在你的系統(tǒng)上。在所下載的包里面包括一個(gè)安裝說明,如果你沒有正確安裝這個(gè)類庫及其運(yùn)行環(huán)境的話,運(yùn)行這個(gè)程序的時(shí)候你會(huì)找不到串口。

  正確安裝Java Communication API并將上述程序編譯通過以后,你可以按如下方法測試這個(gè)程序。如果你只有一臺機(jī)器,你可以利用一條RS-232電纜將COM1和COM2連接起來,在COM1上運(yùn)行SerialExample,在COM2上運(yùn)行Windows提供的超級終端程序。如果你有兩臺機(jī)器的話,你可以利用一條RS-232電纜將兩臺機(jī)器的COM1(或者是COM2)連接起來,在一端運(yùn)行例程,另外一端運(yùn)行Windows提供的超級終端程序。如果有必要的
話,可以對SerialExample中所聲明的串口進(jìn)行相應(yīng)改動(dòng)。

  本程序在Windows 2000 + Java SDK 1.3環(huán)境下編譯通過并成功運(yùn)行。

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲与欧洲av电影| 日韩免费电影一区| 日韩一区在线看| 成人国产在线观看| 日韩一区在线看| 99精品视频在线观看免费| 亚洲欧美国产77777| 欧美在线短视频| 日韩黄色片在线观看| 欧美一区二区三区视频在线观看| 男男成人高潮片免费网站| 精品精品欲导航| 成人午夜看片网址| 亚洲狠狠丁香婷婷综合久久久| 欧美天堂一区二区三区| 美女网站色91| 国产精品无码永久免费888| 色综合久久综合网欧美综合网| 亚洲一区二区综合| 日韩免费观看2025年上映的电影| 国产精品综合视频| 亚洲激情自拍偷拍| 日韩精品一区二| 95精品视频在线| 秋霞影院一区二区| 国产精品久久久久久久岛一牛影视 | 日韩一区二区三区在线| 国产成人av自拍| 视频一区二区三区入口| 日本一区二区成人在线| 欧美日韩精品欧美日韩精品一| 韩日精品视频一区| 伊人夜夜躁av伊人久久| 26uuu欧美| 欧美日精品一区视频| 国产成都精品91一区二区三| 亚洲国产欧美日韩另类综合| 久久九九全国免费| 91精品国产综合久久小美女| 成人综合婷婷国产精品久久免费| 日韩在线一二三区| 亚洲欧美激情插| 国产日韩欧美一区二区三区乱码| 在线播放日韩导航| 99国产精品久久久| 国产电影一区二区三区| 美女脱光内衣内裤视频久久网站 | 亚洲精品免费电影| 久久精品免费在线观看| 欧美一区二区成人6969| 色综合天天狠狠| 成熟亚洲日本毛茸茸凸凹| 白白色 亚洲乱淫| 激情五月播播久久久精品| 有码一区二区三区| 国产精品久久久久久久久动漫| 26uuu亚洲综合色欧美 | 精品久久久久久久人人人人传媒 | 色天天综合久久久久综合片| 福利一区在线观看| 精品制服美女丁香| 全国精品久久少妇| 免费日韩伦理电影| 视频一区视频二区中文| 午夜视频在线观看一区| 一区二区成人在线| 一区二区三区在线视频免费观看| 国产精品国产三级国产aⅴ入口| 久久免费精品国产久精品久久久久| 欧美成人一级视频| 欧美成人一区二区三区在线观看| 日韩一区二区在线免费观看| 欧美日韩高清一区二区不卡| 欧美日韩精品电影| 欧美性做爰猛烈叫床潮| 欧美丝袜丝交足nylons图片| 欧美性猛交一区二区三区精品| 色婷婷精品久久二区二区蜜臂av| 日本高清免费不卡视频| 91高清视频免费看| 欧美伊人精品成人久久综合97| 在线观看欧美黄色| 欧美日韩一区二区在线观看| 欧美巨大另类极品videosbest| 91.com视频| 欧美不卡一区二区三区四区| 久久―日本道色综合久久| 国产日产精品一区| 中文字幕一区二区三区乱码在线| 国产精品久久一级| 亚洲一区二区三区四区的| 丝袜诱惑亚洲看片| 精品在线观看免费| 国产a视频精品免费观看| 99久久久国产精品免费蜜臀| 日本韩国欧美三级| 91精品国产91久久综合桃花| 精品国产乱码久久久久久牛牛| 久久久综合视频| 亚洲色图清纯唯美| 日本成人在线网站| 国产精品一区一区三区| 91色综合久久久久婷婷| 欧美狂野另类xxxxoooo| 精品国产髙清在线看国产毛片| 国产欧美精品一区二区色综合| 亚洲精品五月天| 美女诱惑一区二区| 91亚洲精品一区二区乱码| 欧美日韩精品欧美日韩精品| 久久亚洲综合av| 亚洲黄色小视频| 国产在线播放一区三区四| 99久久99久久精品免费观看| 欧美高清hd18日本| 中文字幕欧美三区| 偷拍日韩校园综合在线| 成人网男人的天堂| 欧美日韩国产电影| 国产精品高潮久久久久无| 日本不卡免费在线视频| 91麻豆精东视频| 亚洲欧洲99久久| 蜜桃av一区二区三区| 91视频免费看| 国产视频一区二区在线观看| 亚洲国产成人av好男人在线观看| 国产呦萝稀缺另类资源| 欧美日韩一区二区三区在线| 国产欧美一区二区精品性| 日本午夜一区二区| 91蜜桃在线免费视频| 精品国产成人在线影院| 日日欢夜夜爽一区| 一本到高清视频免费精品| 久久先锋影音av| 日韩国产成人精品| 色94色欧美sute亚洲线路二| 国产欧美一区二区精品性| 青青草一区二区三区| 欧美日韩一本到| 亚洲欧美综合网| 国产suv精品一区二区6| 精品国产电影一区二区| 奇米影视7777精品一区二区| 在线观看视频欧美| 亚洲视频一二三区| 国产成人三级在线观看| 精品日产卡一卡二卡麻豆| 男人操女人的视频在线观看欧美| 在线观看欧美精品| 夜夜爽夜夜爽精品视频| 色一情一伦一子一伦一区| 国产精品视频第一区| 国产.精品.日韩.另类.中文.在线.播放| 欧美精品一二三| 五月综合激情日本mⅴ| 欧美三片在线视频观看| 亚洲黄色av一区| 色就色 综合激情| 亚洲色图欧美偷拍| 91麻豆国产香蕉久久精品| 亚洲视频在线一区二区| 91免费精品国自产拍在线不卡 | 亚洲一区二区三区不卡国产欧美| 不卡视频免费播放| 国产精品麻豆久久久| 成人少妇影院yyyy| 国产精品久久久久影院| 成人高清免费观看| 中文字幕亚洲区| 色婷婷综合久久久久中文一区二区| 中文字幕一区二区在线观看| 97久久精品人人做人人爽50路| 亚洲色图欧美激情| 欧美日韩久久久| 另类小说综合欧美亚洲| 久久网这里都是精品| 国产成人在线色| ...中文天堂在线一区| 色av一区二区| 日本aⅴ免费视频一区二区三区 | 成人综合在线视频| 亚洲欧美日韩在线| 欧美日韩午夜在线| 蜜桃精品视频在线观看| 久久久久99精品一区| 成人性生交大片免费| 亚洲精品视频在线| 欧美日本一区二区三区四区| 久久成人久久鬼色| 欧美国产丝袜视频| 91成人免费网站| 麻豆成人在线观看| 欧美激情一区在线| 欧美三级电影网| 国产精品一区二区在线播放 | 天天av天天翘天天综合网| 欧美大片顶级少妇| av不卡在线观看|