npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

modbusjs

v0.0.11

Published

Node.JS modbus library

Downloads

27

Readme

ModbusJS

Build Status NPM Version

Overview

Modbus communication library for NodeJS using promises.

Status

The library is under active development and i keep adding functionality as well as possibly changing already implemented functionality if required. However i'll try to keep already implemented and working interfaces unchanged.

Currently implemented and working functionality :

  • ModbusTcpClient - Modbus client (master) for communication over TCP
    • readCoils
    • readDiscreteInputs
    • readHoldingRegisters
    • readInputRegisters
    • writeSingleCoil
    • writeSingleRegister
    • writeMultipleCoils
    • writeMultipleCoilsSameValue
    • writeMultipleRegisters
    • writeMultipleRegistersSameValue

Installation

npm install modbusjs

Usage

ModbusJS is using ES6 Promises (thus no 3rd party promise module dependency) to handle read/write requests. On top of that events are implemented as well for connection handling.

ModbusTcpClient

var ModbusTcpClient = require('modbusjs').ModbusTcpClient;

constructor

Returns a new instance of ModbusTcpClient. Connection is not established at this point.

function(host, port[,options])

  • host: IP address or DNS name of modbus server
  • port: Port of modbus server (usually 502)
  • options: Optional
    • debug: Turn on debugging messages printed out to console. Default value is FALSE.
    • autoReconnect: Automatic reconnect in case connection is lost. Default value is FALSE.
    • autoReconnectInterval: Interval before trying to reconnect in seconds. Default values is 10.

example

var modbusTcpClient = new ModbusTcpClient('localhost', 502, {debug: true, autoReconnect: true, autoReconnectInterval: 5})

connect

Tries to establish communication with target modbus server. Triggers error event in case of error and connect if successful.

example

modbusTcpClient.connect().then(function(){
    // Success
}).catch(function(err){
    // Error
});

disconnect

Destroys TCP socket if active and runs several clean up procedures. Triggers disconnect event if successful.

example

modbusTcpClient.disconnect().then(function(){
    // Success
}).catch(function(err){
    // Error (ie. no active connection)
});

reconnect

Tries to reconnect to target modbus server. Triggers reconnect event if successful.

example

modbusTcpClient.reconnect().then(function(){
    // Success
}).catch(function(err){
    // Error
});

isConnected

Returns current connection status.

var connectionStatus = modbusTcpClient.isConnected();

readCoils

Reads coils from the modbus server. Maximum number of coils which can be read in one transaction is 2000.

function(address, length[,options])

Input parameters

  • address: Starting coil address
  • length: Number of coils to read
  • options: Optional
    • timeout: Request timeout. Default value is 5 seconds.

Result

  • result: Array of booleans
  • request: Request object
  • response: Response object

example

modbusTcpClient.readCoils(0, 10).then(function(result){
    // Success
}).catch(function(err){
    // Error
});

readDiscreteInputs

Reads inputs from the modbus server. Same interface and return values as readCoils.

example

modbusTcpClient.readDiscreteInputs(0, 10).then(function(result){
    /// Success
}).catch(function(err){
    // Error
});

readHoldingRegisters

Reads holding registers from modbus server. Maximum number of registers which can be read in one transaction is 125.

function(address, length[,options])

Input parameters

  • address: Starting register address
  • length: Number of registers to read
  • options: Optional
    • timeout: Request timeout. Default is 5 seconds.
    • unsigned: By default all the results are read as signed. If this options is TRUE then unsigned conversion will be used instead.

Result

  • result: Array of (U)Int16
  • request: Request object
  • response: Response object

example

modbusTcpClient.readHoldingRegisters(0, 10).then(function(result){
    // Success
}).catch(function(err){
    // Error
});

readInputgRegisters

Reads input registers from the modbus server. Same interface and return values as readHoldingRegisters.

example

modbusTcpClient.readInputgRegisters(0, 10).then(function(result){
    // Success
}).catch(function(err){
    // Error
});

writeSingleCoil

Writes single coil value.

