新学期开始,老师出个题,让我写个串口通信程序,因为我学的是java,所以就采用java语言。在百度上搜索了一番,找到了一些资料,然后就在别人的demo上面做修改。
<hr>
由于我的机器是win7 64位系统,而sun公司的javax.comm包没有支持64位的,而且sun公司已经停止了对其更新,所以我采用rxtx开源包
RXTX的旧版本支持在javax.comm-win32-2.0基础上的扩展,RXTX新版本支持对javax.comm的覆盖式支持,原来用javax.comm的把所有import javax.comm.*改成import gnu.io.*即可。
通过CommPort类的getInputStream()和getOutputStream()方法分别获得端口的输入流和输出流
串口通信应用程序有两种模式:一种是实现SerialPortEventListener接口,通过监听串口事件并作相应处理
另一种就是建立一个独立的接收线程负责数据的接收。
最基本的串口通信很快通过网上的程序实现了简单的一发一收效果,接着就是完成老师提供的文档协议的通信要求。
首先是将待发送的数据封装成帧,帧的格式如图:
校验单元 ,针对帧体中的“帧体长度”和“数据净荷”内容进行校验(从“帧体”的第一个字节计算到数据净荷的最后一个字节)
接下来进行转义,转义需求如下:
当数据中出现0X7E时,将0X7E用两个字符0X7D、0X5E代替;当数据中出现0X7D时,将0X7D用两个字符0X7D、0X5D代替
到此,一帧待发送的完整的数据就已经封装好了,后面我会再讲到如何针对封装好的数据进行解析还原。
本文介绍了使用Java的RXTX库在Win7 64位系统上进行串口通信的方法,包括数据帧的封装,涉及帧格式、校验和转义规则。通过实现SerialPortEventListener接口或建立接收线程来处理串口事件。

2528

被折叠的 条评论
为什么被折叠?



