日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

利用Java实现串口全双工通讯

發布時間:2024/1/23 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用Java实现串口全双工通讯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個嵌入式系統通常需要通過串口與其主控系統進行全雙工通訊,譬如一個流水線控制系統需要不斷的接受從主控系統發送來的查詢和控制信息,并將執行結果或查詢結果發送回主控系統。本文介紹了一個簡單的通過串口實現全雙工通訊的java類庫,該類庫大大的簡化了對串口進行操作的過程。

  本類庫主要包括:serialbean.java (與其他應用程序的接口), serialbuffer.java(用來保存從串口所接收數據的緩沖區), readserial.java (從串口讀取數據的程序)。另外本類庫還提供了一個例程serialexample.java 作為示范。在下面的內容中將逐一對這幾個部分進行詳細介紹。

  1. serialbean

  serialbean是本類庫與其他應用程序的接口。該類庫中定義了serialbean的構造方法以及初始化串口,從串口讀取數據,往串口寫入數據以及關閉串口的函數。具體介紹如下:
  public serialbean(int portid)

  本函數構造一個指向特定串口的serialbean,該串口由參數portid所指定。portid = 1 表示com1,portid = 2 表示com2,由此類推。

  public int initialize()

  本函數初始化所指定的串口并返回初始化結果。如果初始化成功返回1,否則返回-1。初始化的結果是該串口被serialbean獨占性使用,其參數被設置為9600, n, 8, 1。如果串口被成功初始化,則打開一個進程讀取從串口傳入的數據并將其保存在緩沖區中。

  public string readport(int length)

  本函數從串口(緩沖區)中讀取指定長度的一個字符串。參數length指定所返回字符串的長度。

  public void writeport(string msg)

  本函數向串口發送一個字符串。參數msg是需要發送的字符串。

  public void closeport()

  本函數停止串口檢測進程并關閉串口。

  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是本類庫中所定義的串口緩沖區,它定義了往該緩沖區中寫入數據和從該緩沖區中讀取數據所需要的函數。

  public synchronized string getmsg(int length)

  本函數從串口(緩沖區)中讀取指定長度的一個字符串。參數length指定所返回字符串的長度。

  public synchronized void putchar(int c)

  本函數望串口緩沖區中寫入一個字符,參數c 是需要寫入的字符。

  在往緩沖區寫入數據或者是從緩沖區讀取數據的時候,必須保證數據的同步,因此getmsg和putchar函數均被聲明為synchronized并在具體實現中采措施實現的數據的同步。

  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是一個進程,它不斷的從指定的串口讀取數據并將其存放到緩沖區中。

  public readserial(serialbuffer sb, inputstream port)

  本函數構造一個readserial進程,參數sb指定存放傳入數據的緩沖區,參數port指定從串口所接收的數據流。

  public void run()

  readserial進程的主函數,它不斷的從指定的串口讀取數據并將其存放到緩沖區中。

  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是本類庫所提供的一個例程。它所實現的功能是打開串口com1,對其進行初始化,從串口讀取信息對其進行處理后將處理結果發送到串口。

  

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. 編譯與調試

  本類庫中使用了java communication api (javax.comm)。這是一個java擴展類庫,并不包括在標準的java sdk當中。如果你尚未安裝這個擴展類庫的話,你應該從sun公司的java站點下載這個類庫并將其安裝在你的系統上。在所下載的包里面包括一個安裝說明,如果你沒有正確安裝這個類庫及其運行環境的話,運行這個程序的時候你會找不到串口。

  正確安裝java communication api并將上述程序編譯通過以后,你可以按如下方法測試這個程序。如果你只有一臺機器,你可以利用一條rs-232電纜將com1和com2連接起來,在com1上運行serialexample,在com2上運行windows提供的超級終端程序。如果你有兩臺機器的話,你可以利用一條rs-232電纜將兩臺機器的com1(或者是com2)連接起來,在一端運行例程,另外一端運行windows提供的超級終端程序。如果有必要的
話,可以對serialexample中所聲明的串口進行相應改動。

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的利用Java实现串口全双工通讯的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本老少交 | 裸体av淫导航 | 国产精品无码av无码 | 99国产精品国产精品九九 | 奴性女会所调教 | av在线a| 久久久久久久久久久久久久久久久 | 六月综合网 | 欧美视频在线一区二区三区 | 亚洲成人精品一区二区三区 | 91色交视频 | 麻豆传媒网 | 亚洲女同二女同志 | 日韩免费二区 | 日本bdsm视频| 免费爱爱视频网站 | 一区二区欧美在线观看 | 人人看人人看 | 亚洲爽爆av | av男人网 | 国产又粗又猛又爽又黄的视频小说 | 天天射天天舔 | 亚洲av无码国产精品色午夜 | 免费看女人裸体 | 日本激情视频网站 | 久久国产精品-国产精品 | 久久久久爱 | 美女黄色小视频 | 99久久综合国产精品二区 | 无套爆插 | 日韩有码在线观看 | 波多野吉衣久久 | 鲁在线视频 | 秋霞网一区 | 北条麻妃一区二区三区在线观看 | 黄色污污视频软件 | 日本高清视频在线播放 | 亚洲精品久久久久久无码色欲四季 | 亚洲国内精品 | 怡红院一区二区三区 | 亚洲国产精品va在线看黑人 | a激情 | 天天噜天天干 | 日韩中文在线视频 | 午夜欧美精品 | 亚洲欧洲日本一区二区三区 | 在线天堂www在线国语对白 | 91视频看看 | 成人片在线看 | 99精品黄色 | 一本一道人人妻人人妻αv 九一在线视频 | 日本黄在线 | 神马午夜国产 | 国产超碰 | 熟妇人妻无码xxx视频 | 日韩av首页 | 国产亚洲高清视频 | 嫩草伊人久久精品少妇av | 人人草在线视频 | 色偷偷视频 | 日本做爰三级床戏 | 天堂av8在线 | 国产毛片一区二区三区 | 初音未来打屁股 | 红色假期黑色婚礼2 | 一级v片| 亚洲综合免费视频 | 亚洲成人国产精品 | 高贵麻麻被调教成玩物 | 日韩高清一级 | 欧美黄色小说 | www伊人 | 体内精69xxxxxx | 奇米成人 | 北条麻妃99精品青青久久 | 九九热精 | 日本免费电影一区二区三区 | av中出在线| aaa天堂| 中文字幕欧美另类精品亚洲 | 一区二区在线播放视频 | 久久久成人精品一区二区三区 | 久久精品99北条麻妃 | 国产视频二| 日本bbwbbw | 风流还珠之乱淫h文 | 中文字幕+乱码+中文字幕一区 | 又爽又黄又无遮挡 | 99夜色 | 伊人精品视频在线观看 | a视频在线看 | 99精品视频在线免费观看 | 青青草国产精品 | 亚洲婷婷在线视频 | 欧美精品在线视频观看 | 日本在线播放 | 九九热在线观看 | 久久久噜噜噜www成人 | yellow免费在线观看 |