Java串口通信编程指南
java串口编程,java串口通信,监听者模式解析

java调用coms端口串口通信的方法。
首先需要下到串口驱动。
javacomm20-win32.zip去sun的主页应该有下的。
在这个驱动中有comm.jar,m.properties,win32com.dll这么3个重要的文件。
1、首先配置驱动,把m.properties,win32com.dll拷贝到你的jdk 中具体位置为C:\Program Files\Java\jdk1.6.0_06\bin然后配置windows系统环境变量,在path中加入C:\ProgramFiles\Java\jdk1.6.0_06\bin;打开你的java工程,配置user library,并导入comm.jar包。
2、现在就可以开始写代码了。
串口读写代码如下CommPortIdentifier portID =CommPortIdentifier.getPortIdentifier(com);//1,先拿到Identifier//其中com是String类型的,传入的是串口名com="COM1";SerialPort port = (SerialPort)portID.open("MyComm", 100000000);//2,打开串口//"MyComm"是串口名,100000000是串口过期时间(ms)。
port.setSerialPortParams(rate, databits,stopbit, parity);//3,设置串口属性//rate 波特率(默认9600),databits载波位(默认8),stopbit停止位(默认1),parity校验位(默认0无校验)port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);//4(可选)设置数据流控制模式,默认为无port.close();//关闭串口3、串口读入写出流。
java串口通信

javaCommunications API 简介 (1)利用Java实现串口(Comm)全双工通(应广大读者要求,已做修改,附件有代码) (3)主题:JA V A操作串口有感 (5)windows中java实现的串口通信 (11)Java串口通信-01 (18)Java串口通信-2 (19)笔记本电脑没有com端口 (28)如何把com3接口改为com1接口?com1,com3在结构上和用途上有差别吗? (29)javaCommunications API 简介Java提供了CommunicationAPI(包含于包中)用于通过与机器无关的方式,控制各种外部设备。
Communications API,是标准的Java的扩展部分,它在JavaAPI中是没有附带的。
因此,必须先在SUN公司网站的Java站点()上下载这个扩展类库。
1.1Communications API 简介Communications API 的核心是抽象的CommPort类及其两个子类:SerialPort类和ParallePort类。
其中,SerialPort类是用于串口通信的类,ParallePort类是用于并行口通信的类。
CommPort类还提供了常规的通信模式和方法,例如:getInputStream( )方法和getOutputStream( )方法,专用于与端口上的设备进行通信。
然而,这些类的构造方法都被有意的设置为非公有的(non-public)。
所以,不能直接构造对象,而是先通过静态的CommPortIdentifer.getPortIdentifiers()获得端口列表;再从这个端口列表中选择所需要的端口,并调用CommPortIdentifer对象的Open( )方法,这样,就能得到一个CommPort对象。
当然,还要将这个CommPort对象的类型转换为某个非抽象的子类,表明是特定的通讯设备。
该子类可以是SerialPort类和ParallePort类中的一个。
java串口通信

