--- 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); }); ```