日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

利用Java實(shí)現(xiàn)串口全雙工通訊

瀏覽:162日期:2024-07-02 09:18:52
內(nèi)容: 一個(gè)嵌入式系統(tǒng)通常需要通過串口與其主控系統(tǒng)進(jìn)行全雙工通訊,譬如一個(gè)流水線控制系統(tǒng)需要不斷的接受從主控系統(tǒng)發(fā)送來的查詢和控制信息,并將執(zhí)行結(jié)果或查詢結(jié)果發(fā)送回主控系統(tǒng)。本文介紹了一個(gè)簡(jiǎn)單的通過串口實(shí)現(xiàn)全雙工通訊的Java類庫,該類庫大大的簡(jiǎn)化了對(duì)串口進(jìn)行操作的過程。 本類庫主要包括:SerialBean.java (與其他應(yīng)用程序的接口), SerialBuffer.java (用來保存從串口所接收數(shù)據(jù)的緩沖區(qū)), ReadSerial.java (從串口讀取數(shù)據(jù)的程序)。另外本類庫還提供了一個(gè)例程SerialExample.java 作為示范。在下面的內(nèi)容中將逐一對(duì)這幾個(gè)部分進(jìn)行詳細(xì)介紹。 1. SerialBeanSerialBean是本類庫與其他應(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ū))中讀取指定長(zhǎng)度的一個(gè)字符串。參數(shù)Length指定所返回字符串的長(zhǎng)度。public void WritePort(String Msg)本函數(shù)向串口發(fā)送一個(gè)字符串。參數(shù)Msg是需要發(fā)送的字符串。public void ClosePort()本函數(shù)停止串口檢測(cè)進(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 startss a* thread which consistently monitors the serial port. Any signal capturred* 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 informationreturn InitSuccess;}/**** This function returns a string with a certain length from the incomin* 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ū))中讀取指定長(zhǎng)度的一個(gè)字符串。參數(shù)Length指定所返回字符串的長(zhǎng)度。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 incomin* 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. ReadSerialReadSerial是一個(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. SerialExampleSerialExample是本類庫所提供的一個(gè)例程。它所實(shí)現(xiàn)的功能是打開串口COM1,對(duì)其進(jìn)行初始化,從串口讀取信息對(duì)其進(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 hereSerialBean SB = new SerialBean(1);String Msg;SB.Initialize();for (int i = 5; i
標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩专区视频网站| 日韩中文字幕av电影| 日本欧美一区二区| 日本不卡中文字幕| 日韩精品免费视频一区二区三区| 蜜桃久久久久久久| 亚洲区第一页| 91在线成人| 另类小说一区二区三区| 成人亚洲一区二区| 国产精品色婷婷在线观看| 欧美日韩夜夜| 国产精品嫩模av在线| 国产精品porn| 国产高潮在线| 精品在线91| 在线观看一区| 国产日本亚洲| 黄色网一区二区| 99精品美女| 亚洲欧洲美洲国产香蕉| 国产欧美日韩综合一区在线播放| 精品亚洲精品| 欧美a级片一区| 日本不卡视频在线| 国产精品www.| 国产麻豆久久| 免费在线观看一区二区三区| 日本强好片久久久久久aaa| 国产精品久一| 天堂日韩电影| 无码日韩精品一区二区免费| 欧美激情 亚洲a∨综合| 国产成人精品亚洲日本在线观看| 国产偷自视频区视频一区二区| 亚州欧美在线| 福利精品在线| 久久亚洲不卡| 国产在线不卡一区二区三区 | 天堂√8在线中文| 在线一区视频| 国产精品久久久久毛片大屁完整版| 免费观看亚洲| 亚洲一区有码| 9999国产精品| 视频一区在线视频| 国产精品v日韩精品v欧美精品网站 | 亚洲天堂一区二区| 视频一区二区中文字幕| 午夜亚洲福利| 成人va天堂| 日韩精品一区二区三区中文在线| 精品国产成人| 在线精品一区二区| 一区二区精品伦理...| 水野朝阳av一区二区三区| 国产精品国码视频| 五月天久久久| 精品国产三区在线| 日韩一区欧美二区| 国产一区三区在线播放| 另类av一区二区| 高清av一区| 日本亚洲视频| 国产精品久久久久蜜臀| 亚洲综合婷婷| 久久精品导航| 国产精品一区三区在线观看| 久久视频精品| 国产精品最新| 日韩精品一二三| 免费看av不卡| 国产欧美啪啪| 免费不卡在线视频| 婷婷精品视频| 国内精品伊人| 青青草伊人久久| 欧美特黄视频| 精精国产xxxx视频在线播放| 日韩精品久久久久久| 欧美中文字幕一区二区| 精品国产一区二区三区2021| 日韩在线黄色| 黄色亚洲在线| 国产精品字幕| 国产传媒在线观看| 欧美在线日韩| 在线免费观看亚洲| 婷婷综合网站| 久久久蜜桃一区二区人| 久久精品国产精品亚洲毛片| 日本视频一区二区| 蜜桃久久av一区| 蜜桃tv一区二区三区| 91青青国产在线观看精品| 91亚洲精品在看在线观看高清| 亚洲深夜av| 久久精品国产亚洲夜色av网站| 色一区二区三区四区| 久久gogo国模啪啪裸体| 欧美一级二级三级视频| 日本在线视频一区二区| 美女日韩在线中文字幕| 亚洲国产专区| 欧美不卡高清一区二区三区| 国产videos久久| 欧美a级一区二区| 久久精品99国产精品日本| 亚洲精品第一| 亚洲欧洲免费| 亚洲一级淫片| 亚洲毛片视频| 日精品一区二区三区| 亚洲精品字幕| 亚洲免费一区三区| 在线观看一区| 亚洲免费观看高清完整版在线观| 水野朝阳av一区二区三区| 99视频+国产日韩欧美| 亚洲精品在线观看91| 136国产福利精品导航网址| 在线日韩中文| 红桃视频亚洲| 老色鬼久久亚洲一区二区| 欧美成人综合| 91精品成人| 美女久久一区| 日本精品一区二区三区在线观看视频| 亚洲人成在线影院| 91嫩草精品| 国产精品1区| 成人综合一区| 欧洲在线一区| 日韩视频一区二区三区在线播放免费观看| 亚洲精品在线观看91| 爽爽淫人综合网网站| 热久久免费视频| 91午夜精品| 精品久久久网| 国产精品亚洲一区二区三区在线观看| 日韩av免费| 国产偷自视频区视频一区二区| 中文一区一区三区免费在线观 | 亚洲www啪成人一区二区| 久久一级电影| 中文在线日韩| 国产精品一线天粉嫩av| 成人日韩av| 偷拍欧美精品| 日韩在线网址| 欧美国产中文高清| 国产成人77亚洲精品www| 亚洲电影有码| 日韩在线卡一卡二| 国产图片一区| 亚洲成av在线| 亚洲三级观看| 国产成人精品一区二区三区视频 | 国产精品2023| 成人精品天堂一区二区三区| 免费日韩视频| 久久不见久久见免费视频7 | 欧美国产亚洲精品| 天堂av在线| 亚洲一区二区免费在线观看| 国产精品一级| 99国产精品一区二区| 亚洲日产国产精品| 国内自拍视频一区二区三区| 午夜精品网站| 91精品国产自产观看在线| 国产精品久久观看| 视频一区国产视频| 精品国产18久久久久久二百| 五月天久久网站| 欧美一区=区三区| 日韩精品一区二区三区免费观影 | 久久精品av麻豆的观看方式| 成人在线免费观看91| 日韩视频一区| 欧美激情一区| 亚洲欧美日韩国产一区| 蜜桃精品视频| 99国产精品视频免费观看一公开| 国产欧美88| 欧美日韩国产精品一区二区亚洲| 91综合久久爱com| 99久久亚洲精品蜜臀| 日韩国产欧美三级| 久久久水蜜桃av免费网站| 欧美一区二区三区久久| 亚洲成人国产| 国产精品久久久久久妇女| 欧美高清一区| 精品一区二区三区中文字幕视频 | 日韩不卡免费视频| 91tv亚洲精品香蕉国产一区| 欧美久久久网站| 亚洲少妇诱惑| 精品久久国产一区|