最近制作串口读取设备数据,跟串口打交道。使用大家都熟悉的comm.jar开发。
下面简单介绍下自己的心得,希望对大家有所帮助
1. *.java加载dll文件,可运行的jar文件,调用时需要受到加载dll文件,方式如下:
/** 加载win32com.dll***************/
String driverName = "com.sun.comm.Win32Driver";//javax.comm.properties中Driver的值
CommDriver driver = null;
try {
System.loadLibrary("win32com");//dll名称
driver = (CommDriver) Class.forName(driverName).newInstance();
driver.initialize();
} catch (InstantiationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{;}
/** ************** */
2. comm.jar使用
其中,openComm(int commInterval)所在类需要实现接口:SerialPortEventListener
/**
* @return 开启串口 false:开启失败、true:开启成功
*/
public boolean openComm(int commInterval){
try {
CommPortIdentifier identifier = CommPortIdentifier.getPortIdentifier(this.com);
if(identifier == null){
return isOpen;
}
this.commInterval = commInterval;
serialPort = (SerialPort) identifier.open("serialPort", commInterval);
serialPort.setSerialPortParams(this.burdate, this.databits, this.stopbits, this.parity);
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
serialPort.notifyOnOutputEmpty(true);
//读串口线程
//ReadFromCommuThread read = new ReadFromCommuThread(serialPort);
//read.start();
isOpen = true;
log.info("打开串口" + this.com + "成功!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("打开串口" + this.com + "失败!\n" + e.getMessage());
isOpen = false;
}finally{;}
return isOpen;
}
/**
* @param str
* @return 向串口发送信息
*/
public boolean sendToComm(byte[]sender){
boolean isSended = false;
if(sender != null){
try {
if(!isOpen){//打开串口
this.openComm(this.commInterval);
}
OutputStream os = serialPort.getOutputStream();
os.write(sender);
os.flush();
os.close();
isSended = true;
} catch (IOException e) {
// TODO Auto-generated catch block
log.error(e.getMessage());
}finally{;}
}
return isSended;
}
/**
* @return 读取串口
*/
public void readFromComm(){
if(serialPort != null){
try {
iis = serialPort.getInputStream();
Thread.sleep(this.commInterval);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("@@读取串口信息出错!!");
}finally{;}
}
}
/* (non-Javadoc)
* @see javax.comm.SerialPortEventListener#serialEvent(javax.comm.SerialPortEvent)
*/
public void serialEvent(SerialPortEvent event) {
// TODO Auto-generated method stub
if(event.getEventType() == SerialPortEvent.DATA_AVAILABLE){//数据到达
try {
if(iis != null){
byte[] bts = new byte[1];
while(iis.available() > 0){
iis.read(bts);
messageBak.append(CommuUtil.Bytes2HexString(bts));
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("@@读取数据出错!!");
}finally{;}
}
}
分享到:
相关推荐
这个“WINCC 串口通讯 例子”是针对如何利用WINCC进行串行通信的一个实际示例,旨在帮助用户理解并应用串口通讯技术。 串口通讯,也称为串行通信,是一种通过串行数据线传输数据的方式。在WINCC中,串口通讯常用于...
为了在浏览器环境中实现串口通讯,通常需要借助一些浏览器插件或者WebAssembly技术来引入原生的串口API。一种常见的解决方案是使用Web Serial API,这是一个实验性的Web平台特性,允许网页访问用户的串行端口。然而...
113-串口通讯(51单片机C语言实例Proteus仿真和代码)113-串口通讯(51单片机C语言实例Proteus仿真和代码)113-串口通讯(51单片机C语言实例Proteus仿真和代码)113-串口通讯(51单片机C语言实例Proteus仿真和代码)113-串口...
**倍福PLC EL6022串口通讯详解** 倍福(Beckhoff)是一家全球知名的自动化技术公司,以其创新的控制技术和模块化产品而闻名。在工业自动化领域,PLC(可编程逻辑控制器)是核心设备之一,用于监控和控制生产过程。...
《OMRON串口通讯实例详解》 在工业自动化领域,串口通讯是一种常见的设备间通信方式,尤其在与OMRON PLC(可编程逻辑控制器)进行交互时,串口通讯扮演了重要角色。本文将深入探讨如何实现OMRON PLC的串口通讯,并...
在IT领域,尤其是在软件开发中,串口通讯和Socket通讯是两种常见的通信方式,尤其在设备交互、嵌入式系统以及物联网(IoT)应用中非常常见。本篇将详细探讨C#环境下如何利用`SerialPort`类进行串口通讯以及如何使用`...
ASP.NET 网页串口通讯(ActiveX)是一种在Web应用中实现串行通信的技术。串口通讯,也称为串行接口通信,是计算机硬件之间传输数据的一种常见方式,通常用于连接各种设备,如打印机、扫描仪或GSM模块等。在ASP.NET中...
《Delphi XE10 蓝牙串口通讯DEMO详解》 在现代的嵌入式系统和物联网应用中,设备之间的通信扮演着至关重要的角色。Delphi XE10 是一个强大的开发环境,它提供了丰富的工具和技术来实现各种通信协议,包括蓝牙串口...
在Android平台上进行串口通讯是实现设备间交互或与硬件设备连接的重要技术。本文将详细介绍如何使用Android Studio和SerialPort库来实现这一功能。 串口通讯,也称为串行通信,是计算机通信的一种常见方式,它通过...
【KND串口通讯软件安装包】是一款专为KND K1000开放式数控系统设计的数据传输工具,它的核心功能在于实现计算机与数控设备之间的高效、稳定通信。在工业自动化领域,这种串口通讯软件扮演着至关重要的角色,因为它...
山特UPS串口通讯协议 山特UPS串口通讯协议是山特公司出品的单进单出UPS串口通讯协议,用于实现集中监控管理。该协议规定了电源设备产品在设计、制造中应遵循的通讯协议,适用于厦门科华电子有限公司(集团企业)...
1. 异步非阻塞串口通讯的优点 异步串口通信的最大优势在于其非阻塞特性。在同步模式下,程序会等待数据接收或发送完成才继续执行,可能导致程序响应变慢。而异步模式允许程序在等待数据传输的同时,执行其他任务,...
c#编写串口通讯代码多线程实现,逻辑与界面分离。发送与接收都为单独线程
串口通讯MODBUS通讯协议是工业自动化领域广泛应用的一种通信方式,尤其在嵌入式系统、PLC(可编程逻辑控制器)以及各种智能设备之间。本文将深入探讨串口通讯的基础知识,MODBUS协议的原理及应用,以及如何使用...
**串口通讯在VC++6.0中的应用** 串口通讯是计算机通信技术中的一个重要组成部分,尤其在嵌入式系统、工业控制等领域有着广泛的应用。VC++6.0作为经典的微软Visual C++开发环境,虽然已有年代,但因其稳定性和兼容性...
串口通讯,也称为串行通信,是计算机通信的一种常见方式,主要应用于设备间的短距离数据传输。在本文中,我们将深入探讨串口通讯的基本原理、实现方式以及如何使用源代码进行自动配置、发送和接收数据,并将数据自动...
pb调用API串口通讯 概述:本文档介绍了使用PowerBuilder调用API实现串口通讯的方法。串口通讯是指计算机与外部设备之间的数据交换过程,通过串口可以实现设备控制、数据采集和远程监控等功能。本文档将详细介绍使用...
本篇将深入探讨如何使用C#封装串口通讯类,并理解其中涉及的关键知识点。 1. **C#基础与.NET框架** C#是一种面向对象的编程语言,由微软公司开发,主要用于构建Windows应用程序和服务。它支持.NET框架,这是一个...
在VB(Visual Basic)编程中,串口通讯是一种常见的硬件交互方式,特别是在设备控制、数据采集等领域。MSCOMM控件是VB自带的一种用于串行通信的组件,它提供了丰富的属性、方法和事件,使得开发者可以方便地实现串口...
Delphi 中串口通讯的实现 Delphi 是一种功能强大、简便易用和代码执行速度快的可视化开发工具,它在构架企业信息系统方面发挥着重要作用。然而,Delphi 没有自带串口通讯的控件,这给编制通讯程序的开发人员带来...