亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java實現的串口通信功能示例

2024-07-13 10:16:53
字體:
來源:轉載
供稿:網友

本文實例講述了Java實現的串口通信功能。分享給大家供大家參考,具體如下:

用Java實現串口通信(windows系統下),需要用到sun提供的串口包 javacomm20-win32.zip。其中要用到三個文件,配置如下:

1.comm.jar放置到 JAVA_HOME/jre/lib/ext;
2.win32com.dll放置到 JAVA_HOME/bin;
3.javax.comm.properties 兩個地方都要放
    jre/lib(也就是在JAVA文件夾下的jre)
   JAVA_HOME/jre/lib

說一下我應用的環境。電子秤稱重時,計算機通過串口給稱重控制顯示器發送一次命令“R”,控制顯示器則發送一次重量數據給串口,計算機再讀取將數據顯示在網頁上。這樣就構成了一個實時稱重系統。

讀寫串口的代碼如下:

package com.chengzhong.tools;import java.io.*;import javax.comm.CommPortIdentifier;import javax.comm.*;/**** This bean provides some basic functions to implement full duplex* information exchange through the serial port.**/public class SerialBean{public static String PortName;public static CommPortIdentifier portId;public static SerialPort serialPort;public static OutputStream out;public static InputStream in;//保存讀數結果public static String result="";public static int openSignal=1;/**** 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(){  openSignal=1;  try  {  portId = CommPortIdentifier.getPortIdentifier(PortName);  try  {  serialPort = (SerialPort)  portId.open("Serial_Communication", 2000);  } catch (PortInUseException e)  {    if(!SerialBean.portId.getCurrentOwner().equals("Serial_Communication"))    {      openSignal=2; //該串口被其它程序占用    }else if(SerialBean.portId.getCurrentOwner().equals("Serial_Communication")){      openSignal=1;      return openSignal;    }   return openSignal;  }  //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)  {     openSignal=3;  //輸入輸出流錯誤     return openSignal;  }  //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)  {     openSignal=4;  //參數不正確     return openSignal;  }  } catch (NoSuchPortException e)  {     portId=null;     openSignal=5; //沒有該串口     return openSignal;  }  // 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.// return success informationreturn openSignal;}/**** This function returns a string with a certain length from the incoming* messages.** @param Length The length of the string to be returned.**/public static void ReadPort(){  SerialBean.result="";int c;try {  if(in!=null){    while(in.available()>0)    {      c = in.read();      Character d = new Character((char) c);      SerialBean.result=SerialBean.result.concat(d.toString());    }  }} catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace();}}/**** This function sends a message through the serial port.** @param Msg The string to be sent.**/public static void WritePort(String Msg){try{  if(out!=null){    for (int i = 0; i < Msg.length(); i++)       out.write(Msg.charAt(i));  }} catch (IOException e) {  return;}}/**** This function closes the serial port in use.**/public void ClosePort(){ serialPort.close();}}

這樣通過 SerialBean.result 就可得到讀數結果。

至于把數據放到網頁上,就要用到Ajax了,這里用到了一個Ajax框架dwr, dwr類Put.java 如下:

package com.chengzhong.dwr;import java.io.IOException;import com.chengzhong.tools.Arith;import com.chengzhong.tools.SerialBean;public class Put {  //2011.9.17  public String write(){    //發送指令R,儀器發送一次凈重數據    SerialBean.WritePort("R");    //讀取數據    SerialBean.ReadPort();    String temp=SerialBean.result.trim();  //我這里temp是形如 wn125.000kg 的數據    if(!temp.equals("") && temp.length()==11)    {       return (change(temp)).toString();    }else{      return "";    }  }  //響應開始稱重  public String startWeight(String num){     int n=Integer.parseInt(num.trim());     SerialBean SB = new SerialBean(n);     SB.Initialize();     return SerialBean.openSignal+""; //返回初始化信息  }//響應停止稱重  public void endWeight(){    try {      //關閉輸入、輸出流      SerialBean.in.close();      SerialBean.out.close();    } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    if(SerialBean.serialPort!=null){      SerialBean.serialPort.close(); //關閉串口    }    SerialBean.serialPort=null;    SerialBean.portId=null;    SerialBean.result="";  }  /**      * 將形如 wn125.000kg 格式的重量轉換為 125.000 (kg)(四舍五入,小數點后保留兩位)   */   public String change(String source){     Double result=0.0;     String s1=source.substring(2,9);     try{       result=Double.parseDouble(s1);       result=Arith.round(result,2);     }catch(Exception e){       e.printStackTrace();       return "";     }     return result.toString();   }}

注:Arith.java是一個java 的高精度計算文件。

package com.chengzhong.tools;import java.math.BigDecimal;/*** 由于Java的簡單類型不能夠精確的對浮點數進行運算,這個工具類提供精* 確的浮點數運算,包括加減乘除和四舍五入。*/public class Arith{  //默認除法運算精度  private static final int DEF_DIV_SCALE = 10;  //這個類不能實例化  private Arith(){  }  /**   * 提供精確的加法運算。   * @param v1 被加數   * @param v2 加數   * @return 兩個參數的和   */  public static double add(double v1,double v2){    BigDecimal b1 = new BigDecimal(Double.toString(v1));    BigDecimal b2 = new BigDecimal(Double.toString(v2));    return b1.add(b2).doubleValue();  }  /**   * 提供精確的減法運算。   * @param v1 被減數   * @param v2 減數   * @return 兩個參數的差   */  public static double sub(double v1,double v2){    BigDecimal b1 = new BigDecimal(Double.toString(v1));    BigDecimal b2 = new BigDecimal(Double.toString(v2));    return b1.subtract(b2).doubleValue();  }  /**   * 提供精確的乘法運算。   * @param v1 被乘數   * @param v2 乘數   * @return 兩個參數的積   */  public static double mul(double v1,double v2){    BigDecimal b1 = new BigDecimal(Double.toString(v1));    BigDecimal b2 = new BigDecimal(Double.toString(v2));    return b1.multiply(b2).doubleValue();  }  /**   * 提供(相對)精確的除法運算,當發生除不盡的情況時,精確到   * 小數點以后10位,以后的數字四舍五入。   * @param v1 被除數   * @param v2 除數   * @return 兩個參數的商   */  public static double div(double v1,double v2){    return div(v1,v2,DEF_DIV_SCALE);  }  /**   * 提供(相對)精確的除法運算。當發生除不盡的情況時,由scale參數指   * 定精度,以后的數字四舍五入。   * @param v1 被除數   * @param v2 除數   * @param scale 表示表示需要精確到小數點以后幾位。   * @return 兩個參數的商   */  public static double div(double v1,double v2,int scale){    if(scale<0){      throw new IllegalArgumentException(        "The scale must be a positive integer or zero");    }    BigDecimal b1 = new BigDecimal(Double.toString(v1));    BigDecimal b2 = new BigDecimal(Double.toString(v2));    return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();  }  /**   * 提供精確的小數位四舍五入處理。   * @param v 需要四舍五入的數字   * @param scale 小數點后保留幾位   * @return 四舍五入后的結果   */  public static double round(double v,int scale){    if(scale<0){      throw new IllegalArgumentException(        "The scale must be a positive integer or zero");    }    BigDecimal b = new BigDecimal(Double.toString(v));    BigDecimal one = new BigDecimal("1");    return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();  }}

網頁頁面上:

<script type="text/javascript" src="/ChengZhong/dwr/engine.js"></script><script type="text/javascript" src="/ChengZhong/dwr/util.js"></script><script type='text/javascript' src='/ChengZhong/dwr/interface/ss.js' ></script><script type='text/javascript' > var ID;   function begin(){    ID=window.setInterval('get()',500); //每隔半秒自動調用 get(),取得毛重數據填入文本框中   } function get()   {    ss.write(readIt);  //調用dwr類 Put.java 中的write方法   }   function readIt(Data){    if(Data!=null && Data!="")    {      document.getElementById("mzBF").value=Data;        }   }</script>

dwr的使用就不說了

 

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲欧美一区二区三区| 久久久久久久久久av| 热99精品只有里视频精品| 久久精品国产99国产精品澳门| 在线观看中文字幕亚洲| 国产精品永久免费在线| 国产精品日韩欧美综合| 日韩欧美在线视频免费观看| 日韩高清免费在线| 久久久97精品| 久久在线免费视频| 国产在线观看精品| 久久久国产精品一区| 久久久免费精品| 国产精品情侣自拍| 91伊人影院在线播放| 人妖精品videosex性欧美| 欧美重口另类videos人妖| 国产91精品青草社区| 91亚洲精品久久久久久久久久久久| 欧美成人全部免费| 91手机视频在线观看| 精品国产一区二区三区久久狼5月| 曰本色欧美视频在线| 一区二区成人精品| 国产精品久久久久久久久久ktv| 日韩精品视频在线| 97在线看免费观看视频在线观看| 久久久久久91香蕉国产| 欧美专区在线观看| 91精品在线影院| 最近中文字幕2019免费| 亚洲精品电影在线观看| 777精品视频| 亚洲精品永久免费| 欧美激情视频在线观看| 日韩精品有码在线观看| 久久精品视频在线观看| 国产精品成人观看视频国产奇米| 日韩精品免费综合视频在线播放| yw.139尤物在线精品视频| 亚洲一区二区久久久久久| 亚洲欧美日韩国产中文| 日韩视频免费观看| 精品无人区太爽高潮在线播放| 国产丝袜精品第一页| 国内精品一区二区三区| 日韩欧美视频一区二区三区| 成人性生交大片免费观看嘿嘿视频| 日韩高清不卡av| 九色成人免费视频| 成人夜晚看av| 亚洲嫩模很污视频| 国产成人精品久久亚洲高清不卡| 久久91亚洲精品中文字幕奶水| 97色在线播放视频| 久久久久久午夜| 欧美激情视频一区二区三区不卡| 精品久久久久久久久国产字幕| 欧美电影免费观看高清| 国产欧美精品xxxx另类| 亚洲mm色国产网站| 亚洲日本欧美中文幕| 亚洲免费一在线| 欧美成人三级视频网站| 亚洲天堂第二页| 欧美色道久久88综合亚洲精品| 狠狠综合久久av一区二区小说| 日韩亚洲第一页| 国产精品综合久久久| 中文字幕久热精品在线视频| 8090理伦午夜在线电影| 国产日韩精品在线| 国产精品永久免费视频| 久久理论片午夜琪琪电影网| 亚洲欧美综合v| 国产日韩欧美黄色| 国产福利视频一区| 国产69久久精品成人看| 97精品一区二区三区| 日韩精品久久久久久福利| 久久天天躁狠狠躁夜夜躁2014| 亚洲毛片在线观看| 精品美女永久免费视频| 欧美美女操人视频| 久久久久中文字幕2018| 欧美视频免费在线| 国产一区二中文字幕在线看| 亚洲精品日韩丝袜精品| 国产激情综合五月久久| 久久久久久欧美| 日韩一区二区三区在线播放| 亚洲激情自拍图| 亚洲黄页视频免费观看| 久久欧美在线电影| 亚洲美女性生活视频| 久久免费高清视频| 久久中文字幕在线| 亚洲性无码av在线| 亚洲精品一区久久久久久| 美女999久久久精品视频| 日韩精品视频在线观看网址| 精品久久中文字幕久久av| 亚洲精品理论电影| 久久成人亚洲精品| 欧美激情亚洲精品| 日韩av片电影专区| 欧美尤物巨大精品爽| 亚洲激情视频网| 成人有码在线播放| 日韩专区在线播放| 国产精品久久久av久久久| 神马国产精品影院av| 大荫蒂欧美视频另类xxxx| 国产美女精品视频免费观看| 国产91热爆ts人妖在线| 91最新在线免费观看| 亚洲精品ady| 疯狂做受xxxx高潮欧美日本| 亚洲综合日韩中文字幕v在线| 日韩大陆欧美高清视频区| 国产日韩av在线| 亚洲视频在线免费看| 成人精品一区二区三区电影免费| 91po在线观看91精品国产性色| 96精品久久久久中文字幕| 国产日韩av在线| 日韩在线视频网| 亚洲国产精品一区二区三区| 欧美麻豆久久久久久中文| 亚州国产精品久久久| 庆余年2免费日韩剧观看大牛| 国产精品久久久久免费a∨| 亚洲四色影视在线观看| 国产精品久久久久久久午夜| 国模视频一区二区| 欧美大片免费看| 欧美黑人又粗大| 欧美最顶级丰满的aⅴ艳星| 91欧美日韩一区| 欧美日韩免费观看中文| 国产亚洲美女精品久久久| 另类视频在线观看| 色伦专区97中文字幕| 午夜精品美女自拍福到在线| 精品视频中文字幕| 久久精品亚洲一区| 欧美在线免费视频| 亚洲精品suv精品一区二区| 91精品视频专区| 国产一区二区成人| 日韩精品在线免费播放| 日日狠狠久久偷偷四色综合免费| 日韩在线播放av| 欧美一区二区三区免费观看| 日韩女在线观看| 日韩精品在线免费播放| 日韩av在线导航| 永久免费精品影视网站| 欧美精品在线免费播放| 91免费看视频.| 91av免费观看91av精品在线| 国产日韩精品一区二区| 91精品视频免费观看|