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可看做是 ...
随机推荐
- udacity android 学习笔记: lesson 4 part b
udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...
- Maven学习笔记(十一年):柔性结构
一个典型的项目将是开发环境.测试环境和生产环境,这些环境的数据库配置是不一样的,并使用正确的配置. Maven为了支持构建的灵活性,内置了三大特性,即属性.Profile和资源过滤.本章将介绍这些特性 ...
- hdu 2767 Proving Equivalences 强连通缩点
给出n个命题,m个推导,问最少添加多少条推导,能够使全部命题都能等价(两两都能互推) 既给出有向图,最少加多少边,使得原图变成强连通. 首先强连通缩点,对于新图,每一个点都至少要有一条出去的边和一条进 ...
- Linux经常使用的命令(十) - nl
nl命令在linux系统中用来计算文件里行号. nl 能够将输出的文件内容自己主动的加上行号.其默认的结果与 cat -n 有点不太一样. nl 能够将行号做比較多的显示设计,包含位数与是否自己主动补 ...
- ZOJ1463:Brackets Sequence(间隙DP)
Let us define a regular brackets sequence in the following way: 1. Empty sequence is a regular seque ...
- WPF学习(12)动画
本篇来学习WPF的动画.什么是动画?动画就是一系列帧.在WPF中,动画就是在一段时间内修改依赖属性值的行为,它是基于时间线Timeline的.有人会说,要动画干嘛,华而不实,而且添加了额外的资源消耗而 ...
- 算法----选择排序(select sort)
排序不是一个时间的数组进行排序,找到最小的元素,其与阵列的第一个元素交换,因此,排序的数组. 算法: void sort::select_sort(int* a,const int n) { for( ...
- 前端angularjs+requirejs+dhtmlx 后端asp.net webapi
享一个前后端分离方案源码-前端angularjs+requirejs+dhtmlx 后端asp.net webapi 一.前言 半年前左右折腾了一个前后端分离的架子,这几天才想起来翻出来分享给大家 ...
- 不同版本的SQL Server之间数据导出导入的方法及性能比较
原文:不同版本的SQL Server之间数据导出导入的方法及性能比较 工作中有段时间常常涉及到不同版本的数据库间导出导入数据的问题,索性整理一下,并简单比较下性能,有所遗漏的方法也欢迎讨论.补充. 0 ...
- SQL开发中容易忽视的一些小地方( 三)
原文:SQL开发中容易忽视的一些小地方( 三) 目的:这篇文章我想说说我在工作中关于in和union all 的用法. 索引定义 : 微软的SQL SERVER提供了两种索引:聚集索引(cluster ...