ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【在Spring Boot项目中接入Modbus协议】 [打印本页]

作者: 盛世宏图    时间: 昨天 22:06
标题: 【在Spring Boot项目中接入Modbus协议】
【在Spring Boot项目中接入Modbus协议】

在Spring Boot项目中接入Modbus协议,可以通过使用第三方库(如jamod或modbus4j)来实现。以下是一个基本的步调指南,帮助你在Spring Boot项目中集成Modbus。

1. 添加依赖

起首,在pom.xml文件中添加Modbus相关的依赖。推荐使用jamod或modbus4j。
使用 jamod

  1. <dependency>
  2.     <groupId>com.infiniteautomation</groupId>
  3.     <artifactId>jamod</artifactId>
  4.     <version>1.2</version>
  5. </dependency>
复制代码
使用 modbus4j

  1. <dependency>
  2.     <groupId>org.modbus4j</groupId>
  3.     <artifactId>modbus4j</artifactId>
  4.     <version>2.0.0</version>
  5. </dependency>
复制代码

2. 配置Modbus毗连

根据你的需求选择TCP或RTU模式举行配置。
Modbus TCP 示例

  1. import com.serotonin.modbus4j.ModbusFactory;
  2. import com.serotonin.modbus4j.ModbusMaster;
  3. import com.serotonin.modbus4j.exception.ModbusInitException;
  4. import com.serotonin.modbus4j.exception.ModbusTransportException;
  5. public class ModbusTcpService {
  6.     private ModbusMaster tcpMaster;
  7.     public void init(String ipAddress, int port) throws ModbusInitException {
  8.         ModbusFactory modbusFactory = new ModbusFactory();
  9.         tcpMaster = modbusFactory.createTcpMaster(ipAddress + ":" + port, false);
  10.         tcpMaster.setTimeout(3000); // 设置超时时间
  11.         tcpMaster.setRetries(3);    // 设置重试次数
  12.         tcpMaster.init();           // 初始化连接
  13.     }
  14.     public void readHoldingRegisters(int slaveId, int startRegister, int numRegisters) throws ModbusTransportException {
  15.         var response = tcpMaster.sendRequest(modbusFactory.createReadHoldingRegistersRequest(slaveId, startRegister, numRegisters), slaveId);
  16.         System.out.println("Response: " + Arrays.toString(response.getShortData()));
  17.     }
  18.     public void close() {
  19.         if (tcpMaster != null) {
  20.             tcpMaster.destroy();
  21.         }
  22.     }
  23. }
复制代码
Modbus RTU 示例

  1. import com.serotonin.modbus4j.ModbusFactory;
  2. import com.serotonin.modbus4j.ModbusMaster;
  3. import com.serotonin.modbus4j.exception.ModbusInitException;
  4. import com.serotonin.modbus4j.serial.SerialPortFactory;
  5. import com.serotonin.modbus4j.exception.ModbusTransportException;
  6. public class ModbusRtuService {
  7.     private ModbusMaster rtuMaster;
  8.     public void init(String portName, int baudRate, int dataBits, int stopBits, char parity) throws ModbusInitException {
  9.         ModbusFactory modbusFactory = new ModbusFactory();
  10.         rtuMaster = modbusFactory.createRtuMaster(SerialPortFactory.createSerialPort(portName, baudRate, dataBits, stopBits, parity));
  11.         rtuMaster.setTimeout(3000); // 设置超时时间
  12.         rtuMaster.setRetries(3);    // 设置重试次数
  13.         rtuMaster.init();           // 初始化连接
  14.     }
  15.     public void readHoldingRegisters(int slaveId, int startRegister, int numRegisters) throws ModbusTransportException {
  16.         var response = rtuMaster.sendRequest(modbusFactory.createReadHoldingRegistersRequest(slaveId, startRegister, numRegisters), slaveId);
  17.         System.out.println("Response: " + Arrays.toString(response.getShortData()));
  18.     }
  19.     public void close() {
  20.         if (rtuMaster != null) {
  21.             rtuMaster.destroy();
  22.         }
  23.     }
  24. }
复制代码

3. 集成到Spring Boot

将上述服务类集成到Spring Boot中,并通过Spring管理其生命周期。
创建Spring Bean

  1. import org.springframework.context.annotation.Bean;
  2. import org.springframework.context.annotation.Configuration;
  3. @Configuration
  4. public class ModbusConfig {
  5.     @Bean(initMethod = "init", destroyMethod = "close")
  6.     public ModbusTcpService modbusTcpService() throws Exception {
  7.         ModbusTcpService service = new ModbusTcpService();
  8.         service.init("192.168.1.100", 502); // 替换为实际的IP和端口
  9.         return service;
  10.     }
  11. }
复制代码
在Controller中使用

  1. import org.springframework.web.bind.annotation.GetMapping;
  2. import org.springframework.web.bind.annotation.RestController;
  3. @RestController
  4. public class ModbusController {
  5.     private final ModbusTcpService modbusTcpService;
  6.     public ModbusController(ModbusTcpService modbusTcpService) {
  7.         this.modbusTcpService = modbusTcpService;
  8.     }
  9.     @GetMapping("/read-registers")
  10.     public String readRegisters() {
  11.         try {
  12.             modbusTcpService.readHoldingRegisters(1, 0, 10); // 读取从机ID为1,起始寄存器为0,数量为10
  13.             return "Success";
  14.         } catch (Exception e) {
  15.             return "Error: " + e.getMessage();
  16.         }
  17.     }
  18. }
复制代码

4. 测试与调试



注意事项


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4