📦 Archived documentation: r1 (committed 2026-07-24) View current documentation →

Modbus TCP Multiple Registers READ / WRITE

Connects to a Modbus TCP slave, reads 30 registers from a weather station (parsing mixed U32/S32 values with scaling), and writes multiple registers packed with bin.fromArray().

// Please Note, Function Codes 1,2 and 15 expect a bit array

// === TRY CONNECT ===
let ret = modbus.connect("172.16.220.111",502,1); // Connect to the modbus master

if(ret === 0){

// === READ TEST ===

let ret = modbus.read(0, // port: 0=tcp, 1=ttl serial, 2=rs485
                      1, // slave unitID
                      4, // function, 3 = read multiple registers
                      0x88B9, // start register
                      30 //register / coil count
                      );

if(ret.status === 0){


		ret.data.seek(0);

  		let data = {
			meanWindSpeed: 		ret.data.read("U32DCBA")/10, // m/s
			meanWindDirection:	ret.data.read("U32")/10,  // degress
			airTemp: 			ret.data.read("S32")/10, // °C
            internalTemp: 		ret.data.read("S32")/10, // °C
            acousticTemp:		ret.data.read("S32")/10, // °C
            rawTemp: 			ret.data.read("S32")/10, // °C
            relativeHumidity: 	ret.data.read("U32")/10, // %rh
            dewpoint: 			ret.data.read("S32")/10, // °C
            absAirPressure: 	ret.data.read("U32")/100, // hPa
            relAirPressure: 	ret.data.read("U32")/100, // hPa
		};

  print(string(data));


} else {
  print("Read Failed, err=",string(ret));
}



// === WRITE TEST ===


let arrayData = [1,2,3,4,5,6,7,8];
let data = bin.fromArray(arrayData,"U16","AB"); // Convert array into packed binary structure
ret = modbus.write(0, // port: 0=tcp, 1=serial,
                   1, // slave unitID
                   16, // function, 16 = write multiple registers
                   0, // start register
                   arrayData.length, // register / coil count
                   data // data to write
                   );

if(ret === 0){
   print("Write Successful");
} else {
  print("Modbus Write Failed, err=",ret);
}





modbus.disconnect();

} else {
   print("Modbus Connect Failed, err=",ret);
}