1、maven依赖

<dependency>
            <groupId>com.intelligt.modbus</groupId>
            <artifactId>jlibmodbus</artifactId>
            <version>1.2.9.11</version>
        </dependency>

2、定义配置文件

modbus:
  tcp:
    ip: 127.0.0.1
    port: 502

3、定义IModbusService接口

public interface IModbusService {

    int readInputRegister(int slaveId, int offset,int quantity);

}

4、接口实现类

package com.example.modbus_test.service.impl;

import com.example.modbus_test.service.IModbusService;
import com.intelligt.modbus.jlibmodbus.master.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.master.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.tcp.TcpParameters;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.net.InetAddress;
import java.net.UnknownHostException;

@Service
@Slf4j
public class ModbusServiceImpl implements IModbusService {
    private ModbusMaster master;

    @Value("${modbus.tcp.ip}")
    private String ip;
    @Value("${modbus.tcp.port}")
    private int port;

    @PostConstruct
    public void init() {
        try {
            TcpParameters tcpParameters=new TcpParameters();
            tcpParameters.setHost(InetAddress.getByName(ip));
            tcpParameters.setPort(port);
            this.master=ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
        }catch (Exception ex){
            ex.printStackTrace();
        }

    }

    @Override
    public int readInputRegister(int slaveId, int offset,int quantity) {
        try {
            if (!master.isConnected()) {
                master.connect();// 开启连接
            }
            int[] result=master.readInputRegisters(slaveId, 0, quantity);
            return result[offset];
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return 0;
    }
}

5、控制器测试代码

package com.example.modbus_test.controller;

import com.example.modbus_test.service.IModbusService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
@RequestMapping("/modbus")
public class ModbusController {

    @Resource
    private IModbusService modbusService;

    @PostMapping("/readInputRegister")
    public int readInputRegister(@RequestBody Map<String,Integer> params){
        return modbusService.readInputRegister(params.get("slaveId"),params.get("offset"),params.get("quantity"));
    }
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