modbus-ts-client
v1.0.0
Published
Typescript: Modbus client for Serial,TCP,UDP,RtuOverTCP,RtuOverUDP
Maintainers
Readme
modbus-ts-client
Typescript: Modbus client for Serial, TCP, UDP, RtuOverTCP, RtuOverUDP
- (0x01) Read Coils
- (0x02) Read Discrete Inputs
- (0x03) Read Holding Registers
- (0x04) Read Input Registers
- (0x05) Write Single Coil
- (0x06) Write Single Register
- (0x0F) Write Multiple Coils
- (0x10) Write Multiple Registers
- (0x16) Mask Write Register
- (0x17) Read/Write Multiple Registers
- User
Installation
npm i modbus-ts-client
Rebuld in node_modules
The package contains the source code and the tsconfig.json file.
To change the target use:npm i @types/node -Dtsc -p ./node_modules/modbus-ts-client --target es5 --removeComments --declaration false &&tsc -p ./node_modules/modbus-ts-client --target es5 --emitDeclarationOnly
Example
import { MBClientInterface , MBClient , MBReadHoldingRegistersX03 , MBRaw } from "modbus-ts-client"
import {BBPacker} from "byte-bit-packer"
async function test()
{
let _if = MBClient.create( { type : "RtuOverUdp" , remoteIp : "127.0.0.1", remotePort : 502 } );
try
{
const deviceID = 1;
const registerAddress1 = 1;
const registerQuantity1 = 2;
const registerAddress2 = 1;
const registerQuantity2 = 2;
const data1 : MBReadHoldingRegistersX03.Data = {
address : registerAddress1,
quantity : registerQuantity1
}
const wrPacker = new BBPacker( 4 , {littleEndian:false} ) ;
wrPacker.writeU16(0,registerAddress2);
wrPacker.writeU16(2,registerQuantity2);
const data2 : MBRaw.Data = {
functionCode : 0x03,
value : wrPacker
}
const req1 = _if.fetch<MBReadHoldingRegistersX03>( new MBReadHoldingRegistersX03(deviceID,data1) );
const req2 = _if.fetch<MBRaw>( new MBRaw(deviceID,data2) );
const res1 : MBReadHoldingRegistersX03 = await req1;
let arr = res1.value;
console.log("itemsNumber = ",arr.length);
for( let i = 0 ; i < arr.length ; i++ )
{
const valueStr = `value[${i}] = 0x${arr[i].toString(16).padStart(4,'0')}`;
console.log(valueStr);
}
console.log("------------------");
const res2 : MBRaw = await req2;
const rdPacker = res2.bufferValue;
console.log("itemsNumber = ",rdPacker.getNumber16(1));
function print(index : number ,data : number) : boolean
{
const valueStr = `value[${index}] = 0x${data.toString(16).padStart(4,'0')}`;
console.log(valueStr);
return true;
}
rdPacker.forAllUint16( print , 1 );
}
finally {
_if?.close();
}
}
test();