Socket
Socket
Sign inDemoInstall

jsmodbus

Package Overview
Dependencies
169
Maintainers
1
Versions
47
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.6 to 1.1.0

.jshintrc

8

examples/tcp/ReadHoldingRegister.js
var modbus = require('../..'),
client = modbus.client.tcp.complete({ 'host' : process.argv[2], 'port' : process.argv[3]});
client = modbus.client.tcp.complete({
'host' : process.argv[2],
'port' : process.argv[3],
'unitId' : 1,
'logEnabled' : true,
'logLevel' : 'debug'
});

@@ -4,0 +10,0 @@ client.on('connect', function () {

@@ -5,4 +5,10 @@ var stampit = require('stampit'),

var server = stampit()
.refs({ 'logEnabled' : true, 'port' : 8888, 'responseDelay' : 100 })
.compose(modbus.server.tcp.complete)
.refs({
'logEnabled' : true,
'logLevel' : 'debug',
'port' : 8888,
'responseDelay' : 100,
'coils' : new Buffer(100000),
'holding' : new Buffer(100000)
}).compose(modbus.server.tcp.complete)
.init(function () {

@@ -15,11 +21,26 @@

this.on('readCoilsRequest', function (start, quantity) {
var oldValue = this.getCoils().readUInt8(start);
console.log('readCoilsRequest', start, quantity);
/* var oldValue = this.getCoils().readUInt8(start);
oldValue = (oldValue + 1) % 255;
this.getCoils().writeUInt8(oldValue, start);
*/
});
this.on('readHoldingRegistersRequest', function (start, quantity) {
console.log('readHoldingRegisters', start, quantity);
});
this.on('writeSingleCoilRequest', function (adr, value) {
console.log('writeSingleCoil', adr, value);
});
this.getHolding().writeUInt16BE(1, 0);

@@ -26,0 +47,0 @@ this.getHolding().writeUInt16BE(2, 2);

13

examples/tcp/WriteSingleCoil.js

@@ -1,3 +0,8 @@

var ModbusClient = require('../..'),
client = ModbusClient.createTcpClient('192.168.1.2', 502);
var modbus = require('../..'),
client = modbus.client.tcp.complete({
'host' : process.argv[2],
'port' : process.argv[3],
'unitId' : 1,
'logEnabled' : true,
'logLevel' : 'debug' });

@@ -7,3 +12,3 @@ // override logger function

client.writeSingleCoil(4, true).then(function (resp) {
client.writeSingleCoil(process.argv[4], process.argv[5] === '1').then(function (resp) {

@@ -30,2 +35,2 @@ console.log(resp);

client.connect();
{
"name": "jsmodbus",
"version": "1.0.6",
"version": "1.1.0",
"description": "Implementation for the Serial/TCP Modbus protocol.",

@@ -5,0 +5,0 @@ "author": "Stefan Poeter <stefan.poeter@cloud-automation.de>",

@@ -47,3 +47,3 @@ A simple an easy to use Modbus TCP client/server implementation.

// resp will look like { fc: 1, byteCount: 20, coils: [ values 0 - 13 ] }
// resp will look like { fc: 1, byteCount: 20, coils: [ values 0 - 13 ], payload: <Buffer> }
console.log(resp);

@@ -53,5 +53,5 @@

client.readDiscreteInput(0, 13).then(function (resp) {
client.readDiscreteInputs(0, 13).then(function (resp) {
// resp will look like { fc: 2, byteCount: 20, coils: [ values 0 - 13 ] }
// resp will look like { fc: 2, byteCount: 20, coils: [ values 0 - 13 ], payload: <Buffer> }
console.log(resp);

@@ -63,3 +63,3 @@

// resp will look like { fc: 3, byteCount: 20, register: [ values 0 - 10 ] }
// resp will look like { fc: 3, byteCount: 20, register: [ values 0 - 10 ], payload: <Buffer> }
console.log(resp);

@@ -69,5 +69,5 @@

client.readInputRegister(0, 10).then(function (resp) {
client.readInputRegisters(0, 10).then(function (resp) {
// resp will look like { fc: 4, byteCount: 20, register: [ values 0 - 10 ] }
// resp will look like { fc: 4, byteCount: 20, register: [ values 0 - 10 ], payload: <Buffer> }
console.log(resp);

@@ -84,2 +84,9 @@

client.writeSingleCoil(5, new Buffer(0x01)).then(function (resp) {
// resp will look like { fc: 5, byteCount: 4, outputAddress: 5, outputValue: true }
console.log(resp);
}).fail(console.log);
client.writeSingleRegister(13, 42).then(function (resp) {

@@ -92,2 +99,9 @@

client.writeSingleRegister(13, new Buffer([0x00 0x2A])).then(function (resp) {
// resp will look like { fc: 6, byteCount: 4, registerAddress: 13, registerValue: 42 }
console.log(resp);
}).fail(console.log);
client.writeMultipleCoils(3, [1, 0, 1, 0, 1, 1]).then(function (resp) {

@@ -100,2 +114,9 @@

client.writeMultipleCoils(3, new Buffer([0x2B]), 6).then(function (resp) {
// resp will look like { fc: 15, startAddress: 3, quantity: 6 }
console.log(resp);
}).fail(console.log);
client.writeMultipleRegisters(4, [1, 2, 3, 4]).then(function (resp) {

@@ -108,2 +129,9 @@

client.writeMultipleRegisters(4, new Buffer([0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04]).then(function (resp) {
// resp will look like { fc : 16, startAddress: 4, quantity: 4 }
console.log(resp);
}).fail(console.log);
});

@@ -110,0 +138,0 @@

@@ -26,2 +26,3 @@ var Stampit = require('stampit'),

byteCount : byteCount,
payload : pdu.slice(2),
coils : []

@@ -28,0 +29,0 @@ };

@@ -25,2 +25,3 @@ var Stampit = require('stampit'),

byteCount : byteCount,
payload : pdu.slice(2),
coils : []

@@ -27,0 +28,0 @@ };

@@ -25,2 +25,3 @@ var Stampit = require('stampit'),

byteCount : byteCount,
payload : pdu.slice(2),
register : [ ]

@@ -27,0 +28,0 @@ };

@@ -25,2 +25,3 @@ var Stampit = require('stampit'),

byteCount : byteCount,
payload : pdu.slice(2),
register : []

@@ -27,0 +28,0 @@ };

@@ -39,33 +39,40 @@ var stampit = require('stampit'),

this.writeMultipleCoils = function (startAddress, coils) {
this.writeMultipleCoils = function (startAddress, coils, N) {
var defer = Q.defer();
var fc = 15,
pdu = Put()
.word8(fc)
.word16be(startAddress)
if (coils.length > 1968) {
if (coils instanceof Buffer) {
pdu.word16be(N)
.word8(coils.length)
.put(coils)
} else if (coils instanceof Array) {
if (coils.length > 1968) {
defer.reject();
return;
}
}
var byteCount = Math.ceil(coils.length / 8),
curByte = 0,
cntr = 0
var fc = 15,
byteCount = Math.ceil(coils.length / 8),
curByte = 0,
cntr = 0,
pdu = Put()
.word8(fc)
.word16be(startAddress)
.word16be(coils.length)
.word8(byteCount);
pdu.word16be(coils.length)
.word8(byteCount);
for (var i = 0; i < coils.length; i += 1) {
for (var i = 0; i < coils.length; i += 1) {
curByte += coils[i]?Math.pow(2, cntr):0;
curByte += coils[i]?Math.pow(2, cntr):0;
cntr = (cntr + 1) % 8;
cntr = (cntr + 1) % 8;
if (cntr === 0) {
pdu.word8(curByte);
}
if (cntr === 0 || i === coils.length - 1 ) {
pdu.word8(curByte)
curByte = 0
}
}
}

@@ -75,6 +82,4 @@

this.queueRequest(fc, pdu, defer);
return defer.promise;

@@ -81,0 +86,0 @@

@@ -42,33 +42,42 @@ var stampit = require('stampit'),

var defer = Q.defer();
var fc = 16,
pdu = Put()
.word8(fc)
.word16be(startAddress)
if (register.length > 0x007b) {
if(register instanceof Buffer) {
if(register.length/2 > 0x007b) {
defer.reject();
return;
}
pdu.word16be(register.length/2)
.word8(register.length)
.put(register)
}
else if(register instanceof Array) {
var fc = 16,
byteCount = Math.ceil(register.length * 2),
curByte = 0,
pdu = Put()
.word8(fc)
.word16be(startAddress)
.word16be(register.length)
.word8(byteCount);
if (register.length > 0x007b) {
defer.reject();
return;
}
for (var i = 0; i < register.length; i += 1) {
var byteCount = Math.ceil(register.length * 2),
curByte = 0
pdu.word16be(register[i]);
pdu.word16be(register.length)
.word8(byteCount)
for (var i = 0; i < register.length; i += 1) {
pdu.word16be(register[i]);
}
} else {
defer.reject();
}
pdu = pdu.buffer();
this.queueRequest(fc, pdu, defer);
return defer.promise;
};

@@ -75,0 +84,0 @@

@@ -41,3 +41,4 @@ var Stampit = require('stampit'),

defer = Q.defer(),
pdu = Put().word8be(5).word16be(address).word16be(value?0xff00:0x0000).buffer();
payload = (value instanceof Buffer) ? (value.readUInt8(0) > 0) : value,
pdu = Put().word8be(5).word16be(address).word16be(payload?0xff00:0x0000).buffer();

@@ -44,0 +45,0 @@ this.queueRequest(fc, pdu, defer);

@@ -26,3 +26,5 @@ var Stampit = require('stampit'),

registerAddress : registerAddress,
registerValue : registerValue
registerValue : registerValue,
registerValueRaw: pdu.slice(1,2),
registerValueRaw: pdu.slice(3,2)
};

@@ -43,3 +45,4 @@

defer = Q.defer(),
pdu = Put().word8be(6).word16be(address).word16be(value).buffer();
payload = (value instanceof Buffer) ? value : Put().word16be(value).buffer(),
pdu = Put().word8be(6).word16be(address).put(payload).buffer();

@@ -46,0 +49,0 @@ this.queueRequest(fc, pdu, defer);

@@ -50,19 +50,21 @@ var stampit = require('stampit'),

var val = 0,
j = 0,
thisByteBitCount = 0,
response = Put().word8(0x01).word8(Math.floor(quantity / 8) + (quantity % 8 === 0 ? 0 : 1));
for (var i = start; i < start + quantity; i += 1) {
for (var totalBitCount = start; totalBitCount < start + quantity; totalBitCount += 1) {
val += mem.readUInt8(Math.floor(i / 8)) & Math.pow(2, i % 8);
var buf = mem.readUInt8(Math.floor(totalBitCount / 8))
var mask = 1 << (totalBitCount % 8)
if(buf & mask) {
val += 1 << (thisByteBitCount % 8)
}
j += 1;
thisByteBitCount += 1;
if (j % 8 === 0 || i === (start + quantity) - 1) {
if (thisByteBitCount % 8 === 0 || totalBitCount === (start + quantity) - 1) {
response.word8(val);
val = 0;
}
}

@@ -69,0 +71,0 @@

@@ -50,19 +50,21 @@ var stampit = require('stampit'),

var val = 0,
j = 0,
thisByteBitCount = 0,
response = Put().word8(0x02).word8(Math.floor(quantity / 8) + (quantity % 8 === 0 ? 0 : 1));
for (var i = start; i < start + quantity; i += 1) {
for (var totalBitCount = start; totalBitCount < start + quantity; totalBitCount += 1) {
val += mem.readUInt8(Math.floor(i / 8)) & Math.pow(2, i % 8);
var buf = mem.readUInt8(Math.floor(totalBitCount / 8))
var mask = 1 << (totalBitCount % 8)
if(buf & mask) {
val += 1 << (thisByteBitCount % 8)
}
j += 1;
thisByteBitCount += 1;
if (j % 8 === 0 || i === (start + quantity) - 1) {
if (thisByteBitCount % 8 === 0 || totalBitCount === (start + quantity) - 1) {
response.word8(val);
val = 0;
}
}

@@ -69,0 +71,0 @@

@@ -27,5 +27,6 @@

var reqFifo = [],
responseHandler = { },
var responseHandler = { },
currentRequest = null;
this.reqFifo = [];

@@ -49,3 +50,3 @@ var init = function () {

if (reqFifo.length === 0) {
if (this.reqFifo.length === 0) {
this.log.debug('Nothing in request pipe.');

@@ -55,3 +56,3 @@ return;

currentRequest = reqFifo.shift();
currentRequest = this.reqFifo.shift();

@@ -86,4 +87,4 @@ currentRequest.timeout = setTimeout(function () {

this.log.debug('Cleaning up request fifo.');
reqFifo.forEach(function () {
reqFifo.pop();
this.reqFifo.forEach(function () {
this.reqFifo.pop();
});

@@ -177,3 +178,3 @@

reqFifo.push(req);
this.reqFifo.push(req);

@@ -180,0 +181,0 @@ if (this.inState('ready')) {

@@ -13,2 +13,3 @@ var stampit = require('stampit'),

var server, socketCount = 0, fifo = [];
var clients = []

@@ -31,2 +32,3 @@ var init = function () {

clients.push(s)
initiateSocket(s);

@@ -154,3 +156,10 @@

server.close(cb);
for(var c in clients) {
clients[c].destroy()
}
server.close(function() {
server.unref()
if(cb) { cb() }
});

@@ -157,0 +166,0 @@ };

@@ -12,3 +12,5 @@

var ModbusClientCore = require('../src/modbus-client-core.js');
var ModbusClientCore = require('../src/modbus-client-core.js'),
ModbusClientInspector = require('./modbus-client-inspector.js'),
ModbusClientBase = stampit().compose(ModbusClientCore, ModbusClientInspector)

@@ -18,3 +20,3 @@ describe('Read Coils Tests.', function () {

var ReadCoils = require('../src/handler/client/ReadCoils.js'),
ModbusClient = stampit().compose(ModbusClientCore, ReadCoils);
ModbusClient = stampit().compose(ModbusClientBase, ReadCoils);

@@ -27,12 +29,10 @@ it("should read coils just fine.", function (done) {

assert(resp.fc, 1);
assert(resp.byteCount, 2);
assert(resp.coils, [true, false, true, false, true, false, true, false, true]);
assert.equal(resp.fc, 1);
assert.equal(resp.byteCount, 2);
assert.equal(resp.coils.length, 16);
assert.deepEqual(resp.payload, new Buffer([85, 1]))
assert.deepEqual(resp.coils, [true, false, true, false, true, false, true, false, true, false, false, false, false, false, false, false]);
done();
}).fail(function () {
assert.ok(false);
}).done();

@@ -54,6 +54,2 @@

}).then(function () {
assert.ok(false);
}).done();

@@ -71,3 +67,3 @@

var ReadDiscreteInputs = require('../src/handler/client/ReadDiscreteInputs.js'),
ModbusClient = stampit().compose(ModbusClientCore, ReadDiscreteInputs);
ModbusClient = stampit().compose(ModbusClientBase, ReadDiscreteInputs);

@@ -80,12 +76,10 @@ it('should read discrete inputs just fine.', function (done) {

assert(resp.fc, 2);
assert(resp.byteCount, 10);
assert(resp.coils, [true, true, true, true, false, false, false, false]);
assert.equal(resp.fc, 2);
assert.equal(resp.byteCount, 1);
assert.equal(resp.coils.length, 8);
assert.deepEqual(resp.payload, new Buffer([15]));
assert.deepEqual(resp.coils, [true, true, true, true, false, false, false, false]);
done();
}).fail(function () {
assert.ok(false);
}).done();

@@ -123,3 +117,3 @@

var ReadHoldingRegisters = require('../src/handler/client/ReadHoldingRegisters.js'),
ModbusClient = stampit().compose(ModbusClientCore, ReadHoldingRegisters);
ModbusClient = stampit().compose(ModbusClientBase, ReadHoldingRegisters);

@@ -132,12 +126,9 @@ it('should read holding register just fine.', function (done) {

assert(resp.fc, 3);
assert(resp.byteCount, 10);
assert(resp.register, [1, 2, 3, 4, 5]);
assert.equal(resp.fc, 3);
assert.equal(resp.byteCount, 10);
assert.deepEqual(resp.payload, new Buffer([0,1,0,2,0,3,0,4,0,5]));
assert.deepEqual(resp.register, [1, 2, 3, 4, 5]);
done();
}).fail(function () {
assert.ok(false);
}).done();

@@ -186,3 +177,3 @@

var ReadInputRegisters = require('../src/handler/client/ReadInputRegisters.js'),
ModbusClient = stampit().compose(ModbusClientCore, ReadInputRegisters);
ModbusClient = stampit().compose(ModbusClientBase, ReadInputRegisters);

@@ -195,12 +186,9 @@ it('should read input registers just fine.', function (done) {

assert(resp.fc, 4);
assert(resp.byteCount, 10);
assert(resp.register, [5, 4, 3, 2, 1]);
assert.equal(resp.fc, 4);
assert.equal(resp.byteCount, 10);
assert.deepEqual(resp.payload, new Buffer([0,5,0,4,0,3,0,2,0,1]))
assert.deepEqual(resp.register, [5, 4, 3, 2, 1]);
done();
}).fail(function () {
done(true);
}).done();

@@ -249,3 +237,3 @@

var WriteSingleCoil = require('../src/handler/client/WriteSingleCoil.js'),
ModbusClient = stampit().compose(ModbusClientCore, WriteSingleCoil);
ModbusClient = stampit().compose(ModbusClientBase, WriteSingleCoil);

@@ -258,14 +246,47 @@ it('should write a single coil just fine.', function (done) {

assert(resp.fc, 5);
assert(resp.outputAddress, 3);
assert(resp.outputValue, true);
assert.equal(resp.fc, 5);
assert.equal(resp.outputAddress, 3);
assert.equal(resp.outputValue, true);
done();
}).fail(function () {
}).done();
var pdu = client.queueSpy().pdu
assert.equal(pdu.readUInt8(0), 5)
assert.equal(pdu.readUInt16BE(1), 3)
assert.equal(pdu.readUInt16BE(3), 0xff00)
client.setState('ready');
client.emit(
'data',
Put()
.word8be(5)
.word16be(3)
.word16be(0xFF00)
.buffer()
);
});
it('should write a single coil with Buffer param true just fine.', function (done) {
var client = ModbusClient(true);
client.writeSingleCoil(3, new Buffer([1])).then(function (resp) {
assert.equal(resp.fc, 5);
assert.equal(resp.outputAddress, 3);
assert.equal(resp.outputValue, true);
done();
assert.ok(false);
}).done();
var pdu = client.queueSpy().pdu
assert.equal(pdu.readUInt8(0), 5)
assert.equal(pdu.readUInt16BE(1), 3)
assert.equal(pdu.readUInt16BE(3), 0xff00)
client.setState('ready');

@@ -280,3 +301,33 @@ client.emit(

);
});
it('should write a single coil with Buffer param false just fine.', function (done) {
var client = ModbusClient(true);
client.writeSingleCoil(3, new Buffer([0])).then(function (resp) {
assert.equal(resp.fc, 5);
assert.equal(resp.outputAddress, 3);
assert.equal(resp.outputValue, false);
done();
}).done();
var pdu = client.queueSpy().pdu
assert.equal(pdu.readUInt8(0), 5)
assert.equal(pdu.readUInt16BE(1), 3)
assert.equal(pdu.readUInt16BE(3), 0x0000)
client.setState('ready');
client.emit(
'data',
Put()
.word8be(5)
.word16be(3)
.word16be(0x0000)
.buffer()
);
});

@@ -309,3 +360,3 @@

var WriteSingleRegister = require('../src/handler/client/WriteSingleRegister.js'),
ModbusClient = stampit().compose(ModbusClientCore, WriteSingleRegister);
ModbusClient = stampit().compose(ModbusClientBase, WriteSingleRegister);

@@ -318,14 +369,16 @@ it('should write a single register just fine.', function (done) {

assert(resp.fc, 6);
assert(resp.registerAddress, 3);
assert(resp.registerValue, 123);
assert.equal(resp.fc, 6);
assert.equal(resp.registerAddress, 3);
assert.equal(resp.registerValue, 123);
done();
}).fail(function () {
done(true);
}).done();
var pdu = client.queueSpy().pdu
assert.equal(pdu.readUInt8(0), 6)
assert.equal(pdu.readUInt16BE(1), 3)
assert.equal(pdu.readUInt16BE(3), 0x007b)
client.setState('ready');

@@ -343,2 +396,33 @@ client.emit(

it('should write a single register with buffer payload just fine.', function (done) {
var client = ModbusClient(true);
client.writeSingleRegister(3, new Buffer([0x00, 0x7b])).then(function (resp) {
assert.equal(resp.fc, 6);
assert.equal(resp.registerAddress, 3);
assert.equal(resp.registerValue, 123);
done();
}).done();
var pdu = client.queueSpy().pdu
assert.equal(pdu.readUInt8(0), 6)
assert.equal(pdu.readUInt16BE(1), 3)
assert.equal(pdu.readUInt16BE(3), 0x007b)
client.setState('ready');
client.emit(
'data',
Put()
.word8be(6)
.word16be(3)
.word16be(123)
.buffer()
);
});
it('should fail writing single register.', function (done) {

@@ -369,3 +453,3 @@

var WriteMultipleCoils = require('../src/handler/client/WriteMultipleCoils.js'),
ModbusClient = stampit().compose(ModbusClientCore, WriteMultipleCoils);
ModbusClient = stampit().compose(ModbusClientBase, WriteMultipleCoils);

@@ -376,16 +460,23 @@ it('should write multiple coils just fine.', function (done) {

client.writeMultipleCoils(3, [true, false, true, false]).then(function (resp) {
client.writeMultipleCoils(20, [true, false, true, true, false, false, true, true, true, false])
.then(function (resp) {
assert(resp.fc, 6);
assert(resp.startAddress, 3);
assert(resp.quantity, 4);
assert.equal(resp.fc, 15);
assert.equal(resp.startAddress, 20);
assert.equal(resp.quantity, 10);
done();
}).fail(function () {
done(true);
}).done();
var pdu = client.queueSpy().pdu
assert.equal(pdu.readUInt8(0), 15) // fc
assert.equal(pdu.length, 8)
assert.equal(pdu.readUInt16BE(1), 20) // startAddress
assert.equal(pdu.readUInt16BE(3), 10) // coilCount
assert.equal(pdu.readUInt8(5), 2) // byteCount
assert.equal(pdu.readUInt8(6), 0xCD) // registerValue
assert.equal(pdu.readUInt8(7), 0x01) // registerValue
client.setState('ready');

@@ -396,7 +487,49 @@ client.emit(

.word8be(15)
.word16be(3)
.word16be(4)
.word16be(20)
.word16be(10)
.word8be(2)
.word8be(0xCD)
.word8be(0x01)
.buffer()
);
});
it('should write multiple coils with buffer payload just fine.', function (done) {
var client = ModbusClient(true);
client.writeMultipleCoils(20, new Buffer([0xCD, 0x01]), 10)
.then(function (resp) {
assert.equal(resp.fc, 15);
assert.equal(resp.startAddress, 20);
assert.equal(resp.quantity, 10);
done();
}).done();
var pdu = client.queueSpy().pdu
assert.equal(pdu.readUInt8(0), 15) // fc
assert.equal(pdu.length, 8)
assert.equal(pdu.readUInt16BE(1), 20) // startAddress
assert.equal(pdu.readUInt16BE(3), 10) // coilCount
assert.equal(pdu.readUInt8(5), 2) // byteCount
assert.equal(pdu.readUInt8(6), 0xCD) // registerValue
assert.equal(pdu.readUInt8(7), 0x01) // registerValue
client.setState('ready');
client.emit(
'data',
Put()
.word8be(15)
.word16be(20)
.word16be(10)
.word8be(2)
.word8be(0xCD)
.word8be(0x01)
.buffer()
);
});

@@ -429,3 +562,3 @@

var WriteMultipleRegisters = require('../src/handler/client/WriteMultipleRegisters.js'),
ModbusClient = stampit().compose(ModbusClientCore, WriteMultipleRegisters);
ModbusClient = stampit().compose(ModbusClientBase, WriteMultipleRegisters);

@@ -436,29 +569,50 @@ it('should write multiple registers just fine.', function (done) {

client.writeMultipleRegisters(3, [1, 2, 3]).then(function (resp) {
assert(resp.fc, 16);
assert(resp.startAddress, 3);
assert(resp.quantity, 3);
client.writeMultipleRegisters(3, [1, 2, 350]).then(function (resp) {
assert.equal(resp.fc, 16);
assert.equal(resp.startAddress, 3);
assert.equal(resp.quantity, 3);
done();
done();
}).fail(function () {
done(true);
}).done();
var pdu = client.queueSpy().pdu
assert.equal(pdu.readUInt8(0), 16) // fc
assert.equal(pdu.length, 12)
assert.equal(pdu.readUInt16BE(1), 3) // startAddress
assert.equal(pdu.readUInt16BE(3), 3) // registerCount
assert.equal(pdu.readUInt8(5), 6) // byteCount
assert.equal(pdu.readUInt16BE(6), 1) // registerValue
assert.equal(pdu.readUInt16BE(8), 2) // registerValue
assert.equal(pdu.readUInt16BE(10), 350) // registerValue
client.setState('ready');
client.emit(
'data',
Put()
.word8be(0x10)
.word16be(0x0003)
.word16be(0x0004)
.word16be(0x0001)
.word16be(0x0002)
.word16be(0x0003)
.buffer()
'data',
Put()
.word8be(16)
.word16be(3)
.word16be(3)
.word16be(1)
.word16be(2)
.word16be(350)
.buffer()
);
});
it('should write multiple registers with buffer payload just fine.', function () {
var client = ModbusClient(true);
client.writeMultipleRegisters(3, new Buffer([0x00, 0xc4]))
var pdu = client.queueSpy().pdu
assert.equal(pdu.readUInt8(0), 16) // fc
assert.equal(pdu.length, 8)
assert.equal(pdu.readUInt16BE(1), 3) // startAddress
assert.equal(pdu.readUInt16BE(3), 1) // registerCount
assert.equal(pdu.readUInt8(5), 2) // byteCount
assert.equal(pdu.readUInt16BE(6), 196) // registerValue
});

@@ -491,3 +645,3 @@

var ReadHoldingRegisters = require('../src/handler/client/ReadHoldingRegisters.js'),
ModbusClient = stampit().compose(ModbusClientCore, ReadHoldingRegisters);
ModbusClient = stampit().compose(ModbusClientBase, ReadHoldingRegisters);

@@ -522,3 +676,3 @@ it('should timeout a read holding registers request.', function (done) {

assert(err.err, 'timeout');
assert.equal(err.err, 'timeout');

@@ -525,0 +679,0 @@ }).done();

@@ -44,3 +44,3 @@ var stampit = require('stampit'),

exResponse = Put().word8(0x01).word8(1).word8(0x15).buffer();
core.getCoils().writeUInt8(0x15, 0);

@@ -60,2 +60,22 @@

it('should handle a read coils request with odd start address just fine.', function (done) {
var core = Core(),
request = Put().word8(0x01).word16be(2).word16be(5).buffer(),
exResponse = Put().word8(0x01).word8(1).word8(0x05).buffer();
core.getCoils().writeUInt8(0x15, 0);
var resp = function (response) {
assert.equal(response.compare(exResponse), 0);
done();
};
core.onData(request, resp);
});
it('should handle a read coils request with a start address outside the address space.', function (done) {

@@ -124,2 +144,22 @@

it('should handle a read discrete inputs request with odd start address just fine.', function (done) {
var core = Core(),
request = Put().word8(0x02).word16be(2).word16be(5).buffer(),
exResponse = Put().word8(0x02).word8(1).word8(0x05).buffer();
core.getInput().writeUInt8(0x15, 0);
var resp = function (response) {
assert.equal(response.compare(exResponse), 0);
done();
};
core.onData(request, resp);
});
it('should handle a read discrete inputs request with a start address outside the address space.', function (done) {

@@ -126,0 +166,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc