博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于串口通信开发的几点注意事项
阅读量:5296 次
发布时间:2019-06-14

本文共 2036 字,大约阅读时间需要 6 分钟。

1.注意串口设备本身的性能:

发送的消息间隔,发送的时候使用线程休眠即可

2.单工还是双工:

这个问题和使用的IO流相关。若为单工,则虽可以获取到串口对应的输入流和输出流,但不能够同时使用,也就是需要使用同步操作控制流的使用。

这样可保证串口通信工作稳定,不至于出现跑着跑着没有响应消息了。

public synchronized void serialEvent(SerialPortEvent event) {        System.out.println("事件通知" + event.getEventType());        switch (event.getEventType()) {            case SerialPortEvent.BI:            case SerialPortEvent.OE:            case SerialPortEvent.FE:            case SerialPortEvent.PE:            case SerialPortEvent.CD:            case SerialPortEvent.CTS:            case SerialPortEvent.DSR:            case SerialPortEvent.RI:            case SerialPortEvent.OUTPUT_BUFFER_EMPTY:                break;            case SerialPortEvent.DATA_AVAILABLE:// 当有可用数据时读取数据,并且给串口返回数据                byte[] btAryBuffer = new byte[4096];                try {                    if (inputStream.available() > 0) {                        int nLenRead = inputStream.read(btAryBuffer);                        if (nLenRead > 0) {                            byte[] btAryReceiveData = new byte[nLenRead];                            System.arraycopy(btAryBuffer, 0, btAryReceiveData, 0,                                    nLenRead);                            runReceiveDataCallback(btAryReceiveData);                        }                    }                } catch (IOException e) {                    e.printStackTrace();                }                break;        }    }

 

private synchronized int sendMessage(byte[] btArySenderData) {        System.out.println("发送的数据" + ConvertUtil.bytesToHexString(btArySenderData));        try {            synchronized (outputStream) {        //防止并发                outputStream.write(btArySenderData);            }        } catch (IOException e) {            onLostConnect();            System.out.println("输入流崩溃");            e.printStackTrace();            return -1;        } catch (Exception e) {            return -1;        }        sendData(btArySenderData);        return 0;    }

 

转载于:https://www.cnblogs.com/zixiaoguan/p/7999509.html

你可能感兴趣的文章
标识符
查看>>
Sqli labs系列-less-4 这关好坑!!!
查看>>
路由跟踪工具0trace
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
boost库使用:vs2013下boost::container::vector编译出错解决
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
理解运算符重载 4
查看>>
快来熟练使用 Mac 编程
查看>>
第二周
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
plsql使用,为什么可以能看见其他用户的表
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
Scripting Java #3:Groovy与invokedynamic
查看>>
2014-04-21-阿里巴巴暑期实习-后台研发-二面经验
查看>>
数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
查看>>
使用pager进行分页
查看>>
UVA - 1592 Database
查看>>
Min Stack
查看>>
从LazyPhp说起
查看>>