亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Java–串口之間的通信及掃描槍的讀取

EsgynChina / 1965人閱讀

摘要:串口通信以自己剛做的功能做為核心記錄這篇博客是基于通信協(xié)議之間的通信是十六進(jìn)制進(jìn)行通信的可選波特率,數(shù)據(jù)位停止位采用校驗(yàn)功能和代碼的實(shí)現(xiàn)界面是用窗體表現(xiàn)的界面的實(shí)現(xiàn)就不過(guò)多的貼代碼和說(shuō)怎么去實(shí)現(xiàn)了,有個(gè)很好用的工具,可以直接拖控件,跟做很像

串口通信以自己剛做的功能做為核心記錄這篇博客
①. 是基于modbus通信協(xié)議之間的通信
②. 是十六進(jìn)制進(jìn)行通信的
③. 可選波特率,數(shù)據(jù)位 停止位
④. 采用CRC校驗(yàn)

功能和代碼的實(shí)現(xiàn):

界面是用窗體表現(xiàn)的

界面的實(shí)現(xiàn)就不過(guò)多的貼代碼和說(shuō)怎么去實(shí)現(xiàn)了,有個(gè)很好用的工具 NETBean,可以直接拖控件,跟C#做winfrom很像,但是eclipse沒(méi)有 要自己布局的話比較耗時(shí)。ok,先說(shuō)窗體下半部分的實(shí)現(xiàn)需要用到的jar包:comm.jar ,可以在網(wǎng)上搜下如何配置

首先搜索串口

 void listPort() {
        CommPortIdentifier portId; //這個(gè)類在comm.jar中
        Enumeration a = CommPortIdentifier.getPortIdentifiers();
        while (a.hasMoreElements()) {
        portId = (CommPortIdentifier) a.nextElement();
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                list.add(portId.getName()); //這里的list是個(gè)成員變量,add之后再下拉框中刷新進(jìn)去
            }
        }
    }

波特率,數(shù)據(jù)位這些可以直接事先放在數(shù)組里面,界面一啟動(dòng)就加 載進(jìn)去了

二.打開(kāi)串口
public void selectPort(String portName, int rate, int databit, int stopbit,int parity) {
        System.out.println("selectPort()");
        this.commPort = null;
        CommPortIdentifier cpid;
        Enumeration en = CommPortIdentifier.getPortIdentifiers(); // 枚舉出所  有的串口
        while (en.hasMoreElements()) {
            cpid = (CommPortIdentifier) en.nextElement();
            if (cpid.getPortType() == CommPortIdentifier.PORT_SERIAL&&       cpid.getName().equals(portName)) {
                this.commPort = cpid;
                break;
            }
        }
        openPort(rate, databit, stopbit, parity);
    }
/**
 * @功能:打開(kāi)串口
 ** 
 **/
private void openPort(int rate, int databit, int stopbit,     int parity) {
    System.out.println("openPort()");
    // TODO Auto-generated method stub
    if (commPort == null)
        //無(wú)法找到這個(gè)端口
    else {
        //成功找到
        try {
            serialPort = (SerialPort) commPort.open(appName, timeout);
            try {
                serialPort.setSerialPortParams(rate, SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);//這里過(guò)來(lái)參數(shù)是int,要轉(zhuǎn)成16進(jìn)制,為了方便看代碼我就不轉(zhuǎn)化,直接用他的變量了
            } catch (UnsupportedCommOperationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            log("實(shí)例SerialPort成功");
        } catch (PortInUseException e) {
            throw new RuntimeException(String.format("端口為"%1$s"的串口正在被使用!",
                    commPort.getName()));
        }
    }
}


在寫上部分如何實(shí)現(xiàn)前,先說(shuō)說(shuō)掃描槍的工作相當(dāng)于最后的字符帶了回車的鍵盤輸入 ,就這樣.

三.如何將信息寫另一個(gè)互相通信的端口

將接收到的字符串轉(zhuǎn)換成16進(jìn)制:

public static byte[] HexStringBytes(String src) {
    if (null == src || 0 == src.length()) {
        return null;
    }
    byte[] ret = new byte[src.length()/2];
    byte[] tmp = src.getBytes();
    // System.out.println("tmp="+Arrays.toString(tmp));
    /*
     * int length = 0; if (tmp.length % 2 != 0) { length=(tmp.length+1)/2; }
     * length=tmp.length;
     */
    for (int i = 0; i < (tmp.length / 2); i++) {
        ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
 
    }
 
    return ret;
}
/*
 * 以字節(jié)的形式寫進(jìn)去
*/
  public void write(byte[] message) {
    System.out.println("write()");
    checkPort();
    try {
        outputStream = new BufferedOutputStream(
                serialPort.getOutputStream());
    } catch (IOException e) {
        throw new RuntimeException("獲取端口的輸出流出錯(cuò)");
    }
    try {
        outputStream.write(message);
        log("信息發(fā)送成功");
    } catch (IOException e) {
        throw new RuntimeException("向端口發(fā)送信息失敗");
    } finally {
        try {
            outputStream.close();
        } catch (Exception e) {
        }
    }
    }

附上dome下載:鏈接
推薦一款適合二次開(kāi)發(fā)的掃描槍:MS3398迷你條碼掃描槍

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/67336.html

相關(guān)文章

  • HC-05/06藍(lán)牙模塊原理使用方法

    摘要:二模塊原理藍(lán)牙模塊的通信示意圖如下兩個(gè)設(shè)備主控芯片或單片機(jī)分別連接各自的藍(lán)牙模塊,即將主控芯片與藍(lán)牙模塊的串口控制引腳交叉連接。如圖注藍(lán)牙模塊自帶轉(zhuǎn)電路。注博主演示的藍(lán)牙模塊雖然不是,但是功能和一樣。 ...

    young.li 評(píng)論0 收藏0
  • STM32CubeMX學(xué)習(xí)教程之硬件I2C讀取光照度

    摘要:使用庫(kù)讀寫環(huán)境光照度傳感器本文將教大家如何快速使用庫(kù)讀取光照度數(shù)據(jù)。五實(shí)驗(yàn)樣機(jī)測(cè)試展示通過(guò)之前配置好的面板,通過(guò)涂鴉智能進(jìn)行配網(wǎng)實(shí)時(shí)采集光照度傳感器的數(shù)據(jù)。 使用STM32 HAL庫(kù)讀寫環(huán)境光照度傳感器(BH1750) 本文將教大家如何快速使用STM32HAL庫(kù)讀取光照度數(shù)據(jù)。 實(shí)現(xiàn)功能:通...

    tinylcy 評(píng)論0 收藏0
  • 【STM32】標(biāo)準(zhǔn)庫(kù)與HAL庫(kù)對(duì)照學(xué)習(xí)教程八--串口通信詳解

    摘要:異步通信與同步通信異步通信異步通信是指通信的發(fā)送與接收設(shè)備使用各自的時(shí)鐘控制數(shù)據(jù)的發(fā)送和接收過(guò)程。同步通信同步通信時(shí)要建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)鐘的直接控制,使雙方達(dá)到完全同步。配置串口設(shè)置為異步通信基礎(chǔ)參數(shù)波特率為。 ...

    yck 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<