‘壹’ 如何在java中实现串口读写数据
实现Java串口读写数据,可以借助rxtx库的功能。在开始之前,需要确保计算机环境已正确配置,以避免执行过程中出现错误。配置环境相对简单,只需将rxtxSerial.dell和rxtxParallel.dell这两个扩展文件复制到C盘的System32文件夹中即可。
接下来,为了实现Java串口读写功能,可以利用RXTXComm的类库,包括SerialPort类进行串口通信操作。在进行串口读取操作时,首先需要创建一个SerialPort对象,并初始化该对象的属性,如波特率、数据位、停止位等。然后,调用该对象的read方法进行数据读取操作。
在实现串口写入数据时,同样需要创建SerialPort对象,并初始化其属性。之后,通过调用write方法将数据发送至串口。在发送数据前,务必确保串口已正确打开。否则,发送操作将失败。
在代码实现过程中,还需要注意对异常情况的处理。例如,当串口无法打开或读取数据失败时,应该抛出相应的异常并进行错误处理,以确保程序的稳定运行。
此外,为了提高串口通信的效率和可靠性,可以采用多线程的方式进行数据的并发读写操作。通过创建多个线程,分别负责串口的读取和写入任务,可以有效提升程序的响应速度和处理能力。
最后,编写完串口读写功能的代码后,不要忘记在程序的最后进行资源释放,包括关闭串口连接等操作,以避免资源泄漏问题。在进行串口读写数据时,遵循以上步骤和注意事项,可以实现Java中串口数据的有效读写。
‘贰’ Springboot+RXTX for JAVA 实现串口通信
下载RXTX可以从官网或者Fizzed网站,官网没有64位的支持,但在Fizzed中可以找到2.2版的64位和32位的Windows和linux版本。
1. Windows下的串口调试
将rxtxParallel.dll和rxtxSerial.dll复制到%JAVA_HOME%安装目录的bin目录下,同时也要复制到%JAVA_HOME%安装目录的jre/bin目录下(在eclipse开发时调用,减少麻烦)。然后将RXTXcomm.jar复制到%JAVA_HOME%\jre\lib\ext\RXTXcomm.jar(开发时直接导入)。
2. Linux下的串口调试
首先确定Linux处理器型号,然后选择对应的RXTX的Linux版本。
例如,如果处理器是i386,则将Linux i686版本中的两个os文件复制到系统%JAVA_HOME%/jre/lib/i386(即JDK目录中的系统文件夹)。将RXTXcomm.jar复制到%JAVA_HOME%/jre/lib/ext文件夹。代码不变,即可运行使用。
在实际开发中,由于使用树莓派测试,树莓派使用Raspbian系统(使用uname -a命令可查看系统内核信息)。Linux raspberrypi 3.12.28+ #709 PREEMPT Mon Sep 8 15:28:00 BST 2014 armv6l GNU/Linux。处理器型号为armv6l,在下载的RXTX工具包中并没有这种系统版本,实际测试中,找到的RXTX工具包都不能使程序运行,均报出系统位数不符。
又找到另一种处理方法,可以直接在系统中make编译RXTX源码安装。
最新的RXTX稳定版本是rxtx 2.1-7r2。首先用wget获取源码包并解压。
如果直接MAKE编译安装,可能会遇到以下两种错误:
错误1:/tmp/rxtx-2.1-7r2/./src/I2CImp.c:135: error: ‘UTS_RELEASE’ undeclared (first use in this function)
这是由于version.h中缺少’UTS_RELEASE’信息,需要手工添加。先获取当前系统的版本信息,然后在/usr/include/Linux/version.h中添加。
3.10.24+为上一步中获得的版本号
错误2:libtool: install: armv6l-unknown-linux-gnu/librxtxRS485.la is not a directory
这个错误会出现在JDK1.6及以上的运行环境下,需要对configure文件进行修改。在configure文件中找到这一行,在后边添加上当前JDK的版本号即可,如
完成以上两项修改后,就可以正常编译安装了。如果看到 Libraries have been installed in:/usr/lib/jvm/jdk-7-Oracle-armhf/jre/lib/arm 则说明RXTX安装已经成功。之后执行
注意:可能会有权限不足的情况,需要chmod 777 test.c操作
至此使用RXTX框架的串口编程代码就可以在树莓派使用了。
(这里需要注意的是,在Linux系统中,大部分的串口名称为/dev/ttyS*,但在特殊环境下如本次使用的raspberrypi,使用RXTX方法获得串口集合是不成功的,原因是RXTX本身源码问题,找了好久的原因,终于在RXTX官网上找到了解释:
即RXTX本身支持的Linux串口搜索只限制为/dev/ttyS*等,其他名称的并不能支持,而raspberrypi中的串口名称为/dev/ttyAMA*,故无法找到系统串口。这种情况下有两种解决方案:
1.修改源码:参考官网故障排除 rxtx.qbang.org/wiki/ind...
源码RXTXCommDriver.java文件中518行开始,为Linux系统环境下的串口名称查找,添加所需串口名即可(如ttyAMA)(此种方法需要重新编译安装)
2.将串口文件进行映射,即使用命令 ln -s /dev/ttyAMA0 /dev/ttyS0,即可找到/dev/ttyS0映射串口,也就对应了/dev/ttyAMA0实际串口。
‘叁’ java实现串口通信代码
在Java中实现串口通信涉及一系列步骤。首先,获取可用的串口列表,通过调用CommPortIdentifier.getPortIdentifiers()方法获取所有可用端口。接下来,遍历这些端口,检查每个端口的类型是否为串口。这里我们关注的是名为"COM1"的串口,因此如果发现此端口,将立即退出循环。对于其他串口,将忽略它们,设置portId为null。
一旦找到并确认了正确的串口,使用portId.open("Serial_Communication", 1000)方法以1000毫秒的超时时间打开串口。接着,通过调用setSerialPortParams方法,设置串口参数。具体参数包括波特率为9600,数据位为8位,停止位为1位,以及无奇偶校验。
打开串口后,可以通过serialPort.getInputStream()和serialPort.getOutputStream()分别获取串口的输入流和输出流。接下来,可以在此输入输出流上执行数据的读取和发送操作。
当通信操作完成后,需要关闭这些流和串口。具体操作包括关闭输入流in.close(),关闭输出流out.close(),以及最后关闭串口serialPort.close()。整个过程中,异常处理也非常重要,通过try-catch块来捕捉并处理可能出现的PortInUseException、和IOException等异常。
为了确保程序的健壮性和可靠性,合理地设置和处理这些异常是至关重要的。通过以上步骤,Java程序可以成功实现与串口设备的通信,从而进行数据的读取和发送。
‘肆’ 在java的web程序中怎么使用串口通讯
最近在做java串口通讯,主要是用个人电脑通过串口从RS485读取数据,并通过crc循环冗余校验,把接收正确的数据解析,插入数据库mysql,并用SSH技术把数据库数据以表格以及图表形式显示 x0dx0a 思路: x0dx0a1.为了从RS485读取数据,由于暂时没有硬件设备,系统是win7,故采用Virtual Serial Port Drive(VSPD)这块虚拟串口软件代替。并下载sscom32.exe模拟串口通信软件。 x0dx0ax0dx0a2. 要想实现串口通信,用Java实现串口通信(windows系统下),需要用到sun提供的明散串javacomm20-win32.zip。其中要用到三个文件,配置如下: x0dx0acomm.jar放置虚段到 JAVA_HOME/jre/lib/ext; x0dx0awin32com.dll放置到 JAVA_HOME/bin; x0dx0ajavax.comm.properties 两个地方都要放 x0dx0ajre/lib(也就是在JAVA文件夹下的jre),JAVA_HOME/jre/lib下 x0dx0a这个配置在我电脑上测试成功,也许不需要这样麻烦。注意的是,如果你使用myeclipse,因为它自带jre,你需要在它所在的jre相应位置放dll以及properties文件。激誉氏 x0dx0ax0dx0a是不是感觉这个很麻烦,还有windows的限制。后来我们下载rxtx这款开源包代替了刚才的comm。不仅windows下可以,linux下也可以。使用方法很简单,配置如下: x0dx0ax0dx0aRXTXcomm.jar放到JAVA_HOME/jre/lib/ext x0dx0arxtxSerial.dll放到JAVA_HOME/bin x0dx0a如果你使用myeclipse工具,你需要把rxtxSerial.dll放到它自带的jre里。 x0dx0ax0dx0a3.新建eclipse工程,添加comm.jar或者RXTXcomm.jar包。因为javacomm20-win32.zip包里有样例SimpleRead.java,可以通过这个例子测试串口是否正确 x0dx0ax0dx0a4.接收数据正确后,根据传送接收双方的协议,采用CRC循环校验,根据传输的一方的校验函数判定是否是正确传输 x0dx0ax0dx0a5.把正确结束的数据解析,查看自己指定的通讯规则,然后解析 x0dx0ax0dx0a6.插入数据库,jdbc插入 x0dx0ax0dx0a7.数据统计,定时统计每小时,每天,每月,每年的平均值,采用quartz服务来实现。 x0dx0ax0dx0a8.建立web工程,采用hibernate3,spring3,dwr技术把数据库数据动态显示,图表采用jfreechart,以及AJAX的运用
‘伍’ java实现串口通信代码
public static void process() {
try {
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements())
{
CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)//如果端口类型是串口则判断名称
{
if(portId.getName().equals("COM1")){//如果是COM1端口则退出循环
break;
}else{
portId=null;
}
}
}
SerialPort serialPort = (SerialPort)portId.open("Serial_Communication", 1000);//打开串口的超时时间为1000ms
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);//设置串口速率为9600,数据位8位,停止位1们,奇偶校验无
InputStream in = serialPort.getInputStream();//得到输入流
OutputStream out = serialPort.getOutputStream();//得到输出流
//进行输入输出操作
//操作结束后
in.close();
out.close();
serialPort.close();//关闭串口
} catch (PortInUseException e) {
e.printStackTrace();
} catch ( e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
‘陆’ 在java的web程序中怎么使用串口通讯
方法如下:
新建eclipse工程,添加comm.jar或者RXTXcomm.jar包。因为javacomm20-win32.zip包里有样例SimpleRead.java,可以通过这个例子测试串口是否正确。
接收数据正确后,根据传送接收双方的协议,采用CRC循环校验,根据传输的一方的校验函数判定是否是正确传输。
把正确结束的数据解析,查看自己指定的通讯规则,然后解析。
插入数据库,jdbc插入。
数据统计,定时统计每小时,每天,每月,每年的平均值,采用quartz服务来实现。
建立web工程,采用hibernate3,spring3,dwr技术把数据库数据动态显示,图表采用jfreechart,以及AJAX的运用