Java实现RS485串口通信

博客链接地址

近期,我接到了一个任务,将报警器接入到Java项目中,而接入的方式就是通过RS485接入,本人之前可以说是对此毫无所知。不过要感谢现在的互联网,通过网络我查到了我想要知道的一切,这里记录下本次学习的情况,供大家参考

一、RS485简单介绍

RS485是一种常用的串行通信标准,广泛应用于工业自动化和嵌入式系统。它采用差分信号传输,具有抗干扰能力强、传输距离远等优点。以下是关于RS485串口的一些关键点:

1、硬件连接

  • RS485使用差分信号传输,通常需要使用收发器(如MAX485芯片)将串口的TTL信号转换为RS485信号

  • 可以使用USB转RS485转换器实现与计算机的连接

2、通信方式

  • RS485支持半双工通信,即发送和接收不能同时进行,通常需要软件控制来实现发送和接收的切换

  • 通过两个数据线进行通信,数据线为A和B,A为正,B为负

3、数据发送和接收

  • 在数据发送时,控制器的TX信号经过收发器转换成差分信号传输到总线上

  • 接收时,差分信号通过收发器转换为TTL信号,再传输给控制器的RX端口

  • 数据传输速率可以根据具体应用需求进行调整,常见的波特率有9600、19200等

二、电脑需要做的准备

Windows系统还好,需要一个USB转RS485的转换器就可以了,基本不需要额外安装什么其他的。Linux系统可能就麻烦些,除了一个USB转RS485的转换器外,可能还需要下载相应的驱动(Linux这部分本人未实际操作,全凭网上的资料)。当然,如果你的电脑或者是设备本身就带RS485串口那就方便了,直接接上就好。

接线方面,A接T+,B接T-

三、代码方面

本人使用的是Springboot项目,通过网上的查询,可以使用 jSerialCommRXTX 库来实现串口通信。

1、jSerialComm

本人觉得使用这个库相对简单些,直接在pom文件引入依赖就可以了,依赖代码如下:

<dependency><groupId>com.fazecast</groupId><artifactId>jSerialComm</artifactId><version>2.9.2</version>
</dependency>

2、RXTX

这个尼,个人觉得相对复杂些,首先,要先去下载RXTX的jar包(rxtx-2.1-7-bins-r2),在使用时,除了在pom文件中引入压缩包内的RXTXcomm.jar包外,还需要在系统%JAVA_HOME%/jre/bin目录下放入对应的文件,比如说Windows的需要放入rxtxParallel.dllrxtxSerial.dll两个文件

压缩包内容:

3、代码例子

我这边用的jSerialComm的方式,引入jar包后,Java的测试代码如下:

