Modbus读取数据以及写入数据(jar包是jlibmodbus1.2.9.7)

该代码示例展示了如何使用Modbus进行通信,包括设置自动事务ID以防冲突,读取指定地址的寄存器数据并存储到Map中,以及向不同地址写入单个和多个寄存器值。同时包含了异常处理和断开连接的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 连接modbus

其中的Modbus.setAutoIncrementTransacationId(true);是指设置自动事务递增的标志,确保每个请求事务标识不同,避免冲突和混淆。

2.读取寄存器地址的数据

@Override
    public Map<String, Object> readData() {
        String ipAddress = "127.0.0.1";
        ModbusMaster master = null;
        try {
            master = connectModbus.getMaster(ipAddress);
            //连接modbus
            if (!master.isConnected()){
                master.connect();
            }
            //读取modbus地址内容
            int[] registers = master.readHoldingRegisters(1, 100, 2);
            HashMap<String, Object> map = new HashMap<>();
            map.put("V100",registers[0]);
            map.put("V101",registers[1]);
            return map;
        } catch (UnknownHostException | ModbusIOException | ModbusProtocolException | ModbusNumberException e) {
            e.printStackTrace();
            HashMap<String, Object> map = new HashMap<>();
            map.put("result",e.getMessage());
            return map;
        }finally {
            try {
                master.disconnect();
            } catch (ModbusIOException e) {
                e.printStackTrace();
            }
        }
    }

3.写入寄存器地址数据

    //写入
    @Override
    public void writeData() {
        String ipAddress = "127.0.0.1";
        ModbusMaster master = null;
        try {
            master = connectModbus.getMaster(ipAddress);
            if (!master.isConnected()){
                master.connect();
            }
            //写入单个地址
            master.writeSingleRegister(1,10,15);
            master.writeSingleRegister(1,11,58);
            //写入多个地址
            int array[] = StringToAscll("B85479635");
            master.writeMultipleRegisters(1,20,array);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (master != null){
                    master.disconnect();
                }
            } catch (ModbusIOException e) {
                e.printStackTrace();
            }
        }
    }

    //其中num可能是字符所以要转自动换成ascll码
    private int[] StringToAscll(String num) {
        int[] array = new int[num.length()];
        for (int i = 0; i < num.length(); i++) {
            array[i] = num.charAt(i);
        }
        return array;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值