forked from dresende/node-modbus-tcp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsampleServer.js
58 lines (48 loc) · 1.64 KB
/
sampleServer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
var net = require('net');
var modbus = require('modbus-tcp');
var modbusServer = new modbus.Server();
const port = 502;
var tcpServer = net.createServer();
tcpServer.listen(port,function(){
console.log('TCP Socket bound to port '+port);
});
tcpServer.on('connection', function(socket){
console.log('client has connected');
modbusServer.pipe(socket);
socket.on('error', function(e){
console.log('Connection error: '+e);
socket.destroy();
});
socket.on('close', function(e){
console.log('Client has closed connection.');
});
});
modbusServer.on('read-holding-registers', readHoldingRegisters);
modbusServer.on('read-coils',readCoils);
modbusServer.on('write-multiple-registers',writeRegisters);
function readHoldingRegisters(from,to,reply) {
console.log('Read holding registers '+from+'-'+to);
var values = [1,6,3,9]; // sample values just to see if it works.
return reply(null,bufferify(values));
}
function readCoils(from,to,reply) {
console.log('Read coils '+from+'-'+to);
var values = [2,0,8]; // anything greater than zero is received as a 1
return reply(null,values);
}
function writeRegisters(from,to,items,reply) {
console.log('Write registers '+from+'-'+to);
console.log(' items:'+items);
reply();
}
function bufferify(itemsArray) {
// When client reads values, have to supply an
// array of Buffers (not just an array of numbers) to the reply function.
var n = itemsArray.length;
var registers = [];
for (var i=0; i<n; i++) {
registers[i] = Buffer.alloc(2);
registers[i].writeInt16BE(itemsArray[i],0);
}
return registers;
}