Java串口通信详细解释
学生通过开源码学到了知识,程序猿通过开源类库获得了别人的成功经验及可以按时完毕手头的project,商家通过开源软件赚到了钱……,总之是皆大欢喜。
然而开源软件或类库的首要缺点就是大多缺乏具体的说明文档和使用的样例,或者就是软件代码随便你用。就是文档,样例和后期服务收钱。这也难怪,毕竟就像某个著名NBA球员说的那样:“我还要养家。所以千万美元下面的合同别找我谈。否则我宁可待业”。是啊,支持开源的人也要养家,收点钱也只是分。要想既不花钱又学到知识就仅仅能借助网络和了,我仅仅是想抛砖引玉,为开源事业做出点微薄共献,能为你的project解决哪怕一个小问题,也就足够了。
仅仅要你不是整天仅仅与“架构”、“构件”、“框架”打交道的话,相信我所说的东西你一定会用到。
当中,最经常使用的接口就是RS-232串口和并口(鉴于USB接口的复杂性以及不须要非常大的传输数据量。USB接口用在这里还是显得过于奢侈。况且眼下除了SUN有一个支持USB的包之外。我还没有看到其它直接支持USB的Java类库)。
SUN的CommAPI分别提供了对经常使用的RS232串行port和IEEE1284并行port通讯的支持。
RS-232-C(又称EIA RS-232-C。下面简称RS232)是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。
RS232是一个全双工的通讯协议。它能够同一时候进行数据接收和发送的工作。

主要包含下面方法

