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可看做是 ...
随机推荐
- 1159 Palindrome(最小插入回文串)
标题效果 定的字符串长度的串和内容.中的字符可以在任何位置被插入.它至少需要为数字,这使得编程回文串串. 回文序列从左至右,从右到左和读取相同. 例如. aaaacbbbb它是一个回文串 aaab前面 ...
- LeetCode: Distinct Subsequences [115]
[称号] Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequ ...
- Oracle 闪回表实验
工:闪回表实验 1.结构测试表flb_test,数据不小于10000行: TEST_USER1@PROD>create table flb_test(id number,dd date); Ta ...
- 新手学Unity3d的一些网站及相应学习路线
一.unity3d有什么优势 如果您对开发游戏感兴趣,而又没有决定选择哪一个游戏引擎,别犹豫了 unity3d是一个很好的选择! 就我来看unity3d优势主要有以下几方面:首先部署简单,自带了一个I ...
- MVC 应用免受 CSRF攻击
保护ASP.NET 应用免受 CSRF 攻击 CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack ...
- Android Tween Animation
View Animation, 它显示在view向上Tween Animation Tween动画.本质上没有变化View对象本身.只要改变它绘制 实施方式有两种.一个xml定义,直接在代码中的定义 ...
- Install Orace 11g on Solaris 10 Sparc 64 bit
昨天有一个客户端安装11g数据库.整个安装过程和一些遇到的问题是一个创纪录.共享. 由于客户不能使用自己的机器远程连接到server,意通过U盘.移动硬盘等拷贝不论什么文件.因此一些记录内容无法做到非 ...
- OpenCV视频播放方法
OpenCV视频播放方法 今天折腾了一下OpenCV的视频播放功能,希望能对项目又帮助- 代码还是非常easy的,仅仅是之前遇到点小麻烦,找不到cvCreateFileCapture函数的定义,花了一 ...
- POJ2195 Going Home 【最小费用流】+【最佳匹配图二部】
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18169 Accepted: 9268 Descr ...
- leetcode先刷_Maximum Subarray
dp创始人级精英赛的冠军.最大的部分和. 扫从左至右,保持一个最佳值而当前部分和,在这一部分,并成为负值什么时候.再往下的积累后,也起到了负面作用,所以,放弃直销,然后部分和初始化为阅读的当前位置. ...