0
点赞
收藏
分享

微信扫一扫

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

Java旺 2022-04-18 阅读 88
javaspring

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

举报

相关推荐

0 条评论