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可看做是 ...
随机推荐
- virtio-netdev 发送数据包
在前面几文中已经大体介绍了virtio的重要组成,包含virtio net设备的创建,vring的创建,与virtio设备的交互方式.我们就从网络数据包的发送角度来看下virtio的详细使用流程. [ ...
- 利用Pattern和Mather来禁止特殊字符的输入
String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}[]‘::”“’.,.?]&q ...
- CSU 1659: Graph Center(SPFA)
1659: Graph Center Time Limit: 1 Sec Memory Limit: 128 MB Submit: 63 Solved: 25 [id=1659"> ...
- 使用Emacs muse制作幻灯片
PPT太受欢迎.总是必要的交流会议.我看到一个很酷javascript实现,取代PPT. 不过还是很喜欢Emacs要做的事,即使文件难听点. 现在,用muse slidy, 一大区别. 简单的说mus ...
- poj 2935 Basic Wall Maze
是一个图论的基础搜索题- 没什么好说的就是搜索就好 主要是别把 代码写的太屎,错了不好找 #include<cstdio> #include<algorithm> #inclu ...
- 认识Backbone (三)
Backbone.Collection(集合) collection是model对象的一个有序的组合,我们可以在集合上绑定 "change" 事件,从而当集合中的模型发生变化时f ...
- 采用Java语言如何实现高速文件复制?
今天review代码也看到了"大神"用老方法来实现文件拷贝.今天归结一下使用Java语言怎样实现高速文件复制: 代码1--使用文件通道的方式: import java.io.Fil ...
- 图表引擎AChartEngine 二
这几天项目涉及到android图表绘制,网上找的Demo都是大同小异,也就如上篇博文所写的一样是基本函数的实现.可是所有能找到的Demo都和设计图不符.木有办法,Leader发话啦,万不得已的情况下不 ...
- mysql 多个字段拼接
Mysql的查询结果行字段拼接,能够用以下两个函数实现: 1. concat函数 mysql> select concat('1','2','3') from test ; +--------- ...
- Make a dent in the universe
李自成<一个数学家平反>.就像我第一次读同一,我感到鼓舞的野心文."野心是世界的驱动力的最好的结果几乎所有的工作. " 心野心是要留下点什么在自己身后的永恒价值 在这个 ...