周振林 周振林
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 学习笔记

    • 《JavaScript教程》
    • 《ES6 教程》
    • 《TypeScript》
    • 《Vue》
    • 《Git》
    • 《小程序笔记》
    • 《JS设计模式总结笔记》
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏
  • 分类
  • 标签
  • 归档

周振林

IT界的小学生
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 学习笔记

    • 《JavaScript教程》
    • 《ES6 教程》
    • 《TypeScript》
    • 《Vue》
    • 《Git》
    • 《小程序笔记》
    • 《JS设计模式总结笔记》
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏
  • 分类
  • 标签
  • 归档
  • 规范

  • Spring

    • Spring基础
    • Spring IoC
    • Spring AOP
    • SpringBoot异常
    • SpringBoot过滤器
    • SpringBoot拦截器
    • Response设置响应编码
    • 依赖start和依赖BOM区别
    • Thymeleaf教程
    • SpringBoot集成Modbus实现设备
      • 简述
      • 示例代码
      • 适用场景
      • 总结
    • Maven教程
    • Tree工具类,轻松搞定树结构
  • 安装教程

  • 其他教程

  • 后端
  • Spring
周振林
2025-07-11
目录

SpringBoot集成Modbus实现设备

# 使用Spring Boot集成Modbus实现设备通信

在自动化领域中,设备通信是至关重要的。Modbus是一种常见的串行通信协议,用于设备之间的数据传输。本文将介绍如何使用Spring Boot集成Modbus实现设备通信。通过这个示例,您将学习如何配置Spring Boot项目以支持Modbus通信,以及如何读取和写入Modbus设备的数据。

# Modbus是什么

Modbus 是一种通信协议,通常用于在工业自动化和控制系统中进行数据通信。它最初由 Modicon 公司开发,用于在可编程逻辑控制器(PLC)之间进行通信,以监测和控制工业设备。Modbus 协议已成为工业领域中最常用的通信协议之一,广泛应用于监控、控制和数据采集系统。Modbus 协议有多个变种,包括 Modbus RTU、Modbus ASCII 和 Modbus TCP/IP。其中,Modbus RTU 和 Modbus ASCII 是串行通信协议,通常用于串行通信介质(如 RS-232 或 RS-485),而 Modbus TCP/IP 是基于以太网的协议,可以通过 TCP/IP 网络进行通信。

Modbus 协议的特点和应用包括:

  • 简单性:Modbus 协议设计简单,易于实现和部署。这使得它在工业控制系统中非常受欢迎,特别是在老旧的系统中广泛使用。

  • 实时性:Modbus 支持实时数据传输,可以在毫秒级的时间内进行通信,适用于需要快速响应的控制系统。

  • 开放标准:Modbus 是一个开放标准的协议,使得不同供应商的设备能够互相通信。这种互操作性对于维护和升级工业自动化系统非常有价值。

  • 广泛应用:Modbus 协议广泛用于监控和控制领域,包括工业自动化、能源管理、楼宇自动化、温室控制、智能家居和更多领域。

Modbus 协议通常涉及两种角色:

  • 主站(Master):主站是通信的发起者,通常是一个计算机、PLC 或其他控制设备,用于发送请求并接收响应。

  • 从站(Slave):从站是被动的通信端,通常是控制设备、传感器或其他外部设备,用于接收请求并发送响应。

Modbus 协议允许主站向从站发送读取、写入、控制等类型的命令,并获取或设置从站中的寄存器或数据。这使得 Modbus 协议成为监测和控制系统中的核心通信协议。Modbus 是一种通信协议,用于工业自动化和控制系统中的设备之间进行数据通信,它的简单性和广泛应用使得它在工业领域非常受欢迎。

# 简述

Modbus通信通常遵循主从(master-slave)模型,其中一个主站(Master)通过Modbus协议与从站(Slave)通信。主站发起读取和写入操作,从站响应这些操作。在Spring Boot中,我们将使用Java Modbus Library,这是一个广泛使用的Java库,用于Modbus通信。

# 示例代码

依赖配置

首先,确保您的Spring Boot项目中引入了Java Modbus Library的依赖。您可以在pom.xml中添加以下依赖:

<dependency>  
    <groupId>com.intelligt.modbus</groupId>  
    <artifactId>modbus-core</artifactId>  
    <version>1.2.0</version>  
</dependency>  

Modbus配置

创建一个Modbus配置类,用于配置Modbus主站的连接信息。以下是一个示例配置:

import org.springframework.beans.factory.annotation.Value;  
import org.springframework.context.annotation.Configuration;  
  
@Configuration  
public class ModbusConfig {  
  
    @Value("${modbus.serialPort}")  
    private String serialPort;  
  
    @Value("${modbus.baudRate}")  
    private int baudRate;  
  
    @Value("${modbus.dataBits}")  
    private int dataBits;  
  
