You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.4 KiB
Markdown
91 lines
2.4 KiB
Markdown
---
|
|
icon: edit
|
|
date: 2022-12-26
|
|
category:
|
|
- nodejs
|
|
tag:
|
|
- modbus
|
|
headerDepth: 5
|
|
---
|
|
|
|
|
|
# nodejs 运行modbus
|
|
npm 安装 modbus-serial
|
|
```shell
|
|
npm install -g modbus-serial
|
|
```
|
|
modbus 客户端
|
|
```js
|
|
// create an empty modbus client
|
|
var ModbusRTU = require("modbus-serial");
|
|
var client = new ModbusRTU();
|
|
|
|
// open connection to a tcp line
|
|
client.connectTCP("127.0.0.1", { port: 8502 });
|
|
client.setID(1);
|
|
|
|
// read the values of 10 registers starting at address 0
|
|
// on device number 1. and log the values to the console.
|
|
setInterval(function() {
|
|
client.readHoldingRegisters(0, 10, function(err, data) {
|
|
if(data){
|
|
console.log(data.data);
|
|
}
|
|
});
|
|
}, 1000);
|
|
```
|
|
modbus 服务端
|
|
```js
|
|
// create an empty modbus client
|
|
var ModbusRTU = require("modbus-serial");
|
|
var vector = {
|
|
getInputRegister: function(addr, unitID) {
|
|
// Synchronous handling
|
|
return addr;
|
|
},
|
|
getHoldingRegister: function(addr, unitID, callback) {
|
|
// Asynchronous handling (with callback)
|
|
setTimeout(function() {
|
|
// callback = function(err, value)
|
|
callback(null, addr + 7000);
|
|
}, 10);
|
|
},
|
|
getCoil: function(addr, unitID) {
|
|
// Asynchronous handling (with Promises, async/await supported)
|
|
return new Promise(function(resolve) {
|
|
setTimeout(function() {
|
|
resolve((addr % 2) === 0);
|
|
}, 10);
|
|
});
|
|
},
|
|
setRegister: function(addr, value, unitID) {
|
|
// Asynchronous handling supported also here
|
|
console.log("set register", addr, value, unitID);
|
|
return;
|
|
},
|
|
setCoil: function(addr, value, unitID) {
|
|
// Asynchronous handling supported also here
|
|
console.log("set coil", addr, value, unitID);
|
|
return;
|
|
},
|
|
readDeviceIdentification: function(addr) {
|
|
return {
|
|
0x00: "MyVendorName",
|
|
0x01: "MyProductCode",
|
|
0x02: "MyMajorMinorRevision",
|
|
0x05: "MyModelName",
|
|
0x97: "MyExtendedObject1",
|
|
0xAB: "MyExtendedObject2"
|
|
};
|
|
}
|
|
};
|
|
|
|
// set the server to answer for modbus requests
|
|
console.log("ModbusTCP listening on modbus://0.0.0.0:8502");
|
|
var serverTCP = new ModbusRTU.ServerTCP(vector, { host: "0.0.0.0", port: 8502, debug: true, unitID: 1 });
|
|
|
|
serverTCP.on("socketError", function(err){
|
|
// Handle socket error if needed, can be ignored
|
|
console.error(err);
|
|
});
|
|
``` |