springboot整合modbus协议实现数据读取

springboot整合modbus协议实现数据读取

一、maven坐标


```xml
<dependency>
            <groupId>com.intelligt.modbus</groupId>
            <artifactId>jlibmodbus</artifactId>
            <version>1.2.9.7</version>
        </dependency>
        <dependency>
            <groupId>com.digitalpetri.modbus</groupId>
            <artifactId>modbus-master-tcp</artifactId>
            <version>1.1.0</version>
        </dependency>
        <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

``

`二、核心代码

public class ModbusMasterUtils {

    //获取连接
    public static ModbusMaster getModbusMaster(String ip,Integer port)  {
        try {
            TcpParameters tcpParameters = new TcpParameters();
            //ip
            InetAddress adress = InetAddress.getByName(ip);
            tcpParameters.setHost(adress);
            // TCP设置长连接
            tcpParameters.setKeepAlive(true);
            // TCP设置端口,这里设置是默认端口502
            tcpParameters.setPort(port);

            ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
            Modbus.setAutoIncrementTransactionId(true);
            return master;
        }catch (Exception e){
            e.printStackTrace();
        }

        return null;

    }

    /**
     * 读04
     * @param master 配置的mater主机
     * @param slaveId 从机id
     * @param offset 寄存器读取开始地址  0059的话则为58
     * @param quantity 读取的寄存器数量
     * @return float类型的值
     */
    public static List<Float> readInputRegisters(ModbusMaster master,int slaveId,int offset,int quantity){
        List<Float> floatList=new ArrayList<>();
        try {

            if (!master.isConnected()) {
                master.connect();// 开启连接
            }

            // 读取对应从机的数据,readInputRegisters读取的写寄存器,功能码04
            int[] registerValues = master.readInputRegisters(slaveId, offset, quantity);

            floatList = ByteArrayConveter.getFloatArray(registerValues);
        }catch (Exception e) {
            e.printStackTrace();
        }
        return floatList;
    }

    /**
     * 读03
     * @param master 配置的mater主机
     * @param slaveId 从机id
     * @param offset 寄存器读取开始地址  0059的话则为58
     * @param quantity 读取的寄存器数量
     * @return float类型的值
     */
    public static List<Float> readHoldingRegisters(ModbusMaster master,int slaveId,int offset,int quantity){
        List<Float> floatList=new ArrayList<>();
        try {

            if (!master.isConnected()) {
                master.connect();// 开启连接
            }

            // 读取对应从机的数据,readInputRegisters读取的写寄存器,功能码04
            int[] registerValues = master.readHoldingRegisters(slaveId, offset, quantity);

            floatList = ByteArrayConveter.getFloatArray(registerValues);
        }catch (Exception e) {
            e.printStackTrace();
        }
        return floatList;
    }

    public static void close(ModbusMaster master){
        try {
            master.disconnect();

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

三、总结

目前只之前读03 04类型 测试需要的仿真软件是上网找的ModSim32

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Spring Boot 是一个开源的Java框架,可以帮助开发者快速搭建基于Java的Web应用程序。Modbus TCP 是一种用于工业自动化领域中的通信协议,可以用于实现设备之间的数据读取和控制。 在Spring Boot中整合Modbus TCP实现数据读取可以分为以下几个步骤: 1. 引入相关依赖:在项目的pom.xml文件中添加Modbus TCP的依赖,如jamod或modbus4j等。 2. 配置Modbus TCP连接参数:在Spring Boot的配置文件中,配置Modbus TCP的IP地址和端口号等连接参数。 3. 创建Modbus TCP连接:使用Java代码,在Spring Boot应用程序中创建Modbus TCP的连接对象。 4. 读取数据:通过连接对象,使用Modbus TCP协议发送读取数据的指令,并获取返回的数据。 5. 数据处理:对于得到的数据,可以进行相应的处理,如解析数据格式、存储到数据库或展示在前端页面等。 6. 异常处理:在进行Modbus TCP通信时,可能会出现网络异常或通信错误,需要进行相应的异常处理,包括错误日志记录、重试机制等。 在实际应用中,可以根据具体的业务需求对数据读取进行定制化开发。例如,可以通过设置读取起始地址和读取长度等参数,读取一定范围内的数据。同时,也可以创建定时任务,在固定的时间点进行数据读取操作。 总之,通过Spring Boot的便捷开发和Modbus TCP的通信协议,可以实现方便快速地进行数据读取,并能灵活应对不同的业务场景和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值