function(address, value[,options])

Input parameters

  • address: Coil address
  • value: Valid values are true/false and 1/0
  • options: Optional
    • timeout: Request timeout. Default is 5 seconds.

Result

  • result: Echoed value from the request
  • request: Request object
  • response: Response object

example

modbusTcpClient.writeSingleCoil(6, 0).then(function(res){
    // Success
}).catch(function(err){
    // Error
})

writeSingleRegister

Writes single register value.

function(address, value[,options])

Input parameters

  • address: Register address
  • value: Maximum value is 0xFFFF.
  • options: Optional
    • timeout: Request timeout. Default is 5 seconds.

Result

  • result: Echoed value from the request
  • request: Request object
  • response: Response object

example

modbusTcpClient.writeSingleRegister(1, 123).then(function(res){
    // Success
}).catch(function(err){
    // Error
})

writeMultipleCoils

Writes multiple coils in one transaction.

function(address, values[,options])

Input parameters

  • address: Starting coil address
  • values: Array of booleans (or 0/1) to be written to the server starting from starting address.
  • options: Optional
    • timeout: Request timeout. Default is 5 seconds.

Result

  • result: Number of updated output coils
  • request: Request object
  • response: Response object

example

modbusTcpClient.writeMultipleCoils(1, [true, false, false, true, 0, 0, 1]).then(function(res){
    // Success
}).catch(function(err){
    // Error
})

writeMultipleCoilsSameValue

Just a helper with a same functionality as writeMultipleCoils providing function for cases when the value is same for the whole bulk of coils.

function(address, length, value[,options])

Input parameters

  • address: Starting coil address
  • length: Number of coils to be updated
  • value: Boolean (or 0/1) value to be written to [address, address + length] interval.
  • options: Optional
    • timeout: Request timeout. Default value is 5 seconds.

Result

  • result: Number of updated output coils
  • request: Request object
  • response: Response object

example

modbusTcpClient.writeMultipleCoilsSameValue(1, 20, true).then(function(res){
    // Success
}).catch(function(err){
    // Error
})

writeMultipleRegisters

Writes multiple registers in one transaction.

function(address, values[,options])

Input parameters

  • address: Starting register address
  • values: Array of UInt16 to be written to the server starting from the starting address.
  • options: Optional
    • timeout: Request timeout. Default is 5 seconds.

Result

  • result: Number of output registers
  • request: Request object
  • response: Response object

example

modbusTcpClient.writeMultipleRegisters(1, [1,2,3,4,5,6,7,8]).then(function(res){
    // Success
}).catch(function(err){
    // Error
})

writeMultipleRegistersSameValue

Just a helper with a same functionality as writeMultipleRegisters providing function for cases when the value is same for the whole bulk of registers.

function(address, length, value[,options])

Input parameters

  • address: Starting register address
  • length: Number of registers affected
  • value: UInt16 value to be written to [address, address + ] interval.
  • options: Optional
    • timeout: Request timeout. Default is 5 seconds.

Result

  • result: Number of output registers
  • request: Request object
  • response: Response object

example

modbusTcpClient.writeMultipleRegistersSameValue(1, 20, 666).then(function(res){
    // Success
}).catch(function(err){
    // Error
})

Events

connect

Emitted when successfully connected to the modbus server.

modbusTcpClient.on('connect', function(err){
    console.log('CONNECTED - EVENT');
});
error

Emitted when network (socket) error occurs.

modbusTcpClient.on('error', function(err){
    console.log('ERROR - ' + err);
});
disconnect

Emitted when the connection is lost. (not emitted during reconnection)

modbusTcpClient.on('disconnect', function(){
    console.log('DISCONNECTED - EVENT');
});
reconnect

Emitted when successfully reconnected to the modbus server

modbusTcpClient.on('disconnect', function(){
    console.log('DISCONNECTED - EVENT');
});

Examples

All the examples can be found in examples folder or above per individual functions.

Examples can triggered via npm however IP address of modbus server might have to be modified directly in the file (default localhost)

npm run [example-name]