    @Value("${modbus.stopBits}")  
    private int stopBits;  
  
    @Value("${modbus.parity}")  
    private int parity;  
  
    // ...其他配置参数  
  
    @Bean  
    public ModbusMaster modbusMaster() {  
        ModbusFactory modbusFactory = new ModbusFactory();  
        Transport transport = new SerialTransport(serialPort, baudRate, dataBits, stopBits, parity);  
        ModbusMaster master = modbusFactory.createRtuMaster(transport);  
        master.init();  
        return master;  
    }  
}  

在这个示例中,我们配置了Modbus主站的连接信息,包括串口设备路径、波特率等。

读取Modbus数据

创建一个Service类,用于读取Modbus设备的数据:

@Service  
public class ModbusService {  
  
    @Autowired  
    private ModbusMaster modbusMaster;  
  
    public int readHoldingRegister(int slaveId, int offset) {  
        try {  
            //创建一个保持寄存器的数据定位器(Locator)对象  
            BaseLocator<Integer> locator = BaseLocator.holdingRegister(slaveId, offset, DataType.TWO_BYTE_INT_SIGNED);  
            return modbusMaster.getValue(locator);  
        } catch (ModbusTransportException | ErrorResponseException e) {  
            e.printStackTrace();  
            return -1;  
        }  
    }  
}  

这个Service类提供了一个方法来读取Modbus保持寄存器的值。您可以根据需要添加更多的读取操作。
参数说明:

  1. slaveId:这是 Modbus 通信中的从站地址。每个 Modbus 从站设备都有一个唯一的地址,通常在 1 到 247 之间。slaveId 参数用于指定要与之通信的目标从站设备的地址。通常,Modbus 主站向特定的从站设备发送请求,从站设备根据其地址来判断是否需要响应请求。因此,slaveId 参数指定了通信的目标。

  2. offset:这个参数用于指定要读取的保持寄存器的起始地址。Modbus 协议中的寄存器通常是一个 16 位的数据单元,可以存储整数、浮点数或其他数据类型。offset 参数表示从哪个寄存器开始读取数据。通过指定 offset,您可以确定要读取的寄存器的位置。

例如,如果您调用 readHoldingRegister(1, 100),这表示要读取从站地址为 1 的设备的保持寄存器,从寄存器地址 100 开始读取数据。这两个参数共同确定了要读取的寄存器的位置和目标设备。通常,您会根据特定的从站设备配置和通信需求来传递不同的 slaveId 和 offset 值,以实现对不同设备和不同寄存器的读取操作。这两个参数是 Modbus 通信中的关键参数,用于指定通信的目标和数据的位置。

写入Modbus数据

如果需要写入Modbus设备的数据,可以创建一个方法来执行写入操作。以下是一个示例:

public void writeHoldingRegister(int slaveId, int offset, int value) {  
    //slaveId:这是 Modbus 通信中的从站地址  
    //offset:用于指定要写入的保持寄存器的起始地址  
    //value:这是要写入到指定寄存器的数值  
    try {  
        BaseLocator<Integer> locator = BaseLocator.holdingRegister(slaveId, offset, DataType.TWO_BYTE_INT_SIGNED);  
        modbusMaster.setValue(locator, value);  
    } catch (ModbusTransportException | ErrorResponseException e) {  
        e.printStackTrace();  
    }  
}  

这个方法允许您写入Modbus保持寄存器的值。

配置文件

根据项目需要,您可以在application.properties或application.yml中配置Modbus连接信息,例如串口设备路径、波特率等。以下是一个示例YAML配置:

modbus:  
  #串口设备路径  
  serialPort: /dev/ttyUSB0  
  #波特率  
  baudRate: 9600  
  #数据位数  
  dataBits: 8  
  #停止位数  
  stopBits: 1  
  #校验位,例如0(0表示无校验,1表示奇校验,2表示偶校验)  
  parity: 0  

# 适用场景

  • 自动化控制系统

  • 工业设备监控

  • 数据采集与控制

  • 物联网(IoT)应用

# 总结

通过Spring Boot集成Modbus,您可以轻松实现设备通信,并将其集成到各种自动化和监控系统中。该示例提供了基本的读写操作,但根据具体需求,您可以扩展功能以满足更复杂的应用场景。希望这篇文章能帮助您入门Spring Boot和Modbus通信,为自己的项目增加设备通信功能。

请注意,实际的Modbus通信配置和操作可能因项目和设备的不同而有所不同,因此建议根据具体需求进行定制化配置和开发。

Thymeleaf教程
Maven教程

← Thymeleaf教程 Maven教程→

最近更新
01
Vue3组件通信13种方法
07-11
02
Tree工具类,轻松搞定树结构
07-11
03
Maven教程
07-11
更多文章>
Copyright © 2019-2025 鲁ICP备19032096号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式