JLibModbusWrite.java 3.87 KB
package com.huaheng.api.dianqi;

import com.intelligt.modbus.jlibmodbus.Modbus;
import com.intelligt.modbus.jlibmodbus.exception.ModbusIOException;
import com.intelligt.modbus.jlibmodbus.exception.ModbusNumberException;
import com.intelligt.modbus.jlibmodbus.exception.ModbusProtocolException;
import com.intelligt.modbus.jlibmodbus.master.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.master.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.tcp.TcpParameters;

import java.net.InetAddress;

public class JLibModbusWrite {
    public static void main(String[] args) {
        try {
            // 设置主机TCP参数
            TcpParameters tcpParameters = new TcpParameters();

            // 设置TCP的ip地址
            InetAddress adress = InetAddress.getByName("192.168.10.10");
           // InetAddress adress = InetAddress.getByName("127.0.0.1");

            // TCP参数设置ip地址
            // tcpParameters.setHost(InetAddress.getLocalHost());
            tcpParameters.setHost(adress);

            // TCP设置长连接
            tcpParameters.setKeepAlive(true);
            // TCP设置端口,这里设置是默认端口502
            tcpParameters.setPort(Modbus.TCP_PORT);

            // 创建一个主机
            ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
            Modbus.setAutoIncrementTransactionId(true);

            int slaveId = 1;//从机地址
            //0对应40001
            int offset = 0;//寄存器读取开始地址
            int quantity = 10;//读取的寄存器数量


            try {
                if (!master.isConnected()) {
                    master.connect();// 开启连接
                }
//                 * 读线圈:  ON=1,OFF=0
//                 * 读离散量     ON=1,OFF=0
//                 * 读保存寄存器    指定数据类型(可以是Float)
//                 * 读输入寄存器    指定数据类型(可以是Float)
//                boolean[] readCoils = master.readCoils(slaveId, offset, 1);
//                for (boolean readCoil : readCoils) {
//                    System.out.println(readCoil);
//                }
//                int[] readHoldingRegisters = master.readHoldingRegisters(slaveId, offset, 1);
//                for (int readHoldingRegister : readHoldingRegisters) {
//                    System.out.println(readHoldingRegister);
//                }
              // master.writeSingleCoil(slaveId,0,true);
              //  boolean[] booleans=new boolean[]{true,true,true,true,true,true,true,true,true,true};
              //  master.writeMultipleCoils(slaveId,0,booleans);
                int[] readInputRegisters = master.readHoldingRegisters(slaveId, offset, quantity);
                for (int value : readInputRegisters) {
                    System.out.println("readInputRegisters:Address: " + offset++ + ", Value: " + value);
                    // byte[] bytes = toHH(value);
                }
                //数值转二进制第10位写0再转数值
                int xie = ModbusCommon.xie(readInputRegisters[0], 10, "0");
                //int[] register=new int[]{0,0,0,0,0,0,0,0,0,0};
//                System.out.println(xie);
                //往第一个寄存器0对应40001 写数值
                master.writeSingleRegister(slaveId,0,xie);
            } catch (ModbusProtocolException e) {
                e.printStackTrace();
            } catch (ModbusNumberException e) {
                e.printStackTrace();
            } catch (ModbusIOException e) {
                e.printStackTrace();
            } finally {
                try {
                    master.disconnect();
                } catch (ModbusIOException e) {
                    e.printStackTrace();
                }
            }
        } catch (RuntimeException e) {
            throw e;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}