这样,原本是10000000的byte类型的数变成int型就成了1111111110000000,这是非常严重的问题。应该注意避免。
因为向串口写数据非常easy,所以这里我们仅仅关注于从串口读数据的情况。通常。串口通信应用程序有两种模式,一种是实现SerialPortEventListener接口,监听各种串口事件并作对应处理;还有一种就是建立一个独立的接收线程专门负责数据的接收。
因为这两种方法在某些情况下存在非常严重的问题(至于什么问题这里先卖个关子J)。所以我的实现是採用第三种方法来解决问题。
也就是说当串口有数据到达时,你能够在serialEvent中接收并处理所收到的数据。然而在我的实践中,遇到了一个十分严重的问题。
串口设定的波特率是115200,川口每隔128毫秒返回一组数据(大约是30字节左右),周期(即持续时间)为31秒。实測的时候在一个周期内应该返回4900多个字节,而用事件监听模型我最多仅仅能收到不到1500字节,不知道这些字节都跑哪里去了,也不清楚究竟丢失的是那部分数据。值得注意的是。这是我将serialEvent()中全部处理代码都注掉。仅仅剩下打印代码所得的结果。数据丢失的如此严重是我所不能忍受的,于是我决定採用其它方法。
两个线程以生产者—消费者模式协同工作。数据的流向例如以下图所看到的:
这一延迟对于一个实时的显示系统来说简直是灾难!
解决这个问题的方法说穿了事实上非常easy。就是从根源入手。根源不就是接收线程导致的吗,那好。我就干脆取消接收线程和作为中介的共享缓存,而直接在处理线程中调用串口读数据的方法来解决这个问题(什么,为什么不把处理线程也一并取消?----都取消应用程序界面不就锁死了吗?所以必须保留)于是程序变成了这样:
本文介绍了串口通信的基本知识,以及经常使用的几种模式。通过实践,提出了一些问题,并在最后加以解决。值得注意的是对于第一种方法。我曾将传感器发送的时间由128毫秒添加到512毫秒。仍然有非常严重的数据丢失现象发生,所以假设你的应用程序须要非常精密的结果。数据传输的速率又非常快的话,就最好不要用第一种方法。对于另外一种方法,因为是线程导致的问题,所以对于不同的机器应该会有不同的表现。对于那些处理多线程比較好的机器来说,应该会好一些。可是我的机器是Inter 奔四3.0双核CPU+512DDR内存。这样都延迟这么厉害。还强得多CPU才行啊?因此,对于大量的数据传输的,第三种方法是用它。但是,这是非常多的世界难题,还有更多悬而未决的问题比已知问题,也许还有什么其他问题。通过以下联系方式欢迎你和我一起学习。
Java串口通信详细解释的更多相关文章
- Java串口通信具体解释
序言 说到开源,恐怕非常少有人不挑大指称赞.学生通过开源码学到了知识,程序猿通过开源类库获得了别人的成功经验及可以按时完毕手头的project,商家通过开源软件赚到了钱……,总之是皆大欢喜.然而开源软 ...
- 设计模式 - 迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释
迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考迭代器模式(ite ...
- java串口通信丢包
java串口通信丢包问题 前段时间公司要求做一个java应用和pos串口通信的工具,调试好了好久每次都是只能接收到一包数据后续的数据都丢失了. 经过修改读写的流的缓存大小亲测都正常代码如下: seri ...
- Java 串口通信
在Windows系统下,用Java开发串口通信相关的程序时,需要用到几个文件. (1)win32com.dll 要放在jdk\jre\bin目录下. (2)comm.jar 和javax.comm.p ...
- java 串口通信 代码
下面是我自己实现的串口接收的类,串口发送比较简单,就直接发送就可以了.下面的这个类可以直接使用. package com.boomdts.weather_monitor.util; import ja ...
- Java串口通信--------基于RXTX (附带资源地址)
最近帮老师做了一个小项目,一个牧场公司想用传感器收集一些环境信息,记录到数据库里去,然后加以分析查看.这里面和传感器通信用到了串口通信,我也是接触了一下,把用到的东西分享出来. 准备工作: RXTX: ...
- Java串口通信 RXTX 解决过程
背景介绍: 由于第一次用Java与硬件通信,网上查了许多资料,在这进行整理,便于以后学习.本人串口测试是USB串口设备连接电脑,在设备管理器中找到端口名称(也可以通过一些虚拟串口工具模拟). 下面主要 ...
- java 串口通信实现流程
1.下载64位rxtx for java 链接:http://fizzed.com/oss/rxtx-for-java 2.下载下来的包解压后按照说明放到JAVA_HOME即JAVA的安装路径下面去 ...
- java Socket使用详细解释
客户/server通信模式, client需要主动创造和server Socket(套接字), server端收到了client的连接请求, 也会创建与客户连接的 Socket. Socket可看做是 ...
随机推荐
- delegate实现Javascript的each方法
C#如何用delegate实现Javascript的each方法 C#中有很多易混淆的关键词,例如delegate,Func, Action和 Predicate.Func, Action和 Pr ...
- 设计模式 - Abstract Factory模式(abstract factory pattern) 详细说明
Abstract Factory模式(abstract factory pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/ ...
- MYSQL IFNULL使用功能
稍后的MYSQL IFNULL使用此功能的特定叙事,供大家参考学习,假设你MYSQL IFNULL条款的使用功能类别遇到似问题.最好看. MYSQL IFNULL(expr1,expr2) ...
- Linux 编程学习笔记----过程管理和项目发展(在)
转载请注明出处,http://blog.csdn.net/suool/article/details/38406211,谢谢. Linux进程存储结构和进程结构 可运行文件结构 例如以下图: 能够看出 ...
- ASP.NET MVC 5 入门摘要
翻译和编辑的第一阶段后,.我们已经发出12片ASP.NET MVC 5入门文章. 他们中的大多数来自翻译ASP.NET MVC 5 官方教程,因为本系列文章言简意赅,篇幅适中,从一个web站点演示样例 ...
- Android复制iPhone日期和时间选择器
看效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fi ...
- MAC 10.10 apache 服务器配置
mac中自带了apache服务器, 如果需要在mac上使用apache服务器, 只需要配置并启动服务器即可. mac 10.10 中自带的apache版本是 2.4 mac 10.9 中自带的apac ...
- Spring.Net控制翻转、依赖注入、面向切面编程
Spring.Net快速入门:控制翻转.依赖注入.面向切面编程 Spring.Net主要功能: 1.IoC:控制翻转(Inversion of Control) 理解成抽象工厂翻转控制:就是创建对象 ...
- Lua 环境结构 --Linux
curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz tar zxf lua-5.2.3.tar.gz cd lua-5.2.3 make linux ...
- Linux删除以破折号开头的文件Windows在批处理文件来删除隐藏属性
昨天去打印店打印的材料.结果中毒.所有的文件被隐藏.生成一个一堆快捷键.回来后.我很容易地把它放入Linux机,我想删除这些文件怪. 下面是该过程,遇到的问题. 1.您无法删除'-'该文件的开头 最初 ...