Please Note This forum exists for community support for the Mango product family and the Radix IoT Platform. Although Radix IoT employees participate in this forum from time to time, there is no guarantee of a response to anything posted here, nor can Radix IoT, LLC guarantee the accuracy of any information expressed or conveyed. Specific project questions from customers with active support contracts are asked to send requests to

Radix IoT Website Mango 3 Documentation Website Mango 4 Documentation Website

Read more than a register in one request

  • Hello guys,
    I'm newbie in industrial field, my background is an IT, I need to use Modbus4j; I have one problem, I think it is easy to solve for you guys,

    I need to read more than one register in one Modbus request as part of the modbus standard, can I do that without changing the code?

    for example:
    I need to send Modbus request to a slave id, with range (4001 Holding register), with offset 3* and length 6 (6 registers)*


  • hi bkhashfeh
    yes its possible to read more than one register in one request. for detail please post your example code i will suggest u corrections in your code.



  • Hi, I'm not bkhashfeh but I have the same problem and I'd apreciate the help :D . Here is my code where I'm reading three registers per second (or trying).

    package modbusmastertest;

    import com.serotonin.modbus4j.ModbusFactory;
    import com.serotonin.modbus4j.ModbusMaster;
    import com.serotonin.modbus4j.code.DataType;
    import com.serotonin.modbus4j.ip.IpParameters;

    import java.util.Calendar;

    class MBMasterTest {
    public static void main(String[] args) throws Exception {
    // Modbus master settings
    ModbusFactory factory = new ModbusFactory();
    IpParameters params = new IpParameters();
    ModbusMaster master = factory.createTcpMaster(params, false);
    // CSV writter settings
    FileWriter fwriter;
    fwriter = new FileWriter("C:/Users/NESTOR/Dropbox/Siemens_S7-1200.csv");
    PrintWriter outputFile = new PrintWriter(fwriter);
    outputFile.println("Date,Sensor_1,Sensor_2,Sensor_3"); // Primera línea
    Object []Register = new Object[3];
    // Date settings
    Calendar cal = Calendar.getInstance();
    long elapsedTime = 0;
    long time = 0;

    	    // Cuerpo del programa
    	long start = System.currentTimeMillis(); // Tiempo de inicio
    	try {
    		while(System.currentTimeMillis()<(start+10000)) {
    			time = System.currentTimeMillis();
    			for(int i = 0; i<3; i++) {
    				Register* = master.getValue(1,40001+i,DataType.TWO_BYTE_INT_SIGNED);
    					+ "");
    			elapsedTime = System.currentTimeMillis()-time;
    			cal.setTimeInMillis(cal.getTime().getTime() + elapsedTime);
    			outputFile.println(cal.getTime().toString()+","+Register[0]+","+Register[1]+","+Register[2]); // Se escribe nueva linea en archivo
    		outputFile.close(); // Se cierra el archivo
    	finally {
    		master.destroy(); //Se destruye el objeto master
    			+ "");
    	System.out.println("Tardo " + (System.currentTimeMillis()-start) + "ms");