java串⼝通信java串⼝通信,由于没有相应的串⼝硬件,选了⼀款windows串⼝虚拟机机器1. 准备串⼝模拟器Launch Virtual Serial Port Driver模拟两对四个串⼝,COM1发送数据给COM2,COM3发送数据给COM4java包<dependency><groupId>com.fazecast</groupId><artifactId>jSerialComm</artifactId><version>[2.0.0,3.0.0)</version></dependency>2. java源代码mport com.fazecast.jSerialComm.SerialPort;import com.fazecast.jSerialComm.SerialPortDataListener;import com.fazecast.jSerialComm.SerialPortEvent;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/*** @Classname ComTest* @Description com串⼝通信* @Date 2021/9/4 10:44* @Created by huangsm*/public class ComTest {/*** <com名称,SerialPort>串⼝通信map,存储串⼝名称与串⼝信息*/private Map<String, SerialPort> comMap = new HashMap<>();/*** com⼝列表*/private List<String> comList = new ArrayList<>();public ComTest() {//将所有的串⼝信息放⼊comlist,comMap中SerialPort[] commPorts = SerialPort.getCommPorts();for (SerialPort commPort : commPorts) {comList.add(commPort.getSystemPortName());comMap.put(commPort.getSystemPortName(), commPort);//监听所有串⼝通信的数据commPort.openPort();commPort.addDataListener(new SerialPortDataListener() {@Overridepublic int getListeningEvents() {return SerialPort.LISTENING_EVENT_DATA_RECEIVED;}@Overridepublic void serialEvent(SerialPortEvent serialPortEvent) {byte[] newData = serialPortEvent.getReceivedData();System.err.println(String.format("串⼝%s接收到数据⼤⼩:%s,串⼝数据内容:%s",serialPortEvent.getSerialPort().getSystemPortName(),newData.length,new String(newData))); }});}}public static void main(String[] args) throws Exception {ComTest comTest = new ComTest();List<String> comList = List;Map<String, SerialPort> comMap = Map;BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in));while (true) {System.out.println("你的可以通信的串⼝列表");for (String comName : comList) {System.out.println("========" + comName + "========"); }System.out.println("请输⼊你的串⼝:");String com = systemIn.readLine();if(!comList.contains(com)){System.out.println("输⼊的串⼝不正确:");continue;}System.out.println("输⼊你要发送的消息:");String msg = systemIn.readLine();SerialPort serialPort = comMap.get(com);serialPort.writeBytes(msg.getBytes(),msg.getBytes().length);//这⾥是让串⼝先接收到数据再重新发送数据Thread.sleep(1000);}}}3. 运⾏结果你的可以通信的串⼝列表========COM1================COM2================COM3================COM4========请输⼊你的串⼝:COM3输⼊你要发送的消息:137912037串⼝COM4接收到数据⼤⼩:9,串⼝数据内容:137912037你的可以通信的串⼝列表========COM1================COM2================COM3================COM4========请输⼊你的串⼝:。
Java串口通信详解

Java串口通信详解序言说到开源,恐怕很少有人不挑大指称赞。
学生通过开源代码学到了知识,程序员通过开源类库获得了别人的成功经验及能够按时完成手头的工程,商家通过开源软件赚到了钱……,总之是皆大欢喜。
然而开源软件或类库的首要缺点就是大多缺乏详细的说明文档和使用的例子,或者就是软件代码随便你用,就是文档,例子和后期服务收钱。
这也难怪,毕竟就像某个著名NBA 球员说的那样:“我还要养家,所以千万美元以下的合同别找我谈,否则我宁可待业”。
是啊,支持开源的人也要养家,收点钱也不过分。
要想既不花钱又学到知识就只能借助网络和了,我只是想抛砖引玉,为开源事业做出点微薄共献,能为你的工程解决哪怕一个小问题,也就足够了。
虽然我的这个系列介绍的东西不是什么Web框架,也不是什么开源服务器,但是我相信,作为一个程序员,什么样的问题都会遇到。
有时候越是简单的问题反而越棘手;越是小的地方就越是找不到称手的家伙。
只要你不是整天只与“架构”、“构件”、“框架”打交道的话,相信我所说的东西你一定会用到。
1串口通信简介1.1常见的Java串口包1.2串口包的安装(Windows下)2串口API概览mPortmPortIdentifierm.SerialPort2.4串口API实例2.4.1列举出本机所有可用串口2.4.2串口参数的配置2.4.3串口的读写3串口通信的通用模式及其问题3.1事件监听模型3.2串口读数据的线程模型3.3第三种方法4结束语1串口通信简介嵌入式系统或传感器网络的很多应用和测试都需要通过PC机与嵌入式设备或传感器节点进行通信。
其中,最常用的接口就是RS-232串口和并口(鉴于USB接口的复杂性以及不需要很大的数据传输量,USB接口用在这里还是显得过于奢侈,况且目前除了SUN有一个支持USB 的包之外,我还没有看到其他直接支持USB的Java类库)。
SUN的CommAPI分别提供了对常用的RS232串行端口和IEEE1284并行端口通讯的支持。
用Java开发的一种实用串行通信程序

b Dr e  ̄ c i r; v S r g c n e t n L : d e o b : x t n o n e i UR i o b :d c t x ; p C n e d n c n:n l; o n c o o ul P e ae S ae n s n =n l; r p r d ttme t n t p ul
i UL; fn R ) o
建 立连 接 后 , 可通 过 Peae.a m n 接 即 rprd te et St
口进行数据库的插人 、 更改 、 删除及查询操作。
2 1 1 数据 库 的插 入操 作 ..
数据库操作, v 的串口操作 。下面分别加 以论 Ja a
述。
S n aetQ N E T IT ps k(d a, t g[sr L= Is R N O tys i.r i r S j
维普资讯
29 年3l O 1 第 O 2 第/ 1卷 期
沈 g] ̄t e f eoat n n Ju ] f h na阳航空工业学院学报 a E g er g om ̄ 0 Seyn n d t o A rnui l ni ei u c
M l2 0 a O2 "
特定 的 Widw 环境 下运行 , 于 U i no s 对 nx等平 台则 必须 再次开 发 。
能否采用一种与平台无关的软件开发串行通 信程序一直是软件行业所向往 的. J a 而 a 的跨平 v 台特性正适合这 种需求 。J 引进 了虚拟机原 a ” 理 , Jv 语 言具 有与平 台无关性 。 即用 Jv 使 aa aa语 言编写的程序可以任何时候在任何一台计算机上 运行 。本文结台数据库的数据维护等诸多优 点, 开发出了利用 Jv 编写 的完整 的串行通信使 用 aa
java 虚拟串口 远程通信原理

Java虚拟串口远程通信的原理是通过模拟串口通信的方式,在网络上实现两个或多个Java 应用程序之间的数据传输。
一般来说,虚拟串口远程通信的原理包括以下几个关键步骤:
1.创建虚拟串口:使用Java提供的串口库,创建一个虚拟串口对象。
这个虚拟串口可以
在本地计算机上运行,并模拟真实的串口行为。
2.建立网络连接:使用网络协议(如TCP/IP)在两个或多个Java应用程序之间建立网络
连接。
其中,一个应用程序充当服务器端,另一个或多个应用程序充当客户端。
3.串口数据传输:将要传输的数据通过虚拟串口对象进行读取和写入操作。
对于服务器端,
可以从虚拟串口读取数据并通过网络发送给客户端。
对于客户端,可以从网络接收数据并通过虚拟串口写入。
4.数据处理:接收方(服务器端或客户端)从虚拟串口中读取到数据后,可以进行必要的
数据处理操作。
例如,解析数据、执行特定的指令或操作等。
需要注意的是,虚拟串口远程通信需要保证网络的稳定性和可靠性。
由于网络延迟和不确定性,可能会影响数据传输的实时性和准确性。
因此,在设计虚拟串口远程通信系统时,需要考虑数据传输的可靠性,并采取相应的措施来处理数据丢失、重传等问题。
总结起来,Java虚拟串口远程通信的原理是通过模拟串口通信,在网络上实现两个或多个Java应用程序之间的数据传输。
它涉及到创建虚拟串口对象、建立网络连接、串口数据传输和数据处理等步骤。
Java串口通信编程指导

Java串口通信编程指导Java串口通信编程概述在java中,利用Java Communication包能够操作串口,但官方的包在3.0之后就只支持Linux和Solaris平台了,Windows平台的只支持到98年出的2.0版本,只是在XP下还能使用。
另外,也能够用开源的Rxtx实现串口通信,那个地点仅以Java Communication包,在Windows平台实现串口通信进行讲明。
前期预备下载Java Communication包下载地址如下:/Jolt/javacomm20-win32.zip。
配置解压缩javacomm20-win32.zip把win32com.dll拷贝到{JA V A_HOME}\jre\bin把comm.jar拷贝到{JA V A_HOME}\jre\lib\extset CLASSPATH={JA V A_HOME}\jre \lib\ext \comm.jar;%classpath%实现过程要紧步骤包括:获得串口标识打开串口设置串行端口通讯参数猎取输入(出)流进行读写操作获得串口标识指定串口的端口号,生成串口的标识类的实例。
a. 通过驱动决定通讯端口是可用的。
b. 打开通讯端口为了I/O操作。
c. 决定端口的拥有者。
d. 解析端口拥有者的争夺。
e. 治理事件显示在端口拥有者的中的状态改变。
示例代码如下:代码:打开串口示例代码如下:代码:5000(毫秒)是超时时刻。
设置串行端口通讯参数设置串口传输的波特率、数据位、停止位、奇偶校验等参数。
示例代码如下:代码:try {// 通信条件の設定// 通信速度 9600 baud// データビット 8bit// ストップビット 1bit// パリティなし// フローコントロールの設定// 無制御を使用port.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);} catch (UnsupportedCommOperationException ex) {ex.printStackTrace();System.exit(1);}猎取输入(出)流利用getInputStream()以及getOutputStream()从每个串口产生对应的输入输出流对象。
java 串口通信案例

java 串口通信案例Java串口通信是指使用Java编程语言实现与串口设备之间的数据通信。
串口通信在很多应用场景中都有广泛的应用,比如物联网、工业自动化、智能家居等领域。
本文将列举十个以Java串口通信为题的案例,介绍其实现方法和应用场景。
1. 串口读取数据通过Java编程语言实现串口读取数据的功能,可以使用Java的串口通信库,如RXTX、JavaComm等。
首先需要打开串口,并设置串口参数,然后通过监听串口数据的方式实时读取串口传入的数据。
这个案例适用于需要实时监控串口设备数据的应用场景,比如环境监测。
2. 串口发送数据通过Java编程语言实现串口发送数据的功能,可以使用Java的串口通信库。
首先需要打开串口,并设置串口参数,然后通过写入数据的方式将数据发送到串口设备。
这个案例适用于需要向串口设备发送指令或数据的应用场景,比如控制外部设备。
3. 串口数据解析通过Java编程语言实现串口数据解析的功能,可以将从串口读取的原始数据进行解析,提取出有用的信息。
可以根据数据格式进行解析,比如按照特定的协议解析数据。
这个案例适用于需要对串口设备传输的数据进行处理和分析的应用场景。
4. 串口数据存储通过Java编程语言实现串口数据存储的功能,可以将从串口读取的数据保存到本地文件或数据库中。
可以根据需求选择适当的存储方式,比如文本文件、二进制文件或数据库。
这个案例适用于需要对串口设备传输的数据进行长期存储和分析的应用场景。
5. 串口数据转发通过Java编程语言实现串口数据转发的功能,可以将从一个串口读取的数据转发到另一个串口。
可以实现串口设备之间的数据交互,比如串口设备之间的数据通信或设备之间的数据同步。
这个案例适用于需要多个串口设备之间进行数据交互的应用场景。
6. 串口数据监控通过Java编程语言实现串口数据监控的功能,可以监控串口设备的状态和传输数据。
可以实时显示串口设备的连接状态、波特率、数据位、停止位等信息,并实时显示串口传输的数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java串口通信编程指南1. 概述在java中,利用Java Communication包可以操作串口,但官方的包在3.0之后就只支持Linux和Solaris平台了,Windows平台的只支持到98年出的2.0版本,不过在XP下还能使用。
另外,也可以用开源的Rxtx实现串口通信,这里仅以Java Communication包,在Windows 平台实现串口通信进行说明。
2. 前期准备2.1. 下载Java Communication包✧下载地址如下:/Jolt/javacomm20-win32.zip。
✧如果是非Windows平台,请到Sun网站选择其他版本下载。
地址如下:/download/products.xml?id=43208d3d2.2. 配置✧解压缩javacomm20-win32.zip✧把win32com.dll拷贝到{JAVA_HOME}\jre\bin✧把comm.jar拷贝到{JAVA_HOME}\jre\lib\ext✧把m.properties拷贝到{JAVA_HOME}\jre\lib✧set CLASSPATH={JAVA_HOME}\jre \lib\ext \comm.jar;%classpath%3. 实现过程主要步骤包括:✧获得串口标识✧打开串口✧设置串行端口通讯参数✧获取输入(出)流✧进行读写操作3.1. 获得串口标识指定串口的端口号,生成串口的标识类的实例。
mPortIdentifier是通讯端口管理器,控制访问到通讯端口的中心类。
一个应用程序首先使用CommPortIdentifier中的方法,通过相关的驱动去获取那些通讯端口是可用的并且选择一个端口便于开始。
它包括如下功能:a. 通过驱动决定通讯端口是可用的。
b. 打开通讯端口为了I/O操作。
c. 决定端口的拥有者。
d. 解析端口拥有者的争夺。
e. 管理事件显示在端口拥有者的中的状态改变。
示例代码如下:代码:3.2. 打开串口示例代码如下:代码:5000(毫秒)是超时时间。
3.3. 设置串行端口通讯参数设置串口传输的波特率、数据位、停止位、奇偶校验等参数。
示例代码如下:代码:try {// 通信条件の設定// 通信速度 9600 baud// データビット 8bit// ストップビット 1bit// パリティなし// フローコントロールの設定// 無制御を使用port.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);} catch (UnsupportedCommOperationException ex) {ex.printStackTrace();System.exit(1);}3.4. 获取输入(出)流利用getInputStream()以及getOutputStream()从每个串口产生对应的输入输出流对象。
示例代码如下:代码://受信バッファprotected BufferedReader comReader;//送信バッファprotected BufferedOutputStream comWriter;try {// RS-232C 入力用の Reader を生成comReader = new BufferedReader(new InputStreamReader(port.getInputStream()));// RS-232C 出力用の Writer を生成comWriter=new BufferedOutputStream(port.getOutputStream());} catch (IOException ex){ex.printStackTrace();3.5. 进行读写操作✧写操作很简单,只需要调用BufferedOutputStream的write()方法就可以了。
示例代码如下:代码:✧读操作,需要如下步骤:✓继承SerialPortEventListener接口。
✓为SerialPort添加监听Listener。
✓实现该接口的serialEvent(SerialPortEvent event)方法。
✓通过BufferedReader的read()方法逐byte读取。
当然也可以用readLine()方法进行逐行读取。
示例代码如下:代码:public class SerialPortTerminal extends SerialPortHandlerimplementsSerialPortEventListener {//受信バッファprotected BufferedReader comReader;//送信バッファprotected BufferedOutputStream comWriter;public SerialPortTerminal(String portName){super(portName,"SerialPortTerminal");try {// SerialPortEvent を受け取るためのリスナの登録port.addEventListener(this);} catch(TooManyListenersException ex){ex.printStackTrace();System.exit(1);}// Data Available イベントを受け取るようにするport.notifyOnDataAvailable(true);try {// RS-232C 入力用の Reader を生成comReader = new BufferedReader(newInputStreamReader(port.getInputStream()));// RS-232C 出力用の Writer を生成comWriter = newBufferedOutputStream(port.getOutputStream());} catch (IOException ex){ex.printStackTrace();System.exit(1);}}// イベント処理ルーチンpublic void serialEvent(SerialPortEvent event) { switch(event.getEventType()) {case SerialPortEvent.OUTPUT_BUFFER_EMPTY:// Data Available 以外のイベントは処理しないbreak;case SerialPortEvent.DATA_AVAILABLE:// Data Available の処理String buffer = null;StringWriter strWriter = new StringWriter();char[] c = new char[20];int newData = 0;int i = 0;while (true) {try {newData = comReader.read();// 入力ストリームから読み込みif (newData == -1 || newData == 0x0d) {// CRbreak;}c[i] = (char)newData;if(i > 100){break;}} catch (IOException ex) {return;}i++;}try{strWriter.write(c);strWriter.flush();buffer = strWriter.toString();strWriter.close();retText = buffer;comReader.close();port.close();}catch(Exception e){}setReadfinishFlg(true);break;}4. 测试相关正确安装Java Communication API,并将自己的程序编译通过以后,你可以按如下方法测试这个程序。
如果你只有一台机器,你可以利用一条RS-232电缆将COM1和COM2连接起来,在COM1上运行自己的串口读写程序,在COM2上运行第二章辅助工具中提到的串口调试工具。
如果你有两台机器的话,你可以利用一条RS-232电缆将两台机器的COM1(或者是COM2)连接起来,在一端运行程序,另外一端运行串口调试工具。
5. 示例代码6. 辅助工具6.1. 模拟串口✧软件名称:Virtual Serial Port Driver✧目的:由于串口开发,需要硬件接口,以及串口链接线。
使用本软件可以在没有硬件串口接口和链接线的情况下,模拟出串口,并且可以让模拟出的两个串口互相导通。
✧下载地址:/download/vspdxp/(14天免费试用)6.2. 串口调试工具✧软件名称:Serister✧目的:测试的辅助工具,日文界面,可以接受RS232C传过来的数据,并且以多种形式表现出来,如以十六进制显示,以文本方式显示等。
还可以编辑送信内容,进行送信等。
✧下载地址:http://www.vector.co.jp/soft/win95/hardware/se423507.html (免费)✧软件名称:SuperCommTool超级串口调试器✧目的:和上面的功能类似,这个是中文界面的。
✧下载地址:/detail/8/71193.shtml (免费)✧软件名称:串口调试(AccessPort)✧目的:更强大的串口检测调试工具。
✧下载地址:/soft/9838.html (免费)08916831085032050F0 11000D91 5108153952F9 000000 02 C83408916831085032050F011000D915108153952F900000002C8340891683108200545F94405A10180F600080110401130012360050003470202660E4E4B4E0 0FF0C8BF759A555844FDD7BA1FF0C4E2D56FD79FB52A84E0D4F1A4EE54EFB4F5565B95F0F5 41160A87D2253D68BE55BC67801FF0C8BF752FF544A77E54ED64EBA3002611F8C22900962E94E2D56 FD79FB52A8FF010891683108200505F0040D91685108153952F900000190709015652301413108200505F05108153952F908916831085032050F11000D91685108153952F900000002C834 0011000D91683168111930F30008AA0862116210529F4E860011000D91685108153952F90008AA0862116210529F4E860011000d91685108153952F90008AA0862116210529F4E860011000d91685108153952F90008AA08CED2B3C9B9A6C1CB 5108153952F9。