Java实现使用Modbus4j+seroUtils读取Mudbus RTU/ASCII Over TCP/IP连接设备数据

Java实现使用Modbus4j+seroUtils读取Mudbus RTU/ASCII Over TCP/IP连接设备数据

参考地址: https://blog.csdn.net/weixin_46099269/article/details/119489018

使用Modbus4j+seroUtils读取风速风向仪数据,现有设备IP,端口号,从机地址,寄存器读取开始地址,读取的寄存器数量。没有上述jar包可以自行搜索,网上资源挺多

/**
 * @author chengy
 */
@Component
public class ModbusUtil {

    private static ModbusFactory modbusFactory;

    static {
        if (modbusFactory == null) {
            modbusFactory = new ModbusFactory();
        }
    }

    /**
     * @param ip       远程服务机地址
     * @param port     端口号
     * @param slaveId  从机地址
     * @param offset   寄存器读取开始地址
     * @param quantity 读取的寄存器数量
     * @return
     */
    public static short[] getValueByRTU(String ip, int port, int slaveId, int offset, int quantity){
        short[] result = new short[2];
        IpParameters params = new IpParameters();
        params.setHost(ip);
        params.setPort(port);
        //这个属性确定了协议帧是否是通过tcp封装的RTU结构,采用modbus tcp/ip时,要设为false, 采用modbus rtu over tcp/ip时,要设为true
        params.setEncapsulated(true);
        com.serotonin.modbus4j.ModbusMaster master = modbusFactory.createTcpMaster(params, true);// TCP 协议
        try {
            //设置超时时间
            master.setTimeout(1000);
            //设置重连次数
            master.setRetries(3);
            //初始化
            master.init();

            try {
                ReadHoldingRegistersRequest request = null;
                request = new ReadHoldingRegistersRequest(slaveId, offset, quantity);
                ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master.send(request);
                if (response.isException())
                    System.out.println("读取风速设备数据失败," + response.getExceptionMessage());
                else
                    result = response.getShortData();
            } catch (ModbusTransportException e) {
                throw new RuntimeException("读取风速设备数据失败");
            }

        } catch (ModbusInitException e) {
            throw new RuntimeException("建立风速设备连接失败");
        }

        return result;
    }
}


注意:

​ 这里的offset:如果你的寄存器地址是40021,那么offset填入20即可

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值