import com.fazecast.jSerialComm.SerialPort;public class RS485Communication {public static void main(String[] args) {//SerialPort[] commPorts = SerialPort.getCommPorts();//if (commPorts.length == 0) {//    log.error("设备未插入!");//}//SerialPort serialPort = null;//if(SystemUtils.isLinux()){//    for (SerialPort commPort : commPorts) {//        log.info(JSON.toJSONString(commPort));//        if(commPort.getSystemPortName().equals("ttyS2")){//            serialPort = commPort;//        }//    }//} else {//    for (SerialPort commPort : commPorts) {//        log.info(JSON.toJSONString(commPort));//        if(commPort.getSystemPortName().contains("COM")){//            serialPort = commPort;//        }//    }//}// 这里取的是第一个,如果你有多个,可以通过注释的代码来确定你使用的是哪一个SerialPort serialPort = SerialPort.getCommPorts()[0];serialPort.setBaudRate(9600);serialPort.setNumDataBits(8);serialPort.setNumStopBits(SerialPort.ONE_STOP_BIT);serialPort.setParity(SerialPort.NO_PARITY);if (serialPort.openPort()) {System.out.println("Port opened successfully.");} else {System.out.println("Failed to open port.");return;}// 发送数据byte[] dataToSend = {0x00, 0x10}; // 示例16位数据serialPort.writeBytes(dataToSend, dataToSend.length);// 接收数据byte[] readBuffer = new byte[2];serialPort.readBytes(readBuffer, readBuffer.length);System.out.println("Received: " + bytesToHex(readBuffer));serialPort.closePort();}private static String bytesToHex(byte[] bytes) {StringBuilder sb = new StringBuilder();for (byte b : bytes) {sb.append(String.format("%02X ", b));}return sb.toString().trim();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/364678.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-分析期末选择题考点(广义表)

莫道桑榆晚 为霞尚满天 数据结构-图期末选择题 数据结构-串、数组选择题 数据结构-排序选择题 数据结构-线性表、栈、队列、二叉树合集 契子✨ 广义表&#xff1a; <1>考点一&#xff1a;基本概念 广义表的基础概念 &#xff08;1&#xff09;什么是广义表 广义表&#…

Qt开发报错:Q_INTERFACES Error: Undefined interface

1、背景 VS2019qt5.12.10 从svn拉下来的项目&#xff0c;结果报错&#xff1a; Q_INTERFACES Error: Undefined interface 之前在VS的扩展中在线安装了qt插件&#xff0c; 安装了一半&#xff0c;比较慢&#xff0c;直接强行退出了。。 后来安装了qt官网的插件。。。。 2、报…

PTA-线性表实验(JAVA)

题目1&#xff1a;Josephus环的问题及算法 【实验内容】 编程实现如下功能&#xff1a; 题意说明&#xff1a;古代某法官要判决n个犯人的死刑&#xff0c;他有一条荒唐的法律&#xff0c;将犯人站成一个圆圈&#xff0c;从第start个犯人开始数起&#xff0c;每数到第distance的…

八月份的护网行动如何参加?

护网行动背景 什么是“护网行动”&#xff1f; 指挥机构∶由公安机关统一组织的"网络安全实战攻防演习"。 护网分为两级演习∶公安部对总部&#xff0c;省厅对省级公司。 什么是“实战攻防演习” 每支队伍3-5 人组成&#xff0c;明确目标系统&#xff0c;不限制攻…

【Linux】进程信号_3

文章目录 八、进程信号2. 信号的保存3. 信号的处理 未完待续 八、进程信号 2. 信号的保存 实际执行信号的处理动作称为信号递达(Delivery) 信号从产生到递达之间的状态,称为信号未决(Pending)。 进程可以选择阻塞 (Block )某个信号。 被阻塞的信号产生时将保持在未决状态,直到…

css 滚动词云

css javascript 实现滚动词云效果 // 163css.js var radius 120; var dtr Math.PI / 180; var d 300; var mcList []; var active false; var lasta 1; var lastb 1; var distr true; var tspeed 10; var size 250; var mouseX 0; var mouseY 0; var howElliptic…

weiyang**3.控制台01

1. 搭建单群组FISCO BCOS联盟链 使用开发部署工具 build_chain.sh脚本在本地搭建一条4 节点的FISCO BCOS链&#xff0c;以Ubuntu 22.04 64bit系统为例操作。 1.1 安装依赖 sudo apt install -y openssl curl 1.2 创建操作目录, 下载安装脚本 ## 创建操作目录 cd ~ &&a…

【保姆级教程+配置源码】在VScode配置C/C++环境

目录 一、下载VScode 1. 在官网直接下载安装即可 2. 安装中文插件 二、下载C语言编译器MinGW-W64 三、配置编译器环境变量 1. 解压下载的压缩包&#xff0c;复制该文件夹下bin目录所在地址 2. 在电脑搜索环境变量并打开 3. 点击环境变量→选择系统变量里的Path→点击编…

uniapp - 微信小程序 - 自定义底部tabbar

废话不多说&#xff0c;直接行源码 这里需要的底部tabbar的图片在这里 我的资源里面呢 图片是这样的 先看成品吧 首先 - BaseApp\components\Tabbar.vue <script setup>import {ref,nextTick,watch} from "vue"// 核心 - 隐藏uniapp自带的底部tabbaruni.hi…

如何配置Redis + Rdis在IDEA中的使用

文章目录 Step1. 下载zipStep2. 修改环境变量Step3. 启动Redis服务端Step4. 启动Redis客户端Step5. IDEA中链接Redis Step1. 下载zip 下载 Redis-x64-xxx.zip压缩包&#xff0c;解压到 E 盘后&#xff0c;将文件夹重新命名为 redis 下载地址&#xff1a;Redis下载地址 Step2…

STM32F1+HAL库+FreeTOTS学习2——STM32移植FreeRTOS

STM32F1HAL库FreeTOTS学习2——STM32移植FreeRTOS 获取FreeRTOS源码创建工程窥探源码移植 上期我们认识了FreeRTOS&#xff0c;对FreeRTOS有了个初步的认识&#xff0c;这一期我们来上手移植FreeRTOS到STM32上。 获取FreeRTOS源码 进入官网&#xff1a;https://www.freertos.o…

MySQL8 新特性——公用表表达式用法 with t1 as (select * from user)

MySQL8 新特性——公用表表达式用法_mysql ctes-CSDN博客 1.普通公用表表达式 MySQL8 新特性——公用表表达式用法 在MySQL 8.0及更高版本中&#xff0c;引入了公用表表达式&#xff08;Common Table Expressions&#xff0c;CTEs&#xff09;&#xff0c;它是一种方便且可重…

PDF处理篇:如何调整 PDF 图像的大小

将视觉效果无缝集成到 PDF 中的能力使它们成为强大的通信工具。然而&#xff0c;笨拙的图像大小会迅速扰乱文档的流程&#xff0c;阻碍清晰度和专业性。幸运的是&#xff0c;GeekerPDF 和Adobe Acrobat等流行的应用程序提供了用户友好的解决方案来应对这一挑战。这个全面的指南…

动画重定向——当给一个人物模型用别人物的动画时,会遇到人物与动画不匹配问题,怎么解决呢?

每日一句&#xff1a;实践出真知&#xff0c;试错方确信 目录 最开始我想的原因&#xff01; 分析一下动画相关参数 Animator组件参数详解&#xff1a; 人物模型的导入设置参数&#xff1a; Skinned Mesh Renderer组件详解: Skinned Mesh Renderer工作原理 设置Skinned …

数据结构历年考研真题对应知识点(树的基本概念)

目录 5.1树的基本概念 5.1.2基本术语 【森林中树的数量、边数和结点数的关系&#xff08;2016&#xff09;】 5.1.3树的性质 【树中结点数和度数的关系的应用&#xff08;2010、2016&#xff09;】 【指定结点数的三叉树的最小高度分析&#xff08;2022&#xff09;】 5.1…

Ubuntu 安装Nginx服务

转自&#xff1a;https://blog.csdn.net/yegu001/article/details/135411588 Package: nginx Architecture: amd64 Version: 1.18.0-6ubuntu14.4 Priority: optional Section: web Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discusslists.ubuntu.com>…

QT拖放事件之五:自定义拖放操作-拖动中的修饰符操作

1、效果 2、代码 #include "SelfButton.h" #include <QApplication>SelfButton::SelfButton(QString str ,QWidget* parent):Q

【计算机毕业设计】基于Springboot的智能物流管理系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

机械设计简单介绍

机械设计简单介绍 1 介绍1.1 概述1.2 机械机构设计基本步骤1.3 关键1.3.1 静力学1.3.2 动力学1.3.3 运动学1.3.4 刚度学 1.4 示例【机械臂】 2 资料2.1 知识体系2.2 博客类汇总2.3 免费CAD模型获取2.4 3D打印2.5 SolidWorks 3 具备能力3.1 熟练翻阅 机械设计手册3.2 知道 N 家常…

【C++】初识C++(一)

一.什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度 的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机界提出了OOP(object o…